Name: series-workflowdg24k Phase: Succeeded StartedAt: 2026-07-07 19:44:03 +0000 UTC FinishedAt: 2026-07-08 00:31:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[0] Phase: Succeeded StartedAt: 2026-07-07 19:44:03 +0000 UTC FinishedAt: 2026-07-07 20:20:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 19:44:03 +0000 UTC FinishedAt: 2026-07-07 20:20:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "7fc2c3dcae28347a30ccd76c8817e5719005f1c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "7fc2c3dcae28347a30ccd76c8817e5719005f1c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER" ], "series_id": "46b53b8a-cf5c-49b2-960a-2259fe4b6b10" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "page_owner_write", "page_owner_open", "page_owner_release", "print_page_owner", "read_page_owner" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlX293bmVyX3dyaXRlJiMzNDssCiAgICAmIzM0O3BhZ2Vfb3duZXJfb3BlbiYjMzQ7LAogICAgJiMzNDtwYWdlX293bmVyX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7cHJpbnRfcGFnZV9vd25lciYjMzQ7LAogICAgJiMzNDtyZWFkX3BhZ2Vfb3duZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB3cml0ZSBoYW5kbGVyIChgcGFnZV9vd25lcl93cml0ZWApIGZvciB0aGUgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIGRlYnVnZnMgZmlsZSB0byBzdXBwb3J0IGZpbHRlcmluZy4gSXQgYWxzbyBtb2RpZmllcyB0aGUgcmVhZCBoYW5kbGVyIChgcmVhZF9wYWdlX293bmVyYCkgYW5kIG91dHB1dCBmb3JtYXR0aW5nIChgcHJpbnRfcGFnZV9vd25lcmApIHRvIGFwcGx5IHRoZSBmaWx0ZXJzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgcGFyc2luZyB1c2VyIGlucHV0IGFuZCBtYW5hZ2luZyBwZXItZmQgc3RhdGUsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmM4MmZkZmJhYTdlNjFkMDcwMjNkMmU3MmE4N2M0YTYxMzk2YTllNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMjA6MjA6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbmluZGV4IDZiMTJmM2IwMDdlYzkxLi4zODNlNTljNDI3NDNiZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbkBAIC02NSw3ICYjNDM7NjUsMTQgQEAgdW4tdHJhY2tpbmcgc3RhdGUuXG4gVXNhZ2VcbiA9PT09PVxuIFxuLTEpIEJ1aWxkIHVzZXItc3BhY2UgaGVscGVyOjpcbiYjNDM7MSkgQnVpbGQgdXNlci1zcGFjZSBoZWxwZXJzOjpcbiYjNDM7XG4mIzQzO1RvIGZpbHRlciBwYWdlX293bmVyIG91dHB1dDpcbiYjNDM7XG4mIzQzO1x0Y2QgdG9vbHMvbW1cbiYjNDM7XHRtYWtlIHBhZ2Vfb3duZXJfZmlsdGVyXG4mIzQzO1xuJiM0MztUbyBzb3J0IGFuZCBhbmFseXplIHBhZ2Vfb3duZXIgb3V0cHV0OlxuIFxuIFx0Y2QgdG9vbHMvbW1cbiBcdG1ha2UgcGFnZV9vd25lcl9zb3J0XG5AQCAtNzQsNyAmIzQzOzgxLDExIEBAIFVzYWdlXG4gXG4gMykgRG8gdGhlIGpvYiB0aGF0IHlvdSB3YW50IHRvIGRlYnVnLlxuIFxuLTQpIEFuYWx5emUgaW5mb3JtYXRpb24gZnJvbSBwYWdlIG93bmVyOjpcbiYjNDM7NCkgKE9wdGlvbmFsKSBGaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQ6OlxuJiM0MztcbiYjNDM7XHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbiAwLDEsMiBcdTAwM2UgZmlsdGVyZWRfcGFnZV9vd25lci50eHRcbiYjNDM7XG4mIzQzOzUpIEFuYWx5emUgaW5mb3JtYXRpb24gZnJvbSBwYWdlIG93bmVyOjpcbiBcbiBcdGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyX3N0YWNrcy9zaG93X3N0YWNrcyBcdTAwM2Ugc3RhY2tzLnR4dFxuIFx0Y2F0IHN0YWNrcy50eHRcbkBAIC0yNjMsMyAmIzQzOzI3NCw2NSBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuIFx0Zlx0XHRmcmVlXHRcdHdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90XG4gXHRzdFx0XHRzdGFja3RyYWNlXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXG4gXHRhdG9yXHRcdGFsbG9jYXRvclx0bWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXNcbiYjNDM7XG4mIzQzO0ZpbHRlcmluZyBwYWdlX293bmVyIG91dHB1dFxuJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztwYWdlX293bmVyIHN1cHBvcnRzIGZpbHRlcmluZyBvdXRwdXQgYXQgdGhlIGtlcm5lbCBsZXZlbCBiZWZvcmUgcmVhZGluZyxcbiYjNDM7d2hpY2ggcmVkdWNlcyB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBwcm9jZXNzZWQgaW4gdXNlcnNwYWNlLlxuJiM0MztcbiYjNDM7VGhlIHBhZ2Vfb3duZXJfZmlsdGVyIHRvb2wgcHJvdmlkZXMgYSBjb252ZW5pZW50IGludGVyZmFjZSBmb3IgdGhpcyBmaWx0ZXJpbmdcbiYjNDM7Y2FwYWJpbGl0eS4gSXQgc3VwcG9ydHMgdHdvIHR5cGVzIG9mIGZpbHRlcnM6XG4mIzQzO1xuJiM0MzsxLiAqKnByaW50X21vZGUgZmlsdGVyKio6IENvbnRyb2wgd2hhdCBpbmZvcm1hdGlvbiBpcyBwcmludGVkIGZvciBlYWNoIHBhZ2VcbiYjNDM7XHQtIGBgc3RhY2tgYDogUHJpbnQgZnVsbCBzdGFjayB0cmFjZXMgKGRlZmF1bHQsIGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyB1c2FnZSlcbiYjNDM7XHQtIGBgaGFuZGxlYGA6IFByaW50IG9ubHkgc3RhY2sgaGFuZGxlIG51bWJlcnMgKG11Y2ggZmFzdGVyLCBzbWFsbGVyIG91dHB1dClcbiYjNDM7XHQtIGBgc3RhY2tfaGFuZGxlYGA6IFByaW50IGJvdGggc3RhY2sgdHJhY2VzIGFuZCBoYW5kbGUgbnVtYmVyc1xuJiM0MztcbiYjNDM7XHRUaGUgYGBoYW5kbGVgYCBtb2RlIHVzZXMgbnVtZXJpYyBpZGVudGlmaWVycyBpbnN0ZWFkIG9mIGZ1bGwgc3RhY2sgdHJhY2VzLlxuJiM0MztcdFRoZSBtYXBwaW5nIGZyb20gaGFuZGxlcyB0byBhY3R1YWwgc3RhY2sgdHJhY2VzIGNhbiBiZSBvYnRhaW5lZCB2aWEgdGhlXG4mIzQzO1x0c2hvd19zdGFja3NfaGFuZGxlcyBpbnRlcmZhY2UuXG4mIzQzO1xuJiM0MzsyLiAqKk5VTUEgbm9kZSBmaWx0ZXIqKjogRmlsdGVyIHBhZ2VzIGJ5IE5VTUEgbm9kZSBJRFxuJiM0MztcdC0gU3VwcG9ydHMgc2luZ2xlIG5vZGU6IGBgLW4gMGBgXG4mIzQzO1x0LSBNdWx0aXBsZSBub2RlczogYGAtbiAwLDEsMmBgXG4mIzQzO1x0LSBSYW5nZXM6IGBgLW4gMC0zYGBcbiYjNDM7XHQtIE1peGVkIGZvcm1hdDogYGAtbiAwLDItMyw1YGBcbiYjNDM7XG4mIzQzO1VzYWdlIGV4YW1wbGVzOjpcbiYjNDM7XG4mIzQzO1x0IyBGaWx0ZXIgYnkgcHJpbnQgbW9kZVxuJiM0MztcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGVcbiYjNDM7XG4mIzQzO1x0IyBGaWx0ZXIgYnkgTlVNQSBub2RlXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwLTNcbiYjNDM7XG4mIzQzO1x0IyBDb21iaW5lZCBmaWx0ZXJzXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFjayAtbiAwLDEsMlxuJiM0MztcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1uIDAsMi0zXG4mIzQzO1xuJiM0MztcdCMgU2F2ZSB0byBmaWxlXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGUgLW8gZmlsdGVyZWRfb3V0cHV0LnR4dFxuJiM0MztcbiYjNDM7VGhlIGhhbmRsZSBtb2RlIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIG1vbml0b3JpbmcgYW5kIHBlcmZvcm1hbmNlLWNyaXRpY2FsXG4mIzQzO3NjZW5hcmlvcyBhcyBpdCBkcmFtYXRpY2FsbHkgcmVkdWNlcyBvdXRwdXQgc2l6ZS4gVGVzdGluZyBzaG93cyBoYW5kbGUgbW9kZSBjYW5cbiYjNDM7cmVkdWNlIG91dHB1dCBzaXplIGJ5IH42NiUgKDg0TUIgdnMgMjQ0TUIpIGFuZCBpbXByb3ZlIHJlYWQgcGVyZm9ybWFuY2UgYnkgfjQuNHhcbiYjNDM7Y29tcGFyZWQgdG8gZnVsbCBzdGFjayBvdXRwdXQuXG4mIzQzO1xuJiM0MztUaGUgTlVNQSBub2RlIGZpbHRlciBpcyB1c2VmdWwgZm9yIE5VTUEtYXdhcmUgbWVtb3J5IGFsbG9jYXRpb24gYW5hbHlzaXMgYW5kIGRlYnVnZ2luZy5cbiYjNDM7XG4mIzQzO0JlaGluZCB0aGUgc2NlbmVzLCBwYWdlX293bmVyX2ZpbHRlciBvcGVucyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIGFuZFxuJiM0Mzt3cml0ZXMgZmlsdGVyIGNvbW1hbmRzIGJlZm9yZSByZWFkaW5nIHRoZSBmaWx0ZXJlZCBvdXRwdXQuIFRoZSBmaWx0ZXJpbmcgdXNlc1xuJiM0MztwZXItZmlsZS1kZXNjcmlwdG9yIHN0YXRlLCBhbGxvd2luZyBlYWNoIG9wZW4oKSB0byBoYXZlIGluZGVwZW5kZW50IGZpbHRlciBzZXR0aW5ncy5cbiYjNDM7XG4mIzQzO0VhY2ggZmlsZSBkZXNjcmlwdG9yIG1haW50YWlucyBpdHMgb3duIGZpbHRlciBzdGF0ZSwgc28geW91IGNhbiBoYXZlIG11bHRpcGxlXG4mIzQzO2luZGVwZW5kZW50IGZpbHRlcmluZyBvcGVyYXRpb25zIHJ1bm5pbmcgY29uY3VycmVudGx5LiBGb3IgZXhhbXBsZSwgaW4gZGlmZmVyZW50XG4mIzQzO3Rlcm1pbmFscyB5b3UgY2FuIHJ1biBkaWZmZXJlbnQgZmlsdGVycyBzaW11bHRhbmVvdXNseTo6XG4mIzQzO1xuJiM0MztcdCMgVGVybWluYWwgMTogRmlsdGVyIG5vZGUgMFxuJiM0MztcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMCBcdTAwM2Ugbm9kZTBfb3V0cHV0LnR4dFxuJiM0MztcbiYjNDM7XHQjIFRlcm1pbmFsIDI6IEZpbHRlciBub2RlIDEgKHJ1bnMgY29uY3VycmVudGx5KVxuJiM0MztcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMSBcdTAwM2Ugbm9kZTFfb3V0cHV0LnR4dFxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuY1xuaW5kZXggODE3OGUwYmU1NTdmODcuLmYxZDRjMjA1YWZmOTc5IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9vd25lci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX293bmVyLmNcbkBAIC01NCw2ICYjNDM7NTQsMjQgQEAgc3RydWN0IHN0YWNrX3ByaW50X2N0eCB7XG4gXHR1OCBmbGFncztcbiB9O1xuIFxuJiM0MztlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSB7XG4mIzQzO1x0UEFHRV9PV05FUl9QUklOVF9TVEFDSyxcbiYjNDM7XHRQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSxcbiYjNDM7XHRQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGFnZV9vd25lcl9wcmludF9tb2RlX3N0cmluZ3NbXSA9IHtcbiYjNDM7XHRbUEFHRV9PV05FUl9QUklOVF9TVEFDS11cdD0gXCYjMzQ7c3RhY2tcJiMzNDssXG4mIzQzO1x0W1BBR0VfT1dORVJfUFJJTlRfSEFORExFXVx0PSBcJiMzNDtoYW5kbGVcJiMzNDssXG4mIzQzO1x0W1BBR0VfT1dORVJfUFJJTlRfU1RBQ0tfSEFORExFXVx0PSBcJiMzNDtzdGFja19oYW5kbGVcJiMzNDssXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUge1xuJiM0MztcdGVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIHByaW50X21vZGU7XG4mIzQzO1x0bm9kZW1hc2tfdCBuaWRfZmlsdGVyO1xuJiM0MztcdGJvb2wgbmlkX2ZpbHRlcl9lbmFibGVkO1xuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgYm9vbCBwYWdlX293bmVyX2VuYWJsZWQgX19pbml0ZGF0YTtcbiBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwYWdlX293bmVyX2luaXRlZCk7XG4gXG5AQCAtNTQ3LDE2ICYjNDM7NTY1LDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIHN0YXRpYyBzc2l6ZV90XG4gcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXIsXG4tXHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZSlcbiYjNDM7XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZSxcbiYjNDM7XHRcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0aW50IHJldCwgcGFnZWJsb2NrX210LCBwYWdlX210O1xuIFx0Y2hhciAqa2J1ZjtcbiYjNDM7XHRlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBwcmludF9tb2RlO1xuIFxuIFx0Y291bnQgPSBtaW5fdChzaXplX3QsIGNvdW50LCBQQUdFX1NJWkUpO1xuIFx0a2J1ZiA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFrYnVmKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiYjNDM7XHRwcmludF9tb2RlID0gc3RhdGUtXHUwMDNlcHJpbnRfbW9kZTtcbiYjNDM7XG4gXHRyZXQgPSBzY25wcmludGYoa2J1ZiwgY291bnQsXG4gXHRcdFx0XCYjMzQ7UGFnZSBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUgbnNcXG5cJiMzNDssXG4gXHRcdFx0cGFnZV9vd25lci1cdTAwM2VvcmRlciwgcGFnZV9vd25lci1cdTAwM2VnZnBfbWFzayxcbkBAIC01NzUsOSAmIzQzOzU5NywxOCBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdFx0bWlncmF0ZXR5cGVfbmFtZXNbcGFnZWJsb2NrX210XSxcbiBcdFx0XHRcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiBcbi1cdHJldCAmIzQzOz0gc3RhY2tfZGVwb3Rfc25wcmludChoYW5kbGUsIGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwgMCk7XG4tXHRpZiAocmV0IFx1MDAzZT0gY291bnQpXG4tXHRcdGdvdG8gZXJyO1xuJiM0MztcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfSEFORExFKSB7XG4mIzQzO1x0XHRyZXQgJiM0Mzs9IHN0YWNrX2RlcG90X3NucHJpbnQoaGFuZGxlLCBrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsIDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2U9IGNvdW50KVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfU1RBQ0spIHtcbiYjNDM7XHRcdHJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwgXCYjMzQ7aGFuZGxlOiAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgaGFuZGxlKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSBjb3VudClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xuIFx0XHRyZXQgJiM0Mzs9IHNjbnByaW50ZihrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsXG5AQCAtNjY0LDYgJiM0Mzs2OTUsNyBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcbiBcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xuIFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuJiM0MztcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcbiBcdGlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTc0MCwxNSAmIzQzOzc3MiwzMSBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0XHRpZiAoIWhhbmRsZSlcbiBcdFx0XHRnb3RvIGV4dF9wdXRfY29udGludWU7XG4gXG4mIzQzO1x0XHRpZiAoc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkKSB7XG4mIzQzO1x0XHRcdGludCBuaWQ7XG4mIzQzO1x0XHRcdG1lbWRlc2NfZmxhZ3NfdCBwYWdlX2ZsYWdzID0gUkVBRF9PTkNFKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQnlwYXNzIFBGX1BPSVNPTkVEX0NIRUNLKCkgaW4gcGFnZV90b19uaWQoKSB0byBhdm9pZFxuJiM0MztcdFx0XHQgKiBWTV9CVUdfT04gd2hlbiBhY2Nlc3NpbmcgcG9pc29uZWQgcGFnZXMuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAocGFnZV9mbGFncy5mID09IFBBR0VfUE9JU09OX1BBVFRFUk4pXG4mIzQzO1x0XHRcdFx0Z290byBleHRfcHV0X2NvbnRpbnVlO1xuJiM0MztcdFx0XHRuaWQgPSBtZW1kZXNjX25pZChwYWdlX2ZsYWdzKTtcbiYjNDM7XHRcdFx0aWYgKCFub2RlX2lzc2V0KG5pZCwgc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcikpXG4mIzQzO1x0XHRcdFx0Z290byBleHRfcHV0X2NvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LyogUmVjb3JkIHRoZSBuZXh0IFBGTiB0byByZWFkIGluIHRoZSBmaWxlIG9mZnNldCAqL1xuIFx0XHQqcHBvcyA9IHBmbiAmIzQzOyAxO1xuIFxuIFx0XHRwYWdlX293bmVyX3RtcCA9ICpwYWdlX293bmVyO1xuIFx0XHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xuIFx0XHRyZXR1cm4gcHJpbnRfcGFnZV9vd25lcihidWYsIGNvdW50LCBwZm4sIHBhZ2UsXG4tXHRcdFx0XHRcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlKTtcbiYjNDM7XHRcdFx0XHRcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlLCBzdGF0ZSk7XG4gZXh0X3B1dF9jb250aW51ZTpcbiBcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtODQ3LDcgJiM0Mzs4OTUsMTEzIEBAIHN0YXRpYyB2b2lkIGluaXRfZWFybHlfYWxsb2NhdGVkX3BhZ2VzKHZvaWQpXG4gXHRcdGluaXRfcGFnZXNfaW5fem9uZSh6b25lKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZTtcbiYjNDM7XG4mIzQzO1x0c3RhdGUgPSBremFsbG9jX29iaigqc3RhdGUpO1xuJiM0MztcdGlmICghc3RhdGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0c3RhdGUtXHUwMDNlcHJpbnRfbW9kZSA9IFBBR0VfT1dORVJfUFJJTlRfU1RBQ0s7XG4mIzQzO1x0bm9kZXNfY2xlYXIoc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcik7XG4mIzQzO1x0c3RhdGUtXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkID0gZmFsc2U7XG4mIzQzO1x0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBzdGF0ZTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwYWdlX293bmVyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRrZnJlZShmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHBhZ2Vfb3duZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4mIzQzO1x0XHRcdFx0IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqa2J1ZjtcbiYjNDM7XHRjaGFyICpvcmlnO1xuJiM0MztcdGNoYXIgKnRva2VuO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuJiM0MztcdGVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIG5ld19wcmludF9tb2RlO1xuJiM0MztcdG5vZGVtYXNrX3QgbmV3X25pZF9maWx0ZXI7XG4mIzQzO1x0Ym9vbCBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1heGltdW0gaW5wdXQgbGVuZ3RoIGZvciBmaWx0ZXIgY29tbWFuZHM6XG4mIzQzO1x0ICogLSAzMjogcHJpbnRfbW9kZSBjb21tYW5kIG1heCBsZW5ndGggaXMgMTcgKFwmIzM0O21vZGU9c3RhY2tfaGFuZGxlXCYjMzQ7KVxuJiM0MztcdCAqICAgICAgICB3aXRoIHN1ZmZpY2llbnQgYnVmZmVyXG4mIzQzO1x0ICogLSA2ICogTUFYX05VTU5PREVTOiB3b3JzdCBjYXNlIGZvciBuaWQgbGlzdFxuJiM0MztcdCAqICAgV29yc3QgY2FzZSBwZXIgbm9kZTogXCYjMzQ7LE5OTk5OXCYjMzQ7IChjb21tYSAmIzQzOyA1LWRpZ2l0IG5vZGUgbnVtYmVyKSA9IDYgYnl0ZXNcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY291bnQgXHUwMDNlIDMyICYjNDM7IDYgKiBNQVhfTlVNTk9ERVMpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0a2J1ZiA9IG1lbWR1cF91c2VyX251bChidWYsIGNvdW50KTtcbiYjNDM7XHRpZiAoSVNfRVJSKGtidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoa2J1Zik7XG4mIzQzO1xuJiM0MztcdG9yaWcgPSBrYnVmO1xuJiM0MztcbiYjNDM7XHRuZXdfcHJpbnRfbW9kZSA9IHN0YXRlLVx1MDAzZXByaW50X21vZGU7XG4mIzQzO1x0bmV3X25pZF9maWx0ZXIgPSBzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyO1xuJiM0MztcdG5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSBzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgodG9rZW4gPSBzdHJzZXAoXHUwMDI2a2J1ZiwgXCYjMzQ7IFxcdFxcblwmIzM0OykpICE9IE5VTEwpIHtcbiYjNDM7XHRcdGlmICgqdG9rZW4gPT0gJiMzOTtcXDAmIzM5OylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzdHJuY21wKHRva2VuLCBcJiMzNDttb2RlPVwmIzM0OywgNSkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gc3lzZnNfbWF0Y2hfc3RyaW5nKHBhZ2Vfb3duZXJfcHJpbnRfbW9kZV9zdHJpbmdzLFxuJiM0MztcdFx0XHRcdFx0XHR0b2tlbiAmIzQzOyA1KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcdFx0XHRuZXdfcHJpbnRfbW9kZSA9IHJldDtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoIXN0cm5jbXAodG9rZW4sIFwmIzM0O25pZD1cJiMzNDssIDQpKSB7XG4mIzQzO1x0XHRcdHJldCA9IG5vZGVsaXN0X3BhcnNlKHRva2VuICYjNDM7IDQsIG5ld19uaWRfZmlsdGVyKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKG5vZGVzX2VtcHR5KG5ld19uaWRfZmlsdGVyKSkge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogV2Ugd2FudCB0byBmaWx0ZXIgbWVtb3J5IGFsbG9jYXRpb25zIGJ5IG51bWEgbm9kZXMsIHNvIG1ha2Ugc3VyZVxuJiM0MztcdFx0XHQgKiB0aGF0IHRoZSBzcGVjaWZpZWQgbm9kZXMgaGF2ZSBtZW1vcnkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoIW5vZGVzX3N1YnNldChuZXdfbmlkX2ZpbHRlciwgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKSkge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0bmV3X25pZF9maWx0ZXJfZW5hYmxlZCA9IHRydWU7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQ29tbWl0IGFsbCBmaWx0ZXIgY2hhbmdlcyAqL1xuJiM0MztcdHN0YXRlLVx1MDAzZXByaW50X21vZGUgPSBuZXdfcHJpbnRfbW9kZTtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyID0gbmV3X25pZF9maWx0ZXI7XG4mIzQzO1x0c3RhdGUtXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkID0gbmV3X25pZF9maWx0ZXJfZW5hYmxlZDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gY291bnQ7XG4mIzQzO1xuJiM0MztvdXRfZnJlZTpcbiYjNDM7XHRrZnJlZShvcmlnKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfZm9wcyA9IHtcbiYjNDM7XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiYjNDM7XHQub3Blblx0XHQ9IHBhZ2Vfb3duZXJfb3BlbixcbiYjNDM7XHQucmVsZWFzZVx0PSBwYWdlX293bmVyX3JlbGVhc2UsXG4mIzQzO1x0LndyaXRlXHRcdD0gcGFnZV9vd25lcl93cml0ZSxcbiBcdC5yZWFkXHRcdD0gcmVhZF9wYWdlX293bmVyLFxuIFx0Lmxsc2Vla1x0XHQ9IGxzZWVrX3BhZ2Vfb3duZXIsXG4gfTtcbkBAIC05ODAsNyAmIzQzOzExMzQsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cGFnZV9vd25lclwmIzM0OywgMDQwMCwgTlVMTCwgTlVMTCwgXHUwMDI2cGFnZV9vd25lcl9mb3BzKTtcbiYjNDM7XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3BhZ2Vfb3duZXJcJiMzNDssIDA2MDAsIE5VTEwsIE5VTEwsIFx1MDAyNnBhZ2Vfb3duZXJfZm9wcyk7XG4gXHRkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXCYjMzQ7cGFnZV9vd25lcl9zdGFja3NcJiMzNDssIE5VTEwpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzaG93X3N0YWNrc1wmIzM0OywgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlXG5pbmRleCBmNTcyNWI1YzIzYWEyNi4uODU4MTg2YTZlZWZkYmQgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vTWFrZWZpbGVcbkBAIC0zLDcgJiM0MzszLDcgQEBcbiAjXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcbiBcbi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4mIzQzO0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHNcbiBcbiBMSUJfRElSID0gLi4vbGliL2FwaVxuQEAgLTIzLDcgJiM0MzsyMyw3IEBAICQoTElCUyk6XG4gXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFx1MDAzYyAkKExERkxBR1MpXG4gXG4gY2xlYW46XG4tXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MztcdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4gXHRtYWtlIC1DICQoTElCX0RJUikgY2xlYW5cbiBcbiBzYmluZGlyID89IC91c3Ivc2JpblxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmMgYi90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjFkMWYwYTM4Njc4YTJmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jXG5AQCAtMCwwICYjNDM7MSwzMTAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogVXNlci1zcGFjZSBoZWxwZXIgdG8gZmlsdGVyIHBhZ2Vfb3duZXIgb3V0cHV0IHBlci1mZFxuJiM0MzsgKlxuJiM0MzsgKiBFeGFtcGxlIHVzZTpcbiYjNDM7ICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZVxuJiM0MzsgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gc3RhY2tfaGFuZGxlXG4mIzQzOyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbiAwLDEsMlxuJiM0MzsgKlxuJiM0MzsgKiBTZWUgRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2N0eXBlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZ2V0b3B0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUFYX0NNRF9MRU5cdDUxMlxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZylcbiYjNDM7e1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtVc2FnZTogJXMgW09QVElPTlNdXFxuXCYjMzQ7LCBwcm9nKTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFxuT3B0aW9uczpcXG5cJiMzNDspO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgIC1tLCAtLW1vZGUgTU9ERSAgICAgIDogcHJpbnRfbW9kZSAoc3RhY2ssIGhhbmRsZSwgb3Igc3RhY2tfaGFuZGxlKVxcblwmIzM0Oyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgLW4sIC0tbmlkIE5JRF9MSVNUICAgOiBOVU1BIG5vZGUgSURzIChjb21tYS1zZXBhcmF0ZWQgb3IgcmFuZ2VzKVxcblwmIzM0Oyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgLW8sIC0tb3V0cHV0IEZJTEUgICAgOiBvdXRwdXQgZmlsZSAoZGVmYXVsdDogc3Rkb3V0KVxcblwmIzM0Oyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgLWgsIC0taGVscCAgICAgICAgICAgOiBzaG93IHRoaXMgaGVscCBtZXNzYWdlXFxuXCYjMzQ7KTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFxuRXhhbXBsZXM6XFxuXCYjMzQ7KTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAlcyAtbSBzdGFja1xcblwmIzM0OywgcHJvZyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgJXMgLW0gaGFuZGxlXFxuXCYjMzQ7LCBwcm9nKTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAlcyAtbSBzdGFja19oYW5kbGVcXG5cJiMzNDssIHByb2cpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgICVzIC1tIHN0YWNrIC1vIG91dHB1dC50eHRcXG5cJiMzNDssIHByb2cpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgICVzIC1uIDAsMSwyXFxuXCYjMzQ7LCBwcm9nKTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAlcyAtbSBzdGFjayAtbiAwXFxuXCYjMzQ7LCBwcm9nKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2YWxpZGF0ZV9tb2RlKGNvbnN0IGNoYXIgKm1vZGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc3RyY21wKG1vZGUsIFwmIzM0O3N0YWNrXCYjMzQ7KSA9PSAwIHx8XG4mIzQzO1x0ICAgIHN0cmNtcChtb2RlLCBcJiMzNDtoYW5kbGVcJiMzNDspID09IDAgfHxcbiYjNDM7XHQgICAgc3RyY21wKG1vZGUsIFwmIzM0O3N0YWNrX2hhbmRsZVwmIzM0OykgPT0gMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IEludmFsaWQgbW9kZSAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG1vZGUpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtWYWxpZCBtb2Rlczogc3RhY2ssIGhhbmRsZSwgc3RhY2tfaGFuZGxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gLTE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdmFsaWRhdGVfbmlkX2xpc3QoY29uc3QgY2hhciAqbmlkX2xpc3QpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpwO1xuJiM0MztcdGludCBpID0gMDtcbiYjNDM7XHRpbnQgaGFzX2RpZ2l0ID0gMDtcbiYjNDM7XHRpbnQgaW5fcmFuZ2UgPSAwO1xuJiM0MztcdGludCBwcmV2X251bSA9IDA7XG4mIzQzO1x0aW50IGN1cnJfbnVtID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuaWRfbGlzdCB8fCBzdHJsZW4obmlkX2xpc3QpID09IDApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChwID0gbmlkX2xpc3Q7ICpwOyBwJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCpwID09ICYjMzk7LCYjMzk7KSB7XG4mIzQzO1x0XHRcdGlmICghaGFzX2RpZ2l0KSB7XG4mIzQzO1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmIChpbl9yYW5nZSBcdTAwMjZcdTAwMjYgcHJldl9udW0gXHUwMDNlIGN1cnJfbnVtKSB7XG4mIzQzO1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDtFcnJvcjogSW52YWxpZCByYW5nZSAlZC0lZCAoc3RhcnQgbXVzdCBiZSBcdTAwM2M9IGVuZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRwcmV2X251bSwgY3Vycl9udW0pO1xuJiM0MztcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpID0gMDtcbiYjNDM7XHRcdFx0aGFzX2RpZ2l0ID0gMDtcbiYjNDM7XHRcdFx0aW5fcmFuZ2UgPSAwO1xuJiM0MztcdFx0XHRwcmV2X251bSA9IDA7XG4mIzQzO1x0XHRcdGN1cnJfbnVtID0gMDtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCpwID09ICYjMzk7LSYjMzk7KSB7XG4mIzQzO1x0XHRcdGlmICghaGFzX2RpZ2l0KSB7XG4mIzQzO1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDtFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXQgXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKHN0ZGVycixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0OyhkYXNoIHdpdGhvdXQgcHJlY2VkaW5nIG51bWJlcilcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoaW5fcmFuZ2UpIHtcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IE11bHRpcGxlIGRhc2hlcyBpbiBuaWRfbGlzdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHByZXZfbnVtID0gY3Vycl9udW07XG4mIzQzO1x0XHRcdGN1cnJfbnVtID0gMDtcbiYjNDM7XHRcdFx0aSA9IDA7XG4mIzQzO1x0XHRcdGhhc19kaWdpdCA9IDA7XG4mIzQzO1x0XHRcdGluX3JhbmdlID0gMTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpwKSkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IEludmFsaWQgY2hhcmFjdGVyICYjMzk7JWMmIzM5OyBpbiBuaWRfbGlzdFxcblwmIzM0OywgKnApO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKGkgXHUwMDNlIDUpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOiBOSUQgdG9vIGxvbmcgKG1heCA2NTUzNilcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRjdXJyX251bSA9IGN1cnJfbnVtICogMTAgJiM0MzsgKCpwIC0gJiMzOTswJiMzOTspO1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRoYXNfZGlnaXQgPSAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFoYXNfZGlnaXQpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGluX3JhbmdlIFx1MDAyNlx1MDAyNiBwcmV2X251bSBcdTAwM2UgY3Vycl9udW0pIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLFxuJiM0MztcdFx0XHRcJiMzNDtFcnJvcjogSW52YWxpZCByYW5nZSAlZC0lZCAoc3RhcnQgbXVzdCBiZSBcdTAwM2M9IGVuZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByZXZfbnVtLCBjdXJyX251bSk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKm91dHB1dF9maWxlID0gTlVMTDtcbiYjNDM7XHRjaGFyIGZpbHRlcl9jbWRbTUFYX0NNRF9MRU5dO1xuJiM0MztcdEZJTEUgKm91dHB1dCA9IE5VTEw7XG4mIzQzO1x0aW50IGZkID0gLTE7XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1x0Y2hhciBidWZbNDA5Nl07XG4mIzQzO1x0aW50IG9wdDtcbiYjNDM7XHRzaXplX3QgY21kX2xlbiA9IDA7XG4mIzQzO1xuJiM0MztcdHNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTtcbiYjNDM7XG4mIzQzO1x0c3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7XG4mIzQzO1x0XHR7XCYjMzQ7bW9kZVwmIzM0OyxcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAmIzM5O20mIzM5O30sXG4mIzQzO1x0XHR7XCYjMzQ7bmlkXCYjMzQ7LFx0XHRyZXF1aXJlZF9hcmd1bWVudCwgMCwgJiMzOTtuJiMzOTt9LFxuJiM0MztcdFx0e1wmIzM0O291dHB1dFwmIzM0OyxcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAmIzM5O28mIzM5O30sXG4mIzQzO1x0XHR7XCYjMzQ7aGVscFwmIzM0OyxcdG5vX2FyZ3VtZW50LFx0ICAgMCwgJiMzOTtoJiMzOTt9LFxuJiM0MztcdFx0ezAsIDAsIDAsIDB9XG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0ZmlsdGVyX2NtZFswXSA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1xuJiM0MztcdGlmIChhcmdjIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgYXJnYzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHN0cmNtcChhcmd2W2ldLCBcJiMzNDstaFwmIzM0OykgPT0gMCB8fCBzdHJjbXAoYXJndltpXSwgXCYjMzQ7LS1oZWxwXCYjMzQ7KSA9PSAwKSB7XG4mIzQzO1x0XHRcdFx0dXNhZ2UoYXJndlswXSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIGlmIHBhZ2Vfb3duZXIgZXhpc3RzIGFuZCBpcyByZWFkYWJsZSAqL1xuJiM0MztcdGlmIChhY2Nlc3MoXCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclwmIzM0OywgRl9PSykgIT0gMCkge1xuJiM0MztcdFx0aWYgKGVycm5vID09IEVOT0VOVClcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOiAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIGRvZXMgbm90IGV4aXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGVycm9yKFwmIzM0O0Vycm9yIGFjY2Vzc2luZyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXCYjMzQ7KTtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtNYWtlIHN1cmUgcGFnZV9vd25lciBpcyBlbmFibGVkIGluIGtlcm5lbFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgXCYjMzQ7bTpuOm86aFwmIzM0OywgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpIHtcbiYjNDM7XHRcdGludCBsZW47XG4mIzQzO1xuJiM0MztcdFx0c3dpdGNoIChvcHQpIHtcbiYjNDM7XHRcdGNhc2UgJiMzOTttJiMzOTs6IHtcbiYjNDM7XHRcdFx0Y29uc3QgY2hhciAqbW9kZSA9IG9wdGFyZztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh2YWxpZGF0ZV9tb2RlKG1vZGUpIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0XHRsZW4gPSBzbnByaW50ZihmaWx0ZXJfY21kICYjNDM7IGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7JXNtb2RlPSVzXCYjMzQ7LCBjbWRfbGVuIFx1MDAzZSAwID8gXCYjMzQ7IFwmIzM0OyA6IFwmIzM0O1wmIzM0OywgbW9kZSk7XG4mIzQzO1x0XHRcdGlmIChsZW4gXHUwMDNjIDAgfHwgY21kX2xlbiAmIzQzOyBsZW4gXHUwMDNlPSBNQVhfQ01EX0xFTikge1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogQ29tbWFuZCB0b28gbG9uZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0Y21kX2xlbiAmIzQzOz0gbGVuO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhc2UgJiMzOTtuJiMzOTs6IHtcbiYjNDM7XHRcdFx0Y29uc3QgY2hhciAqbmlkX2xpc3QgPSBvcHRhcmc7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodmFsaWRhdGVfbmlkX2xpc3QobmlkX2xpc3QpIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0XHRsZW4gPSBzbnByaW50ZihmaWx0ZXJfY21kICYjNDM7IGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7JXNuaWQ9JXNcJiMzNDssIGNtZF9sZW4gXHUwMDNlIDAgPyBcJiMzNDsgXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LCBuaWRfbGlzdCk7XG4mIzQzO1x0XHRcdGlmIChsZW4gXHUwMDNjIDAgfHwgY21kX2xlbiAmIzQzOyBsZW4gXHUwMDNlPSBNQVhfQ01EX0xFTikge1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogQ29tbWFuZCB0b28gbG9uZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0Y21kX2xlbiAmIzQzOz0gbGVuO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhc2UgJiMzOTtvJiMzOTs6XG4mIzQzO1x0XHRcdG91dHB1dF9maWxlID0gb3B0YXJnO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtoJiMzOTs6XG4mIzQzO1x0XHRcdC8qIEFscmVhZHkgaGFuZGxlZCBhYm92ZSAqL1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHVzYWdlKGFyZ3ZbMF0pO1xuJiM0MztcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEF0IGxlYXN0IG9uZSBmaWx0ZXIgbXVzdCBiZSBzcGVjaWZpZWQgKi9cbiYjNDM7XHRpZiAoY21kX2xlbiA9PSAwKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IEF0IGxlYXN0IG9uZSBmaWx0ZXIgKC1tIG9yIC1uKSBtdXN0IGJlIHNwZWNpZmllZFxcblxcblwmIzM0Oyk7XG4mIzQzO1x0XHR1c2FnZShhcmd2WzBdKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogT3BlbiBwYWdlX293bmVyIGZvciByZWFkLXdyaXRlIC0gdGhpcyB3aWxsIGZhaWwgaWYga2VybmVsIGRvZXNuJiMzOTt0IHN1cHBvcnQgd3JpdGUgKi9cbiYjNDM7XHRmZCA9IG9wZW4oXCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclwmIzM0OywgT19SRFdSKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFQUNDRVMgfHwgZXJybm8gPT0gRVBFUk0pIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOiAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtkb2VzIG5vdCBzdXBwb3J0IHdyaXRlIGFjY2Vzc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtUaGlzIGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtwZXItZmQgZmlsdGVyaW5nLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtQbGVhc2UgZW5zdXJlIHlvdSBoYXZlIGEga2VybmVsIHdpdGggXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3Blci1mZCBmaWx0ZXJpbmcgc3VwcG9ydC5cXG5cJiMzNDspO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cGVycm9yKFwmIzM0O0Vycm9yIG9wZW5pbmcgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvdXRwdXRfZmlsZSkge1xuJiM0MztcdFx0b3V0cHV0ID0gZm9wZW4ob3V0cHV0X2ZpbGUsIFwmIzM0O3dcJiMzNDspO1xuJiM0MztcdFx0aWYgKCFvdXRwdXQpIHtcbiYjNDM7XHRcdFx0cGVycm9yKFwmIzM0O29wZW4gb3V0cHV0IGZpbGVcJiMzNDspO1xuJiM0MztcdFx0XHRjbG9zZShmZCk7XG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRvdXRwdXQgPSBzdGRvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB3cml0ZShmZCwgZmlsdGVyX2NtZCwgc3RybGVuKGZpbHRlcl9jbWQpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0aWYgKGVycm5vID09IEVJTlZBTCkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IEtlcm5lbCByZWplY3RlZCB0aGUgZmlsdGVyIGNvbW1hbmQuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1Bvc3NpYmxlIGNhdXNlczpcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAtIEtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHBlci1mZCBmaWx0ZXJpbmdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAtIE5VTUEgbm9kZSBoYXMgbm8gbWVtb3J5XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgLSBVbmtub3duIHJlYXNvblxcblwmIzM0Oyk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwZXJyb3IoXCYjMzQ7d3JpdGUgZmlsdGVyIGNvbW1hbmRcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoKHNpemVfdClyZXQgIT0gc3RybGVuKGZpbHRlcl9jbWQpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1dhcm5pbmc6IFBhcnRpYWwgd3JpdGUgKCV6ZC8lenUpXFxuXCYjMzQ7LCByZXQsIHN0cmxlbihmaWx0ZXJfY21kKSk7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgYW5kIGRpc3BsYXkgZmlsdGVyZWQgb3V0cHV0ICovXG4mIzQzO1x0cmV0ID0gMDtcbiYjNDM7XHR3aGlsZSAoKHJldCA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSBcdTAwM2UgMCkge1xuJiM0MztcdFx0c2l6ZV90IHdyaXR0ZW4gPSBmd3JpdGUoYnVmLCAxLCByZXQsIG91dHB1dCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHdyaXR0ZW4gIT0gKHNpemVfdClyZXQpIHtcbiYjNDM7XHRcdFx0aWYgKGVycm5vID09IEVQSVBFKSB7XG4mIzQzO1x0XHRcdFx0LyogUGlwZSBjbG9zZWQsIHRyZWF0IGFzIHN1Y2Nlc3MgKi9cbiYjNDM7XHRcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHBlcnJvcihcJiMzNDt3cml0ZSBvdXRwdXRcJiMzNDspO1xuJiM0MztcdFx0XHRyZXQgPSAtMTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwZXJyb3IoXCYjMzQ7cmVhZCBwYWdlX293bmVyXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGZmbHVzaChvdXRwdXQpKSB7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRVBJUEUpIHtcbiYjNDM7XHRcdFx0LyogUGlwZSBjbG9zZWQsIHRyZWF0IGFzIHN1Y2Nlc3MgKi9cbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHBlcnJvcihcJiMzNDtmbHVzaCBvdXRwdXRcJiMzNDspO1xuJiM0MztcdFx0XHRyZXQgPSAtMTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdGlmIChvdXRwdXQgIT0gc3Rkb3V0KVxuJiM0MztcdFx0ZmNsb3NlKG91dHB1dCk7XG4mIzQzO1x0cmV0dXJuIHJldCBcdTAwM2MgMCA/IDEgOiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFHRV9PV05FUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2Vfb3duZXJfd3JpdGUmIzM0OywKICAgICYjMzQ7cGFnZV9vd25lcl9vcGVuJiMzNDssCiAgICAmIzM0O3BhZ2Vfb3duZXJfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtwcmludF9wYWdlX293bmVyJiMzNDssCiAgICAmIzM0O3JlYWRfcGFnZV9vd25lciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHdyaXRlIGhhbmRsZXIgKGBwYWdlX293bmVyX3dyaXRlYCkgZm9yIHRoZSBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgZGVidWdmcyBmaWxlIHRvIHN1cHBvcnQgZmlsdGVyaW5nLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSByZWFkIGhhbmRsZXIgKGByZWFkX3BhZ2Vfb3duZXJgKSBhbmQgb3V0cHV0IGZvcm1hdHRpbmcgKGBwcmludF9wYWdlX293bmVyYCkgdG8gYXBwbHkgdGhlIGZpbHRlcnMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBwYXJzaW5nIHVzZXIgaW5wdXQgYW5kIG1hbmFnaW5nIHBlci1mZCBzdGF0ZSwgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZjODJmZGZiYWE3ZTYxZDA3MDIzZDJlNzJhODdjNGE2MTM5NmE5ZTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCA3IDIwOjIwOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QKaW5kZXggNmIxMmYzYjAwN2VjOTEuLjM4M2U1OWM0Mjc0M2JkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QKQEAgLTY1LDcgJiM0Mzs2NSwxNCBAQCB1bi10cmFja2luZyBzdGF0ZS4KIFVzYWdlCiA9PT09PQogCi0xKSBCdWlsZCB1c2VyLXNwYWNlIGhlbHBlcjo6CiYjNDM7MSkgQnVpbGQgdXNlci1zcGFjZSBoZWxwZXJzOjoKJiM0MzsKJiM0MztUbyBmaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQ6CiYjNDM7CiYjNDM7CWNkIHRvb2xzL21tCiYjNDM7CW1ha2UgcGFnZV9vd25lcl9maWx0ZXIKJiM0MzsKJiM0MztUbyBzb3J0IGFuZCBhbmFseXplIHBhZ2Vfb3duZXIgb3V0cHV0OgogCiAJY2QgdG9vbHMvbW0KIAltYWtlIHBhZ2Vfb3duZXJfc29ydApAQCAtNzQsNyAmIzQzOzgxLDExIEBAIFVzYWdlCiAKIDMpIERvIHRoZSBqb2IgdGhhdCB5b3Ugd2FudCB0byBkZWJ1Zy4KIAotNCkgQW5hbHl6ZSBpbmZvcm1hdGlvbiBmcm9tIHBhZ2Ugb3duZXI6OgomIzQzOzQpIChPcHRpb25hbCkgRmlsdGVyIHBhZ2Vfb3duZXIgb3V0cHV0OjoKJiM0MzsKJiM0MzsJLi9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGUgLW4gMCwxLDIgJmd0OyBmaWx0ZXJlZF9wYWdlX293bmVyLnR4dAomIzQzOwomIzQzOzUpIEFuYWx5emUgaW5mb3JtYXRpb24gZnJvbSBwYWdlIG93bmVyOjoKIAogCWNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyX3N0YWNrcy9zaG93X3N0YWNrcyAmZ3Q7IHN0YWNrcy50eHQKIAljYXQgc3RhY2tzLnR4dApAQCAtMjYzLDMgJiM0MzsyNzQsNjUgQEAgU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlMKIAlmCQlmcmVlCQl3aGV0aGVyIHRoZSBwYWdlIGhhcyBiZWVuIHJlbGVhc2VkIG9yIG5vdAogCXN0CQlzdGFja3RyYWNlCXN0YWNrIHRyYWNlIG9mIHRoZSBwYWdlIGFsbG9jYXRpb24KIAlhdG9yCQlhbGxvY2F0b3IJbWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXMKJiM0MzsKJiM0MztGaWx0ZXJpbmcgcGFnZV9vd25lciBvdXRwdXQKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7cGFnZV9vd25lciBzdXBwb3J0cyBmaWx0ZXJpbmcgb3V0cHV0IGF0IHRoZSBrZXJuZWwgbGV2ZWwgYmVmb3JlIHJlYWRpbmcsCiYjNDM7d2hpY2ggcmVkdWNlcyB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBwcm9jZXNzZWQgaW4gdXNlcnNwYWNlLgomIzQzOwomIzQzO1RoZSBwYWdlX293bmVyX2ZpbHRlciB0b29sIHByb3ZpZGVzIGEgY29udmVuaWVudCBpbnRlcmZhY2UgZm9yIHRoaXMgZmlsdGVyaW5nCiYjNDM7Y2FwYWJpbGl0eS4gSXQgc3VwcG9ydHMgdHdvIHR5cGVzIG9mIGZpbHRlcnM6CiYjNDM7CiYjNDM7MS4gKipwcmludF9tb2RlIGZpbHRlcioqOiBDb250cm9sIHdoYXQgaW5mb3JtYXRpb24gaXMgcHJpbnRlZCBmb3IgZWFjaCBwYWdlCiYjNDM7CS0gYGBzdGFja2BgOiBQcmludCBmdWxsIHN0YWNrIHRyYWNlcyAoZGVmYXVsdCwgY29tcGF0aWJsZSB3aXRoIGV4aXN0aW5nIHVzYWdlKQomIzQzOwktIGBgaGFuZGxlYGA6IFByaW50IG9ubHkgc3RhY2sgaGFuZGxlIG51bWJlcnMgKG11Y2ggZmFzdGVyLCBzbWFsbGVyIG91dHB1dCkKJiM0MzsJLSBgYHN0YWNrX2hhbmRsZWBgOiBQcmludCBib3RoIHN0YWNrIHRyYWNlcyBhbmQgaGFuZGxlIG51bWJlcnMKJiM0MzsKJiM0MzsJVGhlIGBgaGFuZGxlYGAgbW9kZSB1c2VzIG51bWVyaWMgaWRlbnRpZmllcnMgaW5zdGVhZCBvZiBmdWxsIHN0YWNrIHRyYWNlcy4KJiM0MzsJVGhlIG1hcHBpbmcgZnJvbSBoYW5kbGVzIHRvIGFjdHVhbCBzdGFjayB0cmFjZXMgY2FuIGJlIG9idGFpbmVkIHZpYSB0aGUKJiM0MzsJc2hvd19zdGFja3NfaGFuZGxlcyBpbnRlcmZhY2UuCiYjNDM7CiYjNDM7Mi4gKipOVU1BIG5vZGUgZmlsdGVyKio6IEZpbHRlciBwYWdlcyBieSBOVU1BIG5vZGUgSUQKJiM0MzsJLSBTdXBwb3J0cyBzaW5nbGUgbm9kZTogYGAtbiAwYGAKJiM0MzsJLSBNdWx0aXBsZSBub2RlczogYGAtbiAwLDEsMmBgCiYjNDM7CS0gUmFuZ2VzOiBgYC1uIDAtM2BgCiYjNDM7CS0gTWl4ZWQgZm9ybWF0OiBgYC1uIDAsMi0zLDVgYAomIzQzOwomIzQzO1VzYWdlIGV4YW1wbGVzOjoKJiM0MzsKJiM0MzsJIyBGaWx0ZXIgYnkgcHJpbnQgbW9kZQomIzQzOwkuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZQomIzQzOwkuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrX2hhbmRsZQomIzQzOwomIzQzOwkjIEZpbHRlciBieSBOVU1BIG5vZGUKJiM0MzsJLi9wYWdlX293bmVyX2ZpbHRlciAtbiAwCiYjNDM7CS4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMC0zCiYjNDM7CiYjNDM7CSMgQ29tYmluZWQgZmlsdGVycwomIzQzOwkuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrIC1uIDAsMSwyCiYjNDM7CS4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1uIDAsMi0zCiYjNDM7CiYjNDM7CSMgU2F2ZSB0byBmaWxlCiYjNDM7CS4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1vIGZpbHRlcmVkX291dHB1dC50eHQKJiM0MzsKJiM0MztUaGUgaGFuZGxlIG1vZGUgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgbW9uaXRvcmluZyBhbmQgcGVyZm9ybWFuY2UtY3JpdGljYWwKJiM0MztzY2VuYXJpb3MgYXMgaXQgZHJhbWF0aWNhbGx5IHJlZHVjZXMgb3V0cHV0IHNpemUuIFRlc3Rpbmcgc2hvd3MgaGFuZGxlIG1vZGUgY2FuCiYjNDM7cmVkdWNlIG91dHB1dCBzaXplIGJ5IH42NiUgKDg0TUIgdnMgMjQ0TUIpIGFuZCBpbXByb3ZlIHJlYWQgcGVyZm9ybWFuY2UgYnkgfjQuNHgKJiM0Mztjb21wYXJlZCB0byBmdWxsIHN0YWNrIG91dHB1dC4KJiM0MzsKJiM0MztUaGUgTlVNQSBub2RlIGZpbHRlciBpcyB1c2VmdWwgZm9yIE5VTUEtYXdhcmUgbWVtb3J5IGFsbG9jYXRpb24gYW5hbHlzaXMgYW5kIGRlYnVnZ2luZy4KJiM0MzsKJiM0MztCZWhpbmQgdGhlIHNjZW5lcywgcGFnZV9vd25lcl9maWx0ZXIgb3BlbnMgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciBhbmQKJiM0Mzt3cml0ZXMgZmlsdGVyIGNvbW1hbmRzIGJlZm9yZSByZWFkaW5nIHRoZSBmaWx0ZXJlZCBvdXRwdXQuIFRoZSBmaWx0ZXJpbmcgdXNlcwomIzQzO3Blci1maWxlLWRlc2NyaXB0b3Igc3RhdGUsIGFsbG93aW5nIGVhY2ggb3BlbigpIHRvIGhhdmUgaW5kZXBlbmRlbnQgZmlsdGVyIHNldHRpbmdzLgomIzQzOwomIzQzO0VhY2ggZmlsZSBkZXNjcmlwdG9yIG1haW50YWlucyBpdHMgb3duIGZpbHRlciBzdGF0ZSwgc28geW91IGNhbiBoYXZlIG11bHRpcGxlCiYjNDM7aW5kZXBlbmRlbnQgZmlsdGVyaW5nIG9wZXJhdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuIEZvciBleGFtcGxlLCBpbiBkaWZmZXJlbnQKJiM0Mzt0ZXJtaW5hbHMgeW91IGNhbiBydW4gZGlmZmVyZW50IGZpbHRlcnMgc2ltdWx0YW5lb3VzbHk6OgomIzQzOwomIzQzOwkjIFRlcm1pbmFsIDE6IEZpbHRlciBub2RlIDAKJiM0MzsJLi9wYWdlX293bmVyX2ZpbHRlciAtbiAwICZndDsgbm9kZTBfb3V0cHV0LnR4dAomIzQzOwomIzQzOwkjIFRlcm1pbmFsIDI6IEZpbHRlciBub2RlIDEgKHJ1bnMgY29uY3VycmVudGx5KQomIzQzOwkuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDEgJmd0OyBub2RlMV9vdXRwdXQudHh0CmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmMKaW5kZXggODE3OGUwYmU1NTdmODcuLmYxZDRjMjA1YWZmOTc5IDEwMDY0NAotLS0gYS9tbS9wYWdlX293bmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9vd25lci5jCkBAIC01NCw2ICYjNDM7NTQsMjQgQEAgc3RydWN0IHN0YWNrX3ByaW50X2N0eCB7CiAJdTggZmxhZ3M7CiB9OwogCiYjNDM7ZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgewomIzQzOwlQQUdFX09XTkVSX1BSSU5UX1NUQUNLLAomIzQzOwlQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSwKJiM0MzsJUEFHRV9PV05FUl9QUklOVF9TVEFDS19IQU5ETEUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBhZ2Vfb3duZXJfcHJpbnRfbW9kZV9zdHJpbmdzW10gPSB7CiYjNDM7CVtQQUdFX09XTkVSX1BSSU5UX1NUQUNLXQk9ICYjMzQ7c3RhY2smIzM0OywKJiM0MzsJW1BBR0VfT1dORVJfUFJJTlRfSEFORExFXQk9ICYjMzQ7aGFuZGxlJiMzNDssCiYjNDM7CVtQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRV0JPSAmIzM0O3N0YWNrX2hhbmRsZSYjMzQ7LAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlIHsKJiM0MzsJZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTsKJiM0MzsJbm9kZW1hc2tfdCBuaWRfZmlsdGVyOwomIzQzOwlib29sIG5pZF9maWx0ZXJfZW5hYmxlZDsKJiM0Mzt9OwomIzQzOwogc3RhdGljIGJvb2wgcGFnZV9vd25lcl9lbmFibGVkIF9faW5pdGRhdGE7CiBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwYWdlX293bmVyX2luaXRlZCk7CiAKQEAgLTU0NywxNiAmIzQzOzU2NSwyMCBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCwKIHN0YXRpYyBzc2l6ZV90CiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCXN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lciwKLQkJZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlKQomIzQzOwkJZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLAomIzQzOwkJc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSkKIHsKIAlpbnQgcmV0LCBwYWdlYmxvY2tfbXQsIHBhZ2VfbXQ7CiAJY2hhciAqa2J1ZjsKJiM0MzsJZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTsKIAogCWNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgUEFHRV9TSVpFKTsKIAlrYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFrYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwlwcmludF9tb2RlID0gc3RhdGUtJmd0O3ByaW50X21vZGU7CiYjNDM7CiAJcmV0ID0gc2NucHJpbnRmKGtidWYsIGNvdW50LAogCQkJJiMzNDtQYWdlIGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSBuc1xuJiMzNDssCiAJCQlwYWdlX293bmVyLSZndDtvcmRlciwgcGFnZV9vd25lci0mZ3Q7Z2ZwX21hc2ssCkBAIC01NzUsOSAmIzQzOzU5NywxOCBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCQltaWdyYXRldHlwZV9uYW1lc1twYWdlYmxvY2tfbXRdLAogCQkJJmFtcDtwYWdlLSZndDtmbGFncyk7CiAKLQlyZXQgJiM0Mzs9IHN0YWNrX2RlcG90X3NucHJpbnQoaGFuZGxlLCBrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsIDApOwotCWlmIChyZXQgJmd0Oz0gY291bnQpCi0JCWdvdG8gZXJyOwomIzQzOwlpZiAocHJpbnRfbW9kZSAhPSBQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSkgewomIzQzOwkJcmV0ICYjNDM7PSBzdGFja19kZXBvdF9zbnByaW50KGhhbmRsZSwga2J1ZiAmIzQzOyByZXQsIGNvdW50IC0gcmV0LCAwKTsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gY291bnQpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHByaW50X21vZGUgIT0gUEFHRV9PV05FUl9QUklOVF9TVEFDSykgewomIzQzOwkJcmV0ICYjNDM7PSBzY25wcmludGYoa2J1ZiAmIzQzOyByZXQsIGNvdW50IC0gcmV0LCAmIzM0O2hhbmRsZTogJXVcbiYjMzQ7LAomIzQzOwkJCQkgaGFuZGxlKTsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gY291bnQpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0KIAogCWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7CiAJCXJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwKQEAgLTY2NCw2ICYjNDM7Njk1LDcgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAlzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0OwogCXN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyOwogCWRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTsKJiM0MzsJc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKIAogCWlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO3BhZ2Vfb3duZXJfaW5pdGVkKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NDAsMTUgJiM0Mzs3NzIsMzEgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAkJaWYgKCFoYW5kbGUpCiAJCQlnb3RvIGV4dF9wdXRfY29udGludWU7CiAKJiM0MzsJCWlmIChzdGF0ZS0mZ3Q7bmlkX2ZpbHRlcl9lbmFibGVkKSB7CiYjNDM7CQkJaW50IG5pZDsKJiM0MzsJCQltZW1kZXNjX2ZsYWdzX3QgcGFnZV9mbGFncyA9IFJFQURfT05DRShwYWdlLSZndDtmbGFncyk7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBCeXBhc3MgUEZfUE9JU09ORURfQ0hFQ0soKSBpbiBwYWdlX3RvX25pZCgpIHRvIGF2b2lkCiYjNDM7CQkJICogVk1fQlVHX09OIHdoZW4gYWNjZXNzaW5nIHBvaXNvbmVkIHBhZ2VzLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChwYWdlX2ZsYWdzLmYgPT0gUEFHRV9QT0lTT05fUEFUVEVSTikKJiM0MzsJCQkJZ290byBleHRfcHV0X2NvbnRpbnVlOwomIzQzOwkJCW5pZCA9IG1lbWRlc2NfbmlkKHBhZ2VfZmxhZ3MpOwomIzQzOwkJCWlmICghbm9kZV9pc3NldChuaWQsIHN0YXRlLSZndDtuaWRfZmlsdGVyKSkKJiM0MzsJCQkJZ290byBleHRfcHV0X2NvbnRpbnVlOwomIzQzOwkJfQomIzQzOwogCQkvKiBSZWNvcmQgdGhlIG5leHQgUEZOIHRvIHJlYWQgaW4gdGhlIGZpbGUgb2Zmc2V0ICovCiAJCSpwcG9zID0gcGZuICYjNDM7IDE7CiAKIAkJcGFnZV9vd25lcl90bXAgPSAqcGFnZV9vd25lcjsKIAkJcGFnZV9leHRfcHV0KHBhZ2VfZXh0KTsKIAkJcmV0dXJuIHByaW50X3BhZ2Vfb3duZXIoYnVmLCBjb3VudCwgcGZuLCBwYWdlLAotCQkJCSZhbXA7cGFnZV9vd25lcl90bXAsIGhhbmRsZSk7CiYjNDM7CQkJCSZhbXA7cGFnZV9vd25lcl90bXAsIGhhbmRsZSwgc3RhdGUpOwogZXh0X3B1dF9jb250aW51ZToKIAkJcGFnZV9leHRfcHV0KHBhZ2VfZXh0KTsKJiM0MzsJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAogCXJldHVybiAwOwpAQCAtODQ3LDcgJiM0Mzs4OTUsMTEzIEBAIHN0YXRpYyB2b2lkIGluaXRfZWFybHlfYWxsb2NhdGVkX3BhZ2VzKHZvaWQpCiAJCWluaXRfcGFnZXNfaW5fem9uZSh6b25lKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZTsKJiM0MzsKJiM0MzsJc3RhdGUgPSBremFsbG9jX29iaigqc3RhdGUpOwomIzQzOwlpZiAoIXN0YXRlKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXN0YXRlLSZndDtwcmludF9tb2RlID0gUEFHRV9PV05FUl9QUklOVF9TVEFDSzsKJiM0MzsJbm9kZXNfY2xlYXIoc3RhdGUtJmd0O25pZF9maWx0ZXIpOwomIzQzOwlzdGF0ZS0mZ3Q7bmlkX2ZpbHRlcl9lbmFibGVkID0gZmFsc2U7CiYjNDM7CWZpbGUtJmd0O3ByaXZhdGVfZGF0YSA9IHN0YXRlOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwYWdlX293bmVyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiYjNDM7ewomIzQzOwlrZnJlZShmaWxlLSZndDtwcml2YXRlX2RhdGEpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgcGFnZV9vd25lcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKJiM0MzsJCQkJIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiYjNDM7CQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKJiM0Mzt7CiYjNDM7CWNoYXIgKmtidWY7CiYjNDM7CWNoYXIgKm9yaWc7CiYjNDM7CWNoYXIgKnRva2VuOwomIzQzOwlpbnQgcmV0OwomIzQzOwlzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUgKnN0YXRlID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwllbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBuZXdfcHJpbnRfbW9kZTsKJiM0MzsJbm9kZW1hc2tfdCBuZXdfbmlkX2ZpbHRlcjsKJiM0MzsJYm9vbCBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXhpbXVtIGlucHV0IGxlbmd0aCBmb3IgZmlsdGVyIGNvbW1hbmRzOgomIzQzOwkgKiAtIDMyOiBwcmludF9tb2RlIGNvbW1hbmQgbWF4IGxlbmd0aCBpcyAxNyAoJiMzNDttb2RlPXN0YWNrX2hhbmRsZSYjMzQ7KQomIzQzOwkgKiAgICAgICAgd2l0aCBzdWZmaWNpZW50IGJ1ZmZlcgomIzQzOwkgKiAtIDYgKiBNQVhfTlVNTk9ERVM6IHdvcnN0IGNhc2UgZm9yIG5pZCBsaXN0CiYjNDM7CSAqICAgV29yc3QgY2FzZSBwZXIgbm9kZTogJiMzNDssTk5OTk4mIzM0OyAoY29tbWEgJiM0MzsgNS1kaWdpdCBub2RlIG51bWJlcikgPSA2IGJ5dGVzCiYjNDM7CSAqLwomIzQzOwlpZiAoY291bnQgJmd0OyAzMiAmIzQzOyA2ICogTUFYX05VTU5PREVTKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWtidWYgPSBtZW1kdXBfdXNlcl9udWwoYnVmLCBjb3VudCk7CiYjNDM7CWlmIChJU19FUlIoa2J1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihrYnVmKTsKJiM0MzsKJiM0MzsJb3JpZyA9IGtidWY7CiYjNDM7CiYjNDM7CW5ld19wcmludF9tb2RlID0gc3RhdGUtJmd0O3ByaW50X21vZGU7CiYjNDM7CW5ld19uaWRfZmlsdGVyID0gc3RhdGUtJmd0O25pZF9maWx0ZXI7CiYjNDM7CW5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSBzdGF0ZS0mZ3Q7bmlkX2ZpbHRlcl9lbmFibGVkOwomIzQzOwomIzQzOwl3aGlsZSAoKHRva2VuID0gc3Ryc2VwKCZhbXA7a2J1ZiwgJiMzNDsgXHRcbiYjMzQ7KSkgIT0gTlVMTCkgewomIzQzOwkJaWYgKCp0b2tlbiA9PSAmIzM5O1wwJiMzOTspCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoIXN0cm5jbXAodG9rZW4sICYjMzQ7bW9kZT0mIzM0OywgNSkpIHsKJiM0MzsJCQlyZXQgPSBzeXNmc19tYXRjaF9zdHJpbmcocGFnZV9vd25lcl9wcmludF9tb2RlX3N0cmluZ3MsCiYjNDM7CQkJCQkJdG9rZW4gJiM0MzsgNSk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CQkJbmV3X3ByaW50X21vZGUgPSByZXQ7CiYjNDM7CQl9IGVsc2UgaWYgKCFzdHJuY21wKHRva2VuLCAmIzM0O25pZD0mIzM0OywgNCkpIHsKJiM0MzsJCQlyZXQgPSBub2RlbGlzdF9wYXJzZSh0b2tlbiAmIzQzOyA0LCBuZXdfbmlkX2ZpbHRlcik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CiYjNDM7CQkJaWYgKG5vZGVzX2VtcHR5KG5ld19uaWRfZmlsdGVyKSkgewomIzQzOwkJCQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJCQlnb3RvIG91dF9mcmVlOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFdlIHdhbnQgdG8gZmlsdGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBieSBudW1hIG5vZGVzLCBzbyBtYWtlIHN1cmUKJiM0MzsJCQkgKiB0aGF0IHRoZSBzcGVjaWZpZWQgbm9kZXMgaGF2ZSBtZW1vcnkuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKCFub2Rlc19zdWJzZXQobmV3X25pZF9maWx0ZXIsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSkpIHsKJiM0MzsJCQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJbmV3X25pZF9maWx0ZXJfZW5hYmxlZCA9IHRydWU7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBDb21taXQgYWxsIGZpbHRlciBjaGFuZ2VzICovCiYjNDM7CXN0YXRlLSZndDtwcmludF9tb2RlID0gbmV3X3ByaW50X21vZGU7CiYjNDM7CXN0YXRlLSZndDtuaWRfZmlsdGVyID0gbmV3X25pZF9maWx0ZXI7CiYjNDM7CXN0YXRlLSZndDtuaWRfZmlsdGVyX2VuYWJsZWQgPSBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkOwomIzQzOwomIzQzOwlyZXQgPSBjb3VudDsKJiM0MzsKJiM0MztvdXRfZnJlZToKJiM0MzsJa2ZyZWUob3JpZyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0gewomIzQzOwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiYjNDM7CS5vcGVuCQk9IHBhZ2Vfb3duZXJfb3BlbiwKJiM0MzsJLnJlbGVhc2UJPSBwYWdlX293bmVyX3JlbGVhc2UsCiYjNDM7CS53cml0ZQkJPSBwYWdlX293bmVyX3dyaXRlLAogCS5yZWFkCQk9IHJlYWRfcGFnZV9vd25lciwKIAkubGxzZWVrCQk9IGxzZWVrX3BhZ2Vfb3duZXIsCiB9OwpAQCAtOTgwLDcgJiM0MzsxMTM0LDcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZCkKIAkJcmV0dXJuIDA7CiAJfQogCi0JZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3BhZ2Vfb3duZXImIzM0OywgMDQwMCwgTlVMTCwgTlVMTCwgJmFtcDtwYWdlX293bmVyX2ZvcHMpOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7cGFnZV9vd25lciYjMzQ7LCAwNjAwLCBOVUxMLCBOVUxMLCAmYW1wO3BhZ2Vfb3duZXJfZm9wcyk7CiAJZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCYjMzQ7cGFnZV9vd25lcl9zdGFja3MmIzM0OywgTlVMTCk7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3Nob3dfc3RhY2tzJiMzNDssIDA0MDAsIGRpciwKIAkJCSAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHwKZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGUKaW5kZXggZjU3MjViNWMyM2FhMjYuLjg1ODE4NmE2ZWVmZGJkIDEwMDY0NAotLS0gYS90b29scy9tbS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9NYWtlZmlsZQpAQCAtMyw3ICYjNDM7Myw3IEBACiAjCiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZQogCi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7QlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAogSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzCiAKIExJQl9ESVIgPSAuLi9saWIvYXBpCkBAIC0yMyw3ICYjNDM7MjMsNyBAQCAkKExJQlMpOgogCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkJmx0OyAkKExERkxBR1MpCiAKIGNsZWFuOgotCSQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7CSQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiAJbWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuCiAKIHNiaW5kaXIgPz0gL3Vzci9zYmluCmRpZmYgLS1naXQgYS90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jIGIvdG9vbHMvbW0vcGFnZV9vd25lcl9maWx0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMWQxZjBhMzg2NzhhMmYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jCkBAIC0wLDAgJiM0MzsxLDMxMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBVc2VyLXNwYWNlIGhlbHBlciB0byBmaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQgcGVyLWZkCiYjNDM7ICoKJiM0MzsgKiBFeGFtcGxlIHVzZToKJiM0MzsgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlCiYjNDM7ICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrX2hhbmRsZQomIzQzOyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbiAwLDEsMgomIzQzOyAqCiYjNDM7ICogU2VlIERvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7Y3R5cGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7Z2V0b3B0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgTUFYX0NNRF9MRU4JNTEyCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZykKJiM0Mzt7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O1VzYWdlOiAlcyBbT1BUSU9OU11cbiYjMzQ7LCBwcm9nKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7XG5PcHRpb25zOlxuJiMzNDspOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDsgIC1tLCAtLW1vZGUgTU9ERSAgICAgIDogcHJpbnRfbW9kZSAoc3RhY2ssIGhhbmRsZSwgb3Igc3RhY2tfaGFuZGxlKVxuJiMzNDspOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDsgIC1uLCAtLW5pZCBOSURfTElTVCAgIDogTlVNQSBub2RlIElEcyAoY29tbWEtc2VwYXJhdGVkIG9yIHJhbmdlcylcbiYjMzQ7KTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAtbywgLS1vdXRwdXQgRklMRSAgICA6IG91dHB1dCBmaWxlIChkZWZhdWx0OiBzdGRvdXQpXG4mIzM0Oyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgLWgsIC0taGVscCAgICAgICAgICAgOiBzaG93IHRoaXMgaGVscCBtZXNzYWdlXG4mIzM0Oyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O1xuRXhhbXBsZXM6XG4mIzM0Oyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgJXMgLW0gc3RhY2tcbiYjMzQ7LCBwcm9nKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAlcyAtbSBoYW5kbGVcbiYjMzQ7LCBwcm9nKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAlcyAtbSBzdGFja19oYW5kbGVcbiYjMzQ7LCBwcm9nKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAlcyAtbSBzdGFjayAtbyBvdXRwdXQudHh0XG4mIzM0OywgcHJvZyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgJXMgLW4gMCwxLDJcbiYjMzQ7LCBwcm9nKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAlcyAtbSBzdGFjayAtbiAwXG4mIzM0OywgcHJvZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdmFsaWRhdGVfbW9kZShjb25zdCBjaGFyICptb2RlKQomIzQzO3sKJiM0MzsJaWYgKHN0cmNtcChtb2RlLCAmIzM0O3N0YWNrJiMzNDspID09IDAgfHwKJiM0MzsJICAgIHN0cmNtcChtb2RlLCAmIzM0O2hhbmRsZSYjMzQ7KSA9PSAwIHx8CiYjNDM7CSAgICBzdHJjbXAobW9kZSwgJiMzNDtzdGFja19oYW5kbGUmIzM0OykgPT0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogSW52YWxpZCBtb2RlICYjMzk7JXMmIzM5O1xuJiMzNDssIG1vZGUpOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDtWYWxpZCBtb2Rlczogc3RhY2ssIGhhbmRsZSwgc3RhY2tfaGFuZGxlXG4mIzM0Oyk7CiYjNDM7CXJldHVybiAtMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB2YWxpZGF0ZV9uaWRfbGlzdChjb25zdCBjaGFyICpuaWRfbGlzdCkKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKnA7CiYjNDM7CWludCBpID0gMDsKJiM0MzsJaW50IGhhc19kaWdpdCA9IDA7CiYjNDM7CWludCBpbl9yYW5nZSA9IDA7CiYjNDM7CWludCBwcmV2X251bSA9IDA7CiYjNDM7CWludCBjdXJyX251bSA9IDA7CiYjNDM7CiYjNDM7CWlmICghbmlkX2xpc3QgfHwgc3RybGVuKG5pZF9saXN0KSA9PSAwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZvciAocCA9IG5pZF9saXN0OyAqcDsgcCYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICgqcCA9PSAmIzM5OywmIzM5OykgewomIzQzOwkJCWlmICghaGFzX2RpZ2l0KSB7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdFxuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gLTE7CiYjNDM7CQkJfQomIzQzOwkJCWlmIChpbl9yYW5nZSAmYW1wOyZhbXA7IHByZXZfbnVtICZndDsgY3Vycl9udW0pIHsKJiM0MzsJCQkJZnByaW50ZihzdGRlcnIsCiYjNDM7CQkJCQkmIzM0O0Vycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlICZsdDs9IGVuZClcbiYjMzQ7LAomIzQzOwkJCQkJcHJldl9udW0sIGN1cnJfbnVtKTsKJiM0MzsJCQkJcmV0dXJuIC0xOwomIzQzOwkJCX0KJiM0MzsJCQlpID0gMDsKJiM0MzsJCQloYXNfZGlnaXQgPSAwOwomIzQzOwkJCWluX3JhbmdlID0gMDsKJiM0MzsJCQlwcmV2X251bSA9IDA7CiYjNDM7CQkJY3Vycl9udW0gPSAwOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCpwID09ICYjMzk7LSYjMzk7KSB7CiYjNDM7CQkJaWYgKCFoYXNfZGlnaXQpIHsKJiM0MzsJCQkJZnByaW50ZihzdGRlcnIsCiYjNDM7CQkJCQkmIzM0O0Vycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdCAmIzM0Oyk7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLAomIzQzOwkJCQkJJiMzNDsoZGFzaCB3aXRob3V0IHByZWNlZGluZyBudW1iZXIpXG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAtMTsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKGluX3JhbmdlKSB7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOiBNdWx0aXBsZSBkYXNoZXMgaW4gbmlkX2xpc3RcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIC0xOwomIzQzOwkJCX0KJiM0MzsJCQlwcmV2X251bSA9IGN1cnJfbnVtOwomIzQzOwkJCWN1cnJfbnVtID0gMDsKJiM0MzsJCQlpID0gMDsKJiM0MzsJCQloYXNfZGlnaXQgPSAwOwomIzQzOwkJCWluX3JhbmdlID0gMTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhcikqcCkpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogSW52YWxpZCBjaGFyYWN0ZXIgJiMzOTslYyYjMzk7IGluIG5pZF9saXN0XG4mIzM0OywgKnApOwomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChpICZndDsgNSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOiBOSUQgdG9vIGxvbmcgKG1heCA2NTUzNilcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiYjNDM7CQljdXJyX251bSA9IGN1cnJfbnVtICogMTAgJiM0MzsgKCpwIC0gJiMzOTswJiMzOTspOwomIzQzOwkJaSYjNDM7JiM0Mzs7CiYjNDM7CQloYXNfZGlnaXQgPSAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghaGFzX2RpZ2l0KSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaW5fcmFuZ2UgJmFtcDsmYW1wOyBwcmV2X251bSAmZ3Q7IGN1cnJfbnVtKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwKJiM0MzsJCQkmIzM0O0Vycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlICZsdDs9IGVuZClcbiYjMzQ7LAomIzQzOwkJCXByZXZfbnVtLCBjdXJyX251bSk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpvdXRwdXRfZmlsZSA9IE5VTEw7CiYjNDM7CWNoYXIgZmlsdGVyX2NtZFtNQVhfQ01EX0xFTl07CiYjNDM7CUZJTEUgKm91dHB1dCA9IE5VTEw7CiYjNDM7CWludCBmZCA9IC0xOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsJY2hhciBidWZbNDA5Nl07CiYjNDM7CWludCBvcHQ7CiYjNDM7CXNpemVfdCBjbWRfbGVuID0gMDsKJiM0MzsKJiM0MzsJc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOwomIzQzOwomIzQzOwlzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKJiM0MzsJCXsmIzM0O21vZGUmIzM0OywJcmVxdWlyZWRfYXJndW1lbnQsIDAsICYjMzk7bSYjMzk7fSwKJiM0MzsJCXsmIzM0O25pZCYjMzQ7LAkJcmVxdWlyZWRfYXJndW1lbnQsIDAsICYjMzk7biYjMzk7fSwKJiM0MzsJCXsmIzM0O291dHB1dCYjMzQ7LAlyZXF1aXJlZF9hcmd1bWVudCwgMCwgJiMzOTtvJiMzOTt9LAomIzQzOwkJeyYjMzQ7aGVscCYjMzQ7LAlub19hcmd1bWVudCwJICAgMCwgJiMzOTtoJiMzOTt9LAomIzQzOwkJezAsIDAsIDAsIDB9CiYjNDM7CX07CiYjNDM7CiYjNDM7CWZpbHRlcl9jbWRbMF0gPSAmIzM5O1wwJiMzOTs7CiYjNDM7CiYjNDM7CWlmIChhcmdjICZndDsgMSkgewomIzQzOwkJZm9yIChpbnQgaSA9IDE7IGkgJmx0OyBhcmdjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChzdHJjbXAoYXJndltpXSwgJiMzNDstaCYjMzQ7KSA9PSAwIHx8IHN0cmNtcChhcmd2W2ldLCAmIzM0Oy0taGVscCYjMzQ7KSA9PSAwKSB7CiYjNDM7CQkJCXVzYWdlKGFyZ3ZbMF0pOwomIzQzOwkJCQlyZXR1cm4gMDsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ2hlY2sgaWYgcGFnZV9vd25lciBleGlzdHMgYW5kIGlzIHJlYWRhYmxlICovCiYjNDM7CWlmIChhY2Nlc3MoJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyJiMzNDssIEZfT0spICE9IDApIHsKJiM0MzsJCWlmIChlcnJubyA9PSBFTk9FTlQpCiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgZG9lcyBub3QgZXhpc3RcbiYjMzQ7KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwZXJyb3IoJiMzNDtFcnJvciBhY2Nlc3NpbmcgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciYjMzQ7KTsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O01ha2Ugc3VyZSBwYWdlX293bmVyIGlzIGVuYWJsZWQgaW4ga2VybmVsXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwomIzQzOwl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICYjMzQ7bTpuOm86aCYjMzQ7LCBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkgewomIzQzOwkJaW50IGxlbjsKJiM0MzsKJiM0MzsJCXN3aXRjaCAob3B0KSB7CiYjNDM7CQljYXNlICYjMzk7bSYjMzk7OiB7CiYjNDM7CQkJY29uc3QgY2hhciAqbW9kZSA9IG9wdGFyZzsKJiM0MzsKJiM0MzsJCQlpZiAodmFsaWRhdGVfbW9kZShtb2RlKSAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiAxOwomIzQzOwkJCWxlbiA9IHNucHJpbnRmKGZpbHRlcl9jbWQgJiM0MzsgY21kX2xlbiwgTUFYX0NNRF9MRU4gLSBjbWRfbGVuLAomIzQzOwkJCQkgICAgICAgJiMzNDslc21vZGU9JXMmIzM0OywgY21kX2xlbiAmZ3Q7IDAgPyAmIzM0OyAmIzM0OyA6ICYjMzQ7JiMzNDssIG1vZGUpOwomIzQzOwkJCWlmIChsZW4gJmx0OyAwIHx8IGNtZF9sZW4gJiM0MzsgbGVuICZndDs9IE1BWF9DTURfTEVOKSB7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOiBDb21tYW5kIHRvbyBsb25nXG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAxOwomIzQzOwkJCX0KJiM0MzsJCQljbWRfbGVuICYjNDM7PSBsZW47CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQljYXNlICYjMzk7biYjMzk7OiB7CiYjNDM7CQkJY29uc3QgY2hhciAqbmlkX2xpc3QgPSBvcHRhcmc7CiYjNDM7CiYjNDM7CQkJaWYgKHZhbGlkYXRlX25pZF9saXN0KG5pZF9saXN0KSAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiAxOwomIzQzOwkJCWxlbiA9IHNucHJpbnRmKGZpbHRlcl9jbWQgJiM0MzsgY21kX2xlbiwgTUFYX0NNRF9MRU4gLSBjbWRfbGVuLAomIzQzOwkJCQkgICAgICAgJiMzNDslc25pZD0lcyYjMzQ7LCBjbWRfbGVuICZndDsgMCA/ICYjMzQ7ICYjMzQ7IDogJiMzNDsmIzM0OywgbmlkX2xpc3QpOwomIzQzOwkJCWlmIChsZW4gJmx0OyAwIHx8IGNtZF9sZW4gJiM0MzsgbGVuICZndDs9IE1BWF9DTURfTEVOKSB7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOiBDb21tYW5kIHRvbyBsb25nXG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAxOwomIzQzOwkJCX0KJiM0MzsJCQljbWRfbGVuICYjNDM7PSBsZW47CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQljYXNlICYjMzk7byYjMzk7OgomIzQzOwkJCW91dHB1dF9maWxlID0gb3B0YXJnOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O2gmIzM5OzoKJiM0MzsJCQkvKiBBbHJlYWR5IGhhbmRsZWQgYWJvdmUgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJdXNhZ2UoYXJndlswXSk7CiYjNDM7CQkJcmV0dXJuIDE7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXQgbGVhc3Qgb25lIGZpbHRlciBtdXN0IGJlIHNwZWNpZmllZCAqLwomIzQzOwlpZiAoY21kX2xlbiA9PSAwKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogQXQgbGVhc3Qgb25lIGZpbHRlciAoLW0gb3IgLW4pIG11c3QgYmUgc3BlY2lmaWVkXG5cbiYjMzQ7KTsKJiM0MzsJCXVzYWdlKGFyZ3ZbMF0pOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogT3BlbiBwYWdlX293bmVyIGZvciByZWFkLXdyaXRlIC0gdGhpcyB3aWxsIGZhaWwgaWYga2VybmVsIGRvZXNuJiMzOTt0IHN1cHBvcnQgd3JpdGUgKi8KJiM0MzsJZmQgPSBvcGVuKCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciYjMzQ7LCBPX1JEV1IpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlpZiAoZXJybm8gPT0gRUFDQ0VTIHx8IGVycm5vID09IEVQRVJNKSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O2RvZXMgbm90IHN1cHBvcnQgd3JpdGUgYWNjZXNzXG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7VGhpcyBrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCAmIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7cGVyLWZkIGZpbHRlcmluZy5cbiYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtQbGVhc2UgZW5zdXJlIHlvdSBoYXZlIGEga2VybmVsIHdpdGggJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O3Blci1mZCBmaWx0ZXJpbmcgc3VwcG9ydC5cbiYjMzQ7KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcGVycm9yKCYjMzQ7RXJyb3Igb3BlbmluZyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyJiMzNDspOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG91dHB1dF9maWxlKSB7CiYjNDM7CQlvdXRwdXQgPSBmb3BlbihvdXRwdXRfZmlsZSwgJiMzNDt3JiMzNDspOwomIzQzOwkJaWYgKCFvdXRwdXQpIHsKJiM0MzsJCQlwZXJyb3IoJiMzNDtvcGVuIG91dHB1dCBmaWxlJiMzNDspOwomIzQzOwkJCWNsb3NlKGZkKTsKJiM0MzsJCQlyZXR1cm4gMTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCW91dHB1dCA9IHN0ZG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSB3cml0ZShmZCwgZmlsdGVyX2NtZCwgc3RybGVuKGZpbHRlcl9jbWQpKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCWlmIChlcnJubyA9PSBFSU5WQUwpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogS2VybmVsIHJlamVjdGVkIHRoZSBmaWx0ZXIgY29tbWFuZC5cbiYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtQb3NzaWJsZSBjYXVzZXM6XG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAtIEtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHBlci1mZCBmaWx0ZXJpbmdcbiYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDsgIC0gTlVNQSBub2RlIGhhcyBubyBtZW1vcnlcbiYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDsgIC0gVW5rbm93biByZWFzb25cbiYjMzQ7KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcGVycm9yKCYjMzQ7d3JpdGUgZmlsdGVyIGNvbW1hbmQmIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoKHNpemVfdClyZXQgIT0gc3RybGVuKGZpbHRlcl9jbWQpKQomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7V2FybmluZzogUGFydGlhbCB3cml0ZSAoJXpkLyV6dSlcbiYjMzQ7LCByZXQsIHN0cmxlbihmaWx0ZXJfY21kKSk7CiYjNDM7CiYjNDM7CS8qIFJlYWQgYW5kIGRpc3BsYXkgZmlsdGVyZWQgb3V0cHV0ICovCiYjNDM7CXJldCA9IDA7CiYjNDM7CXdoaWxlICgocmV0ID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkpICZndDsgMCkgewomIzQzOwkJc2l6ZV90IHdyaXR0ZW4gPSBmd3JpdGUoYnVmLCAxLCByZXQsIG91dHB1dCk7CiYjNDM7CiYjNDM7CQlpZiAod3JpdHRlbiAhPSAoc2l6ZV90KXJldCkgewomIzQzOwkJCWlmIChlcnJubyA9PSBFUElQRSkgewomIzQzOwkJCQkvKiBQaXBlIGNsb3NlZCwgdHJlYXQgYXMgc3VjY2VzcyAqLwomIzQzOwkJCQlyZXQgPSAwOwomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsJCQl9CiYjNDM7CQkJcGVycm9yKCYjMzQ7d3JpdGUgb3V0cHV0JiMzNDspOwomIzQzOwkJCXJldCA9IC0xOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlwZXJyb3IoJiMzNDtyZWFkIHBhZ2Vfb3duZXImIzM0Oyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZmZsdXNoKG91dHB1dCkpIHsKJiM0MzsJCWlmIChlcnJubyA9PSBFUElQRSkgewomIzQzOwkJCS8qIFBpcGUgY2xvc2VkLCB0cmVhdCBhcyBzdWNjZXNzICovCiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcGVycm9yKCYjMzQ7Zmx1c2ggb3V0cHV0JiMzNDspOwomIzQzOwkJCXJldCA9IC0xOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljbG9zZShmZCk7CiYjNDM7CWlmIChvdXRwdXQgIT0gc3Rkb3V0KQomIzQzOwkJZmNsb3NlKG91dHB1dCk7CiYjNDM7CXJldHVybiByZXQgJmx0OyAwID8gMSA6IDA7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTYxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhZ2UgT3duZXIgRmlsdGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9wYWdlX293bmVyLmNgIGFuZCB0aHJvd3MgaW4gYSBuZXcgdG9vbCwgYHRvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwb3RlbnRpYWxseSB1c2VmdWwgYWRkaXRpb24uIEl0JiMzOTtzIGdpdmluZyB1cyBzb21lIGZpbHRlcmluZyBvcHRpb25zIGZvciBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAsIHdoaWNoIGNvdWxkIGJlIGh1Z2UgZm9yIGlzb2xhdGluZyBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMuIEJlaW5nIGFibGUgdG8gZmlsdGVyIHRoZSBvdXRwdXQgb2YgdGhhdCBpcyBhIGdhbWUgY2hhbmdlciBmb3IgZGVidWdnaW5nLgoKVGhlIHBhdGNoIGltcGxlbWVudHMgZmlsdGVyaW5nIGJ5IHBhcnNpbmcgY29tbWFuZHMgd3JpdHRlbiB0byB0aGUgZmlsZSBkZXNjcmlwdG9yOyBzcGVjaWZpY2FsbHkgaXQmIzM5O3MgbG9va2luZyBmb3IgJiMzNDttb2RlPSYjMzQ7IGFuZCAmIzM0O25pZD0mIzM0Oy4gVGhhdCYjMzk7cyBhbGwgaGFuZGxlZCBieSBgcGFnZV9vd25lcl93cml0ZWAuIEEgYHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZWAgaXMgYWxsb2NhdGVkIGFuZCBzdG9yZWQgcGVyLWZpbGUgb3BlbiwgbWVhbmluZyBlYWNoIHNlc3Npb24gZ2V0cyBpdHMgb3duIGZpbHRlciwgd2hpY2ggaXMgc21hcnQuIFRoZW4sIHRoZSBhY3R1YWwgYHJlYWRfcGFnZV9vd25lcmAgZnVuY3Rpb24gdXNlcyB0aGlzIHN0YXRlIHRvIGRvIHRoZSBhY3R1YWwgZmlsdGVyaW5nLgoKTm93LCBteSBrZXkgcXVlc3Rpb25zOiBJcyB0aGlzIGNvZGUgYWN0dWFsbHkgKnJlYWNoYWJsZSo/IFllcCwgZGVidWdmcywgc28gYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgLiBUaGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIHJpZ2h0IHdoZXJlIHdlJiMzOTtkIGV4cGVjdCBpdC4gRG9lcyBpdCAqZnVuY3Rpb24qIGFzIGNsYWltZWQ/IFllcywgdGhlIGNvcmUgbG9naWMgaXMgdGhlcmUuIFRoZSBgcGFnZV9vd25lcl93cml0ZWAgZnVuY3Rpb24gcGFyc2VzIG91ciBpbnB1dCBhbmQgdGhlIG5ldyBzdGF0ZSBpcyB1c2VkIHRvIGZpbHRlciByZWFkcy4KCkFuZCB0aGUgbmV4dCB0aGluZyBJJiMzOTttIHRoaW5raW5nIGlzLCAqdGhpcyBuZWVkcyBmdXp6aW5nKi4gQW55IHRpbWUgeW91JiMzOTtyZSBwYXJzaW5nIHVzZXIgaW5wdXQsIHlvdSYjMzk7cmUgb3BlbmluZyB0aGUgZG9vciB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBgcGFnZV9vd25lcl93cml0ZWAgaXMgdGhlIG9idmlvdXMgdGFyZ2V0LgoKQWxyaWdodCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgYG1tL3BhZ2Vfb3duZXIuY2AsIGlzIGNvbmRpdGlvbmFsIG9uIGBDT05GSUdfUEFHRV9PV05FUmAuIExldCBtZSB2ZXJpZnkgdGhhdCYjMzk7cyB0aGUgY2FzZS4gTWFrZSBzdXJlIHRoYXQmIzM5O3MgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQUdFX09XTkVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTE5PW9iai0kKENPTkZJR19ERUJVR19WTV9QR1RBQkxFKSAmIzQzOz0gZGVidWdfdm1fcGd0YWJsZS5vXG5tbS9NYWtlZmlsZToxMjA6b2JqLSQoQ09ORklHX1BBR0VfT1dORVIpICYjNDM7PSBwYWdlX293bmVyLm9cbm1tL01ha2VmaWxlLTEyMS1vYmotJChDT05GSUdfTUVNT1JZX0lTT0xBVElPTikgJiM0Mzs9IHBhZ2VfaXNvbGF0aW9uLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzA4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVwZW5kZW5jaWVzIGFuZCBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYENPTkZJR19QQUdFX09XTkVSYCBpcyBkZWZpbml0ZWx5IGEgbWFuZGF0b3J5IHJlcXVpcmVtZW50IGhlcmUuIEdvdCBpdC4gQW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB3ZSBhbHNvIG5lZWQgYENPTkZJR19ERUJVR19GU2AgZW5hYmxlZCwgc2luY2UgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgZXhwb3NlZCB0aHJvdWdoIHRoZSBkZWJ1ZyBmaWxlc3lzdGVtLiBCZXN0IHByYWN0aWNlIGlzIHRvIGVuc3VyZSBib3RoIGFyZSBhdmFpbGFibGUsIGJlZm9yZSB3ZSBnZXQgYW55IGZ1cnRoZXIuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGBDT05GSUdfUEFHRV9PV05FUmAgaGFzIGFueSBvdGhlciBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiB0byBtYWtlIGNlcnRhaW4uIEJldHRlciBzYWZlIHRoYW4gc29ycnkgd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX09XTkVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnPTczPWNvbmZpZyBTTFVCX1JDVV9ERUJVR1xuLS1cbm1tL0tjb25maWcuZGVidWctMTA0LVxubW0vS2NvbmZpZy5kZWJ1ZzoxMDU6Y29uZmlnIFBBR0VfT1dORVJcbm1tL0tjb25maWcuZGVidWctMTA2LVx0Ym9vbCBcJiMzNDtUcmFjayBwYWdlIG93bmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIERlYnVnIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgd2hlcmUmIzM5O3MgdGhlIGJlc3QgcGxhY2UgdG8gZGlnIGludG8gdGhlc2UgZGVidWcgb3B0aW9ucz8gTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBtbS9LY29uZmlnLmRlYnVnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTA1LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2UgZ3JhbnVsYXIgZGVidWcgZmVhdHVyZXMgYXJlIGRlZmluZWQsIHJpZ2h0PyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRldGVybWluZSBob3cgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1Z2dpbmcgaXMgaGFuZGxlZCwgZXNwZWNpYWxseSBzaW5jZSB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGluZ3MgdGhhdCBhcmUgdHlwaWNhbGx5IGVuYWJsZWQgZHVyaW5nIGRldmVsb3BtZW50IG9yIGZvciB2ZXJ5IHNwZWNpZmljIHRyb3VibGVzaG9vdGluZy4gSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgb2ZmZXIgYSBjbGVhciBvdmVydmlldyBvZiB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGRlc2NyaXB0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGVidWcgZmVhdHVyZXMgaW4gdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0ICBUaGlzIGlzIGRlc2lnbmVkIGFzIGEgZGVidWdnaW5nIGZlYXR1cmUsIG5vdCBhIHNlY3VyaXR5IGZlYXR1cmUuXG4gMTAxOlx0XHQgIE9iamVjdHMgYXJlIHNvbWV0aW1lcyByZWN5Y2xlZCB3aXRob3V0IFJDVSBkZWxheSB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4gMTAyOlx0XG4gMTAzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTA0Olx0XG4gMTA1Olx0Y29uZmlnIFBBR0VfT1dORVJcbiAxMDY6XHRcdGJvb2wgXCYjMzQ7VHJhY2sgcGFnZSBvd25lclwmIzM0O1xuIDEwNzpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IFNUQUNLVFJBQ0VfU1VQUE9SVFxuIDEwODpcdFx0c2VsZWN0IERFQlVHX0ZTXG4gMTA5Olx0XHRzZWxlY3QgU1RBQ0tUUkFDRVxuIDExMDpcdFx0c2VsZWN0IFNUQUNLREVQT1RcbiAxMTE6XHRcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxuIDExMjpcdFx0aGVscFxuIDExMzpcdFx0ICBUaGlzIGtlZXBzIHRyYWNrIG9mIHdoYXQgY2FsbCBjaGFpbiBpcyB0aGUgb3duZXIgb2YgYSBwYWdlLCBtYXlcbiAxMTQ6XHRcdCAgaGVscCB0byBmaW5kIGJhcmUgYWxsb2NfcGFnZShzKSBsZWFrcy4gRXZlbiBpZiB5b3UgaW5jbHVkZSB0aGlzXG4gMTE1Olx0XHQgIGZlYXR1cmUgb24geW91ciBidWlsZCwgaXQgaXMgZGlzYWJsZWQgaW4gZGVmYXVsdC4gWW91IHNob3VsZCBwYXNzXG4gMTE2Olx0XHQgIFwmIzM0O3BhZ2Vfb3duZXI9b25cJiMzNDsgdG8gYm9vdCBwYXJhbWV0ZXIgaW4gb3JkZXIgdG8gZW5hYmxlIGl0LiBFYXRzXG4gMTE3Olx0XHQgIGEgZmFpciBhbW91bnQgb2YgbWVtb3J5IGlmIGVuYWJsZWQuIFNlZSB0b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xuIDExODpcdFx0ICBmb3IgdXNlci1zcGFjZSBoZWxwZXIuXG4gMTE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiBgcGFnZV9vd25lcj1vbmAgZm9yIFN5emthbGxlcioqCgpPa2F5LCBzbyB0aGUgbWVzc2FnZSBzYXlzLCAmIzM0O1lvdSBzaG91bGQgcGFzcyBgcGFnZV9vd25lcj1vbmAgdG8gYSBib290IHBhcmFtZXRlciB0byBlbmFibGUgaXQuJiMzNDsgUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEhhbmcgb24sIHRob3VnaCwgU3l6a2FsbGVyICpjYW4qIHBhc3MgYm9vdCBwYXJhbWV0ZXJzLCBidXQgaXQmIzM5O3Mgbm90IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlzIGl0PyBDb3VsZCBJIGVuYWJsZSBpdCB0aHJvdWdoIHN5c2ZzIG9yIGRlYnVnZnM/IE5vLCB0aGF0JiMzOTtzIG5vdCBob3cgaXQgd29ya3M7IGl0JiMzOTtzIGEgYm9vdC10aW1lIHRoaW5nLiBOb3cgSSByZWNhbGwgdGhhdCBtYXliZSwganVzdCBtYXliZSwgU3l6a2FsbGVyIGFscmVhZHkgaGFzIGBwYWdlX293bmVyPW9uYCBzZXQgYXMgYSBkZWZhdWx0IGJvb3QgcGFyYW1ldGVyIGZvciBzb21lIG9mIGl0cyBjb25maWd1cmF0aW9ucy4uLiBvciBwZXJoYXBzIG5vdC4gRWl0aGVyIHdheSwgd2UgY2FuIGRlZmluaXRlbHkgc3BlY2lmeSBgUEFHRV9PV05FUmAgZGlyZWN0bHkgaW4gdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIGNhbiYjMzk7dCB3ZT8KCkFscmlnaHQsIHRoZSBwYXRjaCBhZGRzIGZ1bmN0aW9uczogYHBhZ2Vfb3duZXJfd3JpdGVgLCBgcGFnZV9vd25lcl9vcGVuYCwgYHBhZ2Vfb3duZXJfcmVsZWFzZWAsIGFuZCBgcHJpbnRfcGFnZV9vd25lcmAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJIHNob3VsZCBiZSBwYXlpbmcgYXR0ZW50aW9uIHRvLiBMZXQgbWUgbm90ZSB0aG9zZSBkb3duOiBgcGFnZV9vd25lcl93cml0ZWAsIGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYHByaW50X3BhZ2Vfb3duZXJgLCBhbmQgb2YgY291cnNlIHRoZSBgcmVhZF9wYWdlX293bmVyYCBmdW5jdGlvbiBhcyB3ZWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZWdyYXRlLgoKT2theSwgbGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgcGFnZV9vd25lcl93cml0ZWAgaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHByb2JhYmx5IGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2Vfb3duZXJfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX293bmVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jPTkxMz1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5tbS9wYWdlX293bmVyLmMtOTE4LVxubW0vcGFnZV9vd25lci5jOjkxOTpzdGF0aWMgc3NpemVfdCBwYWdlX293bmVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxubW0vcGFnZV9vd25lci5jLTkyMC1cdFx0XHRcdCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYz0xMDAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfZm9wcyA9IHtcbi0tXG5tbS9wYWdlX293bmVyLmMtMTAwMy1cdC5yZWxlYXNlXHQ9IHBhZ2Vfb3duZXJfcmVsZWFzZSxcbm1tL3BhZ2Vfb3duZXIuYzoxMDA0Olx0LndyaXRlXHRcdD0gcGFnZV9vd25lcl93cml0ZSxcbm1tL3BhZ2Vfb3duZXIuYy0xMDA1LVx0LnJlYWRcdFx0PSByZWFkX3BhZ2Vfb3duZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzM1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnM6CgoqKkRpZ2dpbmcgaW50byBgcGFnZV9vd25lcl9vcGVuYCBhbmQgYHBhZ2Vfb3duZXJfcmVsZWFzZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYHBhZ2Vfb3duZXJfb3BlbmAgYW5kIGBwYWdlX293bmVyX3JlbGVhc2VgIGFyZSBpbnRlcmFjdGluZy4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCBbVXNlciYjMzk7cyBmaWVsZF0sIEkga25vdyB0aGVzZSBhcmUgbGlrZWx5IGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgcmVzb3VyY2Ugb3duZXJzaGlwIGFuZCBsaWZlY3ljbGUsIHNwZWNpZmljYWxseSBhdCB0aGUgcGFnZSBsZXZlbC4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBhc3BlY3RzIG9mIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXkgbG9ja2luZyBtZWNoYW5pc21zLCByZWZlcmVuY2UgY291bnRlcnMsIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB0aGV5IG1hbmlwdWxhdGluZz8gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeSwgcmVzb3VyY2UgY29udGVudGlvbiwgYW5kLCBvZiBjb3Vyc2UsIHBvdGVudGlhbCBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIHN5c3RlbS4gVGhlIGRldGFpbHMgb2YgaW1wbGVtZW50YXRpb24gbXVzdCBxdWlja2x5IGJlY29tZSBjbGVhciBpbiBteSBtaW5kLiBBcmUgdGhleSB1c2luZyBhdG9taWMgb3BlcmF0aW9ucyBvciByZWx5IG9uIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX293bmVyX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX293bmVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jPTg5MD1zdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxuLS1cbm1tL3BhZ2Vfb3duZXIuYy04OTctXG5tbS9wYWdlX293bmVyLmM6ODk4OnN0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxubW0vcGFnZV9vd25lci5jLTg5OS17XG4tLVxubW0vcGFnZV9vd25lci5jPTEwMDA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0ge1xubW0vcGFnZV9vd25lci5jLTEwMDEtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbm1tL3BhZ2Vfb3duZXIuYzoxMDAyOlx0Lm9wZW5cdFx0PSBwYWdlX293bmVyX29wZW4sXG5tbS9wYWdlX293bmVyLmMtMTAwMy1cdC5yZWxlYXNlXHQ9IHBhZ2Vfb3duZXJfcmVsZWFzZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NTgKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogNDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBPd25lciBGaWx0ZXJpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgZmlsdGVyaW5nIHRvIHRoZSBgcGFnZV9vd25lcmAgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vcGFnZV9vd25lci5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCB0aGlzIGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IGJlY2F1c2UgaXQgaW50cm9kdWNlcyB1c2VyLWZhY2luZyBjaGFuZ2VzLiBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4KCkZpcnN0LCBpdCBhZGRzIGEgbmV3IGZ1bmN0aW9uLCBgcGFnZV9vd25lcl93cml0ZWAsIHdoaWNoIHBhcnNlcyB1c2VyIGlucHV0LiBUaGlzIGlzICpjcnVjaWFsKiBiZWNhdXNlIGFueXRoaW5nIHRoYXQgdGFrZXMgaW5wdXQgZnJvbSBhIHVzZXIsIGVzcGVjaWFsbHkgZm9yIGtlcm5lbCBmZWF0dXJlcywgc2NyZWFtcyAmIzM0O3BvdGVudGlhbCBmdXp6aW5nIHRhcmdldCYjMzQ7LiBUaGUgYHJlYWRfcGFnZV9vd25lcmAgZnVuY3Rpb24gdXRpbGl6ZXMgdGhlIGZpbHRlciBzdGF0ZSwgYW5kIGBwcmludF9wYWdlX293bmVyYCBmb3JtYXRzIG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGZpbHRlcnMuIFRoZXNlIGFyZSBhbGwgcGFydCBvZiB0aGUgc2FtZSBmaWx0cmF0aW9uIGNoYWluLgoKVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgcGFnZV9vd25lcl93cml0ZWAsIGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYHByaW50X3BhZ2Vfb3duZXJgLCBhbmQgYHJlYWRfcGFnZV9vd25lcmAuCgpMb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9ucywgYFBBR0VfT1dORVJgIHNlZW1zIHRvIGJlIHRoZSBjb250cm9sbGluZyBmbGFnLCB3aGljaCBhbHNvIHNlbGVjdHMgYERFQlVHX0ZTYCBhbmQgYFBBR0VfRVhURU5TSU9OYC4gVGhlc2UgYXJlIGltcG9ydGFudCB0byBub3RlLCBhcyB0aGUgY29uZmlndXJhdGlvbnMgY2FuIGhhdmUgYW4gaW1wYWN0LgoKTm93LCBJJiMzOTttIHNwb3R0aW5nIGEgY2hhbmdlIGluIHRoZSBkZWJ1Z2ZzIGZpbGUgcGVybWlzc2lvbnM6IGl0JiMzOTtzIGdvaW5nIGZyb20gcmVhZC1vbmx5IHRvIHJlYWQvd3JpdGUhICBUaGUgcGF0Y2ggY2hhbmdlcyBgZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3BhZ2Vfb3duZXImIzM0OywgMDQwMCwgTlVMTCwgTlVMTCwgJmFtcDtwYWdlX293bmVyX2ZvcHMpYCB0byBgZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3BhZ2Vfb3duZXImIzM0OywgMDYwMCwgTlVMTCwgTlVMTCwgJmFtcDtwYWdlX293bmVyX2ZvcHMpYC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IGV4cGxpY2l0bHkgZW5hYmxlcyB3cml0aW5nIHRvIHRoZSBmaWxlLCB3aGljaCByZWluZm9yY2VzIHRoZSBuZWVkIHRvIGZ1enogdGhlIHdyaXRlIGhhbmRsZXIuCgpTbywgdGhlIGNvcmUgbG9naWMgaGVyZTogdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2UgaXMgdG8gYWxsb3cgZmlsdGVyaW5nIG9mIHBhZ2Ugb3duZXIgaW5mb3JtYXRpb24gdGhyb3VnaCBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAuIFRoZSBhZGRpdGlvbiBvZiBgcGFnZV9vd25lcl93cml0ZWAgZm9yIHVzZXIgaW5wdXQsIHBsdXMgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYHJlYWRfcGFnZV9vd25lcmAgYW5kIGBwcmludF9wYWdlX293bmVyYCB0byBoYW5kbGUgZmlsdGVyaW5nIGxvZ2ljLCBtYWtlIGl0IGEgZGVmaW5pdGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBVc2VyIGlucHV0IHBhcnNpbmcgaXMgdGhlIHdlYWsgcG9pbnQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2suLi4gYHBhZ2Vfb3duZXJfd3JpdGVgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gIFN5emthbGxlciBjYW4gZnV6eiB0aG9zZSBhcyBsb25nIGFzIHRoZXkmIzM5O3JlIGluIHRoZSBmb2N1cyBsaXN0LiBBbmQgbG9va2luZyBiYWNrLCBgcmVhZF9wYWdlX293bmVyYCBhbmQgYHByaW50X3BhZ2Vfb3duZXJgIHdlcmUgYWxyZWFkeSB0aGVyZSwgYnV0IHRoZXkgd2VyZSBtb2RpZmllZCwgbWVhbmluZyB0aGV5JiMzOTtyZSBhbHNvIGludGVyZXN0aW5nLgoKVG8gc3VtbWFyaXplLCBhbGwgdGhlIGZ1bmN0aW9ucyBhcmUgbGlzdGVkOgpgcGFnZV9vd25lcl9vcGVuYApgcGFnZV9vd25lcl9yZWxlYXNlYApgcGFnZV9vd25lcl93cml0ZWAKYHByaW50X3BhZ2Vfb3duZXJgCmByZWFkX3BhZ2Vfb3duZXJgCgpJIHRoaW5rIEkmIzM5O3ZlIGdvdCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYXRjaCYjMzk7cyBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcsIGFuZCBJJiMzOTttIHJlYWR5IHRvIHNldCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlX293bmVyX3dyaXRlJiMzNDssCiAgICAmIzM0O3BhZ2Vfb3duZXJfb3BlbiYjMzQ7LAogICAgJiMzNDtwYWdlX293bmVyX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7cHJpbnRfcGFnZV9vd25lciYjMzQ7LAogICAgJiMzNDtyZWFkX3BhZ2Vfb3duZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB3cml0ZSBoYW5kbGVyIChgcGFnZV9vd25lcl93cml0ZWApIGZvciB0aGUgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIGRlYnVnZnMgZmlsZSB0byBzdXBwb3J0IGZpbHRlcmluZy4gSXQgYWxzbyBtb2RpZmllcyB0aGUgcmVhZCBoYW5kbGVyIChgcmVhZF9wYWdlX293bmVyYCkgYW5kIG91dHB1dCBmb3JtYXR0aW5nIChgcHJpbnRfcGFnZV9vd25lcmApIHRvIGFwcGx5IHRoZSBmaWx0ZXJzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgcGFyc2luZyB1c2VyIGlucHV0IGFuZCBtYW5hZ2luZyBwZXItZmQgc3RhdGUsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX09XTkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZV9vd25lcl93cml0ZSYjMzQ7LAogICAgJiMzNDtwYWdlX293bmVyX29wZW4mIzM0OywKICAgICYjMzQ7cGFnZV9vd25lcl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3ByaW50X3BhZ2Vfb3duZXImIzM0OywKICAgICYjMzQ7cmVhZF9wYWdlX293bmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd3JpdGUgaGFuZGxlciAoYHBhZ2Vfb3duZXJfd3JpdGVgKSBmb3IgdGhlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCBkZWJ1Z2ZzIGZpbGUgdG8gc3VwcG9ydCBmaWx0ZXJpbmcuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHJlYWQgaGFuZGxlciAoYHJlYWRfcGFnZV9vd25lcmApIGFuZCBvdXRwdXQgZm9ybWF0dGluZyAoYHByaW50X3BhZ2Vfb3duZXJgKSB0byBhcHBseSB0aGUgZmlsdGVycy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBhcnNpbmcgdXNlciBpbnB1dCBhbmQgbWFuYWdpbmcgcGVyLWZkIHN0YXRlLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjIwOjA0LjQwNDMzODM4OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzOTIwNTA4Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfT1dORVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlX293bmVyX3dyaXRlXCIsXG4gICAgXCJwYWdlX293bmVyX29wZW5cIixcbiAgICBcInBhZ2Vfb3duZXJfcmVsZWFzZVwiLFxuICAgIFwicHJpbnRfcGFnZV9vd25lclwiLFxuICAgIFwicmVhZF9wYWdlX293bmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB3cml0ZSBoYW5kbGVyIChgcGFnZV9vd25lcl93cml0ZWApIGZvciB0aGUgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIGRlYnVnZnMgZmlsZSB0byBzdXBwb3J0IGZpbHRlcmluZy4gSXQgYWxzbyBtb2RpZmllcyB0aGUgcmVhZCBoYW5kbGVyIChgcmVhZF9wYWdlX293bmVyYCkgYW5kIG91dHB1dCBmb3JtYXR0aW5nIChgcHJpbnRfcGFnZV9vd25lcmApIHRvIGFwcGx5IHRoZSBmaWx0ZXJzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgcGFyc2luZyB1c2VyIGlucHV0IGFuZCBtYW5hZ2luZyBwZXItZmQgc3RhdGUsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDoyMDowNC40MDQzNDU5MTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNDc4NzQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZjODJmZGZiYWE3ZTYxZDA3MDIzZDJlNzJhODdjNGE2MTM5NmE5ZTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgNyAyMDoyMDowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxcbmluZGV4IDZiMTJmM2IwMDdlYzkxLi4zODNlNTljNDI3NDNiZCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxcbkBAIC02NSw3ICs2NSwxNCBAQCB1bi10cmFja2luZyBzdGF0ZS5cXG4gVXNhZ2VcXG4gPT09PT1cXG4gXFxuLTEpIEJ1aWxkIHVzZXItc3BhY2UgaGVscGVyOjpcXG4rMSkgQnVpbGQgdXNlci1zcGFjZSBoZWxwZXJzOjpcXG4rXFxuK1RvIGZpbHRlciBwYWdlX293bmVyIG91dHB1dDpcXG4rXFxuK1xcdGNkIHRvb2xzL21tXFxuK1xcdG1ha2UgcGFnZV9vd25lcl9maWx0ZXJcXG4rXFxuK1RvIHNvcnQgYW5kIGFuYWx5emUgcGFnZV9vd25lciBvdXRwdXQ6XFxuIFxcbiBcXHRjZCB0b29scy9tbVxcbiBcXHRtYWtlIHBhZ2Vfb3duZXJfc29ydFxcbkBAIC03NCw3ICs4MSwxMSBAQCBVc2FnZVxcbiBcXG4gMykgRG8gdGhlIGpvYiB0aGF0IHlvdSB3YW50IHRvIGRlYnVnLlxcbiBcXG4tNCkgQW5hbHl6ZSBpbmZvcm1hdGlvbiBmcm9tIHBhZ2Ugb3duZXI6Olxcbis0KSAoT3B0aW9uYWwpIEZpbHRlciBwYWdlX293bmVyIG91dHB1dDo6XFxuK1xcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbiAwLDEsMiBcXHUwMDNlIGZpbHRlcmVkX3BhZ2Vfb3duZXIudHh0XFxuK1xcbis1KSBBbmFseXplIGluZm9ybWF0aW9uIGZyb20gcGFnZSBvd25lcjo6XFxuIFxcbiBcXHRjYXQgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcl9zdGFja3Mvc2hvd19zdGFja3MgXFx1MDAzZSBzdGFja3MudHh0XFxuIFxcdGNhdCBzdGFja3MudHh0XFxuQEAgLTI2MywzICsyNzQsNjUgQEAgU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlNcXG4gXFx0ZlxcdFxcdGZyZWVcXHRcXHR3aGV0aGVyIHRoZSBwYWdlIGhhcyBiZWVuIHJlbGVhc2VkIG9yIG5vdFxcbiBcXHRzdFxcdFxcdHN0YWNrdHJhY2VcXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXFxuIFxcdGF0b3JcXHRcXHRhbGxvY2F0b3JcXHRtZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlc1xcbitcXG4rRmlsdGVyaW5nIHBhZ2Vfb3duZXIgb3V0cHV0XFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK3BhZ2Vfb3duZXIgc3VwcG9ydHMgZmlsdGVyaW5nIG91dHB1dCBhdCB0aGUga2VybmVsIGxldmVsIGJlZm9yZSByZWFkaW5nLFxcbit3aGljaCByZWR1Y2VzIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBpbiB1c2Vyc3BhY2UuXFxuK1xcbitUaGUgcGFnZV9vd25lcl9maWx0ZXIgdG9vbCBwcm92aWRlcyBhIGNvbnZlbmllbnQgaW50ZXJmYWNlIGZvciB0aGlzIGZpbHRlcmluZ1xcbitjYXBhYmlsaXR5LiBJdCBzdXBwb3J0cyB0d28gdHlwZXMgb2YgZmlsdGVyczpcXG4rXFxuKzEuICoqcHJpbnRfbW9kZSBmaWx0ZXIqKjogQ29udHJvbCB3aGF0IGluZm9ybWF0aW9uIGlzIHByaW50ZWQgZm9yIGVhY2ggcGFnZVxcbitcXHQtIGBgc3RhY2tgYDogUHJpbnQgZnVsbCBzdGFjayB0cmFjZXMgKGRlZmF1bHQsIGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyB1c2FnZSlcXG4rXFx0LSBgYGhhbmRsZWBgOiBQcmludCBvbmx5IHN0YWNrIGhhbmRsZSBudW1iZXJzIChtdWNoIGZhc3Rlciwgc21hbGxlciBvdXRwdXQpXFxuK1xcdC0gYGBzdGFja19oYW5kbGVgYDogUHJpbnQgYm90aCBzdGFjayB0cmFjZXMgYW5kIGhhbmRsZSBudW1iZXJzXFxuK1xcbitcXHRUaGUgYGBoYW5kbGVgYCBtb2RlIHVzZXMgbnVtZXJpYyBpZGVudGlmaWVycyBpbnN0ZWFkIG9mIGZ1bGwgc3RhY2sgdHJhY2VzLlxcbitcXHRUaGUgbWFwcGluZyBmcm9tIGhhbmRsZXMgdG8gYWN0dWFsIHN0YWNrIHRyYWNlcyBjYW4gYmUgb2J0YWluZWQgdmlhIHRoZVxcbitcXHRzaG93X3N0YWNrc19oYW5kbGVzIGludGVyZmFjZS5cXG4rXFxuKzIuICoqTlVNQSBub2RlIGZpbHRlcioqOiBGaWx0ZXIgcGFnZXMgYnkgTlVNQSBub2RlIElEXFxuK1xcdC0gU3VwcG9ydHMgc2luZ2xlIG5vZGU6IGBgLW4gMGBgXFxuK1xcdC0gTXVsdGlwbGUgbm9kZXM6IGBgLW4gMCwxLDJgYFxcbitcXHQtIFJhbmdlczogYGAtbiAwLTNgYFxcbitcXHQtIE1peGVkIGZvcm1hdDogYGAtbiAwLDItMyw1YGBcXG4rXFxuK1VzYWdlIGV4YW1wbGVzOjpcXG4rXFxuK1xcdCMgRmlsdGVyIGJ5IHByaW50IG1vZGVcXG4rXFx0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGVcXG4rXFx0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGVcXG4rXFxuK1xcdCMgRmlsdGVyIGJ5IE5VTUEgbm9kZVxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDBcXG4rXFx0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwLTNcXG4rXFxuK1xcdCMgQ29tYmluZWQgZmlsdGVyc1xcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrIC1uIDAsMSwyXFxuK1xcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1uIDAsMi0zXFxuK1xcbitcXHQjIFNhdmUgdG8gZmlsZVxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbyBmaWx0ZXJlZF9vdXRwdXQudHh0XFxuK1xcbitUaGUgaGFuZGxlIG1vZGUgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgbW9uaXRvcmluZyBhbmQgcGVyZm9ybWFuY2UtY3JpdGljYWxcXG4rc2NlbmFyaW9zIGFzIGl0IGRyYW1hdGljYWxseSByZWR1Y2VzIG91dHB1dCBzaXplLiBUZXN0aW5nIHNob3dzIGhhbmRsZSBtb2RlIGNhblxcbityZWR1Y2Ugb3V0cHV0IHNpemUgYnkgfjY2JSAoODRNQiB2cyAyNDRNQikgYW5kIGltcHJvdmUgcmVhZCBwZXJmb3JtYW5jZSBieSB+NC40eFxcbitjb21wYXJlZCB0byBmdWxsIHN0YWNrIG91dHB1dC5cXG4rXFxuK1RoZSBOVU1BIG5vZGUgZmlsdGVyIGlzIHVzZWZ1bCBmb3IgTlVNQS1hd2FyZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmFseXNpcyBhbmQgZGVidWdnaW5nLlxcbitcXG4rQmVoaW5kIHRoZSBzY2VuZXMsIHBhZ2Vfb3duZXJfZmlsdGVyIG9wZW5zIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgYW5kXFxuK3dyaXRlcyBmaWx0ZXIgY29tbWFuZHMgYmVmb3JlIHJlYWRpbmcgdGhlIGZpbHRlcmVkIG91dHB1dC4gVGhlIGZpbHRlcmluZyB1c2VzXFxuK3Blci1maWxlLWRlc2NyaXB0b3Igc3RhdGUsIGFsbG93aW5nIGVhY2ggb3BlbigpIHRvIGhhdmUgaW5kZXBlbmRlbnQgZmlsdGVyIHNldHRpbmdzLlxcbitcXG4rRWFjaCBmaWxlIGRlc2NyaXB0b3IgbWFpbnRhaW5zIGl0cyBvd24gZmlsdGVyIHN0YXRlLCBzbyB5b3UgY2FuIGhhdmUgbXVsdGlwbGVcXG4raW5kZXBlbmRlbnQgZmlsdGVyaW5nIG9wZXJhdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuIEZvciBleGFtcGxlLCBpbiBkaWZmZXJlbnRcXG4rdGVybWluYWxzIHlvdSBjYW4gcnVuIGRpZmZlcmVudCBmaWx0ZXJzIHNpbXVsdGFuZW91c2x5OjpcXG4rXFxuK1xcdCMgVGVybWluYWwgMTogRmlsdGVyIG5vZGUgMFxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAgXFx1MDAzZSBub2RlMF9vdXRwdXQudHh0XFxuK1xcbitcXHQjIFRlcm1pbmFsIDI6IEZpbHRlciBub2RlIDEgKHJ1bnMgY29uY3VycmVudGx5KVxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDEgXFx1MDAzZSBub2RlMV9vdXRwdXQudHh0XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuY1xcbmluZGV4IDgxNzhlMGJlNTU3Zjg3Li5mMWQ0YzIwNWFmZjk3OSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX293bmVyLmNcXG4rKysgYi9tbS9wYWdlX293bmVyLmNcXG5AQCAtNTQsNiArNTQsMjQgQEAgc3RydWN0IHN0YWNrX3ByaW50X2N0eCB7XFxuIFxcdHU4IGZsYWdzO1xcbiB9O1xcbiBcXG4rZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUge1xcbitcXHRQQUdFX09XTkVSX1BSSU5UX1NUQUNLLFxcbitcXHRQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSxcXG4rXFx0UEFHRV9PV05FUl9QUklOVF9TVEFDS19IQU5ETEUsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBhZ2Vfb3duZXJfcHJpbnRfbW9kZV9zdHJpbmdzW10gPSB7XFxuK1xcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLXVxcdD0gXFxcInN0YWNrXFxcIixcXG4rXFx0W1BBR0VfT1dORVJfUFJJTlRfSEFORExFXVxcdD0gXFxcImhhbmRsZVxcXCIsXFxuK1xcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRV1cXHQ9IFxcXCJzdGFja19oYW5kbGVcXFwiLFxcbit9O1xcbitcXG4rc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlIHtcXG4rXFx0ZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTtcXG4rXFx0bm9kZW1hc2tfdCBuaWRfZmlsdGVyO1xcbitcXHRib29sIG5pZF9maWx0ZXJfZW5hYmxlZDtcXG4rfTtcXG4rXFxuIHN0YXRpYyBib29sIHBhZ2Vfb3duZXJfZW5hYmxlZCBfX2luaXRkYXRhO1xcbiBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwYWdlX293bmVyX2luaXRlZCk7XFxuIFxcbkBAIC01NDcsMTYgKzU2NSwyMCBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcXG4gc3RhdGljIHNzaXplX3RcXG4gcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXIsXFxuLVxcdFxcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZSlcXG4rXFx0XFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxcbitcXHRcXHRzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUgKnN0YXRlKVxcbiB7XFxuIFxcdGludCByZXQsIHBhZ2VibG9ja19tdCwgcGFnZV9tdDtcXG4gXFx0Y2hhciAqa2J1ZjtcXG4rXFx0ZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTtcXG4gXFxuIFxcdGNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgUEFHRV9TSVpFKTtcXG4gXFx0a2J1ZiA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpO1xcbiBcXHRpZiAoIWtidWYpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0cHJpbnRfbW9kZSA9IHN0YXRlLVxcdTAwM2VwcmludF9tb2RlO1xcbitcXG4gXFx0cmV0ID0gc2NucHJpbnRmKGtidWYsIGNvdW50LFxcbiBcXHRcXHRcXHRcXFwiUGFnZSBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUgbnNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLCBwYWdlX293bmVyLVxcdTAwM2VnZnBfbWFzayxcXG5AQCAtNTc1LDkgKzU5NywxOCBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdFxcdFxcdG1pZ3JhdGV0eXBlX25hbWVzW3BhZ2VibG9ja19tdF0sXFxuIFxcdFxcdFxcdFxcdTAwMjZwYWdlLVxcdTAwM2VmbGFncyk7XFxuIFxcbi1cXHRyZXQgKz0gc3RhY2tfZGVwb3Rfc25wcmludChoYW5kbGUsIGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCAwKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNlPSBjb3VudClcXG4tXFx0XFx0Z290byBlcnI7XFxuK1xcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfSEFORExFKSB7XFxuK1xcdFxcdHJldCArPSBzdGFja19kZXBvdF9zbnByaW50KGhhbmRsZSwga2J1ZiArIHJldCwgY291bnQgLSByZXQsIDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2U9IGNvdW50KVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHByaW50X21vZGUgIT0gUEFHRV9PV05FUl9QUklOVF9TVEFDSykge1xcbitcXHRcXHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCBcXFwiaGFuZGxlOiAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IGhhbmRsZSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZT0gY291bnQpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xcbiBcXHRcXHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LFxcbkBAIC02NjQsNiArNjk1LDcgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gXFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcXG4gXFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XFxuIFxcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcXG4rXFx0c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gXFxuIFxcdGlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtNzQwLDE1ICs3NzIsMzEgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gXFx0XFx0aWYgKCFoYW5kbGUpXFxuIFxcdFxcdFxcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcXG4gXFxuK1xcdFxcdGlmIChzdGF0ZS1cXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkKSB7XFxuK1xcdFxcdFxcdGludCBuaWQ7XFxuK1xcdFxcdFxcdG1lbWRlc2NfZmxhZ3NfdCBwYWdlX2ZsYWdzID0gUkVBRF9PTkNFKHBhZ2UtXFx1MDAzZWZsYWdzKTtcXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEJ5cGFzcyBQRl9QT0lTT05FRF9DSEVDSygpIGluIHBhZ2VfdG9fbmlkKCkgdG8gYXZvaWRcXG4rXFx0XFx0XFx0ICogVk1fQlVHX09OIHdoZW4gYWNjZXNzaW5nIHBvaXNvbmVkIHBhZ2VzLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKHBhZ2VfZmxhZ3MuZiA9PSBQQUdFX1BPSVNPTl9QQVRURVJOKVxcbitcXHRcXHRcXHRcXHRnb3RvIGV4dF9wdXRfY29udGludWU7XFxuK1xcdFxcdFxcdG5pZCA9IG1lbWRlc2NfbmlkKHBhZ2VfZmxhZ3MpO1xcbitcXHRcXHRcXHRpZiAoIW5vZGVfaXNzZXQobmlkLCBzdGF0ZS1cXHUwMDNlbmlkX2ZpbHRlcikpXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0LyogUmVjb3JkIHRoZSBuZXh0IFBGTiB0byByZWFkIGluIHRoZSBmaWxlIG9mZnNldCAqL1xcbiBcXHRcXHQqcHBvcyA9IHBmbiArIDE7XFxuIFxcbiBcXHRcXHRwYWdlX293bmVyX3RtcCA9ICpwYWdlX293bmVyO1xcbiBcXHRcXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xcbiBcXHRcXHRyZXR1cm4gcHJpbnRfcGFnZV9vd25lcihidWYsIGNvdW50LCBwZm4sIHBhZ2UsXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlKTtcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnBhZ2Vfb3duZXJfdG1wLCBoYW5kbGUsIHN0YXRlKTtcXG4gZXh0X3B1dF9jb250aW51ZTpcXG4gXFx0XFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC04NDcsNyArODk1LDExMyBAQCBzdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxcbiBcXHRcXHRpbml0X3BhZ2VzX2luX3pvbmUoem9uZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGU7XFxuK1xcbitcXHRzdGF0ZSA9IGt6YWxsb2Nfb2JqKCpzdGF0ZSk7XFxuK1xcdGlmICghc3RhdGUpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0c3RhdGUtXFx1MDAzZXByaW50X21vZGUgPSBQQUdFX09XTkVSX1BSSU5UX1NUQUNLO1xcbitcXHRub2Rlc19jbGVhcihzdGF0ZS1cXHUwMDNlbmlkX2ZpbHRlcik7XFxuK1xcdHN0YXRlLVxcdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQgPSBmYWxzZTtcXG4rXFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gc3RhdGU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBhZ2Vfb3duZXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRrZnJlZShmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgcGFnZV9vd25lcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuK1xcdFxcdFxcdFxcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4re1xcbitcXHRjaGFyICprYnVmO1xcbitcXHRjaGFyICpvcmlnO1xcbitcXHRjaGFyICp0b2tlbjtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0ZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgbmV3X3ByaW50X21vZGU7XFxuK1xcdG5vZGVtYXNrX3QgbmV3X25pZF9maWx0ZXI7XFxuK1xcdGJvb2wgbmV3X25pZF9maWx0ZXJfZW5hYmxlZDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1heGltdW0gaW5wdXQgbGVuZ3RoIGZvciBmaWx0ZXIgY29tbWFuZHM6XFxuK1xcdCAqIC0gMzI6IHByaW50X21vZGUgY29tbWFuZCBtYXggbGVuZ3RoIGlzIDE3IChcXFwibW9kZT1zdGFja19oYW5kbGVcXFwiKVxcbitcXHQgKiAgICAgICAgd2l0aCBzdWZmaWNpZW50IGJ1ZmZlclxcbitcXHQgKiAtIDYgKiBNQVhfTlVNTk9ERVM6IHdvcnN0IGNhc2UgZm9yIG5pZCBsaXN0XFxuK1xcdCAqICAgV29yc3QgY2FzZSBwZXIgbm9kZTogXFxcIixOTk5OTlxcXCIgKGNvbW1hICsgNS1kaWdpdCBub2RlIG51bWJlcikgPSA2IGJ5dGVzXFxuK1xcdCAqL1xcbitcXHRpZiAoY291bnQgXFx1MDAzZSAzMiArIDYgKiBNQVhfTlVNTk9ERVMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0a2J1ZiA9IG1lbWR1cF91c2VyX251bChidWYsIGNvdW50KTtcXG4rXFx0aWYgKElTX0VSUihrYnVmKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoa2J1Zik7XFxuK1xcbitcXHRvcmlnID0ga2J1ZjtcXG4rXFxuK1xcdG5ld19wcmludF9tb2RlID0gc3RhdGUtXFx1MDAzZXByaW50X21vZGU7XFxuK1xcdG5ld19uaWRfZmlsdGVyID0gc3RhdGUtXFx1MDAzZW5pZF9maWx0ZXI7XFxuK1xcdG5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSBzdGF0ZS1cXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkO1xcbitcXG4rXFx0d2hpbGUgKCh0b2tlbiA9IHN0cnNlcChcXHUwMDI2a2J1ZiwgXFxcIiBcXFxcdFxcXFxuXFxcIikpICE9IE5VTEwpIHtcXG4rXFx0XFx0aWYgKCp0b2tlbiA9PSAnXFxcXDAnKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlmICghc3RybmNtcCh0b2tlbiwgXFxcIm1vZGU9XFxcIiwgNSkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gc3lzZnNfbWF0Y2hfc3RyaW5nKHBhZ2Vfb3duZXJfcHJpbnRfbW9kZV9zdHJpbmdzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR0b2tlbiArIDUpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0XFx0XFx0bmV3X3ByaW50X21vZGUgPSByZXQ7XFxuK1xcdFxcdH0gZWxzZSBpZiAoIXN0cm5jbXAodG9rZW4sIFxcXCJuaWQ9XFxcIiwgNCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gbm9kZWxpc3RfcGFyc2UodG9rZW4gKyA0LCBuZXdfbmlkX2ZpbHRlcik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXG4rXFx0XFx0XFx0aWYgKG5vZGVzX2VtcHR5KG5ld19uaWRfZmlsdGVyKSkge1xcbitcXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBXZSB3YW50IHRvIGZpbHRlciBtZW1vcnkgYWxsb2NhdGlvbnMgYnkgbnVtYSBub2Rlcywgc28gbWFrZSBzdXJlXFxuK1xcdFxcdFxcdCAqIHRoYXQgdGhlIHNwZWNpZmllZCBub2RlcyBoYXZlIG1lbW9yeS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICghbm9kZXNfc3Vic2V0KG5ld19uaWRfZmlsdGVyLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdG5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSB0cnVlO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIENvbW1pdCBhbGwgZmlsdGVyIGNoYW5nZXMgKi9cXG4rXFx0c3RhdGUtXFx1MDAzZXByaW50X21vZGUgPSBuZXdfcHJpbnRfbW9kZTtcXG4rXFx0c3RhdGUtXFx1MDAzZW5pZF9maWx0ZXIgPSBuZXdfbmlkX2ZpbHRlcjtcXG4rXFx0c3RhdGUtXFx1MDAzZW5pZF9maWx0ZXJfZW5hYmxlZCA9IG5ld19uaWRfZmlsdGVyX2VuYWJsZWQ7XFxuK1xcbitcXHRyZXQgPSBjb3VudDtcXG4rXFxuK291dF9mcmVlOlxcbitcXHRrZnJlZShvcmlnKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0ge1xcbitcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbitcXHQub3BlblxcdFxcdD0gcGFnZV9vd25lcl9vcGVuLFxcbitcXHQucmVsZWFzZVxcdD0gcGFnZV9vd25lcl9yZWxlYXNlLFxcbitcXHQud3JpdGVcXHRcXHQ9IHBhZ2Vfb3duZXJfd3JpdGUsXFxuIFxcdC5yZWFkXFx0XFx0PSByZWFkX3BhZ2Vfb3duZXIsXFxuIFxcdC5sbHNlZWtcXHRcXHQ9IGxzZWVrX3BhZ2Vfb3duZXIsXFxuIH07XFxuQEAgLTk4MCw3ICsxMTM0LDcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInBhZ2Vfb3duZXJcXFwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcXHUwMDI2cGFnZV9vd25lcl9mb3BzKTtcXG4rXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwicGFnZV9vd25lclxcXCIsIDA2MDAsIE5VTEwsIE5VTEwsIFxcdTAwMjZwYWdlX293bmVyX2ZvcHMpO1xcbiBcXHRkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXFxcInBhZ2Vfb3duZXJfc3RhY2tzXFxcIiwgTlVMTCk7XFxuIFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNob3dfc3RhY2tzXFxcIiwgMDQwMCwgZGlyLFxcbiBcXHRcXHRcXHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcXG5pbmRleCBmNTcyNWI1YzIzYWEyNi4uODU4MTg2YTZlZWZkYmQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy9tbS9NYWtlZmlsZVxcbkBAIC0zLDcgKzMsNyBAQFxcbiAjXFxuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXFxuIFxcbi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XFxuK0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4gSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzXFxuIFxcbiBMSUJfRElSID0gLi4vbGliL2FwaVxcbkBAIC0yMyw3ICsyMyw3IEBAICQoTElCUyk6XFxuIFxcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXFx1MDAzYyAkKExERkxBR1MpXFxuIFxcbiBjbGVhbjpcXG4tXFx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4rXFx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4gXFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXFxuIFxcbiBzYmluZGlyID89IC91c3Ivc2JpblxcbmRpZmYgLS1naXQgYS90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jIGIvdG9vbHMvbW0vcGFnZV9vd25lcl9maWx0ZXIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjFkMWYwYTM4Njc4YTJmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmNcXG5AQCAtMCwwICsxLDMxMCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBVc2VyLXNwYWNlIGhlbHBlciB0byBmaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQgcGVyLWZkXFxuKyAqXFxuKyAqIEV4YW1wbGUgdXNlOlxcbisgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlXFxuKyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGVcXG4rICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAsMSwyXFxuKyAqXFxuKyAqIFNlZSBEb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2N0eXBlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NnZXRvcHQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBNQVhfQ01EX0xFTlxcdDUxMlxcbitcXG4rc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZylcXG4re1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlVzYWdlOiAlcyBbT1BUSU9OU11cXFxcblxcXCIsIHByb2cpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuT3B0aW9uczpcXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiAgLW0sIC0tbW9kZSBNT0RFICAgICAgOiBwcmludF9tb2RlIChzdGFjaywgaGFuZGxlLCBvciBzdGFja19oYW5kbGUpXFxcXG5cXFwiKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgIC1uLCAtLW5pZCBOSURfTElTVCAgIDogTlVNQSBub2RlIElEcyAoY29tbWEtc2VwYXJhdGVkIG9yIHJhbmdlcylcXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiAgLW8sIC0tb3V0cHV0IEZJTEUgICAgOiBvdXRwdXQgZmlsZSAoZGVmYXVsdDogc3Rkb3V0KVxcXFxuXFxcIik7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiICAtaCwgLS1oZWxwICAgICAgICAgICA6IHNob3cgdGhpcyBoZWxwIG1lc3NhZ2VcXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuRXhhbXBsZXM6XFxcXG5cXFwiKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgICVzIC1tIHN0YWNrXFxcXG5cXFwiLCBwcm9nKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgICVzIC1tIGhhbmRsZVxcXFxuXFxcIiwgcHJvZyk7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiICAlcyAtbSBzdGFja19oYW5kbGVcXFxcblxcXCIsIHByb2cpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiAgJXMgLW0gc3RhY2sgLW8gb3V0cHV0LnR4dFxcXFxuXFxcIiwgcHJvZyk7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiICAlcyAtbiAwLDEsMlxcXFxuXFxcIiwgcHJvZyk7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiICAlcyAtbSBzdGFjayAtbiAwXFxcXG5cXFwiLCBwcm9nKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2YWxpZGF0ZV9tb2RlKGNvbnN0IGNoYXIgKm1vZGUpXFxuK3tcXG4rXFx0aWYgKHN0cmNtcChtb2RlLCBcXFwic3RhY2tcXFwiKSA9PSAwIHx8XFxuK1xcdCAgICBzdHJjbXAobW9kZSwgXFxcImhhbmRsZVxcXCIpID09IDAgfHxcXG4rXFx0ICAgIHN0cmNtcChtb2RlLCBcXFwic3RhY2tfaGFuZGxlXFxcIikgPT0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBJbnZhbGlkIG1vZGUgJyVzJ1xcXFxuXFxcIiwgbW9kZSk7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiVmFsaWQgbW9kZXM6IHN0YWNrLCBoYW5kbGUsIHN0YWNrX2hhbmRsZVxcXFxuXFxcIik7XFxuK1xcdHJldHVybiAtMTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2YWxpZGF0ZV9uaWRfbGlzdChjb25zdCBjaGFyICpuaWRfbGlzdClcXG4re1xcbitcXHRjb25zdCBjaGFyICpwO1xcbitcXHRpbnQgaSA9IDA7XFxuK1xcdGludCBoYXNfZGlnaXQgPSAwO1xcbitcXHRpbnQgaW5fcmFuZ2UgPSAwO1xcbitcXHRpbnQgcHJldl9udW0gPSAwO1xcbitcXHRpbnQgY3Vycl9udW0gPSAwO1xcbitcXG4rXFx0aWYgKCFuaWRfbGlzdCB8fCBzdHJsZW4obmlkX2xpc3QpID09IDApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Zm9yIChwID0gbmlkX2xpc3Q7ICpwOyBwKyspIHtcXG4rXFx0XFx0aWYgKCpwID09ICcsJykge1xcbitcXHRcXHRcXHRpZiAoIWhhc19kaWdpdCkge1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoaW5fcmFuZ2UgXFx1MDAyNlxcdTAwMjYgcHJldl9udW0gXFx1MDAzZSBjdXJyX251bSkge1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVycixcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIkVycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlIFxcdTAwM2M9IGVuZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdHByZXZfbnVtLCBjdXJyX251bSk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpID0gMDtcXG4rXFx0XFx0XFx0aGFzX2RpZ2l0ID0gMDtcXG4rXFx0XFx0XFx0aW5fcmFuZ2UgPSAwO1xcbitcXHRcXHRcXHRwcmV2X251bSA9IDA7XFxuK1xcdFxcdFxcdGN1cnJfbnVtID0gMDtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICgqcCA9PSAnLScpIHtcXG4rXFx0XFx0XFx0aWYgKCFoYXNfZGlnaXQpIHtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXQgXFxcIik7XFxuK1xcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiKGRhc2ggd2l0aG91dCBwcmVjZWRpbmcgbnVtYmVyKVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoaW5fcmFuZ2UpIHtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJFcnJvcjogTXVsdGlwbGUgZGFzaGVzIGluIG5pZF9saXN0XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHByZXZfbnVtID0gY3Vycl9udW07XFxuK1xcdFxcdFxcdGN1cnJfbnVtID0gMDtcXG4rXFx0XFx0XFx0aSA9IDA7XFxuK1xcdFxcdFxcdGhhc19kaWdpdCA9IDA7XFxuK1xcdFxcdFxcdGluX3JhbmdlID0gMTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhcikqcCkpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJFcnJvcjogSW52YWxpZCBjaGFyYWN0ZXIgJyVjJyBpbiBuaWRfbGlzdFxcXFxuXFxcIiwgKnApO1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChpIFxcdTAwM2UgNSkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBOSUQgdG9vIGxvbmcgKG1heCA2NTUzNilcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y3Vycl9udW0gPSBjdXJyX251bSAqIDEwICsgKCpwIC0gJzAnKTtcXG4rXFx0XFx0aSsrO1xcbitcXHRcXHRoYXNfZGlnaXQgPSAxO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWhhc19kaWdpdCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGluX3JhbmdlIFxcdTAwMjZcXHUwMDI2IHByZXZfbnVtIFxcdTAwM2UgY3Vycl9udW0pIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsXFxuK1xcdFxcdFxcdFxcXCJFcnJvcjogSW52YWxpZCByYW5nZSAlZC0lZCAoc3RhcnQgbXVzdCBiZSBcXHUwMDNjPSBlbmQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwcmV2X251bSwgY3Vycl9udW0pO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKm91dHB1dF9maWxlID0gTlVMTDtcXG4rXFx0Y2hhciBmaWx0ZXJfY21kW01BWF9DTURfTEVOXTtcXG4rXFx0RklMRSAqb3V0cHV0ID0gTlVMTDtcXG4rXFx0aW50IGZkID0gLTE7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXHRjaGFyIGJ1Zls0MDk2XTtcXG4rXFx0aW50IG9wdDtcXG4rXFx0c2l6ZV90IGNtZF9sZW4gPSAwO1xcbitcXG4rXFx0c2lnbmFsKFNJR1BJUEUsIFNJR19JR04pO1xcbitcXG4rXFx0c3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7XFxuK1xcdFxcdHtcXFwibW9kZVxcXCIsXFx0cmVxdWlyZWRfYXJndW1lbnQsIDAsICdtJ30sXFxuK1xcdFxcdHtcXFwibmlkXFxcIixcXHRcXHRyZXF1aXJlZF9hcmd1bWVudCwgMCwgJ24nfSxcXG4rXFx0XFx0e1xcXCJvdXRwdXRcXFwiLFxcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnbyd9LFxcbitcXHRcXHR7XFxcImhlbHBcXFwiLFxcdG5vX2FyZ3VtZW50LFxcdCAgIDAsICdoJ30sXFxuK1xcdFxcdHswLCAwLCAwLCAwfVxcbitcXHR9O1xcbitcXG4rXFx0ZmlsdGVyX2NtZFswXSA9ICdcXFxcMCc7XFxuK1xcbitcXHRpZiAoYXJnYyBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0Zm9yIChpbnQgaSA9IDE7IGkgXFx1MDAzYyBhcmdjOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKHN0cmNtcChhcmd2W2ldLCBcXFwiLWhcXFwiKSA9PSAwIHx8IHN0cmNtcChhcmd2W2ldLCBcXFwiLS1oZWxwXFxcIikgPT0gMCkge1xcbitcXHRcXHRcXHRcXHR1c2FnZShhcmd2WzBdKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBDaGVjayBpZiBwYWdlX293bmVyIGV4aXN0cyBhbmQgaXMgcmVhZGFibGUgKi9cXG4rXFx0aWYgKGFjY2VzcyhcXFwiL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclxcXCIsIEZfT0spICE9IDApIHtcXG4rXFx0XFx0aWYgKGVycm5vID09IEVOT0VOVClcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJFcnJvcjogL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciBkb2VzIG5vdCBleGlzdFxcXFxuXFxcIik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGVycm9yKFxcXCJFcnJvciBhY2Nlc3NpbmcgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclxcXCIpO1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIk1ha2Ugc3VyZSBwYWdlX293bmVyIGlzIGVuYWJsZWQgaW4ga2VybmVsXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFxuK1xcdHdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgXFxcIm06bjpvOmhcXFwiLCBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkge1xcbitcXHRcXHRpbnQgbGVuO1xcbitcXG4rXFx0XFx0c3dpdGNoIChvcHQpIHtcXG4rXFx0XFx0Y2FzZSAnbSc6IHtcXG4rXFx0XFx0XFx0Y29uc3QgY2hhciAqbW9kZSA9IG9wdGFyZztcXG4rXFxuK1xcdFxcdFxcdGlmICh2YWxpZGF0ZV9tb2RlKG1vZGUpIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdFxcdFxcdGxlbiA9IHNucHJpbnRmKGZpbHRlcl9jbWQgKyBjbWRfbGVuLCBNQVhfQ01EX0xFTiAtIGNtZF9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiJXNtb2RlPSVzXFxcIiwgY21kX2xlbiBcXHUwMDNlIDAgPyBcXFwiIFxcXCIgOiBcXFwiXFxcIiwgbW9kZSk7XFxuK1xcdFxcdFxcdGlmIChsZW4gXFx1MDAzYyAwIHx8IGNtZF9sZW4gKyBsZW4gXFx1MDAzZT0gTUFYX0NNRF9MRU4pIHtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJFcnJvcjogQ29tbWFuZCB0b28gbG9uZ1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGNtZF9sZW4gKz0gbGVuO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRjYXNlICduJzoge1xcbitcXHRcXHRcXHRjb25zdCBjaGFyICpuaWRfbGlzdCA9IG9wdGFyZztcXG4rXFxuK1xcdFxcdFxcdGlmICh2YWxpZGF0ZV9uaWRfbGlzdChuaWRfbGlzdCkgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0XFx0bGVuID0gc25wcmludGYoZmlsdGVyX2NtZCArIGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCIlc25pZD0lc1xcXCIsIGNtZF9sZW4gXFx1MDAzZSAwID8gXFxcIiBcXFwiIDogXFxcIlxcXCIsIG5pZF9saXN0KTtcXG4rXFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjIDAgfHwgY21kX2xlbiArIGxlbiBcXHUwMDNlPSBNQVhfQ01EX0xFTikge1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBDb21tYW5kIHRvbyBsb25nXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0Y21kX2xlbiArPSBsZW47XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNhc2UgJ28nOlxcbitcXHRcXHRcXHRvdXRwdXRfZmlsZSA9IG9wdGFyZztcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ2gnOlxcbitcXHRcXHRcXHQvKiBBbHJlYWR5IGhhbmRsZWQgYWJvdmUgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdHVzYWdlKGFyZ3ZbMF0pO1xcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBBdCBsZWFzdCBvbmUgZmlsdGVyIG11c3QgYmUgc3BlY2lmaWVkICovXFxuK1xcdGlmIChjbWRfbGVuID09IDApIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJFcnJvcjogQXQgbGVhc3Qgb25lIGZpbHRlciAoLW0gb3IgLW4pIG11c3QgYmUgc3BlY2lmaWVkXFxcXG5cXFxcblxcXCIpO1xcbitcXHRcXHR1c2FnZShhcmd2WzBdKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIE9wZW4gcGFnZV9vd25lciBmb3IgcmVhZC13cml0ZSAtIHRoaXMgd2lsbCBmYWlsIGlmIGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgd3JpdGUgKi9cXG4rXFx0ZmQgPSBvcGVuKFxcXCIvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXFxcIiwgT19SRFdSKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRUFDQ0VTIHx8IGVycm5vID09IEVQRVJNKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZG9lcyBub3Qgc3VwcG9ydCB3cml0ZSBhY2Nlc3NcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlRoaXMga2VybmVsIGRvZXMgbm90IHN1cHBvcnQgXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwicGVyLWZkIGZpbHRlcmluZy5cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlBsZWFzZSBlbnN1cmUgeW91IGhhdmUgYSBrZXJuZWwgd2l0aCBcXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJwZXItZmQgZmlsdGVyaW5nIHN1cHBvcnQuXFxcXG5cXFwiKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cGVycm9yKFxcXCJFcnJvciBvcGVuaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJcXFwiKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG91dHB1dF9maWxlKSB7XFxuK1xcdFxcdG91dHB1dCA9IGZvcGVuKG91dHB1dF9maWxlLCBcXFwid1xcXCIpO1xcbitcXHRcXHRpZiAoIW91dHB1dCkge1xcbitcXHRcXHRcXHRwZXJyb3IoXFxcIm9wZW4gb3V0cHV0IGZpbGVcXFwiKTtcXG4rXFx0XFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRvdXRwdXQgPSBzdGRvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHdyaXRlKGZkLCBmaWx0ZXJfY21kLCBzdHJsZW4oZmlsdGVyX2NtZCkpO1xcbitcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0aWYgKGVycm5vID09IEVJTlZBTCkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBLZXJuZWwgcmVqZWN0ZWQgdGhlIGZpbHRlciBjb21tYW5kLlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiUG9zc2libGUgY2F1c2VzOlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiICAtIEtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHBlci1mZCBmaWx0ZXJpbmdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiAgLSBOVU1BIG5vZGUgaGFzIG5vIG1lbW9yeVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiICAtIFVua25vd24gcmVhc29uXFxcXG5cXFwiKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cGVycm9yKFxcXCJ3cml0ZSBmaWx0ZXIgY29tbWFuZFxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoKHNpemVfdClyZXQgIT0gc3RybGVuKGZpbHRlcl9jbWQpKVxcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIldhcm5pbmc6IFBhcnRpYWwgd3JpdGUgKCV6ZC8lenUpXFxcXG5cXFwiLCByZXQsIHN0cmxlbihmaWx0ZXJfY21kKSk7XFxuK1xcbitcXHQvKiBSZWFkIGFuZCBkaXNwbGF5IGZpbHRlcmVkIG91dHB1dCAqL1xcbitcXHRyZXQgPSAwO1xcbitcXHR3aGlsZSAoKHJldCA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0c2l6ZV90IHdyaXR0ZW4gPSBmd3JpdGUoYnVmLCAxLCByZXQsIG91dHB1dCk7XFxuK1xcbitcXHRcXHRpZiAod3JpdHRlbiAhPSAoc2l6ZV90KXJldCkge1xcbitcXHRcXHRcXHRpZiAoZXJybm8gPT0gRVBJUEUpIHtcXG4rXFx0XFx0XFx0XFx0LyogUGlwZSBjbG9zZWQsIHRyZWF0IGFzIHN1Y2Nlc3MgKi9cXG4rXFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cGVycm9yKFxcXCJ3cml0ZSBvdXRwdXRcXFwiKTtcXG4rXFx0XFx0XFx0cmV0ID0gLTE7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHBlcnJvcihcXFwicmVhZCBwYWdlX293bmVyXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZmZsdXNoKG91dHB1dCkpIHtcXG4rXFx0XFx0aWYgKGVycm5vID09IEVQSVBFKSB7XFxuK1xcdFxcdFxcdC8qIFBpcGUgY2xvc2VkLCB0cmVhdCBhcyBzdWNjZXNzICovXFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBlcnJvcihcXFwiZmx1c2ggb3V0cHV0XFxcIik7XFxuK1xcdFxcdFxcdHJldCA9IC0xO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK291dDpcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRpZiAob3V0cHV0ICE9IHN0ZG91dClcXG4rXFx0XFx0ZmNsb3NlKG91dHB1dCk7XFxuK1xcdHJldHVybiByZXQgXFx1MDAzYyAwID8gMSA6IDA7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6MjA6MDUuMTE2MjI3NjI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIwODYwMzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX09XTkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9vd25lcl93cml0ZVwiLFxuICAgIFwicGFnZV9vd25lcl9vcGVuXCIsXG4gICAgXCJwYWdlX293bmVyX3JlbGVhc2VcIixcbiAgICBcInByaW50X3BhZ2Vfb3duZXJcIixcbiAgICBcInJlYWRfcGFnZV9vd25lclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd3JpdGUgaGFuZGxlciAoYHBhZ2Vfb3duZXJfd3JpdGVgKSBmb3IgdGhlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCBkZWJ1Z2ZzIGZpbGUgdG8gc3VwcG9ydCBmaWx0ZXJpbmcuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHJlYWQgaGFuZGxlciAoYHJlYWRfcGFnZV9vd25lcmApIGFuZCBvdXRwdXQgZm9ybWF0dGluZyAoYHByaW50X3BhZ2Vfb3duZXJgKSB0byBhcHBseSB0aGUgZmlsdGVycy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBhcnNpbmcgdXNlciBpbnB1dCBhbmQgbWFuYWdpbmcgcGVyLWZkIHN0YXRlLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YzgyZmRmYmFhN2U2MWQwNzAyM2QyZTcyYTg3YzRhNjEzOTZhOWU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAyMDoyMDowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XG5pbmRleCA2YjEyZjNiMDA3ZWM5MS4uMzgzZTU5YzQyNzQzYmQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XG5AQCAtNjUsNyArNjUsMTQgQEAgdW4tdHJhY2tpbmcgc3RhdGUuXG4gVXNhZ2VcbiA9PT09PVxuIFxuLTEpIEJ1aWxkIHVzZXItc3BhY2UgaGVscGVyOjpcbisxKSBCdWlsZCB1c2VyLXNwYWNlIGhlbHBlcnM6OlxuK1xuK1RvIGZpbHRlciBwYWdlX293bmVyIG91dHB1dDpcbitcbitcdGNkIHRvb2xzL21tXG4rXHRtYWtlIHBhZ2Vfb3duZXJfZmlsdGVyXG4rXG4rVG8gc29ydCBhbmQgYW5hbHl6ZSBwYWdlX293bmVyIG91dHB1dDpcbiBcbiBcdGNkIHRvb2xzL21tXG4gXHRtYWtlIHBhZ2Vfb3duZXJfc29ydFxuQEAgLTc0LDcgKzgxLDExIEBAIFVzYWdlXG4gXG4gMykgRG8gdGhlIGpvYiB0aGF0IHlvdSB3YW50IHRvIGRlYnVnLlxuIFxuLTQpIEFuYWx5emUgaW5mb3JtYXRpb24gZnJvbSBwYWdlIG93bmVyOjpcbis0KSAoT3B0aW9uYWwpIEZpbHRlciBwYWdlX293bmVyIG91dHB1dDo6XG4rXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbiAwLDEsMiBcdTAwM2UgZmlsdGVyZWRfcGFnZV9vd25lci50eHRcbitcbis1KSBBbmFseXplIGluZm9ybWF0aW9uIGZyb20gcGFnZSBvd25lcjo6XG4gXG4gXHRjYXQgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcl9zdGFja3Mvc2hvd19zdGFja3MgXHUwMDNlIHN0YWNrcy50eHRcbiBcdGNhdCBzdGFja3MudHh0XG5AQCAtMjYzLDMgKzI3NCw2NSBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuIFx0Zlx0XHRmcmVlXHRcdHdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90XG4gXHRzdFx0XHRzdGFja3RyYWNlXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXG4gXHRhdG9yXHRcdGFsbG9jYXRvclx0bWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXNcbitcbitGaWx0ZXJpbmcgcGFnZV9vd25lciBvdXRwdXRcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rcGFnZV9vd25lciBzdXBwb3J0cyBmaWx0ZXJpbmcgb3V0cHV0IGF0IHRoZSBrZXJuZWwgbGV2ZWwgYmVmb3JlIHJlYWRpbmcsXG4rd2hpY2ggcmVkdWNlcyB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBwcm9jZXNzZWQgaW4gdXNlcnNwYWNlLlxuK1xuK1RoZSBwYWdlX293bmVyX2ZpbHRlciB0b29sIHByb3ZpZGVzIGEgY29udmVuaWVudCBpbnRlcmZhY2UgZm9yIHRoaXMgZmlsdGVyaW5nXG4rY2FwYWJpbGl0eS4gSXQgc3VwcG9ydHMgdHdvIHR5cGVzIG9mIGZpbHRlcnM6XG4rXG4rMS4gKipwcmludF9tb2RlIGZpbHRlcioqOiBDb250cm9sIHdoYXQgaW5mb3JtYXRpb24gaXMgcHJpbnRlZCBmb3IgZWFjaCBwYWdlXG4rXHQtIGBgc3RhY2tgYDogUHJpbnQgZnVsbCBzdGFjayB0cmFjZXMgKGRlZmF1bHQsIGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyB1c2FnZSlcbitcdC0gYGBoYW5kbGVgYDogUHJpbnQgb25seSBzdGFjayBoYW5kbGUgbnVtYmVycyAobXVjaCBmYXN0ZXIsIHNtYWxsZXIgb3V0cHV0KVxuK1x0LSBgYHN0YWNrX2hhbmRsZWBgOiBQcmludCBib3RoIHN0YWNrIHRyYWNlcyBhbmQgaGFuZGxlIG51bWJlcnNcbitcbitcdFRoZSBgYGhhbmRsZWBgIG1vZGUgdXNlcyBudW1lcmljIGlkZW50aWZpZXJzIGluc3RlYWQgb2YgZnVsbCBzdGFjayB0cmFjZXMuXG4rXHRUaGUgbWFwcGluZyBmcm9tIGhhbmRsZXMgdG8gYWN0dWFsIHN0YWNrIHRyYWNlcyBjYW4gYmUgb2J0YWluZWQgdmlhIHRoZVxuK1x0c2hvd19zdGFja3NfaGFuZGxlcyBpbnRlcmZhY2UuXG4rXG4rMi4gKipOVU1BIG5vZGUgZmlsdGVyKio6IEZpbHRlciBwYWdlcyBieSBOVU1BIG5vZGUgSURcbitcdC0gU3VwcG9ydHMgc2luZ2xlIG5vZGU6IGBgLW4gMGBgXG4rXHQtIE11bHRpcGxlIG5vZGVzOiBgYC1uIDAsMSwyYGBcbitcdC0gUmFuZ2VzOiBgYC1uIDAtM2BgXG4rXHQtIE1peGVkIGZvcm1hdDogYGAtbiAwLDItMyw1YGBcbitcbitVc2FnZSBleGFtcGxlczo6XG4rXG4rXHQjIEZpbHRlciBieSBwcmludCBtb2RlXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZVxuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGVcbitcbitcdCMgRmlsdGVyIGJ5IE5VTUEgbm9kZVxuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAtM1xuK1xuK1x0IyBDb21iaW5lZCBmaWx0ZXJzXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrIC1uIDAsMSwyXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbiAwLDItM1xuK1xuK1x0IyBTYXZlIHRvIGZpbGVcbitcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1vIGZpbHRlcmVkX291dHB1dC50eHRcbitcbitUaGUgaGFuZGxlIG1vZGUgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgbW9uaXRvcmluZyBhbmQgcGVyZm9ybWFuY2UtY3JpdGljYWxcbitzY2VuYXJpb3MgYXMgaXQgZHJhbWF0aWNhbGx5IHJlZHVjZXMgb3V0cHV0IHNpemUuIFRlc3Rpbmcgc2hvd3MgaGFuZGxlIG1vZGUgY2FuXG4rcmVkdWNlIG91dHB1dCBzaXplIGJ5IH42NiUgKDg0TUIgdnMgMjQ0TUIpIGFuZCBpbXByb3ZlIHJlYWQgcGVyZm9ybWFuY2UgYnkgfjQuNHhcbitjb21wYXJlZCB0byBmdWxsIHN0YWNrIG91dHB1dC5cbitcbitUaGUgTlVNQSBub2RlIGZpbHRlciBpcyB1c2VmdWwgZm9yIE5VTUEtYXdhcmUgbWVtb3J5IGFsbG9jYXRpb24gYW5hbHlzaXMgYW5kIGRlYnVnZ2luZy5cbitcbitCZWhpbmQgdGhlIHNjZW5lcywgcGFnZV9vd25lcl9maWx0ZXIgb3BlbnMgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciBhbmRcbit3cml0ZXMgZmlsdGVyIGNvbW1hbmRzIGJlZm9yZSByZWFkaW5nIHRoZSBmaWx0ZXJlZCBvdXRwdXQuIFRoZSBmaWx0ZXJpbmcgdXNlc1xuK3Blci1maWxlLWRlc2NyaXB0b3Igc3RhdGUsIGFsbG93aW5nIGVhY2ggb3BlbigpIHRvIGhhdmUgaW5kZXBlbmRlbnQgZmlsdGVyIHNldHRpbmdzLlxuK1xuK0VhY2ggZmlsZSBkZXNjcmlwdG9yIG1haW50YWlucyBpdHMgb3duIGZpbHRlciBzdGF0ZSwgc28geW91IGNhbiBoYXZlIG11bHRpcGxlXG4raW5kZXBlbmRlbnQgZmlsdGVyaW5nIG9wZXJhdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuIEZvciBleGFtcGxlLCBpbiBkaWZmZXJlbnRcbit0ZXJtaW5hbHMgeW91IGNhbiBydW4gZGlmZmVyZW50IGZpbHRlcnMgc2ltdWx0YW5lb3VzbHk6OlxuK1xuK1x0IyBUZXJtaW5hbCAxOiBGaWx0ZXIgbm9kZSAwXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAgXHUwMDNlIG5vZGUwX291dHB1dC50eHRcbitcbitcdCMgVGVybWluYWwgMjogRmlsdGVyIG5vZGUgMSAocnVucyBjb25jdXJyZW50bHkpXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDEgXHUwMDNlIG5vZGUxX291dHB1dC50eHRcbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcbmluZGV4IDgxNzhlMGJlNTU3Zjg3Li5mMWQ0YzIwNWFmZjk3OSAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xuKysrIGIvbW0vcGFnZV9vd25lci5jXG5AQCAtNTQsNiArNTQsMjQgQEAgc3RydWN0IHN0YWNrX3ByaW50X2N0eCB7XG4gXHR1OCBmbGFncztcbiB9O1xuIFxuK2VudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIHtcbitcdFBBR0VfT1dORVJfUFJJTlRfU1RBQ0ssXG4rXHRQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSxcbitcdFBBR0VfT1dORVJfUFJJTlRfU1RBQ0tfSEFORExFLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwYWdlX293bmVyX3ByaW50X21vZGVfc3RyaW5nc1tdID0ge1xuK1x0W1BBR0VfT1dORVJfUFJJTlRfU1RBQ0tdXHQ9IFwic3RhY2tcIixcbitcdFtQQUdFX09XTkVSX1BSSU5UX0hBTkRMRV1cdD0gXCJoYW5kbGVcIixcbitcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRV1cdD0gXCJzdGFja19oYW5kbGVcIixcbit9O1xuK1xuK3N0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSB7XG4rXHRlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBwcmludF9tb2RlO1xuK1x0bm9kZW1hc2tfdCBuaWRfZmlsdGVyO1xuK1x0Ym9vbCBuaWRfZmlsdGVyX2VuYWJsZWQ7XG4rfTtcbitcbiBzdGF0aWMgYm9vbCBwYWdlX293bmVyX2VuYWJsZWQgX19pbml0ZGF0YTtcbiBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwYWdlX293bmVyX2luaXRlZCk7XG4gXG5AQCAtNTQ3LDE2ICs1NjUsMjAgQEAgc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4gc3RhdGljIHNzaXplX3RcbiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcixcbi1cdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlKVxuK1x0XHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXG4rXHRcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0aW50IHJldCwgcGFnZWJsb2NrX210LCBwYWdlX210O1xuIFx0Y2hhciAqa2J1ZjtcbitcdGVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIHByaW50X21vZGU7XG4gXG4gXHRjb3VudCA9IG1pbl90KHNpemVfdCwgY291bnQsIFBBR0VfU0laRSk7XG4gXHRrYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIWtidWYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuK1x0cHJpbnRfbW9kZSA9IHN0YXRlLVx1MDAzZXByaW50X21vZGU7XG4rXG4gXHRyZXQgPSBzY25wcmludGYoa2J1ZiwgY291bnQsXG4gXHRcdFx0XCJQYWdlIGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSBuc1xcblwiLFxuIFx0XHRcdHBhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIHBhZ2Vfb3duZXItXHUwMDNlZ2ZwX21hc2ssXG5AQCAtNTc1LDkgKzU5NywxOCBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdFx0bWlncmF0ZXR5cGVfbmFtZXNbcGFnZWJsb2NrX210XSxcbiBcdFx0XHRcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiBcbi1cdHJldCArPSBzdGFja19kZXBvdF9zbnByaW50KGhhbmRsZSwga2J1ZiArIHJldCwgY291bnQgLSByZXQsIDApO1xuLVx0aWYgKHJldCBcdTAwM2U9IGNvdW50KVxuLVx0XHRnb3RvIGVycjtcbitcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfSEFORExFKSB7XG4rXHRcdHJldCArPSBzdGFja19kZXBvdF9zbnByaW50KGhhbmRsZSwga2J1ZiArIHJldCwgY291bnQgLSByZXQsIDApO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gY291bnQpXG4rXHRcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4rXHRpZiAocHJpbnRfbW9kZSAhPSBQQUdFX09XTkVSX1BSSU5UX1NUQUNLKSB7XG4rXHRcdHJldCArPSBzY25wcmludGYoa2J1ZiArIHJldCwgY291bnQgLSByZXQsIFwiaGFuZGxlOiAldVxcblwiLFxuK1x0XHRcdFx0IGhhbmRsZSk7XG4rXHRcdGlmIChyZXQgXHUwMDNlPSBjb3VudClcbitcdFx0XHRnb3RvIGVycjtcbitcdH1cbiBcbiBcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHtcbiBcdFx0cmV0ICs9IHNjbnByaW50ZihrYnVmICsgcmV0LCBjb3VudCAtIHJldCxcbkBAIC02NjQsNiArNjk1LDcgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiBcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQ7XG4gXHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbiBcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbitcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcbiBcdGlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTc0MCwxNSArNzcyLDMxIEBAIHJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gXHRcdGlmICghaGFuZGxlKVxuIFx0XHRcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcbiBcbitcdFx0aWYgKHN0YXRlLVx1MDAzZW5pZF9maWx0ZXJfZW5hYmxlZCkge1xuK1x0XHRcdGludCBuaWQ7XG4rXHRcdFx0bWVtZGVzY19mbGFnc190IHBhZ2VfZmxhZ3MgPSBSRUFEX09OQ0UocGFnZS1cdTAwM2VmbGFncyk7XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBCeXBhc3MgUEZfUE9JU09ORURfQ0hFQ0soKSBpbiBwYWdlX3RvX25pZCgpIHRvIGF2b2lkXG4rXHRcdFx0ICogVk1fQlVHX09OIHdoZW4gYWNjZXNzaW5nIHBvaXNvbmVkIHBhZ2VzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChwYWdlX2ZsYWdzLmYgPT0gUEFHRV9QT0lTT05fUEFUVEVSTilcbitcdFx0XHRcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcbitcdFx0XHRuaWQgPSBtZW1kZXNjX25pZChwYWdlX2ZsYWdzKTtcbitcdFx0XHRpZiAoIW5vZGVfaXNzZXQobmlkLCBzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyKSlcbitcdFx0XHRcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHQvKiBSZWNvcmQgdGhlIG5leHQgUEZOIHRvIHJlYWQgaW4gdGhlIGZpbGUgb2Zmc2V0ICovXG4gXHRcdCpwcG9zID0gcGZuICsgMTtcbiBcbiBcdFx0cGFnZV9vd25lcl90bXAgPSAqcGFnZV9vd25lcjtcbiBcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiBcdFx0cmV0dXJuIHByaW50X3BhZ2Vfb3duZXIoYnVmLCBjb3VudCwgcGZuLCBwYWdlLFxuLVx0XHRcdFx0XHUwMDI2cGFnZV9vd25lcl90bXAsIGhhbmRsZSk7XG4rXHRcdFx0XHRcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlLCBzdGF0ZSk7XG4gZXh0X3B1dF9jb250aW51ZTpcbiBcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbitcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04NDcsNyArODk1LDExMyBAQCBzdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxuIFx0XHRpbml0X3BhZ2VzX2luX3pvbmUoem9uZSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGU7XG4rXG4rXHRzdGF0ZSA9IGt6YWxsb2Nfb2JqKCpzdGF0ZSk7XG4rXHRpZiAoIXN0YXRlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHN0YXRlLVx1MDAzZXByaW50X21vZGUgPSBQQUdFX09XTkVSX1BSSU5UX1NUQUNLO1xuK1x0bm9kZXNfY2xlYXIoc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcik7XG4rXHRzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQgPSBmYWxzZTtcbitcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gc3RhdGU7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBwYWdlX293bmVyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0a2ZyZWUoZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IHBhZ2Vfb3duZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4rXHRcdFx0XHQgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbitcdFx0XHRcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbit7XG4rXHRjaGFyICprYnVmO1xuK1x0Y2hhciAqb3JpZztcbitcdGNoYXIgKnRva2VuO1xuK1x0aW50IHJldDtcbitcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdGVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIG5ld19wcmludF9tb2RlO1xuK1x0bm9kZW1hc2tfdCBuZXdfbmlkX2ZpbHRlcjtcbitcdGJvb2wgbmV3X25pZF9maWx0ZXJfZW5hYmxlZDtcbitcbitcdC8qXG4rXHQgKiBNYXhpbXVtIGlucHV0IGxlbmd0aCBmb3IgZmlsdGVyIGNvbW1hbmRzOlxuK1x0ICogLSAzMjogcHJpbnRfbW9kZSBjb21tYW5kIG1heCBsZW5ndGggaXMgMTcgKFwibW9kZT1zdGFja19oYW5kbGVcIilcbitcdCAqICAgICAgICB3aXRoIHN1ZmZpY2llbnQgYnVmZmVyXG4rXHQgKiAtIDYgKiBNQVhfTlVNTk9ERVM6IHdvcnN0IGNhc2UgZm9yIG5pZCBsaXN0XG4rXHQgKiAgIFdvcnN0IGNhc2UgcGVyIG5vZGU6IFwiLE5OTk5OXCIgKGNvbW1hICsgNS1kaWdpdCBub2RlIG51bWJlcikgPSA2IGJ5dGVzXG4rXHQgKi9cbitcdGlmIChjb3VudCBcdTAwM2UgMzIgKyA2ICogTUFYX05VTU5PREVTKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGtidWYgPSBtZW1kdXBfdXNlcl9udWwoYnVmLCBjb3VudCk7XG4rXHRpZiAoSVNfRVJSKGtidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihrYnVmKTtcbitcbitcdG9yaWcgPSBrYnVmO1xuK1xuK1x0bmV3X3ByaW50X21vZGUgPSBzdGF0ZS1cdTAwM2VwcmludF9tb2RlO1xuK1x0bmV3X25pZF9maWx0ZXIgPSBzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyO1xuK1x0bmV3X25pZF9maWx0ZXJfZW5hYmxlZCA9IHN0YXRlLVx1MDAzZW5pZF9maWx0ZXJfZW5hYmxlZDtcbitcbitcdHdoaWxlICgodG9rZW4gPSBzdHJzZXAoXHUwMDI2a2J1ZiwgXCIgXFx0XFxuXCIpKSAhPSBOVUxMKSB7XG4rXHRcdGlmICgqdG9rZW4gPT0gJ1xcMCcpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICghc3RybmNtcCh0b2tlbiwgXCJtb2RlPVwiLCA1KSkge1xuK1x0XHRcdHJldCA9IHN5c2ZzX21hdGNoX3N0cmluZyhwYWdlX293bmVyX3ByaW50X21vZGVfc3RyaW5ncyxcbitcdFx0XHRcdFx0XHR0b2tlbiArIDUpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHRcdG5ld19wcmludF9tb2RlID0gcmV0O1xuK1x0XHR9IGVsc2UgaWYgKCFzdHJuY21wKHRva2VuLCBcIm5pZD1cIiwgNCkpIHtcbitcdFx0XHRyZXQgPSBub2RlbGlzdF9wYXJzZSh0b2tlbiArIDQsIG5ld19uaWRfZmlsdGVyKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbitcbitcdFx0XHRpZiAobm9kZXNfZW1wdHkobmV3X25pZF9maWx0ZXIpKSB7XG4rXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBXZSB3YW50IHRvIGZpbHRlciBtZW1vcnkgYWxsb2NhdGlvbnMgYnkgbnVtYSBub2Rlcywgc28gbWFrZSBzdXJlXG4rXHRcdFx0ICogdGhhdCB0aGUgc3BlY2lmaWVkIG5vZGVzIGhhdmUgbWVtb3J5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghbm9kZXNfc3Vic2V0KG5ld19uaWRfZmlsdGVyLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pKSB7XG4rXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0bmV3X25pZF9maWx0ZXJfZW5hYmxlZCA9IHRydWU7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBDb21taXQgYWxsIGZpbHRlciBjaGFuZ2VzICovXG4rXHRzdGF0ZS1cdTAwM2VwcmludF9tb2RlID0gbmV3X3ByaW50X21vZGU7XG4rXHRzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyID0gbmV3X25pZF9maWx0ZXI7XG4rXHRzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQgPSBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkO1xuK1xuK1x0cmV0ID0gY291bnQ7XG4rXG4rb3V0X2ZyZWU6XG4rXHRrZnJlZShvcmlnKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfZm9wcyA9IHtcbitcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuK1x0Lm9wZW5cdFx0PSBwYWdlX293bmVyX29wZW4sXG4rXHQucmVsZWFzZVx0PSBwYWdlX293bmVyX3JlbGVhc2UsXG4rXHQud3JpdGVcdFx0PSBwYWdlX293bmVyX3dyaXRlLFxuIFx0LnJlYWRcdFx0PSByZWFkX3BhZ2Vfb3duZXIsXG4gXHQubGxzZWVrXHRcdD0gbHNlZWtfcGFnZV9vd25lcixcbiB9O1xuQEAgLTk4MCw3ICsxMTM0LDcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwicGFnZV9vd25lclwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcdTAwMjZwYWdlX293bmVyX2ZvcHMpO1xuK1x0ZGVidWdmc19jcmVhdGVfZmlsZShcInBhZ2Vfb3duZXJcIiwgMDYwMCwgTlVMTCwgTlVMTCwgXHUwMDI2cGFnZV9vd25lcl9mb3BzKTtcbiBcdGRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihcInBhZ2Vfb3duZXJfc3RhY2tzXCIsIE5VTEwpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcInNob3dfc3RhY2tzXCIsIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxuaW5kZXggZjU3MjViNWMyM2FhMjYuLjg1ODE4NmE2ZWVmZGJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL21tL01ha2VmaWxlXG5AQCAtMyw3ICszLDcgQEBcbiAjXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcbiBcbi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4rQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xuIFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXG5AQCAtMjMsNyArMjMsNyBAQCAkKExJQlMpOlxuIFx0JChDQykgJChDRkxBR1MpIC1vICRAICRcdTAwM2MgJChMREZMQUdTKVxuIFxuIGNsZWFuOlxuLVx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbitcdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4gXHRtYWtlIC1DICQoTElCX0RJUikgY2xlYW5cbiBcbiBzYmluZGlyID89IC91c3Ivc2JpblxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmMgYi90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjFkMWYwYTM4Njc4YTJmXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jXG5AQCAtMCwwICsxLDMxMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBVc2VyLXNwYWNlIGhlbHBlciB0byBmaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQgcGVyLWZkXG4rICpcbisgKiBFeGFtcGxlIHVzZTpcbisgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlXG4rICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrX2hhbmRsZVxuKyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbiAwLDEsMlxuKyAqXG4rICogU2VlIERvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NjdHlwZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZ2V0b3B0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuK1xuKyNkZWZpbmUgTUFYX0NNRF9MRU5cdDUxMlxuK1xuK3N0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2cpXG4re1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiVXNhZ2U6ICVzIFtPUFRJT05TXVxcblwiLCBwcm9nKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIlxcbk9wdGlvbnM6XFxuXCIpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiICAtbSwgLS1tb2RlIE1PREUgICAgICA6IHByaW50X21vZGUgKHN0YWNrLCBoYW5kbGUsIG9yIHN0YWNrX2hhbmRsZSlcXG5cIik7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCIgIC1uLCAtLW5pZCBOSURfTElTVCAgIDogTlVNQSBub2RlIElEcyAoY29tbWEtc2VwYXJhdGVkIG9yIHJhbmdlcylcXG5cIik7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCIgIC1vLCAtLW91dHB1dCBGSUxFICAgIDogb3V0cHV0IGZpbGUgKGRlZmF1bHQ6IHN0ZG91dClcXG5cIik7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCIgIC1oLCAtLWhlbHAgICAgICAgICAgIDogc2hvdyB0aGlzIGhlbHAgbWVzc2FnZVxcblwiKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIlxcbkV4YW1wbGVzOlxcblwiKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIiAgJXMgLW0gc3RhY2tcXG5cIiwgcHJvZyk7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCIgICVzIC1tIGhhbmRsZVxcblwiLCBwcm9nKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIiAgJXMgLW0gc3RhY2tfaGFuZGxlXFxuXCIsIHByb2cpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiICAlcyAtbSBzdGFjayAtbyBvdXRwdXQudHh0XFxuXCIsIHByb2cpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiICAlcyAtbiAwLDEsMlxcblwiLCBwcm9nKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIiAgJXMgLW0gc3RhY2sgLW4gMFxcblwiLCBwcm9nKTtcbit9XG4rXG4rc3RhdGljIGludCB2YWxpZGF0ZV9tb2RlKGNvbnN0IGNoYXIgKm1vZGUpXG4re1xuK1x0aWYgKHN0cmNtcChtb2RlLCBcInN0YWNrXCIpID09IDAgfHxcbitcdCAgICBzdHJjbXAobW9kZSwgXCJoYW5kbGVcIikgPT0gMCB8fFxuK1x0ICAgIHN0cmNtcChtb2RlLCBcInN0YWNrX2hhbmRsZVwiKSA9PSAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiBJbnZhbGlkIG1vZGUgJyVzJ1xcblwiLCBtb2RlKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIlZhbGlkIG1vZGVzOiBzdGFjaywgaGFuZGxlLCBzdGFja19oYW5kbGVcXG5cIik7XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdmFsaWRhdGVfbmlkX2xpc3QoY29uc3QgY2hhciAqbmlkX2xpc3QpXG4re1xuK1x0Y29uc3QgY2hhciAqcDtcbitcdGludCBpID0gMDtcbitcdGludCBoYXNfZGlnaXQgPSAwO1xuK1x0aW50IGluX3JhbmdlID0gMDtcbitcdGludCBwcmV2X251bSA9IDA7XG4rXHRpbnQgY3Vycl9udW0gPSAwO1xuK1xuK1x0aWYgKCFuaWRfbGlzdCB8fCBzdHJsZW4obmlkX2xpc3QpID09IDApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Zm9yIChwID0gbmlkX2xpc3Q7ICpwOyBwKyspIHtcbitcdFx0aWYgKCpwID09ICcsJykge1xuK1x0XHRcdGlmICghaGFzX2RpZ2l0KSB7XG4rXHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXRcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0fVxuK1x0XHRcdGlmIChpbl9yYW5nZSBcdTAwMjZcdTAwMjYgcHJldl9udW0gXHUwMDNlIGN1cnJfbnVtKSB7XG4rXHRcdFx0XHRmcHJpbnRmKHN0ZGVycixcbitcdFx0XHRcdFx0XCJFcnJvcjogSW52YWxpZCByYW5nZSAlZC0lZCAoc3RhcnQgbXVzdCBiZSBcdTAwM2M9IGVuZClcXG5cIixcbitcdFx0XHRcdFx0cHJldl9udW0sIGN1cnJfbnVtKTtcbitcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHR9XG4rXHRcdFx0aSA9IDA7XG4rXHRcdFx0aGFzX2RpZ2l0ID0gMDtcbitcdFx0XHRpbl9yYW5nZSA9IDA7XG4rXHRcdFx0cHJldl9udW0gPSAwO1xuK1x0XHRcdGN1cnJfbnVtID0gMDtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoKnAgPT0gJy0nKSB7XG4rXHRcdFx0aWYgKCFoYXNfZGlnaXQpIHtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLFxuK1x0XHRcdFx0XHRcIkVycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdCBcIik7XG4rXHRcdFx0XHRmcHJpbnRmKHN0ZGVycixcbitcdFx0XHRcdFx0XCIoZGFzaCB3aXRob3V0IHByZWNlZGluZyBudW1iZXIpXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoaW5fcmFuZ2UpIHtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiBNdWx0aXBsZSBkYXNoZXMgaW4gbmlkX2xpc3RcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0fVxuK1x0XHRcdHByZXZfbnVtID0gY3Vycl9udW07XG4rXHRcdFx0Y3Vycl9udW0gPSAwO1xuK1x0XHRcdGkgPSAwO1xuK1x0XHRcdGhhc19kaWdpdCA9IDA7XG4rXHRcdFx0aW5fcmFuZ2UgPSAxO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhcikqcCkpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjogSW52YWxpZCBjaGFyYWN0ZXIgJyVjJyBpbiBuaWRfbGlzdFxcblwiLCAqcCk7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChpIFx1MDAzZSA1KSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IE5JRCB0b28gbG9uZyAobWF4IDY1NTM2KVxcblwiKTtcbitcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdH1cbitcdFx0Y3Vycl9udW0gPSBjdXJyX251bSAqIDEwICsgKCpwIC0gJzAnKTtcbitcdFx0aSsrO1xuK1x0XHRoYXNfZGlnaXQgPSAxO1xuK1x0fVxuK1xuK1x0aWYgKCFoYXNfZGlnaXQpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IEludmFsaWQgbmlkX2xpc3QgZm9ybWF0XFxuXCIpO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXG4rXHRpZiAoaW5fcmFuZ2UgXHUwMDI2XHUwMDI2IHByZXZfbnVtIFx1MDAzZSBjdXJyX251bSkge1xuK1x0XHRmcHJpbnRmKHN0ZGVycixcbitcdFx0XHRcIkVycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlIFx1MDAzYz0gZW5kKVxcblwiLFxuK1x0XHRcdHByZXZfbnVtLCBjdXJyX251bSk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK3tcbitcdGNvbnN0IGNoYXIgKm91dHB1dF9maWxlID0gTlVMTDtcbitcdGNoYXIgZmlsdGVyX2NtZFtNQVhfQ01EX0xFTl07XG4rXHRGSUxFICpvdXRwdXQgPSBOVUxMO1xuK1x0aW50IGZkID0gLTE7XG4rXHRzc2l6ZV90IHJldDtcbitcdGNoYXIgYnVmWzQwOTZdO1xuK1x0aW50IG9wdDtcbitcdHNpemVfdCBjbWRfbGVuID0gMDtcbitcbitcdHNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTtcbitcbitcdHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0ge1xuK1x0XHR7XCJtb2RlXCIsXHRyZXF1aXJlZF9hcmd1bWVudCwgMCwgJ20nfSxcbitcdFx0e1wibmlkXCIsXHRcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnbid9LFxuK1x0XHR7XCJvdXRwdXRcIixcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnbyd9LFxuK1x0XHR7XCJoZWxwXCIsXHRub19hcmd1bWVudCxcdCAgIDAsICdoJ30sXG4rXHRcdHswLCAwLCAwLCAwfVxuK1x0fTtcbitcbitcdGZpbHRlcl9jbWRbMF0gPSAnXFwwJztcbitcbitcdGlmIChhcmdjIFx1MDAzZSAxKSB7XG4rXHRcdGZvciAoaW50IGkgPSAxOyBpIFx1MDAzYyBhcmdjOyBpKyspIHtcbitcdFx0XHRpZiAoc3RyY21wKGFyZ3ZbaV0sIFwiLWhcIikgPT0gMCB8fCBzdHJjbXAoYXJndltpXSwgXCItLWhlbHBcIikgPT0gMCkge1xuK1x0XHRcdFx0dXNhZ2UoYXJndlswXSk7XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIENoZWNrIGlmIHBhZ2Vfb3duZXIgZXhpc3RzIGFuZCBpcyByZWFkYWJsZSAqL1xuK1x0aWYgKGFjY2VzcyhcIi9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJcIiwgRl9PSykgIT0gMCkge1xuK1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKVxuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIGRvZXMgbm90IGV4aXN0XFxuXCIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGVycm9yKFwiRXJyb3IgYWNjZXNzaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJcIik7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIk1ha2Ugc3VyZSBwYWdlX293bmVyIGlzIGVuYWJsZWQgaW4ga2VybmVsXFxuXCIpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcbitcdHdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgXCJtOm46bzpoXCIsIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKSB7XG4rXHRcdGludCBsZW47XG4rXG4rXHRcdHN3aXRjaCAob3B0KSB7XG4rXHRcdGNhc2UgJ20nOiB7XG4rXHRcdFx0Y29uc3QgY2hhciAqbW9kZSA9IG9wdGFyZztcbitcbitcdFx0XHRpZiAodmFsaWRhdGVfbW9kZShtb2RlKSBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiAxO1xuK1x0XHRcdGxlbiA9IHNucHJpbnRmKGZpbHRlcl9jbWQgKyBjbWRfbGVuLCBNQVhfQ01EX0xFTiAtIGNtZF9sZW4sXG4rXHRcdFx0XHQgICAgICAgXCIlc21vZGU9JXNcIiwgY21kX2xlbiBcdTAwM2UgMCA/IFwiIFwiIDogXCJcIiwgbW9kZSk7XG4rXHRcdFx0aWYgKGxlbiBcdTAwM2MgMCB8fCBjbWRfbGVuICsgbGVuIFx1MDAzZT0gTUFYX0NNRF9MRU4pIHtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiBDb21tYW5kIHRvbyBsb25nXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIDE7XG4rXHRcdFx0fVxuK1x0XHRcdGNtZF9sZW4gKz0gbGVuO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdGNhc2UgJ24nOiB7XG4rXHRcdFx0Y29uc3QgY2hhciAqbmlkX2xpc3QgPSBvcHRhcmc7XG4rXG4rXHRcdFx0aWYgKHZhbGlkYXRlX25pZF9saXN0KG5pZF9saXN0KSBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiAxO1xuK1x0XHRcdGxlbiA9IHNucHJpbnRmKGZpbHRlcl9jbWQgKyBjbWRfbGVuLCBNQVhfQ01EX0xFTiAtIGNtZF9sZW4sXG4rXHRcdFx0XHQgICAgICAgXCIlc25pZD0lc1wiLCBjbWRfbGVuIFx1MDAzZSAwID8gXCIgXCIgOiBcIlwiLCBuaWRfbGlzdCk7XG4rXHRcdFx0aWYgKGxlbiBcdTAwM2MgMCB8fCBjbWRfbGVuICsgbGVuIFx1MDAzZT0gTUFYX0NNRF9MRU4pIHtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiBDb21tYW5kIHRvbyBsb25nXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIDE7XG4rXHRcdFx0fVxuK1x0XHRcdGNtZF9sZW4gKz0gbGVuO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdGNhc2UgJ28nOlxuK1x0XHRcdG91dHB1dF9maWxlID0gb3B0YXJnO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdoJzpcbitcdFx0XHQvKiBBbHJlYWR5IGhhbmRsZWQgYWJvdmUgKi9cbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHR1c2FnZShhcmd2WzBdKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogQXQgbGVhc3Qgb25lIGZpbHRlciBtdXN0IGJlIHNwZWNpZmllZCAqL1xuK1x0aWYgKGNtZF9sZW4gPT0gMCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjogQXQgbGVhc3Qgb25lIGZpbHRlciAoLW0gb3IgLW4pIG11c3QgYmUgc3BlY2lmaWVkXFxuXFxuXCIpO1xuK1x0XHR1c2FnZShhcmd2WzBdKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHQvKiBPcGVuIHBhZ2Vfb3duZXIgZm9yIHJlYWQtd3JpdGUgLSB0aGlzIHdpbGwgZmFpbCBpZiBrZXJuZWwgZG9lc24ndCBzdXBwb3J0IHdyaXRlICovXG4rXHRmZCA9IG9wZW4oXCIvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXCIsIE9fUkRXUik7XG4rXHRpZiAoZmQgXHUwMDNjIDApIHtcbitcdFx0aWYgKGVycm5vID09IEVBQ0NFUyB8fCBlcnJubyA9PSBFUEVSTSkge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIFwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJkb2VzIG5vdCBzdXBwb3J0IHdyaXRlIGFjY2Vzc1xcblwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJUaGlzIGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IFwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJwZXItZmQgZmlsdGVyaW5nLlxcblwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJQbGVhc2UgZW5zdXJlIHlvdSBoYXZlIGEga2VybmVsIHdpdGggXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcInBlci1mZCBmaWx0ZXJpbmcgc3VwcG9ydC5cXG5cIik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cGVycm9yKFwiRXJyb3Igb3BlbmluZyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXCIpO1xuK1x0XHR9XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0aWYgKG91dHB1dF9maWxlKSB7XG4rXHRcdG91dHB1dCA9IGZvcGVuKG91dHB1dF9maWxlLCBcIndcIik7XG4rXHRcdGlmICghb3V0cHV0KSB7XG4rXHRcdFx0cGVycm9yKFwib3BlbiBvdXRwdXQgZmlsZVwiKTtcbitcdFx0XHRjbG9zZShmZCk7XG4rXHRcdFx0cmV0dXJuIDE7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdG91dHB1dCA9IHN0ZG91dDtcbitcdH1cbitcbitcdHJldCA9IHdyaXRlKGZkLCBmaWx0ZXJfY21kLCBzdHJsZW4oZmlsdGVyX2NtZCkpO1xuK1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRpZiAoZXJybm8gPT0gRUlOVkFMKSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IEtlcm5lbCByZWplY3RlZCB0aGUgZmlsdGVyIGNvbW1hbmQuXFxuXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIlBvc3NpYmxlIGNhdXNlczpcXG5cIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiICAtIEtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHBlci1mZCBmaWx0ZXJpbmdcXG5cIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiICAtIE5VTUEgbm9kZSBoYXMgbm8gbWVtb3J5XFxuXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIiAgLSBVbmtub3duIHJlYXNvblxcblwiKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwZXJyb3IoXCJ3cml0ZSBmaWx0ZXIgY29tbWFuZFwiKTtcbitcdFx0fVxuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmICgoc2l6ZV90KXJldCAhPSBzdHJsZW4oZmlsdGVyX2NtZCkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIldhcm5pbmc6IFBhcnRpYWwgd3JpdGUgKCV6ZC8lenUpXFxuXCIsIHJldCwgc3RybGVuKGZpbHRlcl9jbWQpKTtcbitcbitcdC8qIFJlYWQgYW5kIGRpc3BsYXkgZmlsdGVyZWQgb3V0cHV0ICovXG4rXHRyZXQgPSAwO1xuK1x0d2hpbGUgKChyZXQgPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpKSkgXHUwMDNlIDApIHtcbitcdFx0c2l6ZV90IHdyaXR0ZW4gPSBmd3JpdGUoYnVmLCAxLCByZXQsIG91dHB1dCk7XG4rXG4rXHRcdGlmICh3cml0dGVuICE9IChzaXplX3QpcmV0KSB7XG4rXHRcdFx0aWYgKGVycm5vID09IEVQSVBFKSB7XG4rXHRcdFx0XHQvKiBQaXBlIGNsb3NlZCwgdHJlYXQgYXMgc3VjY2VzcyAqL1xuK1x0XHRcdFx0cmV0ID0gMDtcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdH1cbitcdFx0XHRwZXJyb3IoXCJ3cml0ZSBvdXRwdXRcIik7XG4rXHRcdFx0cmV0ID0gLTE7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0cGVycm9yKFwicmVhZCBwYWdlX293bmVyXCIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmIChmZmx1c2gob3V0cHV0KSkge1xuK1x0XHRpZiAoZXJybm8gPT0gRVBJUEUpIHtcbitcdFx0XHQvKiBQaXBlIGNsb3NlZCwgdHJlYXQgYXMgc3VjY2VzcyAqL1xuK1x0XHRcdHJldCA9IDA7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cGVycm9yKFwiZmx1c2ggb3V0cHV0XCIpO1xuK1x0XHRcdHJldCA9IC0xO1xuK1x0XHR9XG4rXHR9XG4rXG4rb3V0OlxuK1x0Y2xvc2UoZmQpO1xuK1x0aWYgKG91dHB1dCAhPSBzdGRvdXQpXG4rXHRcdGZjbG9zZShvdXRwdXQpO1xuK1x0cmV0dXJuIHJldCBcdTAwM2MgMCA/IDEgOiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjIwOjA1LjExNjIzMTEyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNzgyMzQyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGFnZSBPd25lciBGaWx0ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9wYWdlX293bmVyLmNgIGFuZCB0aHJvd3MgaW4gYSBuZXcgdG9vbCwgYHRvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwb3RlbnRpYWxseSB1c2VmdWwgYWRkaXRpb24uIEl0J3MgZ2l2aW5nIHVzIHNvbWUgZmlsdGVyaW5nIG9wdGlvbnMgZm9yIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCwgd2hpY2ggY291bGQgYmUgaHVnZSBmb3IgaXNvbGF0aW5nIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3Vlcy4gQmVpbmcgYWJsZSB0byBmaWx0ZXIgdGhlIG91dHB1dCBvZiB0aGF0IGlzIGEgZ2FtZSBjaGFuZ2VyIGZvciBkZWJ1Z2dpbmcuXG5cblRoZSBwYXRjaCBpbXBsZW1lbnRzIGZpbHRlcmluZyBieSBwYXJzaW5nIGNvbW1hbmRzIHdyaXR0ZW4gdG8gdGhlIGZpbGUgZGVzY3JpcHRvcjsgc3BlY2lmaWNhbGx5IGl0J3MgbG9va2luZyBmb3IgXCJtb2RlPVwiIGFuZCBcIm5pZD1cIi4gVGhhdCdzIGFsbCBoYW5kbGVkIGJ5IGBwYWdlX293bmVyX3dyaXRlYC4gQSBgc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlYCBpcyBhbGxvY2F0ZWQgYW5kIHN0b3JlZCBwZXItZmlsZSBvcGVuLCBtZWFuaW5nIGVhY2ggc2Vzc2lvbiBnZXRzIGl0cyBvd24gZmlsdGVyLCB3aGljaCBpcyBzbWFydC4gVGhlbiwgdGhlIGFjdHVhbCBgcmVhZF9wYWdlX293bmVyYCBmdW5jdGlvbiB1c2VzIHRoaXMgc3RhdGUgdG8gZG8gdGhlIGFjdHVhbCBmaWx0ZXJpbmcuXG5cbk5vdywgbXkga2V5IHF1ZXN0aW9uczogSXMgdGhpcyBjb2RlIGFjdHVhbGx5ICpyZWFjaGFibGUqPyBZZXAsIGRlYnVnZnMsIHNvIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYC4gVGhhdCdzIGdvb2Q7IGl0J3MgcmlnaHQgd2hlcmUgd2UnZCBleHBlY3QgaXQuIERvZXMgaXQgKmZ1bmN0aW9uKiBhcyBjbGFpbWVkPyBZZXMsIHRoZSBjb3JlIGxvZ2ljIGlzIHRoZXJlLiBUaGUgYHBhZ2Vfb3duZXJfd3JpdGVgIGZ1bmN0aW9uIHBhcnNlcyBvdXIgaW5wdXQgYW5kIHRoZSBuZXcgc3RhdGUgaXMgdXNlZCB0byBmaWx0ZXIgcmVhZHMuXG5cbkFuZCB0aGUgbmV4dCB0aGluZyBJJ20gdGhpbmtpbmcgaXMsICp0aGlzIG5lZWRzIGZ1enppbmcqLiBBbnkgdGltZSB5b3UncmUgcGFyc2luZyB1c2VyIGlucHV0LCB5b3UncmUgb3BlbmluZyB0aGUgZG9vciB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBgcGFnZV9vd25lcl93cml0ZWAgaXMgdGhlIG9idmlvdXMgdGFyZ2V0LlxuXG5BbHJpZ2h0LCBsZXQncyBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxhY2UuIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGBtbS9wYWdlX293bmVyLmNgLCBpcyBjb25kaXRpb25hbCBvbiBgQ09ORklHX1BBR0VfT1dORVJgLiBMZXQgbWUgdmVyaWZ5IHRoYXQncyB0aGUgY2FzZS4gTWFrZSBzdXJlIHRoYXQncyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTYxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6MjA6MTEuNDk0NDY3NDcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzY2MTgzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQQUdFX09XTkVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTExOT1vYmotJChDT05GSUdfREVCVUdfVk1fUEdUQUJMRSkgKz0gZGVidWdfdm1fcGd0YWJsZS5vXFxubW0vTWFrZWZpbGU6MTIwOm9iai0kKENPTkZJR19QQUdFX09XTkVSKSArPSBwYWdlX293bmVyLm9cXG5tbS9NYWtlZmlsZS0xMjEtb2JqLSQoQ09ORklHX01FTU9SWV9JU09MQVRJT04pICs9IHBhZ2VfaXNvbGF0aW9uLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6MjA6MTEuNjkyMTM2MjYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5NDkwNzM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgQ09ORklHX1BBR0VfT1dORVJgIGlzIGRlZmluaXRlbHkgYSBtYW5kYXRvcnkgcmVxdWlyZW1lbnQgaGVyZS4gR290IGl0LiBBbmQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHdlIGFsc28gbmVlZCBgQ09ORklHX0RFQlVHX0ZTYCBlbmFibGVkLCBzaW5jZSB0aGUgZnVuY3Rpb25hbGl0eSBpcyBleHBvc2VkIHRocm91Z2ggdGhlIGRlYnVnIGZpbGVzeXN0ZW0uIEJlc3QgcHJhY3RpY2UgaXMgdG8gZW5zdXJlIGJvdGggYXJlIGF2YWlsYWJsZSwgYmVmb3JlIHdlIGdldCBhbnkgZnVydGhlci4gTm93LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgYENPTkZJR19QQUdFX09XTkVSYCBoYXMgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gdG8gbWFrZSBjZXJ0YWluLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6OTcwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjIwOjE1LjE4NzA0Njg2M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMyNjc1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfT1dORVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTczPWNvbmZpZyBTTFVCX1JDVV9ERUJVR1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMDQtXFxubW0vS2NvbmZpZy5kZWJ1ZzoxMDU6Y29uZmlnIFBBR0VfT1dORVJcXG5tbS9LY29uZmlnLmRlYnVnLTEwNi1cXHRib29sIFxcXCJUcmFjayBwYWdlIG93bmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDoyMDoxNS40MTAzMjA3NDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzcyNzc1MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIERlYnVnIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gZGlnIGludG8gdGhlc2UgZGVidWcgb3B0aW9ucz8gTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBtbS9LY29uZmlnLmRlYnVnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTA1LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSBncmFudWxhciBkZWJ1ZyBmZWF0dXJlcyBhcmUgZGVmaW5lZCwgcmlnaHQ/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZGV0ZXJtaW5lIGhvdyB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWdnaW5nIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgc2luY2Ugd2UncmUgbG9va2luZyBhdCB0aGluZ3MgdGhhdCBhcmUgdHlwaWNhbGx5IGVuYWJsZWQgZHVyaW5nIGRldmVsb3BtZW50IG9yIGZvciB2ZXJ5IHNwZWNpZmljIHRyb3VibGVzaG9vdGluZy4gSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgb2ZmZXIgYSBjbGVhciBvdmVydmlldyBvZiB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGRlc2NyaXB0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGVidWcgZmVhdHVyZXMgaW4gdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDoyMDoxOS4xODMwOTg0ODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0ICBUaGlzIGlzIGRlc2lnbmVkIGFzIGEgZGVidWdnaW5nIGZlYXR1cmUsIG5vdCBhIHNlY3VyaXR5IGZlYXR1cmUuXFxuIDEwMTpcXHRcXHQgIE9iamVjdHMgYXJlIHNvbWV0aW1lcyByZWN5Y2xlZCB3aXRob3V0IFJDVSBkZWxheSB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTA0OlxcdFxcbiAxMDU6XFx0Y29uZmlnIFBBR0VfT1dORVJcXG4gMTA2OlxcdFxcdGJvb2wgXFxcIlRyYWNrIHBhZ2Ugb3duZXJcXFwiXFxuIDEwNzpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlRcXG4gMTA4OlxcdFxcdHNlbGVjdCBERUJVR19GU1xcbiAxMDk6XFx0XFx0c2VsZWN0IFNUQUNLVFJBQ0VcXG4gMTEwOlxcdFxcdHNlbGVjdCBTVEFDS0RFUE9UXFxuIDExMTpcXHRcXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cXG4gMTEyOlxcdFxcdGhlbHBcXG4gMTEzOlxcdFxcdCAgVGhpcyBrZWVwcyB0cmFjayBvZiB3aGF0IGNhbGwgY2hhaW4gaXMgdGhlIG93bmVyIG9mIGEgcGFnZSwgbWF5XFxuIDExNDpcXHRcXHQgIGhlbHAgdG8gZmluZCBiYXJlIGFsbG9jX3BhZ2UocykgbGVha3MuIEV2ZW4gaWYgeW91IGluY2x1ZGUgdGhpc1xcbiAxMTU6XFx0XFx0ICBmZWF0dXJlIG9uIHlvdXIgYnVpbGQsIGl0IGlzIGRpc2FibGVkIGluIGRlZmF1bHQuIFlvdSBzaG91bGQgcGFzc1xcbiAxMTY6XFx0XFx0ICBcXFwicGFnZV9vd25lcj1vblxcXCIgdG8gYm9vdCBwYXJhbWV0ZXIgaW4gb3JkZXIgdG8gZW5hYmxlIGl0LiBFYXRzXFxuIDExNzpcXHRcXHQgIGEgZmFpciBhbW91bnQgb2YgbWVtb3J5IGlmIGVuYWJsZWQuIFNlZSB0b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xcbiAxMTg6XFx0XFx0ICBmb3IgdXNlci1zcGFjZSBoZWxwZXIuXFxuIDExOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6MjA6MTkuMTgzMjY0NjYyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4MjEwNDgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxlbWVudGF0aW9uIG9mIGBwYWdlX293bmVyPW9uYCBmb3IgU3l6a2FsbGVyKipcblxuT2theSwgc28gdGhlIG1lc3NhZ2Ugc2F5cywgXCJZb3Ugc2hvdWxkIHBhc3MgYHBhZ2Vfb3duZXI9b25gIHRvIGEgYm9vdCBwYXJhbWV0ZXIgdG8gZW5hYmxlIGl0LlwiIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBIYW5nIG9uLCB0aG91Z2gsIFN5emthbGxlciAqY2FuKiBwYXNzIGJvb3QgcGFyYW1ldGVycywgYnV0IGl0J3Mgbm90IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlzIGl0PyBDb3VsZCBJIGVuYWJsZSBpdCB0aHJvdWdoIHN5c2ZzIG9yIGRlYnVnZnM/IE5vLCB0aGF0J3Mgbm90IGhvdyBpdCB3b3JrczsgaXQncyBhIGJvb3QtdGltZSB0aGluZy4gTm93IEkgcmVjYWxsIHRoYXQgbWF5YmUsIGp1c3QgbWF5YmUsIFN5emthbGxlciBhbHJlYWR5IGhhcyBgcGFnZV9vd25lcj1vbmAgc2V0IGFzIGEgZGVmYXVsdCBib290IHBhcmFtZXRlciBmb3Igc29tZSBvZiBpdHMgY29uZmlndXJhdGlvbnMuLi4gb3IgcGVyaGFwcyBub3QuIEVpdGhlciB3YXksIHdlIGNhbiBkZWZpbml0ZWx5IHNwZWNpZnkgYFBBR0VfT1dORVJgIGRpcmVjdGx5IGluIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLCBjYW4ndCB3ZT9cblxuQWxyaWdodCwgdGhlIHBhdGNoIGFkZHMgZnVuY3Rpb25zOiBgcGFnZV9vd25lcl93cml0ZWAsIGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYW5kIGBwcmludF9wYWdlX293bmVyYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIHBheWluZyBhdHRlbnRpb24gdG8uIExldCBtZSBub3RlIHRob3NlIGRvd246IGBwYWdlX293bmVyX3dyaXRlYCwgYHBhZ2Vfb3duZXJfb3BlbmAsIGBwYWdlX293bmVyX3JlbGVhc2VgLCBgcHJpbnRfcGFnZV9vd25lcmAsIGFuZCBvZiBjb3Vyc2UgdGhlIGByZWFkX3BhZ2Vfb3duZXJgIGZ1bmN0aW9uIGFzIHdlbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlZ3JhdGUuXG5cbk9rYXksIGxldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgcGFnZV9vd25lcl93cml0ZWAgaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHByb2JhYmx5IGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTcxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6MjA6MjQuMzY1MzcyNTE1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ4OTE0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9vd25lcl93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX293bmVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9vd25lci5jPTkxMz1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy05MTgtXFxubW0vcGFnZV9vd25lci5jOjkxOTpzdGF0aWMgc3NpemVfdCBwYWdlX293bmVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbm1tL3BhZ2Vfb3duZXIuYy05MjAtXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MTAwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwYWdlX293bmVyX2ZvcHMgPSB7XFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMTAwMy1cXHQucmVsZWFzZVxcdD0gcGFnZV9vd25lcl9yZWxlYXNlLFxcbm1tL3BhZ2Vfb3duZXIuYzoxMDA0OlxcdC53cml0ZVxcdFxcdD0gcGFnZV9vd25lcl93cml0ZSxcXG5tbS9wYWdlX293bmVyLmMtMTAwNS1cXHQucmVhZFxcdFxcdD0gcmVhZF9wYWdlX293bmVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDoyMDoyNC40NzAyNzA2OTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5MDY4NjA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zOlxuXG4qKkRpZ2dpbmcgaW50byBgcGFnZV9vd25lcl9vcGVuYCBhbmQgYHBhZ2Vfb3duZXJfcmVsZWFzZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgcGFnZV9vd25lcl9vcGVuYCBhbmQgYHBhZ2Vfb3duZXJfcmVsZWFzZWAgYXJlIGludGVyYWN0aW5nLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIFtVc2VyJ3MgZmllbGRdLCBJIGtub3cgdGhlc2UgYXJlIGxpa2VseSBjcml0aWNhbCBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHJlc291cmNlIG93bmVyc2hpcCBhbmQgbGlmZWN5Y2xlLCBzcGVjaWZpY2FsbHkgYXQgdGhlIHBhZ2UgbGV2ZWwuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgYXNwZWN0cyBvZiB0aGVzZSBmdW5jdGlvbnMuIEFyZSB0aGV5IGxvY2tpbmcgbWVjaGFuaXNtcywgcmVmZXJlbmNlIGNvdW50ZXJzLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgdGhleSBtYW5pcHVsYXRpbmc/IEknbSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeSwgcmVzb3VyY2UgY29udGVudGlvbiwgYW5kLCBvZiBjb3Vyc2UsIHBvdGVudGlhbCBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIHN5c3RlbS4gVGhlIGRldGFpbHMgb2YgaW1wbGVtZW50YXRpb24gbXVzdCBxdWlja2x5IGJlY29tZSBjbGVhciBpbiBteSBtaW5kLiBBcmUgdGhleSB1c2luZyBhdG9taWMgb3BlcmF0aW9ucyBvciByZWx5IG9uIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjIwOjI4Ljk2MDk1OTI0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MTIyMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2Vfb3duZXJfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX293bmVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9vd25lci5jPTg5MD1zdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxcbi0tXFxubW0vcGFnZV9vd25lci5jLTg5Ny1cXG5tbS9wYWdlX293bmVyLmM6ODk4OnN0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbm1tL3BhZ2Vfb3duZXIuYy04OTkte1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTEwMDA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0ge1xcbm1tL3BhZ2Vfb3duZXIuYy0xMDAxLVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxubW0vcGFnZV9vd25lci5jOjEwMDI6XFx0Lm9wZW5cXHRcXHQ9IHBhZ2Vfb3duZXJfb3BlbixcXG5tbS9wYWdlX293bmVyLmMtMTAwMy1cXHQucmVsZWFzZVxcdD0gcGFnZV9vd25lcl9yZWxlYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDoyMDoyOS4xMDYwODkyMTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk4Njk0ODAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhZ2UgT3duZXIgRmlsdGVyaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgZmlsdGVyaW5nIHRvIHRoZSBgcGFnZV9vd25lcmAgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vcGFnZV9vd25lci5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCB0aGlzIGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IGJlY2F1c2UgaXQgaW50cm9kdWNlcyB1c2VyLWZhY2luZyBjaGFuZ2VzLiBMZXQncyBicmVhayBpdCBkb3duLlxuXG5GaXJzdCwgaXQgYWRkcyBhIG5ldyBmdW5jdGlvbiwgYHBhZ2Vfb3duZXJfd3JpdGVgLCB3aGljaCBwYXJzZXMgdXNlciBpbnB1dC4gVGhpcyBpcyAqY3J1Y2lhbCogYmVjYXVzZSBhbnl0aGluZyB0aGF0IHRha2VzIGlucHV0IGZyb20gYSB1c2VyLCBlc3BlY2lhbGx5IGZvciBrZXJuZWwgZmVhdHVyZXMsIHNjcmVhbXMgXCJwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRcIi4gVGhlIGByZWFkX3BhZ2Vfb3duZXJgIGZ1bmN0aW9uIHV0aWxpemVzIHRoZSBmaWx0ZXIgc3RhdGUsIGFuZCBgcHJpbnRfcGFnZV9vd25lcmAgZm9ybWF0cyBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBmaWx0ZXJzLiBUaGVzZSBhcmUgYWxsIHBhcnQgb2YgdGhlIHNhbWUgZmlsdHJhdGlvbiBjaGFpbi5cblxuVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgcGFnZV9vd25lcl93cml0ZWAsIGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYHByaW50X3BhZ2Vfb3duZXJgLCBhbmQgYHJlYWRfcGFnZV9vd25lcmAuXG5cbkxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLCBgUEFHRV9PV05FUmAgc2VlbXMgdG8gYmUgdGhlIGNvbnRyb2xsaW5nIGZsYWcsIHdoaWNoIGFsc28gc2VsZWN0cyBgREVCVUdfRlNgIGFuZCBgUEFHRV9FWFRFTlNJT05gLiBUaGVzZSBhcmUgaW1wb3J0YW50IHRvIG5vdGUsIGFzIHRoZSBjb25maWd1cmF0aW9ucyBjYW4gaGF2ZSBhbiBpbXBhY3QuXG5cbk5vdywgSSdtIHNwb3R0aW5nIGEgY2hhbmdlIGluIHRoZSBkZWJ1Z2ZzIGZpbGUgcGVybWlzc2lvbnM6IGl0J3MgZ29pbmcgZnJvbSByZWFkLW9ubHkgdG8gcmVhZC93cml0ZSEgIFRoZSBwYXRjaCBjaGFuZ2VzIGBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwicGFnZV9vd25lclwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcdTAwMjZwYWdlX293bmVyX2ZvcHMpYCB0byBgZGVidWdmc19jcmVhdGVfZmlsZShcInBhZ2Vfb3duZXJcIiwgMDYwMCwgTlVMTCwgTlVMTCwgXHUwMDI2cGFnZV9vd25lcl9mb3BzKWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCBleHBsaWNpdGx5IGVuYWJsZXMgd3JpdGluZyB0byB0aGUgZmlsZSwgd2hpY2ggcmVpbmZvcmNlcyB0aGUgbmVlZCB0byBmdXp6IHRoZSB3cml0ZSBoYW5kbGVyLlxuXG5TbywgdGhlIGNvcmUgbG9naWMgaGVyZTogdGhlIHBhdGNoJ3MgcHVycG9zZSBpcyB0byBhbGxvdyBmaWx0ZXJpbmcgb2YgcGFnZSBvd25lciBpbmZvcm1hdGlvbiB0aHJvdWdoIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYC4gVGhlIGFkZGl0aW9uIG9mIGBwYWdlX293bmVyX3dyaXRlYCBmb3IgdXNlciBpbnB1dCwgcGx1cyB0aGUgbW9kaWZpY2F0aW9ucyB0byBgcmVhZF9wYWdlX293bmVyYCBhbmQgYHByaW50X3BhZ2Vfb3duZXJgIHRvIGhhbmRsZSBmaWx0ZXJpbmcgbG9naWMsIG1ha2UgaXQgYSBkZWZpbml0ZSB0YXJnZXQgZm9yIGZ1enppbmcuIFVzZXIgaW5wdXQgcGFyc2luZyBpcyB0aGUgd2VhayBwb2ludC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLi4uIGBwYWdlX293bmVyX3dyaXRlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGdvb2QuICBTeXprYWxsZXIgY2FuIGZ1enogdGhvc2UgYXMgbG9uZyBhcyB0aGV5J3JlIGluIHRoZSBmb2N1cyBsaXN0LiBBbmQgbG9va2luZyBiYWNrLCBgcmVhZF9wYWdlX293bmVyYCBhbmQgYHByaW50X3BhZ2Vfb3duZXJgIHdlcmUgYWxyZWFkeSB0aGVyZSwgYnV0IHRoZXkgd2VyZSBtb2RpZmllZCwgbWVhbmluZyB0aGV5J3JlIGFsc28gaW50ZXJlc3RpbmcuXG5cblRvIHN1bW1hcml6ZSwgYWxsIHRoZSBmdW5jdGlvbnMgYXJlIGxpc3RlZDpcbmBwYWdlX293bmVyX29wZW5gXG5gcGFnZV9vd25lcl9yZWxlYXNlYFxuYHBhZ2Vfb3duZXJfd3JpdGVgXG5gcHJpbnRfcGFnZV9vd25lcmBcbmByZWFkX3BhZ2Vfb3duZXJgXG5cbkkgdGhpbmsgSSd2ZSBnb3QgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgcGF0Y2gncyBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcsIGFuZCBJJ20gcmVhZHkgdG8gc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc1OCwiT3V0cHV0VG9rZW5zIjoxNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6MjA6MzguMDkzMDQwNDI0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxNzgxODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX09XTkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9vd25lcl93cml0ZVwiLFxuICAgIFwicGFnZV9vd25lcl9vcGVuXCIsXG4gICAgXCJwYWdlX293bmVyX3JlbGVhc2VcIixcbiAgICBcInByaW50X3BhZ2Vfb3duZXJcIixcbiAgICBcInJlYWRfcGFnZV9vd25lclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd3JpdGUgaGFuZGxlciAoYHBhZ2Vfb3duZXJfd3JpdGVgKSBmb3IgdGhlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCBkZWJ1Z2ZzIGZpbGUgdG8gc3VwcG9ydCBmaWx0ZXJpbmcuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHJlYWQgaGFuZGxlciAoYHJlYWRfcGFnZV9vd25lcmApIGFuZCBvdXRwdXQgZm9ybWF0dGluZyAoYHByaW50X3BhZ2Vfb3duZXJgKSB0byBhcHBseSB0aGUgZmlsdGVycy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBhcnNpbmcgdXNlciBpbnB1dCBhbmQgbWFuYWdpbmcgcGVyLWZkIHN0YXRlLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX09XTkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9vd25lcl93cml0ZVwiLFxuICAgIFwicGFnZV9vd25lcl9vcGVuXCIsXG4gICAgXCJwYWdlX293bmVyX3JlbGVhc2VcIixcbiAgICBcInByaW50X3BhZ2Vfb3duZXJcIixcbiAgICBcInJlYWRfcGFnZV9vd25lclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd3JpdGUgaGFuZGxlciAoYHBhZ2Vfb3duZXJfd3JpdGVgKSBmb3IgdGhlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCBkZWJ1Z2ZzIGZpbGUgdG8gc3VwcG9ydCBmaWx0ZXJpbmcuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHJlYWQgaGFuZGxlciAoYHJlYWRfcGFnZV9vd25lcmApIGFuZCBvdXRwdXQgZm9ybWF0dGluZyAoYHByaW50X3BhZ2Vfb3duZXJgKSB0byBhcHBseSB0aGUgZmlsdGVycy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBhcnNpbmcgdXNlciBpbnB1dCBhbmQgbWFuYWdpbmcgcGVyLWZkIHN0YXRlLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdg24k[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 19:44:03 +0000 UTC FinishedAt: 2026-07-07 20:20:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "7fc2c3dcae28347a30ccd76c8817e5719005f1c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "7fc2c3dcae28347a30ccd76c8817e5719005f1c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER" ], "series_id": "46b53b8a-cf5c-49b2-960a-2259fe4b6b10" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "page_owner_write", "page_owner_open", "page_owner_release", "print_page_owner", "read_page_owner" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlX293bmVyX3dyaXRlJiMzNDssCiAgICAmIzM0O3BhZ2Vfb3duZXJfb3BlbiYjMzQ7LAogICAgJiMzNDtwYWdlX293bmVyX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7cHJpbnRfcGFnZV9vd25lciYjMzQ7LAogICAgJiMzNDtyZWFkX3BhZ2Vfb3duZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB3cml0ZSBoYW5kbGVyIChgcGFnZV9vd25lcl93cml0ZWApIGZvciB0aGUgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIGRlYnVnZnMgZmlsZSB0byBzdXBwb3J0IGZpbHRlcmluZy4gSXQgYWxzbyBtb2RpZmllcyB0aGUgcmVhZCBoYW5kbGVyIChgcmVhZF9wYWdlX293bmVyYCkgYW5kIG91dHB1dCBmb3JtYXR0aW5nIChgcHJpbnRfcGFnZV9vd25lcmApIHRvIGFwcGx5IHRoZSBmaWx0ZXJzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgcGFyc2luZyB1c2VyIGlucHV0IGFuZCBtYW5hZ2luZyBwZXItZmQgc3RhdGUsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmM4MmZkZmJhYTdlNjFkMDcwMjNkMmU3MmE4N2M0YTYxMzk2YTllNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMjA6MjA6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbmluZGV4IDZiMTJmM2IwMDdlYzkxLi4zODNlNTljNDI3NDNiZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbkBAIC02NSw3ICYjNDM7NjUsMTQgQEAgdW4tdHJhY2tpbmcgc3RhdGUuXG4gVXNhZ2VcbiA9PT09PVxuIFxuLTEpIEJ1aWxkIHVzZXItc3BhY2UgaGVscGVyOjpcbiYjNDM7MSkgQnVpbGQgdXNlci1zcGFjZSBoZWxwZXJzOjpcbiYjNDM7XG4mIzQzO1RvIGZpbHRlciBwYWdlX293bmVyIG91dHB1dDpcbiYjNDM7XG4mIzQzO1x0Y2QgdG9vbHMvbW1cbiYjNDM7XHRtYWtlIHBhZ2Vfb3duZXJfZmlsdGVyXG4mIzQzO1xuJiM0MztUbyBzb3J0IGFuZCBhbmFseXplIHBhZ2Vfb3duZXIgb3V0cHV0OlxuIFxuIFx0Y2QgdG9vbHMvbW1cbiBcdG1ha2UgcGFnZV9vd25lcl9zb3J0XG5AQCAtNzQsNyAmIzQzOzgxLDExIEBAIFVzYWdlXG4gXG4gMykgRG8gdGhlIGpvYiB0aGF0IHlvdSB3YW50IHRvIGRlYnVnLlxuIFxuLTQpIEFuYWx5emUgaW5mb3JtYXRpb24gZnJvbSBwYWdlIG93bmVyOjpcbiYjNDM7NCkgKE9wdGlvbmFsKSBGaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQ6OlxuJiM0MztcbiYjNDM7XHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbiAwLDEsMiBcdTAwM2UgZmlsdGVyZWRfcGFnZV9vd25lci50eHRcbiYjNDM7XG4mIzQzOzUpIEFuYWx5emUgaW5mb3JtYXRpb24gZnJvbSBwYWdlIG93bmVyOjpcbiBcbiBcdGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyX3N0YWNrcy9zaG93X3N0YWNrcyBcdTAwM2Ugc3RhY2tzLnR4dFxuIFx0Y2F0IHN0YWNrcy50eHRcbkBAIC0yNjMsMyAmIzQzOzI3NCw2NSBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuIFx0Zlx0XHRmcmVlXHRcdHdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90XG4gXHRzdFx0XHRzdGFja3RyYWNlXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXG4gXHRhdG9yXHRcdGFsbG9jYXRvclx0bWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXNcbiYjNDM7XG4mIzQzO0ZpbHRlcmluZyBwYWdlX293bmVyIG91dHB1dFxuJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztwYWdlX293bmVyIHN1cHBvcnRzIGZpbHRlcmluZyBvdXRwdXQgYXQgdGhlIGtlcm5lbCBsZXZlbCBiZWZvcmUgcmVhZGluZyxcbiYjNDM7d2hpY2ggcmVkdWNlcyB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBwcm9jZXNzZWQgaW4gdXNlcnNwYWNlLlxuJiM0MztcbiYjNDM7VGhlIHBhZ2Vfb3duZXJfZmlsdGVyIHRvb2wgcHJvdmlkZXMgYSBjb252ZW5pZW50IGludGVyZmFjZSBmb3IgdGhpcyBmaWx0ZXJpbmdcbiYjNDM7Y2FwYWJpbGl0eS4gSXQgc3VwcG9ydHMgdHdvIHR5cGVzIG9mIGZpbHRlcnM6XG4mIzQzO1xuJiM0MzsxLiAqKnByaW50X21vZGUgZmlsdGVyKio6IENvbnRyb2wgd2hhdCBpbmZvcm1hdGlvbiBpcyBwcmludGVkIGZvciBlYWNoIHBhZ2VcbiYjNDM7XHQtIGBgc3RhY2tgYDogUHJpbnQgZnVsbCBzdGFjayB0cmFjZXMgKGRlZmF1bHQsIGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyB1c2FnZSlcbiYjNDM7XHQtIGBgaGFuZGxlYGA6IFByaW50IG9ubHkgc3RhY2sgaGFuZGxlIG51bWJlcnMgKG11Y2ggZmFzdGVyLCBzbWFsbGVyIG91dHB1dClcbiYjNDM7XHQtIGBgc3RhY2tfaGFuZGxlYGA6IFByaW50IGJvdGggc3RhY2sgdHJhY2VzIGFuZCBoYW5kbGUgbnVtYmVyc1xuJiM0MztcbiYjNDM7XHRUaGUgYGBoYW5kbGVgYCBtb2RlIHVzZXMgbnVtZXJpYyBpZGVudGlmaWVycyBpbnN0ZWFkIG9mIGZ1bGwgc3RhY2sgdHJhY2VzLlxuJiM0MztcdFRoZSBtYXBwaW5nIGZyb20gaGFuZGxlcyB0byBhY3R1YWwgc3RhY2sgdHJhY2VzIGNhbiBiZSBvYnRhaW5lZCB2aWEgdGhlXG4mIzQzO1x0c2hvd19zdGFja3NfaGFuZGxlcyBpbnRlcmZhY2UuXG4mIzQzO1xuJiM0MzsyLiAqKk5VTUEgbm9kZSBmaWx0ZXIqKjogRmlsdGVyIHBhZ2VzIGJ5IE5VTUEgbm9kZSBJRFxuJiM0MztcdC0gU3VwcG9ydHMgc2luZ2xlIG5vZGU6IGBgLW4gMGBgXG4mIzQzO1x0LSBNdWx0aXBsZSBub2RlczogYGAtbiAwLDEsMmBgXG4mIzQzO1x0LSBSYW5nZXM6IGBgLW4gMC0zYGBcbiYjNDM7XHQtIE1peGVkIGZvcm1hdDogYGAtbiAwLDItMyw1YGBcbiYjNDM7XG4mIzQzO1VzYWdlIGV4YW1wbGVzOjpcbiYjNDM7XG4mIzQzO1x0IyBGaWx0ZXIgYnkgcHJpbnQgbW9kZVxuJiM0MztcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGVcbiYjNDM7XG4mIzQzO1x0IyBGaWx0ZXIgYnkgTlVNQSBub2RlXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwLTNcbiYjNDM7XG4mIzQzO1x0IyBDb21iaW5lZCBmaWx0ZXJzXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFjayAtbiAwLDEsMlxuJiM0MztcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1uIDAsMi0zXG4mIzQzO1xuJiM0MztcdCMgU2F2ZSB0byBmaWxlXG4mIzQzO1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGUgLW8gZmlsdGVyZWRfb3V0cHV0LnR4dFxuJiM0MztcbiYjNDM7VGhlIGhhbmRsZSBtb2RlIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIG1vbml0b3JpbmcgYW5kIHBlcmZvcm1hbmNlLWNyaXRpY2FsXG4mIzQzO3NjZW5hcmlvcyBhcyBpdCBkcmFtYXRpY2FsbHkgcmVkdWNlcyBvdXRwdXQgc2l6ZS4gVGVzdGluZyBzaG93cyBoYW5kbGUgbW9kZSBjYW5cbiYjNDM7cmVkdWNlIG91dHB1dCBzaXplIGJ5IH42NiUgKDg0TUIgdnMgMjQ0TUIpIGFuZCBpbXByb3ZlIHJlYWQgcGVyZm9ybWFuY2UgYnkgfjQuNHhcbiYjNDM7Y29tcGFyZWQgdG8gZnVsbCBzdGFjayBvdXRwdXQuXG4mIzQzO1xuJiM0MztUaGUgTlVNQSBub2RlIGZpbHRlciBpcyB1c2VmdWwgZm9yIE5VTUEtYXdhcmUgbWVtb3J5IGFsbG9jYXRpb24gYW5hbHlzaXMgYW5kIGRlYnVnZ2luZy5cbiYjNDM7XG4mIzQzO0JlaGluZCB0aGUgc2NlbmVzLCBwYWdlX293bmVyX2ZpbHRlciBvcGVucyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIGFuZFxuJiM0Mzt3cml0ZXMgZmlsdGVyIGNvbW1hbmRzIGJlZm9yZSByZWFkaW5nIHRoZSBmaWx0ZXJlZCBvdXRwdXQuIFRoZSBmaWx0ZXJpbmcgdXNlc1xuJiM0MztwZXItZmlsZS1kZXNjcmlwdG9yIHN0YXRlLCBhbGxvd2luZyBlYWNoIG9wZW4oKSB0byBoYXZlIGluZGVwZW5kZW50IGZpbHRlciBzZXR0aW5ncy5cbiYjNDM7XG4mIzQzO0VhY2ggZmlsZSBkZXNjcmlwdG9yIG1haW50YWlucyBpdHMgb3duIGZpbHRlciBzdGF0ZSwgc28geW91IGNhbiBoYXZlIG11bHRpcGxlXG4mIzQzO2luZGVwZW5kZW50IGZpbHRlcmluZyBvcGVyYXRpb25zIHJ1bm5pbmcgY29uY3VycmVudGx5LiBGb3IgZXhhbXBsZSwgaW4gZGlmZmVyZW50XG4mIzQzO3Rlcm1pbmFscyB5b3UgY2FuIHJ1biBkaWZmZXJlbnQgZmlsdGVycyBzaW11bHRhbmVvdXNseTo6XG4mIzQzO1xuJiM0MztcdCMgVGVybWluYWwgMTogRmlsdGVyIG5vZGUgMFxuJiM0MztcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMCBcdTAwM2Ugbm9kZTBfb3V0cHV0LnR4dFxuJiM0MztcbiYjNDM7XHQjIFRlcm1pbmFsIDI6IEZpbHRlciBub2RlIDEgKHJ1bnMgY29uY3VycmVudGx5KVxuJiM0MztcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMSBcdTAwM2Ugbm9kZTFfb3V0cHV0LnR4dFxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuY1xuaW5kZXggODE3OGUwYmU1NTdmODcuLmYxZDRjMjA1YWZmOTc5IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9vd25lci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX293bmVyLmNcbkBAIC01NCw2ICYjNDM7NTQsMjQgQEAgc3RydWN0IHN0YWNrX3ByaW50X2N0eCB7XG4gXHR1OCBmbGFncztcbiB9O1xuIFxuJiM0MztlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSB7XG4mIzQzO1x0UEFHRV9PV05FUl9QUklOVF9TVEFDSyxcbiYjNDM7XHRQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSxcbiYjNDM7XHRQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGFnZV9vd25lcl9wcmludF9tb2RlX3N0cmluZ3NbXSA9IHtcbiYjNDM7XHRbUEFHRV9PV05FUl9QUklOVF9TVEFDS11cdD0gXCYjMzQ7c3RhY2tcJiMzNDssXG4mIzQzO1x0W1BBR0VfT1dORVJfUFJJTlRfSEFORExFXVx0PSBcJiMzNDtoYW5kbGVcJiMzNDssXG4mIzQzO1x0W1BBR0VfT1dORVJfUFJJTlRfU1RBQ0tfSEFORExFXVx0PSBcJiMzNDtzdGFja19oYW5kbGVcJiMzNDssXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUge1xuJiM0MztcdGVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIHByaW50X21vZGU7XG4mIzQzO1x0bm9kZW1hc2tfdCBuaWRfZmlsdGVyO1xuJiM0MztcdGJvb2wgbmlkX2ZpbHRlcl9lbmFibGVkO1xuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgYm9vbCBwYWdlX293bmVyX2VuYWJsZWQgX19pbml0ZGF0YTtcbiBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwYWdlX293bmVyX2luaXRlZCk7XG4gXG5AQCAtNTQ3LDE2ICYjNDM7NTY1LDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIHN0YXRpYyBzc2l6ZV90XG4gcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXIsXG4tXHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZSlcbiYjNDM7XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZSxcbiYjNDM7XHRcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0aW50IHJldCwgcGFnZWJsb2NrX210LCBwYWdlX210O1xuIFx0Y2hhciAqa2J1ZjtcbiYjNDM7XHRlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBwcmludF9tb2RlO1xuIFxuIFx0Y291bnQgPSBtaW5fdChzaXplX3QsIGNvdW50LCBQQUdFX1NJWkUpO1xuIFx0a2J1ZiA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFrYnVmKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiYjNDM7XHRwcmludF9tb2RlID0gc3RhdGUtXHUwMDNlcHJpbnRfbW9kZTtcbiYjNDM7XG4gXHRyZXQgPSBzY25wcmludGYoa2J1ZiwgY291bnQsXG4gXHRcdFx0XCYjMzQ7UGFnZSBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUgbnNcXG5cJiMzNDssXG4gXHRcdFx0cGFnZV9vd25lci1cdTAwM2VvcmRlciwgcGFnZV9vd25lci1cdTAwM2VnZnBfbWFzayxcbkBAIC01NzUsOSAmIzQzOzU5NywxOCBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdFx0bWlncmF0ZXR5cGVfbmFtZXNbcGFnZWJsb2NrX210XSxcbiBcdFx0XHRcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiBcbi1cdHJldCAmIzQzOz0gc3RhY2tfZGVwb3Rfc25wcmludChoYW5kbGUsIGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwgMCk7XG4tXHRpZiAocmV0IFx1MDAzZT0gY291bnQpXG4tXHRcdGdvdG8gZXJyO1xuJiM0MztcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfSEFORExFKSB7XG4mIzQzO1x0XHRyZXQgJiM0Mzs9IHN0YWNrX2RlcG90X3NucHJpbnQoaGFuZGxlLCBrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsIDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2U9IGNvdW50KVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfU1RBQ0spIHtcbiYjNDM7XHRcdHJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwgXCYjMzQ7aGFuZGxlOiAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgaGFuZGxlKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSBjb3VudClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xuIFx0XHRyZXQgJiM0Mzs9IHNjbnByaW50ZihrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsXG5AQCAtNjY0LDYgJiM0Mzs2OTUsNyBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcbiBcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xuIFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuJiM0MztcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcbiBcdGlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTc0MCwxNSAmIzQzOzc3MiwzMSBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0XHRpZiAoIWhhbmRsZSlcbiBcdFx0XHRnb3RvIGV4dF9wdXRfY29udGludWU7XG4gXG4mIzQzO1x0XHRpZiAoc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkKSB7XG4mIzQzO1x0XHRcdGludCBuaWQ7XG4mIzQzO1x0XHRcdG1lbWRlc2NfZmxhZ3NfdCBwYWdlX2ZsYWdzID0gUkVBRF9PTkNFKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQnlwYXNzIFBGX1BPSVNPTkVEX0NIRUNLKCkgaW4gcGFnZV90b19uaWQoKSB0byBhdm9pZFxuJiM0MztcdFx0XHQgKiBWTV9CVUdfT04gd2hlbiBhY2Nlc3NpbmcgcG9pc29uZWQgcGFnZXMuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAocGFnZV9mbGFncy5mID09IFBBR0VfUE9JU09OX1BBVFRFUk4pXG4mIzQzO1x0XHRcdFx0Z290byBleHRfcHV0X2NvbnRpbnVlO1xuJiM0MztcdFx0XHRuaWQgPSBtZW1kZXNjX25pZChwYWdlX2ZsYWdzKTtcbiYjNDM7XHRcdFx0aWYgKCFub2RlX2lzc2V0KG5pZCwgc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcikpXG4mIzQzO1x0XHRcdFx0Z290byBleHRfcHV0X2NvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LyogUmVjb3JkIHRoZSBuZXh0IFBGTiB0byByZWFkIGluIHRoZSBmaWxlIG9mZnNldCAqL1xuIFx0XHQqcHBvcyA9IHBmbiAmIzQzOyAxO1xuIFxuIFx0XHRwYWdlX293bmVyX3RtcCA9ICpwYWdlX293bmVyO1xuIFx0XHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xuIFx0XHRyZXR1cm4gcHJpbnRfcGFnZV9vd25lcihidWYsIGNvdW50LCBwZm4sIHBhZ2UsXG4tXHRcdFx0XHRcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlKTtcbiYjNDM7XHRcdFx0XHRcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlLCBzdGF0ZSk7XG4gZXh0X3B1dF9jb250aW51ZTpcbiBcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtODQ3LDcgJiM0Mzs4OTUsMTEzIEBAIHN0YXRpYyB2b2lkIGluaXRfZWFybHlfYWxsb2NhdGVkX3BhZ2VzKHZvaWQpXG4gXHRcdGluaXRfcGFnZXNfaW5fem9uZSh6b25lKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZTtcbiYjNDM7XG4mIzQzO1x0c3RhdGUgPSBremFsbG9jX29iaigqc3RhdGUpO1xuJiM0MztcdGlmICghc3RhdGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0c3RhdGUtXHUwMDNlcHJpbnRfbW9kZSA9IFBBR0VfT1dORVJfUFJJTlRfU1RBQ0s7XG4mIzQzO1x0bm9kZXNfY2xlYXIoc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcik7XG4mIzQzO1x0c3RhdGUtXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkID0gZmFsc2U7XG4mIzQzO1x0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBzdGF0ZTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwYWdlX293bmVyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRrZnJlZShmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHBhZ2Vfb3duZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4mIzQzO1x0XHRcdFx0IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqa2J1ZjtcbiYjNDM7XHRjaGFyICpvcmlnO1xuJiM0MztcdGNoYXIgKnRva2VuO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuJiM0MztcdGVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIG5ld19wcmludF9tb2RlO1xuJiM0MztcdG5vZGVtYXNrX3QgbmV3X25pZF9maWx0ZXI7XG4mIzQzO1x0Ym9vbCBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1heGltdW0gaW5wdXQgbGVuZ3RoIGZvciBmaWx0ZXIgY29tbWFuZHM6XG4mIzQzO1x0ICogLSAzMjogcHJpbnRfbW9kZSBjb21tYW5kIG1heCBsZW5ndGggaXMgMTcgKFwmIzM0O21vZGU9c3RhY2tfaGFuZGxlXCYjMzQ7KVxuJiM0MztcdCAqICAgICAgICB3aXRoIHN1ZmZpY2llbnQgYnVmZmVyXG4mIzQzO1x0ICogLSA2ICogTUFYX05VTU5PREVTOiB3b3JzdCBjYXNlIGZvciBuaWQgbGlzdFxuJiM0MztcdCAqICAgV29yc3QgY2FzZSBwZXIgbm9kZTogXCYjMzQ7LE5OTk5OXCYjMzQ7IChjb21tYSAmIzQzOyA1LWRpZ2l0IG5vZGUgbnVtYmVyKSA9IDYgYnl0ZXNcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY291bnQgXHUwMDNlIDMyICYjNDM7IDYgKiBNQVhfTlVNTk9ERVMpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0a2J1ZiA9IG1lbWR1cF91c2VyX251bChidWYsIGNvdW50KTtcbiYjNDM7XHRpZiAoSVNfRVJSKGtidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoa2J1Zik7XG4mIzQzO1xuJiM0MztcdG9yaWcgPSBrYnVmO1xuJiM0MztcbiYjNDM7XHRuZXdfcHJpbnRfbW9kZSA9IHN0YXRlLVx1MDAzZXByaW50X21vZGU7XG4mIzQzO1x0bmV3X25pZF9maWx0ZXIgPSBzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyO1xuJiM0MztcdG5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSBzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgodG9rZW4gPSBzdHJzZXAoXHUwMDI2a2J1ZiwgXCYjMzQ7IFxcdFxcblwmIzM0OykpICE9IE5VTEwpIHtcbiYjNDM7XHRcdGlmICgqdG9rZW4gPT0gJiMzOTtcXDAmIzM5OylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzdHJuY21wKHRva2VuLCBcJiMzNDttb2RlPVwmIzM0OywgNSkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gc3lzZnNfbWF0Y2hfc3RyaW5nKHBhZ2Vfb3duZXJfcHJpbnRfbW9kZV9zdHJpbmdzLFxuJiM0MztcdFx0XHRcdFx0XHR0b2tlbiAmIzQzOyA1KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcdFx0XHRuZXdfcHJpbnRfbW9kZSA9IHJldDtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoIXN0cm5jbXAodG9rZW4sIFwmIzM0O25pZD1cJiMzNDssIDQpKSB7XG4mIzQzO1x0XHRcdHJldCA9IG5vZGVsaXN0X3BhcnNlKHRva2VuICYjNDM7IDQsIG5ld19uaWRfZmlsdGVyKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKG5vZGVzX2VtcHR5KG5ld19uaWRfZmlsdGVyKSkge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogV2Ugd2FudCB0byBmaWx0ZXIgbWVtb3J5IGFsbG9jYXRpb25zIGJ5IG51bWEgbm9kZXMsIHNvIG1ha2Ugc3VyZVxuJiM0MztcdFx0XHQgKiB0aGF0IHRoZSBzcGVjaWZpZWQgbm9kZXMgaGF2ZSBtZW1vcnkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoIW5vZGVzX3N1YnNldChuZXdfbmlkX2ZpbHRlciwgbm9kZV9zdGF0ZXNbTl9NRU1PUlldKSkge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0bmV3X25pZF9maWx0ZXJfZW5hYmxlZCA9IHRydWU7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQ29tbWl0IGFsbCBmaWx0ZXIgY2hhbmdlcyAqL1xuJiM0MztcdHN0YXRlLVx1MDAzZXByaW50X21vZGUgPSBuZXdfcHJpbnRfbW9kZTtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyID0gbmV3X25pZF9maWx0ZXI7XG4mIzQzO1x0c3RhdGUtXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkID0gbmV3X25pZF9maWx0ZXJfZW5hYmxlZDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gY291bnQ7XG4mIzQzO1xuJiM0MztvdXRfZnJlZTpcbiYjNDM7XHRrZnJlZShvcmlnKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfZm9wcyA9IHtcbiYjNDM7XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiYjNDM7XHQub3Blblx0XHQ9IHBhZ2Vfb3duZXJfb3BlbixcbiYjNDM7XHQucmVsZWFzZVx0PSBwYWdlX293bmVyX3JlbGVhc2UsXG4mIzQzO1x0LndyaXRlXHRcdD0gcGFnZV9vd25lcl93cml0ZSxcbiBcdC5yZWFkXHRcdD0gcmVhZF9wYWdlX293bmVyLFxuIFx0Lmxsc2Vla1x0XHQ9IGxzZWVrX3BhZ2Vfb3duZXIsXG4gfTtcbkBAIC05ODAsNyAmIzQzOzExMzQsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cGFnZV9vd25lclwmIzM0OywgMDQwMCwgTlVMTCwgTlVMTCwgXHUwMDI2cGFnZV9vd25lcl9mb3BzKTtcbiYjNDM7XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3BhZ2Vfb3duZXJcJiMzNDssIDA2MDAsIE5VTEwsIE5VTEwsIFx1MDAyNnBhZ2Vfb3duZXJfZm9wcyk7XG4gXHRkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXCYjMzQ7cGFnZV9vd25lcl9zdGFja3NcJiMzNDssIE5VTEwpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzaG93X3N0YWNrc1wmIzM0OywgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlXG5pbmRleCBmNTcyNWI1YzIzYWEyNi4uODU4MTg2YTZlZWZkYmQgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vTWFrZWZpbGVcbkBAIC0zLDcgJiM0MzszLDcgQEBcbiAjXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcbiBcbi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4mIzQzO0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHNcbiBcbiBMSUJfRElSID0gLi4vbGliL2FwaVxuQEAgLTIzLDcgJiM0MzsyMyw3IEBAICQoTElCUyk6XG4gXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFx1MDAzYyAkKExERkxBR1MpXG4gXG4gY2xlYW46XG4tXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MztcdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4gXHRtYWtlIC1DICQoTElCX0RJUikgY2xlYW5cbiBcbiBzYmluZGlyID89IC91c3Ivc2JpblxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmMgYi90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjFkMWYwYTM4Njc4YTJmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jXG5AQCAtMCwwICYjNDM7MSwzMTAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogVXNlci1zcGFjZSBoZWxwZXIgdG8gZmlsdGVyIHBhZ2Vfb3duZXIgb3V0cHV0IHBlci1mZFxuJiM0MzsgKlxuJiM0MzsgKiBFeGFtcGxlIHVzZTpcbiYjNDM7ICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZVxuJiM0MzsgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gc3RhY2tfaGFuZGxlXG4mIzQzOyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbiAwLDEsMlxuJiM0MzsgKlxuJiM0MzsgKiBTZWUgRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2N0eXBlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZ2V0b3B0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUFYX0NNRF9MRU5cdDUxMlxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZylcbiYjNDM7e1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtVc2FnZTogJXMgW09QVElPTlNdXFxuXCYjMzQ7LCBwcm9nKTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFxuT3B0aW9uczpcXG5cJiMzNDspO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgIC1tLCAtLW1vZGUgTU9ERSAgICAgIDogcHJpbnRfbW9kZSAoc3RhY2ssIGhhbmRsZSwgb3Igc3RhY2tfaGFuZGxlKVxcblwmIzM0Oyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgLW4sIC0tbmlkIE5JRF9MSVNUICAgOiBOVU1BIG5vZGUgSURzIChjb21tYS1zZXBhcmF0ZWQgb3IgcmFuZ2VzKVxcblwmIzM0Oyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgLW8sIC0tb3V0cHV0IEZJTEUgICAgOiBvdXRwdXQgZmlsZSAoZGVmYXVsdDogc3Rkb3V0KVxcblwmIzM0Oyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgLWgsIC0taGVscCAgICAgICAgICAgOiBzaG93IHRoaXMgaGVscCBtZXNzYWdlXFxuXCYjMzQ7KTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFxuRXhhbXBsZXM6XFxuXCYjMzQ7KTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAlcyAtbSBzdGFja1xcblwmIzM0OywgcHJvZyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgJXMgLW0gaGFuZGxlXFxuXCYjMzQ7LCBwcm9nKTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAlcyAtbSBzdGFja19oYW5kbGVcXG5cJiMzNDssIHByb2cpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgICVzIC1tIHN0YWNrIC1vIG91dHB1dC50eHRcXG5cJiMzNDssIHByb2cpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDsgICVzIC1uIDAsMSwyXFxuXCYjMzQ7LCBwcm9nKTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAlcyAtbSBzdGFjayAtbiAwXFxuXCYjMzQ7LCBwcm9nKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2YWxpZGF0ZV9tb2RlKGNvbnN0IGNoYXIgKm1vZGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc3RyY21wKG1vZGUsIFwmIzM0O3N0YWNrXCYjMzQ7KSA9PSAwIHx8XG4mIzQzO1x0ICAgIHN0cmNtcChtb2RlLCBcJiMzNDtoYW5kbGVcJiMzNDspID09IDAgfHxcbiYjNDM7XHQgICAgc3RyY21wKG1vZGUsIFwmIzM0O3N0YWNrX2hhbmRsZVwmIzM0OykgPT0gMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IEludmFsaWQgbW9kZSAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG1vZGUpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtWYWxpZCBtb2Rlczogc3RhY2ssIGhhbmRsZSwgc3RhY2tfaGFuZGxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gLTE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdmFsaWRhdGVfbmlkX2xpc3QoY29uc3QgY2hhciAqbmlkX2xpc3QpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpwO1xuJiM0MztcdGludCBpID0gMDtcbiYjNDM7XHRpbnQgaGFzX2RpZ2l0ID0gMDtcbiYjNDM7XHRpbnQgaW5fcmFuZ2UgPSAwO1xuJiM0MztcdGludCBwcmV2X251bSA9IDA7XG4mIzQzO1x0aW50IGN1cnJfbnVtID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuaWRfbGlzdCB8fCBzdHJsZW4obmlkX2xpc3QpID09IDApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChwID0gbmlkX2xpc3Q7ICpwOyBwJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCpwID09ICYjMzk7LCYjMzk7KSB7XG4mIzQzO1x0XHRcdGlmICghaGFzX2RpZ2l0KSB7XG4mIzQzO1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmIChpbl9yYW5nZSBcdTAwMjZcdTAwMjYgcHJldl9udW0gXHUwMDNlIGN1cnJfbnVtKSB7XG4mIzQzO1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDtFcnJvcjogSW52YWxpZCByYW5nZSAlZC0lZCAoc3RhcnQgbXVzdCBiZSBcdTAwM2M9IGVuZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRwcmV2X251bSwgY3Vycl9udW0pO1xuJiM0MztcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpID0gMDtcbiYjNDM7XHRcdFx0aGFzX2RpZ2l0ID0gMDtcbiYjNDM7XHRcdFx0aW5fcmFuZ2UgPSAwO1xuJiM0MztcdFx0XHRwcmV2X251bSA9IDA7XG4mIzQzO1x0XHRcdGN1cnJfbnVtID0gMDtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCpwID09ICYjMzk7LSYjMzk7KSB7XG4mIzQzO1x0XHRcdGlmICghaGFzX2RpZ2l0KSB7XG4mIzQzO1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDtFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXQgXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKHN0ZGVycixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0OyhkYXNoIHdpdGhvdXQgcHJlY2VkaW5nIG51bWJlcilcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoaW5fcmFuZ2UpIHtcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IE11bHRpcGxlIGRhc2hlcyBpbiBuaWRfbGlzdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHByZXZfbnVtID0gY3Vycl9udW07XG4mIzQzO1x0XHRcdGN1cnJfbnVtID0gMDtcbiYjNDM7XHRcdFx0aSA9IDA7XG4mIzQzO1x0XHRcdGhhc19kaWdpdCA9IDA7XG4mIzQzO1x0XHRcdGluX3JhbmdlID0gMTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpwKSkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IEludmFsaWQgY2hhcmFjdGVyICYjMzk7JWMmIzM5OyBpbiBuaWRfbGlzdFxcblwmIzM0OywgKnApO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKGkgXHUwMDNlIDUpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOiBOSUQgdG9vIGxvbmcgKG1heCA2NTUzNilcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRjdXJyX251bSA9IGN1cnJfbnVtICogMTAgJiM0MzsgKCpwIC0gJiMzOTswJiMzOTspO1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRoYXNfZGlnaXQgPSAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFoYXNfZGlnaXQpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGluX3JhbmdlIFx1MDAyNlx1MDAyNiBwcmV2X251bSBcdTAwM2UgY3Vycl9udW0pIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLFxuJiM0MztcdFx0XHRcJiMzNDtFcnJvcjogSW52YWxpZCByYW5nZSAlZC0lZCAoc3RhcnQgbXVzdCBiZSBcdTAwM2M9IGVuZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHByZXZfbnVtLCBjdXJyX251bSk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKm91dHB1dF9maWxlID0gTlVMTDtcbiYjNDM7XHRjaGFyIGZpbHRlcl9jbWRbTUFYX0NNRF9MRU5dO1xuJiM0MztcdEZJTEUgKm91dHB1dCA9IE5VTEw7XG4mIzQzO1x0aW50IGZkID0gLTE7XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1x0Y2hhciBidWZbNDA5Nl07XG4mIzQzO1x0aW50IG9wdDtcbiYjNDM7XHRzaXplX3QgY21kX2xlbiA9IDA7XG4mIzQzO1xuJiM0MztcdHNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTtcbiYjNDM7XG4mIzQzO1x0c3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7XG4mIzQzO1x0XHR7XCYjMzQ7bW9kZVwmIzM0OyxcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAmIzM5O20mIzM5O30sXG4mIzQzO1x0XHR7XCYjMzQ7bmlkXCYjMzQ7LFx0XHRyZXF1aXJlZF9hcmd1bWVudCwgMCwgJiMzOTtuJiMzOTt9LFxuJiM0MztcdFx0e1wmIzM0O291dHB1dFwmIzM0OyxcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAmIzM5O28mIzM5O30sXG4mIzQzO1x0XHR7XCYjMzQ7aGVscFwmIzM0OyxcdG5vX2FyZ3VtZW50LFx0ICAgMCwgJiMzOTtoJiMzOTt9LFxuJiM0MztcdFx0ezAsIDAsIDAsIDB9XG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0ZmlsdGVyX2NtZFswXSA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1xuJiM0MztcdGlmIChhcmdjIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgYXJnYzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHN0cmNtcChhcmd2W2ldLCBcJiMzNDstaFwmIzM0OykgPT0gMCB8fCBzdHJjbXAoYXJndltpXSwgXCYjMzQ7LS1oZWxwXCYjMzQ7KSA9PSAwKSB7XG4mIzQzO1x0XHRcdFx0dXNhZ2UoYXJndlswXSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIGlmIHBhZ2Vfb3duZXIgZXhpc3RzIGFuZCBpcyByZWFkYWJsZSAqL1xuJiM0MztcdGlmIChhY2Nlc3MoXCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclwmIzM0OywgRl9PSykgIT0gMCkge1xuJiM0MztcdFx0aWYgKGVycm5vID09IEVOT0VOVClcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOiAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIGRvZXMgbm90IGV4aXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGVycm9yKFwmIzM0O0Vycm9yIGFjY2Vzc2luZyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXCYjMzQ7KTtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtNYWtlIHN1cmUgcGFnZV9vd25lciBpcyBlbmFibGVkIGluIGtlcm5lbFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgXCYjMzQ7bTpuOm86aFwmIzM0OywgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpIHtcbiYjNDM7XHRcdGludCBsZW47XG4mIzQzO1xuJiM0MztcdFx0c3dpdGNoIChvcHQpIHtcbiYjNDM7XHRcdGNhc2UgJiMzOTttJiMzOTs6IHtcbiYjNDM7XHRcdFx0Y29uc3QgY2hhciAqbW9kZSA9IG9wdGFyZztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh2YWxpZGF0ZV9tb2RlKG1vZGUpIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0XHRsZW4gPSBzbnByaW50ZihmaWx0ZXJfY21kICYjNDM7IGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7JXNtb2RlPSVzXCYjMzQ7LCBjbWRfbGVuIFx1MDAzZSAwID8gXCYjMzQ7IFwmIzM0OyA6IFwmIzM0O1wmIzM0OywgbW9kZSk7XG4mIzQzO1x0XHRcdGlmIChsZW4gXHUwMDNjIDAgfHwgY21kX2xlbiAmIzQzOyBsZW4gXHUwMDNlPSBNQVhfQ01EX0xFTikge1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogQ29tbWFuZCB0b28gbG9uZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0Y21kX2xlbiAmIzQzOz0gbGVuO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhc2UgJiMzOTtuJiMzOTs6IHtcbiYjNDM7XHRcdFx0Y29uc3QgY2hhciAqbmlkX2xpc3QgPSBvcHRhcmc7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodmFsaWRhdGVfbmlkX2xpc3QobmlkX2xpc3QpIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0XHRsZW4gPSBzbnByaW50ZihmaWx0ZXJfY21kICYjNDM7IGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7JXNuaWQ9JXNcJiMzNDssIGNtZF9sZW4gXHUwMDNlIDAgPyBcJiMzNDsgXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LCBuaWRfbGlzdCk7XG4mIzQzO1x0XHRcdGlmIChsZW4gXHUwMDNjIDAgfHwgY21kX2xlbiAmIzQzOyBsZW4gXHUwMDNlPSBNQVhfQ01EX0xFTikge1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFcnJvcjogQ29tbWFuZCB0b28gbG9uZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIDE7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0Y21kX2xlbiAmIzQzOz0gbGVuO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhc2UgJiMzOTtvJiMzOTs6XG4mIzQzO1x0XHRcdG91dHB1dF9maWxlID0gb3B0YXJnO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtoJiMzOTs6XG4mIzQzO1x0XHRcdC8qIEFscmVhZHkgaGFuZGxlZCBhYm92ZSAqL1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHVzYWdlKGFyZ3ZbMF0pO1xuJiM0MztcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEF0IGxlYXN0IG9uZSBmaWx0ZXIgbXVzdCBiZSBzcGVjaWZpZWQgKi9cbiYjNDM7XHRpZiAoY21kX2xlbiA9PSAwKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IEF0IGxlYXN0IG9uZSBmaWx0ZXIgKC1tIG9yIC1uKSBtdXN0IGJlIHNwZWNpZmllZFxcblxcblwmIzM0Oyk7XG4mIzQzO1x0XHR1c2FnZShhcmd2WzBdKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogT3BlbiBwYWdlX293bmVyIGZvciByZWFkLXdyaXRlIC0gdGhpcyB3aWxsIGZhaWwgaWYga2VybmVsIGRvZXNuJiMzOTt0IHN1cHBvcnQgd3JpdGUgKi9cbiYjNDM7XHRmZCA9IG9wZW4oXCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclwmIzM0OywgT19SRFdSKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFQUNDRVMgfHwgZXJybm8gPT0gRVBFUk0pIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0Vycm9yOiAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtkb2VzIG5vdCBzdXBwb3J0IHdyaXRlIGFjY2Vzc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtUaGlzIGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtwZXItZmQgZmlsdGVyaW5nLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtQbGVhc2UgZW5zdXJlIHlvdSBoYXZlIGEga2VybmVsIHdpdGggXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3Blci1mZCBmaWx0ZXJpbmcgc3VwcG9ydC5cXG5cJiMzNDspO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cGVycm9yKFwmIzM0O0Vycm9yIG9wZW5pbmcgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvdXRwdXRfZmlsZSkge1xuJiM0MztcdFx0b3V0cHV0ID0gZm9wZW4ob3V0cHV0X2ZpbGUsIFwmIzM0O3dcJiMzNDspO1xuJiM0MztcdFx0aWYgKCFvdXRwdXQpIHtcbiYjNDM7XHRcdFx0cGVycm9yKFwmIzM0O29wZW4gb3V0cHV0IGZpbGVcJiMzNDspO1xuJiM0MztcdFx0XHRjbG9zZShmZCk7XG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRvdXRwdXQgPSBzdGRvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB3cml0ZShmZCwgZmlsdGVyX2NtZCwgc3RybGVuKGZpbHRlcl9jbWQpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0aWYgKGVycm5vID09IEVJTlZBTCkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RXJyb3I6IEtlcm5lbCByZWplY3RlZCB0aGUgZmlsdGVyIGNvbW1hbmQuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1Bvc3NpYmxlIGNhdXNlczpcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAtIEtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHBlci1mZCBmaWx0ZXJpbmdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAtIE5VTUEgbm9kZSBoYXMgbm8gbWVtb3J5XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyAgLSBVbmtub3duIHJlYXNvblxcblwmIzM0Oyk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwZXJyb3IoXCYjMzQ7d3JpdGUgZmlsdGVyIGNvbW1hbmRcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoKHNpemVfdClyZXQgIT0gc3RybGVuKGZpbHRlcl9jbWQpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1dhcm5pbmc6IFBhcnRpYWwgd3JpdGUgKCV6ZC8lenUpXFxuXCYjMzQ7LCByZXQsIHN0cmxlbihmaWx0ZXJfY21kKSk7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgYW5kIGRpc3BsYXkgZmlsdGVyZWQgb3V0cHV0ICovXG4mIzQzO1x0cmV0ID0gMDtcbiYjNDM7XHR3aGlsZSAoKHJldCA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSBcdTAwM2UgMCkge1xuJiM0MztcdFx0c2l6ZV90IHdyaXR0ZW4gPSBmd3JpdGUoYnVmLCAxLCByZXQsIG91dHB1dCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHdyaXR0ZW4gIT0gKHNpemVfdClyZXQpIHtcbiYjNDM7XHRcdFx0aWYgKGVycm5vID09IEVQSVBFKSB7XG4mIzQzO1x0XHRcdFx0LyogUGlwZSBjbG9zZWQsIHRyZWF0IGFzIHN1Y2Nlc3MgKi9cbiYjNDM7XHRcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHBlcnJvcihcJiMzNDt3cml0ZSBvdXRwdXRcJiMzNDspO1xuJiM0MztcdFx0XHRyZXQgPSAtMTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwZXJyb3IoXCYjMzQ7cmVhZCBwYWdlX293bmVyXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGZmbHVzaChvdXRwdXQpKSB7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRVBJUEUpIHtcbiYjNDM7XHRcdFx0LyogUGlwZSBjbG9zZWQsIHRyZWF0IGFzIHN1Y2Nlc3MgKi9cbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHBlcnJvcihcJiMzNDtmbHVzaCBvdXRwdXRcJiMzNDspO1xuJiM0MztcdFx0XHRyZXQgPSAtMTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdGlmIChvdXRwdXQgIT0gc3Rkb3V0KVxuJiM0MztcdFx0ZmNsb3NlKG91dHB1dCk7XG4mIzQzO1x0cmV0dXJuIHJldCBcdTAwM2MgMCA/IDEgOiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFHRV9PV05FUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2Vfb3duZXJfd3JpdGUmIzM0OywKICAgICYjMzQ7cGFnZV9vd25lcl9vcGVuJiMzNDssCiAgICAmIzM0O3BhZ2Vfb3duZXJfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtwcmludF9wYWdlX293bmVyJiMzNDssCiAgICAmIzM0O3JlYWRfcGFnZV9vd25lciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHdyaXRlIGhhbmRsZXIgKGBwYWdlX293bmVyX3dyaXRlYCkgZm9yIHRoZSBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgZGVidWdmcyBmaWxlIHRvIHN1cHBvcnQgZmlsdGVyaW5nLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSByZWFkIGhhbmRsZXIgKGByZWFkX3BhZ2Vfb3duZXJgKSBhbmQgb3V0cHV0IGZvcm1hdHRpbmcgKGBwcmludF9wYWdlX293bmVyYCkgdG8gYXBwbHkgdGhlIGZpbHRlcnMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBwYXJzaW5nIHVzZXIgaW5wdXQgYW5kIG1hbmFnaW5nIHBlci1mZCBzdGF0ZSwgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZjODJmZGZiYWE3ZTYxZDA3MDIzZDJlNzJhODdjNGE2MTM5NmE5ZTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCA3IDIwOjIwOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QKaW5kZXggNmIxMmYzYjAwN2VjOTEuLjM4M2U1OWM0Mjc0M2JkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QKQEAgLTY1LDcgJiM0Mzs2NSwxNCBAQCB1bi10cmFja2luZyBzdGF0ZS4KIFVzYWdlCiA9PT09PQogCi0xKSBCdWlsZCB1c2VyLXNwYWNlIGhlbHBlcjo6CiYjNDM7MSkgQnVpbGQgdXNlci1zcGFjZSBoZWxwZXJzOjoKJiM0MzsKJiM0MztUbyBmaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQ6CiYjNDM7CiYjNDM7CWNkIHRvb2xzL21tCiYjNDM7CW1ha2UgcGFnZV9vd25lcl9maWx0ZXIKJiM0MzsKJiM0MztUbyBzb3J0IGFuZCBhbmFseXplIHBhZ2Vfb3duZXIgb3V0cHV0OgogCiAJY2QgdG9vbHMvbW0KIAltYWtlIHBhZ2Vfb3duZXJfc29ydApAQCAtNzQsNyAmIzQzOzgxLDExIEBAIFVzYWdlCiAKIDMpIERvIHRoZSBqb2IgdGhhdCB5b3Ugd2FudCB0byBkZWJ1Zy4KIAotNCkgQW5hbHl6ZSBpbmZvcm1hdGlvbiBmcm9tIHBhZ2Ugb3duZXI6OgomIzQzOzQpIChPcHRpb25hbCkgRmlsdGVyIHBhZ2Vfb3duZXIgb3V0cHV0OjoKJiM0MzsKJiM0MzsJLi9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGUgLW4gMCwxLDIgJmd0OyBmaWx0ZXJlZF9wYWdlX293bmVyLnR4dAomIzQzOwomIzQzOzUpIEFuYWx5emUgaW5mb3JtYXRpb24gZnJvbSBwYWdlIG93bmVyOjoKIAogCWNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyX3N0YWNrcy9zaG93X3N0YWNrcyAmZ3Q7IHN0YWNrcy50eHQKIAljYXQgc3RhY2tzLnR4dApAQCAtMjYzLDMgJiM0MzsyNzQsNjUgQEAgU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlMKIAlmCQlmcmVlCQl3aGV0aGVyIHRoZSBwYWdlIGhhcyBiZWVuIHJlbGVhc2VkIG9yIG5vdAogCXN0CQlzdGFja3RyYWNlCXN0YWNrIHRyYWNlIG9mIHRoZSBwYWdlIGFsbG9jYXRpb24KIAlhdG9yCQlhbGxvY2F0b3IJbWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXMKJiM0MzsKJiM0MztGaWx0ZXJpbmcgcGFnZV9vd25lciBvdXRwdXQKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7cGFnZV9vd25lciBzdXBwb3J0cyBmaWx0ZXJpbmcgb3V0cHV0IGF0IHRoZSBrZXJuZWwgbGV2ZWwgYmVmb3JlIHJlYWRpbmcsCiYjNDM7d2hpY2ggcmVkdWNlcyB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBwcm9jZXNzZWQgaW4gdXNlcnNwYWNlLgomIzQzOwomIzQzO1RoZSBwYWdlX293bmVyX2ZpbHRlciB0b29sIHByb3ZpZGVzIGEgY29udmVuaWVudCBpbnRlcmZhY2UgZm9yIHRoaXMgZmlsdGVyaW5nCiYjNDM7Y2FwYWJpbGl0eS4gSXQgc3VwcG9ydHMgdHdvIHR5cGVzIG9mIGZpbHRlcnM6CiYjNDM7CiYjNDM7MS4gKipwcmludF9tb2RlIGZpbHRlcioqOiBDb250cm9sIHdoYXQgaW5mb3JtYXRpb24gaXMgcHJpbnRlZCBmb3IgZWFjaCBwYWdlCiYjNDM7CS0gYGBzdGFja2BgOiBQcmludCBmdWxsIHN0YWNrIHRyYWNlcyAoZGVmYXVsdCwgY29tcGF0aWJsZSB3aXRoIGV4aXN0aW5nIHVzYWdlKQomIzQzOwktIGBgaGFuZGxlYGA6IFByaW50IG9ubHkgc3RhY2sgaGFuZGxlIG51bWJlcnMgKG11Y2ggZmFzdGVyLCBzbWFsbGVyIG91dHB1dCkKJiM0MzsJLSBgYHN0YWNrX2hhbmRsZWBgOiBQcmludCBib3RoIHN0YWNrIHRyYWNlcyBhbmQgaGFuZGxlIG51bWJlcnMKJiM0MzsKJiM0MzsJVGhlIGBgaGFuZGxlYGAgbW9kZSB1c2VzIG51bWVyaWMgaWRlbnRpZmllcnMgaW5zdGVhZCBvZiBmdWxsIHN0YWNrIHRyYWNlcy4KJiM0MzsJVGhlIG1hcHBpbmcgZnJvbSBoYW5kbGVzIHRvIGFjdHVhbCBzdGFjayB0cmFjZXMgY2FuIGJlIG9idGFpbmVkIHZpYSB0aGUKJiM0MzsJc2hvd19zdGFja3NfaGFuZGxlcyBpbnRlcmZhY2UuCiYjNDM7CiYjNDM7Mi4gKipOVU1BIG5vZGUgZmlsdGVyKio6IEZpbHRlciBwYWdlcyBieSBOVU1BIG5vZGUgSUQKJiM0MzsJLSBTdXBwb3J0cyBzaW5nbGUgbm9kZTogYGAtbiAwYGAKJiM0MzsJLSBNdWx0aXBsZSBub2RlczogYGAtbiAwLDEsMmBgCiYjNDM7CS0gUmFuZ2VzOiBgYC1uIDAtM2BgCiYjNDM7CS0gTWl4ZWQgZm9ybWF0OiBgYC1uIDAsMi0zLDVgYAomIzQzOwomIzQzO1VzYWdlIGV4YW1wbGVzOjoKJiM0MzsKJiM0MzsJIyBGaWx0ZXIgYnkgcHJpbnQgbW9kZQomIzQzOwkuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZQomIzQzOwkuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrX2hhbmRsZQomIzQzOwomIzQzOwkjIEZpbHRlciBieSBOVU1BIG5vZGUKJiM0MzsJLi9wYWdlX293bmVyX2ZpbHRlciAtbiAwCiYjNDM7CS4vcGFnZV9vd25lcl9maWx0ZXIgLW4gMC0zCiYjNDM7CiYjNDM7CSMgQ29tYmluZWQgZmlsdGVycwomIzQzOwkuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrIC1uIDAsMSwyCiYjNDM7CS4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1uIDAsMi0zCiYjNDM7CiYjNDM7CSMgU2F2ZSB0byBmaWxlCiYjNDM7CS4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1vIGZpbHRlcmVkX291dHB1dC50eHQKJiM0MzsKJiM0MztUaGUgaGFuZGxlIG1vZGUgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgbW9uaXRvcmluZyBhbmQgcGVyZm9ybWFuY2UtY3JpdGljYWwKJiM0MztzY2VuYXJpb3MgYXMgaXQgZHJhbWF0aWNhbGx5IHJlZHVjZXMgb3V0cHV0IHNpemUuIFRlc3Rpbmcgc2hvd3MgaGFuZGxlIG1vZGUgY2FuCiYjNDM7cmVkdWNlIG91dHB1dCBzaXplIGJ5IH42NiUgKDg0TUIgdnMgMjQ0TUIpIGFuZCBpbXByb3ZlIHJlYWQgcGVyZm9ybWFuY2UgYnkgfjQuNHgKJiM0Mztjb21wYXJlZCB0byBmdWxsIHN0YWNrIG91dHB1dC4KJiM0MzsKJiM0MztUaGUgTlVNQSBub2RlIGZpbHRlciBpcyB1c2VmdWwgZm9yIE5VTUEtYXdhcmUgbWVtb3J5IGFsbG9jYXRpb24gYW5hbHlzaXMgYW5kIGRlYnVnZ2luZy4KJiM0MzsKJiM0MztCZWhpbmQgdGhlIHNjZW5lcywgcGFnZV9vd25lcl9maWx0ZXIgb3BlbnMgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciBhbmQKJiM0Mzt3cml0ZXMgZmlsdGVyIGNvbW1hbmRzIGJlZm9yZSByZWFkaW5nIHRoZSBmaWx0ZXJlZCBvdXRwdXQuIFRoZSBmaWx0ZXJpbmcgdXNlcwomIzQzO3Blci1maWxlLWRlc2NyaXB0b3Igc3RhdGUsIGFsbG93aW5nIGVhY2ggb3BlbigpIHRvIGhhdmUgaW5kZXBlbmRlbnQgZmlsdGVyIHNldHRpbmdzLgomIzQzOwomIzQzO0VhY2ggZmlsZSBkZXNjcmlwdG9yIG1haW50YWlucyBpdHMgb3duIGZpbHRlciBzdGF0ZSwgc28geW91IGNhbiBoYXZlIG11bHRpcGxlCiYjNDM7aW5kZXBlbmRlbnQgZmlsdGVyaW5nIG9wZXJhdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuIEZvciBleGFtcGxlLCBpbiBkaWZmZXJlbnQKJiM0Mzt0ZXJtaW5hbHMgeW91IGNhbiBydW4gZGlmZmVyZW50IGZpbHRlcnMgc2ltdWx0YW5lb3VzbHk6OgomIzQzOwomIzQzOwkjIFRlcm1pbmFsIDE6IEZpbHRlciBub2RlIDAKJiM0MzsJLi9wYWdlX293bmVyX2ZpbHRlciAtbiAwICZndDsgbm9kZTBfb3V0cHV0LnR4dAomIzQzOwomIzQzOwkjIFRlcm1pbmFsIDI6IEZpbHRlciBub2RlIDEgKHJ1bnMgY29uY3VycmVudGx5KQomIzQzOwkuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDEgJmd0OyBub2RlMV9vdXRwdXQudHh0CmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmMKaW5kZXggODE3OGUwYmU1NTdmODcuLmYxZDRjMjA1YWZmOTc5IDEwMDY0NAotLS0gYS9tbS9wYWdlX293bmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9vd25lci5jCkBAIC01NCw2ICYjNDM7NTQsMjQgQEAgc3RydWN0IHN0YWNrX3ByaW50X2N0eCB7CiAJdTggZmxhZ3M7CiB9OwogCiYjNDM7ZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgewomIzQzOwlQQUdFX09XTkVSX1BSSU5UX1NUQUNLLAomIzQzOwlQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSwKJiM0MzsJUEFHRV9PV05FUl9QUklOVF9TVEFDS19IQU5ETEUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBhZ2Vfb3duZXJfcHJpbnRfbW9kZV9zdHJpbmdzW10gPSB7CiYjNDM7CVtQQUdFX09XTkVSX1BSSU5UX1NUQUNLXQk9ICYjMzQ7c3RhY2smIzM0OywKJiM0MzsJW1BBR0VfT1dORVJfUFJJTlRfSEFORExFXQk9ICYjMzQ7aGFuZGxlJiMzNDssCiYjNDM7CVtQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRV0JPSAmIzM0O3N0YWNrX2hhbmRsZSYjMzQ7LAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlIHsKJiM0MzsJZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTsKJiM0MzsJbm9kZW1hc2tfdCBuaWRfZmlsdGVyOwomIzQzOwlib29sIG5pZF9maWx0ZXJfZW5hYmxlZDsKJiM0Mzt9OwomIzQzOwogc3RhdGljIGJvb2wgcGFnZV9vd25lcl9lbmFibGVkIF9faW5pdGRhdGE7CiBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwYWdlX293bmVyX2luaXRlZCk7CiAKQEAgLTU0NywxNiAmIzQzOzU2NSwyMCBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCwKIHN0YXRpYyBzc2l6ZV90CiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCXN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lciwKLQkJZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlKQomIzQzOwkJZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLAomIzQzOwkJc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSkKIHsKIAlpbnQgcmV0LCBwYWdlYmxvY2tfbXQsIHBhZ2VfbXQ7CiAJY2hhciAqa2J1ZjsKJiM0MzsJZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTsKIAogCWNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgUEFHRV9TSVpFKTsKIAlrYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFrYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwlwcmludF9tb2RlID0gc3RhdGUtJmd0O3ByaW50X21vZGU7CiYjNDM7CiAJcmV0ID0gc2NucHJpbnRmKGtidWYsIGNvdW50LAogCQkJJiMzNDtQYWdlIGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSBuc1xuJiMzNDssCiAJCQlwYWdlX293bmVyLSZndDtvcmRlciwgcGFnZV9vd25lci0mZ3Q7Z2ZwX21hc2ssCkBAIC01NzUsOSAmIzQzOzU5NywxOCBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCQltaWdyYXRldHlwZV9uYW1lc1twYWdlYmxvY2tfbXRdLAogCQkJJmFtcDtwYWdlLSZndDtmbGFncyk7CiAKLQlyZXQgJiM0Mzs9IHN0YWNrX2RlcG90X3NucHJpbnQoaGFuZGxlLCBrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsIDApOwotCWlmIChyZXQgJmd0Oz0gY291bnQpCi0JCWdvdG8gZXJyOwomIzQzOwlpZiAocHJpbnRfbW9kZSAhPSBQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSkgewomIzQzOwkJcmV0ICYjNDM7PSBzdGFja19kZXBvdF9zbnByaW50KGhhbmRsZSwga2J1ZiAmIzQzOyByZXQsIGNvdW50IC0gcmV0LCAwKTsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gY291bnQpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHByaW50X21vZGUgIT0gUEFHRV9PV05FUl9QUklOVF9TVEFDSykgewomIzQzOwkJcmV0ICYjNDM7PSBzY25wcmludGYoa2J1ZiAmIzQzOyByZXQsIGNvdW50IC0gcmV0LCAmIzM0O2hhbmRsZTogJXVcbiYjMzQ7LAomIzQzOwkJCQkgaGFuZGxlKTsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gY291bnQpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0KIAogCWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7CiAJCXJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwKQEAgLTY2NCw2ICYjNDM7Njk1LDcgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAlzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0OwogCXN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyOwogCWRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTsKJiM0MzsJc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKIAogCWlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO3BhZ2Vfb3duZXJfaW5pdGVkKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NDAsMTUgJiM0Mzs3NzIsMzEgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAkJaWYgKCFoYW5kbGUpCiAJCQlnb3RvIGV4dF9wdXRfY29udGludWU7CiAKJiM0MzsJCWlmIChzdGF0ZS0mZ3Q7bmlkX2ZpbHRlcl9lbmFibGVkKSB7CiYjNDM7CQkJaW50IG5pZDsKJiM0MzsJCQltZW1kZXNjX2ZsYWdzX3QgcGFnZV9mbGFncyA9IFJFQURfT05DRShwYWdlLSZndDtmbGFncyk7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBCeXBhc3MgUEZfUE9JU09ORURfQ0hFQ0soKSBpbiBwYWdlX3RvX25pZCgpIHRvIGF2b2lkCiYjNDM7CQkJICogVk1fQlVHX09OIHdoZW4gYWNjZXNzaW5nIHBvaXNvbmVkIHBhZ2VzLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChwYWdlX2ZsYWdzLmYgPT0gUEFHRV9QT0lTT05fUEFUVEVSTikKJiM0MzsJCQkJZ290byBleHRfcHV0X2NvbnRpbnVlOwomIzQzOwkJCW5pZCA9IG1lbWRlc2NfbmlkKHBhZ2VfZmxhZ3MpOwomIzQzOwkJCWlmICghbm9kZV9pc3NldChuaWQsIHN0YXRlLSZndDtuaWRfZmlsdGVyKSkKJiM0MzsJCQkJZ290byBleHRfcHV0X2NvbnRpbnVlOwomIzQzOwkJfQomIzQzOwogCQkvKiBSZWNvcmQgdGhlIG5leHQgUEZOIHRvIHJlYWQgaW4gdGhlIGZpbGUgb2Zmc2V0ICovCiAJCSpwcG9zID0gcGZuICYjNDM7IDE7CiAKIAkJcGFnZV9vd25lcl90bXAgPSAqcGFnZV9vd25lcjsKIAkJcGFnZV9leHRfcHV0KHBhZ2VfZXh0KTsKIAkJcmV0dXJuIHByaW50X3BhZ2Vfb3duZXIoYnVmLCBjb3VudCwgcGZuLCBwYWdlLAotCQkJCSZhbXA7cGFnZV9vd25lcl90bXAsIGhhbmRsZSk7CiYjNDM7CQkJCSZhbXA7cGFnZV9vd25lcl90bXAsIGhhbmRsZSwgc3RhdGUpOwogZXh0X3B1dF9jb250aW51ZToKIAkJcGFnZV9leHRfcHV0KHBhZ2VfZXh0KTsKJiM0MzsJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAogCXJldHVybiAwOwpAQCAtODQ3LDcgJiM0Mzs4OTUsMTEzIEBAIHN0YXRpYyB2b2lkIGluaXRfZWFybHlfYWxsb2NhdGVkX3BhZ2VzKHZvaWQpCiAJCWluaXRfcGFnZXNfaW5fem9uZSh6b25lKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZTsKJiM0MzsKJiM0MzsJc3RhdGUgPSBremFsbG9jX29iaigqc3RhdGUpOwomIzQzOwlpZiAoIXN0YXRlKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXN0YXRlLSZndDtwcmludF9tb2RlID0gUEFHRV9PV05FUl9QUklOVF9TVEFDSzsKJiM0MzsJbm9kZXNfY2xlYXIoc3RhdGUtJmd0O25pZF9maWx0ZXIpOwomIzQzOwlzdGF0ZS0mZ3Q7bmlkX2ZpbHRlcl9lbmFibGVkID0gZmFsc2U7CiYjNDM7CWZpbGUtJmd0O3ByaXZhdGVfZGF0YSA9IHN0YXRlOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwYWdlX293bmVyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiYjNDM7ewomIzQzOwlrZnJlZShmaWxlLSZndDtwcml2YXRlX2RhdGEpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgcGFnZV9vd25lcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKJiM0MzsJCQkJIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiYjNDM7CQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKJiM0Mzt7CiYjNDM7CWNoYXIgKmtidWY7CiYjNDM7CWNoYXIgKm9yaWc7CiYjNDM7CWNoYXIgKnRva2VuOwomIzQzOwlpbnQgcmV0OwomIzQzOwlzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUgKnN0YXRlID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwllbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBuZXdfcHJpbnRfbW9kZTsKJiM0MzsJbm9kZW1hc2tfdCBuZXdfbmlkX2ZpbHRlcjsKJiM0MzsJYm9vbCBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXhpbXVtIGlucHV0IGxlbmd0aCBmb3IgZmlsdGVyIGNvbW1hbmRzOgomIzQzOwkgKiAtIDMyOiBwcmludF9tb2RlIGNvbW1hbmQgbWF4IGxlbmd0aCBpcyAxNyAoJiMzNDttb2RlPXN0YWNrX2hhbmRsZSYjMzQ7KQomIzQzOwkgKiAgICAgICAgd2l0aCBzdWZmaWNpZW50IGJ1ZmZlcgomIzQzOwkgKiAtIDYgKiBNQVhfTlVNTk9ERVM6IHdvcnN0IGNhc2UgZm9yIG5pZCBsaXN0CiYjNDM7CSAqICAgV29yc3QgY2FzZSBwZXIgbm9kZTogJiMzNDssTk5OTk4mIzM0OyAoY29tbWEgJiM0MzsgNS1kaWdpdCBub2RlIG51bWJlcikgPSA2IGJ5dGVzCiYjNDM7CSAqLwomIzQzOwlpZiAoY291bnQgJmd0OyAzMiAmIzQzOyA2ICogTUFYX05VTU5PREVTKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWtidWYgPSBtZW1kdXBfdXNlcl9udWwoYnVmLCBjb3VudCk7CiYjNDM7CWlmIChJU19FUlIoa2J1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihrYnVmKTsKJiM0MzsKJiM0MzsJb3JpZyA9IGtidWY7CiYjNDM7CiYjNDM7CW5ld19wcmludF9tb2RlID0gc3RhdGUtJmd0O3ByaW50X21vZGU7CiYjNDM7CW5ld19uaWRfZmlsdGVyID0gc3RhdGUtJmd0O25pZF9maWx0ZXI7CiYjNDM7CW5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSBzdGF0ZS0mZ3Q7bmlkX2ZpbHRlcl9lbmFibGVkOwomIzQzOwomIzQzOwl3aGlsZSAoKHRva2VuID0gc3Ryc2VwKCZhbXA7a2J1ZiwgJiMzNDsgXHRcbiYjMzQ7KSkgIT0gTlVMTCkgewomIzQzOwkJaWYgKCp0b2tlbiA9PSAmIzM5O1wwJiMzOTspCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoIXN0cm5jbXAodG9rZW4sICYjMzQ7bW9kZT0mIzM0OywgNSkpIHsKJiM0MzsJCQlyZXQgPSBzeXNmc19tYXRjaF9zdHJpbmcocGFnZV9vd25lcl9wcmludF9tb2RlX3N0cmluZ3MsCiYjNDM7CQkJCQkJdG9rZW4gJiM0MzsgNSk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CQkJbmV3X3ByaW50X21vZGUgPSByZXQ7CiYjNDM7CQl9IGVsc2UgaWYgKCFzdHJuY21wKHRva2VuLCAmIzM0O25pZD0mIzM0OywgNCkpIHsKJiM0MzsJCQlyZXQgPSBub2RlbGlzdF9wYXJzZSh0b2tlbiAmIzQzOyA0LCBuZXdfbmlkX2ZpbHRlcik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CiYjNDM7CQkJaWYgKG5vZGVzX2VtcHR5KG5ld19uaWRfZmlsdGVyKSkgewomIzQzOwkJCQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJCQlnb3RvIG91dF9mcmVlOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFdlIHdhbnQgdG8gZmlsdGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBieSBudW1hIG5vZGVzLCBzbyBtYWtlIHN1cmUKJiM0MzsJCQkgKiB0aGF0IHRoZSBzcGVjaWZpZWQgbm9kZXMgaGF2ZSBtZW1vcnkuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKCFub2Rlc19zdWJzZXQobmV3X25pZF9maWx0ZXIsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSkpIHsKJiM0MzsJCQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJbmV3X25pZF9maWx0ZXJfZW5hYmxlZCA9IHRydWU7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBDb21taXQgYWxsIGZpbHRlciBjaGFuZ2VzICovCiYjNDM7CXN0YXRlLSZndDtwcmludF9tb2RlID0gbmV3X3ByaW50X21vZGU7CiYjNDM7CXN0YXRlLSZndDtuaWRfZmlsdGVyID0gbmV3X25pZF9maWx0ZXI7CiYjNDM7CXN0YXRlLSZndDtuaWRfZmlsdGVyX2VuYWJsZWQgPSBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkOwomIzQzOwomIzQzOwlyZXQgPSBjb3VudDsKJiM0MzsKJiM0MztvdXRfZnJlZToKJiM0MzsJa2ZyZWUob3JpZyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0gewomIzQzOwkub3duZXIJCT0gVEhJU19NT0RVTEUsCiYjNDM7CS5vcGVuCQk9IHBhZ2Vfb3duZXJfb3BlbiwKJiM0MzsJLnJlbGVhc2UJPSBwYWdlX293bmVyX3JlbGVhc2UsCiYjNDM7CS53cml0ZQkJPSBwYWdlX293bmVyX3dyaXRlLAogCS5yZWFkCQk9IHJlYWRfcGFnZV9vd25lciwKIAkubGxzZWVrCQk9IGxzZWVrX3BhZ2Vfb3duZXIsCiB9OwpAQCAtOTgwLDcgJiM0MzsxMTM0LDcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZCkKIAkJcmV0dXJuIDA7CiAJfQogCi0JZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3BhZ2Vfb3duZXImIzM0OywgMDQwMCwgTlVMTCwgTlVMTCwgJmFtcDtwYWdlX293bmVyX2ZvcHMpOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7cGFnZV9vd25lciYjMzQ7LCAwNjAwLCBOVUxMLCBOVUxMLCAmYW1wO3BhZ2Vfb3duZXJfZm9wcyk7CiAJZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCYjMzQ7cGFnZV9vd25lcl9zdGFja3MmIzM0OywgTlVMTCk7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3Nob3dfc3RhY2tzJiMzNDssIDA0MDAsIGRpciwKIAkJCSAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHwKZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGUKaW5kZXggZjU3MjViNWMyM2FhMjYuLjg1ODE4NmE2ZWVmZGJkIDEwMDY0NAotLS0gYS90b29scy9tbS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9NYWtlZmlsZQpAQCAtMyw3ICYjNDM7Myw3IEBACiAjCiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZQogCi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7QlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAogSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzCiAKIExJQl9ESVIgPSAuLi9saWIvYXBpCkBAIC0yMyw3ICYjNDM7MjMsNyBAQCAkKExJQlMpOgogCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkJmx0OyAkKExERkxBR1MpCiAKIGNsZWFuOgotCSQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7CSQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiAJbWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuCiAKIHNiaW5kaXIgPz0gL3Vzci9zYmluCmRpZmYgLS1naXQgYS90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jIGIvdG9vbHMvbW0vcGFnZV9vd25lcl9maWx0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMWQxZjBhMzg2NzhhMmYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jCkBAIC0wLDAgJiM0MzsxLDMxMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBVc2VyLXNwYWNlIGhlbHBlciB0byBmaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQgcGVyLWZkCiYjNDM7ICoKJiM0MzsgKiBFeGFtcGxlIHVzZToKJiM0MzsgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlCiYjNDM7ICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrX2hhbmRsZQomIzQzOyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbiAwLDEsMgomIzQzOyAqCiYjNDM7ICogU2VlIERvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7Y3R5cGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7Z2V0b3B0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgTUFYX0NNRF9MRU4JNTEyCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZykKJiM0Mzt7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O1VzYWdlOiAlcyBbT1BUSU9OU11cbiYjMzQ7LCBwcm9nKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7XG5PcHRpb25zOlxuJiMzNDspOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDsgIC1tLCAtLW1vZGUgTU9ERSAgICAgIDogcHJpbnRfbW9kZSAoc3RhY2ssIGhhbmRsZSwgb3Igc3RhY2tfaGFuZGxlKVxuJiMzNDspOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDsgIC1uLCAtLW5pZCBOSURfTElTVCAgIDogTlVNQSBub2RlIElEcyAoY29tbWEtc2VwYXJhdGVkIG9yIHJhbmdlcylcbiYjMzQ7KTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAtbywgLS1vdXRwdXQgRklMRSAgICA6IG91dHB1dCBmaWxlIChkZWZhdWx0OiBzdGRvdXQpXG4mIzM0Oyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgLWgsIC0taGVscCAgICAgICAgICAgOiBzaG93IHRoaXMgaGVscCBtZXNzYWdlXG4mIzM0Oyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O1xuRXhhbXBsZXM6XG4mIzM0Oyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgJXMgLW0gc3RhY2tcbiYjMzQ7LCBwcm9nKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAlcyAtbSBoYW5kbGVcbiYjMzQ7LCBwcm9nKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAlcyAtbSBzdGFja19oYW5kbGVcbiYjMzQ7LCBwcm9nKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAlcyAtbSBzdGFjayAtbyBvdXRwdXQudHh0XG4mIzM0OywgcHJvZyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0OyAgJXMgLW4gMCwxLDJcbiYjMzQ7LCBwcm9nKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAlcyAtbSBzdGFjayAtbiAwXG4mIzM0OywgcHJvZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdmFsaWRhdGVfbW9kZShjb25zdCBjaGFyICptb2RlKQomIzQzO3sKJiM0MzsJaWYgKHN0cmNtcChtb2RlLCAmIzM0O3N0YWNrJiMzNDspID09IDAgfHwKJiM0MzsJICAgIHN0cmNtcChtb2RlLCAmIzM0O2hhbmRsZSYjMzQ7KSA9PSAwIHx8CiYjNDM7CSAgICBzdHJjbXAobW9kZSwgJiMzNDtzdGFja19oYW5kbGUmIzM0OykgPT0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogSW52YWxpZCBtb2RlICYjMzk7JXMmIzM5O1xuJiMzNDssIG1vZGUpOwomIzQzOwlmcHJpbnRmKHN0ZGVyciwgJiMzNDtWYWxpZCBtb2Rlczogc3RhY2ssIGhhbmRsZSwgc3RhY2tfaGFuZGxlXG4mIzM0Oyk7CiYjNDM7CXJldHVybiAtMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB2YWxpZGF0ZV9uaWRfbGlzdChjb25zdCBjaGFyICpuaWRfbGlzdCkKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKnA7CiYjNDM7CWludCBpID0gMDsKJiM0MzsJaW50IGhhc19kaWdpdCA9IDA7CiYjNDM7CWludCBpbl9yYW5nZSA9IDA7CiYjNDM7CWludCBwcmV2X251bSA9IDA7CiYjNDM7CWludCBjdXJyX251bSA9IDA7CiYjNDM7CiYjNDM7CWlmICghbmlkX2xpc3QgfHwgc3RybGVuKG5pZF9saXN0KSA9PSAwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZvciAocCA9IG5pZF9saXN0OyAqcDsgcCYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICgqcCA9PSAmIzM5OywmIzM5OykgewomIzQzOwkJCWlmICghaGFzX2RpZ2l0KSB7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdFxuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gLTE7CiYjNDM7CQkJfQomIzQzOwkJCWlmIChpbl9yYW5nZSAmYW1wOyZhbXA7IHByZXZfbnVtICZndDsgY3Vycl9udW0pIHsKJiM0MzsJCQkJZnByaW50ZihzdGRlcnIsCiYjNDM7CQkJCQkmIzM0O0Vycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlICZsdDs9IGVuZClcbiYjMzQ7LAomIzQzOwkJCQkJcHJldl9udW0sIGN1cnJfbnVtKTsKJiM0MzsJCQkJcmV0dXJuIC0xOwomIzQzOwkJCX0KJiM0MzsJCQlpID0gMDsKJiM0MzsJCQloYXNfZGlnaXQgPSAwOwomIzQzOwkJCWluX3JhbmdlID0gMDsKJiM0MzsJCQlwcmV2X251bSA9IDA7CiYjNDM7CQkJY3Vycl9udW0gPSAwOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCpwID09ICYjMzk7LSYjMzk7KSB7CiYjNDM7CQkJaWYgKCFoYXNfZGlnaXQpIHsKJiM0MzsJCQkJZnByaW50ZihzdGRlcnIsCiYjNDM7CQkJCQkmIzM0O0Vycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdCAmIzM0Oyk7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLAomIzQzOwkJCQkJJiMzNDsoZGFzaCB3aXRob3V0IHByZWNlZGluZyBudW1iZXIpXG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAtMTsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKGluX3JhbmdlKSB7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOiBNdWx0aXBsZSBkYXNoZXMgaW4gbmlkX2xpc3RcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIC0xOwomIzQzOwkJCX0KJiM0MzsJCQlwcmV2X251bSA9IGN1cnJfbnVtOwomIzQzOwkJCWN1cnJfbnVtID0gMDsKJiM0MzsJCQlpID0gMDsKJiM0MzsJCQloYXNfZGlnaXQgPSAwOwomIzQzOwkJCWluX3JhbmdlID0gMTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhcikqcCkpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogSW52YWxpZCBjaGFyYWN0ZXIgJiMzOTslYyYjMzk7IGluIG5pZF9saXN0XG4mIzM0OywgKnApOwomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChpICZndDsgNSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOiBOSUQgdG9vIGxvbmcgKG1heCA2NTUzNilcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiYjNDM7CQljdXJyX251bSA9IGN1cnJfbnVtICogMTAgJiM0MzsgKCpwIC0gJiMzOTswJiMzOTspOwomIzQzOwkJaSYjNDM7JiM0Mzs7CiYjNDM7CQloYXNfZGlnaXQgPSAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghaGFzX2RpZ2l0KSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaW5fcmFuZ2UgJmFtcDsmYW1wOyBwcmV2X251bSAmZ3Q7IGN1cnJfbnVtKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwKJiM0MzsJCQkmIzM0O0Vycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlICZsdDs9IGVuZClcbiYjMzQ7LAomIzQzOwkJCXByZXZfbnVtLCBjdXJyX251bSk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpvdXRwdXRfZmlsZSA9IE5VTEw7CiYjNDM7CWNoYXIgZmlsdGVyX2NtZFtNQVhfQ01EX0xFTl07CiYjNDM7CUZJTEUgKm91dHB1dCA9IE5VTEw7CiYjNDM7CWludCBmZCA9IC0xOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsJY2hhciBidWZbNDA5Nl07CiYjNDM7CWludCBvcHQ7CiYjNDM7CXNpemVfdCBjbWRfbGVuID0gMDsKJiM0MzsKJiM0MzsJc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOwomIzQzOwomIzQzOwlzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKJiM0MzsJCXsmIzM0O21vZGUmIzM0OywJcmVxdWlyZWRfYXJndW1lbnQsIDAsICYjMzk7bSYjMzk7fSwKJiM0MzsJCXsmIzM0O25pZCYjMzQ7LAkJcmVxdWlyZWRfYXJndW1lbnQsIDAsICYjMzk7biYjMzk7fSwKJiM0MzsJCXsmIzM0O291dHB1dCYjMzQ7LAlyZXF1aXJlZF9hcmd1bWVudCwgMCwgJiMzOTtvJiMzOTt9LAomIzQzOwkJeyYjMzQ7aGVscCYjMzQ7LAlub19hcmd1bWVudCwJICAgMCwgJiMzOTtoJiMzOTt9LAomIzQzOwkJezAsIDAsIDAsIDB9CiYjNDM7CX07CiYjNDM7CiYjNDM7CWZpbHRlcl9jbWRbMF0gPSAmIzM5O1wwJiMzOTs7CiYjNDM7CiYjNDM7CWlmIChhcmdjICZndDsgMSkgewomIzQzOwkJZm9yIChpbnQgaSA9IDE7IGkgJmx0OyBhcmdjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChzdHJjbXAoYXJndltpXSwgJiMzNDstaCYjMzQ7KSA9PSAwIHx8IHN0cmNtcChhcmd2W2ldLCAmIzM0Oy0taGVscCYjMzQ7KSA9PSAwKSB7CiYjNDM7CQkJCXVzYWdlKGFyZ3ZbMF0pOwomIzQzOwkJCQlyZXR1cm4gMDsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ2hlY2sgaWYgcGFnZV9vd25lciBleGlzdHMgYW5kIGlzIHJlYWRhYmxlICovCiYjNDM7CWlmIChhY2Nlc3MoJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyJiMzNDssIEZfT0spICE9IDApIHsKJiM0MzsJCWlmIChlcnJubyA9PSBFTk9FTlQpCiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgZG9lcyBub3QgZXhpc3RcbiYjMzQ7KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwZXJyb3IoJiMzNDtFcnJvciBhY2Nlc3NpbmcgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciYjMzQ7KTsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O01ha2Ugc3VyZSBwYWdlX293bmVyIGlzIGVuYWJsZWQgaW4ga2VybmVsXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwomIzQzOwl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICYjMzQ7bTpuOm86aCYjMzQ7LCBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkgewomIzQzOwkJaW50IGxlbjsKJiM0MzsKJiM0MzsJCXN3aXRjaCAob3B0KSB7CiYjNDM7CQljYXNlICYjMzk7bSYjMzk7OiB7CiYjNDM7CQkJY29uc3QgY2hhciAqbW9kZSA9IG9wdGFyZzsKJiM0MzsKJiM0MzsJCQlpZiAodmFsaWRhdGVfbW9kZShtb2RlKSAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiAxOwomIzQzOwkJCWxlbiA9IHNucHJpbnRmKGZpbHRlcl9jbWQgJiM0MzsgY21kX2xlbiwgTUFYX0NNRF9MRU4gLSBjbWRfbGVuLAomIzQzOwkJCQkgICAgICAgJiMzNDslc21vZGU9JXMmIzM0OywgY21kX2xlbiAmZ3Q7IDAgPyAmIzM0OyAmIzM0OyA6ICYjMzQ7JiMzNDssIG1vZGUpOwomIzQzOwkJCWlmIChsZW4gJmx0OyAwIHx8IGNtZF9sZW4gJiM0MzsgbGVuICZndDs9IE1BWF9DTURfTEVOKSB7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOiBDb21tYW5kIHRvbyBsb25nXG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAxOwomIzQzOwkJCX0KJiM0MzsJCQljbWRfbGVuICYjNDM7PSBsZW47CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQljYXNlICYjMzk7biYjMzk7OiB7CiYjNDM7CQkJY29uc3QgY2hhciAqbmlkX2xpc3QgPSBvcHRhcmc7CiYjNDM7CiYjNDM7CQkJaWYgKHZhbGlkYXRlX25pZF9saXN0KG5pZF9saXN0KSAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiAxOwomIzQzOwkJCWxlbiA9IHNucHJpbnRmKGZpbHRlcl9jbWQgJiM0MzsgY21kX2xlbiwgTUFYX0NNRF9MRU4gLSBjbWRfbGVuLAomIzQzOwkJCQkgICAgICAgJiMzNDslc25pZD0lcyYjMzQ7LCBjbWRfbGVuICZndDsgMCA/ICYjMzQ7ICYjMzQ7IDogJiMzNDsmIzM0OywgbmlkX2xpc3QpOwomIzQzOwkJCWlmIChsZW4gJmx0OyAwIHx8IGNtZF9sZW4gJiM0MzsgbGVuICZndDs9IE1BWF9DTURfTEVOKSB7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0Vycm9yOiBDb21tYW5kIHRvbyBsb25nXG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAxOwomIzQzOwkJCX0KJiM0MzsJCQljbWRfbGVuICYjNDM7PSBsZW47CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQljYXNlICYjMzk7byYjMzk7OgomIzQzOwkJCW91dHB1dF9maWxlID0gb3B0YXJnOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O2gmIzM5OzoKJiM0MzsJCQkvKiBBbHJlYWR5IGhhbmRsZWQgYWJvdmUgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJdXNhZ2UoYXJndlswXSk7CiYjNDM7CQkJcmV0dXJuIDE7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXQgbGVhc3Qgb25lIGZpbHRlciBtdXN0IGJlIHNwZWNpZmllZCAqLwomIzQzOwlpZiAoY21kX2xlbiA9PSAwKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogQXQgbGVhc3Qgb25lIGZpbHRlciAoLW0gb3IgLW4pIG11c3QgYmUgc3BlY2lmaWVkXG5cbiYjMzQ7KTsKJiM0MzsJCXVzYWdlKGFyZ3ZbMF0pOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogT3BlbiBwYWdlX293bmVyIGZvciByZWFkLXdyaXRlIC0gdGhpcyB3aWxsIGZhaWwgaWYga2VybmVsIGRvZXNuJiMzOTt0IHN1cHBvcnQgd3JpdGUgKi8KJiM0MzsJZmQgPSBvcGVuKCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciYjMzQ7LCBPX1JEV1IpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlpZiAoZXJybm8gPT0gRUFDQ0VTIHx8IGVycm5vID09IEVQRVJNKSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7RXJyb3I6IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O2RvZXMgbm90IHN1cHBvcnQgd3JpdGUgYWNjZXNzXG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7VGhpcyBrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCAmIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7cGVyLWZkIGZpbHRlcmluZy5cbiYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtQbGVhc2UgZW5zdXJlIHlvdSBoYXZlIGEga2VybmVsIHdpdGggJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O3Blci1mZCBmaWx0ZXJpbmcgc3VwcG9ydC5cbiYjMzQ7KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcGVycm9yKCYjMzQ7RXJyb3Igb3BlbmluZyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyJiMzNDspOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG91dHB1dF9maWxlKSB7CiYjNDM7CQlvdXRwdXQgPSBmb3BlbihvdXRwdXRfZmlsZSwgJiMzNDt3JiMzNDspOwomIzQzOwkJaWYgKCFvdXRwdXQpIHsKJiM0MzsJCQlwZXJyb3IoJiMzNDtvcGVuIG91dHB1dCBmaWxlJiMzNDspOwomIzQzOwkJCWNsb3NlKGZkKTsKJiM0MzsJCQlyZXR1cm4gMTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCW91dHB1dCA9IHN0ZG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSB3cml0ZShmZCwgZmlsdGVyX2NtZCwgc3RybGVuKGZpbHRlcl9jbWQpKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCWlmIChlcnJubyA9PSBFSU5WQUwpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFcnJvcjogS2VybmVsIHJlamVjdGVkIHRoZSBmaWx0ZXIgY29tbWFuZC5cbiYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtQb3NzaWJsZSBjYXVzZXM6XG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAtIEtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHBlci1mZCBmaWx0ZXJpbmdcbiYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDsgIC0gTlVNQSBub2RlIGhhcyBubyBtZW1vcnlcbiYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDsgIC0gVW5rbm93biByZWFzb25cbiYjMzQ7KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcGVycm9yKCYjMzQ7d3JpdGUgZmlsdGVyIGNvbW1hbmQmIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoKHNpemVfdClyZXQgIT0gc3RybGVuKGZpbHRlcl9jbWQpKQomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7V2FybmluZzogUGFydGlhbCB3cml0ZSAoJXpkLyV6dSlcbiYjMzQ7LCByZXQsIHN0cmxlbihmaWx0ZXJfY21kKSk7CiYjNDM7CiYjNDM7CS8qIFJlYWQgYW5kIGRpc3BsYXkgZmlsdGVyZWQgb3V0cHV0ICovCiYjNDM7CXJldCA9IDA7CiYjNDM7CXdoaWxlICgocmV0ID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkpICZndDsgMCkgewomIzQzOwkJc2l6ZV90IHdyaXR0ZW4gPSBmd3JpdGUoYnVmLCAxLCByZXQsIG91dHB1dCk7CiYjNDM7CiYjNDM7CQlpZiAod3JpdHRlbiAhPSAoc2l6ZV90KXJldCkgewomIzQzOwkJCWlmIChlcnJubyA9PSBFUElQRSkgewomIzQzOwkJCQkvKiBQaXBlIGNsb3NlZCwgdHJlYXQgYXMgc3VjY2VzcyAqLwomIzQzOwkJCQlyZXQgPSAwOwomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsJCQl9CiYjNDM7CQkJcGVycm9yKCYjMzQ7d3JpdGUgb3V0cHV0JiMzNDspOwomIzQzOwkJCXJldCA9IC0xOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlwZXJyb3IoJiMzNDtyZWFkIHBhZ2Vfb3duZXImIzM0Oyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZmZsdXNoKG91dHB1dCkpIHsKJiM0MzsJCWlmIChlcnJubyA9PSBFUElQRSkgewomIzQzOwkJCS8qIFBpcGUgY2xvc2VkLCB0cmVhdCBhcyBzdWNjZXNzICovCiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcGVycm9yKCYjMzQ7Zmx1c2ggb3V0cHV0JiMzNDspOwomIzQzOwkJCXJldCA9IC0xOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljbG9zZShmZCk7CiYjNDM7CWlmIChvdXRwdXQgIT0gc3Rkb3V0KQomIzQzOwkJZmNsb3NlKG91dHB1dCk7CiYjNDM7CXJldHVybiByZXQgJmx0OyAwID8gMSA6IDA7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTYxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhZ2UgT3duZXIgRmlsdGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9wYWdlX293bmVyLmNgIGFuZCB0aHJvd3MgaW4gYSBuZXcgdG9vbCwgYHRvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwb3RlbnRpYWxseSB1c2VmdWwgYWRkaXRpb24uIEl0JiMzOTtzIGdpdmluZyB1cyBzb21lIGZpbHRlcmluZyBvcHRpb25zIGZvciBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAsIHdoaWNoIGNvdWxkIGJlIGh1Z2UgZm9yIGlzb2xhdGluZyBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMuIEJlaW5nIGFibGUgdG8gZmlsdGVyIHRoZSBvdXRwdXQgb2YgdGhhdCBpcyBhIGdhbWUgY2hhbmdlciBmb3IgZGVidWdnaW5nLgoKVGhlIHBhdGNoIGltcGxlbWVudHMgZmlsdGVyaW5nIGJ5IHBhcnNpbmcgY29tbWFuZHMgd3JpdHRlbiB0byB0aGUgZmlsZSBkZXNjcmlwdG9yOyBzcGVjaWZpY2FsbHkgaXQmIzM5O3MgbG9va2luZyBmb3IgJiMzNDttb2RlPSYjMzQ7IGFuZCAmIzM0O25pZD0mIzM0Oy4gVGhhdCYjMzk7cyBhbGwgaGFuZGxlZCBieSBgcGFnZV9vd25lcl93cml0ZWAuIEEgYHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZWAgaXMgYWxsb2NhdGVkIGFuZCBzdG9yZWQgcGVyLWZpbGUgb3BlbiwgbWVhbmluZyBlYWNoIHNlc3Npb24gZ2V0cyBpdHMgb3duIGZpbHRlciwgd2hpY2ggaXMgc21hcnQuIFRoZW4sIHRoZSBhY3R1YWwgYHJlYWRfcGFnZV9vd25lcmAgZnVuY3Rpb24gdXNlcyB0aGlzIHN0YXRlIHRvIGRvIHRoZSBhY3R1YWwgZmlsdGVyaW5nLgoKTm93LCBteSBrZXkgcXVlc3Rpb25zOiBJcyB0aGlzIGNvZGUgYWN0dWFsbHkgKnJlYWNoYWJsZSo/IFllcCwgZGVidWdmcywgc28gYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgLiBUaGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIHJpZ2h0IHdoZXJlIHdlJiMzOTtkIGV4cGVjdCBpdC4gRG9lcyBpdCAqZnVuY3Rpb24qIGFzIGNsYWltZWQ/IFllcywgdGhlIGNvcmUgbG9naWMgaXMgdGhlcmUuIFRoZSBgcGFnZV9vd25lcl93cml0ZWAgZnVuY3Rpb24gcGFyc2VzIG91ciBpbnB1dCBhbmQgdGhlIG5ldyBzdGF0ZSBpcyB1c2VkIHRvIGZpbHRlciByZWFkcy4KCkFuZCB0aGUgbmV4dCB0aGluZyBJJiMzOTttIHRoaW5raW5nIGlzLCAqdGhpcyBuZWVkcyBmdXp6aW5nKi4gQW55IHRpbWUgeW91JiMzOTtyZSBwYXJzaW5nIHVzZXIgaW5wdXQsIHlvdSYjMzk7cmUgb3BlbmluZyB0aGUgZG9vciB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBgcGFnZV9vd25lcl93cml0ZWAgaXMgdGhlIG9idmlvdXMgdGFyZ2V0LgoKQWxyaWdodCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgYG1tL3BhZ2Vfb3duZXIuY2AsIGlzIGNvbmRpdGlvbmFsIG9uIGBDT05GSUdfUEFHRV9PV05FUmAuIExldCBtZSB2ZXJpZnkgdGhhdCYjMzk7cyB0aGUgY2FzZS4gTWFrZSBzdXJlIHRoYXQmIzM5O3MgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQUdFX09XTkVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTE5PW9iai0kKENPTkZJR19ERUJVR19WTV9QR1RBQkxFKSAmIzQzOz0gZGVidWdfdm1fcGd0YWJsZS5vXG5tbS9NYWtlZmlsZToxMjA6b2JqLSQoQ09ORklHX1BBR0VfT1dORVIpICYjNDM7PSBwYWdlX293bmVyLm9cbm1tL01ha2VmaWxlLTEyMS1vYmotJChDT05GSUdfTUVNT1JZX0lTT0xBVElPTikgJiM0Mzs9IHBhZ2VfaXNvbGF0aW9uLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzA4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVwZW5kZW5jaWVzIGFuZCBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYENPTkZJR19QQUdFX09XTkVSYCBpcyBkZWZpbml0ZWx5IGEgbWFuZGF0b3J5IHJlcXVpcmVtZW50IGhlcmUuIEdvdCBpdC4gQW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB3ZSBhbHNvIG5lZWQgYENPTkZJR19ERUJVR19GU2AgZW5hYmxlZCwgc2luY2UgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgZXhwb3NlZCB0aHJvdWdoIHRoZSBkZWJ1ZyBmaWxlc3lzdGVtLiBCZXN0IHByYWN0aWNlIGlzIHRvIGVuc3VyZSBib3RoIGFyZSBhdmFpbGFibGUsIGJlZm9yZSB3ZSBnZXQgYW55IGZ1cnRoZXIuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGBDT05GSUdfUEFHRV9PV05FUmAgaGFzIGFueSBvdGhlciBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiB0byBtYWtlIGNlcnRhaW4uIEJldHRlciBzYWZlIHRoYW4gc29ycnkgd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX09XTkVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnPTczPWNvbmZpZyBTTFVCX1JDVV9ERUJVR1xuLS1cbm1tL0tjb25maWcuZGVidWctMTA0LVxubW0vS2NvbmZpZy5kZWJ1ZzoxMDU6Y29uZmlnIFBBR0VfT1dORVJcbm1tL0tjb25maWcuZGVidWctMTA2LVx0Ym9vbCBcJiMzNDtUcmFjayBwYWdlIG93bmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIERlYnVnIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgd2hlcmUmIzM5O3MgdGhlIGJlc3QgcGxhY2UgdG8gZGlnIGludG8gdGhlc2UgZGVidWcgb3B0aW9ucz8gTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBtbS9LY29uZmlnLmRlYnVnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTA1LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2UgZ3JhbnVsYXIgZGVidWcgZmVhdHVyZXMgYXJlIGRlZmluZWQsIHJpZ2h0PyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRldGVybWluZSBob3cgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1Z2dpbmcgaXMgaGFuZGxlZCwgZXNwZWNpYWxseSBzaW5jZSB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGluZ3MgdGhhdCBhcmUgdHlwaWNhbGx5IGVuYWJsZWQgZHVyaW5nIGRldmVsb3BtZW50IG9yIGZvciB2ZXJ5IHNwZWNpZmljIHRyb3VibGVzaG9vdGluZy4gSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgb2ZmZXIgYSBjbGVhciBvdmVydmlldyBvZiB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGRlc2NyaXB0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGVidWcgZmVhdHVyZXMgaW4gdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0ICBUaGlzIGlzIGRlc2lnbmVkIGFzIGEgZGVidWdnaW5nIGZlYXR1cmUsIG5vdCBhIHNlY3VyaXR5IGZlYXR1cmUuXG4gMTAxOlx0XHQgIE9iamVjdHMgYXJlIHNvbWV0aW1lcyByZWN5Y2xlZCB3aXRob3V0IFJDVSBkZWxheSB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4gMTAyOlx0XG4gMTAzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTA0Olx0XG4gMTA1Olx0Y29uZmlnIFBBR0VfT1dORVJcbiAxMDY6XHRcdGJvb2wgXCYjMzQ7VHJhY2sgcGFnZSBvd25lclwmIzM0O1xuIDEwNzpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IFNUQUNLVFJBQ0VfU1VQUE9SVFxuIDEwODpcdFx0c2VsZWN0IERFQlVHX0ZTXG4gMTA5Olx0XHRzZWxlY3QgU1RBQ0tUUkFDRVxuIDExMDpcdFx0c2VsZWN0IFNUQUNLREVQT1RcbiAxMTE6XHRcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxuIDExMjpcdFx0aGVscFxuIDExMzpcdFx0ICBUaGlzIGtlZXBzIHRyYWNrIG9mIHdoYXQgY2FsbCBjaGFpbiBpcyB0aGUgb3duZXIgb2YgYSBwYWdlLCBtYXlcbiAxMTQ6XHRcdCAgaGVscCB0byBmaW5kIGJhcmUgYWxsb2NfcGFnZShzKSBsZWFrcy4gRXZlbiBpZiB5b3UgaW5jbHVkZSB0aGlzXG4gMTE1Olx0XHQgIGZlYXR1cmUgb24geW91ciBidWlsZCwgaXQgaXMgZGlzYWJsZWQgaW4gZGVmYXVsdC4gWW91IHNob3VsZCBwYXNzXG4gMTE2Olx0XHQgIFwmIzM0O3BhZ2Vfb3duZXI9b25cJiMzNDsgdG8gYm9vdCBwYXJhbWV0ZXIgaW4gb3JkZXIgdG8gZW5hYmxlIGl0LiBFYXRzXG4gMTE3Olx0XHQgIGEgZmFpciBhbW91bnQgb2YgbWVtb3J5IGlmIGVuYWJsZWQuIFNlZSB0b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xuIDExODpcdFx0ICBmb3IgdXNlci1zcGFjZSBoZWxwZXIuXG4gMTE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiBgcGFnZV9vd25lcj1vbmAgZm9yIFN5emthbGxlcioqCgpPa2F5LCBzbyB0aGUgbWVzc2FnZSBzYXlzLCAmIzM0O1lvdSBzaG91bGQgcGFzcyBgcGFnZV9vd25lcj1vbmAgdG8gYSBib290IHBhcmFtZXRlciB0byBlbmFibGUgaXQuJiMzNDsgUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEhhbmcgb24sIHRob3VnaCwgU3l6a2FsbGVyICpjYW4qIHBhc3MgYm9vdCBwYXJhbWV0ZXJzLCBidXQgaXQmIzM5O3Mgbm90IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlzIGl0PyBDb3VsZCBJIGVuYWJsZSBpdCB0aHJvdWdoIHN5c2ZzIG9yIGRlYnVnZnM/IE5vLCB0aGF0JiMzOTtzIG5vdCBob3cgaXQgd29ya3M7IGl0JiMzOTtzIGEgYm9vdC10aW1lIHRoaW5nLiBOb3cgSSByZWNhbGwgdGhhdCBtYXliZSwganVzdCBtYXliZSwgU3l6a2FsbGVyIGFscmVhZHkgaGFzIGBwYWdlX293bmVyPW9uYCBzZXQgYXMgYSBkZWZhdWx0IGJvb3QgcGFyYW1ldGVyIGZvciBzb21lIG9mIGl0cyBjb25maWd1cmF0aW9ucy4uLiBvciBwZXJoYXBzIG5vdC4gRWl0aGVyIHdheSwgd2UgY2FuIGRlZmluaXRlbHkgc3BlY2lmeSBgUEFHRV9PV05FUmAgZGlyZWN0bHkgaW4gdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIGNhbiYjMzk7dCB3ZT8KCkFscmlnaHQsIHRoZSBwYXRjaCBhZGRzIGZ1bmN0aW9uczogYHBhZ2Vfb3duZXJfd3JpdGVgLCBgcGFnZV9vd25lcl9vcGVuYCwgYHBhZ2Vfb3duZXJfcmVsZWFzZWAsIGFuZCBgcHJpbnRfcGFnZV9vd25lcmAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJIHNob3VsZCBiZSBwYXlpbmcgYXR0ZW50aW9uIHRvLiBMZXQgbWUgbm90ZSB0aG9zZSBkb3duOiBgcGFnZV9vd25lcl93cml0ZWAsIGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYHByaW50X3BhZ2Vfb3duZXJgLCBhbmQgb2YgY291cnNlIHRoZSBgcmVhZF9wYWdlX293bmVyYCBmdW5jdGlvbiBhcyB3ZWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZWdyYXRlLgoKT2theSwgbGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgcGFnZV9vd25lcl93cml0ZWAgaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHByb2JhYmx5IGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2Vfb3duZXJfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX293bmVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jPTkxMz1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5tbS9wYWdlX293bmVyLmMtOTE4LVxubW0vcGFnZV9vd25lci5jOjkxOTpzdGF0aWMgc3NpemVfdCBwYWdlX293bmVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxubW0vcGFnZV9vd25lci5jLTkyMC1cdFx0XHRcdCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYz0xMDAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfZm9wcyA9IHtcbi0tXG5tbS9wYWdlX293bmVyLmMtMTAwMy1cdC5yZWxlYXNlXHQ9IHBhZ2Vfb3duZXJfcmVsZWFzZSxcbm1tL3BhZ2Vfb3duZXIuYzoxMDA0Olx0LndyaXRlXHRcdD0gcGFnZV9vd25lcl93cml0ZSxcbm1tL3BhZ2Vfb3duZXIuYy0xMDA1LVx0LnJlYWRcdFx0PSByZWFkX3BhZ2Vfb3duZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzM1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnM6CgoqKkRpZ2dpbmcgaW50byBgcGFnZV9vd25lcl9vcGVuYCBhbmQgYHBhZ2Vfb3duZXJfcmVsZWFzZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYHBhZ2Vfb3duZXJfb3BlbmAgYW5kIGBwYWdlX293bmVyX3JlbGVhc2VgIGFyZSBpbnRlcmFjdGluZy4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCBbVXNlciYjMzk7cyBmaWVsZF0sIEkga25vdyB0aGVzZSBhcmUgbGlrZWx5IGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgcmVzb3VyY2Ugb3duZXJzaGlwIGFuZCBsaWZlY3ljbGUsIHNwZWNpZmljYWxseSBhdCB0aGUgcGFnZSBsZXZlbC4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBhc3BlY3RzIG9mIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXkgbG9ja2luZyBtZWNoYW5pc21zLCByZWZlcmVuY2UgY291bnRlcnMsIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB0aGV5IG1hbmlwdWxhdGluZz8gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeSwgcmVzb3VyY2UgY29udGVudGlvbiwgYW5kLCBvZiBjb3Vyc2UsIHBvdGVudGlhbCBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIHN5c3RlbS4gVGhlIGRldGFpbHMgb2YgaW1wbGVtZW50YXRpb24gbXVzdCBxdWlja2x5IGJlY29tZSBjbGVhciBpbiBteSBtaW5kLiBBcmUgdGhleSB1c2luZyBhdG9taWMgb3BlcmF0aW9ucyBvciByZWx5IG9uIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX293bmVyX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX293bmVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jPTg5MD1zdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxuLS1cbm1tL3BhZ2Vfb3duZXIuYy04OTctXG5tbS9wYWdlX293bmVyLmM6ODk4OnN0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxubW0vcGFnZV9vd25lci5jLTg5OS17XG4tLVxubW0vcGFnZV9vd25lci5jPTEwMDA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0ge1xubW0vcGFnZV9vd25lci5jLTEwMDEtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbm1tL3BhZ2Vfb3duZXIuYzoxMDAyOlx0Lm9wZW5cdFx0PSBwYWdlX293bmVyX29wZW4sXG5tbS9wYWdlX293bmVyLmMtMTAwMy1cdC5yZWxlYXNlXHQ9IHBhZ2Vfb3duZXJfcmVsZWFzZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NTgKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogNDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBPd25lciBGaWx0ZXJpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgZmlsdGVyaW5nIHRvIHRoZSBgcGFnZV9vd25lcmAgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vcGFnZV9vd25lci5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCB0aGlzIGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IGJlY2F1c2UgaXQgaW50cm9kdWNlcyB1c2VyLWZhY2luZyBjaGFuZ2VzLiBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4KCkZpcnN0LCBpdCBhZGRzIGEgbmV3IGZ1bmN0aW9uLCBgcGFnZV9vd25lcl93cml0ZWAsIHdoaWNoIHBhcnNlcyB1c2VyIGlucHV0LiBUaGlzIGlzICpjcnVjaWFsKiBiZWNhdXNlIGFueXRoaW5nIHRoYXQgdGFrZXMgaW5wdXQgZnJvbSBhIHVzZXIsIGVzcGVjaWFsbHkgZm9yIGtlcm5lbCBmZWF0dXJlcywgc2NyZWFtcyAmIzM0O3BvdGVudGlhbCBmdXp6aW5nIHRhcmdldCYjMzQ7LiBUaGUgYHJlYWRfcGFnZV9vd25lcmAgZnVuY3Rpb24gdXRpbGl6ZXMgdGhlIGZpbHRlciBzdGF0ZSwgYW5kIGBwcmludF9wYWdlX293bmVyYCBmb3JtYXRzIG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGZpbHRlcnMuIFRoZXNlIGFyZSBhbGwgcGFydCBvZiB0aGUgc2FtZSBmaWx0cmF0aW9uIGNoYWluLgoKVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgcGFnZV9vd25lcl93cml0ZWAsIGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYHByaW50X3BhZ2Vfb3duZXJgLCBhbmQgYHJlYWRfcGFnZV9vd25lcmAuCgpMb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9ucywgYFBBR0VfT1dORVJgIHNlZW1zIHRvIGJlIHRoZSBjb250cm9sbGluZyBmbGFnLCB3aGljaCBhbHNvIHNlbGVjdHMgYERFQlVHX0ZTYCBhbmQgYFBBR0VfRVhURU5TSU9OYC4gVGhlc2UgYXJlIGltcG9ydGFudCB0byBub3RlLCBhcyB0aGUgY29uZmlndXJhdGlvbnMgY2FuIGhhdmUgYW4gaW1wYWN0LgoKTm93LCBJJiMzOTttIHNwb3R0aW5nIGEgY2hhbmdlIGluIHRoZSBkZWJ1Z2ZzIGZpbGUgcGVybWlzc2lvbnM6IGl0JiMzOTtzIGdvaW5nIGZyb20gcmVhZC1vbmx5IHRvIHJlYWQvd3JpdGUhICBUaGUgcGF0Y2ggY2hhbmdlcyBgZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3BhZ2Vfb3duZXImIzM0OywgMDQwMCwgTlVMTCwgTlVMTCwgJmFtcDtwYWdlX293bmVyX2ZvcHMpYCB0byBgZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3BhZ2Vfb3duZXImIzM0OywgMDYwMCwgTlVMTCwgTlVMTCwgJmFtcDtwYWdlX293bmVyX2ZvcHMpYC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IGV4cGxpY2l0bHkgZW5hYmxlcyB3cml0aW5nIHRvIHRoZSBmaWxlLCB3aGljaCByZWluZm9yY2VzIHRoZSBuZWVkIHRvIGZ1enogdGhlIHdyaXRlIGhhbmRsZXIuCgpTbywgdGhlIGNvcmUgbG9naWMgaGVyZTogdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2UgaXMgdG8gYWxsb3cgZmlsdGVyaW5nIG9mIHBhZ2Ugb3duZXIgaW5mb3JtYXRpb24gdGhyb3VnaCBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAuIFRoZSBhZGRpdGlvbiBvZiBgcGFnZV9vd25lcl93cml0ZWAgZm9yIHVzZXIgaW5wdXQsIHBsdXMgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYHJlYWRfcGFnZV9vd25lcmAgYW5kIGBwcmludF9wYWdlX293bmVyYCB0byBoYW5kbGUgZmlsdGVyaW5nIGxvZ2ljLCBtYWtlIGl0IGEgZGVmaW5pdGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBVc2VyIGlucHV0IHBhcnNpbmcgaXMgdGhlIHdlYWsgcG9pbnQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2suLi4gYHBhZ2Vfb3duZXJfd3JpdGVgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gIFN5emthbGxlciBjYW4gZnV6eiB0aG9zZSBhcyBsb25nIGFzIHRoZXkmIzM5O3JlIGluIHRoZSBmb2N1cyBsaXN0LiBBbmQgbG9va2luZyBiYWNrLCBgcmVhZF9wYWdlX293bmVyYCBhbmQgYHByaW50X3BhZ2Vfb3duZXJgIHdlcmUgYWxyZWFkeSB0aGVyZSwgYnV0IHRoZXkgd2VyZSBtb2RpZmllZCwgbWVhbmluZyB0aGV5JiMzOTtyZSBhbHNvIGludGVyZXN0aW5nLgoKVG8gc3VtbWFyaXplLCBhbGwgdGhlIGZ1bmN0aW9ucyBhcmUgbGlzdGVkOgpgcGFnZV9vd25lcl9vcGVuYApgcGFnZV9vd25lcl9yZWxlYXNlYApgcGFnZV9vd25lcl93cml0ZWAKYHByaW50X3BhZ2Vfb3duZXJgCmByZWFkX3BhZ2Vfb3duZXJgCgpJIHRoaW5rIEkmIzM5O3ZlIGdvdCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYXRjaCYjMzk7cyBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcsIGFuZCBJJiMzOTttIHJlYWR5IHRvIHNldCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlX293bmVyX3dyaXRlJiMzNDssCiAgICAmIzM0O3BhZ2Vfb3duZXJfb3BlbiYjMzQ7LAogICAgJiMzNDtwYWdlX293bmVyX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7cHJpbnRfcGFnZV9vd25lciYjMzQ7LAogICAgJiMzNDtyZWFkX3BhZ2Vfb3duZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB3cml0ZSBoYW5kbGVyIChgcGFnZV9vd25lcl93cml0ZWApIGZvciB0aGUgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIGRlYnVnZnMgZmlsZSB0byBzdXBwb3J0IGZpbHRlcmluZy4gSXQgYWxzbyBtb2RpZmllcyB0aGUgcmVhZCBoYW5kbGVyIChgcmVhZF9wYWdlX293bmVyYCkgYW5kIG91dHB1dCBmb3JtYXR0aW5nIChgcHJpbnRfcGFnZV9vd25lcmApIHRvIGFwcGx5IHRoZSBmaWx0ZXJzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgcGFyc2luZyB1c2VyIGlucHV0IGFuZCBtYW5hZ2luZyBwZXItZmQgc3RhdGUsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX09XTkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZV9vd25lcl93cml0ZSYjMzQ7LAogICAgJiMzNDtwYWdlX293bmVyX29wZW4mIzM0OywKICAgICYjMzQ7cGFnZV9vd25lcl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3ByaW50X3BhZ2Vfb3duZXImIzM0OywKICAgICYjMzQ7cmVhZF9wYWdlX293bmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd3JpdGUgaGFuZGxlciAoYHBhZ2Vfb3duZXJfd3JpdGVgKSBmb3IgdGhlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCBkZWJ1Z2ZzIGZpbGUgdG8gc3VwcG9ydCBmaWx0ZXJpbmcuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHJlYWQgaGFuZGxlciAoYHJlYWRfcGFnZV9vd25lcmApIGFuZCBvdXRwdXQgZm9ybWF0dGluZyAoYHByaW50X3BhZ2Vfb3duZXJgKSB0byBhcHBseSB0aGUgZmlsdGVycy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBhcnNpbmcgdXNlciBpbnB1dCBhbmQgbWFuYWdpbmcgcGVyLWZkIHN0YXRlLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjIwOjA0LjQwNDMzODM4OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzOTIwNTA4Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfT1dORVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlX293bmVyX3dyaXRlXCIsXG4gICAgXCJwYWdlX293bmVyX29wZW5cIixcbiAgICBcInBhZ2Vfb3duZXJfcmVsZWFzZVwiLFxuICAgIFwicHJpbnRfcGFnZV9vd25lclwiLFxuICAgIFwicmVhZF9wYWdlX293bmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB3cml0ZSBoYW5kbGVyIChgcGFnZV9vd25lcl93cml0ZWApIGZvciB0aGUgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIGRlYnVnZnMgZmlsZSB0byBzdXBwb3J0IGZpbHRlcmluZy4gSXQgYWxzbyBtb2RpZmllcyB0aGUgcmVhZCBoYW5kbGVyIChgcmVhZF9wYWdlX293bmVyYCkgYW5kIG91dHB1dCBmb3JtYXR0aW5nIChgcHJpbnRfcGFnZV9vd25lcmApIHRvIGFwcGx5IHRoZSBmaWx0ZXJzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgcGFyc2luZyB1c2VyIGlucHV0IGFuZCBtYW5hZ2luZyBwZXItZmQgc3RhdGUsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDoyMDowNC40MDQzNDU5MTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNDc4NzQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZjODJmZGZiYWE3ZTYxZDA3MDIzZDJlNzJhODdjNGE2MTM5NmE5ZTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgNyAyMDoyMDowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxcbmluZGV4IDZiMTJmM2IwMDdlYzkxLi4zODNlNTljNDI3NDNiZCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxcbkBAIC02NSw3ICs2NSwxNCBAQCB1bi10cmFja2luZyBzdGF0ZS5cXG4gVXNhZ2VcXG4gPT09PT1cXG4gXFxuLTEpIEJ1aWxkIHVzZXItc3BhY2UgaGVscGVyOjpcXG4rMSkgQnVpbGQgdXNlci1zcGFjZSBoZWxwZXJzOjpcXG4rXFxuK1RvIGZpbHRlciBwYWdlX293bmVyIG91dHB1dDpcXG4rXFxuK1xcdGNkIHRvb2xzL21tXFxuK1xcdG1ha2UgcGFnZV9vd25lcl9maWx0ZXJcXG4rXFxuK1RvIHNvcnQgYW5kIGFuYWx5emUgcGFnZV9vd25lciBvdXRwdXQ6XFxuIFxcbiBcXHRjZCB0b29scy9tbVxcbiBcXHRtYWtlIHBhZ2Vfb3duZXJfc29ydFxcbkBAIC03NCw3ICs4MSwxMSBAQCBVc2FnZVxcbiBcXG4gMykgRG8gdGhlIGpvYiB0aGF0IHlvdSB3YW50IHRvIGRlYnVnLlxcbiBcXG4tNCkgQW5hbHl6ZSBpbmZvcm1hdGlvbiBmcm9tIHBhZ2Ugb3duZXI6Olxcbis0KSAoT3B0aW9uYWwpIEZpbHRlciBwYWdlX293bmVyIG91dHB1dDo6XFxuK1xcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbiAwLDEsMiBcXHUwMDNlIGZpbHRlcmVkX3BhZ2Vfb3duZXIudHh0XFxuK1xcbis1KSBBbmFseXplIGluZm9ybWF0aW9uIGZyb20gcGFnZSBvd25lcjo6XFxuIFxcbiBcXHRjYXQgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcl9zdGFja3Mvc2hvd19zdGFja3MgXFx1MDAzZSBzdGFja3MudHh0XFxuIFxcdGNhdCBzdGFja3MudHh0XFxuQEAgLTI2MywzICsyNzQsNjUgQEAgU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlNcXG4gXFx0ZlxcdFxcdGZyZWVcXHRcXHR3aGV0aGVyIHRoZSBwYWdlIGhhcyBiZWVuIHJlbGVhc2VkIG9yIG5vdFxcbiBcXHRzdFxcdFxcdHN0YWNrdHJhY2VcXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXFxuIFxcdGF0b3JcXHRcXHRhbGxvY2F0b3JcXHRtZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlc1xcbitcXG4rRmlsdGVyaW5nIHBhZ2Vfb3duZXIgb3V0cHV0XFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK3BhZ2Vfb3duZXIgc3VwcG9ydHMgZmlsdGVyaW5nIG91dHB1dCBhdCB0aGUga2VybmVsIGxldmVsIGJlZm9yZSByZWFkaW5nLFxcbit3aGljaCByZWR1Y2VzIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBpbiB1c2Vyc3BhY2UuXFxuK1xcbitUaGUgcGFnZV9vd25lcl9maWx0ZXIgdG9vbCBwcm92aWRlcyBhIGNvbnZlbmllbnQgaW50ZXJmYWNlIGZvciB0aGlzIGZpbHRlcmluZ1xcbitjYXBhYmlsaXR5LiBJdCBzdXBwb3J0cyB0d28gdHlwZXMgb2YgZmlsdGVyczpcXG4rXFxuKzEuICoqcHJpbnRfbW9kZSBmaWx0ZXIqKjogQ29udHJvbCB3aGF0IGluZm9ybWF0aW9uIGlzIHByaW50ZWQgZm9yIGVhY2ggcGFnZVxcbitcXHQtIGBgc3RhY2tgYDogUHJpbnQgZnVsbCBzdGFjayB0cmFjZXMgKGRlZmF1bHQsIGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyB1c2FnZSlcXG4rXFx0LSBgYGhhbmRsZWBgOiBQcmludCBvbmx5IHN0YWNrIGhhbmRsZSBudW1iZXJzIChtdWNoIGZhc3Rlciwgc21hbGxlciBvdXRwdXQpXFxuK1xcdC0gYGBzdGFja19oYW5kbGVgYDogUHJpbnQgYm90aCBzdGFjayB0cmFjZXMgYW5kIGhhbmRsZSBudW1iZXJzXFxuK1xcbitcXHRUaGUgYGBoYW5kbGVgYCBtb2RlIHVzZXMgbnVtZXJpYyBpZGVudGlmaWVycyBpbnN0ZWFkIG9mIGZ1bGwgc3RhY2sgdHJhY2VzLlxcbitcXHRUaGUgbWFwcGluZyBmcm9tIGhhbmRsZXMgdG8gYWN0dWFsIHN0YWNrIHRyYWNlcyBjYW4gYmUgb2J0YWluZWQgdmlhIHRoZVxcbitcXHRzaG93X3N0YWNrc19oYW5kbGVzIGludGVyZmFjZS5cXG4rXFxuKzIuICoqTlVNQSBub2RlIGZpbHRlcioqOiBGaWx0ZXIgcGFnZXMgYnkgTlVNQSBub2RlIElEXFxuK1xcdC0gU3VwcG9ydHMgc2luZ2xlIG5vZGU6IGBgLW4gMGBgXFxuK1xcdC0gTXVsdGlwbGUgbm9kZXM6IGBgLW4gMCwxLDJgYFxcbitcXHQtIFJhbmdlczogYGAtbiAwLTNgYFxcbitcXHQtIE1peGVkIGZvcm1hdDogYGAtbiAwLDItMyw1YGBcXG4rXFxuK1VzYWdlIGV4YW1wbGVzOjpcXG4rXFxuK1xcdCMgRmlsdGVyIGJ5IHByaW50IG1vZGVcXG4rXFx0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBoYW5kbGVcXG4rXFx0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGVcXG4rXFxuK1xcdCMgRmlsdGVyIGJ5IE5VTUEgbm9kZVxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDBcXG4rXFx0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwLTNcXG4rXFxuK1xcdCMgQ29tYmluZWQgZmlsdGVyc1xcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrIC1uIDAsMSwyXFxuK1xcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1uIDAsMi0zXFxuK1xcbitcXHQjIFNhdmUgdG8gZmlsZVxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbyBmaWx0ZXJlZF9vdXRwdXQudHh0XFxuK1xcbitUaGUgaGFuZGxlIG1vZGUgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgbW9uaXRvcmluZyBhbmQgcGVyZm9ybWFuY2UtY3JpdGljYWxcXG4rc2NlbmFyaW9zIGFzIGl0IGRyYW1hdGljYWxseSByZWR1Y2VzIG91dHB1dCBzaXplLiBUZXN0aW5nIHNob3dzIGhhbmRsZSBtb2RlIGNhblxcbityZWR1Y2Ugb3V0cHV0IHNpemUgYnkgfjY2JSAoODRNQiB2cyAyNDRNQikgYW5kIGltcHJvdmUgcmVhZCBwZXJmb3JtYW5jZSBieSB+NC40eFxcbitjb21wYXJlZCB0byBmdWxsIHN0YWNrIG91dHB1dC5cXG4rXFxuK1RoZSBOVU1BIG5vZGUgZmlsdGVyIGlzIHVzZWZ1bCBmb3IgTlVNQS1hd2FyZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmFseXNpcyBhbmQgZGVidWdnaW5nLlxcbitcXG4rQmVoaW5kIHRoZSBzY2VuZXMsIHBhZ2Vfb3duZXJfZmlsdGVyIG9wZW5zIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgYW5kXFxuK3dyaXRlcyBmaWx0ZXIgY29tbWFuZHMgYmVmb3JlIHJlYWRpbmcgdGhlIGZpbHRlcmVkIG91dHB1dC4gVGhlIGZpbHRlcmluZyB1c2VzXFxuK3Blci1maWxlLWRlc2NyaXB0b3Igc3RhdGUsIGFsbG93aW5nIGVhY2ggb3BlbigpIHRvIGhhdmUgaW5kZXBlbmRlbnQgZmlsdGVyIHNldHRpbmdzLlxcbitcXG4rRWFjaCBmaWxlIGRlc2NyaXB0b3IgbWFpbnRhaW5zIGl0cyBvd24gZmlsdGVyIHN0YXRlLCBzbyB5b3UgY2FuIGhhdmUgbXVsdGlwbGVcXG4raW5kZXBlbmRlbnQgZmlsdGVyaW5nIG9wZXJhdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuIEZvciBleGFtcGxlLCBpbiBkaWZmZXJlbnRcXG4rdGVybWluYWxzIHlvdSBjYW4gcnVuIGRpZmZlcmVudCBmaWx0ZXJzIHNpbXVsdGFuZW91c2x5OjpcXG4rXFxuK1xcdCMgVGVybWluYWwgMTogRmlsdGVyIG5vZGUgMFxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAgXFx1MDAzZSBub2RlMF9vdXRwdXQudHh0XFxuK1xcbitcXHQjIFRlcm1pbmFsIDI6IEZpbHRlciBub2RlIDEgKHJ1bnMgY29uY3VycmVudGx5KVxcbitcXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDEgXFx1MDAzZSBub2RlMV9vdXRwdXQudHh0XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuY1xcbmluZGV4IDgxNzhlMGJlNTU3Zjg3Li5mMWQ0YzIwNWFmZjk3OSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX293bmVyLmNcXG4rKysgYi9tbS9wYWdlX293bmVyLmNcXG5AQCAtNTQsNiArNTQsMjQgQEAgc3RydWN0IHN0YWNrX3ByaW50X2N0eCB7XFxuIFxcdHU4IGZsYWdzO1xcbiB9O1xcbiBcXG4rZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUge1xcbitcXHRQQUdFX09XTkVSX1BSSU5UX1NUQUNLLFxcbitcXHRQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSxcXG4rXFx0UEFHRV9PV05FUl9QUklOVF9TVEFDS19IQU5ETEUsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBhZ2Vfb3duZXJfcHJpbnRfbW9kZV9zdHJpbmdzW10gPSB7XFxuK1xcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLXVxcdD0gXFxcInN0YWNrXFxcIixcXG4rXFx0W1BBR0VfT1dORVJfUFJJTlRfSEFORExFXVxcdD0gXFxcImhhbmRsZVxcXCIsXFxuK1xcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRV1cXHQ9IFxcXCJzdGFja19oYW5kbGVcXFwiLFxcbit9O1xcbitcXG4rc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlIHtcXG4rXFx0ZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTtcXG4rXFx0bm9kZW1hc2tfdCBuaWRfZmlsdGVyO1xcbitcXHRib29sIG5pZF9maWx0ZXJfZW5hYmxlZDtcXG4rfTtcXG4rXFxuIHN0YXRpYyBib29sIHBhZ2Vfb3duZXJfZW5hYmxlZCBfX2luaXRkYXRhO1xcbiBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwYWdlX293bmVyX2luaXRlZCk7XFxuIFxcbkBAIC01NDcsMTYgKzU2NSwyMCBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcXG4gc3RhdGljIHNzaXplX3RcXG4gcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXIsXFxuLVxcdFxcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZSlcXG4rXFx0XFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxcbitcXHRcXHRzdHJ1Y3QgcGFnZV9vd25lcl9maWx0ZXJfc3RhdGUgKnN0YXRlKVxcbiB7XFxuIFxcdGludCByZXQsIHBhZ2VibG9ja19tdCwgcGFnZV9tdDtcXG4gXFx0Y2hhciAqa2J1ZjtcXG4rXFx0ZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgcHJpbnRfbW9kZTtcXG4gXFxuIFxcdGNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgUEFHRV9TSVpFKTtcXG4gXFx0a2J1ZiA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpO1xcbiBcXHRpZiAoIWtidWYpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0cHJpbnRfbW9kZSA9IHN0YXRlLVxcdTAwM2VwcmludF9tb2RlO1xcbitcXG4gXFx0cmV0ID0gc2NucHJpbnRmKGtidWYsIGNvdW50LFxcbiBcXHRcXHRcXHRcXFwiUGFnZSBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUgbnNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLCBwYWdlX293bmVyLVxcdTAwM2VnZnBfbWFzayxcXG5AQCAtNTc1LDkgKzU5NywxOCBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdFxcdFxcdG1pZ3JhdGV0eXBlX25hbWVzW3BhZ2VibG9ja19tdF0sXFxuIFxcdFxcdFxcdFxcdTAwMjZwYWdlLVxcdTAwM2VmbGFncyk7XFxuIFxcbi1cXHRyZXQgKz0gc3RhY2tfZGVwb3Rfc25wcmludChoYW5kbGUsIGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCAwKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNlPSBjb3VudClcXG4tXFx0XFx0Z290byBlcnI7XFxuK1xcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfSEFORExFKSB7XFxuK1xcdFxcdHJldCArPSBzdGFja19kZXBvdF9zbnByaW50KGhhbmRsZSwga2J1ZiArIHJldCwgY291bnQgLSByZXQsIDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2U9IGNvdW50KVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHByaW50X21vZGUgIT0gUEFHRV9PV05FUl9QUklOVF9TVEFDSykge1xcbitcXHRcXHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCBcXFwiaGFuZGxlOiAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IGhhbmRsZSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZT0gY291bnQpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xcbiBcXHRcXHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LFxcbkBAIC02NjQsNiArNjk1LDcgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gXFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcXG4gXFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XFxuIFxcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcXG4rXFx0c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gXFxuIFxcdGlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtNzQwLDE1ICs3NzIsMzEgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gXFx0XFx0aWYgKCFoYW5kbGUpXFxuIFxcdFxcdFxcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcXG4gXFxuK1xcdFxcdGlmIChzdGF0ZS1cXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkKSB7XFxuK1xcdFxcdFxcdGludCBuaWQ7XFxuK1xcdFxcdFxcdG1lbWRlc2NfZmxhZ3NfdCBwYWdlX2ZsYWdzID0gUkVBRF9PTkNFKHBhZ2UtXFx1MDAzZWZsYWdzKTtcXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEJ5cGFzcyBQRl9QT0lTT05FRF9DSEVDSygpIGluIHBhZ2VfdG9fbmlkKCkgdG8gYXZvaWRcXG4rXFx0XFx0XFx0ICogVk1fQlVHX09OIHdoZW4gYWNjZXNzaW5nIHBvaXNvbmVkIHBhZ2VzLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKHBhZ2VfZmxhZ3MuZiA9PSBQQUdFX1BPSVNPTl9QQVRURVJOKVxcbitcXHRcXHRcXHRcXHRnb3RvIGV4dF9wdXRfY29udGludWU7XFxuK1xcdFxcdFxcdG5pZCA9IG1lbWRlc2NfbmlkKHBhZ2VfZmxhZ3MpO1xcbitcXHRcXHRcXHRpZiAoIW5vZGVfaXNzZXQobmlkLCBzdGF0ZS1cXHUwMDNlbmlkX2ZpbHRlcikpXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0LyogUmVjb3JkIHRoZSBuZXh0IFBGTiB0byByZWFkIGluIHRoZSBmaWxlIG9mZnNldCAqL1xcbiBcXHRcXHQqcHBvcyA9IHBmbiArIDE7XFxuIFxcbiBcXHRcXHRwYWdlX293bmVyX3RtcCA9ICpwYWdlX293bmVyO1xcbiBcXHRcXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xcbiBcXHRcXHRyZXR1cm4gcHJpbnRfcGFnZV9vd25lcihidWYsIGNvdW50LCBwZm4sIHBhZ2UsXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlKTtcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnBhZ2Vfb3duZXJfdG1wLCBoYW5kbGUsIHN0YXRlKTtcXG4gZXh0X3B1dF9jb250aW51ZTpcXG4gXFx0XFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC04NDcsNyArODk1LDExMyBAQCBzdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxcbiBcXHRcXHRpbml0X3BhZ2VzX2luX3pvbmUoem9uZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGU7XFxuK1xcbitcXHRzdGF0ZSA9IGt6YWxsb2Nfb2JqKCpzdGF0ZSk7XFxuK1xcdGlmICghc3RhdGUpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0c3RhdGUtXFx1MDAzZXByaW50X21vZGUgPSBQQUdFX09XTkVSX1BSSU5UX1NUQUNLO1xcbitcXHRub2Rlc19jbGVhcihzdGF0ZS1cXHUwMDNlbmlkX2ZpbHRlcik7XFxuK1xcdHN0YXRlLVxcdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQgPSBmYWxzZTtcXG4rXFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gc3RhdGU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBhZ2Vfb3duZXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRrZnJlZShmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgcGFnZV9vd25lcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuK1xcdFxcdFxcdFxcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4re1xcbitcXHRjaGFyICprYnVmO1xcbitcXHRjaGFyICpvcmlnO1xcbitcXHRjaGFyICp0b2tlbjtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlICpzdGF0ZSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0ZW51bSBwYWdlX293bmVyX3ByaW50X21vZGUgbmV3X3ByaW50X21vZGU7XFxuK1xcdG5vZGVtYXNrX3QgbmV3X25pZF9maWx0ZXI7XFxuK1xcdGJvb2wgbmV3X25pZF9maWx0ZXJfZW5hYmxlZDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1heGltdW0gaW5wdXQgbGVuZ3RoIGZvciBmaWx0ZXIgY29tbWFuZHM6XFxuK1xcdCAqIC0gMzI6IHByaW50X21vZGUgY29tbWFuZCBtYXggbGVuZ3RoIGlzIDE3IChcXFwibW9kZT1zdGFja19oYW5kbGVcXFwiKVxcbitcXHQgKiAgICAgICAgd2l0aCBzdWZmaWNpZW50IGJ1ZmZlclxcbitcXHQgKiAtIDYgKiBNQVhfTlVNTk9ERVM6IHdvcnN0IGNhc2UgZm9yIG5pZCBsaXN0XFxuK1xcdCAqICAgV29yc3QgY2FzZSBwZXIgbm9kZTogXFxcIixOTk5OTlxcXCIgKGNvbW1hICsgNS1kaWdpdCBub2RlIG51bWJlcikgPSA2IGJ5dGVzXFxuK1xcdCAqL1xcbitcXHRpZiAoY291bnQgXFx1MDAzZSAzMiArIDYgKiBNQVhfTlVNTk9ERVMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0a2J1ZiA9IG1lbWR1cF91c2VyX251bChidWYsIGNvdW50KTtcXG4rXFx0aWYgKElTX0VSUihrYnVmKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoa2J1Zik7XFxuK1xcbitcXHRvcmlnID0ga2J1ZjtcXG4rXFxuK1xcdG5ld19wcmludF9tb2RlID0gc3RhdGUtXFx1MDAzZXByaW50X21vZGU7XFxuK1xcdG5ld19uaWRfZmlsdGVyID0gc3RhdGUtXFx1MDAzZW5pZF9maWx0ZXI7XFxuK1xcdG5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSBzdGF0ZS1cXHUwMDNlbmlkX2ZpbHRlcl9lbmFibGVkO1xcbitcXG4rXFx0d2hpbGUgKCh0b2tlbiA9IHN0cnNlcChcXHUwMDI2a2J1ZiwgXFxcIiBcXFxcdFxcXFxuXFxcIikpICE9IE5VTEwpIHtcXG4rXFx0XFx0aWYgKCp0b2tlbiA9PSAnXFxcXDAnKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlmICghc3RybmNtcCh0b2tlbiwgXFxcIm1vZGU9XFxcIiwgNSkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gc3lzZnNfbWF0Y2hfc3RyaW5nKHBhZ2Vfb3duZXJfcHJpbnRfbW9kZV9zdHJpbmdzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR0b2tlbiArIDUpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0XFx0XFx0bmV3X3ByaW50X21vZGUgPSByZXQ7XFxuK1xcdFxcdH0gZWxzZSBpZiAoIXN0cm5jbXAodG9rZW4sIFxcXCJuaWQ9XFxcIiwgNCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gbm9kZWxpc3RfcGFyc2UodG9rZW4gKyA0LCBuZXdfbmlkX2ZpbHRlcik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXG4rXFx0XFx0XFx0aWYgKG5vZGVzX2VtcHR5KG5ld19uaWRfZmlsdGVyKSkge1xcbitcXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBXZSB3YW50IHRvIGZpbHRlciBtZW1vcnkgYWxsb2NhdGlvbnMgYnkgbnVtYSBub2Rlcywgc28gbWFrZSBzdXJlXFxuK1xcdFxcdFxcdCAqIHRoYXQgdGhlIHNwZWNpZmllZCBub2RlcyBoYXZlIG1lbW9yeS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICghbm9kZXNfc3Vic2V0KG5ld19uaWRfZmlsdGVyLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdG5ld19uaWRfZmlsdGVyX2VuYWJsZWQgPSB0cnVlO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIENvbW1pdCBhbGwgZmlsdGVyIGNoYW5nZXMgKi9cXG4rXFx0c3RhdGUtXFx1MDAzZXByaW50X21vZGUgPSBuZXdfcHJpbnRfbW9kZTtcXG4rXFx0c3RhdGUtXFx1MDAzZW5pZF9maWx0ZXIgPSBuZXdfbmlkX2ZpbHRlcjtcXG4rXFx0c3RhdGUtXFx1MDAzZW5pZF9maWx0ZXJfZW5hYmxlZCA9IG5ld19uaWRfZmlsdGVyX2VuYWJsZWQ7XFxuK1xcbitcXHRyZXQgPSBjb3VudDtcXG4rXFxuK291dF9mcmVlOlxcbitcXHRrZnJlZShvcmlnKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0ge1xcbitcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbitcXHQub3BlblxcdFxcdD0gcGFnZV9vd25lcl9vcGVuLFxcbitcXHQucmVsZWFzZVxcdD0gcGFnZV9vd25lcl9yZWxlYXNlLFxcbitcXHQud3JpdGVcXHRcXHQ9IHBhZ2Vfb3duZXJfd3JpdGUsXFxuIFxcdC5yZWFkXFx0XFx0PSByZWFkX3BhZ2Vfb3duZXIsXFxuIFxcdC5sbHNlZWtcXHRcXHQ9IGxzZWVrX3BhZ2Vfb3duZXIsXFxuIH07XFxuQEAgLTk4MCw3ICsxMTM0LDcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInBhZ2Vfb3duZXJcXFwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcXHUwMDI2cGFnZV9vd25lcl9mb3BzKTtcXG4rXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwicGFnZV9vd25lclxcXCIsIDA2MDAsIE5VTEwsIE5VTEwsIFxcdTAwMjZwYWdlX293bmVyX2ZvcHMpO1xcbiBcXHRkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXFxcInBhZ2Vfb3duZXJfc3RhY2tzXFxcIiwgTlVMTCk7XFxuIFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNob3dfc3RhY2tzXFxcIiwgMDQwMCwgZGlyLFxcbiBcXHRcXHRcXHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcXG5pbmRleCBmNTcyNWI1YzIzYWEyNi4uODU4MTg2YTZlZWZkYmQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy9tbS9NYWtlZmlsZVxcbkBAIC0zLDcgKzMsNyBAQFxcbiAjXFxuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXFxuIFxcbi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XFxuK0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4gSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzXFxuIFxcbiBMSUJfRElSID0gLi4vbGliL2FwaVxcbkBAIC0yMyw3ICsyMyw3IEBAICQoTElCUyk6XFxuIFxcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXFx1MDAzYyAkKExERkxBR1MpXFxuIFxcbiBjbGVhbjpcXG4tXFx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4rXFx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4gXFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXFxuIFxcbiBzYmluZGlyID89IC91c3Ivc2JpblxcbmRpZmYgLS1naXQgYS90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jIGIvdG9vbHMvbW0vcGFnZV9vd25lcl9maWx0ZXIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjFkMWYwYTM4Njc4YTJmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmNcXG5AQCAtMCwwICsxLDMxMCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBVc2VyLXNwYWNlIGhlbHBlciB0byBmaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQgcGVyLWZkXFxuKyAqXFxuKyAqIEV4YW1wbGUgdXNlOlxcbisgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlXFxuKyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGVcXG4rICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAsMSwyXFxuKyAqXFxuKyAqIFNlZSBEb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2N0eXBlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NnZXRvcHQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBNQVhfQ01EX0xFTlxcdDUxMlxcbitcXG4rc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZylcXG4re1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlVzYWdlOiAlcyBbT1BUSU9OU11cXFxcblxcXCIsIHByb2cpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuT3B0aW9uczpcXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiAgLW0sIC0tbW9kZSBNT0RFICAgICAgOiBwcmludF9tb2RlIChzdGFjaywgaGFuZGxlLCBvciBzdGFja19oYW5kbGUpXFxcXG5cXFwiKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgIC1uLCAtLW5pZCBOSURfTElTVCAgIDogTlVNQSBub2RlIElEcyAoY29tbWEtc2VwYXJhdGVkIG9yIHJhbmdlcylcXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiAgLW8sIC0tb3V0cHV0IEZJTEUgICAgOiBvdXRwdXQgZmlsZSAoZGVmYXVsdDogc3Rkb3V0KVxcXFxuXFxcIik7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiICAtaCwgLS1oZWxwICAgICAgICAgICA6IHNob3cgdGhpcyBoZWxwIG1lc3NhZ2VcXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuRXhhbXBsZXM6XFxcXG5cXFwiKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgICVzIC1tIHN0YWNrXFxcXG5cXFwiLCBwcm9nKTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgICVzIC1tIGhhbmRsZVxcXFxuXFxcIiwgcHJvZyk7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiICAlcyAtbSBzdGFja19oYW5kbGVcXFxcblxcXCIsIHByb2cpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiAgJXMgLW0gc3RhY2sgLW8gb3V0cHV0LnR4dFxcXFxuXFxcIiwgcHJvZyk7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiICAlcyAtbiAwLDEsMlxcXFxuXFxcIiwgcHJvZyk7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiICAlcyAtbSBzdGFjayAtbiAwXFxcXG5cXFwiLCBwcm9nKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2YWxpZGF0ZV9tb2RlKGNvbnN0IGNoYXIgKm1vZGUpXFxuK3tcXG4rXFx0aWYgKHN0cmNtcChtb2RlLCBcXFwic3RhY2tcXFwiKSA9PSAwIHx8XFxuK1xcdCAgICBzdHJjbXAobW9kZSwgXFxcImhhbmRsZVxcXCIpID09IDAgfHxcXG4rXFx0ICAgIHN0cmNtcChtb2RlLCBcXFwic3RhY2tfaGFuZGxlXFxcIikgPT0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBJbnZhbGlkIG1vZGUgJyVzJ1xcXFxuXFxcIiwgbW9kZSk7XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiVmFsaWQgbW9kZXM6IHN0YWNrLCBoYW5kbGUsIHN0YWNrX2hhbmRsZVxcXFxuXFxcIik7XFxuK1xcdHJldHVybiAtMTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2YWxpZGF0ZV9uaWRfbGlzdChjb25zdCBjaGFyICpuaWRfbGlzdClcXG4re1xcbitcXHRjb25zdCBjaGFyICpwO1xcbitcXHRpbnQgaSA9IDA7XFxuK1xcdGludCBoYXNfZGlnaXQgPSAwO1xcbitcXHRpbnQgaW5fcmFuZ2UgPSAwO1xcbitcXHRpbnQgcHJldl9udW0gPSAwO1xcbitcXHRpbnQgY3Vycl9udW0gPSAwO1xcbitcXG4rXFx0aWYgKCFuaWRfbGlzdCB8fCBzdHJsZW4obmlkX2xpc3QpID09IDApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Zm9yIChwID0gbmlkX2xpc3Q7ICpwOyBwKyspIHtcXG4rXFx0XFx0aWYgKCpwID09ICcsJykge1xcbitcXHRcXHRcXHRpZiAoIWhhc19kaWdpdCkge1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoaW5fcmFuZ2UgXFx1MDAyNlxcdTAwMjYgcHJldl9udW0gXFx1MDAzZSBjdXJyX251bSkge1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVycixcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIkVycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlIFxcdTAwM2M9IGVuZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdHByZXZfbnVtLCBjdXJyX251bSk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpID0gMDtcXG4rXFx0XFx0XFx0aGFzX2RpZ2l0ID0gMDtcXG4rXFx0XFx0XFx0aW5fcmFuZ2UgPSAwO1xcbitcXHRcXHRcXHRwcmV2X251bSA9IDA7XFxuK1xcdFxcdFxcdGN1cnJfbnVtID0gMDtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICgqcCA9PSAnLScpIHtcXG4rXFx0XFx0XFx0aWYgKCFoYXNfZGlnaXQpIHtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXQgXFxcIik7XFxuK1xcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiKGRhc2ggd2l0aG91dCBwcmVjZWRpbmcgbnVtYmVyKVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoaW5fcmFuZ2UpIHtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJFcnJvcjogTXVsdGlwbGUgZGFzaGVzIGluIG5pZF9saXN0XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHByZXZfbnVtID0gY3Vycl9udW07XFxuK1xcdFxcdFxcdGN1cnJfbnVtID0gMDtcXG4rXFx0XFx0XFx0aSA9IDA7XFxuK1xcdFxcdFxcdGhhc19kaWdpdCA9IDA7XFxuK1xcdFxcdFxcdGluX3JhbmdlID0gMTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhcikqcCkpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJFcnJvcjogSW52YWxpZCBjaGFyYWN0ZXIgJyVjJyBpbiBuaWRfbGlzdFxcXFxuXFxcIiwgKnApO1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChpIFxcdTAwM2UgNSkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBOSUQgdG9vIGxvbmcgKG1heCA2NTUzNilcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y3Vycl9udW0gPSBjdXJyX251bSAqIDEwICsgKCpwIC0gJzAnKTtcXG4rXFx0XFx0aSsrO1xcbitcXHRcXHRoYXNfZGlnaXQgPSAxO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWhhc19kaWdpdCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGluX3JhbmdlIFxcdTAwMjZcXHUwMDI2IHByZXZfbnVtIFxcdTAwM2UgY3Vycl9udW0pIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsXFxuK1xcdFxcdFxcdFxcXCJFcnJvcjogSW52YWxpZCByYW5nZSAlZC0lZCAoc3RhcnQgbXVzdCBiZSBcXHUwMDNjPSBlbmQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwcmV2X251bSwgY3Vycl9udW0pO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKm91dHB1dF9maWxlID0gTlVMTDtcXG4rXFx0Y2hhciBmaWx0ZXJfY21kW01BWF9DTURfTEVOXTtcXG4rXFx0RklMRSAqb3V0cHV0ID0gTlVMTDtcXG4rXFx0aW50IGZkID0gLTE7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXHRjaGFyIGJ1Zls0MDk2XTtcXG4rXFx0aW50IG9wdDtcXG4rXFx0c2l6ZV90IGNtZF9sZW4gPSAwO1xcbitcXG4rXFx0c2lnbmFsKFNJR1BJUEUsIFNJR19JR04pO1xcbitcXG4rXFx0c3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7XFxuK1xcdFxcdHtcXFwibW9kZVxcXCIsXFx0cmVxdWlyZWRfYXJndW1lbnQsIDAsICdtJ30sXFxuK1xcdFxcdHtcXFwibmlkXFxcIixcXHRcXHRyZXF1aXJlZF9hcmd1bWVudCwgMCwgJ24nfSxcXG4rXFx0XFx0e1xcXCJvdXRwdXRcXFwiLFxcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnbyd9LFxcbitcXHRcXHR7XFxcImhlbHBcXFwiLFxcdG5vX2FyZ3VtZW50LFxcdCAgIDAsICdoJ30sXFxuK1xcdFxcdHswLCAwLCAwLCAwfVxcbitcXHR9O1xcbitcXG4rXFx0ZmlsdGVyX2NtZFswXSA9ICdcXFxcMCc7XFxuK1xcbitcXHRpZiAoYXJnYyBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0Zm9yIChpbnQgaSA9IDE7IGkgXFx1MDAzYyBhcmdjOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKHN0cmNtcChhcmd2W2ldLCBcXFwiLWhcXFwiKSA9PSAwIHx8IHN0cmNtcChhcmd2W2ldLCBcXFwiLS1oZWxwXFxcIikgPT0gMCkge1xcbitcXHRcXHRcXHRcXHR1c2FnZShhcmd2WzBdKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBDaGVjayBpZiBwYWdlX293bmVyIGV4aXN0cyBhbmQgaXMgcmVhZGFibGUgKi9cXG4rXFx0aWYgKGFjY2VzcyhcXFwiL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclxcXCIsIEZfT0spICE9IDApIHtcXG4rXFx0XFx0aWYgKGVycm5vID09IEVOT0VOVClcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJFcnJvcjogL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciBkb2VzIG5vdCBleGlzdFxcXFxuXFxcIik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGVycm9yKFxcXCJFcnJvciBhY2Nlc3NpbmcgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lclxcXCIpO1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIk1ha2Ugc3VyZSBwYWdlX293bmVyIGlzIGVuYWJsZWQgaW4ga2VybmVsXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFxuK1xcdHdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgXFxcIm06bjpvOmhcXFwiLCBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkge1xcbitcXHRcXHRpbnQgbGVuO1xcbitcXG4rXFx0XFx0c3dpdGNoIChvcHQpIHtcXG4rXFx0XFx0Y2FzZSAnbSc6IHtcXG4rXFx0XFx0XFx0Y29uc3QgY2hhciAqbW9kZSA9IG9wdGFyZztcXG4rXFxuK1xcdFxcdFxcdGlmICh2YWxpZGF0ZV9tb2RlKG1vZGUpIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdFxcdFxcdGxlbiA9IHNucHJpbnRmKGZpbHRlcl9jbWQgKyBjbWRfbGVuLCBNQVhfQ01EX0xFTiAtIGNtZF9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiJXNtb2RlPSVzXFxcIiwgY21kX2xlbiBcXHUwMDNlIDAgPyBcXFwiIFxcXCIgOiBcXFwiXFxcIiwgbW9kZSk7XFxuK1xcdFxcdFxcdGlmIChsZW4gXFx1MDAzYyAwIHx8IGNtZF9sZW4gKyBsZW4gXFx1MDAzZT0gTUFYX0NNRF9MRU4pIHtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJFcnJvcjogQ29tbWFuZCB0b28gbG9uZ1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGNtZF9sZW4gKz0gbGVuO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRjYXNlICduJzoge1xcbitcXHRcXHRcXHRjb25zdCBjaGFyICpuaWRfbGlzdCA9IG9wdGFyZztcXG4rXFxuK1xcdFxcdFxcdGlmICh2YWxpZGF0ZV9uaWRfbGlzdChuaWRfbGlzdCkgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0XFx0bGVuID0gc25wcmludGYoZmlsdGVyX2NtZCArIGNtZF9sZW4sIE1BWF9DTURfTEVOIC0gY21kX2xlbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCIlc25pZD0lc1xcXCIsIGNtZF9sZW4gXFx1MDAzZSAwID8gXFxcIiBcXFwiIDogXFxcIlxcXCIsIG5pZF9saXN0KTtcXG4rXFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjIDAgfHwgY21kX2xlbiArIGxlbiBcXHUwMDNlPSBNQVhfQ01EX0xFTikge1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBDb21tYW5kIHRvbyBsb25nXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0Y21kX2xlbiArPSBsZW47XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGNhc2UgJ28nOlxcbitcXHRcXHRcXHRvdXRwdXRfZmlsZSA9IG9wdGFyZztcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ2gnOlxcbitcXHRcXHRcXHQvKiBBbHJlYWR5IGhhbmRsZWQgYWJvdmUgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdHVzYWdlKGFyZ3ZbMF0pO1xcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBBdCBsZWFzdCBvbmUgZmlsdGVyIG11c3QgYmUgc3BlY2lmaWVkICovXFxuK1xcdGlmIChjbWRfbGVuID09IDApIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJFcnJvcjogQXQgbGVhc3Qgb25lIGZpbHRlciAoLW0gb3IgLW4pIG11c3QgYmUgc3BlY2lmaWVkXFxcXG5cXFxcblxcXCIpO1xcbitcXHRcXHR1c2FnZShhcmd2WzBdKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIE9wZW4gcGFnZV9vd25lciBmb3IgcmVhZC13cml0ZSAtIHRoaXMgd2lsbCBmYWlsIGlmIGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgd3JpdGUgKi9cXG4rXFx0ZmQgPSBvcGVuKFxcXCIvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXFxcIiwgT19SRFdSKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRUFDQ0VTIHx8IGVycm5vID09IEVQRVJNKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRXJyb3I6IC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZG9lcyBub3Qgc3VwcG9ydCB3cml0ZSBhY2Nlc3NcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlRoaXMga2VybmVsIGRvZXMgbm90IHN1cHBvcnQgXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwicGVyLWZkIGZpbHRlcmluZy5cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlBsZWFzZSBlbnN1cmUgeW91IGhhdmUgYSBrZXJuZWwgd2l0aCBcXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJwZXItZmQgZmlsdGVyaW5nIHN1cHBvcnQuXFxcXG5cXFwiKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cGVycm9yKFxcXCJFcnJvciBvcGVuaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJcXFwiKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG91dHB1dF9maWxlKSB7XFxuK1xcdFxcdG91dHB1dCA9IGZvcGVuKG91dHB1dF9maWxlLCBcXFwid1xcXCIpO1xcbitcXHRcXHRpZiAoIW91dHB1dCkge1xcbitcXHRcXHRcXHRwZXJyb3IoXFxcIm9wZW4gb3V0cHV0IGZpbGVcXFwiKTtcXG4rXFx0XFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRvdXRwdXQgPSBzdGRvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHdyaXRlKGZkLCBmaWx0ZXJfY21kLCBzdHJsZW4oZmlsdGVyX2NtZCkpO1xcbitcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0aWYgKGVycm5vID09IEVJTlZBTCkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkVycm9yOiBLZXJuZWwgcmVqZWN0ZWQgdGhlIGZpbHRlciBjb21tYW5kLlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiUG9zc2libGUgY2F1c2VzOlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiICAtIEtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHBlci1mZCBmaWx0ZXJpbmdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiAgLSBOVU1BIG5vZGUgaGFzIG5vIG1lbW9yeVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiICAtIFVua25vd24gcmVhc29uXFxcXG5cXFwiKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cGVycm9yKFxcXCJ3cml0ZSBmaWx0ZXIgY29tbWFuZFxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoKHNpemVfdClyZXQgIT0gc3RybGVuKGZpbHRlcl9jbWQpKVxcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIldhcm5pbmc6IFBhcnRpYWwgd3JpdGUgKCV6ZC8lenUpXFxcXG5cXFwiLCByZXQsIHN0cmxlbihmaWx0ZXJfY21kKSk7XFxuK1xcbitcXHQvKiBSZWFkIGFuZCBkaXNwbGF5IGZpbHRlcmVkIG91dHB1dCAqL1xcbitcXHRyZXQgPSAwO1xcbitcXHR3aGlsZSAoKHJldCA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0c2l6ZV90IHdyaXR0ZW4gPSBmd3JpdGUoYnVmLCAxLCByZXQsIG91dHB1dCk7XFxuK1xcbitcXHRcXHRpZiAod3JpdHRlbiAhPSAoc2l6ZV90KXJldCkge1xcbitcXHRcXHRcXHRpZiAoZXJybm8gPT0gRVBJUEUpIHtcXG4rXFx0XFx0XFx0XFx0LyogUGlwZSBjbG9zZWQsIHRyZWF0IGFzIHN1Y2Nlc3MgKi9cXG4rXFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cGVycm9yKFxcXCJ3cml0ZSBvdXRwdXRcXFwiKTtcXG4rXFx0XFx0XFx0cmV0ID0gLTE7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHBlcnJvcihcXFwicmVhZCBwYWdlX293bmVyXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZmZsdXNoKG91dHB1dCkpIHtcXG4rXFx0XFx0aWYgKGVycm5vID09IEVQSVBFKSB7XFxuK1xcdFxcdFxcdC8qIFBpcGUgY2xvc2VkLCB0cmVhdCBhcyBzdWNjZXNzICovXFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBlcnJvcihcXFwiZmx1c2ggb3V0cHV0XFxcIik7XFxuK1xcdFxcdFxcdHJldCA9IC0xO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK291dDpcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRpZiAob3V0cHV0ICE9IHN0ZG91dClcXG4rXFx0XFx0ZmNsb3NlKG91dHB1dCk7XFxuK1xcdHJldHVybiByZXQgXFx1MDAzYyAwID8gMSA6IDA7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6MjA6MDUuMTE2MjI3NjI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIwODYwMzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX09XTkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9vd25lcl93cml0ZVwiLFxuICAgIFwicGFnZV9vd25lcl9vcGVuXCIsXG4gICAgXCJwYWdlX293bmVyX3JlbGVhc2VcIixcbiAgICBcInByaW50X3BhZ2Vfb3duZXJcIixcbiAgICBcInJlYWRfcGFnZV9vd25lclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd3JpdGUgaGFuZGxlciAoYHBhZ2Vfb3duZXJfd3JpdGVgKSBmb3IgdGhlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCBkZWJ1Z2ZzIGZpbGUgdG8gc3VwcG9ydCBmaWx0ZXJpbmcuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHJlYWQgaGFuZGxlciAoYHJlYWRfcGFnZV9vd25lcmApIGFuZCBvdXRwdXQgZm9ybWF0dGluZyAoYHByaW50X3BhZ2Vfb3duZXJgKSB0byBhcHBseSB0aGUgZmlsdGVycy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBhcnNpbmcgdXNlciBpbnB1dCBhbmQgbWFuYWdpbmcgcGVyLWZkIHN0YXRlLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YzgyZmRmYmFhN2U2MWQwNzAyM2QyZTcyYTg3YzRhNjEzOTZhOWU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAyMDoyMDowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XG5pbmRleCA2YjEyZjNiMDA3ZWM5MS4uMzgzZTU5YzQyNzQzYmQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XG5AQCAtNjUsNyArNjUsMTQgQEAgdW4tdHJhY2tpbmcgc3RhdGUuXG4gVXNhZ2VcbiA9PT09PVxuIFxuLTEpIEJ1aWxkIHVzZXItc3BhY2UgaGVscGVyOjpcbisxKSBCdWlsZCB1c2VyLXNwYWNlIGhlbHBlcnM6OlxuK1xuK1RvIGZpbHRlciBwYWdlX293bmVyIG91dHB1dDpcbitcbitcdGNkIHRvb2xzL21tXG4rXHRtYWtlIHBhZ2Vfb3duZXJfZmlsdGVyXG4rXG4rVG8gc29ydCBhbmQgYW5hbHl6ZSBwYWdlX293bmVyIG91dHB1dDpcbiBcbiBcdGNkIHRvb2xzL21tXG4gXHRtYWtlIHBhZ2Vfb3duZXJfc29ydFxuQEAgLTc0LDcgKzgxLDExIEBAIFVzYWdlXG4gXG4gMykgRG8gdGhlIGpvYiB0aGF0IHlvdSB3YW50IHRvIGRlYnVnLlxuIFxuLTQpIEFuYWx5emUgaW5mb3JtYXRpb24gZnJvbSBwYWdlIG93bmVyOjpcbis0KSAoT3B0aW9uYWwpIEZpbHRlciBwYWdlX293bmVyIG91dHB1dDo6XG4rXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbiAwLDEsMiBcdTAwM2UgZmlsdGVyZWRfcGFnZV9vd25lci50eHRcbitcbis1KSBBbmFseXplIGluZm9ybWF0aW9uIGZyb20gcGFnZSBvd25lcjo6XG4gXG4gXHRjYXQgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcl9zdGFja3Mvc2hvd19zdGFja3MgXHUwMDNlIHN0YWNrcy50eHRcbiBcdGNhdCBzdGFja3MudHh0XG5AQCAtMjYzLDMgKzI3NCw2NSBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuIFx0Zlx0XHRmcmVlXHRcdHdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90XG4gXHRzdFx0XHRzdGFja3RyYWNlXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXG4gXHRhdG9yXHRcdGFsbG9jYXRvclx0bWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXNcbitcbitGaWx0ZXJpbmcgcGFnZV9vd25lciBvdXRwdXRcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rcGFnZV9vd25lciBzdXBwb3J0cyBmaWx0ZXJpbmcgb3V0cHV0IGF0IHRoZSBrZXJuZWwgbGV2ZWwgYmVmb3JlIHJlYWRpbmcsXG4rd2hpY2ggcmVkdWNlcyB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBwcm9jZXNzZWQgaW4gdXNlcnNwYWNlLlxuK1xuK1RoZSBwYWdlX293bmVyX2ZpbHRlciB0b29sIHByb3ZpZGVzIGEgY29udmVuaWVudCBpbnRlcmZhY2UgZm9yIHRoaXMgZmlsdGVyaW5nXG4rY2FwYWJpbGl0eS4gSXQgc3VwcG9ydHMgdHdvIHR5cGVzIG9mIGZpbHRlcnM6XG4rXG4rMS4gKipwcmludF9tb2RlIGZpbHRlcioqOiBDb250cm9sIHdoYXQgaW5mb3JtYXRpb24gaXMgcHJpbnRlZCBmb3IgZWFjaCBwYWdlXG4rXHQtIGBgc3RhY2tgYDogUHJpbnQgZnVsbCBzdGFjayB0cmFjZXMgKGRlZmF1bHQsIGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyB1c2FnZSlcbitcdC0gYGBoYW5kbGVgYDogUHJpbnQgb25seSBzdGFjayBoYW5kbGUgbnVtYmVycyAobXVjaCBmYXN0ZXIsIHNtYWxsZXIgb3V0cHV0KVxuK1x0LSBgYHN0YWNrX2hhbmRsZWBgOiBQcmludCBib3RoIHN0YWNrIHRyYWNlcyBhbmQgaGFuZGxlIG51bWJlcnNcbitcbitcdFRoZSBgYGhhbmRsZWBgIG1vZGUgdXNlcyBudW1lcmljIGlkZW50aWZpZXJzIGluc3RlYWQgb2YgZnVsbCBzdGFjayB0cmFjZXMuXG4rXHRUaGUgbWFwcGluZyBmcm9tIGhhbmRsZXMgdG8gYWN0dWFsIHN0YWNrIHRyYWNlcyBjYW4gYmUgb2J0YWluZWQgdmlhIHRoZVxuK1x0c2hvd19zdGFja3NfaGFuZGxlcyBpbnRlcmZhY2UuXG4rXG4rMi4gKipOVU1BIG5vZGUgZmlsdGVyKio6IEZpbHRlciBwYWdlcyBieSBOVU1BIG5vZGUgSURcbitcdC0gU3VwcG9ydHMgc2luZ2xlIG5vZGU6IGBgLW4gMGBgXG4rXHQtIE11bHRpcGxlIG5vZGVzOiBgYC1uIDAsMSwyYGBcbitcdC0gUmFuZ2VzOiBgYC1uIDAtM2BgXG4rXHQtIE1peGVkIGZvcm1hdDogYGAtbiAwLDItMyw1YGBcbitcbitVc2FnZSBleGFtcGxlczo6XG4rXG4rXHQjIEZpbHRlciBieSBwcmludCBtb2RlXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZVxuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbSBzdGFja19oYW5kbGVcbitcbitcdCMgRmlsdGVyIGJ5IE5VTUEgbm9kZVxuK1x0Li9wYWdlX293bmVyX2ZpbHRlciAtbiAwXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAtM1xuK1xuK1x0IyBDb21iaW5lZCBmaWx0ZXJzXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrIC1uIDAsMSwyXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIGhhbmRsZSAtbiAwLDItM1xuK1xuK1x0IyBTYXZlIHRvIGZpbGVcbitcdC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlIC1vIGZpbHRlcmVkX291dHB1dC50eHRcbitcbitUaGUgaGFuZGxlIG1vZGUgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgbW9uaXRvcmluZyBhbmQgcGVyZm9ybWFuY2UtY3JpdGljYWxcbitzY2VuYXJpb3MgYXMgaXQgZHJhbWF0aWNhbGx5IHJlZHVjZXMgb3V0cHV0IHNpemUuIFRlc3Rpbmcgc2hvd3MgaGFuZGxlIG1vZGUgY2FuXG4rcmVkdWNlIG91dHB1dCBzaXplIGJ5IH42NiUgKDg0TUIgdnMgMjQ0TUIpIGFuZCBpbXByb3ZlIHJlYWQgcGVyZm9ybWFuY2UgYnkgfjQuNHhcbitjb21wYXJlZCB0byBmdWxsIHN0YWNrIG91dHB1dC5cbitcbitUaGUgTlVNQSBub2RlIGZpbHRlciBpcyB1c2VmdWwgZm9yIE5VTUEtYXdhcmUgbWVtb3J5IGFsbG9jYXRpb24gYW5hbHlzaXMgYW5kIGRlYnVnZ2luZy5cbitcbitCZWhpbmQgdGhlIHNjZW5lcywgcGFnZV9vd25lcl9maWx0ZXIgb3BlbnMgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciBhbmRcbit3cml0ZXMgZmlsdGVyIGNvbW1hbmRzIGJlZm9yZSByZWFkaW5nIHRoZSBmaWx0ZXJlZCBvdXRwdXQuIFRoZSBmaWx0ZXJpbmcgdXNlc1xuK3Blci1maWxlLWRlc2NyaXB0b3Igc3RhdGUsIGFsbG93aW5nIGVhY2ggb3BlbigpIHRvIGhhdmUgaW5kZXBlbmRlbnQgZmlsdGVyIHNldHRpbmdzLlxuK1xuK0VhY2ggZmlsZSBkZXNjcmlwdG9yIG1haW50YWlucyBpdHMgb3duIGZpbHRlciBzdGF0ZSwgc28geW91IGNhbiBoYXZlIG11bHRpcGxlXG4raW5kZXBlbmRlbnQgZmlsdGVyaW5nIG9wZXJhdGlvbnMgcnVubmluZyBjb25jdXJyZW50bHkuIEZvciBleGFtcGxlLCBpbiBkaWZmZXJlbnRcbit0ZXJtaW5hbHMgeW91IGNhbiBydW4gZGlmZmVyZW50IGZpbHRlcnMgc2ltdWx0YW5lb3VzbHk6OlxuK1xuK1x0IyBUZXJtaW5hbCAxOiBGaWx0ZXIgbm9kZSAwXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDAgXHUwMDNlIG5vZGUwX291dHB1dC50eHRcbitcbitcdCMgVGVybWluYWwgMjogRmlsdGVyIG5vZGUgMSAocnVucyBjb25jdXJyZW50bHkpXG4rXHQuL3BhZ2Vfb3duZXJfZmlsdGVyIC1uIDEgXHUwMDNlIG5vZGUxX291dHB1dC50eHRcbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcbmluZGV4IDgxNzhlMGJlNTU3Zjg3Li5mMWQ0YzIwNWFmZjk3OSAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xuKysrIGIvbW0vcGFnZV9vd25lci5jXG5AQCAtNTQsNiArNTQsMjQgQEAgc3RydWN0IHN0YWNrX3ByaW50X2N0eCB7XG4gXHR1OCBmbGFncztcbiB9O1xuIFxuK2VudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIHtcbitcdFBBR0VfT1dORVJfUFJJTlRfU1RBQ0ssXG4rXHRQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSxcbitcdFBBR0VfT1dORVJfUFJJTlRfU1RBQ0tfSEFORExFLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwYWdlX293bmVyX3ByaW50X21vZGVfc3RyaW5nc1tdID0ge1xuK1x0W1BBR0VfT1dORVJfUFJJTlRfU1RBQ0tdXHQ9IFwic3RhY2tcIixcbitcdFtQQUdFX09XTkVSX1BSSU5UX0hBTkRMRV1cdD0gXCJoYW5kbGVcIixcbitcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRV1cdD0gXCJzdGFja19oYW5kbGVcIixcbit9O1xuK1xuK3N0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSB7XG4rXHRlbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSBwcmludF9tb2RlO1xuK1x0bm9kZW1hc2tfdCBuaWRfZmlsdGVyO1xuK1x0Ym9vbCBuaWRfZmlsdGVyX2VuYWJsZWQ7XG4rfTtcbitcbiBzdGF0aWMgYm9vbCBwYWdlX293bmVyX2VuYWJsZWQgX19pbml0ZGF0YTtcbiBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwYWdlX293bmVyX2luaXRlZCk7XG4gXG5AQCAtNTQ3LDE2ICs1NjUsMjAgQEAgc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4gc3RhdGljIHNzaXplX3RcbiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcixcbi1cdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlKVxuK1x0XHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXG4rXHRcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0aW50IHJldCwgcGFnZWJsb2NrX210LCBwYWdlX210O1xuIFx0Y2hhciAqa2J1ZjtcbitcdGVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIHByaW50X21vZGU7XG4gXG4gXHRjb3VudCA9IG1pbl90KHNpemVfdCwgY291bnQsIFBBR0VfU0laRSk7XG4gXHRrYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIWtidWYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuK1x0cHJpbnRfbW9kZSA9IHN0YXRlLVx1MDAzZXByaW50X21vZGU7XG4rXG4gXHRyZXQgPSBzY25wcmludGYoa2J1ZiwgY291bnQsXG4gXHRcdFx0XCJQYWdlIGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSBuc1xcblwiLFxuIFx0XHRcdHBhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIHBhZ2Vfb3duZXItXHUwMDNlZ2ZwX21hc2ssXG5AQCAtNTc1LDkgKzU5NywxOCBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdFx0bWlncmF0ZXR5cGVfbmFtZXNbcGFnZWJsb2NrX210XSxcbiBcdFx0XHRcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiBcbi1cdHJldCArPSBzdGFja19kZXBvdF9zbnByaW50KGhhbmRsZSwga2J1ZiArIHJldCwgY291bnQgLSByZXQsIDApO1xuLVx0aWYgKHJldCBcdTAwM2U9IGNvdW50KVxuLVx0XHRnb3RvIGVycjtcbitcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfSEFORExFKSB7XG4rXHRcdHJldCArPSBzdGFja19kZXBvdF9zbnByaW50KGhhbmRsZSwga2J1ZiArIHJldCwgY291bnQgLSByZXQsIDApO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gY291bnQpXG4rXHRcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4rXHRpZiAocHJpbnRfbW9kZSAhPSBQQUdFX09XTkVSX1BSSU5UX1NUQUNLKSB7XG4rXHRcdHJldCArPSBzY25wcmludGYoa2J1ZiArIHJldCwgY291bnQgLSByZXQsIFwiaGFuZGxlOiAldVxcblwiLFxuK1x0XHRcdFx0IGhhbmRsZSk7XG4rXHRcdGlmIChyZXQgXHUwMDNlPSBjb3VudClcbitcdFx0XHRnb3RvIGVycjtcbitcdH1cbiBcbiBcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHtcbiBcdFx0cmV0ICs9IHNjbnByaW50ZihrYnVmICsgcmV0LCBjb3VudCAtIHJldCxcbkBAIC02NjQsNiArNjk1LDcgQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiBcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQ7XG4gXHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbiBcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbitcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcbiBcdGlmICghc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTc0MCwxNSArNzcyLDMxIEBAIHJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gXHRcdGlmICghaGFuZGxlKVxuIFx0XHRcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcbiBcbitcdFx0aWYgKHN0YXRlLVx1MDAzZW5pZF9maWx0ZXJfZW5hYmxlZCkge1xuK1x0XHRcdGludCBuaWQ7XG4rXHRcdFx0bWVtZGVzY19mbGFnc190IHBhZ2VfZmxhZ3MgPSBSRUFEX09OQ0UocGFnZS1cdTAwM2VmbGFncyk7XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBCeXBhc3MgUEZfUE9JU09ORURfQ0hFQ0soKSBpbiBwYWdlX3RvX25pZCgpIHRvIGF2b2lkXG4rXHRcdFx0ICogVk1fQlVHX09OIHdoZW4gYWNjZXNzaW5nIHBvaXNvbmVkIHBhZ2VzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChwYWdlX2ZsYWdzLmYgPT0gUEFHRV9QT0lTT05fUEFUVEVSTilcbitcdFx0XHRcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcbitcdFx0XHRuaWQgPSBtZW1kZXNjX25pZChwYWdlX2ZsYWdzKTtcbitcdFx0XHRpZiAoIW5vZGVfaXNzZXQobmlkLCBzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyKSlcbitcdFx0XHRcdGdvdG8gZXh0X3B1dF9jb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHQvKiBSZWNvcmQgdGhlIG5leHQgUEZOIHRvIHJlYWQgaW4gdGhlIGZpbGUgb2Zmc2V0ICovXG4gXHRcdCpwcG9zID0gcGZuICsgMTtcbiBcbiBcdFx0cGFnZV9vd25lcl90bXAgPSAqcGFnZV9vd25lcjtcbiBcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiBcdFx0cmV0dXJuIHByaW50X3BhZ2Vfb3duZXIoYnVmLCBjb3VudCwgcGZuLCBwYWdlLFxuLVx0XHRcdFx0XHUwMDI2cGFnZV9vd25lcl90bXAsIGhhbmRsZSk7XG4rXHRcdFx0XHRcdTAwMjZwYWdlX293bmVyX3RtcCwgaGFuZGxlLCBzdGF0ZSk7XG4gZXh0X3B1dF9jb250aW51ZTpcbiBcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbitcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04NDcsNyArODk1LDExMyBAQCBzdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxuIFx0XHRpbml0X3BhZ2VzX2luX3pvbmUoem9uZSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGU7XG4rXG4rXHRzdGF0ZSA9IGt6YWxsb2Nfb2JqKCpzdGF0ZSk7XG4rXHRpZiAoIXN0YXRlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHN0YXRlLVx1MDAzZXByaW50X21vZGUgPSBQQUdFX09XTkVSX1BSSU5UX1NUQUNLO1xuK1x0bm9kZXNfY2xlYXIoc3RhdGUtXHUwMDNlbmlkX2ZpbHRlcik7XG4rXHRzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQgPSBmYWxzZTtcbitcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gc3RhdGU7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBwYWdlX293bmVyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0a2ZyZWUoZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IHBhZ2Vfb3duZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4rXHRcdFx0XHQgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcbitcdFx0XHRcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbit7XG4rXHRjaGFyICprYnVmO1xuK1x0Y2hhciAqb3JpZztcbitcdGNoYXIgKnRva2VuO1xuK1x0aW50IHJldDtcbitcdHN0cnVjdCBwYWdlX293bmVyX2ZpbHRlcl9zdGF0ZSAqc3RhdGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdGVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIG5ld19wcmludF9tb2RlO1xuK1x0bm9kZW1hc2tfdCBuZXdfbmlkX2ZpbHRlcjtcbitcdGJvb2wgbmV3X25pZF9maWx0ZXJfZW5hYmxlZDtcbitcbitcdC8qXG4rXHQgKiBNYXhpbXVtIGlucHV0IGxlbmd0aCBmb3IgZmlsdGVyIGNvbW1hbmRzOlxuK1x0ICogLSAzMjogcHJpbnRfbW9kZSBjb21tYW5kIG1heCBsZW5ndGggaXMgMTcgKFwibW9kZT1zdGFja19oYW5kbGVcIilcbitcdCAqICAgICAgICB3aXRoIHN1ZmZpY2llbnQgYnVmZmVyXG4rXHQgKiAtIDYgKiBNQVhfTlVNTk9ERVM6IHdvcnN0IGNhc2UgZm9yIG5pZCBsaXN0XG4rXHQgKiAgIFdvcnN0IGNhc2UgcGVyIG5vZGU6IFwiLE5OTk5OXCIgKGNvbW1hICsgNS1kaWdpdCBub2RlIG51bWJlcikgPSA2IGJ5dGVzXG4rXHQgKi9cbitcdGlmIChjb3VudCBcdTAwM2UgMzIgKyA2ICogTUFYX05VTU5PREVTKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGtidWYgPSBtZW1kdXBfdXNlcl9udWwoYnVmLCBjb3VudCk7XG4rXHRpZiAoSVNfRVJSKGtidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihrYnVmKTtcbitcbitcdG9yaWcgPSBrYnVmO1xuK1xuK1x0bmV3X3ByaW50X21vZGUgPSBzdGF0ZS1cdTAwM2VwcmludF9tb2RlO1xuK1x0bmV3X25pZF9maWx0ZXIgPSBzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyO1xuK1x0bmV3X25pZF9maWx0ZXJfZW5hYmxlZCA9IHN0YXRlLVx1MDAzZW5pZF9maWx0ZXJfZW5hYmxlZDtcbitcbitcdHdoaWxlICgodG9rZW4gPSBzdHJzZXAoXHUwMDI2a2J1ZiwgXCIgXFx0XFxuXCIpKSAhPSBOVUxMKSB7XG4rXHRcdGlmICgqdG9rZW4gPT0gJ1xcMCcpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICghc3RybmNtcCh0b2tlbiwgXCJtb2RlPVwiLCA1KSkge1xuK1x0XHRcdHJldCA9IHN5c2ZzX21hdGNoX3N0cmluZyhwYWdlX293bmVyX3ByaW50X21vZGVfc3RyaW5ncyxcbitcdFx0XHRcdFx0XHR0b2tlbiArIDUpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHRcdG5ld19wcmludF9tb2RlID0gcmV0O1xuK1x0XHR9IGVsc2UgaWYgKCFzdHJuY21wKHRva2VuLCBcIm5pZD1cIiwgNCkpIHtcbitcdFx0XHRyZXQgPSBub2RlbGlzdF9wYXJzZSh0b2tlbiArIDQsIG5ld19uaWRfZmlsdGVyKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbitcbitcdFx0XHRpZiAobm9kZXNfZW1wdHkobmV3X25pZF9maWx0ZXIpKSB7XG4rXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBXZSB3YW50IHRvIGZpbHRlciBtZW1vcnkgYWxsb2NhdGlvbnMgYnkgbnVtYSBub2Rlcywgc28gbWFrZSBzdXJlXG4rXHRcdFx0ICogdGhhdCB0aGUgc3BlY2lmaWVkIG5vZGVzIGhhdmUgbWVtb3J5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghbm9kZXNfc3Vic2V0KG5ld19uaWRfZmlsdGVyLCBub2RlX3N0YXRlc1tOX01FTU9SWV0pKSB7XG4rXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byBvdXRfZnJlZTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0bmV3X25pZF9maWx0ZXJfZW5hYmxlZCA9IHRydWU7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBDb21taXQgYWxsIGZpbHRlciBjaGFuZ2VzICovXG4rXHRzdGF0ZS1cdTAwM2VwcmludF9tb2RlID0gbmV3X3ByaW50X21vZGU7XG4rXHRzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyID0gbmV3X25pZF9maWx0ZXI7XG4rXHRzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyX2VuYWJsZWQgPSBuZXdfbmlkX2ZpbHRlcl9lbmFibGVkO1xuK1xuK1x0cmV0ID0gY291bnQ7XG4rXG4rb3V0X2ZyZWU6XG4rXHRrZnJlZShvcmlnKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfZm9wcyA9IHtcbitcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuK1x0Lm9wZW5cdFx0PSBwYWdlX293bmVyX29wZW4sXG4rXHQucmVsZWFzZVx0PSBwYWdlX293bmVyX3JlbGVhc2UsXG4rXHQud3JpdGVcdFx0PSBwYWdlX293bmVyX3dyaXRlLFxuIFx0LnJlYWRcdFx0PSByZWFkX3BhZ2Vfb3duZXIsXG4gXHQubGxzZWVrXHRcdD0gbHNlZWtfcGFnZV9vd25lcixcbiB9O1xuQEAgLTk4MCw3ICsxMTM0LDcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwicGFnZV9vd25lclwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcdTAwMjZwYWdlX293bmVyX2ZvcHMpO1xuK1x0ZGVidWdmc19jcmVhdGVfZmlsZShcInBhZ2Vfb3duZXJcIiwgMDYwMCwgTlVMTCwgTlVMTCwgXHUwMDI2cGFnZV9vd25lcl9mb3BzKTtcbiBcdGRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihcInBhZ2Vfb3duZXJfc3RhY2tzXCIsIE5VTEwpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcInNob3dfc3RhY2tzXCIsIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxuaW5kZXggZjU3MjViNWMyM2FhMjYuLjg1ODE4NmE2ZWVmZGJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL21tL01ha2VmaWxlXG5AQCAtMyw3ICszLDcgQEBcbiAjXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcbiBcbi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4rQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xuIFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXG5AQCAtMjMsNyArMjMsNyBAQCAkKExJQlMpOlxuIFx0JChDQykgJChDRkxBR1MpIC1vICRAICRcdTAwM2MgJChMREZMQUdTKVxuIFxuIGNsZWFuOlxuLVx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbitcdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4gXHRtYWtlIC1DICQoTElCX0RJUikgY2xlYW5cbiBcbiBzYmluZGlyID89IC91c3Ivc2JpblxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmMgYi90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjFkMWYwYTM4Njc4YTJmXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9tbS9wYWdlX293bmVyX2ZpbHRlci5jXG5AQCAtMCwwICsxLDMxMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBVc2VyLXNwYWNlIGhlbHBlciB0byBmaWx0ZXIgcGFnZV9vd25lciBvdXRwdXQgcGVyLWZkXG4rICpcbisgKiBFeGFtcGxlIHVzZTpcbisgKiAgIC4vcGFnZV9vd25lcl9maWx0ZXIgLW0gaGFuZGxlXG4rICogICAuL3BhZ2Vfb3duZXJfZmlsdGVyIC1tIHN0YWNrX2hhbmRsZVxuKyAqICAgLi9wYWdlX293bmVyX2ZpbHRlciAtbiAwLDEsMlxuKyAqXG4rICogU2VlIERvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NjdHlwZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZ2V0b3B0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuK1xuKyNkZWZpbmUgTUFYX0NNRF9MRU5cdDUxMlxuK1xuK3N0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2cpXG4re1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiVXNhZ2U6ICVzIFtPUFRJT05TXVxcblwiLCBwcm9nKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIlxcbk9wdGlvbnM6XFxuXCIpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiICAtbSwgLS1tb2RlIE1PREUgICAgICA6IHByaW50X21vZGUgKHN0YWNrLCBoYW5kbGUsIG9yIHN0YWNrX2hhbmRsZSlcXG5cIik7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCIgIC1uLCAtLW5pZCBOSURfTElTVCAgIDogTlVNQSBub2RlIElEcyAoY29tbWEtc2VwYXJhdGVkIG9yIHJhbmdlcylcXG5cIik7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCIgIC1vLCAtLW91dHB1dCBGSUxFICAgIDogb3V0cHV0IGZpbGUgKGRlZmF1bHQ6IHN0ZG91dClcXG5cIik7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCIgIC1oLCAtLWhlbHAgICAgICAgICAgIDogc2hvdyB0aGlzIGhlbHAgbWVzc2FnZVxcblwiKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIlxcbkV4YW1wbGVzOlxcblwiKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIiAgJXMgLW0gc3RhY2tcXG5cIiwgcHJvZyk7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCIgICVzIC1tIGhhbmRsZVxcblwiLCBwcm9nKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIiAgJXMgLW0gc3RhY2tfaGFuZGxlXFxuXCIsIHByb2cpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiICAlcyAtbSBzdGFjayAtbyBvdXRwdXQudHh0XFxuXCIsIHByb2cpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiICAlcyAtbiAwLDEsMlxcblwiLCBwcm9nKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIiAgJXMgLW0gc3RhY2sgLW4gMFxcblwiLCBwcm9nKTtcbit9XG4rXG4rc3RhdGljIGludCB2YWxpZGF0ZV9tb2RlKGNvbnN0IGNoYXIgKm1vZGUpXG4re1xuK1x0aWYgKHN0cmNtcChtb2RlLCBcInN0YWNrXCIpID09IDAgfHxcbitcdCAgICBzdHJjbXAobW9kZSwgXCJoYW5kbGVcIikgPT0gMCB8fFxuK1x0ICAgIHN0cmNtcChtb2RlLCBcInN0YWNrX2hhbmRsZVwiKSA9PSAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiBJbnZhbGlkIG1vZGUgJyVzJ1xcblwiLCBtb2RlKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIlZhbGlkIG1vZGVzOiBzdGFjaywgaGFuZGxlLCBzdGFja19oYW5kbGVcXG5cIik7XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdmFsaWRhdGVfbmlkX2xpc3QoY29uc3QgY2hhciAqbmlkX2xpc3QpXG4re1xuK1x0Y29uc3QgY2hhciAqcDtcbitcdGludCBpID0gMDtcbitcdGludCBoYXNfZGlnaXQgPSAwO1xuK1x0aW50IGluX3JhbmdlID0gMDtcbitcdGludCBwcmV2X251bSA9IDA7XG4rXHRpbnQgY3Vycl9udW0gPSAwO1xuK1xuK1x0aWYgKCFuaWRfbGlzdCB8fCBzdHJsZW4obmlkX2xpc3QpID09IDApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Zm9yIChwID0gbmlkX2xpc3Q7ICpwOyBwKyspIHtcbitcdFx0aWYgKCpwID09ICcsJykge1xuK1x0XHRcdGlmICghaGFzX2RpZ2l0KSB7XG4rXHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjogSW52YWxpZCBuaWRfbGlzdCBmb3JtYXRcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0fVxuK1x0XHRcdGlmIChpbl9yYW5nZSBcdTAwMjZcdTAwMjYgcHJldl9udW0gXHUwMDNlIGN1cnJfbnVtKSB7XG4rXHRcdFx0XHRmcHJpbnRmKHN0ZGVycixcbitcdFx0XHRcdFx0XCJFcnJvcjogSW52YWxpZCByYW5nZSAlZC0lZCAoc3RhcnQgbXVzdCBiZSBcdTAwM2M9IGVuZClcXG5cIixcbitcdFx0XHRcdFx0cHJldl9udW0sIGN1cnJfbnVtKTtcbitcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHR9XG4rXHRcdFx0aSA9IDA7XG4rXHRcdFx0aGFzX2RpZ2l0ID0gMDtcbitcdFx0XHRpbl9yYW5nZSA9IDA7XG4rXHRcdFx0cHJldl9udW0gPSAwO1xuK1x0XHRcdGN1cnJfbnVtID0gMDtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoKnAgPT0gJy0nKSB7XG4rXHRcdFx0aWYgKCFoYXNfZGlnaXQpIHtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLFxuK1x0XHRcdFx0XHRcIkVycm9yOiBJbnZhbGlkIG5pZF9saXN0IGZvcm1hdCBcIik7XG4rXHRcdFx0XHRmcHJpbnRmKHN0ZGVycixcbitcdFx0XHRcdFx0XCIoZGFzaCB3aXRob3V0IHByZWNlZGluZyBudW1iZXIpXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoaW5fcmFuZ2UpIHtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiBNdWx0aXBsZSBkYXNoZXMgaW4gbmlkX2xpc3RcXG5cIik7XG4rXHRcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0fVxuK1x0XHRcdHByZXZfbnVtID0gY3Vycl9udW07XG4rXHRcdFx0Y3Vycl9udW0gPSAwO1xuK1x0XHRcdGkgPSAwO1xuK1x0XHRcdGhhc19kaWdpdCA9IDA7XG4rXHRcdFx0aW5fcmFuZ2UgPSAxO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhcikqcCkpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjogSW52YWxpZCBjaGFyYWN0ZXIgJyVjJyBpbiBuaWRfbGlzdFxcblwiLCAqcCk7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChpIFx1MDAzZSA1KSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IE5JRCB0b28gbG9uZyAobWF4IDY1NTM2KVxcblwiKTtcbitcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdH1cbitcdFx0Y3Vycl9udW0gPSBjdXJyX251bSAqIDEwICsgKCpwIC0gJzAnKTtcbitcdFx0aSsrO1xuK1x0XHRoYXNfZGlnaXQgPSAxO1xuK1x0fVxuK1xuK1x0aWYgKCFoYXNfZGlnaXQpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IEludmFsaWQgbmlkX2xpc3QgZm9ybWF0XFxuXCIpO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXG4rXHRpZiAoaW5fcmFuZ2UgXHUwMDI2XHUwMDI2IHByZXZfbnVtIFx1MDAzZSBjdXJyX251bSkge1xuK1x0XHRmcHJpbnRmKHN0ZGVycixcbitcdFx0XHRcIkVycm9yOiBJbnZhbGlkIHJhbmdlICVkLSVkIChzdGFydCBtdXN0IGJlIFx1MDAzYz0gZW5kKVxcblwiLFxuK1x0XHRcdHByZXZfbnVtLCBjdXJyX251bSk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK3tcbitcdGNvbnN0IGNoYXIgKm91dHB1dF9maWxlID0gTlVMTDtcbitcdGNoYXIgZmlsdGVyX2NtZFtNQVhfQ01EX0xFTl07XG4rXHRGSUxFICpvdXRwdXQgPSBOVUxMO1xuK1x0aW50IGZkID0gLTE7XG4rXHRzc2l6ZV90IHJldDtcbitcdGNoYXIgYnVmWzQwOTZdO1xuK1x0aW50IG9wdDtcbitcdHNpemVfdCBjbWRfbGVuID0gMDtcbitcbitcdHNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTtcbitcbitcdHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0ge1xuK1x0XHR7XCJtb2RlXCIsXHRyZXF1aXJlZF9hcmd1bWVudCwgMCwgJ20nfSxcbitcdFx0e1wibmlkXCIsXHRcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnbid9LFxuK1x0XHR7XCJvdXRwdXRcIixcdHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnbyd9LFxuK1x0XHR7XCJoZWxwXCIsXHRub19hcmd1bWVudCxcdCAgIDAsICdoJ30sXG4rXHRcdHswLCAwLCAwLCAwfVxuK1x0fTtcbitcbitcdGZpbHRlcl9jbWRbMF0gPSAnXFwwJztcbitcbitcdGlmIChhcmdjIFx1MDAzZSAxKSB7XG4rXHRcdGZvciAoaW50IGkgPSAxOyBpIFx1MDAzYyBhcmdjOyBpKyspIHtcbitcdFx0XHRpZiAoc3RyY21wKGFyZ3ZbaV0sIFwiLWhcIikgPT0gMCB8fCBzdHJjbXAoYXJndltpXSwgXCItLWhlbHBcIikgPT0gMCkge1xuK1x0XHRcdFx0dXNhZ2UoYXJndlswXSk7XG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIENoZWNrIGlmIHBhZ2Vfb3duZXIgZXhpc3RzIGFuZCBpcyByZWFkYWJsZSAqL1xuK1x0aWYgKGFjY2VzcyhcIi9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJcIiwgRl9PSykgIT0gMCkge1xuK1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKVxuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIGRvZXMgbm90IGV4aXN0XFxuXCIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGVycm9yKFwiRXJyb3IgYWNjZXNzaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJcIik7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIk1ha2Ugc3VyZSBwYWdlX293bmVyIGlzIGVuYWJsZWQgaW4ga2VybmVsXFxuXCIpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcbitcdHdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgXCJtOm46bzpoXCIsIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKSB7XG4rXHRcdGludCBsZW47XG4rXG4rXHRcdHN3aXRjaCAob3B0KSB7XG4rXHRcdGNhc2UgJ20nOiB7XG4rXHRcdFx0Y29uc3QgY2hhciAqbW9kZSA9IG9wdGFyZztcbitcbitcdFx0XHRpZiAodmFsaWRhdGVfbW9kZShtb2RlKSBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiAxO1xuK1x0XHRcdGxlbiA9IHNucHJpbnRmKGZpbHRlcl9jbWQgKyBjbWRfbGVuLCBNQVhfQ01EX0xFTiAtIGNtZF9sZW4sXG4rXHRcdFx0XHQgICAgICAgXCIlc21vZGU9JXNcIiwgY21kX2xlbiBcdTAwM2UgMCA/IFwiIFwiIDogXCJcIiwgbW9kZSk7XG4rXHRcdFx0aWYgKGxlbiBcdTAwM2MgMCB8fCBjbWRfbGVuICsgbGVuIFx1MDAzZT0gTUFYX0NNRF9MRU4pIHtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiBDb21tYW5kIHRvbyBsb25nXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIDE7XG4rXHRcdFx0fVxuK1x0XHRcdGNtZF9sZW4gKz0gbGVuO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdGNhc2UgJ24nOiB7XG4rXHRcdFx0Y29uc3QgY2hhciAqbmlkX2xpc3QgPSBvcHRhcmc7XG4rXG4rXHRcdFx0aWYgKHZhbGlkYXRlX25pZF9saXN0KG5pZF9saXN0KSBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiAxO1xuK1x0XHRcdGxlbiA9IHNucHJpbnRmKGZpbHRlcl9jbWQgKyBjbWRfbGVuLCBNQVhfQ01EX0xFTiAtIGNtZF9sZW4sXG4rXHRcdFx0XHQgICAgICAgXCIlc25pZD0lc1wiLCBjbWRfbGVuIFx1MDAzZSAwID8gXCIgXCIgOiBcIlwiLCBuaWRfbGlzdCk7XG4rXHRcdFx0aWYgKGxlbiBcdTAwM2MgMCB8fCBjbWRfbGVuICsgbGVuIFx1MDAzZT0gTUFYX0NNRF9MRU4pIHtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiBDb21tYW5kIHRvbyBsb25nXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIDE7XG4rXHRcdFx0fVxuK1x0XHRcdGNtZF9sZW4gKz0gbGVuO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdGNhc2UgJ28nOlxuK1x0XHRcdG91dHB1dF9maWxlID0gb3B0YXJnO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdoJzpcbitcdFx0XHQvKiBBbHJlYWR5IGhhbmRsZWQgYWJvdmUgKi9cbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHR1c2FnZShhcmd2WzBdKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogQXQgbGVhc3Qgb25lIGZpbHRlciBtdXN0IGJlIHNwZWNpZmllZCAqL1xuK1x0aWYgKGNtZF9sZW4gPT0gMCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJFcnJvcjogQXQgbGVhc3Qgb25lIGZpbHRlciAoLW0gb3IgLW4pIG11c3QgYmUgc3BlY2lmaWVkXFxuXFxuXCIpO1xuK1x0XHR1c2FnZShhcmd2WzBdKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHQvKiBPcGVuIHBhZ2Vfb3duZXIgZm9yIHJlYWQtd3JpdGUgLSB0aGlzIHdpbGwgZmFpbCBpZiBrZXJuZWwgZG9lc24ndCBzdXBwb3J0IHdyaXRlICovXG4rXHRmZCA9IG9wZW4oXCIvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXCIsIE9fUkRXUik7XG4rXHRpZiAoZmQgXHUwMDNjIDApIHtcbitcdFx0aWYgKGVycm5vID09IEVBQ0NFUyB8fCBlcnJubyA9PSBFUEVSTSkge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIkVycm9yOiAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIFwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJkb2VzIG5vdCBzdXBwb3J0IHdyaXRlIGFjY2Vzc1xcblwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJUaGlzIGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IFwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJwZXItZmQgZmlsdGVyaW5nLlxcblwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJQbGVhc2UgZW5zdXJlIHlvdSBoYXZlIGEga2VybmVsIHdpdGggXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcInBlci1mZCBmaWx0ZXJpbmcgc3VwcG9ydC5cXG5cIik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cGVycm9yKFwiRXJyb3Igb3BlbmluZyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyXCIpO1xuK1x0XHR9XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0aWYgKG91dHB1dF9maWxlKSB7XG4rXHRcdG91dHB1dCA9IGZvcGVuKG91dHB1dF9maWxlLCBcIndcIik7XG4rXHRcdGlmICghb3V0cHV0KSB7XG4rXHRcdFx0cGVycm9yKFwib3BlbiBvdXRwdXQgZmlsZVwiKTtcbitcdFx0XHRjbG9zZShmZCk7XG4rXHRcdFx0cmV0dXJuIDE7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdG91dHB1dCA9IHN0ZG91dDtcbitcdH1cbitcbitcdHJldCA9IHdyaXRlKGZkLCBmaWx0ZXJfY21kLCBzdHJsZW4oZmlsdGVyX2NtZCkpO1xuK1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRpZiAoZXJybm8gPT0gRUlOVkFMKSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiRXJyb3I6IEtlcm5lbCByZWplY3RlZCB0aGUgZmlsdGVyIGNvbW1hbmQuXFxuXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIlBvc3NpYmxlIGNhdXNlczpcXG5cIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiICAtIEtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHBlci1mZCBmaWx0ZXJpbmdcXG5cIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiICAtIE5VTUEgbm9kZSBoYXMgbm8gbWVtb3J5XFxuXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIiAgLSBVbmtub3duIHJlYXNvblxcblwiKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwZXJyb3IoXCJ3cml0ZSBmaWx0ZXIgY29tbWFuZFwiKTtcbitcdFx0fVxuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmICgoc2l6ZV90KXJldCAhPSBzdHJsZW4oZmlsdGVyX2NtZCkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIldhcm5pbmc6IFBhcnRpYWwgd3JpdGUgKCV6ZC8lenUpXFxuXCIsIHJldCwgc3RybGVuKGZpbHRlcl9jbWQpKTtcbitcbitcdC8qIFJlYWQgYW5kIGRpc3BsYXkgZmlsdGVyZWQgb3V0cHV0ICovXG4rXHRyZXQgPSAwO1xuK1x0d2hpbGUgKChyZXQgPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpKSkgXHUwMDNlIDApIHtcbitcdFx0c2l6ZV90IHdyaXR0ZW4gPSBmd3JpdGUoYnVmLCAxLCByZXQsIG91dHB1dCk7XG4rXG4rXHRcdGlmICh3cml0dGVuICE9IChzaXplX3QpcmV0KSB7XG4rXHRcdFx0aWYgKGVycm5vID09IEVQSVBFKSB7XG4rXHRcdFx0XHQvKiBQaXBlIGNsb3NlZCwgdHJlYXQgYXMgc3VjY2VzcyAqL1xuK1x0XHRcdFx0cmV0ID0gMDtcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdH1cbitcdFx0XHRwZXJyb3IoXCJ3cml0ZSBvdXRwdXRcIik7XG4rXHRcdFx0cmV0ID0gLTE7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0cGVycm9yKFwicmVhZCBwYWdlX293bmVyXCIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmIChmZmx1c2gob3V0cHV0KSkge1xuK1x0XHRpZiAoZXJybm8gPT0gRVBJUEUpIHtcbitcdFx0XHQvKiBQaXBlIGNsb3NlZCwgdHJlYXQgYXMgc3VjY2VzcyAqL1xuK1x0XHRcdHJldCA9IDA7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cGVycm9yKFwiZmx1c2ggb3V0cHV0XCIpO1xuK1x0XHRcdHJldCA9IC0xO1xuK1x0XHR9XG4rXHR9XG4rXG4rb3V0OlxuK1x0Y2xvc2UoZmQpO1xuK1x0aWYgKG91dHB1dCAhPSBzdGRvdXQpXG4rXHRcdGZjbG9zZShvdXRwdXQpO1xuK1x0cmV0dXJuIHJldCBcdTAwM2MgMCA/IDEgOiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjIwOjA1LjExNjIzMTEyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNzgyMzQyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGFnZSBPd25lciBGaWx0ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9wYWdlX293bmVyLmNgIGFuZCB0aHJvd3MgaW4gYSBuZXcgdG9vbCwgYHRvb2xzL21tL3BhZ2Vfb3duZXJfZmlsdGVyLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwb3RlbnRpYWxseSB1c2VmdWwgYWRkaXRpb24uIEl0J3MgZ2l2aW5nIHVzIHNvbWUgZmlsdGVyaW5nIG9wdGlvbnMgZm9yIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCwgd2hpY2ggY291bGQgYmUgaHVnZSBmb3IgaXNvbGF0aW5nIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3Vlcy4gQmVpbmcgYWJsZSB0byBmaWx0ZXIgdGhlIG91dHB1dCBvZiB0aGF0IGlzIGEgZ2FtZSBjaGFuZ2VyIGZvciBkZWJ1Z2dpbmcuXG5cblRoZSBwYXRjaCBpbXBsZW1lbnRzIGZpbHRlcmluZyBieSBwYXJzaW5nIGNvbW1hbmRzIHdyaXR0ZW4gdG8gdGhlIGZpbGUgZGVzY3JpcHRvcjsgc3BlY2lmaWNhbGx5IGl0J3MgbG9va2luZyBmb3IgXCJtb2RlPVwiIGFuZCBcIm5pZD1cIi4gVGhhdCdzIGFsbCBoYW5kbGVkIGJ5IGBwYWdlX293bmVyX3dyaXRlYC4gQSBgc3RydWN0IHBhZ2Vfb3duZXJfZmlsdGVyX3N0YXRlYCBpcyBhbGxvY2F0ZWQgYW5kIHN0b3JlZCBwZXItZmlsZSBvcGVuLCBtZWFuaW5nIGVhY2ggc2Vzc2lvbiBnZXRzIGl0cyBvd24gZmlsdGVyLCB3aGljaCBpcyBzbWFydC4gVGhlbiwgdGhlIGFjdHVhbCBgcmVhZF9wYWdlX293bmVyYCBmdW5jdGlvbiB1c2VzIHRoaXMgc3RhdGUgdG8gZG8gdGhlIGFjdHVhbCBmaWx0ZXJpbmcuXG5cbk5vdywgbXkga2V5IHF1ZXN0aW9uczogSXMgdGhpcyBjb2RlIGFjdHVhbGx5ICpyZWFjaGFibGUqPyBZZXAsIGRlYnVnZnMsIHNvIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYC4gVGhhdCdzIGdvb2Q7IGl0J3MgcmlnaHQgd2hlcmUgd2UnZCBleHBlY3QgaXQuIERvZXMgaXQgKmZ1bmN0aW9uKiBhcyBjbGFpbWVkPyBZZXMsIHRoZSBjb3JlIGxvZ2ljIGlzIHRoZXJlLiBUaGUgYHBhZ2Vfb3duZXJfd3JpdGVgIGZ1bmN0aW9uIHBhcnNlcyBvdXIgaW5wdXQgYW5kIHRoZSBuZXcgc3RhdGUgaXMgdXNlZCB0byBmaWx0ZXIgcmVhZHMuXG5cbkFuZCB0aGUgbmV4dCB0aGluZyBJJ20gdGhpbmtpbmcgaXMsICp0aGlzIG5lZWRzIGZ1enppbmcqLiBBbnkgdGltZSB5b3UncmUgcGFyc2luZyB1c2VyIGlucHV0LCB5b3UncmUgb3BlbmluZyB0aGUgZG9vciB0byBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBgcGFnZV9vd25lcl93cml0ZWAgaXMgdGhlIG9idmlvdXMgdGFyZ2V0LlxuXG5BbHJpZ2h0LCBsZXQncyBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxhY2UuIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGBtbS9wYWdlX293bmVyLmNgLCBpcyBjb25kaXRpb25hbCBvbiBgQ09ORklHX1BBR0VfT1dORVJgLiBMZXQgbWUgdmVyaWZ5IHRoYXQncyB0aGUgY2FzZS4gTWFrZSBzdXJlIHRoYXQncyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTYxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6MjA6MTEuNDk0NDY3NDcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzY2MTgzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQQUdFX09XTkVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTExOT1vYmotJChDT05GSUdfREVCVUdfVk1fUEdUQUJMRSkgKz0gZGVidWdfdm1fcGd0YWJsZS5vXFxubW0vTWFrZWZpbGU6MTIwOm9iai0kKENPTkZJR19QQUdFX09XTkVSKSArPSBwYWdlX293bmVyLm9cXG5tbS9NYWtlZmlsZS0xMjEtb2JqLSQoQ09ORklHX01FTU9SWV9JU09MQVRJT04pICs9IHBhZ2VfaXNvbGF0aW9uLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6MjA6MTEuNjkyMTM2MjYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5NDkwNzM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgQ09ORklHX1BBR0VfT1dORVJgIGlzIGRlZmluaXRlbHkgYSBtYW5kYXRvcnkgcmVxdWlyZW1lbnQgaGVyZS4gR290IGl0LiBBbmQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHdlIGFsc28gbmVlZCBgQ09ORklHX0RFQlVHX0ZTYCBlbmFibGVkLCBzaW5jZSB0aGUgZnVuY3Rpb25hbGl0eSBpcyBleHBvc2VkIHRocm91Z2ggdGhlIGRlYnVnIGZpbGVzeXN0ZW0uIEJlc3QgcHJhY3RpY2UgaXMgdG8gZW5zdXJlIGJvdGggYXJlIGF2YWlsYWJsZSwgYmVmb3JlIHdlIGdldCBhbnkgZnVydGhlci4gTm93LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgYENPTkZJR19QQUdFX09XTkVSYCBoYXMgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gdG8gbWFrZSBjZXJ0YWluLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6OTcwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjIwOjE1LjE4NzA0Njg2M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMyNjc1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfT1dORVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTczPWNvbmZpZyBTTFVCX1JDVV9ERUJVR1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMDQtXFxubW0vS2NvbmZpZy5kZWJ1ZzoxMDU6Y29uZmlnIFBBR0VfT1dORVJcXG5tbS9LY29uZmlnLmRlYnVnLTEwNi1cXHRib29sIFxcXCJUcmFjayBwYWdlIG93bmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDoyMDoxNS40MTAzMjA3NDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzcyNzc1MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIERlYnVnIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gZGlnIGludG8gdGhlc2UgZGVidWcgb3B0aW9ucz8gTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBtbS9LY29uZmlnLmRlYnVnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTA1LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSBncmFudWxhciBkZWJ1ZyBmZWF0dXJlcyBhcmUgZGVmaW5lZCwgcmlnaHQ/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZGV0ZXJtaW5lIGhvdyB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWdnaW5nIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgc2luY2Ugd2UncmUgbG9va2luZyBhdCB0aGluZ3MgdGhhdCBhcmUgdHlwaWNhbGx5IGVuYWJsZWQgZHVyaW5nIGRldmVsb3BtZW50IG9yIGZvciB2ZXJ5IHNwZWNpZmljIHRyb3VibGVzaG9vdGluZy4gSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgb2ZmZXIgYSBjbGVhciBvdmVydmlldyBvZiB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGRlc2NyaXB0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGVidWcgZmVhdHVyZXMgaW4gdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDoyMDoxOS4xODMwOTg0ODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0ICBUaGlzIGlzIGRlc2lnbmVkIGFzIGEgZGVidWdnaW5nIGZlYXR1cmUsIG5vdCBhIHNlY3VyaXR5IGZlYXR1cmUuXFxuIDEwMTpcXHRcXHQgIE9iamVjdHMgYXJlIHNvbWV0aW1lcyByZWN5Y2xlZCB3aXRob3V0IFJDVSBkZWxheSB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTA0OlxcdFxcbiAxMDU6XFx0Y29uZmlnIFBBR0VfT1dORVJcXG4gMTA2OlxcdFxcdGJvb2wgXFxcIlRyYWNrIHBhZ2Ugb3duZXJcXFwiXFxuIDEwNzpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlRcXG4gMTA4OlxcdFxcdHNlbGVjdCBERUJVR19GU1xcbiAxMDk6XFx0XFx0c2VsZWN0IFNUQUNLVFJBQ0VcXG4gMTEwOlxcdFxcdHNlbGVjdCBTVEFDS0RFUE9UXFxuIDExMTpcXHRcXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cXG4gMTEyOlxcdFxcdGhlbHBcXG4gMTEzOlxcdFxcdCAgVGhpcyBrZWVwcyB0cmFjayBvZiB3aGF0IGNhbGwgY2hhaW4gaXMgdGhlIG93bmVyIG9mIGEgcGFnZSwgbWF5XFxuIDExNDpcXHRcXHQgIGhlbHAgdG8gZmluZCBiYXJlIGFsbG9jX3BhZ2UocykgbGVha3MuIEV2ZW4gaWYgeW91IGluY2x1ZGUgdGhpc1xcbiAxMTU6XFx0XFx0ICBmZWF0dXJlIG9uIHlvdXIgYnVpbGQsIGl0IGlzIGRpc2FibGVkIGluIGRlZmF1bHQuIFlvdSBzaG91bGQgcGFzc1xcbiAxMTY6XFx0XFx0ICBcXFwicGFnZV9vd25lcj1vblxcXCIgdG8gYm9vdCBwYXJhbWV0ZXIgaW4gb3JkZXIgdG8gZW5hYmxlIGl0LiBFYXRzXFxuIDExNzpcXHRcXHQgIGEgZmFpciBhbW91bnQgb2YgbWVtb3J5IGlmIGVuYWJsZWQuIFNlZSB0b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xcbiAxMTg6XFx0XFx0ICBmb3IgdXNlci1zcGFjZSBoZWxwZXIuXFxuIDExOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6MjA6MTkuMTgzMjY0NjYyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4MjEwNDgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxlbWVudGF0aW9uIG9mIGBwYWdlX293bmVyPW9uYCBmb3IgU3l6a2FsbGVyKipcblxuT2theSwgc28gdGhlIG1lc3NhZ2Ugc2F5cywgXCJZb3Ugc2hvdWxkIHBhc3MgYHBhZ2Vfb3duZXI9b25gIHRvIGEgYm9vdCBwYXJhbWV0ZXIgdG8gZW5hYmxlIGl0LlwiIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBIYW5nIG9uLCB0aG91Z2gsIFN5emthbGxlciAqY2FuKiBwYXNzIGJvb3QgcGFyYW1ldGVycywgYnV0IGl0J3Mgbm90IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlzIGl0PyBDb3VsZCBJIGVuYWJsZSBpdCB0aHJvdWdoIHN5c2ZzIG9yIGRlYnVnZnM/IE5vLCB0aGF0J3Mgbm90IGhvdyBpdCB3b3JrczsgaXQncyBhIGJvb3QtdGltZSB0aGluZy4gTm93IEkgcmVjYWxsIHRoYXQgbWF5YmUsIGp1c3QgbWF5YmUsIFN5emthbGxlciBhbHJlYWR5IGhhcyBgcGFnZV9vd25lcj1vbmAgc2V0IGFzIGEgZGVmYXVsdCBib290IHBhcmFtZXRlciBmb3Igc29tZSBvZiBpdHMgY29uZmlndXJhdGlvbnMuLi4gb3IgcGVyaGFwcyBub3QuIEVpdGhlciB3YXksIHdlIGNhbiBkZWZpbml0ZWx5IHNwZWNpZnkgYFBBR0VfT1dORVJgIGRpcmVjdGx5IGluIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLCBjYW4ndCB3ZT9cblxuQWxyaWdodCwgdGhlIHBhdGNoIGFkZHMgZnVuY3Rpb25zOiBgcGFnZV9vd25lcl93cml0ZWAsIGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYW5kIGBwcmludF9wYWdlX293bmVyYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIHBheWluZyBhdHRlbnRpb24gdG8uIExldCBtZSBub3RlIHRob3NlIGRvd246IGBwYWdlX293bmVyX3dyaXRlYCwgYHBhZ2Vfb3duZXJfb3BlbmAsIGBwYWdlX293bmVyX3JlbGVhc2VgLCBgcHJpbnRfcGFnZV9vd25lcmAsIGFuZCBvZiBjb3Vyc2UgdGhlIGByZWFkX3BhZ2Vfb3duZXJgIGZ1bmN0aW9uIGFzIHdlbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlZ3JhdGUuXG5cbk9rYXksIGxldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgcGFnZV9vd25lcl93cml0ZWAgaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHByb2JhYmx5IGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTcxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6MjA6MjQuMzY1MzcyNTE1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ4OTE0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9vd25lcl93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX293bmVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9vd25lci5jPTkxMz1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy05MTgtXFxubW0vcGFnZV9vd25lci5jOjkxOTpzdGF0aWMgc3NpemVfdCBwYWdlX293bmVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbm1tL3BhZ2Vfb3duZXIuYy05MjAtXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MTAwMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwYWdlX293bmVyX2ZvcHMgPSB7XFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMTAwMy1cXHQucmVsZWFzZVxcdD0gcGFnZV9vd25lcl9yZWxlYXNlLFxcbm1tL3BhZ2Vfb3duZXIuYzoxMDA0OlxcdC53cml0ZVxcdFxcdD0gcGFnZV9vd25lcl93cml0ZSxcXG5tbS9wYWdlX293bmVyLmMtMTAwNS1cXHQucmVhZFxcdFxcdD0gcmVhZF9wYWdlX293bmVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDoyMDoyNC40NzAyNzA2OTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5MDY4NjA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zOlxuXG4qKkRpZ2dpbmcgaW50byBgcGFnZV9vd25lcl9vcGVuYCBhbmQgYHBhZ2Vfb3duZXJfcmVsZWFzZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgcGFnZV9vd25lcl9vcGVuYCBhbmQgYHBhZ2Vfb3duZXJfcmVsZWFzZWAgYXJlIGludGVyYWN0aW5nLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIFtVc2VyJ3MgZmllbGRdLCBJIGtub3cgdGhlc2UgYXJlIGxpa2VseSBjcml0aWNhbCBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHJlc291cmNlIG93bmVyc2hpcCBhbmQgbGlmZWN5Y2xlLCBzcGVjaWZpY2FsbHkgYXQgdGhlIHBhZ2UgbGV2ZWwuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgYXNwZWN0cyBvZiB0aGVzZSBmdW5jdGlvbnMuIEFyZSB0aGV5IGxvY2tpbmcgbWVjaGFuaXNtcywgcmVmZXJlbmNlIGNvdW50ZXJzLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgdGhleSBtYW5pcHVsYXRpbmc/IEknbSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeSwgcmVzb3VyY2UgY29udGVudGlvbiwgYW5kLCBvZiBjb3Vyc2UsIHBvdGVudGlhbCBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIHN5c3RlbS4gVGhlIGRldGFpbHMgb2YgaW1wbGVtZW50YXRpb24gbXVzdCBxdWlja2x5IGJlY29tZSBjbGVhciBpbiBteSBtaW5kLiBBcmUgdGhleSB1c2luZyBhdG9taWMgb3BlcmF0aW9ucyBvciByZWx5IG9uIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjIwOjI4Ljk2MDk1OTI0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MTIyMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2Vfb3duZXJfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX293bmVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9vd25lci5jPTg5MD1zdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxcbi0tXFxubW0vcGFnZV9vd25lci5jLTg5Ny1cXG5tbS9wYWdlX293bmVyLmM6ODk4OnN0YXRpYyBpbnQgcGFnZV9vd25lcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbm1tL3BhZ2Vfb3duZXIuYy04OTkte1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTEwMDA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9mb3BzID0ge1xcbm1tL3BhZ2Vfb3duZXIuYy0xMDAxLVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxubW0vcGFnZV9vd25lci5jOjEwMDI6XFx0Lm9wZW5cXHRcXHQ9IHBhZ2Vfb3duZXJfb3BlbixcXG5tbS9wYWdlX293bmVyLmMtMTAwMy1cXHQucmVsZWFzZVxcdD0gcGFnZV9vd25lcl9yZWxlYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDoyMDoyOS4xMDYwODkyMTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk4Njk0ODAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhZ2UgT3duZXIgRmlsdGVyaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgZmlsdGVyaW5nIHRvIHRoZSBgcGFnZV9vd25lcmAgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vcGFnZV9vd25lci5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCB0aGlzIGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBlc3BlY2lhbGx5IGJlY2F1c2UgaXQgaW50cm9kdWNlcyB1c2VyLWZhY2luZyBjaGFuZ2VzLiBMZXQncyBicmVhayBpdCBkb3duLlxuXG5GaXJzdCwgaXQgYWRkcyBhIG5ldyBmdW5jdGlvbiwgYHBhZ2Vfb3duZXJfd3JpdGVgLCB3aGljaCBwYXJzZXMgdXNlciBpbnB1dC4gVGhpcyBpcyAqY3J1Y2lhbCogYmVjYXVzZSBhbnl0aGluZyB0aGF0IHRha2VzIGlucHV0IGZyb20gYSB1c2VyLCBlc3BlY2lhbGx5IGZvciBrZXJuZWwgZmVhdHVyZXMsIHNjcmVhbXMgXCJwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRcIi4gVGhlIGByZWFkX3BhZ2Vfb3duZXJgIGZ1bmN0aW9uIHV0aWxpemVzIHRoZSBmaWx0ZXIgc3RhdGUsIGFuZCBgcHJpbnRfcGFnZV9vd25lcmAgZm9ybWF0cyBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBmaWx0ZXJzLiBUaGVzZSBhcmUgYWxsIHBhcnQgb2YgdGhlIHNhbWUgZmlsdHJhdGlvbiBjaGFpbi5cblxuVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgcGFnZV9vd25lcl93cml0ZWAsIGBwYWdlX293bmVyX29wZW5gLCBgcGFnZV9vd25lcl9yZWxlYXNlYCwgYHByaW50X3BhZ2Vfb3duZXJgLCBhbmQgYHJlYWRfcGFnZV9vd25lcmAuXG5cbkxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLCBgUEFHRV9PV05FUmAgc2VlbXMgdG8gYmUgdGhlIGNvbnRyb2xsaW5nIGZsYWcsIHdoaWNoIGFsc28gc2VsZWN0cyBgREVCVUdfRlNgIGFuZCBgUEFHRV9FWFRFTlNJT05gLiBUaGVzZSBhcmUgaW1wb3J0YW50IHRvIG5vdGUsIGFzIHRoZSBjb25maWd1cmF0aW9ucyBjYW4gaGF2ZSBhbiBpbXBhY3QuXG5cbk5vdywgSSdtIHNwb3R0aW5nIGEgY2hhbmdlIGluIHRoZSBkZWJ1Z2ZzIGZpbGUgcGVybWlzc2lvbnM6IGl0J3MgZ29pbmcgZnJvbSByZWFkLW9ubHkgdG8gcmVhZC93cml0ZSEgIFRoZSBwYXRjaCBjaGFuZ2VzIGBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwicGFnZV9vd25lclwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcdTAwMjZwYWdlX293bmVyX2ZvcHMpYCB0byBgZGVidWdmc19jcmVhdGVfZmlsZShcInBhZ2Vfb3duZXJcIiwgMDYwMCwgTlVMTCwgTlVMTCwgXHUwMDI2cGFnZV9vd25lcl9mb3BzKWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCBleHBsaWNpdGx5IGVuYWJsZXMgd3JpdGluZyB0byB0aGUgZmlsZSwgd2hpY2ggcmVpbmZvcmNlcyB0aGUgbmVlZCB0byBmdXp6IHRoZSB3cml0ZSBoYW5kbGVyLlxuXG5TbywgdGhlIGNvcmUgbG9naWMgaGVyZTogdGhlIHBhdGNoJ3MgcHVycG9zZSBpcyB0byBhbGxvdyBmaWx0ZXJpbmcgb2YgcGFnZSBvd25lciBpbmZvcm1hdGlvbiB0aHJvdWdoIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYC4gVGhlIGFkZGl0aW9uIG9mIGBwYWdlX293bmVyX3dyaXRlYCBmb3IgdXNlciBpbnB1dCwgcGx1cyB0aGUgbW9kaWZpY2F0aW9ucyB0byBgcmVhZF9wYWdlX293bmVyYCBhbmQgYHByaW50X3BhZ2Vfb3duZXJgIHRvIGhhbmRsZSBmaWx0ZXJpbmcgbG9naWMsIG1ha2UgaXQgYSBkZWZpbml0ZSB0YXJnZXQgZm9yIGZ1enppbmcuIFVzZXIgaW5wdXQgcGFyc2luZyBpcyB0aGUgd2VhayBwb2ludC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLi4uIGBwYWdlX293bmVyX3dyaXRlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGdvb2QuICBTeXprYWxsZXIgY2FuIGZ1enogdGhvc2UgYXMgbG9uZyBhcyB0aGV5J3JlIGluIHRoZSBmb2N1cyBsaXN0LiBBbmQgbG9va2luZyBiYWNrLCBgcmVhZF9wYWdlX293bmVyYCBhbmQgYHByaW50X3BhZ2Vfb3duZXJgIHdlcmUgYWxyZWFkeSB0aGVyZSwgYnV0IHRoZXkgd2VyZSBtb2RpZmllZCwgbWVhbmluZyB0aGV5J3JlIGFsc28gaW50ZXJlc3RpbmcuXG5cblRvIHN1bW1hcml6ZSwgYWxsIHRoZSBmdW5jdGlvbnMgYXJlIGxpc3RlZDpcbmBwYWdlX293bmVyX29wZW5gXG5gcGFnZV9vd25lcl9yZWxlYXNlYFxuYHBhZ2Vfb3duZXJfd3JpdGVgXG5gcHJpbnRfcGFnZV9vd25lcmBcbmByZWFkX3BhZ2Vfb3duZXJgXG5cbkkgdGhpbmsgSSd2ZSBnb3QgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgcGF0Y2gncyBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcsIGFuZCBJJ20gcmVhZHkgdG8gc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc1OCwiT3V0cHV0VG9rZW5zIjoxNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6MjA6MzguMDkzMDQwNDI0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxNzgxODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX09XTkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9vd25lcl93cml0ZVwiLFxuICAgIFwicGFnZV9vd25lcl9vcGVuXCIsXG4gICAgXCJwYWdlX293bmVyX3JlbGVhc2VcIixcbiAgICBcInByaW50X3BhZ2Vfb3duZXJcIixcbiAgICBcInJlYWRfcGFnZV9vd25lclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd3JpdGUgaGFuZGxlciAoYHBhZ2Vfb3duZXJfd3JpdGVgKSBmb3IgdGhlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCBkZWJ1Z2ZzIGZpbGUgdG8gc3VwcG9ydCBmaWx0ZXJpbmcuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHJlYWQgaGFuZGxlciAoYHJlYWRfcGFnZV9vd25lcmApIGFuZCBvdXRwdXQgZm9ybWF0dGluZyAoYHByaW50X3BhZ2Vfb3duZXJgKSB0byBhcHBseSB0aGUgZmlsdGVycy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBhcnNpbmcgdXNlciBpbnB1dCBhbmQgbWFuYWdpbmcgcGVyLWZkIHN0YXRlLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX09XTkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9vd25lcl93cml0ZVwiLFxuICAgIFwicGFnZV9vd25lcl9vcGVuXCIsXG4gICAgXCJwYWdlX293bmVyX3JlbGVhc2VcIixcbiAgICBcInByaW50X3BhZ2Vfb3duZXJcIixcbiAgICBcInJlYWRfcGFnZV9vd25lclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd3JpdGUgaGFuZGxlciAoYHBhZ2Vfb3duZXJfd3JpdGVgKSBmb3IgdGhlIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCBkZWJ1Z2ZzIGZpbGUgdG8gc3VwcG9ydCBmaWx0ZXJpbmcuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHJlYWQgaGFuZGxlciAoYHJlYWRfcGFnZV9vd25lcmApIGFuZCBvdXRwdXQgZm9ybWF0dGluZyAoYHByaW50X3BhZ2Vfb3duZXJgKSB0byBhcHBseSB0aGUgZmlsdGVycy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBhcnNpbmcgdXNlciBpbnB1dCBhbmQgbWFuYWdpbmcgcGVyLWZkIHN0YXRlLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdg24k[1] Phase: Succeeded StartedAt: 2026-07-07 20:20:50 +0000 UTC FinishedAt: 2026-07-07 20:20:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 20:20:50 +0000 UTC FinishedAt: 2026-07-07 20:20:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2] Phase: Succeeded StartedAt: 2026-07-07 20:20:50 +0000 UTC FinishedAt: 2026-07-08 00:31:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-07 20:20:50 +0000 UTC FinishedAt: 2026-07-08 00:31:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-07 20:20:50 +0000 UTC FinishedAt: 2026-07-07 20:21:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-07 20:20:50 +0000 UTC FinishedAt: 2026-07-07 20:21:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowdg24k/series-workflowdg24k-convert-artifact-1130189285/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-07 20:21:34 +0000 UTC FinishedAt: 2026-07-07 20:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-07 20:21:34 +0000 UTC FinishedAt: 2026-07-07 20:58:29 +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:*4404a5bb-ec6a-42f6-be2c-b46f75ba3a6a,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-workflowdg24k/series-workflowdg24k-convert-artifact-1130189285/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": "fd1300ce-0eb7-4ecc-af9b-8f533fe77c57", "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-workflowdg24k/series-workflowdg24k-build-action-1910525451/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-07 20:21:34 +0000 UTC FinishedAt: 2026-07-07 20:58:22 +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:*4404a5bb-ec6a-42f6-be2c-b46f75ba3a6a,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-workflowdg24k/series-workflowdg24k-convert-artifact-1130189285/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": "fd1300ce-0eb7-4ecc-af9b-8f533fe77c57", "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-workflowdg24k/series-workflowdg24k-build-action-1910525451/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-07 20:58:29 +0000 UTC FinishedAt: 2026-07-07 20:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-07 20:58:29 +0000 UTC FinishedAt: 2026-07-07 20:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-07 20:58:29 +0000 UTC FinishedAt: 2026-07-07 20:58:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-07 20:58:29 +0000 UTC FinishedAt: 2026-07-07 20:58:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowdg24k/series-workflowdg24k-convert-artifact-4178793920/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-07 20:58:50 +0000 UTC FinishedAt: 2026-07-07 21:01:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-07 20:58:50 +0000 UTC FinishedAt: 2026-07-07 21:00:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fd1300ce-0eb7-4ecc-af9b-8f533fe77c57,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-workflowdg24k/series-workflowdg24k-build-action-1910525451/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-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-07 21:01:04 +0000 UTC FinishedAt: 2026-07-07 21:01:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-07 21:01:04 +0000 UTC FinishedAt: 2026-07-07 21:01:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-07 21:01:04 +0000 UTC FinishedAt: 2026-07-07 21:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-07 21:01:04 +0000 UTC FinishedAt: 2026-07-07 21:26:18 +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:*4404a5bb-ec6a-42f6-be2c-b46f75ba3a6a,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-workflowdg24k/series-workflowdg24k-convert-artifact-4178793920/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": "99caa8b2-ee0a-4b4e-bbfb-797885235347", "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-workflowdg24k/series-workflowdg24k-build-action-1202635644/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-07 21:01:04 +0000 UTC FinishedAt: 2026-07-07 21:26:08 +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:*4404a5bb-ec6a-42f6-be2c-b46f75ba3a6a,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-workflowdg24k/series-workflowdg24k-convert-artifact-4178793920/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": "99caa8b2-ee0a-4b4e-bbfb-797885235347", "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-workflowdg24k/series-workflowdg24k-build-action-1202635644/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-07 21:26:18 +0000 UTC FinishedAt: 2026-07-07 21:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-07 21:26:18 +0000 UTC FinishedAt: 2026-07-07 21:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-07 21:26:18 +0000 UTC FinishedAt: 2026-07-07 21:28:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-07 21:26:18 +0000 UTC FinishedAt: 2026-07-07 21:28:11 +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:*99caa8b2-ee0a-4b4e-bbfb-797885235347,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-workflowdg24k/series-workflowdg24k-build-action-1202635644/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-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-07 21:28:21 +0000 UTC FinishedAt: 2026-07-08 00:31:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-07 21:28:21 +0000 UTC FinishedAt: 2026-07-08 00:31:50 +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":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},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:*fd1300ce-0eb7-4ecc-af9b-8f533fe77c57,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*99caa8b2-ee0a-4b4e-bbfb-797885235347,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-workflowdg24k/series-workflowdg24k-build-action-1910525451/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-workflowdg24k/series-workflowdg24k-build-action-1202635644/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-07 21:28:21 +0000 UTC FinishedAt: 2026-07-07 21:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-07 21:28:21 +0000 UTC FinishedAt: 2026-07-07 21:28:34 +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":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},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-workflowdg24k/series-workflowdg24k-convert-artifact-4200278553/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-07 21:28:21 +0000 UTC FinishedAt: 2026-07-07 21:28:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-07 21:28:21 +0000 UTC FinishedAt: 2026-07-07 21:28:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-07 21:28:21 +0000 UTC FinishedAt: 2026-07-07 21:28:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-07 21:28:41 +0000 UTC FinishedAt: 2026-07-08 00:31:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdg24k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_owner_write","page_owner_open","page_owner_release","print_page_owner","read_page_owner"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fc2c3dcae28347a30ccd76c8817e5719005f1c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"46b53b8a-cf5c-49b2-960a-2259fe4b6b10","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-07 21:28:41 +0000 UTC FinishedAt: 2026-07-08 00:31:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fd1300ce-0eb7-4ecc-af9b-8f533fe77c57,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*99caa8b2-ee0a-4b4e-bbfb-797885235347,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-workflowdg24k/series-workflowdg24k-build-action-1910525451/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-workflowdg24k/series-workflowdg24k-build-action-1202635644/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-workflowdg24k/series-workflowdg24k-convert-artifact-4200278553/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,}