Name: series-workflownccfq Phase: Succeeded StartedAt: 2026-09-09 22:14:58 +0000 UTC FinishedAt: 2026-09-10 02:15:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[0] Phase: Succeeded StartedAt: 2026-09-09 22:14:58 +0000 UTC FinishedAt: 2026-09-09 22:34:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 22:14:58 +0000 UTC FinishedAt: 2026-09-09 22:34:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VSOCKETS_LOOPBACK", "VIRTIO_VSOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VSOCKETS_LOOPBACK", "VIRTIO_VSOCKETS" ], "series_id": "4827e4c8-d504-4ed9-bcb7-4581f10229c5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vsock_connect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zzb2NrX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzdGF0ZSBtYWNoaW5lIGhhbmRsaW5nIGluIHZzb2NrX2Nvbm5lY3QoKSBieSB0cmVhdGluZyBUQ1BfQ0xPU0lORyBzaW1pbGFybHkgdG8gVENQX0VTVEFCTElTSEVEIHdoZW4gY2hlY2tpbmcgc2stXHUwMDNlc2tfc3RhdGUgdXBvbiB3YWtpbmcgZnJvbSBjb25uZWN0aW9uIHdhaXQgYW5kIGVycm9yIGhhbmRsaW5nLiBUaGlzIGNoYW5nZSBhZmZlY3RzIHNvY2tldCBjb250cm9sIGZsb3cgYW5kIHN0YXRlIHRyYW5zaXRpb25zIG9ubHkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgYnVmZmVyIGNvcHlpbmcgb3Igc2l6aW5nLCB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzL3BhZGRpbmcgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdnNvY2tfY29ubmVjdCgpIGluIG5ldC92bXdfdnNvY2svYWZfdnNvY2suYywgY2hhbmdpbmcgdGhlIHN0YXRlIHZhbGlkYXRpb24gbG9naWMgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgZXJyb3IgaGFuZGxpbmcgYnkgYWNjb21tb2RhdGluZyB0aGUgVENQX0NMT1NJTkcgc29ja2V0IHN0YXRlLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIEFGX1ZTT0NLIHNvY2tldCBsaWZlY3ljbGUgdHJhbnNpdGlvbnMgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MTdlZDQ3NjI5NTQwZTgyNzc4ZjA4MGE5ODY2NDFlNzcyNGU2MTYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAyMjozMzoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbmluZGV4IGY4NDA0OThiNThhZmIuLmVlYzVkZDZkYWViYjEgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuQEAgLTE4MzQsMjMgJiM0MzsxODM0LDIwIEBAIHN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbiBcdFx0dGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7XG4gXHRcdGxvY2tfc29jayhzayk7XG4gXG4tXHRcdC8qIENvbm5lY3Rpb24gZXN0YWJsaXNoZWQuIFdoYXRldmVyIGhhcHBlbnMgdG8gc29ja2V0IG9uY2Ugd2Vcbi1cdFx0ICogcmVsZWFzZSBpdCwgdGhhdCYjMzk7cyBub3QgY29ubmVjdCgpJiMzOTtzIGNvbmNlcm4uIE5vIG5lZWQgdG8gZ29cbiYjNDM7XHRcdC8qIENvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLiBXaGF0ZXZlciBoYXBwZW5zIHRvIHNvY2tldCBvbmNlXG4mIzQzO1x0XHQgKiB3ZSByZWxlYXNlIGl0LCB0aGF0JiMzOTtzIG5vdCBjb25uZWN0KCkmIzM5O3MgY29uY2Vybi4gTm8gbmVlZCB0byBnb1xuIFx0XHQgKiBpbnRvIHNpZ25hbCBhbmQgdGltZW91dCBoYW5kbGluZy4gQ2FsbCBpdCBhIGRheS5cbiBcdFx0ICpcbiBcdFx0ICogTm90ZSB0aGF0IGFsbG93aW5nIHRvIFwmIzM0O3Jlc2V0XCYjMzQ7IGFuIGFscmVhZHkgZXN0YWJsaXNoZWQgc29ja2V0XG4gXHRcdCAqIGhlcmUgaXMgcmFjeSBhbmQgaW5zZWN1cmUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEKVxuJiM0MztcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCB8fFxuJiM0MztcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TSU5HKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHQvKiBJZiBjb25uZWN0aW9uIHdhcyBfbm90XyBlc3RhYmxpc2hlZCBhbmQgYSBzaWduYWwvdGltZW91dCBjYW1lXG4gXHRcdCAqIHRvIGJlLCB3ZSB3YW50IHRoZSBzb2NrZXQmIzM5O3Mgc3RhdGUgcmVzZXQuIFVzZXIgc3BhY2UgbWF5IHdhbnRcbiBcdFx0ICogdG8gcmV0cnkuXG4tXHRcdCAqXG4tXHRcdCAqIHNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCBpbXBsaWVzIHRoYXQgc29ja2V0IGlzIG5vdCBvblxuLVx0XHQgKiB2c29ja19jb25uZWN0ZWRfdGFibGUuIFdlIGtlZXAgdGhlIGJpbmRpbmcgYW5kIHRoZSB0cmFuc3BvcnRcbi1cdFx0ICogYXNzaWduZWQuXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgfHwgdGltZW91dCA9PSAwKSB7XG4gXHRcdFx0ZXJyID0gdGltZW91dCA9PSAwID8gLUVUSU1FRE9VVCA6IHNvY2tfaW50cl9lcnJubyh0aW1lb3V0KTtcbkBAIC0xODc1LDcgJiM0MzsxODcyLDggQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuIFx0fVxuIFxuIFx0ZXJyID0gc29ja19lcnJvcihzayk7XG4tXHRpZiAoZXJyKSB7XG4mIzQzO1x0aWYgKGVyciBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0lORykge1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcbiBcdFx0c29jay1cdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zzb2NrX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdnNvY2tfY29ubmVjdCgpIGluIG5ldC92bXdfdnNvY2svYWZfdnNvY2suYywgY2hhbmdpbmcgdGhlIHN0YXRlIHZhbGlkYXRpb24gbG9naWMgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgZXJyb3IgaGFuZGxpbmcgYnkgYWNjb21tb2RhdGluZyB0aGUgVENQX0NMT1NJTkcgc29ja2V0IHN0YXRlLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIEFGX1ZTT0NLIHNvY2tldCBsaWZlY3ljbGUgdHJhbnNpdGlvbnMgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MTdlZDQ3NjI5NTQwZTgyNzc4ZjA4MGE5ODY2NDFlNzcyNGU2MTYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAyMjozMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwppbmRleCBmODQwNDk4YjU4YWZiLi5lZWM1ZGQ2ZGFlYmIxIDEwMDY0NAotLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCkBAIC0xODM0LDIzICYjNDM7MTgzNCwyMCBAQCBzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsCiAJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwogCQlsb2NrX3NvY2soc2spOwogCi0JCS8qIENvbm5lY3Rpb24gZXN0YWJsaXNoZWQuIFdoYXRldmVyIGhhcHBlbnMgdG8gc29ja2V0IG9uY2Ugd2UKLQkJICogcmVsZWFzZSBpdCwgdGhhdCYjMzk7cyBub3QgY29ubmVjdCgpJiMzOTtzIGNvbmNlcm4uIE5vIG5lZWQgdG8gZ28KJiM0MzsJCS8qIENvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLiBXaGF0ZXZlciBoYXBwZW5zIHRvIHNvY2tldCBvbmNlCiYjNDM7CQkgKiB3ZSByZWxlYXNlIGl0LCB0aGF0JiMzOTtzIG5vdCBjb25uZWN0KCkmIzM5O3MgY29uY2Vybi4gTm8gbmVlZCB0byBnbwogCQkgKiBpbnRvIHNpZ25hbCBhbmQgdGltZW91dCBoYW5kbGluZy4gQ2FsbCBpdCBhIGRheS4KIAkJICoKIAkJICogTm90ZSB0aGF0IGFsbG93aW5nIHRvICYjMzQ7cmVzZXQmIzM0OyBhbiBhbHJlYWR5IGVzdGFibGlzaGVkIHNvY2tldAogCQkgKiBoZXJlIGlzIHJhY3kgYW5kIGluc2VjdXJlLgogCQkgKi8KLQkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpCiYjNDM7CQlpZiAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCB8fAomIzQzOwkJICAgIHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0lORykKIAkJCWJyZWFrOwogCiAJCS8qIElmIGNvbm5lY3Rpb24gd2FzIF9ub3RfIGVzdGFibGlzaGVkIGFuZCBhIHNpZ25hbC90aW1lb3V0IGNhbWUKIAkJICogdG8gYmUsIHdlIHdhbnQgdGhlIHNvY2tldCYjMzk7cyBzdGF0ZSByZXNldC4gVXNlciBzcGFjZSBtYXkgd2FudAogCQkgKiB0byByZXRyeS4KLQkJICoKLQkJICogc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIGltcGxpZXMgdGhhdCBzb2NrZXQgaXMgbm90IG9uCi0JCSAqIHZzb2NrX2Nvbm5lY3RlZF90YWJsZS4gV2Uga2VlcCB0aGUgYmluZGluZyBhbmQgdGhlIHRyYW5zcG9ydAotCQkgKiBhc3NpZ25lZC4KIAkJICovCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSB8fCB0aW1lb3V0ID09IDApIHsKIAkJCWVyciA9IHRpbWVvdXQgPT0gMCA/IC1FVElNRURPVVQgOiBzb2NrX2ludHJfZXJybm8odGltZW91dCk7CkBAIC0xODc1LDcgJiM0MzsxODcyLDggQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLAogCX0KIAogCWVyciA9IHNvY2tfZXJyb3Ioc2spOwotCWlmIChlcnIpIHsKJiM0MzsJaWYgKGVyciAmYW1wOyZhbXA7CiYjNDM7CSAgICBzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEICZhbXA7JmFtcDsgc2stJmd0O3NrX3N0YXRlICE9IFRDUF9DTE9TSU5HKSB7CiAJCXNrLSZndDtza19zdGF0ZSA9IFRDUF9DTE9TRTsKIAkJc29jay0mZ3Q7c3RhdGUgPSBTU19VTkNPTk5FQ1RFRDsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIHZzb2NrX2Nvbm5lY3QgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcyBwYXRjaC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgY29udGV4dCDigJMgc3BlY2lmaWNhbGx5IHRoZSBgbmV0L3Ztd192c29jay9hZl92c29jay5jYCBmaWxlIHdpdGhpbiB0aGUgYHZzb2NrX2Nvbm5lY3RgIGZ1bmN0aW9uLiBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgYSBwbGFuLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUsIHNvIEkmIzM5O2xsIHF1aWNrbHkgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBwcmVmZXJyZWQgbWV0aG9kIGhlcmUgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGxldmVyYWdpbmcgbXkgdG9vbHMuIEkmIzM5O2xsIHJlYWNoIGZvciBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgcXVpY2sgdmlzdWFsIG9mIHRoZSBmaWxlIGFyb3VuZCBsaW5lIDE4MzQsIG9yLCBpZiBJJiMzOTttIGZlZWxpbmcgbGF6eSwgSSYjMzk7bGwgZ28gd2l0aCBgZ3JlcHBlcmAsIHRvIHF1aWNrbHkgZmluZCB3aGVyZSBgdnNvY2tfY29ubmVjdGAgZXhpc3RzIGluIHJlbGF0aW9uIHRvIGxpbmUgMTgzNC4gT2YgY291cnNlLCBgZ2l0IGdyZXBgIGlzIGFsd2F5cyBhbiBvcHRpb24uIEkganVzdCBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN1cnJvdW5kaW5nIGxpbmVzLCBhbnkgcmVsZXZhbnQgY29tbWVudHMsIGFuZCBhbnkgcHJldmlvdXMgY29tbWl0IG1lc3NhZ2VzIHRoYXQgcmVsYXRlIHRvIHRoYXQgc3BlY2lmaWMgYXJlYS4gVGhpcyBjb250ZXh0IGlzIGNydWNpYWwgdG8gZm9ybWluZyBhbiBpbmZvcm1lZCBqdWRnbWVudCBvbiB0aGUgcGF0Y2gmIzM5O3MgbWVyaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MDA6XHRcdC8qIFRoZSByZWNlaXZlIHBhdGggd2lsbCBoYW5kbGUgYWxsIGNvbW11bmljYXRpb24gdW50aWwgd2UgYXJlIGFibGUgdG9cbjE4MDE6XHRcdCAqIGVudGVyIHRoZSBjb25uZWN0ZWQgc3RhdGUuICBIZXJlIHdlIHdhaXQgZm9yIHRoZSBjb25uZWN0aW9uIHRvIGJlXG4xODAyOlx0XHQgKiBjb21wbGV0ZWQgb3IgYSBub3RpZmljYXRpb24gb2YgYW4gZXJyb3IuXG4xODAzOlx0XHQgKi9cbjE4MDQ6XHRcdHRpbWVvdXQgPSB2c2stXHUwMDNlY29ubmVjdF90aW1lb3V0O1xuMTgwNTpcdFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbjE4MDY6XHRcbjE4MDc6XHRcdC8qIElmIHRoZSBzb2NrZXQgaXMgYWxyZWFkeSBjbG9zaW5nIG9yIGl0IGlzIGluIGFuIGVycm9yIHN0YXRlLCB0aGVyZVxuMTgwODpcdFx0ICogaXMgbm8gcG9pbnQgaW4gd2FpdGluZy5cbjE4MDk6XHRcdCAqL1xuMTgxMDpcdFx0d2hpbGUgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCBcdTAwMjZcdTAwMjZcbjE4MTE6XHRcdCAgICAgICBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0lORyBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfZXJyID09IDApIHtcbjE4MTI6XHRcdFx0aWYgKGZsYWdzIFx1MDAyNiBPX05PTkJMT0NLKSB7XG4xODEzOlx0XHRcdFx0LyogSWYgd2UmIzM5O3JlIG5vdCBnb2luZyB0byBibG9jaywgd2Ugc2NoZWR1bGUgYSB0aW1lb3V0XG4xODE0Olx0XHRcdFx0ICogZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSB0aW1lb3V0IG9uIHRoZSBjb25uZWN0aW9uXG4xODE1Olx0XHRcdFx0ICogYXR0ZW1wdCwgaW4gY2FzZSB0aGUgcGVlciBkb2VzbiYjMzk7dCByZXNwb25kIGluIGFcbjE4MTY6XHRcdFx0XHQgKiB0aW1lbHkgbWFubmVyLiBXZSBob2xkIG9uIHRvIHRoZSBzb2NrZXQgdW50aWwgdGhlXG4xODE3Olx0XHRcdFx0ICogdGltZW91dCBmaXJlcy5cbjE4MTg6XHRcdFx0XHQgKi9cbjE4MTk6XHRcdFx0XHRzb2NrX2hvbGQoc2spO1xuMTgyMDpcdFxuMTgyMTpcdFx0XHRcdC8qIElmIHRoZSB0aW1lb3V0IGZ1bmN0aW9uIGlzIGFscmVhZHkgc2NoZWR1bGVkLFxuMTgyMjpcdFx0XHRcdCAqIHJlc2NoZWR1bGUgaXQsIHRoZW4gdW5ncmFiIHRoZSBzb2NrZXQgcmVmY291bnQgdG9cbjE4MjM6XHRcdFx0XHQgKiBrZWVwIGl0IGJhbGFuY2VkLlxuMTgyNDpcdFx0XHRcdCAqL1xuMTgyNTpcdFx0XHRcdGlmIChtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFx1MDAyNnZzay1cdTAwM2Vjb25uZWN0X3dvcmssXG4xODI2Olx0XHRcdFx0XHRcdCAgICAgdGltZW91dCkpXG4xODI3Olx0XHRcdFx0XHRzb2NrX3B1dChzayk7XG4xODI4Olx0XG4xODI5Olx0XHRcdFx0LyogU2tpcCBhaGVhZCB0byBwcmVzZXJ2ZSBlcnJvciBjb2RlIHNldCBhYm92ZS4gKi9cbjE4MzA6XHRcdFx0XHRnb3RvIG91dF93YWl0O1xuMTgzMTpcdFx0XHR9XG4xODMyOlx0XG4xODMzOlx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xODM0Olx0XHRcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xuMTgzNTpcdFx0XHRsb2NrX3NvY2soc2spO1xuMTgzNjpcdFxuMTgzNzpcdFx0XHQvKiBDb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZC4gV2hhdGV2ZXIgaGFwcGVucyB0byBzb2NrZXQgb25jZVxuMTgzODpcdFx0XHQgKiB3ZSByZWxlYXNlIGl0LCB0aGF0JiMzOTtzIG5vdCBjb25uZWN0KCkmIzM5O3MgY29uY2Vybi4gTm8gbmVlZCB0byBnb1xuMTgzOTpcdFx0XHQgKiBpbnRvIHNpZ25hbCBhbmQgdGltZW91dCBoYW5kbGluZy4gQ2FsbCBpdCBhIGRheS5cbjE4NDA6XHRcdFx0ICpcbjE4NDE6XHRcdFx0ICogTm90ZSB0aGF0IGFsbG93aW5nIHRvIFwmIzM0O3Jlc2V0XCYjMzQ7IGFuIGFscmVhZHkgZXN0YWJsaXNoZWQgc29ja2V0XG4xODQyOlx0XHRcdCAqIGhlcmUgaXMgcmFjeSBhbmQgaW5zZWN1cmUuXG4xODQzOlx0XHRcdCAqL1xuMTg0NDpcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEIHx8XG4xODQ1Olx0XHRcdCAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0lORylcbjE4NDY6XHRcdFx0XHRicmVhaztcbjE4NDc6XHRcbjE4NDg6XHRcdFx0LyogSWYgY29ubmVjdGlvbiB3YXMgX25vdF8gZXN0YWJsaXNoZWQgYW5kIGEgc2lnbmFsL3RpbWVvdXQgY2FtZVxuMTg0OTpcdFx0XHQgKiB0byBiZSwgd2Ugd2FudCB0aGUgc29ja2V0JiMzOTtzIHN0YXRlIHJlc2V0LiBVc2VyIHNwYWNlIG1heSB3YW50XG4xODUwOlx0XHRcdCAqIHRvIHJldHJ5LlxuMTg1MTpcdFx0XHQgKi9cbjE4NTI6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIHx8IHRpbWVvdXQgPT0gMCkge1xuMTg1MzpcdFx0XHRcdGVyciA9IHRpbWVvdXQgPT0gMCA/IC1FVElNRURPVVQgOiBzb2NrX2ludHJfZXJybm8odGltZW91dCk7XG4xODU0Olx0XG4xODU1Olx0XHRcdFx0LyogTGlzdGVuZXIgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlc3BvbmRlZCB3aXRoXG4xODU2Olx0XHRcdFx0ICogVklSVElPX1ZTT0NLX09QX1JFU1BPTlNFLiBJdHMgaGFuZGxpbmcgZXhwZWN0cyBvdXJcbjE4NTc6XHRcdFx0XHQgKiBza19zdGF0ZSA9PSBUQ1BfU1lOX1NFTlQsIHdoaWNoIGhlcmVieSB3ZSBicmVhay5cbjE4NTg6XHRcdFx0XHQgKiBJbiBzdWNoIGNhc2UgVklSVElPX1ZTT0NLX09QX1JTVCB3aWxsIGZvbGxvdy5cbjE4NTk6XHRcdFx0XHQgKi9cbjE4NjA6XHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcbjE4NjE6XHRcdFx0XHRzb2NrLVx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XG4xODYyOlx0XG4xODYzOlx0XHRcdFx0LyogVHJ5IHRvIGNhbmNlbCBWSVJUSU9fVlNPQ0tfT1BfUkVRVUVTVCBza2Igc2VudCBvdXQgYnlcbjE4NjQ6XHRcdFx0XHQgKiB0cmFuc3BvcnQtXHUwMDNlY29ubmVjdCgpLlxuMTg2NTpcdFx0XHRcdCAqL1xuMTg2NjpcdFx0XHRcdHZzb2NrX3RyYW5zcG9ydF9jYW5jZWxfcGt0KHZzayk7XG4xODY3Olx0XG4xODY4Olx0XHRcdFx0Z290byBvdXRfd2FpdDtcbjE4Njk6XHRcdFx0fVxuMTg3MDpcdFxuMTg3MTpcdFx0XHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xuMTg3MjpcdFx0fVxuMTg3MzpcdFxuMTg3NDpcdFx0ZXJyID0gc29ja19lcnJvcihzayk7XG4xODc1Olx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNlxuMTg3NjpcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NJTkcpIHtcbjE4Nzc6XHRcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBUQ1BfQ0xPU0U7XG4xODc4Olx0XHRcdHNvY2stXHUwMDNlc3RhdGUgPSBTU19VTkNPTk5FQ1RFRDtcbjE4Nzk6XHRcdH1cbjE4ODA6XHRcbjE4ODE6XHRvdXRfd2FpdDpcbjE4ODI6XHRcdGZpbmlzaF93YWl0KHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCk7XG4xODgzOlx0b3V0OlxuMTg4NDpcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbjE4ODU6XHRcdHJldHVybiBlcnI7XG4xODg2Olx0fVxuMTg4NzpcdFxuMTg4ODpcdHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4xODg5Olx0XHRcdFx0c3RydWN0IHByb3RvX2FjY2VwdF9hcmcgKmFyZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVlNPQ0sgRXhwbG9yYXRpb24qKgoKT2theSwgbGV0IG1lIGdldCB0aGlzIHN0cmFpZ2h0LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGB2c29ja19jb25uZWN0YCwgYW5kIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhbmRzY2FwZSwgdGhhdCBmdW5jdGlvbiBsaXZlcyB3aXRoaW4gYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIFZTT0NLLCB0aGUgQUZfVlNPQ0sgc29ja2V0IHByb3RvY29sIGZhbWlseSwgc29tZXRoaW5nIEkmIzM5O20gdmVyeSBmYW1pbGlhciB3aXRoLiBJdCYjMzk7cyBwcmFjdGljYWxseSB1YmlxdWl0b3VzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhpbmsgdnNvY2sgbG9vcGJhY2ssIHZpcnRpby12c29jaywgYW5kIGV2ZW4gdm1jaSwgaXQgYWxsIGxldmVyYWdlcyB0aGF0IGZyYW1ld29yay4gSSBjYW4mIzM5O3QgYmVsaWV2ZSBJIGRpZG4mIzM5O3QgaW1tZWRpYXRlbHkgY29uc2lkZXIgY2hlY2tpbmcgS2NvbmZpZyBmb3IgaW5mb3JtYXRpb24gb24gYGFmX3Zzb2NrLmNgLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIEkmIzM5O2xsIGdldCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtWU09DSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMDA5IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo2OmNvbmZpZyBWU09DS0VUU1xubmV0L3Ztd192c29jay9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0xOC1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzoxOTpjb25maWcgVlNPQ0tFVFNfRElBR1xubmV0L3Ztd192c29jay9LY29uZmlnLTIwLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MjE6XHRkZXBlbmRzIG9uIFZTT0NLRVRTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjItXHRkZWZhdWx0IHlcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yMy1cdGhlbHBcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyNDpcdCAgU3VwcG9ydCBmb3IgUEZfVlNPQ0sgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxubmV0L3Ztd192c29jay9LY29uZmlnLTI1LVx0ICBJZiB1bnN1cmUsIHNheSBZLlxuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yOC1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyOTpjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcJiMzNDtcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozMTpcdGRlcGVuZHMgb24gVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMi1cdGRlZmF1bHQgeVxubmV0L3Ztd192c29jay9LY29uZmlnOjMzOlx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zNC1cdGhlbHBcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNDAtXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NDE6Y29uZmlnIFZNV0FSRV9WTUNJX1ZTT0NLRVRTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtWTXdhcmUgVk1DSSB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1wmIzM0O1xubmV0L3Ztd192c29jay9LY29uZmlnOjQzOlx0ZGVwZW5kcyBvbiBWU09DS0VUUyBcdTAwMjZcdTAwMjYgVk1XQVJFX1ZNQ0lcbm5ldC92bXdfdnNvY2svS2NvbmZpZy00NC1cdGhlbHBcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTItXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NTM6Y29uZmlnIFZJUlRJT19WU09DS0VUU1xubmV0L3Ztd192c29jay9LY29uZmlnLTU0LVx0dHJpc3RhdGUgXCYjMzQ7dmlydGlvIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXCYjMzQ7XG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NTU6XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBWSVJUSU9cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo1NjpcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTctXHRoZWxwXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTY1LVxubmV0L3Ztd192c29jay9LY29uZmlnOjY2OmNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNjctXHR0cmlzdGF0ZVxuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy03Mi1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo3Mzpjb25maWcgSFlQRVJWX1ZTT0NLRVRTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNzQtXHR0cmlzdGF0ZSBcJiMzNDtIeXBlci1WIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXCYjMzQ7XG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NzU6XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBIWVBFUlZfVk1CVVNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03Ni1cdGhlbHBcbi0tXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxubmV0L3Ztd192c29jay9NYWtlZmlsZToyOm9iai0kKENPTkZJR19WU09DS0VUUykgJiM0Mzs9IHZzb2NrLm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MzpvYmotJChDT05GSUdfVlNPQ0tFVFNfRElBRykgJiM0Mzs9IHZzb2NrX2RpYWcub1xubmV0L3Ztd192c29jay9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19WTVdBUkVfVk1DSV9WU09DS0VUUykgJiM0Mzs9IHZtd192c29ja192bWNpX3RyYW5zcG9ydC5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1ZJUlRJT19WU09DS0VUUykgJiM0Mzs9IHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0Lm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTX0NPTU1PTikgJiM0Mzs9IHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0hZUEVSVl9WU09DS0VUUykgJiM0Mzs9IGh2X3NvY2sub1xubmV0L3Ztd192c29jay9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19WU09DS0VUU19MT09QQkFDSykgJiM0Mzs9IHZzb2NrX2xvb3BiYWNrLm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtOS1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTExLSAqICAgICAgICBnbG9iYWwgbmFtZXNwYWNlIHdpbGwgbm90IGJlIGFibGUgdG8gYWxsb2NhdGUgdGhlIHNhbWUgQ0lELlxubmV0L3Ztd192c29jay9hZl92c29jay5jOjExMjogKiAgICAgIC0gZ2xvYmFsIG1vZGUgQUZfVlNPQ0sgc29ja2V0cyBjYW4gcmVhY2ggYW55IFZNIG9yIHNvY2tldCBpbiBhbnkgZ2xvYmFsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTEzLSAqICAgICAgICBuYW1lc3BhY2UsIHRoZXkgYXJlIG5vdCBjb250YWluZWQgdG8gb25seSB0aGVpciBvd24gbmFtZXNwYWNlLlxubmV0L3Ztd192c29jay9hZl92c29jay5jOjExNDogKiAgICAgIC0gQUZfVlNPQ0sgc29ja2V0cyBpbiBhIGdsb2JhbCBtb2RlIG5hbWVzcGFjZSBjYW5ub3QgcmVhY2ggVk1zIG9yXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTE1LSAqICAgICAgICBzb2NrZXRzIGluIGFueSBsb2NhbCBtb2RlIG5hbWVzcGFjZS5cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTIzLSAqICAgICAgIGFsbG9jYXRpb24gaW4gYW55IG90aGVyIG5hbWVzcGFjZSwgYnV0IG5vdCBpbiB0aGUgc2FtZSBuYW1lc3BhY2UuXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTI0OiAqICAgICAtIEFGX1ZTT0NLIHNvY2tldHMgaW4gYSBsb2NhbCBtb2RlIG5hbWVzcGFjZSBjYW4gY29ubmVjdCBvbmx5IHRvIFZNcyBvclxubmV0L3Ztd192c29jay9hZl92c29jay5jLTEyNS0gKiAgICAgICBvdGhlciBzb2NrZXRzIHdpdGhpbiB0aGVpciBvd24gbmFtZXNwYWNlLlxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNjctXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTY4OiNkZWZpbmUgVlNPQ0tfTkVUX01PREVfU1RSX0dMT0JBTCBcJiMzNDtnbG9iYWxcJiMzNDtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNjk6I2RlZmluZSBWU09DS19ORVRfTU9ERV9TVFJfTE9DQUwgXCYjMzQ7bG9jYWxcJiMzNDtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNzAtXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE3My0gKi9cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNzQ6I2RlZmluZSBWU09DS19ORVRfTU9ERV9TVFJfTUFYIDhcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNzUtXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTE4Mj1zdHJ1Y3QgcHJvdG8gdnNvY2tfcHJvdG8gPSB7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTgzOlx0Lm5hbWUgPSBcJiMzNDtBRl9WU09DS1wmIzM0Oyxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xODQtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTk0LSAqL1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjE5NTojZGVmaW5lIFZTT0NLX0RFRkFVTFRfQ09OTkVDVF9USU1FT1VUICgyICogSFopXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTk2LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE5NzojZGVmaW5lIFZTT0NLX0RFRkFVTFRfQlVGRkVSX1NJWkUgICAgICgxMDI0ICogMjU2KVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE5ODojZGVmaW5lIFZTT0NLX0RFRkFVTFRfQlVGRkVSX01BWF9TSVpFICgxMDI0ICogMjU2KVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE5OTojZGVmaW5lIFZTT0NLX0RFRkFVTFRfQlVGRkVSX01JTl9TSVpFIDEyOFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIwMC1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjA5PXN0YXRpYyBERUZJTkVfTVVURVgodnNvY2tfcmVnaXN0ZXJfbXV0ZXgpO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMjEtICogU3BlY2lmaWNhbGx5LCB3ZSBpbml0aWFsaXplIHRoZSB2c29ja19iaW5kX3RhYmxlIGFycmF5IHRvIGEgc2l6ZSBvZlxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIyMjogKiBWU09DS19IQVNIX1NJWkUgJiM0MzsgMSBzbyB0aGF0IHZzb2NrX2JpbmRfdGFibGVbMF0gdGhyb3VnaFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIyMzogKiB2c29ja19iaW5kX3RhYmxlW1ZTT0NLX0hBU0hfU0laRSAtIDFdIGFyZSBmb3IgYm91bmQgc29ja2V0cyBhbmRcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMjQ6ICogdnNvY2tfYmluZF90YWJsZVtWU09DS19IQVNIX1NJWkVdIGlzIGZvciB1bmJvdW5kIHNvY2tldHMuICBUaGUgaGFzaCBmdW5jdGlvblxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIyNTogKiBtb2RzIHdpdGggVlNPQ0tfSEFTSF9TSVpFIHRvIGVuc3VyZSB0aGlzLlxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIyNi0gKi9cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjI4LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIyOTojZGVmaW5lIFZTT0NLX0hBU0goYWRkcikgICAgICAgICgoYWRkciktXHUwMDNlc3ZtX3BvcnQgJSBWU09DS19IQVNIX1NJWkUpXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjMwOiNkZWZpbmUgdnNvY2tfYm91bmRfc29ja2V0cyhhZGRyKSAoXHUwMDI2dnNvY2tfYmluZF90YWJsZVtWU09DS19IQVNIKGFkZHIpXSlcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzE6I2RlZmluZSB2c29ja191bmJvdW5kX3NvY2tldHMgICAgIChcdTAwMjZ2c29ja19iaW5kX3RhYmxlW1ZTT0NLX0hBU0hfU0laRV0pXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjMyLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzMy0vKiBYWFggVGhpcyBjYW4gcHJvYmFibHkgYmUgaW1wbGVtZW50ZWQgaW4gYSBiZXR0ZXIgd2F5LiAqL1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzNDojZGVmaW5lIFZTT0NLX0NPTk5fSEFTSChzcmMsIGRzdClcdFx0XHRcdFxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM1Olx0KCgoc3JjKS1cdTAwM2Vzdm1fY2lkIF4gKGRzdCktXHUwMDNlc3ZtX3BvcnQpICUgVlNPQ0tfSEFTSF9TSVpFKVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzNi0jZGVmaW5lIHZzb2NrX2Nvbm5lY3RlZF9zb2NrZXRzKHNyYywgZHN0KVx0XHRcXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzNzpcdChcdTAwMjZ2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfQ09OTl9IQVNIKHNyYywgZHN0KV0pXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjM4LSNkZWZpbmUgdnNvY2tfY29ubmVjdGVkX3NvY2tldHNfdnNrKHZzaylcdFx0XHRcdFxcXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0MC1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDE6c3RydWN0IGxpc3RfaGVhZCB2c29ja19iaW5kX3RhYmxlW1ZTT0NLX0hBU0hfU0laRSAmIzQzOyAxXTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNDItRVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfYmluZF90YWJsZSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQzOnN0cnVjdCBsaXN0X2hlYWQgdnNvY2tfY29ubmVjdGVkX3RhYmxlW1ZTT0NLX0hBU0hfU0laRV07XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQ0LUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSk7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTkzNj1zdGF0aWMgc3RydWN0IHNvY2sgKl9fdnNvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTQ2LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjk0NzpcdHNrID0gc2tfYWxsb2MobmV0LCBBRl9WU09DSywgcHJpb3JpdHksIFx1MDAyNnZzb2NrX3Byb3RvLCBrZXJuKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy05NDgtXHRpZiAoIXNrKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy05OTAtXHRcdHZzay1cdTAwM2Vvd25lciA9IGdldF9jdXJyZW50X2NyZWQoKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5OTE6XHRcdHZzay1cdTAwM2Vjb25uZWN0X3RpbWVvdXQgPSBWU09DS19ERUZBVUxUX0NPTk5FQ1RfVElNRU9VVDtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5OTI6XHRcdHZzay1cdTAwM2VidWZmZXJfc2l6ZSA9IFZTT0NLX0RFRkFVTFRfQlVGRkVSX1NJWkU7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTkzOlx0XHR2c2stXHUwMDNlYnVmZmVyX21pbl9zaXplID0gVlNPQ0tfREVGQVVMVF9CVUZGRVJfTUlOX1NJWkU7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTk0Olx0XHR2c2stXHUwMDNlYnVmZmVyX21heF9zaXplID0gVlNPQ0tfREVGQVVMVF9CVUZGRVJfTUFYX1NJWkU7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTk1LVx0fVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xNjUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX2RncmFtX29wcyA9IHtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNjU0Olx0LmZhbWlseSA9IFBGX1ZTT0NLLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE2NTUtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTcwND1zdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE4NTUtXHRcdFx0LyogTGlzdGVuZXIgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlc3BvbmRlZCB3aXRoXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTg1NjpcdFx0XHQgKiBWSVJUSU9fVlNPQ0tfT1BfUkVTUE9OU0UuIEl0cyBoYW5kbGluZyBleHBlY3RzIG91clxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE4NTctXHRcdFx0ICogc2tfc3RhdGUgPT0gVENQX1NZTl9TRU5ULCB3aGljaCBoZXJlYnkgd2UgYnJlYWsuXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTg1ODpcdFx0XHQgKiBJbiBzdWNoIGNhc2UgVklSVElPX1ZTT0NLX09QX1JTVCB3aWxsIGZvbGxvdy5cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xODU5LVx0XHRcdCAqL1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xODYyLVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE4NjM6XHRcdFx0LyogVHJ5IHRvIGNhbmNlbCBWSVJUSU9fVlNPQ0tfT1BfUkVRVUVTVCBza2Igc2VudCBvdXQgYnlcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xODY0LVx0XHRcdCAqIHRyYW5zcG9ydC1cdTAwM2Vjb25uZWN0KCkuXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTIwMTM9c3RhdGljIGludCB2c29ja19jb25uZWN0aWJsZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIwMjQtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjAyNTpcdGlmIChsZXZlbCAhPSBBRl9WU09DSyBcdTAwMjZcdTAwMjYgbGV2ZWwgIT0gU09MX1NPQ0tFVClcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMDI2LVx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTA2LVx0XHRcdFx0dnNrLVx1MDAzZWNvbm5lY3RfdGltZW91dCA9XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjEwNzpcdFx0XHRcdCAgICBWU09DS19ERUZBVUxUX0NPTk5FQ1RfVElNRU9VVDtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTA4LVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yMTI3PXN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdGlibGVfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTQzLVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIxNDQ6XHRpZiAobGV2ZWwgIT0gQUZfVlNPQ0spXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjE0NS1cdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjU0NT1fX3Zzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTU1LVx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI1NTY6XHRcdHJldHVybiBzb2NrX3JlY3ZfZXJycXVldWUoc2ssIG1zZywgbGVuLCBTT0xfVlNPQ0ssIFZTT0NLX1JFQ1ZFUlIpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI1NTctXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI2NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdnNvY2tfc3RyZWFtX29wcyA9IHtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjUzOlx0LmZhbWlseSA9IFBGX1ZTT0NLLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTQtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjY3ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB2c29ja19zZXFwYWNrZXRfb3BzID0ge1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NzU6XHQuZmFtaWx5ID0gUEZfVlNPQ0ssXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY3Ni1cdC5vd25lciA9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjk1PXN0YXRpYyBpbnQgdnNvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjcwNC1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNzA1Olx0aWYgKHByb3RvY29sIFx1MDAyNlx1MDAyNiBwcm90b2NvbCAhPSBQRl9WU09DSylcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNzA2LVx0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjc1MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgdnNvY2tfZmFtaWx5X29wcyA9IHtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNzUxOlx0LmZhbWlseSA9IEFGX1ZTT0NLLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI3NTItXHQuY3JlYXRlID0gdnNvY2tfY3JlYXRlLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yODEzPXN0YXRpYyBpbnQgX192c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjgxNy17XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjgxODpcdGNoYXIgZGF0YVtWU09DS19ORVRfTU9ERV9TVFJfTUFYXSA9IHswfTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODE5LVx0c3RydWN0IGN0bF90YWJsZSB0bXA7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4MzMtXHRcdHN3aXRjaCAobW9kZSkge1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4MzQ6XHRcdGNhc2UgVlNPQ0tfTkVUX01PREVfR0xPQkFMOlxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4MzU6XHRcdFx0cCA9IFZTT0NLX05FVF9NT0RFX1NUUl9HTE9CQUw7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjgzNi1cdFx0XHRicmVhaztcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODM3Olx0XHRjYXNlIFZTT0NLX05FVF9NT0RFX0xPQ0FMOlxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4Mzg6XHRcdFx0cCA9IFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTDtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODM5LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODU2LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4NTc6XHRpZiAoIXN0cm5jbXAoZGF0YSwgVlNPQ0tfTkVUX01PREVfU1RSX0dMT0JBTCwgc2l6ZW9mKGRhdGEpKSlcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODU4Olx0XHQqbmV3X21vZGUgPSBWU09DS19ORVRfTU9ERV9HTE9CQUw7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjg1OTpcdGVsc2UgaWYgKCFzdHJuY21wKGRhdGEsIFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTCwgc2l6ZW9mKGRhdGEpKSlcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODYwOlx0XHQqbmV3X21vZGUgPSBWU09DS19ORVRfTU9ERV9MT0NBTDtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODYxLVx0ZWxzZVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yODgxPXN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4OTgtXHRcdCAqL1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4OTk6XHRcdGlmICh2c29ja19uZXRfbW9kZShuZXQpID09IFZTT0NLX05FVF9NT0RFX0xPQ0FMIFx1MDAyNlx1MDAyNlxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI5MDA6XHRcdCAgICBuZXdfbW9kZSA9PSBWU09DS19ORVRfTU9ERV9HTE9CQUwpXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkwMS1cdFx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yOTEwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MTMtXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQudnNvY2subW9kZSxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTE0Olx0XHQubWF4bGVuXHRcdD0gVlNPQ0tfTkVUX01PREVfU1RSX01BWCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTE1LVx0XHQubW9kZVx0XHQ9IDA0NDQsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MjAtXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQudnNvY2suY2hpbGRfbnNfbW9kZSxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTIxOlx0XHQubWF4bGVuXHRcdD0gVlNPQ0tfTkVUX01PREVfU1RSX01BWCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTIyLVx0XHQubW9kZVx0XHQ9IDA2NDQsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI5ODc9c3RhdGljIHZvaWQgdnNvY2tfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTg5LVx0aWYgKG5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSlcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTkwOlx0XHRuZXQtXHUwMDNldnNvY2subW9kZSA9IFZTT0NLX05FVF9NT0RFX0dMT0JBTDtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTkxLVx0ZWxzZVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zMDE5PXN0YXRpYyBpbnQgX19pbml0IHZzb2NrX2luaXQodm9pZClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA0MS1cdFx0cHJfZXJyKFwmIzM0O2NvdWxkIG5vdCByZWdpc3RlciBhZl92c29jayAoJWQpIGFkZHJlc3MgZmFtaWx5OiAlZFxcblwmIzM0Oyxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMDQyOlx0XHQgICAgICAgQUZfVlNPQ0ssIGVycik7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA0My1cdFx0Z290byBlcnJfdW5yZWdpc3Rlcl9wcm90bztcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA1NS1lcnJfdW5yZWdpc3Rlcl9zb2NrOlxubmV0L3Ztd192c29jay9hZl92c29jay5jOjMwNTY6XHRzb2NrX3VucmVnaXN0ZXIoQUZfVlNPQ0spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNTctZXJyX3VucmVnaXN0ZXJfcHJvdG86XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTMwNjU9c3RhdGljIHZvaWQgX19leGl0IHZzb2NrX2V4aXQodm9pZClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA2Ny1cdG1pc2NfZGVyZWdpc3RlcihcdTAwMjZ2c29ja19kZXZpY2UpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjMwNjg6XHRzb2NrX3VucmVnaXN0ZXIoQUZfVlNPQ0spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNjktXHRwcm90b191bnJlZ2lzdGVyKFx1MDAyNnZzb2NrX3Byb3RvKTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzA3OT1pbnQgdnNvY2tfY29yZV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0ICp0LCBpbnQgZmVhdHVyZXMpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwOTEtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzA5MjpcdGlmIChmZWF0dXJlcyBcdTAwMjYgVlNPQ0tfVFJBTlNQT1JUX0ZfSDJHKSB7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA5My1cdFx0aWYgKHRfaDJnKSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwOTktXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzEwMDpcdGlmIChmZWF0dXJlcyBcdTAwMjYgVlNPQ0tfVFJBTlNQT1JUX0ZfRzJIKSB7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzEwMS1cdFx0aWYgKHRfZzJoKSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMxMDctXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzEwODpcdGlmIChmZWF0dXJlcyBcdTAwMjYgVlNPQ0tfVFJBTlNQT1JUX0ZfREdSQU0pIHtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMTA5LVx0XHRpZiAodF9kZ3JhbSkge1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMTE1LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjMxMTY6XHRpZiAoZmVhdHVyZXMgXHUwMDI2IFZTT0NLX1RSQU5TUE9SVF9GX0xPQ0FMKSB7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzExNy1cdFx0aWYgKHRfbG9jYWwpIHtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrX3RhcC5jLTItLypcbm5ldC92bXdfdnNvY2svYWZfdnNvY2tfdGFwLmM6MzogKiBUYXAgZnVuY3Rpb25zIGZvciBBRl9WU09DSyBzb2NrZXRzLlxubmV0L3Ztd192c29jay9hZl92c29ja190YXAuYy00LSAqXG4tLVxubmV0L3Ztd192c29jay9hZl92c29ja190YXAuYz0xNz1pbnQgdnNvY2tfYWRkX3RhcChzdHJ1Y3QgdnNvY2tfdGFwICp2dClcbm5ldC92bXdfdnNvY2svYWZfdnNvY2tfdGFwLmMtMTgte1xubmV0L3Ztd192c29jay9hZl92c29ja190YXAuYzoxOTpcdGlmICh1bmxpa2VseSh2dC1cdTAwM2VkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfVlNPQ0tNT04pKVxubmV0L3Ztd192c29jay9hZl92c29ja190YXAuYy0yMC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3Ztd192c29jay9kaWFnLmM9MTQ9c3RhdGljIGludCBza19kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC92bXdfdnNvY2svZGlhZy5jLTI2LVx0cmVwID0gbmxtc2dfZGF0YShubGgpO1xubmV0L3Ztd192c29jay9kaWFnLmM6Mjc6XHRyZXAtXHUwMDNldmRpYWdfZmFtaWx5ID0gQUZfVlNPQ0s7XG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0yOC1cbi0tXG5uZXQvdm13X3Zzb2NrL2RpYWcuYz0xNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBzb2NrX2RpYWdfaGFuZGxlciB2c29ja19kaWFnX2hhbmRsZXIgPSB7XG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0xNjAtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbm5ldC92bXdfdnNvY2svZGlhZy5jOjE2MTpcdC5mYW1pbHkgPSBBRl9WU09DSyxcbm5ldC92bXdfdnNvY2svZGlhZy5jLTE2Mi1cdC5kdW1wID0gdnNvY2tfZGlhZ19oYW5kbGVyX2R1bXAsXG4tLVxubmV0L3Ztd192c29jay9kaWFnLmM9MTc5PU1PRFVMRV9BTElBU19ORVRfUEZfUFJPVE9fVFlQRShQRl9ORVRMSU5LLCBORVRMSU5LX1NPQ0tfRElBRyxcbm5ldC92bXdfdnNvY2svZGlhZy5jOjE4MDpcdFx0XHQgICAgICAgNDAgLyogQUZfVlNPQ0sgKi8pO1xuLS1cbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jPTk0PXN0cnVjdCBodnNvY2sge1xuLS1cbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jLTExMS1cbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jOjExMjovKiBJbiB0aGUgVk0sIHdlIHN1cHBvcnQgSHlwZXItViBTb2NrZXRzIHdpdGggQUZfVlNPQ0ssIGFuZCB0aGUgZW5kcG9pbnQgaXNcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jLTExMy0gKiBcdTAwM2NjaWQsIHBvcnRcdTAwM2UgKHNlZSBzdHJ1Y3Qgc29ja2FkZHJfdm0pLiBOb3RlOiBjaWQgaXMgbm90IHJlYWxseSB1c2VkIGhlcmU6XG4tLVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTM1LSAqXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYzoxMzY6ICogVG8gbWFrZSB1c2Ugb2YgdGhlIEFGX1ZTT0NLIGluZnJhc3RydWN0dXJlIGluIExpbnV4IFZNLCB3ZSBoYXZlIHRvIGxpbWl0XG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy0xMzctICogdGhlIGF2YWlsYWJsZSBHVUlEIHNwYWNlIG9mIFNPQ0tBRERSX0hWIHNvIHRoYXQgd2UgY2FuIGNyZWF0ZSBhIG1hcHBpbmdcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jOjEzODogKiBiZXR3ZWVuIEFGX1ZTT0NLIHBvcnQgYW5kIFNPQ0tBRERSX0hWIFNlcnZpY2UgR1VJRC4gVGhlIHJ1bGUgb2Ygd3JpdGluZ1xubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTM5LSAqIEh5cGVyLVYgU29ja2V0cyBhcHBzIG9uIHRoZSBob3N0IGFuZCBpbiBMaW51eCBWTSBpczpcbi0tXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYz05NjA9c3RhdGljIGludCBfX2luaXQgaHZzX2luaXQodm9pZClcbi0tXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy05NjctXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYzo5Njg6XHRyZXQgPSB2c29ja19jb3JlX3JlZ2lzdGVyKFx1MDAyNmh2c190cmFuc3BvcnQsIFZTT0NLX1RSQU5TUE9SVF9GX0cySCk7XG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy05NjktXHRpZiAocmV0KSB7XG4tLVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmM9OTg4PU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYzo5ODk6TU9EVUxFX0FMSUFTX05FVFBST1RPKFBGX1ZTT0NLKTtcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz0zMD1zdHJ1Y3QgdmlydGlvX3Zzb2NrIHtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTMxLVx0c3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXY7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzozMjpcdHN0cnVjdCB2aXJ0cXVldWUgKnZxc1tWU09DS19WUV9NQVhdO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzMtXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzgtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzozOTpcdC8qIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBwcm90ZWN0ZWQgYnkgdHhfbG9jay4gIHZxc1tWU09DS19WUV9UWF1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQwLVx0ICogbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIHR4X2xvY2sgaGVsZC5cbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy00OS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjUwOlx0LyogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHByb3RlY3RlZCBieSByeF9sb2NrLiAgdnFzW1ZTT0NLX1ZRX1JYXVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNTEtXHQgKiBtdXN0IGJlIGFjY2Vzc2VkIHdpdGggcnhfbG9jayBoZWxkLlxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTcyLVx0LyogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHByb3RlY3RlZCBieSBldmVudF9sb2NrLlxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NzM6XHQgKiB2cXNbVlNPQ0tfVlFfRVZFTlRdIG11c3QgYmUgYWNjZXNzZWQgd2l0aCBldmVudF9sb2NrIGhlbGQuXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03NC1cdCAqL1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTE1OD12aXJ0aW9fdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTE3MC1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjE3MTpcdHZxID0gdnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTE3Mi1cbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0xOTAtXHRcdGlmIChyZXBseSkge1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6MTkxOlx0XHRcdHN0cnVjdCB2aXJ0cXVldWUgKnJ4X3ZxID0gdnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTE5Mi1cdFx0XHRpbnQgdmFsO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTIxNz1zdGF0aWMgaW50IHZpcnRpb190cmFuc3BvcnRfc2VuZF9za2JfZmFzdF9wYXRoKHN0cnVjdCB2aXJ0aW9fdnNvY2sgKnZzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMjE4LXtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjIxOTpcdHN0cnVjdCB2aXJ0cXVldWUgKnZxID0gdnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTIyMC1cdGludCByZXQ7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9MjgwPXZpcnRpb190cmFuc3BvcnRfY2FuY2VsX3BrdChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTI5NC1cdGlmIChjbnQpIHtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjI5NTpcdFx0c3RydWN0IHZpcnRxdWV1ZSAqcnhfdnEgPSB2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfUlhdO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMjk2LVx0XHRpbnQgbmV3X2NudDtcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz0zMTE9c3RhdGljIHZvaWQgdmlydGlvX3Zzb2NrX3J4X2ZpbGwoc3RydWN0IHZpcnRpb192c29jayAqdnNvY2spXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0zMTIte1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6MzEzOlx0aW50IHRvdGFsX2xlbiA9IFZJUlRJT19WU09DS19ERUZBVUxUX1JYX0JVRl9TSVpFO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzE0LVx0c3RydWN0IHNjYXR0ZXJsaXN0IHBrdCwgKnA7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzE4LVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6MzE5Olx0dnEgPSB2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfUlhdO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzIwLVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTMyNS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjMyNjpcdFx0bWVtc2V0KHNrYi1cdTAwM2VoZWFkLCAwLCBWSVJUSU9fVlNPQ0tfU0tCX0hFQURST09NKTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTMyNy1cdFx0c2dfaW5pdF9vbmUoXHUwMDI2cGt0LCB2aXJ0aW9fdnNvY2tfaGRyKHNrYiksIHRvdGFsX2xlbik7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9MzQyPXN0YXRpYyB2b2lkIHZpcnRpb190cmFuc3BvcnRfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzUzLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6MzU0Olx0dnEgPSB2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzU1LVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTM3NT1zdGF0aWMgYm9vbCB2aXJ0aW9fdHJhbnNwb3J0X21vcmVfcmVwbGllcyhzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jaylcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTM3Ni17XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzozNzc6XHRzdHJ1Y3QgdmlydHF1ZXVlICp2cSA9IHZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF07XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0zNzgtXHRpbnQgdmFsO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTM4Nz1zdGF0aWMgaW50IHZpcnRpb192c29ja19ldmVudF9maWxsX29uZShzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jayxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0zOTItXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzozOTM6XHR2cSA9IHZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9FVkVOVF07XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0zOTQtXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9NDAxPXN0YXRpYyB2b2lkIHZpcnRpb192c29ja19ldmVudF9maWxsKHN0cnVjdCB2aXJ0aW9fdnNvY2sgKnZzb2NrKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQxMC1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjQxMTpcdHZpcnRxdWV1ZV9raWNrKHZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9FVkVOVF0pO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDEyLX1cbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz00Mzc9c3RhdGljIHZvaWQgdmlydGlvX3Zzb2NrX2V2ZW50X2hhbmRsZShzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jayxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy00NDAtXHRzd2l0Y2ggKGxlMzJfdG9fY3B1KGV2ZW50LVx1MDAzZWlkKSkge1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NDQxOlx0Y2FzZSBWSVJUSU9fVlNPQ0tfRVZFTlRfVFJBTlNQT1JUX1JFU0VUOlxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDQyLVx0XHR2aXJ0aW9fdnNvY2tfdXBkYXRlX2d1ZXN0X2NpZCh2c29jayk7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9NDQ5PXN0YXRpYyB2b2lkIHZpcnRpb190cmFuc3BvcnRfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDU5LVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NDYwOlx0dnEgPSB2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfRVZFTlRdO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDYxLVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQ3NC1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjQ3NTpcdHZpcnRxdWV1ZV9raWNrKHZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9FVkVOVF0pO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDc2LW91dDpcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz01MDc9c3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF9jYW5fbXNnemVyb2NvcHkoaW50IGJ1ZnNfbnVtKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTUxNS1cdGlmICh2c29jaykge1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NTE2Olx0XHRzdHJ1Y3QgdmlydHF1ZXVlICp2cSA9IHZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9UWF07XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy01MTctXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9NjMyPXN0YXRpYyB2b2lkIHZpcnRpb190cmFuc3BvcnRfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNjQyLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NjQzOlx0dnEgPSB2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfUlhdO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNjQ0LVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTY5OT1zdGF0aWMgaW50IHZpcnRpb192c29ja192cXNfaW5pdChzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jaylcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03MTUtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo3MTY6XHRyZXQgPSB2aXJ0aW9fZmluZF92cXModmRldiwgVlNPQ0tfVlFfTUFYLCB2c29jay1cdTAwM2V2cXMsIHZxc19pbmZvLCBOVUxMKTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTcxNy1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9NzU1PXN0YXRpYyB2b2lkIHZpcnRpb192c29ja192cXNfZGVsKHN0cnVjdCB2aXJ0aW9fdnNvY2sgKnZzb2NrKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTc4NC1cdG11dGV4X2xvY2soXHUwMDI2dnNvY2stXHUwMDNlcnhfbG9jayk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo3ODU6XHR3aGlsZSAoKHNrYiA9IHZpcnRxdWV1ZV9kZXRhY2hfdW51c2VkX2J1Zih2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfUlhdKSkpXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03ODYtXHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTc4OS1cdG11dGV4X2xvY2soXHUwMDI2dnNvY2stXHUwMDNldHhfbG9jayk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo3OTA6XHR3aGlsZSAoKHNrYiA9IHZpcnRxdWV1ZV9kZXRhY2hfdW51c2VkX2J1Zih2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdKSkpXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03OTEtXHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTgwMD1zdGF0aWMgaW50IHZpcnRpb192c29ja19wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy04MzQtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo4MzU6XHRpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19WU09DS19GX1NFUVBBQ0tFVCkpXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy04MzYtXHRcdHZzb2NrLVx1MDAzZXNlcXBhY2tldF9hbGxvdyA9IHRydWU7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9OTI5PXN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0ge1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6OTMwOlx0eyBWSVJUSU9fSURfVlNPQ0ssIFZJUlRJT19ERVZfQU5ZX0lEIH0sXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy05MzEtXHR7IDAgfSxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz05MzQ9c3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0ge1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6OTM1Olx0VklSVElPX1ZTT0NLX0ZfU0VRUEFDS0VUXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy05MzYtfTtcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz05NTE9c3RhdGljIGludCBfX2luaXQgdmlydGlvX3Zzb2NrX2luaXQodm9pZClcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy05NTktXHRyZXQgPSB2c29ja19jb3JlX3JlZ2lzdGVyKFx1MDAyNnZpcnRpb190cmFuc3BvcnQudHJhbnNwb3J0LFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6OTYwOlx0XHRcdFx0ICBWU09DS19UUkFOU1BPUlRfRl9HMkgpO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtOTYxLVx0aWYgKHJldClcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjMtLyogSG93IGxvbmcgdG8gd2FpdCBmb3IgZ3JhY2VmdWwgc2h1dGRvd24gb2YgYSBjb25uZWN0aW9uICovXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQ6I2RlZmluZSBWU09DS19DTE9TRV9USU1FT1VUICg4ICogSFopXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjUtXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTMzLSNkZWZpbmUgTUFYX0NPTExBUFNFX0xFTiBcXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjM0Olx0U0tCX01BWF9PUkRFUihWSVJUSU9fVlNPQ0tfU0tCX0hFQURST09NLCBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0zNS1cbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MTE5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmlydGlvX3RyYW5zcG9ydF9idWlsZF9za2Iodm9pZCAqb3BhcXVlKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNDYtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTQ3Olx0aGRyLVx1MDAzZXRyYW5zcG9ydCA9IGNwdV90b19sZTE2KEFGX1ZTT0NLX1RSQU5TUE9SVF9WSVJUSU8pO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE0OC1cdGhkci1cdTAwM2VsZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBrdF9oZHIpKTtcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTUxLVx0c3dpdGNoIChsZTE2X3RvX2NwdShwa3RfaGRyLVx1MDAzZW9wKSkge1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE1MjpcdGNhc2UgVklSVElPX1ZTT0NLX09QX1JFUVVFU1Q6XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTUzOlx0Y2FzZSBWSVJUSU9fVlNPQ0tfT1BfUkVTUE9OU0U6XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTU0Olx0XHRoZHItXHUwMDNlb3AgPSBjcHVfdG9fbGUxNihBRl9WU09DS19PUF9DT05ORUNUKTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNTUtXHRcdGJyZWFrO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE1NjpcdGNhc2UgVklSVElPX1ZTT0NLX09QX1JTVDpcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNTc6XHRjYXNlIFZJUlRJT19WU09DS19PUF9TSFVURE9XTjpcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNTg6XHRcdGhkci1cdTAwM2VvcCA9IGNwdV90b19sZTE2KEFGX1ZTT0NLX09QX0RJU0NPTk5FQ1QpO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE1OS1cdFx0YnJlYWs7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTYwOlx0Y2FzZSBWSVJUSU9fVlNPQ0tfT1BfUlc6XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTYxOlx0XHRoZHItXHUwMDNlb3AgPSBjcHVfdG9fbGUxNihBRl9WU09DS19PUF9QQVlMT0FEKTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNjItXHRcdGJyZWFrO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE2MzpcdGNhc2UgVklSVElPX1ZTT0NLX09QX0NSRURJVF9VUERBVEU6XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTY0Olx0Y2FzZSBWSVJUSU9fVlNPQ0tfT1BfQ1JFRElUX1JFUVVFU1Q6XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTY1Olx0XHRoZHItXHUwMDNlb3AgPSBjcHVfdG9fbGUxNihBRl9WU09DS19PUF9DT05UUk9MKTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNjYtXHRcdGJyZWFrO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE2Ny1cdGRlZmF1bHQ6XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTY4Olx0XHRoZHItXHUwMDNlb3AgPSBjcHVfdG9fbGUxNihBRl9WU09DS19PUF9VTktOT1dOKTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNjktXHRcdGJyZWFrO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODItXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTgzOlx0XHRpZiAoc2tiX2NvcHlfZGF0YWdyYW1faXRlcihwa3QsIFZJUlRJT19WU09DS19TS0JfQ0IocGt0KS1cdTAwM2VvZmZzZXQsXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTg0LVx0XHRcdFx0XHQgICBcdTAwMjZpb3ZfaXRlciwgcGF5bG9hZF9sZW4pKSB7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTIwMz1zdGF0aWMgdTE2IHZpcnRpb190cmFuc3BvcnRfZ2V0X3R5cGUoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMDUtXHRpZiAoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSlcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyMDY6XHRcdHJldHVybiBWSVJUSU9fVlNPQ0tfVFlQRV9TVFJFQU07XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjA3LVx0ZWxzZVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjIwODpcdFx0cmV0dXJuIFZJUlRJT19WU09DS19UWVBFX1NFUVBBQ0tFVDtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMDktfVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMjQtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjI1Olx0c2tiX2xlbiA9IFZJUlRJT19WU09DS19TS0JfSEVBRFJPT007XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjI2LVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDEtXHQgKiBzZXR0aW5nIHNrYiBvd25lciBpbiAmIzM5O3NrYl9zZXRfb3duZXJfdygpJiMzOTsuIFRoZSBvbmx5IGNhc2Vcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDI6XHQgKiB3aGVuICYjMzk7dnNrJiMzOTsgPT0gTlVMTCBpcyBWSVJUSU9fVlNPQ0tfT1BfUlNUIGNvbnRyb2wgbWVzc2FnZVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0My1cdCAqIHdpdGhvdXQgcGF5bG9hZC5cbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjY2LVx0XHRpZiAobXNnX2RhdGFfbGVmdChpbmZvLVx1MDAzZW1zZykgPT0gMCBcdTAwMjZcdTAwMjZcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNjc6XHRcdCAgICBpbmZvLVx1MDAzZXR5cGUgPT0gVklSVElPX1ZTT0NLX1RZUEVfU0VRUEFDS0VUKSB7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjY4LVx0XHRcdHN0cnVjdCB2aXJ0aW9fdnNvY2tfaGRyICpoZHIgPSB2aXJ0aW9fdnNvY2tfaGRyKHNrYik7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQzNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgdnNvY2tfY29ubmVjdCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIGltcGFjdGluZyBgbmV0L3Ztd192c29jay9hZl92c29jay5jYCwgc3BlY2lmaWNhbGx5IHdoZW4gYENPTkZJR19WU09DS0VUU2AgaXMgZW5hYmxlZC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIHdoYXQmIzM5O3MgY2hhbmdlZCwgYW5kIGhvdyBjcml0aWNhbCBpcyBpdD8KClRoZSBvbmx5IGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGB2c29ja19jb25uZWN0YC4gTGV0JiMzOTtzIHNlZSBob3cgYHZzb2NrX2Nvbm5lY3RgIGlzIGNhbGxlZC4gQWgsIHJpZ2h0LCBpbiBgYWZfdnNvY2suY2AgaXRzZWxmLiBUaGUgYHZzb2NrX3N0cmVhbV9vcHNgIGFuZCBgdnNvY2tfc2VxcGFja2V0X29wc2Agc3RydWN0dXJlcyBkZWZpbmUgYC5jb25uZWN0ID0gdnNvY2tfY29ubmVjdGAuIFNvLCBhIHVzZXItc3BhY2UgYGNvbm5lY3QoKWAgc3lzdGVtIGNhbGwgZXZlbnR1YWxseSBoaXRzIHRoaXMgZnVuY3Rpb24sIGFzIGV4cGVjdGVkLgoKTm93LCB3aGF0JiMzOTtzIHRoZSBwYXRjaCAqZG9pbmcqIGluIGB2c29ja19jb25uZWN0YD8gSSBzZWUgdHdvIHByaW1hcnkgY2hhbmdlczoKCjEuICBJdCYjMzk7cyBhbHRlcmluZyB0aGUgc3RhdGUgY2hlY2suIFRoZSBvcmlnaW5hbCBjb2RlIGJyb2tlIG91dCBvZiB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IGlmIHRoZSBzb2NrZXQgd2FzIGFscmVhZHkgYFRDUF9FU1RBQkxJU0hFRGAuIE5vdywgaXQgYWxzbyBicmVha3MgaWYgdGhlIHNvY2tldCBpcyBgVENQX0NMT1NJTkdgLiBIbW1tLCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBoYW5kbGUgYFRDUF9DTE9TSU5HYCBzdGF0ZXMgbW9yZSBncmFjZWZ1bGx5LgoyLiAgSXQmIzM5O3MgYWx0ZXJpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljLiBJdCB1c2VkIHRvIGNoZWNrIGZvciBhbiBlcnJvciBhbmQgdHJhbnNpdGlvbiB0byBgVENQX0NMT1NFYCBpZiB0aGVyZSB3YXMgb25lLiBOb3csIHRoZSB0cmFuc2l0aW9uIHRvIGBUQ1BfQ0xPU0VgIG9ubHkgaGFwcGVucyAqaWYqIHRoZXJlJiMzOTtzIGFuIGVycm9yICphbmQqIHRoZSBzb2NrZXQgaXNuJiMzOTt0IGFscmVhZHkgYFRDUF9FU1RBQkxJU0hFRGAgb3IgYFRDUF9DTE9TSU5HYC4gVGhpcyBpbXBsaWVzIHRoZXkmIzM5O3JlIHRyeWluZyB0byBwcmV2ZW50IHByZW1hdHVyZSBzb2NrZXQgY2xvc3VyZSBpbiBjZXJ0YWluIGNvbm5lY3Rpb24gc2NlbmFyaW9zLgoKU28sIHRoaXMgcGF0Y2ggY2hhbmdlcyBzb2NrZXQgc3RhdGUgdHJhbnNpdGlvbnMgd2l0aGluIGB2c29ja19jb25uZWN0YC4gR2l2ZW4gdGhhdCBBRl9WU09DSyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgYW5kIGl0JiMzOTtzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHdpdGggdmlydGlvLXZzb2NrIG9yIHZzb2NrX2xvb3BiYWNrLiBBbHNvLCBzaW5jZSBTeXprYWxsZXIgaXMgYWN0aXZlbHkgdGVzdGluZyB0aGlzIHdpdGggdmFyaW91cyBzb2NrZXQgY2FsbHMgaW5jbHVkaW5nIGBjb25uZWN0KClgLCB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIGNvcmUsIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGFmZmVjdCBzdGFiaWxpdHkgYW5kIGVycm9yIGhhbmRsaW5nLgoKVGhlcmVmb3JlLCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCAqKnRydWUqKiEKCk5vdywgZm9yIEZvY3VzU3ltYm9scywgYHZzb2NrX2Nvbm5lY3RgIGlzIHRoZSBrZXkuIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgbW9kaWZpZWQ/IEkgbmVlZCB0byBjaGVjayB0aGUgcmVzdCBvZiBgYWZfdnNvY2suY2AgYW5kIHJlbGF0ZWQgZmlsZXMsIGJ1dCB0aGUgcGF0Y2ggc2VlbXMgZm9jdXNlZCBzb2xlbHkgb24gYHZzb2NrX2Nvbm5lY3RgLiBOb3cgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjYWxsZXJzIGFyZSB3aXRoaW4gYGFmX3Zzb2NrLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjA5PXN0YXRpYyBERUZJTkVfTVVURVgodnNvY2tfcmVnaXN0ZXJfbXV0ZXgpO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMzUtXHQoKChzcmMpLVx1MDAzZXN2bV9jaWQgXiAoZHN0KS1cdTAwM2Vzdm1fcG9ydCkgJSBWU09DS19IQVNIX1NJWkUpXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM2OiNkZWZpbmUgdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoc3JjLCBkc3QpXHRcdFxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM3Olx0KFx1MDAyNnZzb2NrX2Nvbm5lY3RlZF90YWJsZVtWU09DS19DT05OX0hBU0goc3JjLCBkc3QpXSlcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzg6I2RlZmluZSB2c29ja19jb25uZWN0ZWRfc29ja2V0c192c2sodnNrKVx0XHRcdFx0XFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzk6XHR2c29ja19jb25uZWN0ZWRfc29ja2V0cyhcdTAwMjYodnNrKS1cdTAwM2VyZW1vdGVfYWRkciwgXHUwMDI2KHZzayktXHUwMDNlbG9jYWxfYWRkcilcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNDAtXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI0Mj1FWFBPUlRfU1lNQk9MX0dQTCh2c29ja19iaW5kX3RhYmxlKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDM6c3RydWN0IGxpc3RfaGVhZCB2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfSEFTSF9TSVpFXTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDQ6RVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfY29ubmVjdGVkX3RhYmxlKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNDUtREVGSU5FX1NQSU5MT0NLKHZzb2NrX3RhYmxlX2xvY2spO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjA9c3RhdGljIHZvaWQgdnNvY2tfaW5pdF90YWJsZXModm9pZClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY2LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2tfY29ubmVjdGVkX3RhYmxlKTsgaSYjNDM7JiM0MzspXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY4Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2c29ja19jb25uZWN0ZWRfdGFibGVbaV0pO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2OS19XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTMyMD1fX3Zzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICpzcmMsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMyNC1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMjU6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzaywgdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoc3JjLCBkc3QpLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMyNi1cdFx0XHQgICAgY29ubmVjdGVkX3RhYmxlKSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTM0Nj12b2lkIHZzb2NrX2luc2VydF9jb25uZWN0ZWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNDcte1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjM0ODpcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSB2c29ja19jb25uZWN0ZWRfc29ja2V0cyhcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNDktXHRcdFx1MDAyNnZzay1cdTAwM2VyZW1vdGVfYWRkciwgXHUwMDI2dnNrLVx1MDAzZWxvY2FsX2FkZHIpO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz00ODM9dm9pZCB2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDg5LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ5MDpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2tfY29ubmVjdGVkX3RhYmxlKTsgaSYjNDM7JiM0MzspIHtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00OTEtXHRcdHN0cnVjdCB2c29ja19zb2NrICp2c2s7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6NDkyOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzaywgXHUwMDI2dnNvY2tfY29ubmVjdGVkX3RhYmxlW2ldLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTQ5My1cdFx0XHRcdCAgICBjb25uZWN0ZWRfdGFibGUpIHtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9NTk5PWludCB2c29ja19hc3NpZ25fdHJhbnNwb3J0KHN0cnVjdCB2c29ja19zb2NrICp2c2ssIHN0cnVjdCB2c29ja19zb2NrICpwc2spXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTY3Mi1cdFx0LyogdHJhbnNwb3J0LVx1MDAzZXJlbGVhc2UoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIHNvY2sgbG9jayBhY3F1aXJlZC5cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo2NzM6XHRcdCAqIFRoaXMgcGF0aCBjYW4gb25seSBiZSB0YWtlbiBkdXJpbmcgdnNvY2tfY29ubmVjdCgpLCB3aGVyZSB3ZVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTY3NC1cdFx0ICogaGF2ZSBhbHJlYWR5IGhlbGQgdGhlIHNvY2sgbG9jay4gSW4gdGhlIG90aGVyIGNhc2VzLCB0aGlzXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTY4Mi1cdFx0ICogc3RhdGUsIHNpbmNlIHdlIGFyZSByZWFzc2lnbmluZyB0aGUgc29ja2V0IHRvIGEgbmV3IHRyYW5zcG9ydFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjY4MzpcdFx0ICogZHVyaW5nIHZzb2NrX2Nvbm5lY3QoKSwgbGV0JiMzOTtzIHJlc2V0IHRoZXNlIGZpZWxkcyB0byBoYXZlIGFcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy02ODQtXHRcdCAqIGNsZWFuIHN0YXRlLlxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz04OTc9c3RhdGljIGludCBfX3Zzb2NrX2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTkzMy1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5MzQ6c3RhdGljIHZvaWQgdnNvY2tfY29ubmVjdF90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTM1LVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTkzNj1zdGF0aWMgc3RydWN0IHNvY2sgKl9fdnNvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTc1LVx0V1JJVEVfT05DRSh2c2stXHUwMDNlcGVlcl9zaHV0ZG93biwgMCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTc2Olx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2dnNrLVx1MDAzZWNvbm5lY3Rfd29yaywgdnNvY2tfY29ubmVjdF90aW1lb3V0KTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy05NzctXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZ2c2stXHUwMDNlcGVuZGluZ193b3JrLCB2c29ja19wZW5kaW5nX3dvcmspO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xMDkwPUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX3N0cmVhbV9oYXNfZGF0YSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTA5MS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxMDkyOnM2NCB2c29ja19jb25uZWN0aWJsZV9oYXNfZGF0YShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTEwOTMte1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMTAzLX1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxMTA0OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2Nvbm5lY3RpYmxlX2hhc19kYXRhKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMTA1LVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xNjcyPXN0YXRpYyBpbnQgdnNvY2tfdHJhbnNwb3J0X2NhbmNlbF9wa3Qoc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTY4MS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNjgyOnN0YXRpYyB2b2lkIHZzb2NrX2Nvbm5lY3RfdGltZW91dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTY4My17XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE3MDMtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTcwNDpzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTcwNS1cdFx0XHQgaW50IGFkZHJfbGVuLCBpbnQgZmxhZ3MpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTE5OTY9c3RhdGljIHZvaWQgdnNvY2tfdXBkYXRlX2J1ZmZlcl9zaXplKHN0cnVjdCB2c29ja19zb2NrICp2c2ssXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIwMTItXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjAxMzpzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3RpYmxlX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMDE0LVx0XHRcdFx0XHRpbnQgbGV2ZWwsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIxMjYtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjEyNzpzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3RpYmxlX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTI4LVx0XHRcdFx0XHRpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTg1LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIxODY6c3RhdGljIGludCB2c29ja19jb25uZWN0aWJsZV9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTg3LVx0XHRcdFx0ICAgICBzaXplX3QgbGVuKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMzQ3LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzNDg6c3RhdGljIGludCB2c29ja19jb25uZWN0aWJsZV93YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzNDktXHRcdFx0XHQgICAgICAgc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzNjQtXHRcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChzayksIHdhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM2NTpcdFx0ZGF0YSA9IHZzb2NrX2Nvbm5lY3RpYmxlX2hhc19kYXRhKHZzayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjM2Ni1cdFx0aWYgKGRhdGEgIT0gMClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjQxNT1zdGF0aWMgaW50IF9fdnNvY2tfc3RyZWFtX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0NTItXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ1MzpcdFx0ZXJyID0gdnNvY2tfY29ubmVjdGlibGVfd2FpdF9kYXRhKHNrLCBcdTAwMjZ3YWl0LCB0aW1lb3V0LFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0NTQtXHRcdFx0XHRcdFx0ICBcdTAwMjZyZWN2X2RhdGEsIHRhcmdldCk7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI0OTQ9c3RhdGljIGludCBfX3Zzb2NrX3NlcXBhY2tldF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTA4LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI1MDk6XHRlcnIgPSB2c29ja19jb25uZWN0aWJsZV93YWl0X2RhdGEoc2ssIFx1MDAyNndhaXQsIHRpbWVvdXQsIE5VTEwsIDApO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI1MTAtXHRpZiAoZXJyIFx1MDAzYz0gMClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjU0ND1pbnRcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNTQ1Ol9fdnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjU0Ni1cdFx0XHQgICAgaW50IGZsYWdzKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjExPWludFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2MTI6dnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYxMy1cdFx0XHQgIGludCBmbGFncylcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYyMy1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjI0Olx0cmV0dXJuIF9fdnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyhzb2NrLCBtc2csIGxlbiwgZmxhZ3MpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MjUtfVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2MjY6RVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYyNy1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjY1Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB2c29ja19zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjU2LVx0LmJpbmQgPSB2c29ja19iaW5kLFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NTc6XHQuY29ubmVjdCA9IHZzb2NrX2Nvbm5lY3QsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY1OC1cdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjY0LVx0LnNodXRkb3duID0gdnNvY2tfc2h1dGRvd24sXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY2NTpcdC5zZXRzb2Nrb3B0ID0gdnNvY2tfY29ubmVjdGlibGVfc2V0c29ja29wdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjY2Olx0LmdldHNvY2tvcHRfaXRlciA9IHZzb2NrX2Nvbm5lY3RpYmxlX2dldHNvY2tvcHQsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY2NzpcdC5zZW5kbXNnID0gdnNvY2tfY29ubmVjdGlibGVfc2VuZG1zZyxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjY4Olx0LnJlY3Ztc2cgPSB2c29ja19jb25uZWN0aWJsZV9yZWN2bXNnLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NjktXHQubW1hcCA9IHNvY2tfbm9fbW1hcCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjY3ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB2c29ja19zZXFwYWNrZXRfb3BzID0ge1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjc4LVx0LmJpbmQgPSB2c29ja19iaW5kLFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2Nzk6XHQuY29ubmVjdCA9IHZzb2NrX2Nvbm5lY3QsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY4MC1cdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjg2LVx0LnNodXRkb3duID0gdnNvY2tfc2h1dGRvd24sXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY4NzpcdC5zZXRzb2Nrb3B0ID0gdnNvY2tfY29ubmVjdGlibGVfc2V0c29ja29wdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjg4Olx0LmdldHNvY2tvcHRfaXRlciA9IHZzb2NrX2Nvbm5lY3RpYmxlX2dldHNvY2tvcHQsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY4OTpcdC5zZW5kbXNnID0gdnNvY2tfY29ubmVjdGlibGVfc2VuZG1zZyxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjkwOlx0LnJlY3Ztc2cgPSB2c29ja19jb25uZWN0aWJsZV9yZWN2bXNnLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2OTEtXHQubW1hcCA9IHNvY2tfbm9fbW1hcCxcbi0tXG5uZXQvdm13X3Zzb2NrL2RpYWcuYz00OD1zdGF0aWMgaW50IHZzb2NrX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L3Ztd192c29jay9kaWFnLmMtMTAxLVx0LyogQ29ubmVjdGVkIHRhYmxlIChhY2NlcHRlZCBjb25uZWN0aW9ucykgKi9cbm5ldC92bXdfdnNvY2svZGlhZy5jOjEwMjpcdHdoaWxlIChidWNrZXQgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2tfY29ubmVjdGVkX3RhYmxlKSkge1xubmV0L3Ztd192c29jay9kaWFnLmM6MTAzOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gXHUwMDI2dnNvY2tfY29ubmVjdGVkX3RhYmxlW2J1Y2tldF07XG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0xMDQtXG4tLVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmM9MTkzPXN0YXRpYyBpbnQgaHZzX2NoYW5uZWxfcmVhZGFibGVfcGF5bG9hZChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbilcbi0tXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy0xOTgtXHRcdC8qIEF0IGxlYXN0IHdlIGhhdmUgMSBieXRlIHRvIHJlYWQuIFdlIGRvbiYjMzk7dCBuZWVkIHRvIHJldHVyblxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmM6MTk5Olx0XHQgKiB0aGUgZXhhY3QgcmVhZGFibGUgYnl0ZXM6IHNlZSB2c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKCkgLVx1MDAzZVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMjAwLVx0XHQgKiB2c29ja19zdHJlYW1faGFzX2RhdGEoKS5cbi0tXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2JwZi5jPTI1PXN0YXRpYyBib29sIHZzb2NrX2hhc19kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2JwZi5jLTI5LVxubmV0L3Ztd192c29jay92c29ja19icGYuYzozMDpcdHJldCA9IHZzb2NrX2Nvbm5lY3RpYmxlX2hhc19kYXRhKHZzayk7XG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2JwZi5jLTMxLVx0aWYgKHJldCBcdTAwM2UgMClcbi0tXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2JwZi5jPTYxPXN0YXRpYyBpbnQgX192c29ja19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG4tLVxubmV0L3Ztd192c29jay92c29ja19icGYuYy02Ni1cdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNIHx8IHNrLVx1MDAzZXNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2JwZi5jOjY3Olx0XHRlcnIgPSBfX3Zzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2coc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcbm5ldC92bXdfdnNvY2svdnNvY2tfYnBmLmMtNjgtXHRlbHNlIGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfREdSQU0pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5MjAKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBWU09DSyBDb25uZWN0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYHZzb2NrX2Nvbm5lY3RgIGFuZCBgdnNvY2tfY29ubmVjdF90aW1lb3V0YCBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgc2luY2UgdGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIGB2c29ja19jb25uZWN0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19WU09DS0VUU2AgaXMgZW5hYmxlZCwgYXMgdGhpcyBpcyB0aGUgcHJpbWFyeSBlbmFibGVyIGZvciBgYWZfdnNvY2suY2AuIEZ1cnRoZXJtb3JlLCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1ZTT0NLRVRTX0xPT1BCQUNLYCBvciBgQ09ORklHX1ZJUlRJT19WU09DS0VUU2AgYXJlIGFsc28gZW5hYmxlZCwgYXMgdGhlc2Ugb3B0aW9ucyBwcm92aWRlIHRoZSBzcGVjaWZpYyB0cmFuc3BvcnRzIHRoYXQgdXRpbGl6ZSBWU09DSy4gSW4gZXNzZW5jZSwgYFZTT0NLRVRTYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIGVuYWJsaW5nIHRoZSBjb3JlIGBhZl92c29jay5jYCBtb2R1bGUgdGhhdCBob3VzZXMgdGhlIGB2c29ja19jb25uZWN0YCBmdW5jdGlvbi4KCk5vdywgbGV0JiMzOTtzIHNvbGlkaWZ5IHRoZSB1bmRlcnN0YW5kaW5nLiBUaGUgcHJvdmlkZWQgY29udGV4dCBpbmRpY2F0ZXMgdGhpcyBpcyB3b3J0aCBmdXp6aW5nIGFuZCB0aGF0IHRoZSBpbXBvcnRhbnQgY29uZmlndXJhdGlvbnMgYXJlIHByZXNlbnQuIGBWU09DS0VUU2AsIGBWU09DS0VUU19MT09QQkFDS2AsIGFuZCBgVklSVElPX1ZTT0NLRVRTYCBhcmUgdGhlIHJlbGV2YW50IGVuYWJsaW5nIGNvbmZpZ3MuIFRoZSBgdnNvY2tfY29ubmVjdGAgZnVuY3Rpb24gaXMgdGhlIHRhcmdldGVkIHN5bWJvbC4KClRoZSByZWFzb25pbmcgcHJvdmlkZWQgY2xhcmlmaWVzIHRoZSBjb3JlIGltcGFjdDogVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIHNvY2tldCBzdGF0ZSBjaGVja3Mgd2l0aGluIGB2c29ja19jb25uZWN0YCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGhvdyB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2NlZWRzIGFuZCBob3cgc29ja2V0IGVycm9ycyBhcmUgaGFuZGxlZC4gVGhlIGNoYW5nZSBhdm9pZHMgYW4gdW53YW50ZWQgc3RhdGUgcmVzZXQgaW4gY2VydGFpbiBlcnJvciBjb25kaXRpb25zIHdoZW4gdGhlIHNvY2tldCBzdGF0ZSAoYHNrX3N0YXRlYCkgaXMgYFRDUF9DTE9TSU5HYC4gVGhpcyBjbGVhcmx5IGFmZmVjdHMgdGhlIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudCB3aXRoaW4gdGhlIEFGX1ZTT0NLIG5ldHdvcmsgYWRkcmVzcyBmYW1pbHkuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGlzc3VlLgoKRmluYWxseSwgaGF2aW5nIHZhbGlkYXRlZCB0aGUgYW5hbHlzaXMgYW5kIGNvbmZpcm1lZCB0aGUgY3JpdGljYWwgZWxlbWVudHMsIGl0JiMzOTtzIHRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fVlNPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2c29ja19jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHZzb2NrX2Nvbm5lY3QoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMsIGNoYW5naW5nIHRoZSBzdGF0ZSB2YWxpZGF0aW9uIGxvZ2ljIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIGJ5IGFjY29tbW9kYXRpbmcgdGhlIFRDUF9DTE9TSU5HIHNvY2tldCBzdGF0ZS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBBRl9WU09DSyBzb2NrZXQgbGlmZWN5Y2xlIHRyYW5zaXRpb25zIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fVlNPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2c29ja19jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHZzb2NrX2Nvbm5lY3QoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMsIGNoYW5naW5nIHRoZSBzdGF0ZSB2YWxpZGF0aW9uIGxvZ2ljIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIGJ5IGFjY29tbW9kYXRpbmcgdGhlIFRDUF9DTE9TSU5HIHNvY2tldCBzdGF0ZS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBBRl9WU09DSyBzb2NrZXQgbGlmZWN5Y2xlIHRyYW5zaXRpb25zIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3RhdGUgbWFjaGluZSBoYW5kbGluZyBpbiB2c29ja19jb25uZWN0KCkgYnkgdHJlYXRpbmcgVENQX0NMT1NJTkcgc2ltaWxhcmx5IHRvIFRDUF9FU1RBQkxJU0hFRCB3aGVuIGNoZWNraW5nIHNrLVx1MDAzZXNrX3N0YXRlIHVwb24gd2FraW5nIGZyb20gY29ubmVjdGlvbiB3YWl0IGFuZCBlcnJvciBoYW5kbGluZy4gVGhpcyBjaGFuZ2UgYWZmZWN0cyBzb2NrZXQgY29udHJvbCBmbG93IGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyBvbmx5LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGJ1ZmZlciBjb3B5aW5nIG9yIHNpemluZywgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcy9wYWRkaW5nIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MTdlZDQ3NjI5NTQwZTgyNzc4ZjA4MGE5ODY2NDFlNzcyNGU2MTYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAyMjozMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwppbmRleCBmODQwNDk4YjU4YWZiLi5lZWM1ZGQ2ZGFlYmIxIDEwMDY0NAotLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCkBAIC0xODM0LDIzICYjNDM7MTgzNCwyMCBAQCBzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsCiAJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwogCQlsb2NrX3NvY2soc2spOwogCi0JCS8qIENvbm5lY3Rpb24gZXN0YWJsaXNoZWQuIFdoYXRldmVyIGhhcHBlbnMgdG8gc29ja2V0IG9uY2Ugd2UKLQkJICogcmVsZWFzZSBpdCwgdGhhdCYjMzk7cyBub3QgY29ubmVjdCgpJiMzOTtzIGNvbmNlcm4uIE5vIG5lZWQgdG8gZ28KJiM0MzsJCS8qIENvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLiBXaGF0ZXZlciBoYXBwZW5zIHRvIHNvY2tldCBvbmNlCiYjNDM7CQkgKiB3ZSByZWxlYXNlIGl0LCB0aGF0JiMzOTtzIG5vdCBjb25uZWN0KCkmIzM5O3MgY29uY2Vybi4gTm8gbmVlZCB0byBnbwogCQkgKiBpbnRvIHNpZ25hbCBhbmQgdGltZW91dCBoYW5kbGluZy4gQ2FsbCBpdCBhIGRheS4KIAkJICoKIAkJICogTm90ZSB0aGF0IGFsbG93aW5nIHRvICYjMzQ7cmVzZXQmIzM0OyBhbiBhbHJlYWR5IGVzdGFibGlzaGVkIHNvY2tldAogCQkgKiBoZXJlIGlzIHJhY3kgYW5kIGluc2VjdXJlLgogCQkgKi8KLQkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpCiYjNDM7CQlpZiAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCB8fAomIzQzOwkJICAgIHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0lORykKIAkJCWJyZWFrOwogCiAJCS8qIElmIGNvbm5lY3Rpb24gd2FzIF9ub3RfIGVzdGFibGlzaGVkIGFuZCBhIHNpZ25hbC90aW1lb3V0IGNhbWUKIAkJICogdG8gYmUsIHdlIHdhbnQgdGhlIHNvY2tldCYjMzk7cyBzdGF0ZSByZXNldC4gVXNlciBzcGFjZSBtYXkgd2FudAogCQkgKiB0byByZXRyeS4KLQkJICoKLQkJICogc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIGltcGxpZXMgdGhhdCBzb2NrZXQgaXMgbm90IG9uCi0JCSAqIHZzb2NrX2Nvbm5lY3RlZF90YWJsZS4gV2Uga2VlcCB0aGUgYmluZGluZyBhbmQgdGhlIHRyYW5zcG9ydAotCQkgKiBhc3NpZ25lZC4KIAkJICovCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSB8fCB0aW1lb3V0ID09IDApIHsKIAkJCWVyciA9IHRpbWVvdXQgPT0gMCA/IC1FVElNRURPVVQgOiBzb2NrX2ludHJfZXJybm8odGltZW91dCk7CkBAIC0xODc1LDcgJiM0MzsxODcyLDggQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLAogCX0KIAogCWVyciA9IHNvY2tfZXJyb3Ioc2spOwotCWlmIChlcnIpIHsKJiM0MzsJaWYgKGVyciAmYW1wOyZhbXA7CiYjNDM7CSAgICBzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEICZhbXA7JmFtcDsgc2stJmd0O3NrX3N0YXRlICE9IFRDUF9DTE9TSU5HKSB7CiAJCXNrLSZndDtza19zdGF0ZSA9IFRDUF9DTE9TRTsKIAkJc29jay0mZ3Q7c3RhdGUgPSBTU19VTkNPTk5FQ1RFRDsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDcwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmVlZCBmb3IgRGVkaWNhdGVkIEtNU0FOIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBiZWluZyBhc2tlZCBpZiB0aGlzIGtlcm5lbCBwYXRjaCBpbiBgbmV0L3Ztd192c29jay9hZl92c29jay5jYCBuZWVkcyBzcGVjaWFsIEtNU0FOIGZ1enppbmcsIG9yIGlmIEtBU0FOIGFuZCBzdGFuZGFyZCBmdXp6aW5nIGFyZSBzdWZmaWNpZW50LiBSaWdodCwgbGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGRvZXMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW4gdGhlIGB2c29ja19jb25uZWN0YCBmdW5jdGlvbi4gVGhlIGNvZGUgYmxvY2sgYWRkcmVzc2VzIHNvbWUgZWRnZSBjYXNlcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHRpbWVvdXRzIGFuZCBzaWduYWxzIGR1cmluZyB0aGUgY29ubmVjdGlvbiBwcm9jZXNzLiBJdCBhcHBlYXJzIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBtaXNzaW5nIGEgc3RhdGUgY2hlY2suIFRoZXkmIzM5O3ZlIHVwZGF0ZWQgdGhpcyB0byBhbGxvdyBlc3RhYmxpc2hlZCBvciBjbG9zaW5nIHNvY2tldHMuIFRoZW4gd2Ugc2VlIGFuIGBlcnJgIGNoZWNrIGFuZCBhIHN0YXRlIHRyYW5zaXRpb24gYmFjayB0byBgVENQX0NMT1NFYC4gVGhlIGNvZGUgbm93IGF2b2lkcyB0aGUgc3RhdGUgY2hlY2sgd2hlbiB0aGUgc29ja2V0IGlzIGluIGFuIGVzdGFibGlzaGVkIG9yIGNsb3Npbmcgc3RhdGUuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHJlZmluaW5nIHRoZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGZsb3cuIFRoZXkgYXJlIGNvcnJlY3Rpbmcgc29ja2V0IHN0YXRlIGhhbmRsaW5nIGR1cmluZyBjb25uZWN0aW9uIHRpbWVvdXRzIGFuZCBpbnRlcnJ1cHRzLgoKTm93LCBjb25zaWRlcmluZyB0aGUgZmlsZSBwYXRoIGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgLCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGZvciB2c29jaywgd2hpY2ggaXMgYSB2aXJ0dWFsIHNvY2tldCBpbXBsZW1lbnRhdGlvbiB0eXBpY2FsbHkgdXNlZCBpbiB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudHMuIE5ldHdvcmtpbmcgY29kZSBpcyBvZnRlbiBhIHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIGl0IGlzIGNvbXBsZXgsIGFuZCBjYW4gYmUgc3ViamVjdCB0byBleHRlcm5hbCBpbnB1dCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHBsYWNlIHRvIHRyaWdnZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIFRoZSBjb2RlIGl0c2VsZiB0b3VjaGVzIG9uIHNvY2tldCBzdGF0ZXMgYW5kIGNvbm5lY3Rpb24gdGltZW91dHMsIHdoaWNoIGhpbnRzIGF0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGNvbmN1cnJlbmN5IHByb2JsZW1zLgoKU28sIGRvIHdlICpuZWVkKiBkZWRpY2F0ZWQgS01TQU4gZnV6emluZz8gTXkgZ3V0IHNheXMgJiMzNDtwcm9iYWJseSBub3QgKmp1c3QqIGZvciB0aGlzJiMzNDsuIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24mIzM5O3Qgc2NyZWFtICYjMzQ7S01TQU4gdnVsbmVyYWJpbGl0eSYjMzQ7IHRvIG1lLiBLQVNBTiBzaG91bGQgYmUgZW5vdWdoIGZvciBiYXNpYyBtZW1vcnkgc2FmZXR5IGNoZWNrcyBhbmQgZGV0ZWN0aW5nIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGlzc3VlcyBpbiB0aGlzIGFyZWEuIFdlIGNhbiB1c2Ugc3RhbmRhcmQgZnV6emluZyB0ZWNobmlxdWVzLiBUaGlzIGlzIGJlY2F1c2UgS0FTQU4gaXMgYWxyZWFkeSBlbmFibGVkLCBzbyB3ZSB3aWxsIGxpa2VseSBjYXRjaCBhbnkgY29tbW9uIG1lbW9yeSBlcnJvcnMgd2l0aG91dCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4gQnV0IEkgbmVlZCB0byBiZSBtb3JlIHRob3JvdWdoLCBzbyBJJiMzOTtsbCBhbHNvIGNvbnNpZGVyIHRoaXM6IGlmIHRoaXMgdnNvY2sgY29kZSBpcyBhIGNyaXRpY2FsIGNvbXBvbmVudCBvZiBhIGxhcmdlciBzeXN0ZW0sIHNheSBhIGh5cGVydmlzb3IsIG9yIGlmIHRoaXMgZnVuY3Rpb24gaXMgY29tbW9ubHkgY2FsbGVkIHdpdGggbWFueSBleHRlcm5hbCBpbnB1dHMsIGl0IG1heSBiZSB3b3J0aHdoaWxlIHRvIGludmVzdGlnYXRlIGZ1enppbmcgYW5kIEtNU0FOLiBLTVNBTiBpcyBtb3JlIHNwZWNpZmljIGZvciBrZXJuZWwgbWVtb3J5IHNhZmV0eS4gU28sIElmIEkgc2VlIHNvbWUgcG90ZW50aWFsIGhlcmUsIEkgY2FuIGFkZCBpdCB0byB0aGUgbGlzdC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IG1vcmUgYWJvdXQgdGhlIGJyb2FkZXIgc3lzdGVtIGNvbnRleHQgdG8gbWFrZSBhIGZpbmFsIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgwMDpcdFx0LyogVGhlIHJlY2VpdmUgcGF0aCB3aWxsIGhhbmRsZSBhbGwgY29tbXVuaWNhdGlvbiB1bnRpbCB3ZSBhcmUgYWJsZSB0b1xuMTgwMTpcdFx0ICogZW50ZXIgdGhlIGNvbm5lY3RlZCBzdGF0ZS4gIEhlcmUgd2Ugd2FpdCBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gYmVcbjE4MDI6XHRcdCAqIGNvbXBsZXRlZCBvciBhIG5vdGlmaWNhdGlvbiBvZiBhbiBlcnJvci5cbjE4MDM6XHRcdCAqL1xuMTgwNDpcdFx0dGltZW91dCA9IHZzay1cdTAwM2Vjb25uZWN0X3RpbWVvdXQ7XG4xODA1Olx0XHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xuMTgwNjpcdFxuMTgwNzpcdFx0LyogSWYgdGhlIHNvY2tldCBpcyBhbHJlYWR5IGNsb3Npbmcgb3IgaXQgaXMgaW4gYW4gZXJyb3Igc3RhdGUsIHRoZXJlXG4xODA4Olx0XHQgKiBpcyBubyBwb2ludCBpbiB3YWl0aW5nLlxuMTgwOTpcdFx0ICovXG4xODEwOlx0XHR3aGlsZSAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIFx1MDAyNlx1MDAyNlxuMTgxMTpcdFx0ICAgICAgIHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TSU5HIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19lcnIgPT0gMCkge1xuMTgxMjpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0spIHtcbjE4MTM6XHRcdFx0XHQvKiBJZiB3ZSYjMzk7cmUgbm90IGdvaW5nIHRvIGJsb2NrLCB3ZSBzY2hlZHVsZSBhIHRpbWVvdXRcbjE4MTQ6XHRcdFx0XHQgKiBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHRpbWVvdXQgb24gdGhlIGNvbm5lY3Rpb25cbjE4MTU6XHRcdFx0XHQgKiBhdHRlbXB0LCBpbiBjYXNlIHRoZSBwZWVyIGRvZXNuJiMzOTt0IHJlc3BvbmQgaW4gYVxuMTgxNjpcdFx0XHRcdCAqIHRpbWVseSBtYW5uZXIuIFdlIGhvbGQgb24gdG8gdGhlIHNvY2tldCB1bnRpbCB0aGVcbjE4MTc6XHRcdFx0XHQgKiB0aW1lb3V0IGZpcmVzLlxuMTgxODpcdFx0XHRcdCAqL1xuMTgxOTpcdFx0XHRcdHNvY2tfaG9sZChzayk7XG4xODIwOlx0XG4xODIxOlx0XHRcdFx0LyogSWYgdGhlIHRpbWVvdXQgZnVuY3Rpb24gaXMgYWxyZWFkeSBzY2hlZHVsZWQsXG4xODIyOlx0XHRcdFx0ICogcmVzY2hlZHVsZSBpdCwgdGhlbiB1bmdyYWIgdGhlIHNvY2tldCByZWZjb3VudCB0b1xuMTgyMzpcdFx0XHRcdCAqIGtlZXAgaXQgYmFsYW5jZWQuXG4xODI0Olx0XHRcdFx0ICovXG4xODI1Olx0XHRcdFx0aWYgKG1vZF9kZWxheWVkX3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgXHUwMDI2dnNrLVx1MDAzZWNvbm5lY3Rfd29yayxcbjE4MjY6XHRcdFx0XHRcdFx0ICAgICB0aW1lb3V0KSlcbjE4Mjc6XHRcdFx0XHRcdHNvY2tfcHV0KHNrKTtcbjE4Mjg6XHRcbjE4Mjk6XHRcdFx0XHQvKiBTa2lwIGFoZWFkIHRvIHByZXNlcnZlIGVycm9yIGNvZGUgc2V0IGFib3ZlLiAqL1xuMTgzMDpcdFx0XHRcdGdvdG8gb3V0X3dhaXQ7XG4xODMxOlx0XHRcdH1cbjE4MzI6XHRcbjE4MzM6XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbjE4MzQ6XHRcdFx0dGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7XG4xODM1Olx0XHRcdGxvY2tfc29jayhzayk7XG4xODM2Olx0XG4xODM3Olx0XHRcdC8qIENvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLiBXaGF0ZXZlciBoYXBwZW5zIHRvIHNvY2tldCBvbmNlXG4xODM4Olx0XHRcdCAqIHdlIHJlbGVhc2UgaXQsIHRoYXQmIzM5O3Mgbm90IGNvbm5lY3QoKSYjMzk7cyBjb25jZXJuLiBObyBuZWVkIHRvIGdvXG4xODM5Olx0XHRcdCAqIGludG8gc2lnbmFsIGFuZCB0aW1lb3V0IGhhbmRsaW5nLiBDYWxsIGl0IGEgZGF5LlxuMTg0MDpcdFx0XHQgKlxuMTg0MTpcdFx0XHQgKiBOb3RlIHRoYXQgYWxsb3dpbmcgdG8gXCYjMzQ7cmVzZXRcJiMzNDsgYW4gYWxyZWFkeSBlc3RhYmxpc2hlZCBzb2NrZXRcbjE4NDI6XHRcdFx0ICogaGVyZSBpcyByYWN5IGFuZCBpbnNlY3VyZS5cbjE4NDM6XHRcdFx0ICovXG4xODQ0Olx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQgfHxcbjE4NDU6XHRcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TSU5HKVxuMTg0NjpcdFx0XHRcdGJyZWFrO1xuMTg0NzpcdFxuMTg0ODpcdFx0XHQvKiBJZiBjb25uZWN0aW9uIHdhcyBfbm90XyBlc3RhYmxpc2hlZCBhbmQgYSBzaWduYWwvdGltZW91dCBjYW1lXG4xODQ5Olx0XHRcdCAqIHRvIGJlLCB3ZSB3YW50IHRoZSBzb2NrZXQmIzM5O3Mgc3RhdGUgcmVzZXQuIFVzZXIgc3BhY2UgbWF5IHdhbnRcbjE4NTA6XHRcdFx0ICogdG8gcmV0cnkuXG4xODUxOlx0XHRcdCAqL1xuMTg1MjpcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgfHwgdGltZW91dCA9PSAwKSB7XG4xODUzOlx0XHRcdFx0ZXJyID0gdGltZW91dCA9PSAwID8gLUVUSU1FRE9VVCA6IHNvY2tfaW50cl9lcnJubyh0aW1lb3V0KTtcbjE4NTQ6XHRcbjE4NTU6XHRcdFx0XHQvKiBMaXN0ZW5lciBtaWdodCBoYXZlIGFscmVhZHkgcmVzcG9uZGVkIHdpdGhcbjE4NTY6XHRcdFx0XHQgKiBWSVJUSU9fVlNPQ0tfT1BfUkVTUE9OU0UuIEl0cyBoYW5kbGluZyBleHBlY3RzIG91clxuMTg1NzpcdFx0XHRcdCAqIHNrX3N0YXRlID09IFRDUF9TWU5fU0VOVCwgd2hpY2ggaGVyZWJ5IHdlIGJyZWFrLlxuMTg1ODpcdFx0XHRcdCAqIEluIHN1Y2ggY2FzZSBWSVJUSU9fVlNPQ0tfT1BfUlNUIHdpbGwgZm9sbG93LlxuMTg1OTpcdFx0XHRcdCAqL1xuMTg2MDpcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gVENQX0NMT1NFO1xuMTg2MTpcdFx0XHRcdHNvY2stXHUwMDNlc3RhdGUgPSBTU19VTkNPTk5FQ1RFRDtcbjE4NjI6XHRcbjE4NjM6XHRcdFx0XHQvKiBUcnkgdG8gY2FuY2VsIFZJUlRJT19WU09DS19PUF9SRVFVRVNUIHNrYiBzZW50IG91dCBieVxuMTg2NDpcdFx0XHRcdCAqIHRyYW5zcG9ydC1cdTAwM2Vjb25uZWN0KCkuXG4xODY1Olx0XHRcdFx0ICovXG4xODY2Olx0XHRcdFx0dnNvY2tfdHJhbnNwb3J0X2NhbmNlbF9wa3QodnNrKTtcbjE4Njc6XHRcbjE4Njg6XHRcdFx0XHRnb3RvIG91dF93YWl0O1xuMTg2OTpcdFx0XHR9XG4xODcwOlx0XG4xODcxOlx0XHRcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChzayksIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG4xODcyOlx0XHR9XG4xODczOlx0XG4xODc0Olx0XHRlcnIgPSBzb2NrX2Vycm9yKHNrKTtcbjE4NzU6XHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2XG4xODc2Olx0XHQgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0lORykge1xuMTg3NzpcdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcbjE4Nzg6XHRcdFx0c29jay1cdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xuMTg3OTpcdFx0fVxuMTg4MDpcdFxuMTg4MTpcdG91dF93YWl0OlxuMTg4MjpcdFx0ZmluaXNoX3dhaXQoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0KTtcbjE4ODM6XHRvdXQ6XG4xODg0Olx0XHRyZWxlYXNlX3NvY2soc2spO1xuMTg4NTpcdFx0cmV0dXJuIGVycjtcbjE4ODY6XHR9XG4xODg3Olx0XG4xODg4Olx0c3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbjE4ODk6XHRcdFx0XHRzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxuMTg5MDpcdHtcbjE4OTE6XHRcdHN0cnVjdCBzb2NrICpsaXN0ZW5lcjtcbjE4OTI6XHRcdGludCBlcnI7XG4xODkzOlx0XHRzdHJ1Y3Qgc29jayAqY29ubmVjdGVkO1xuMTg5NDpcdFx0c3RydWN0IHZzb2NrX3NvY2sgKnZjb25uZWN0ZWQ7XG4xODk1Olx0XHRsb25nIHRpbWVvdXQ7XG4xODk2Olx0XHRERUZJTkVfV0FJVCh3YWl0KTtcbjE4OTc6XHRcbjE4OTg6XHRcdGVyciA9IDA7XG4xODk5Olx0XHRsaXN0ZW5lciA9IHNvY2stXHUwMDNlc2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMDEKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogNjk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIHZzb2NrX2Nvbm5lY3QgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGB2c29ja19jb25uZWN0YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHRoZSBzb2NrZXQgc3RhdGUgd2hpbGUgd2FpdGluZyBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gYmUgZXN0YWJsaXNoZWQuIFRoZSBjb3JlIGlzc3VlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGluIGxpbmUgMTgxMCB3aGVyZSB0aGUgY29kZSB3YWl0cyBmb3IgdGhlIHNvY2tldCBzdGF0ZSAoYHNrLSZndDtza19zdGF0ZWApIHRvIGJlY29tZSBgVENQX0VTVEFCTElTSEVEYC4gVGhlIG9yaWdpbmFsIGxvb3Agb25seSBjaGVja2VkIGZvciBgVENQX0VTVEFCTElTSEVEYCwgYnV0IHRoZSByZW1vdGUgZW5kIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gZHVyaW5nIHRoaXMgd2FpdCBjb3VsZCBjYXVzZSB0aGUgc3RhdGUgdG8gdHJhbnNpdGlvbiB0byBgVENQX0NMT1NJTkdgLiBUaGUgcHJldmlvdXMgbG9naWMgaGFkIGEgcG90ZW50aWFsIGZsYXcsIGFsbG93aW5nIGBUQ1BfQ0xPU0lOR2Agc3RhdGVzIHRvIGJlIG1pc3NlZCwgcmVzdWx0aW5nIGluIGFuIGVycm9yIGNoZWNrIGFmdGVyIHRoZSBsb29wIHRoYXQgY291bGQgZ2l2ZSBhbiBpbmFjY3VyYXRlIGVycm9yIGNvZGUuCgpUaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBgVENQX0NMT1NJTkdgIHdpdGhpbiB0aGUgbG9vcCBjb25kaXRpb24sIHByZXZlbnRpbmcgdGhlIGNvbm5lY3Rpb24gZnJvbSBzdGFsbGluZyBpbiB0aGUgZXZlbnQgb2YgYSByZW1vdGUgY2xvc3VyZSBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBmb3IgbWUsIGdpdmVuIG15IGV4cGVydGlzZSwgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3Mgc3lzdGVtYXRpY2FsbHkgZ28gdGhyb3VnaCB0aGUgY2hlY2tzLgoKRmlyc3QsIEkmIzM5O20gY2hlY2tpbmcgaWYgdGhpcyBwYXRjaCBhZmZlY3RzIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgZXhwb3NlZC4gTm8uIFRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGludGVybmFsIHNvY2tldCBzdGF0ZSB0cmFuc2l0aW9ucywgaXQgZG9lc24mIzM5O3QgdG91Y2ggYW55IGRhdGEgdHJhbnNmZXJyZWQgdG8gdXNlciBzcGFjZS4KCk5leHQsIEkmIzM5O20gdmVyaWZ5aW5nIGlmIHRoZXJlJiMzOTtzIGFueSBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy4gVGhlIHBhdGNoIG1hbmlwdWxhdGVzIHRoZSBgc2stJmd0O3NrX3N0YXRlYCwgd2hpY2ggaXMgYSB3ZWxsLWRlZmluZWQgZmllbGQgd2l0aGluIHRoZSBgc3RydWN0IHNvY2tgIHN0cnVjdHVyZS4gU28sIG5vLCB0aGVyZSBhcmUgbm8gY29uY2VybnMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC4KClRoaXJkLCBJJiMzOTttIGV2YWx1YXRpbmcgd2hldGhlciB0aGUgcGF0Y2ggYWxsb2NhdGVzIG9yIGluaXRpYWxpemVzIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gbGF0ZXIgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBmaWVsZHMuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNyZWF0ZWQgb3IgbW9kaWZpZWQgYnkgdGhpcyBjaGFuZ2UuCgpGaW5hbGx5LCBJJiMzOTttIGNoZWNraW5nIGlmIGl0IGFsdGVycyBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCB3b3VsZCBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgYnVmZmVycyBvciBsZW5ndGggY2FsY3VsYXRpb25zLCBzbyB0aGlzIGlzbiYjMzk7dCBhIGNvbmNlcm4gZWl0aGVyLgoKSW4gc2hvcnQsIHRoaXMgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIHRoZSBzb2NrZXQgc3RhdGUgbWFjaGluZSBmbG93IHdpdGhpbiBgdnNvY2tfY29ubmVjdCgpYC4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gc3RhdGUgaW5jb25zaXN0ZW5jeSwgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgdGVzdGluZy9sb2NrZGVwLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgaW5mb3JtYXRpb24gbGVhayByaXNrLgoKKipLTVNBTlJlYXNvbmluZzoqKiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBzdGF0ZSBjaGVja2luZyBjb25kaXRpb24gKGBzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0NMT1NJTkdgKSB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gbG9vcCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgdnNvY2tfY29ubmVjdCgpYC4gSXQgZG9lc24mIzM5O3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGNvcHkgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgaW50cm9kdWNlIGFueSBpbnN0YW5jZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGNvdWxkIG9jY3VyLiBBbnkgaXNzdWVzIHdpdGggY29uY3VycmVuY3kgb3Igc29ja2V0IHN0YXRlIGFyZSBlaXRoZXIgbG9naWNhbCBvciByZWxhdGVkIHRvIG9iamVjdCBsaWZlY3ljbGVzLCBhbmQgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdGhlIHN0YW5kYXJkIGRldGVjdGlvbiBtZWNoYW5pc21zLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLgoqKk5lZWRzS01TQU4gPSBmYWxzZSoqCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN0YXRlIG1hY2hpbmUgaGFuZGxpbmcgaW4gdnNvY2tfY29ubmVjdCgpIGJ5IHRyZWF0aW5nIFRDUF9DTE9TSU5HIHNpbWlsYXJseSB0byBUQ1BfRVNUQUJMSVNIRUQgd2hlbiBjaGVja2luZyBzay1cdTAwM2Vza19zdGF0ZSB1cG9uIHdha2luZyBmcm9tIGNvbm5lY3Rpb24gd2FpdCBhbmQgZXJyb3IgaGFuZGxpbmcuIFRoaXMgY2hhbmdlIGFmZmVjdHMgc29ja2V0IGNvbnRyb2wgZmxvdyBhbmQgc3RhdGUgdHJhbnNpdGlvbnMgb25seS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBidWZmZXIgY29weWluZyBvciBzaXppbmcsIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBleHBvc2Uga2VybmVsIHN0cnVjdHVyZXMvcGFkZGluZyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3RhdGUgbWFjaGluZSBoYW5kbGluZyBpbiB2c29ja19jb25uZWN0KCkgYnkgdHJlYXRpbmcgVENQX0NMT1NJTkcgc2ltaWxhcmx5IHRvIFRDUF9FU1RBQkxJU0hFRCB3aGVuIGNoZWNraW5nIHNrLVx1MDAzZXNrX3N0YXRlIHVwb24gd2FraW5nIGZyb20gY29ubmVjdGlvbiB3YWl0IGFuZCBlcnJvciBoYW5kbGluZy4gVGhpcyBjaGFuZ2UgYWZmZWN0cyBzb2NrZXQgY29udHJvbCBmbG93IGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyBvbmx5LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGJ1ZmZlciBjb3B5aW5nIG9yIHNpemluZywgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcy9wYWRkaW5nIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjMzOjIyLjI3MzI4MDg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc4MzU1NjEyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2c29ja19jb25uZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzdGF0ZSBtYWNoaW5lIGhhbmRsaW5nIGluIHZzb2NrX2Nvbm5lY3QoKSBieSB0cmVhdGluZyBUQ1BfQ0xPU0lORyBzaW1pbGFybHkgdG8gVENQX0VTVEFCTElTSEVEIHdoZW4gY2hlY2tpbmcgc2stXFx1MDAzZXNrX3N0YXRlIHVwb24gd2FraW5nIGZyb20gY29ubmVjdGlvbiB3YWl0IGFuZCBlcnJvciBoYW5kbGluZy4gVGhpcyBjaGFuZ2UgYWZmZWN0cyBzb2NrZXQgY29udHJvbCBmbG93IGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyBvbmx5LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGJ1ZmZlciBjb3B5aW5nIG9yIHNpemluZywgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcy9wYWRkaW5nIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdnNvY2tfY29ubmVjdCgpIGluIG5ldC92bXdfdnNvY2svYWZfdnNvY2suYywgY2hhbmdpbmcgdGhlIHN0YXRlIHZhbGlkYXRpb24gbG9naWMgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgZXJyb3IgaGFuZGxpbmcgYnkgYWNjb21tb2RhdGluZyB0aGUgVENQX0NMT1NJTkcgc29ja2V0IHN0YXRlLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIEFGX1ZTT0NLIHNvY2tldCBsaWZlY3ljbGUgdHJhbnNpdGlvbnMgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjMzOjIyLjI3MzI5MDA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg4MTY3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MTdlZDQ3NjI5NTQwZTgyNzc4ZjA4MGE5ODY2NDFlNzcyNGU2MTYxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMjI6MzM6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuaW5kZXggZjg0MDQ5OGI1OGFmYi4uZWVjNWRkNmRhZWJiMSAxMDA2NDRcXG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcXG4rKysgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcXG5AQCAtMTgzNCwyMyArMTgzNCwyMCBAQCBzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuIFxcdFxcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xcbiBcXHRcXHRsb2NrX3NvY2soc2spO1xcbiBcXG4tXFx0XFx0LyogQ29ubmVjdGlvbiBlc3RhYmxpc2hlZC4gV2hhdGV2ZXIgaGFwcGVucyB0byBzb2NrZXQgb25jZSB3ZVxcbi1cXHRcXHQgKiByZWxlYXNlIGl0LCB0aGF0J3Mgbm90IGNvbm5lY3QoKSdzIGNvbmNlcm4uIE5vIG5lZWQgdG8gZ29cXG4rXFx0XFx0LyogQ29ubmVjdGlvbiB3YXMgZXN0YWJsaXNoZWQuIFdoYXRldmVyIGhhcHBlbnMgdG8gc29ja2V0IG9uY2VcXG4rXFx0XFx0ICogd2UgcmVsZWFzZSBpdCwgdGhhdCdzIG5vdCBjb25uZWN0KCkncyBjb25jZXJuLiBObyBuZWVkIHRvIGdvXFxuIFxcdFxcdCAqIGludG8gc2lnbmFsIGFuZCB0aW1lb3V0IGhhbmRsaW5nLiBDYWxsIGl0IGEgZGF5LlxcbiBcXHRcXHQgKlxcbiBcXHRcXHQgKiBOb3RlIHRoYXQgYWxsb3dpbmcgdG8gXFxcInJlc2V0XFxcIiBhbiBhbHJlYWR5IGVzdGFibGlzaGVkIHNvY2tldFxcbiBcXHRcXHQgKiBoZXJlIGlzIHJhY3kgYW5kIGluc2VjdXJlLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpXFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEIHx8XFxuK1xcdFxcdCAgICBzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NJTkcpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0LyogSWYgY29ubmVjdGlvbiB3YXMgX25vdF8gZXN0YWJsaXNoZWQgYW5kIGEgc2lnbmFsL3RpbWVvdXQgY2FtZVxcbiBcXHRcXHQgKiB0byBiZSwgd2Ugd2FudCB0aGUgc29ja2V0J3Mgc3RhdGUgcmVzZXQuIFVzZXIgc3BhY2UgbWF5IHdhbnRcXG4gXFx0XFx0ICogdG8gcmV0cnkuXFxuLVxcdFxcdCAqXFxuLVxcdFxcdCAqIHNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCBpbXBsaWVzIHRoYXQgc29ja2V0IGlzIG5vdCBvblxcbi1cXHRcXHQgKiB2c29ja19jb25uZWN0ZWRfdGFibGUuIFdlIGtlZXAgdGhlIGJpbmRpbmcgYW5kIHRoZSB0cmFuc3BvcnRcXG4tXFx0XFx0ICogYXNzaWduZWQuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgfHwgdGltZW91dCA9PSAwKSB7XFxuIFxcdFxcdFxcdGVyciA9IHRpbWVvdXQgPT0gMCA/IC1FVElNRURPVVQgOiBzb2NrX2ludHJfZXJybm8odGltZW91dCk7XFxuQEAgLTE4NzUsNyArMTg3Miw4IEBAIHN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gc29ja19lcnJvcihzayk7XFxuLVxcdGlmIChlcnIpIHtcXG4rXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NJTkcpIHtcXG4gXFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gVENQX0NMT1NFO1xcbiBcXHRcXHRzb2NrLVxcdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjMzOjIyLjc0Mjg3NjU1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE4NjEzNDY1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2c29ja19jb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdnNvY2tfY29ubmVjdCgpIGluIG5ldC92bXdfdnNvY2svYWZfdnNvY2suYywgY2hhbmdpbmcgdGhlIHN0YXRlIHZhbGlkYXRpb24gbG9naWMgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgZXJyb3IgaGFuZGxpbmcgYnkgYWNjb21tb2RhdGluZyB0aGUgVENQX0NMT1NJTkcgc29ja2V0IHN0YXRlLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIEFGX1ZTT0NLIHNvY2tldCBsaWZlY3ljbGUgdHJhbnNpdGlvbnMgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTE3ZWQ0NzYyOTU0MGU4Mjc3OGYwODBhOTg2NjQxZTc3MjRlNjE2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjI6MzM6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbmluZGV4IGY4NDA0OThiNThhZmIuLmVlYzVkZDZkYWViYjEgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbisrKyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuQEAgLTE4MzQsMjMgKzE4MzQsMjAgQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuIFx0XHR0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTtcbiBcdFx0bG9ja19zb2NrKHNrKTtcbiBcbi1cdFx0LyogQ29ubmVjdGlvbiBlc3RhYmxpc2hlZC4gV2hhdGV2ZXIgaGFwcGVucyB0byBzb2NrZXQgb25jZSB3ZVxuLVx0XHQgKiByZWxlYXNlIGl0LCB0aGF0J3Mgbm90IGNvbm5lY3QoKSdzIGNvbmNlcm4uIE5vIG5lZWQgdG8gZ29cbitcdFx0LyogQ29ubmVjdGlvbiB3YXMgZXN0YWJsaXNoZWQuIFdoYXRldmVyIGhhcHBlbnMgdG8gc29ja2V0IG9uY2VcbitcdFx0ICogd2UgcmVsZWFzZSBpdCwgdGhhdCdzIG5vdCBjb25uZWN0KCkncyBjb25jZXJuLiBObyBuZWVkIHRvIGdvXG4gXHRcdCAqIGludG8gc2lnbmFsIGFuZCB0aW1lb3V0IGhhbmRsaW5nLiBDYWxsIGl0IGEgZGF5LlxuIFx0XHQgKlxuIFx0XHQgKiBOb3RlIHRoYXQgYWxsb3dpbmcgdG8gXCJyZXNldFwiIGFuIGFscmVhZHkgZXN0YWJsaXNoZWQgc29ja2V0XG4gXHRcdCAqIGhlcmUgaXMgcmFjeSBhbmQgaW5zZWN1cmUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEKVxuK1x0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEIHx8XG4rXHRcdCAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0lORylcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0LyogSWYgY29ubmVjdGlvbiB3YXMgX25vdF8gZXN0YWJsaXNoZWQgYW5kIGEgc2lnbmFsL3RpbWVvdXQgY2FtZVxuIFx0XHQgKiB0byBiZSwgd2Ugd2FudCB0aGUgc29ja2V0J3Mgc3RhdGUgcmVzZXQuIFVzZXIgc3BhY2UgbWF5IHdhbnRcbiBcdFx0ICogdG8gcmV0cnkuXG4tXHRcdCAqXG4tXHRcdCAqIHNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCBpbXBsaWVzIHRoYXQgc29ja2V0IGlzIG5vdCBvblxuLVx0XHQgKiB2c29ja19jb25uZWN0ZWRfdGFibGUuIFdlIGtlZXAgdGhlIGJpbmRpbmcgYW5kIHRoZSB0cmFuc3BvcnRcbi1cdFx0ICogYXNzaWduZWQuXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgfHwgdGltZW91dCA9PSAwKSB7XG4gXHRcdFx0ZXJyID0gdGltZW91dCA9PSAwID8gLUVUSU1FRE9VVCA6IHNvY2tfaW50cl9lcnJubyh0aW1lb3V0KTtcbkBAIC0xODc1LDcgKzE4NzIsOCBAQCBzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4gXHR9XG4gXG4gXHRlcnIgPSBzb2NrX2Vycm9yKHNrKTtcbi1cdGlmIChlcnIpIHtcbitcdGlmIChlcnIgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0lORykge1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcbiBcdFx0c29jay1cdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MzM6MjIuNzQyODc4MTM0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExODc1MTY0ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgdnNvY2tfY29ubmVjdCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgdGhpcyBwYXRjaC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgY29udGV4dCDigJMgc3BlY2lmaWNhbGx5IHRoZSBgbmV0L3Ztd192c29jay9hZl92c29jay5jYCBmaWxlIHdpdGhpbiB0aGUgYHZzb2NrX2Nvbm5lY3RgIGZ1bmN0aW9uLiBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBhIHBsYW4uXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBzbyBJJ2xsIHF1aWNrbHkgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBwcmVmZXJyZWQgbWV0aG9kIGhlcmUgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGxldmVyYWdpbmcgbXkgdG9vbHMuIEknbGwgcmVhY2ggZm9yIGVpdGhlciBgcmVhZC1maWxlYCB0byBnZXQgYSBxdWljayB2aXN1YWwgb2YgdGhlIGZpbGUgYXJvdW5kIGxpbmUgMTgzNCwgb3IsIGlmIEknbSBmZWVsaW5nIGxhenksIEknbGwgZ28gd2l0aCBgZ3JlcHBlcmAsIHRvIHF1aWNrbHkgZmluZCB3aGVyZSBgdnNvY2tfY29ubmVjdGAgZXhpc3RzIGluIHJlbGF0aW9uIHRvIGxpbmUgMTgzNC4gT2YgY291cnNlLCBgZ2l0IGdyZXBgIGlzIGFsd2F5cyBhbiBvcHRpb24uIEkganVzdCBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN1cnJvdW5kaW5nIGxpbmVzLCBhbnkgcmVsZXZhbnQgY29tbWVudHMsIGFuZCBhbnkgcHJldmlvdXMgY29tbWl0IG1lc3NhZ2VzIHRoYXQgcmVsYXRlIHRvIHRoYXQgc3BlY2lmaWMgYXJlYS4gVGhpcyBjb250ZXh0IGlzIGNydWNpYWwgdG8gZm9ybWluZyBhbiBpbmZvcm1lZCBqdWRnbWVudCBvbiB0aGUgcGF0Y2gncyBtZXJpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1OCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MzM6MzMuOTMwMzk3NTAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODAwOlxcdFxcdC8qIFRoZSByZWNlaXZlIHBhdGggd2lsbCBoYW5kbGUgYWxsIGNvbW11bmljYXRpb24gdW50aWwgd2UgYXJlIGFibGUgdG9cXG4xODAxOlxcdFxcdCAqIGVudGVyIHRoZSBjb25uZWN0ZWQgc3RhdGUuICBIZXJlIHdlIHdhaXQgZm9yIHRoZSBjb25uZWN0aW9uIHRvIGJlXFxuMTgwMjpcXHRcXHQgKiBjb21wbGV0ZWQgb3IgYSBub3RpZmljYXRpb24gb2YgYW4gZXJyb3IuXFxuMTgwMzpcXHRcXHQgKi9cXG4xODA0OlxcdFxcdHRpbWVvdXQgPSB2c2stXFx1MDAzZWNvbm5lY3RfdGltZW91dDtcXG4xODA1OlxcdFxcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChzayksIFxcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbjE4MDY6XFx0XFxuMTgwNzpcXHRcXHQvKiBJZiB0aGUgc29ja2V0IGlzIGFscmVhZHkgY2xvc2luZyBvciBpdCBpcyBpbiBhbiBlcnJvciBzdGF0ZSwgdGhlcmVcXG4xODA4OlxcdFxcdCAqIGlzIG5vIHBvaW50IGluIHdhaXRpbmcuXFxuMTgwOTpcXHRcXHQgKi9cXG4xODEwOlxcdFxcdHdoaWxlIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIFxcdTAwMjZcXHUwMDI2XFxuMTgxMTpcXHRcXHQgICAgICAgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TSU5HIFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19lcnIgPT0gMCkge1xcbjE4MTI6XFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgT19OT05CTE9DSykge1xcbjE4MTM6XFx0XFx0XFx0XFx0LyogSWYgd2UncmUgbm90IGdvaW5nIHRvIGJsb2NrLCB3ZSBzY2hlZHVsZSBhIHRpbWVvdXRcXG4xODE0OlxcdFxcdFxcdFxcdCAqIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgdGltZW91dCBvbiB0aGUgY29ubmVjdGlvblxcbjE4MTU6XFx0XFx0XFx0XFx0ICogYXR0ZW1wdCwgaW4gY2FzZSB0aGUgcGVlciBkb2Vzbid0IHJlc3BvbmQgaW4gYVxcbjE4MTY6XFx0XFx0XFx0XFx0ICogdGltZWx5IG1hbm5lci4gV2UgaG9sZCBvbiB0byB0aGUgc29ja2V0IHVudGlsIHRoZVxcbjE4MTc6XFx0XFx0XFx0XFx0ICogdGltZW91dCBmaXJlcy5cXG4xODE4OlxcdFxcdFxcdFxcdCAqL1xcbjE4MTk6XFx0XFx0XFx0XFx0c29ja19ob2xkKHNrKTtcXG4xODIwOlxcdFxcbjE4MjE6XFx0XFx0XFx0XFx0LyogSWYgdGhlIHRpbWVvdXQgZnVuY3Rpb24gaXMgYWxyZWFkeSBzY2hlZHVsZWQsXFxuMTgyMjpcXHRcXHRcXHRcXHQgKiByZXNjaGVkdWxlIGl0LCB0aGVuIHVuZ3JhYiB0aGUgc29ja2V0IHJlZmNvdW50IHRvXFxuMTgyMzpcXHRcXHRcXHRcXHQgKiBrZWVwIGl0IGJhbGFuY2VkLlxcbjE4MjQ6XFx0XFx0XFx0XFx0ICovXFxuMTgyNTpcXHRcXHRcXHRcXHRpZiAobW9kX2RlbGF5ZWRfd29yayhzeXN0ZW1fcGVyY3B1X3dxLCBcXHUwMDI2dnNrLVxcdTAwM2Vjb25uZWN0X3dvcmssXFxuMTgyNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRpbWVvdXQpKVxcbjE4Mjc6XFx0XFx0XFx0XFx0XFx0c29ja19wdXQoc2spO1xcbjE4Mjg6XFx0XFxuMTgyOTpcXHRcXHRcXHRcXHQvKiBTa2lwIGFoZWFkIHRvIHByZXNlcnZlIGVycm9yIGNvZGUgc2V0IGFib3ZlLiAqL1xcbjE4MzA6XFx0XFx0XFx0XFx0Z290byBvdXRfd2FpdDtcXG4xODMxOlxcdFxcdFxcdH1cXG4xODMyOlxcdFxcbjE4MzM6XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4xODM0OlxcdFxcdFxcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xcbjE4MzU6XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4xODM2OlxcdFxcbjE4Mzc6XFx0XFx0XFx0LyogQ29ubmVjdGlvbiB3YXMgZXN0YWJsaXNoZWQuIFdoYXRldmVyIGhhcHBlbnMgdG8gc29ja2V0IG9uY2VcXG4xODM4OlxcdFxcdFxcdCAqIHdlIHJlbGVhc2UgaXQsIHRoYXQncyBub3QgY29ubmVjdCgpJ3MgY29uY2Vybi4gTm8gbmVlZCB0byBnb1xcbjE4Mzk6XFx0XFx0XFx0ICogaW50byBzaWduYWwgYW5kIHRpbWVvdXQgaGFuZGxpbmcuIENhbGwgaXQgYSBkYXkuXFxuMTg0MDpcXHRcXHRcXHQgKlxcbjE4NDE6XFx0XFx0XFx0ICogTm90ZSB0aGF0IGFsbG93aW5nIHRvIFxcXCJyZXNldFxcXCIgYW4gYWxyZWFkeSBlc3RhYmxpc2hlZCBzb2NrZXRcXG4xODQyOlxcdFxcdFxcdCAqIGhlcmUgaXMgcmFjeSBhbmQgaW5zZWN1cmUuXFxuMTg0MzpcXHRcXHRcXHQgKi9cXG4xODQ0OlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEIHx8XFxuMTg0NTpcXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TSU5HKVxcbjE4NDY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTg0NzpcXHRcXG4xODQ4OlxcdFxcdFxcdC8qIElmIGNvbm5lY3Rpb24gd2FzIF9ub3RfIGVzdGFibGlzaGVkIGFuZCBhIHNpZ25hbC90aW1lb3V0IGNhbWVcXG4xODQ5OlxcdFxcdFxcdCAqIHRvIGJlLCB3ZSB3YW50IHRoZSBzb2NrZXQncyBzdGF0ZSByZXNldC4gVXNlciBzcGFjZSBtYXkgd2FudFxcbjE4NTA6XFx0XFx0XFx0ICogdG8gcmV0cnkuXFxuMTg1MTpcXHRcXHRcXHQgKi9cXG4xODUyOlxcdFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSB8fCB0aW1lb3V0ID09IDApIHtcXG4xODUzOlxcdFxcdFxcdFxcdGVyciA9IHRpbWVvdXQgPT0gMCA/IC1FVElNRURPVVQgOiBzb2NrX2ludHJfZXJybm8odGltZW91dCk7XFxuMTg1NDpcXHRcXG4xODU1OlxcdFxcdFxcdFxcdC8qIExpc3RlbmVyIG1pZ2h0IGhhdmUgYWxyZWFkeSByZXNwb25kZWQgd2l0aFxcbjE4NTY6XFx0XFx0XFx0XFx0ICogVklSVElPX1ZTT0NLX09QX1JFU1BPTlNFLiBJdHMgaGFuZGxpbmcgZXhwZWN0cyBvdXJcXG4xODU3OlxcdFxcdFxcdFxcdCAqIHNrX3N0YXRlID09IFRDUF9TWU5fU0VOVCwgd2hpY2ggaGVyZWJ5IHdlIGJyZWFrLlxcbjE4NTg6XFx0XFx0XFx0XFx0ICogSW4gc3VjaCBjYXNlIFZJUlRJT19WU09DS19PUF9SU1Qgd2lsbCBmb2xsb3cuXFxuMTg1OTpcXHRcXHRcXHRcXHQgKi9cXG4xODYwOlxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcXG4xODYxOlxcdFxcdFxcdFxcdHNvY2stXFx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XFxuMTg2MjpcXHRcXG4xODYzOlxcdFxcdFxcdFxcdC8qIFRyeSB0byBjYW5jZWwgVklSVElPX1ZTT0NLX09QX1JFUVVFU1Qgc2tiIHNlbnQgb3V0IGJ5XFxuMTg2NDpcXHRcXHRcXHRcXHQgKiB0cmFuc3BvcnQtXFx1MDAzZWNvbm5lY3QoKS5cXG4xODY1OlxcdFxcdFxcdFxcdCAqL1xcbjE4NjY6XFx0XFx0XFx0XFx0dnNvY2tfdHJhbnNwb3J0X2NhbmNlbF9wa3QodnNrKTtcXG4xODY3OlxcdFxcbjE4Njg6XFx0XFx0XFx0XFx0Z290byBvdXRfd2FpdDtcXG4xODY5OlxcdFxcdFxcdH1cXG4xODcwOlxcdFxcbjE4NzE6XFx0XFx0XFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgXFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuMTg3MjpcXHRcXHR9XFxuMTg3MzpcXHRcXG4xODc0OlxcdFxcdGVyciA9IHNvY2tfZXJyb3Ioc2spO1xcbjE4NzU6XFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNlxcbjE4NzY6XFx0XFx0ICAgIHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TSU5HKSB7XFxuMTg3NzpcXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBUQ1BfQ0xPU0U7XFxuMTg3ODpcXHRcXHRcXHRzb2NrLVxcdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xcbjE4Nzk6XFx0XFx0fVxcbjE4ODA6XFx0XFxuMTg4MTpcXHRvdXRfd2FpdDpcXG4xODgyOlxcdFxcdGZpbmlzaF93YWl0KHNrX3NsZWVwKHNrKSwgXFx1MDAyNndhaXQpO1xcbjE4ODM6XFx0b3V0OlxcbjE4ODQ6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4xODg1OlxcdFxcdHJldHVybiBlcnI7XFxuMTg4NjpcXHR9XFxuMTg4NzpcXHRcXG4xODg4OlxcdHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxuMTg4OTpcXHRcXHRcXHRcXHRzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzozMy45MzA1NDQ2MzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDIyMDIyNjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZTT0NLIEV4cGxvcmF0aW9uKipcblxuT2theSwgbGV0IG1lIGdldCB0aGlzIHN0cmFpZ2h0LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGB2c29ja19jb25uZWN0YCwgYW5kIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhbmRzY2FwZSwgdGhhdCBmdW5jdGlvbiBsaXZlcyB3aXRoaW4gYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBXZSdyZSBkZWFsaW5nIHdpdGggVlNPQ0ssIHRoZSBBRl9WU09DSyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5LCBzb21ldGhpbmcgSSdtIHZlcnkgZmFtaWxpYXIgd2l0aC4gSXQncyBwcmFjdGljYWxseSB1YmlxdWl0b3VzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhpbmsgdnNvY2sgbG9vcGJhY2ssIHZpcnRpby12c29jaywgYW5kIGV2ZW4gdm1jaSwgaXQgYWxsIGxldmVyYWdlcyB0aGF0IGZyYW1ld29yay4gSSBjYW4ndCBiZWxpZXZlIEkgZGlkbid0IGltbWVkaWF0ZWx5IGNvbnNpZGVyIGNoZWNraW5nIEtjb25maWcgZm9yIGluZm9ybWF0aW9uIG9uIGBhZl92c29jay5jYC4gQWxyaWdodCwgbGV0J3Mgc3RhcnQgdGhlcmUuIEknbGwgZ2V0IHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDAzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzozNi4zNTI1Njk4NTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NzM1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVlNPQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Ztd192c29jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMDA5IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Njpjb25maWcgVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXQgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMTgtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjE5OmNvbmZpZyBWU09DS0VUU19ESUFHXFxubmV0L3Ztd192c29jay9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3Ztd192c29jay9LY29uZmlnOjIxOlxcdGRlcGVuZHMgb24gVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjItXFx0ZGVmYXVsdCB5XFxubmV0L3Ztd192c29jay9LY29uZmlnLTIzLVxcdGhlbHBcXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MjQ6XFx0ICBTdXBwb3J0IGZvciBQRl9WU09DSyBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxubmV0L3Ztd192c29jay9LY29uZmlnLTI1LVxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yOC1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Mjk6Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXFxubmV0L3Ztd192c29jay9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XFxcIlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozMTpcXHRkZXBlbmRzIG9uIFZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTMyLVxcdGRlZmF1bHQgeVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozMzpcXHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zNC1cXHRoZWxwXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNDAtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjQxOmNvbmZpZyBWTVdBUkVfVk1DSV9WU09DS0VUU1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiVk13YXJlIFZNQ0kgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcXFwiXFxubmV0L3Ztd192c29jay9LY29uZmlnOjQzOlxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgVk1XQVJFX1ZNQ0lcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNDQtXFx0aGVscFxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTUyLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo1Mzpjb25maWcgVklSVElPX1ZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTU0LVxcdHRyaXN0YXRlIFxcXCJ2aXJ0aW8gdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcXFwiXFxubmV0L3Ztd192c29jay9LY29uZmlnOjU1OlxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgVklSVElPXFxubmV0L3Ztd192c29jay9LY29uZmlnOjU2OlxcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXFxubmV0L3Ztd192c29jay9LY29uZmlnLTU3LVxcdGhlbHBcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy02NS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NjY6Y29uZmlnIFZJUlRJT19WU09DS0VUU19DT01NT05cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNjctXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03Mi1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NzM6Y29uZmlnIEhZUEVSVl9WU09DS0VUU1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03NC1cXHR0cmlzdGF0ZSBcXFwiSHlwZXItViB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1xcXCJcXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NzU6XFx0ZGVwZW5kcyBvbiBWU09DS0VUUyBcXHUwMDI2XFx1MDAyNiBIWVBFUlZfVk1CVVNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNzYtXFx0aGVscFxcbi0tXFxubmV0L3Ztd192c29jay9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1ZTT0NLRVRTKSArPSB2c29jay5vXFxubmV0L3Ztd192c29jay9NYWtlZmlsZTozOm9iai0kKENPTkZJR19WU09DS0VUU19ESUFHKSArPSB2c29ja19kaWFnLm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1ZNV0FSRV9WTUNJX1ZTT0NLRVRTKSArPSB2bXdfdnNvY2tfdm1jaV90cmFuc3BvcnQub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6NTpvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTKSArPSB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydC5vXFxubmV0L3Ztd192c29jay9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19WSVJUSU9fVlNPQ0tFVFNfQ09NTU9OKSArPSB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24ub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6NzpvYmotJChDT05GSUdfSFlQRVJWX1ZTT0NLRVRTKSArPSBodl9zb2NrLm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1ZTT0NLRVRTX0xPT1BCQUNLKSArPSB2c29ja19sb29wYmFjay5vXFxubmV0L3Ztd192c29jay9NYWtlZmlsZS05LVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTExMS0gKiAgICAgICAgZ2xvYmFsIG5hbWVzcGFjZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGFsbG9jYXRlIHRoZSBzYW1lIENJRC5cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTEyOiAqICAgICAgLSBnbG9iYWwgbW9kZSBBRl9WU09DSyBzb2NrZXRzIGNhbiByZWFjaCBhbnkgVk0gb3Igc29ja2V0IGluIGFueSBnbG9iYWxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTEzLSAqICAgICAgICBuYW1lc3BhY2UsIHRoZXkgYXJlIG5vdCBjb250YWluZWQgdG8gb25seSB0aGVpciBvd24gbmFtZXNwYWNlLlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxMTQ6ICogICAgICAtIEFGX1ZTT0NLIHNvY2tldHMgaW4gYSBnbG9iYWwgbW9kZSBuYW1lc3BhY2UgY2Fubm90IHJlYWNoIFZNcyBvclxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMTUtICogICAgICAgIHNvY2tldHMgaW4gYW55IGxvY2FsIG1vZGUgbmFtZXNwYWNlLlxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTEyMy0gKiAgICAgICBhbGxvY2F0aW9uIGluIGFueSBvdGhlciBuYW1lc3BhY2UsIGJ1dCBub3QgaW4gdGhlIHNhbWUgbmFtZXNwYWNlLlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxMjQ6ICogICAgIC0gQUZfVlNPQ0sgc29ja2V0cyBpbiBhIGxvY2FsIG1vZGUgbmFtZXNwYWNlIGNhbiBjb25uZWN0IG9ubHkgdG8gVk1zIG9yXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTEyNS0gKiAgICAgICBvdGhlciBzb2NrZXRzIHdpdGhpbiB0aGVpciBvd24gbmFtZXNwYWNlLlxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE2Ny1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTY4OiNkZWZpbmUgVlNPQ0tfTkVUX01PREVfU1RSX0dMT0JBTCBcXFwiZ2xvYmFsXFxcIlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNjk6I2RlZmluZSBWU09DS19ORVRfTU9ERV9TVFJfTE9DQUwgXFxcImxvY2FsXFxcIlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNzAtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTczLSAqL1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNzQ6I2RlZmluZSBWU09DS19ORVRfTU9ERV9TVFJfTUFYIDhcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTc1LVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTE4Mj1zdHJ1Y3QgcHJvdG8gdnNvY2tfcHJvdG8gPSB7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE4MzpcXHQubmFtZSA9IFxcXCJBRl9WU09DS1xcXCIsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE4NC1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xOTQtICovXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE5NTojZGVmaW5lIFZTT0NLX0RFRkFVTFRfQ09OTkVDVF9USU1FT1VUICgyICogSFopXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE5Ni1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTk3OiNkZWZpbmUgVlNPQ0tfREVGQVVMVF9CVUZGRVJfU0laRSAgICAgKDEwMjQgKiAyNTYpXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE5ODojZGVmaW5lIFZTT0NLX0RFRkFVTFRfQlVGRkVSX01BWF9TSVpFICgxMDI0ICogMjU2KVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxOTk6I2RlZmluZSBWU09DS19ERUZBVUxUX0JVRkZFUl9NSU5fU0laRSAxMjhcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjAwLVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTIwOT1zdGF0aWMgREVGSU5FX01VVEVYKHZzb2NrX3JlZ2lzdGVyX211dGV4KTtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMjEtICogU3BlY2lmaWNhbGx5LCB3ZSBpbml0aWFsaXplIHRoZSB2c29ja19iaW5kX3RhYmxlIGFycmF5IHRvIGEgc2l6ZSBvZlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMjI6ICogVlNPQ0tfSEFTSF9TSVpFICsgMSBzbyB0aGF0IHZzb2NrX2JpbmRfdGFibGVbMF0gdGhyb3VnaFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMjM6ICogdnNvY2tfYmluZF90YWJsZVtWU09DS19IQVNIX1NJWkUgLSAxXSBhcmUgZm9yIGJvdW5kIHNvY2tldHMgYW5kXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIyNDogKiB2c29ja19iaW5kX3RhYmxlW1ZTT0NLX0hBU0hfU0laRV0gaXMgZm9yIHVuYm91bmQgc29ja2V0cy4gIFRoZSBoYXNoIGZ1bmN0aW9uXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIyNTogKiBtb2RzIHdpdGggVlNPQ0tfSEFTSF9TSVpFIHRvIGVuc3VyZSB0aGlzLlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMjYtICovXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjI4LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMjk6I2RlZmluZSBWU09DS19IQVNIKGFkZHIpICAgICAgICAoKGFkZHIpLVxcdTAwM2Vzdm1fcG9ydCAlIFZTT0NLX0hBU0hfU0laRSlcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjMwOiNkZWZpbmUgdnNvY2tfYm91bmRfc29ja2V0cyhhZGRyKSAoXFx1MDAyNnZzb2NrX2JpbmRfdGFibGVbVlNPQ0tfSEFTSChhZGRyKV0pXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzMTojZGVmaW5lIHZzb2NrX3VuYm91bmRfc29ja2V0cyAgICAgKFxcdTAwMjZ2c29ja19iaW5kX3RhYmxlW1ZTT0NLX0hBU0hfU0laRV0pXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzMi1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjMzLS8qIFhYWCBUaGlzIGNhbiBwcm9iYWJseSBiZSBpbXBsZW1lbnRlZCBpbiBhIGJldHRlciB3YXkuICovXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzNDojZGVmaW5lIFZTT0NLX0NPTk5fSEFTSChzcmMsIGRzdClcXHRcXHRcXHRcXHRcXFxcXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzNTpcXHQoKChzcmMpLVxcdTAwM2Vzdm1fY2lkIF4gKGRzdCktXFx1MDAzZXN2bV9wb3J0KSAlIFZTT0NLX0hBU0hfU0laRSlcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjM2LSNkZWZpbmUgdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoc3JjLCBkc3QpXFx0XFx0XFxcXFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzc6XFx0KFxcdTAwMjZ2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfQ09OTl9IQVNIKHNyYywgZHN0KV0pXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzOC0jZGVmaW5lIHZzb2NrX2Nvbm5lY3RlZF9zb2NrZXRzX3Zzayh2c2spXFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0MC1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQxOnN0cnVjdCBsaXN0X2hlYWQgdnNvY2tfYmluZF90YWJsZVtWU09DS19IQVNIX1NJWkUgKyAxXTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQyLUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2JpbmRfdGFibGUpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDM6c3RydWN0IGxpc3RfaGVhZCB2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfSEFTSF9TSVpFXTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQ0LUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9OTM2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0Ni1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTQ3OlxcdHNrID0gc2tfYWxsb2MobmV0LCBBRl9WU09DSywgcHJpb3JpdHksIFxcdTAwMjZ2c29ja19wcm90bywga2Vybik7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0OC1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk5MC1cXHRcXHR2c2stXFx1MDAzZW93bmVyID0gZ2V0X2N1cnJlbnRfY3JlZCgpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5OTE6XFx0XFx0dnNrLVxcdTAwM2Vjb25uZWN0X3RpbWVvdXQgPSBWU09DS19ERUZBVUxUX0NPTk5FQ1RfVElNRU9VVDtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTkyOlxcdFxcdHZzay1cXHUwMDNlYnVmZmVyX3NpemUgPSBWU09DS19ERUZBVUxUX0JVRkZFUl9TSVpFO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5OTM6XFx0XFx0dnNrLVxcdTAwM2VidWZmZXJfbWluX3NpemUgPSBWU09DS19ERUZBVUxUX0JVRkZFUl9NSU5fU0laRTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTk0OlxcdFxcdHZzay1cXHUwMDNlYnVmZmVyX21heF9zaXplID0gVlNPQ0tfREVGQVVMVF9CVUZGRVJfTUFYX1NJWkU7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk5NS1cXHR9XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTY1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB2c29ja19kZ3JhbV9vcHMgPSB7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE2NTQ6XFx0LmZhbWlseSA9IFBGX1ZTT0NLLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNjU1LVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTE3MDQ9c3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE4NTUtXFx0XFx0XFx0LyogTGlzdGVuZXIgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlc3BvbmRlZCB3aXRoXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE4NTY6XFx0XFx0XFx0ICogVklSVElPX1ZTT0NLX09QX1JFU1BPTlNFLiBJdHMgaGFuZGxpbmcgZXhwZWN0cyBvdXJcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1Ny1cXHRcXHRcXHQgKiBza19zdGF0ZSA9PSBUQ1BfU1lOX1NFTlQsIHdoaWNoIGhlcmVieSB3ZSBicmVhay5cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTg1ODpcXHRcXHRcXHQgKiBJbiBzdWNoIGNhc2UgVklSVElPX1ZTT0NLX09QX1JTVCB3aWxsIGZvbGxvdy5cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1OS1cXHRcXHRcXHQgKi9cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xODYyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxODYzOlxcdFxcdFxcdC8qIFRyeSB0byBjYW5jZWwgVklSVElPX1ZTT0NLX09QX1JFUVVFU1Qgc2tiIHNlbnQgb3V0IGJ5XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE4NjQtXFx0XFx0XFx0ICogdHJhbnNwb3J0LVxcdTAwM2Vjb25uZWN0KCkuXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjAxMz1zdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3RpYmxlX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMDI0LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMDI1OlxcdGlmIChsZXZlbCAhPSBBRl9WU09DSyBcXHUwMDI2XFx1MDAyNiBsZXZlbCAhPSBTT0xfU09DS0VUKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMDI2LVxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjEwNi1cXHRcXHRcXHRcXHR2c2stXFx1MDAzZWNvbm5lY3RfdGltZW91dCA9XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIxMDc6XFx0XFx0XFx0XFx0ICAgIFZTT0NLX0RFRkFVTFRfQ09OTkVDVF9USU1FT1VUO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTA4LVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTIxMjc9c3RhdGljIGludCB2c29ja19jb25uZWN0aWJsZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjE0My1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjE0NDpcXHRpZiAobGV2ZWwgIT0gQUZfVlNPQ0spXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIxNDUtXFx0XFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNTQ1PV9fdnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjU1NS1cXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNTU2OlxcdFxcdHJldHVybiBzb2NrX3JlY3ZfZXJycXVldWUoc2ssIG1zZywgbGVuLCBTT0xfVlNPQ0ssIFZTT0NLX1JFQ1ZFUlIpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTU3LVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI2NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdnNvY2tfc3RyZWFtX29wcyA9IHtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY1MzpcXHQuZmFtaWx5ID0gUEZfVlNPQ0ssXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTQtXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjY3ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB2c29ja19zZXFwYWNrZXRfb3BzID0ge1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjc1OlxcdC5mYW1pbHkgPSBQRl9WU09DSyxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY3Ni1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjk1PXN0YXRpYyBpbnQgdnNvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNzA0LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNzA1OlxcdGlmIChwcm90b2NvbCBcXHUwMDI2XFx1MDAyNiBwcm90b2NvbCAhPSBQRl9WU09DSylcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjcwNi1cXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNzUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSB2c29ja19mYW1pbHlfb3BzID0ge1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNzUxOlxcdC5mYW1pbHkgPSBBRl9WU09DSyxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjc1Mi1cXHQuY3JlYXRlID0gdnNvY2tfY3JlYXRlLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI4MTM9c3RhdGljIGludCBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4MTcte1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODE4OlxcdGNoYXIgZGF0YVtWU09DS19ORVRfTU9ERV9TVFJfTUFYXSA9IHswfTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjgxOS1cXHRzdHJ1Y3QgY3RsX3RhYmxlIHRtcDtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODMzLVxcdFxcdHN3aXRjaCAobW9kZSkge1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODM0OlxcdFxcdGNhc2UgVlNPQ0tfTkVUX01PREVfR0xPQkFMOlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODM1OlxcdFxcdFxcdHAgPSBWU09DS19ORVRfTU9ERV9TVFJfR0xPQkFMO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODM2LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODM3OlxcdFxcdGNhc2UgVlNPQ0tfTkVUX01PREVfTE9DQUw6XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4Mzg6XFx0XFx0XFx0cCA9IFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTDtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjgzOS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODU2LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODU3OlxcdGlmICghc3RybmNtcChkYXRhLCBWU09DS19ORVRfTU9ERV9TVFJfR0xPQkFMLCBzaXplb2YoZGF0YSkpKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODU4OlxcdFxcdCpuZXdfbW9kZSA9IFZTT0NLX05FVF9NT0RFX0dMT0JBTDtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjg1OTpcXHRlbHNlIGlmICghc3RybmNtcChkYXRhLCBWU09DS19ORVRfTU9ERV9TVFJfTE9DQUwsIHNpemVvZihkYXRhKSkpXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4NjA6XFx0XFx0Km5ld19tb2RlID0gVlNPQ0tfTkVUX01PREVfTE9DQUw7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4NjEtXFx0ZWxzZVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI4ODE9c3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODk4LVxcdFxcdCAqL1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODk5OlxcdFxcdGlmICh2c29ja19uZXRfbW9kZShuZXQpID09IFZTT0NLX05FVF9NT0RFX0xPQ0FMIFxcdTAwMjZcXHUwMDI2XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI5MDA6XFx0XFx0ICAgIG5ld19tb2RlID09IFZTT0NLX05FVF9NT0RFX0dMT0JBTClcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkwMS1cXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI5MTA9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdnNvY2tfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTEzLVxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQudnNvY2subW9kZSxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjkxNDpcXHRcXHQubWF4bGVuXFx0XFx0PSBWU09DS19ORVRfTU9ERV9TVFJfTUFYLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTE1LVxcdFxcdC5tb2RlXFx0XFx0PSAwNDQ0LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MjAtXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC52c29jay5jaGlsZF9uc19tb2RlLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTIxOlxcdFxcdC5tYXhsZW5cXHRcXHQ9IFZTT0NLX05FVF9NT0RFX1NUUl9NQVgsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MjItXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjk4Nz1zdGF0aWMgdm9pZCB2c29ja19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjk4OS1cXHRpZiAobmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSlcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk5MDpcXHRcXHRuZXQtXFx1MDAzZXZzb2NrLm1vZGUgPSBWU09DS19ORVRfTU9ERV9HTE9CQUw7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5OTEtXFx0ZWxzZVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTMwMTk9c3RhdGljIGludCBfX2luaXQgdnNvY2tfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNDEtXFx0XFx0cHJfZXJyKFxcXCJjb3VsZCBub3QgcmVnaXN0ZXIgYWZfdnNvY2sgKCVkKSBhZGRyZXNzIGZhbWlseTogJWRcXFxcblxcXCIsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjMwNDI6XFx0XFx0ICAgICAgIEFGX1ZTT0NLLCBlcnIpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMDQzLVxcdFxcdGdvdG8gZXJyX3VucmVnaXN0ZXJfcHJvdG87XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA1NS1lcnJfdW5yZWdpc3Rlcl9zb2NrOlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMDU2OlxcdHNvY2tfdW5yZWdpc3RlcihBRl9WU09DSyk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNTctZXJyX3VucmVnaXN0ZXJfcHJvdG86XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzA2NT1zdGF0aWMgdm9pZCBfX2V4aXQgdnNvY2tfZXhpdCh2b2lkKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNjctXFx0bWlzY19kZXJlZ2lzdGVyKFxcdTAwMjZ2c29ja19kZXZpY2UpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMDY4OlxcdHNvY2tfdW5yZWdpc3RlcihBRl9WU09DSyk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNjktXFx0cHJvdG9fdW5yZWdpc3RlcihcXHUwMDI2dnNvY2tfcHJvdG8pO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTMwNzk9aW50IHZzb2NrX2NvcmVfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHZzb2NrX3RyYW5zcG9ydCAqdCwgaW50IGZlYXR1cmVzKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwOTEtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjMwOTI6XFx0aWYgKGZlYXR1cmVzIFxcdTAwMjYgVlNPQ0tfVFJBTlNQT1JUX0ZfSDJHKSB7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwOTMtXFx0XFx0aWYgKHRfaDJnKSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA5OS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzEwMDpcXHRpZiAoZmVhdHVyZXMgXFx1MDAyNiBWU09DS19UUkFOU1BPUlRfRl9HMkgpIHtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzEwMS1cXHRcXHRpZiAodF9nMmgpIHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMTA3LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMTA4OlxcdGlmIChmZWF0dXJlcyBcXHUwMDI2IFZTT0NLX1RSQU5TUE9SVF9GX0RHUkFNKSB7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMxMDktXFx0XFx0aWYgKHRfZGdyYW0pIHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMTE1LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMTE2OlxcdGlmIChmZWF0dXJlcyBcXHUwMDI2IFZTT0NLX1RSQU5TUE9SVF9GX0xPQ0FMKSB7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMxMTctXFx0XFx0aWYgKHRfbG9jYWwpIHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2tfdGFwLmMtMi0vKlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2tfdGFwLmM6MzogKiBUYXAgZnVuY3Rpb25zIGZvciBBRl9WU09DSyBzb2NrZXRzLlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2tfdGFwLmMtNC0gKlxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29ja190YXAuYz0xNz1pbnQgdnNvY2tfYWRkX3RhcChzdHJ1Y3QgdnNvY2tfdGFwICp2dClcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrX3RhcC5jLTE4LXtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrX3RhcC5jOjE5OlxcdGlmICh1bmxpa2VseSh2dC1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9WU09DS01PTikpXFxubmV0L3Ztd192c29jay9hZl92c29ja190YXAuYy0yMC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC92bXdfdnNvY2svZGlhZy5jPTE0PXN0YXRpYyBpbnQgc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC92bXdfdnNvY2svZGlhZy5jLTI2LVxcdHJlcCA9IG5sbXNnX2RhdGEobmxoKTtcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzoyNzpcXHRyZXAtXFx1MDAzZXZkaWFnX2ZhbWlseSA9IEFGX1ZTT0NLO1xcbm5ldC92bXdfdnNvY2svZGlhZy5jLTI4LVxcbi0tXFxubmV0L3Ztd192c29jay9kaWFnLmM9MTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja19kaWFnX2hhbmRsZXIgdnNvY2tfZGlhZ19oYW5kbGVyID0ge1xcbm5ldC92bXdfdnNvY2svZGlhZy5jLTE2MC1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzoxNjE6XFx0LmZhbWlseSA9IEFGX1ZTT0NLLFxcbm5ldC92bXdfdnNvY2svZGlhZy5jLTE2Mi1cXHQuZHVtcCA9IHZzb2NrX2RpYWdfaGFuZGxlcl9kdW1wLFxcbi0tXFxubmV0L3Ztd192c29jay9kaWFnLmM9MTc5PU1PRFVMRV9BTElBU19ORVRfUEZfUFJPVE9fVFlQRShQRl9ORVRMSU5LLCBORVRMSU5LX1NPQ0tfRElBRyxcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzoxODA6XFx0XFx0XFx0ICAgICAgIDQwIC8qIEFGX1ZTT0NLICovKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jPTk0PXN0cnVjdCBodnNvY2sge1xcbi0tXFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTExLVxcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jOjExMjovKiBJbiB0aGUgVk0sIHdlIHN1cHBvcnQgSHlwZXItViBTb2NrZXRzIHdpdGggQUZfVlNPQ0ssIGFuZCB0aGUgZW5kcG9pbnQgaXNcXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy0xMTMtICogXFx1MDAzY2NpZCwgcG9ydFxcdTAwM2UgKHNlZSBzdHJ1Y3Qgc29ja2FkZHJfdm0pLiBOb3RlOiBjaWQgaXMgbm90IHJlYWxseSB1c2VkIGhlcmU6XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy0xMzUtICpcXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYzoxMzY6ICogVG8gbWFrZSB1c2Ugb2YgdGhlIEFGX1ZTT0NLIGluZnJhc3RydWN0dXJlIGluIExpbnV4IFZNLCB3ZSBoYXZlIHRvIGxpbWl0XFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTM3LSAqIHRoZSBhdmFpbGFibGUgR1VJRCBzcGFjZSBvZiBTT0NLQUREUl9IViBzbyB0aGF0IHdlIGNhbiBjcmVhdGUgYSBtYXBwaW5nXFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmM6MTM4OiAqIGJldHdlZW4gQUZfVlNPQ0sgcG9ydCBhbmQgU09DS0FERFJfSFYgU2VydmljZSBHVUlELiBUaGUgcnVsZSBvZiB3cml0aW5nXFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTM5LSAqIEh5cGVyLVYgU29ja2V0cyBhcHBzIG9uIHRoZSBob3N0IGFuZCBpbiBMaW51eCBWTSBpczpcXG4tLVxcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jPTk2MD1zdGF0aWMgaW50IF9faW5pdCBodnNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtOTY3LVxcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jOjk2ODpcXHRyZXQgPSB2c29ja19jb3JlX3JlZ2lzdGVyKFxcdTAwMjZodnNfdHJhbnNwb3J0LCBWU09DS19UUkFOU1BPUlRfRl9HMkgpO1xcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jLTk2OS1cXHRpZiAocmV0KSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYz05ODg9TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jOjk4OTpNT0RVTEVfQUxJQVNfTkVUUFJPVE8oUEZfVlNPQ0spO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9MzA9c3RydWN0IHZpcnRpb192c29jayB7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzEtXFx0c3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXY7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6MzI6XFx0c3RydWN0IHZpcnRxdWV1ZSAqdnFzW1ZTT0NLX1ZRX01BWF07XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzMtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0zOC1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzozOTpcXHQvKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgcHJvdGVjdGVkIGJ5IHR4X2xvY2suICB2cXNbVlNPQ0tfVlFfVFhdXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDAtXFx0ICogbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIHR4X2xvY2sgaGVsZC5cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQ5LVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjUwOlxcdC8qIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBwcm90ZWN0ZWQgYnkgcnhfbG9jay4gIHZxc1tWU09DS19WUV9SWF1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy01MS1cXHQgKiBtdXN0IGJlIGFjY2Vzc2VkIHdpdGggcnhfbG9jayBoZWxkLlxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNzItXFx0LyogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHByb3RlY3RlZCBieSBldmVudF9sb2NrLlxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjczOlxcdCAqIHZxc1tWU09DS19WUV9FVkVOVF0gbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIGV2ZW50X2xvY2sgaGVsZC5cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03NC1cXHQgKi9cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTE1OD12aXJ0aW9fdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMTcwLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjE3MTpcXHR2cSA9IHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTE3Mi1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTE5MC1cXHRcXHRpZiAocmVwbHkpIHtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzoxOTE6XFx0XFx0XFx0c3RydWN0IHZpcnRxdWV1ZSAqcnhfdnEgPSB2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0xOTItXFx0XFx0XFx0aW50IHZhbDtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTIxNz1zdGF0aWMgaW50IHZpcnRpb190cmFuc3BvcnRfc2VuZF9za2JfZmFzdF9wYXRoKHN0cnVjdCB2aXJ0aW9fdnNvY2sgKnZzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTIxOC17XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6MjE5OlxcdHN0cnVjdCB2aXJ0cXVldWUgKnZxID0gdnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9UWF07XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMjIwLVxcdGludCByZXQ7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz0yODA9dmlydGlvX3RyYW5zcG9ydF9jYW5jZWxfcGt0KHN0cnVjdCB2c29ja19zb2NrICp2c2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0yOTQtXFx0aWYgKGNudCkge1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjI5NTpcXHRcXHRzdHJ1Y3QgdmlydHF1ZXVlICpyeF92cSA9IHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfUlhdO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTI5Ni1cXHRcXHRpbnQgbmV3X2NudDtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTMxMT1zdGF0aWMgdm9pZCB2aXJ0aW9fdnNvY2tfcnhfZmlsbChzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jaylcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0zMTIte1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjMxMzpcXHRpbnQgdG90YWxfbGVuID0gVklSVElPX1ZTT0NLX0RFRkFVTFRfUlhfQlVGX1NJWkU7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzE0LVxcdHN0cnVjdCBzY2F0dGVybGlzdCBwa3QsICpwO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzE4LVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjMxOTpcXHR2cSA9IHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfUlhdO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTMyMC1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTMyNS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzozMjY6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlaGVhZCwgMCwgVklSVElPX1ZTT0NLX1NLQl9IRUFEUk9PTSk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzI3LVxcdFxcdHNnX2luaXRfb25lKFxcdTAwMjZwa3QsIHZpcnRpb192c29ja19oZHIoc2tiKSwgdG90YWxfbGVuKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTM0Mj1zdGF0aWMgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzUzLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjM1NDpcXHR2cSA9IHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTM1NS1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTM3NT1zdGF0aWMgYm9vbCB2aXJ0aW9fdHJhbnNwb3J0X21vcmVfcmVwbGllcyhzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jaylcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0zNzYte1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjM3NzpcXHRzdHJ1Y3QgdmlydHF1ZXVlICp2cSA9IHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfUlhdO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTM3OC1cXHRpbnQgdmFsO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9Mzg3PXN0YXRpYyBpbnQgdmlydGlvX3Zzb2NrX2V2ZW50X2ZpbGxfb25lKHN0cnVjdCB2aXJ0aW9fdnNvY2sgKnZzb2NrLFxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzkyLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjM5MzpcXHR2cSA9IHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfRVZFTlRdO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTM5NC1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTQwMT1zdGF0aWMgdm9pZCB2aXJ0aW9fdnNvY2tfZXZlbnRfZmlsbChzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jaylcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQxMC1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo0MTE6XFx0dmlydHF1ZXVlX2tpY2sodnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9FVkVOVF0pO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQxMi19XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz00Mzc9c3RhdGljIHZvaWQgdmlydGlvX3Zzb2NrX2V2ZW50X2hhbmRsZShzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jayxcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQ0MC1cXHRzd2l0Y2ggKGxlMzJfdG9fY3B1KGV2ZW50LVxcdTAwM2VpZCkpIHtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo0NDE6XFx0Y2FzZSBWSVJUSU9fVlNPQ0tfRVZFTlRfVFJBTlNQT1JUX1JFU0VUOlxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQ0Mi1cXHRcXHR2aXJ0aW9fdnNvY2tfdXBkYXRlX2d1ZXN0X2NpZCh2c29jayk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz00NDk9c3RhdGljIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQ1OS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo0NjA6XFx0dnEgPSB2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX0VWRU5UXTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy00NjEtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy00NzQtXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NDc1OlxcdHZpcnRxdWV1ZV9raWNrKHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfRVZFTlRdKTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy00NzYtb3V0Olxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9NTA3PXN0YXRpYyBib29sIHZpcnRpb190cmFuc3BvcnRfY2FuX21zZ3plcm9jb3B5KGludCBidWZzX251bSlcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTUxNS1cXHRpZiAodnNvY2spIHtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo1MTY6XFx0XFx0c3RydWN0IHZpcnRxdWV1ZSAqdnEgPSB2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy01MTctXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz02MzI9c3RhdGljIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTY0Mi1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo2NDM6XFx0dnEgPSB2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy02NDQtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz02OTk9c3RhdGljIGludCB2aXJ0aW9fdnNvY2tfdnFzX2luaXQoc3RydWN0IHZpcnRpb192c29jayAqdnNvY2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03MTUtXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NzE2OlxcdHJldCA9IHZpcnRpb19maW5kX3Zxcyh2ZGV2LCBWU09DS19WUV9NQVgsIHZzb2NrLVxcdTAwM2V2cXMsIHZxc19pbmZvLCBOVUxMKTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03MTctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz03NTU9c3RhdGljIHZvaWQgdmlydGlvX3Zzb2NrX3Zxc19kZWwoc3RydWN0IHZpcnRpb192c29jayAqdnNvY2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03ODQtXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnNvY2stXFx1MDAzZXJ4X2xvY2spO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjc4NTpcXHR3aGlsZSAoKHNrYiA9IHZpcnRxdWV1ZV9kZXRhY2hfdW51c2VkX2J1Zih2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXSkpKVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTc4Ni1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTc4OS1cXHRtdXRleF9sb2NrKFxcdTAwMjZ2c29jay1cXHUwMDNldHhfbG9jayk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NzkwOlxcdHdoaWxlICgoc2tiID0gdmlydHF1ZXVlX2RldGFjaF91bnVzZWRfYnVmKHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfVFhdKSkpXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNzkxLVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9ODAwPXN0YXRpYyBpbnQgdmlydGlvX3Zzb2NrX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtODM0LVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjgzNTpcXHRpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19WU09DS19GX1NFUVBBQ0tFVCkpXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtODM2LVxcdFxcdHZzb2NrLVxcdTAwM2VzZXFwYWNrZXRfYWxsb3cgPSB0cnVlO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9OTI5PXN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0ge1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjkzMDpcXHR7IFZJUlRJT19JRF9WU09DSywgVklSVElPX0RFVl9BTllfSUQgfSxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy05MzEtXFx0eyAwIH0sXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz05MzQ9c3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0ge1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjkzNTpcXHRWSVJUSU9fVlNPQ0tfRl9TRVFQQUNLRVRcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy05MzYtfTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTk1MT1zdGF0aWMgaW50IF9faW5pdCB2aXJ0aW9fdnNvY2tfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtOTU5LVxcdHJldCA9IHZzb2NrX2NvcmVfcmVnaXN0ZXIoXFx1MDAyNnZpcnRpb190cmFuc3BvcnQudHJhbnNwb3J0LFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjk2MDpcXHRcXHRcXHRcXHQgIFZTT0NLX1RSQU5TUE9SVF9GX0cySCk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtOTYxLVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjMtLyogSG93IGxvbmcgdG8gd2FpdCBmb3IgZ3JhY2VmdWwgc2h1dGRvd24gb2YgYSBjb25uZWN0aW9uICovXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0OiNkZWZpbmUgVlNPQ0tfQ0xPU0VfVElNRU9VVCAoOCAqIEhaKVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNS1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0zMy0jZGVmaW5lIE1BWF9DT0xMQVBTRV9MRU4gXFxcXFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzozNDpcXHRTS0JfTUFYX09SREVSKFZJUlRJT19WU09DS19TS0JfSEVBRFJPT00sIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0zNS1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0xMTk9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2J1aWxkX3NrYih2b2lkICpvcGFxdWUpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTQ2LVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNDc6XFx0aGRyLVxcdTAwM2V0cmFuc3BvcnQgPSBjcHVfdG9fbGUxNihBRl9WU09DS19UUkFOU1BPUlRfVklSVElPKTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTQ4LVxcdGhkci1cXHUwMDNlbGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpwa3RfaGRyKSk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTUxLVxcdHN3aXRjaCAobGUxNl90b19jcHUocGt0X2hkci1cXHUwMDNlb3ApKSB7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE1MjpcXHRjYXNlIFZJUlRJT19WU09DS19PUF9SRVFVRVNUOlxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNTM6XFx0Y2FzZSBWSVJUSU9fVlNPQ0tfT1BfUkVTUE9OU0U6XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE1NDpcXHRcXHRoZHItXFx1MDAzZW9wID0gY3B1X3RvX2xlMTYoQUZfVlNPQ0tfT1BfQ09OTkVDVCk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE1NS1cXHRcXHRicmVhaztcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTU2OlxcdGNhc2UgVklSVElPX1ZTT0NLX09QX1JTVDpcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTU3OlxcdGNhc2UgVklSVElPX1ZTT0NLX09QX1NIVVRET1dOOlxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNTg6XFx0XFx0aGRyLVxcdTAwM2VvcCA9IGNwdV90b19sZTE2KEFGX1ZTT0NLX09QX0RJU0NPTk5FQ1QpO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNTktXFx0XFx0YnJlYWs7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE2MDpcXHRjYXNlIFZJUlRJT19WU09DS19PUF9SVzpcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTYxOlxcdFxcdGhkci1cXHUwMDNlb3AgPSBjcHVfdG9fbGUxNihBRl9WU09DS19PUF9QQVlMT0FEKTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTYyLVxcdFxcdGJyZWFrO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNjM6XFx0Y2FzZSBWSVJUSU9fVlNPQ0tfT1BfQ1JFRElUX1VQREFURTpcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTY0OlxcdGNhc2UgVklSVElPX1ZTT0NLX09QX0NSRURJVF9SRVFVRVNUOlxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNjU6XFx0XFx0aGRyLVxcdTAwM2VvcCA9IGNwdV90b19sZTE2KEFGX1ZTT0NLX09QX0NPTlRST0wpO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNjYtXFx0XFx0YnJlYWs7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE2Ny1cXHRkZWZhdWx0Olxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNjg6XFx0XFx0aGRyLVxcdTAwM2VvcCA9IGNwdV90b19sZTE2KEFGX1ZTT0NLX09QX1VOS05PV04pO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNjktXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTgyLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxODM6XFx0XFx0aWYgKHNrYl9jb3B5X2RhdGFncmFtX2l0ZXIocGt0LCBWSVJUSU9fVlNPQ0tfU0tCX0NCKHBrdCktXFx1MDAzZW9mZnNldCxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTg0LVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZpb3ZfaXRlciwgcGF5bG9hZF9sZW4pKSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MjAzPXN0YXRpYyB1MTYgdmlydGlvX3RyYW5zcG9ydF9nZXRfdHlwZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjA1LVxcdGlmIChzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSlcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjA2OlxcdFxcdHJldHVybiBWSVJUSU9fVlNPQ0tfVFlQRV9TVFJFQU07XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTIwNy1cXHRlbHNlXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjIwODpcXHRcXHRyZXR1cm4gVklSVElPX1ZTT0NLX1RZUEVfU0VRUEFDS0VUO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMDktfVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTIxMj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZpcnRpb190cmFuc3BvcnRfYWxsb2Nfc2tiKHN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0X2luZm8gKmluZm8sXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjI0LVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyMjU6XFx0c2tiX2xlbiA9IFZJUlRJT19WU09DS19TS0JfSEVBRFJPT007XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTIyNi1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDEtXFx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJ3NrYl9zZXRfb3duZXJfdygpJy4gVGhlIG9ubHkgY2FzZVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDI6XFx0ICogd2hlbiAndnNrJyA9PSBOVUxMIGlzIFZJUlRJT19WU09DS19PUF9SU1QgY29udHJvbCBtZXNzYWdlXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0My1cXHQgKiB3aXRob3V0IHBheWxvYWQuXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjY2LVxcdFxcdGlmIChtc2dfZGF0YV9sZWZ0KGluZm8tXFx1MDAzZW1zZykgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNjc6XFx0XFx0ICAgIGluZm8tXFx1MDAzZXR5cGUgPT0gVklSVElPX1ZTT0NLX1RZUEVfU0VRUEFDS0VUKSB7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI2OC1cXHRcXHRcXHRzdHJ1Y3QgdmlydGlvX3Zzb2NrX2hkciAqaGRyID0gdmlydGlvX3Zzb2NrX2hkcihza2IpO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzozNi40MDE1NDkxMTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODI0MTU2MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSB2c29ja19jb25uZWN0IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggaW1wYWN0aW5nIGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgLCBzcGVjaWZpY2FsbHkgd2hlbiBgQ09ORklHX1ZTT0NLRVRTYCBpcyBlbmFibGVkLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgd2hhdCdzIGNoYW5nZWQsIGFuZCBob3cgY3JpdGljYWwgaXMgaXQ/XG5cblRoZSBvbmx5IGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGB2c29ja19jb25uZWN0YC4gTGV0J3Mgc2VlIGhvdyBgdnNvY2tfY29ubmVjdGAgaXMgY2FsbGVkLiBBaCwgcmlnaHQsIGluIGBhZl92c29jay5jYCBpdHNlbGYuIFRoZSBgdnNvY2tfc3RyZWFtX29wc2AgYW5kIGB2c29ja19zZXFwYWNrZXRfb3BzYCBzdHJ1Y3R1cmVzIGRlZmluZSBgLmNvbm5lY3QgPSB2c29ja19jb25uZWN0YC4gU28sIGEgdXNlci1zcGFjZSBgY29ubmVjdCgpYCBzeXN0ZW0gY2FsbCBldmVudHVhbGx5IGhpdHMgdGhpcyBmdW5jdGlvbiwgYXMgZXhwZWN0ZWQuXG5cbk5vdywgd2hhdCdzIHRoZSBwYXRjaCAqZG9pbmcqIGluIGB2c29ja19jb25uZWN0YD8gSSBzZWUgdHdvIHByaW1hcnkgY2hhbmdlczpcblxuMS4gIEl0J3MgYWx0ZXJpbmcgdGhlIHN0YXRlIGNoZWNrLiBUaGUgb3JpZ2luYWwgY29kZSBicm9rZSBvdXQgb2YgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdCBpZiB0aGUgc29ja2V0IHdhcyBhbHJlYWR5IGBUQ1BfRVNUQUJMSVNIRURgLiBOb3csIGl0IGFsc28gYnJlYWtzIGlmIHRoZSBzb2NrZXQgaXMgYFRDUF9DTE9TSU5HYC4gSG1tbSwgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBoYW5kbGUgYFRDUF9DTE9TSU5HYCBzdGF0ZXMgbW9yZSBncmFjZWZ1bGx5LlxuMi4gIEl0J3MgYWx0ZXJpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljLiBJdCB1c2VkIHRvIGNoZWNrIGZvciBhbiBlcnJvciBhbmQgdHJhbnNpdGlvbiB0byBgVENQX0NMT1NFYCBpZiB0aGVyZSB3YXMgb25lLiBOb3csIHRoZSB0cmFuc2l0aW9uIHRvIGBUQ1BfQ0xPU0VgIG9ubHkgaGFwcGVucyAqaWYqIHRoZXJlJ3MgYW4gZXJyb3IgKmFuZCogdGhlIHNvY2tldCBpc24ndCBhbHJlYWR5IGBUQ1BfRVNUQUJMSVNIRURgIG9yIGBUQ1BfQ0xPU0lOR2AuIFRoaXMgaW1wbGllcyB0aGV5J3JlIHRyeWluZyB0byBwcmV2ZW50IHByZW1hdHVyZSBzb2NrZXQgY2xvc3VyZSBpbiBjZXJ0YWluIGNvbm5lY3Rpb24gc2NlbmFyaW9zLlxuXG5TbywgdGhpcyBwYXRjaCBjaGFuZ2VzIHNvY2tldCBzdGF0ZSB0cmFuc2l0aW9ucyB3aXRoaW4gYHZzb2NrX2Nvbm5lY3RgLiBHaXZlbiB0aGF0IEFGX1ZTT0NLIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBhbmQgaXQncyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSB3aXRoIHZpcnRpby12c29jayBvciB2c29ja19sb29wYmFjay4gQWxzbywgc2luY2UgU3l6a2FsbGVyIGlzIGFjdGl2ZWx5IHRlc3RpbmcgdGhpcyB3aXRoIHZhcmlvdXMgc29ja2V0IGNhbGxzIGluY2x1ZGluZyBgY29ubmVjdCgpYCwgdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGlzIHNpZ25pZmljYW50LiBJdCdzIGNvcmUsIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGFmZmVjdCBzdGFiaWxpdHkgYW5kIGVycm9yIGhhbmRsaW5nLlxuXG5UaGVyZWZvcmUsIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksICoqdHJ1ZSoqIVxuXG5Ob3csIGZvciBGb2N1c1N5bWJvbHMsIGB2c29ja19jb25uZWN0YCBpcyB0aGUga2V5LiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIG1vZGlmaWVkPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlc3Qgb2YgYGFmX3Zzb2NrLmNgIGFuZCByZWxhdGVkIGZpbGVzLCBidXQgdGhlIHBhdGNoIHNlZW1zIGZvY3VzZWQgc29sZWx5IG9uIGB2c29ja19jb25uZWN0YC4gTm93IGxldCdzIHNlZSB3aGF0IHRoZSBjYWxsZXJzIGFyZSB3aXRoaW4gYGFmX3Zzb2NrLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQzNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzo0MS4yMjU3MDc1NDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMTA3NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnNvY2tfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjA5PXN0YXRpYyBERUZJTkVfTVVURVgodnNvY2tfcmVnaXN0ZXJfbXV0ZXgpO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzNS1cXHQoKChzcmMpLVxcdTAwM2Vzdm1fY2lkIF4gKGRzdCktXFx1MDAzZXN2bV9wb3J0KSAlIFZTT0NLX0hBU0hfU0laRSlcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM2OiNkZWZpbmUgdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoc3JjLCBkc3QpXFx0XFx0XFxcXFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzc6XFx0KFxcdTAwMjZ2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfQ09OTl9IQVNIKHNyYywgZHN0KV0pXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzODojZGVmaW5lIHZzb2NrX2Nvbm5lY3RlZF9zb2NrZXRzX3Zzayh2c2spXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzk6XFx0dnNvY2tfY29ubmVjdGVkX3NvY2tldHMoXFx1MDAyNih2c2spLVxcdTAwM2VyZW1vdGVfYWRkciwgXFx1MDAyNih2c2spLVxcdTAwM2Vsb2NhbF9hZGRyKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNDAtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjQyPUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2JpbmRfdGFibGUpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDM6c3RydWN0IGxpc3RfaGVhZCB2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfSEFTSF9TSVpFXTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ0OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0NS1ERUZJTkVfU1BJTkxPQ0sodnNvY2tfdGFibGVfbG9jayk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjYwPXN0YXRpYyB2b2lkIHZzb2NrX2luaXRfdGFibGVzKHZvaWQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY2LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjc6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodnNvY2tfY29ubmVjdGVkX3RhYmxlKTsgaSsrKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjg6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZzb2NrX2Nvbm5lY3RlZF90YWJsZVtpXSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2OS19XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzIwPV9fdnNvY2tfZmluZF9jb25uZWN0ZWRfc29ja2V0X25ldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMjQtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjMyNTpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzaywgdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoc3JjLCBkc3QpLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMjYtXFx0XFx0XFx0ICAgIGNvbm5lY3RlZF90YWJsZSkge1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTM0Nj12b2lkIHZzb2NrX2luc2VydF9jb25uZWN0ZWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzQ3LXtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzQ4OlxcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSB2c29ja19jb25uZWN0ZWRfc29ja2V0cyhcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzQ5LVxcdFxcdFxcdTAwMjZ2c2stXFx1MDAzZXJlbW90ZV9hZGRyLCBcXHUwMDI2dnNrLVxcdTAwM2Vsb2NhbF9hZGRyKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz00ODM9dm9pZCB2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00ODktXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ5MDpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh2c29ja19jb25uZWN0ZWRfdGFibGUpOyBpKyspIHtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDkxLVxcdFxcdHN0cnVjdCB2c29ja19zb2NrICp2c2s7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ5MjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzaywgXFx1MDAyNnZzb2NrX2Nvbm5lY3RlZF90YWJsZVtpXSxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDkzLVxcdFxcdFxcdFxcdCAgICBjb25uZWN0ZWRfdGFibGUpIHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz01OTk9aW50IHZzb2NrX2Fzc2lnbl90cmFuc3BvcnQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgc3RydWN0IHZzb2NrX3NvY2sgKnBzaylcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy02NzItXFx0XFx0LyogdHJhbnNwb3J0LVxcdTAwM2VyZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBzb2NrIGxvY2sgYWNxdWlyZWQuXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjY3MzpcXHRcXHQgKiBUaGlzIHBhdGggY2FuIG9ubHkgYmUgdGFrZW4gZHVyaW5nIHZzb2NrX2Nvbm5lY3QoKSwgd2hlcmUgd2VcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNjc0LVxcdFxcdCAqIGhhdmUgYWxyZWFkeSBoZWxkIHRoZSBzb2NrIGxvY2suIEluIHRoZSBvdGhlciBjYXNlcywgdGhpc1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTY4Mi1cXHRcXHQgKiBzdGF0ZSwgc2luY2Ugd2UgYXJlIHJlYXNzaWduaW5nIHRoZSBzb2NrZXQgdG8gYSBuZXcgdHJhbnNwb3J0XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjY4MzpcXHRcXHQgKiBkdXJpbmcgdnNvY2tfY29ubmVjdCgpLCBsZXQncyByZXNldCB0aGVzZSBmaWVsZHMgdG8gaGF2ZSBhXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTY4NC1cXHRcXHQgKiBjbGVhbiBzdGF0ZS5cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz04OTc9c3RhdGljIGludCBfX3Zzb2NrX2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTMzLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5MzQ6c3RhdGljIHZvaWQgdnNvY2tfY29ubmVjdF90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTkzNS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9OTM2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk3NS1cXHRXUklURV9PTkNFKHZzay1cXHUwMDNlcGVlcl9zaHV0ZG93biwgMCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjk3NjpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2dnNrLVxcdTAwM2Vjb25uZWN0X3dvcmssIHZzb2NrX2Nvbm5lY3RfdGltZW91dCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk3Ny1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2dnNrLVxcdTAwM2VwZW5kaW5nX3dvcmssIHZzb2NrX3BlbmRpbmdfd29yayk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTA5MD1FWFBPUlRfU1lNQk9MX0dQTCh2c29ja19zdHJlYW1faGFzX2RhdGEpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMDkxLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxMDkyOnM2NCB2c29ja19jb25uZWN0aWJsZV9oYXNfZGF0YShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMDkzLXtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMTAzLX1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTEwNDpFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19jb25uZWN0aWJsZV9oYXNfZGF0YSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTExMDUtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTY3Mj1zdGF0aWMgaW50IHZzb2NrX3RyYW5zcG9ydF9jYW5jZWxfcGt0KHN0cnVjdCB2c29ja19zb2NrICp2c2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTY4MS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTY4MjpzdGF0aWMgdm9pZCB2c29ja19jb25uZWN0X3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNjgzLXtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNzAzLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNzA0OnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTcwNS1cXHRcXHRcXHQgaW50IGFkZHJfbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTk5Nj1zdGF0aWMgdm9pZCB2c29ja191cGRhdGVfYnVmZmVyX3NpemUoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMDEyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMDEzOnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdGlibGVfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMDE0LVxcdFxcdFxcdFxcdFxcdGludCBsZXZlbCxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTI2LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMTI3OnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdGlibGVfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTI4LVxcdFxcdFxcdFxcdFxcdGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjE4NS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjE4NjpzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3RpYmxlX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTg3LVxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMzQ3LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzQ4OnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdGlibGVfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjM0OS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjM2NC1cXHRcXHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCB3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzY1OlxcdFxcdGRhdGEgPSB2c29ja19jb25uZWN0aWJsZV9oYXNfZGF0YSh2c2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMzY2LVxcdFxcdGlmIChkYXRhICE9IDApXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjQxNT1zdGF0aWMgaW50IF9fdnNvY2tfc3RyZWFtX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQ1Mi1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ1MzpcXHRcXHRlcnIgPSB2c29ja19jb25uZWN0aWJsZV93YWl0X2RhdGEoc2ssIFxcdTAwMjZ3YWl0LCB0aW1lb3V0LFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNDU0LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnJlY3ZfZGF0YSwgdGFyZ2V0KTtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNDk0PXN0YXRpYyBpbnQgX192c29ja19zZXFwYWNrZXRfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTA4LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNTA5OlxcdGVyciA9IHZzb2NrX2Nvbm5lY3RpYmxlX3dhaXRfZGF0YShzaywgXFx1MDAyNndhaXQsIHRpbWVvdXQsIE5VTEwsIDApO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTEwLVxcdGlmIChlcnIgXFx1MDAzYz0gMClcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNTQ0PWludFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNTQ1Ol9fdnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI1NDYtXFx0XFx0XFx0ICAgIGludCBmbGFncylcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjExPWludFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjEyOnZzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjEzLVxcdFxcdFxcdCAgaW50IGZsYWdzKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MjMtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2MjQ6XFx0cmV0dXJuIF9fdnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyhzb2NrLCBtc2csIGxlbiwgZmxhZ3MpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjI1LX1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjYyNjpFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYyNy1cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3N0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY1Ni1cXHQuYmluZCA9IHZzb2NrX2JpbmQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NTc6XFx0LmNvbm5lY3QgPSB2c29ja19jb25uZWN0LFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjU4LVxcdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NjQtXFx0LnNodXRkb3duID0gdnNvY2tfc2h1dGRvd24sXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NjU6XFx0LnNldHNvY2tvcHQgPSB2c29ja19jb25uZWN0aWJsZV9zZXRzb2Nrb3B0LFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjY2OlxcdC5nZXRzb2Nrb3B0X2l0ZXIgPSB2c29ja19jb25uZWN0aWJsZV9nZXRzb2Nrb3B0LFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjY3OlxcdC5zZW5kbXNnID0gdnNvY2tfY29ubmVjdGlibGVfc2VuZG1zZyxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY2ODpcXHQucmVjdm1zZyA9IHZzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2csXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NjktXFx0Lm1tYXAgPSBzb2NrX25vX21tYXAsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjY3ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB2c29ja19zZXFwYWNrZXRfb3BzID0ge1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NzgtXFx0LmJpbmQgPSB2c29ja19iaW5kLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjc5OlxcdC5jb25uZWN0ID0gdnNvY2tfY29ubmVjdCxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY4MC1cXHQuc29ja2V0cGFpciA9IHNvY2tfbm9fc29ja2V0cGFpcixcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjg2LVxcdC5zaHV0ZG93biA9IHZzb2NrX3NodXRkb3duLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjg3OlxcdC5zZXRzb2Nrb3B0ID0gdnNvY2tfY29ubmVjdGlibGVfc2V0c29ja29wdCxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY4ODpcXHQuZ2V0c29ja29wdF9pdGVyID0gdnNvY2tfY29ubmVjdGlibGVfZ2V0c29ja29wdCxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY4OTpcXHQuc2VuZG1zZyA9IHZzb2NrX2Nvbm5lY3RpYmxlX3NlbmRtc2csXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2OTA6XFx0LnJlY3Ztc2cgPSB2c29ja19jb25uZWN0aWJsZV9yZWN2bXNnLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjkxLVxcdC5tbWFwID0gc29ja19ub19tbWFwLFxcbi0tXFxubmV0L3Ztd192c29jay9kaWFnLmM9NDg9c3RhdGljIGludCB2c29ja19kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L3Ztd192c29jay9kaWFnLmMtMTAxLVxcdC8qIENvbm5lY3RlZCB0YWJsZSAoYWNjZXB0ZWQgY29ubmVjdGlvbnMpICovXFxubmV0L3Ztd192c29jay9kaWFnLmM6MTAyOlxcdHdoaWxlIChidWNrZXQgXFx1MDAzYyBBUlJBWV9TSVpFKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSkpIHtcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzoxMDM6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IFxcdTAwMjZ2c29ja19jb25uZWN0ZWRfdGFibGVbYnVja2V0XTtcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0xMDQtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYz0xOTM9c3RhdGljIGludCBodnNfY2hhbm5lbF9yZWFkYWJsZV9wYXlsb2FkKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuKVxcbi0tXFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTk4LVxcdFxcdC8qIEF0IGxlYXN0IHdlIGhhdmUgMSBieXRlIHRvIHJlYWQuIFdlIGRvbid0IG5lZWQgdG8gcmV0dXJuXFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmM6MTk5OlxcdFxcdCAqIHRoZSBleGFjdCByZWFkYWJsZSBieXRlczogc2VlIHZzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2coKSAtXFx1MDAzZVxcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jLTIwMC1cXHRcXHQgKiB2c29ja19zdHJlYW1faGFzX2RhdGEoKS5cXG4tLVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYnBmLmM9MjU9c3RhdGljIGJvb2wgdnNvY2tfaGFzX2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L3Ztd192c29jay92c29ja19icGYuYy0yOS1cXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2JwZi5jOjMwOlxcdHJldCA9IHZzb2NrX2Nvbm5lY3RpYmxlX2hhc19kYXRhKHZzayk7XFxubmV0L3Ztd192c29jay92c29ja19icGYuYy0zMS1cXHRpZiAocmV0IFxcdTAwM2UgMClcXG4tLVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYnBmLmM9NjE9c3RhdGljIGludCBfX3Zzb2NrX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sIGludCBmbGFncylcXG4tLVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYnBmLmMtNjYtXFx0aWYgKHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNIHx8IHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU0VRUEFDS0VUKVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYnBmLmM6Njc6XFx0XFx0ZXJyID0gX192c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKHNvY2ssIG1zZywgbGVuLCBmbGFncyk7XFxubmV0L3Ztd192c29jay92c29ja19icGYuYy02OC1cXHRlbHNlIGlmIChzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX0RHUkFNKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzo0MS4yNzE4MjIzMjFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjQ2MTk4MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWU09DSyBDb25uZWN0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGB2c29ja19jb25uZWN0YCBhbmQgYHZzb2NrX2Nvbm5lY3RfdGltZW91dGAgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBgdnNvY2tfY29ubmVjdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGZlYXR1cmVzIGFyZSBlbmFibGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfVlNPQ0tFVFNgIGlzIGVuYWJsZWQsIGFzIHRoaXMgaXMgdGhlIHByaW1hcnkgZW5hYmxlciBmb3IgYGFmX3Zzb2NrLmNgLiBGdXJ0aGVybW9yZSwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1ZTT0NLRVRTX0xPT1BCQUNLYCBvciBgQ09ORklHX1ZJUlRJT19WU09DS0VUU2AgYXJlIGFsc28gZW5hYmxlZCwgYXMgdGhlc2Ugb3B0aW9ucyBwcm92aWRlIHRoZSBzcGVjaWZpYyB0cmFuc3BvcnRzIHRoYXQgdXRpbGl6ZSBWU09DSy4gSW4gZXNzZW5jZSwgYFZTT0NLRVRTYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIGVuYWJsaW5nIHRoZSBjb3JlIGBhZl92c29jay5jYCBtb2R1bGUgdGhhdCBob3VzZXMgdGhlIGB2c29ja19jb25uZWN0YCBmdW5jdGlvbi5cblxuTm93LCBsZXQncyBzb2xpZGlmeSB0aGUgdW5kZXJzdGFuZGluZy4gVGhlIHByb3ZpZGVkIGNvbnRleHQgaW5kaWNhdGVzIHRoaXMgaXMgd29ydGggZnV6emluZyBhbmQgdGhhdCB0aGUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBwcmVzZW50LiBgVlNPQ0tFVFNgLCBgVlNPQ0tFVFNfTE9PUEJBQ0tgLCBhbmQgYFZJUlRJT19WU09DS0VUU2AgYXJlIHRoZSByZWxldmFudCBlbmFibGluZyBjb25maWdzLiBUaGUgYHZzb2NrX2Nvbm5lY3RgIGZ1bmN0aW9uIGlzIHRoZSB0YXJnZXRlZCBzeW1ib2wuXG5cblRoZSByZWFzb25pbmcgcHJvdmlkZWQgY2xhcmlmaWVzIHRoZSBjb3JlIGltcGFjdDogVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIHNvY2tldCBzdGF0ZSBjaGVja3Mgd2l0aGluIGB2c29ja19jb25uZWN0YCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGhvdyB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2NlZWRzIGFuZCBob3cgc29ja2V0IGVycm9ycyBhcmUgaGFuZGxlZC4gVGhlIGNoYW5nZSBhdm9pZHMgYW4gdW53YW50ZWQgc3RhdGUgcmVzZXQgaW4gY2VydGFpbiBlcnJvciBjb25kaXRpb25zIHdoZW4gdGhlIHNvY2tldCBzdGF0ZSAoYHNrX3N0YXRlYCkgaXMgYFRDUF9DTE9TSU5HYC4gVGhpcyBjbGVhcmx5IGFmZmVjdHMgdGhlIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudCB3aXRoaW4gdGhlIEFGX1ZTT0NLIG5ldHdvcmsgYWRkcmVzcyBmYW1pbHkuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGlzc3VlLlxuXG5GaW5hbGx5LCBoYXZpbmcgdmFsaWRhdGVkIHRoZSBhbmFseXNpcyBhbmQgY29uZmlybWVkIHRoZSBjcml0aWNhbCBlbGVtZW50cywgaXQncyB0aW1lIHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjkyMCwiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MzM6NDQuNTE4MDIzMTM0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYxOTUzNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHZzb2NrX2Nvbm5lY3QoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMsIGNoYW5naW5nIHRoZSBzdGF0ZSB2YWxpZGF0aW9uIGxvZ2ljIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIGJ5IGFjY29tbW9kYXRpbmcgdGhlIFRDUF9DTE9TSU5HIHNvY2tldCBzdGF0ZS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBBRl9WU09DSyBzb2NrZXQgbGlmZWN5Y2xlIHRyYW5zaXRpb25zIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHZzb2NrX2Nvbm5lY3QoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMsIGNoYW5naW5nIHRoZSBzdGF0ZSB2YWxpZGF0aW9uIGxvZ2ljIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIGJ5IGFjY29tbW9kYXRpbmcgdGhlIFRDUF9DTE9TSU5HIHNvY2tldCBzdGF0ZS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBBRl9WU09DSyBzb2NrZXQgbGlmZWN5Y2xlIHRyYW5zaXRpb25zIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzo0NC42MDQyMjc2ODVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTA0NjA0OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MzM6NDQuNjA0ODU1Nzc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTU1MDM5NzIzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN0YXRlIG1hY2hpbmUgaGFuZGxpbmcgaW4gdnNvY2tfY29ubmVjdCgpIGJ5IHRyZWF0aW5nIFRDUF9DTE9TSU5HIHNpbWlsYXJseSB0byBUQ1BfRVNUQUJMSVNIRUQgd2hlbiBjaGVja2luZyBzay1cXHUwMDNlc2tfc3RhdGUgdXBvbiB3YWtpbmcgZnJvbSBjb25uZWN0aW9uIHdhaXQgYW5kIGVycm9yIGhhbmRsaW5nLiBUaGlzIGNoYW5nZSBhZmZlY3RzIHNvY2tldCBjb250cm9sIGZsb3cgYW5kIHN0YXRlIHRyYW5zaXRpb25zIG9ubHkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgYnVmZmVyIGNvcHlpbmcgb3Igc2l6aW5nLCB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzL3BhZGRpbmcgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MTdlZDQ3NjI5NTQwZTgyNzc4ZjA4MGE5ODY2NDFlNzcyNGU2MTYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAyMjozMzoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuaW5kZXggZjg0MDQ5OGI1OGFmYi4uZWVjNWRkNmRhZWJiMSAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuKysrIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5AQCAtMTgzNCwyMyArMTgzNCwyMCBAQCBzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4gXHRcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xuIFx0XHRsb2NrX3NvY2soc2spO1xuIFxuLVx0XHQvKiBDb25uZWN0aW9uIGVzdGFibGlzaGVkLiBXaGF0ZXZlciBoYXBwZW5zIHRvIHNvY2tldCBvbmNlIHdlXG4tXHRcdCAqIHJlbGVhc2UgaXQsIHRoYXQncyBub3QgY29ubmVjdCgpJ3MgY29uY2Vybi4gTm8gbmVlZCB0byBnb1xuK1x0XHQvKiBDb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZC4gV2hhdGV2ZXIgaGFwcGVucyB0byBzb2NrZXQgb25jZVxuK1x0XHQgKiB3ZSByZWxlYXNlIGl0LCB0aGF0J3Mgbm90IGNvbm5lY3QoKSdzIGNvbmNlcm4uIE5vIG5lZWQgdG8gZ29cbiBcdFx0ICogaW50byBzaWduYWwgYW5kIHRpbWVvdXQgaGFuZGxpbmcuIENhbGwgaXQgYSBkYXkuXG4gXHRcdCAqXG4gXHRcdCAqIE5vdGUgdGhhdCBhbGxvd2luZyB0byBcInJlc2V0XCIgYW4gYWxyZWFkeSBlc3RhYmxpc2hlZCBzb2NrZXRcbiBcdFx0ICogaGVyZSBpcyByYWN5IGFuZCBpbnNlY3VyZS5cbiBcdFx0ICovXG4tXHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpXG4rXHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQgfHxcbitcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TSU5HKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHQvKiBJZiBjb25uZWN0aW9uIHdhcyBfbm90XyBlc3RhYmxpc2hlZCBhbmQgYSBzaWduYWwvdGltZW91dCBjYW1lXG4gXHRcdCAqIHRvIGJlLCB3ZSB3YW50IHRoZSBzb2NrZXQncyBzdGF0ZSByZXNldC4gVXNlciBzcGFjZSBtYXkgd2FudFxuIFx0XHQgKiB0byByZXRyeS5cbi1cdFx0ICpcbi1cdFx0ICogc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIGltcGxpZXMgdGhhdCBzb2NrZXQgaXMgbm90IG9uXG4tXHRcdCAqIHZzb2NrX2Nvbm5lY3RlZF90YWJsZS4gV2Uga2VlcCB0aGUgYmluZGluZyBhbmQgdGhlIHRyYW5zcG9ydFxuLVx0XHQgKiBhc3NpZ25lZC5cbiBcdFx0ICovXG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSB8fCB0aW1lb3V0ID09IDApIHtcbiBcdFx0XHRlcnIgPSB0aW1lb3V0ID09IDAgPyAtRVRJTUVET1VUIDogc29ja19pbnRyX2Vycm5vKHRpbWVvdXQpO1xuQEAgLTE4NzUsNyArMTg3Miw4IEBAIHN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbiBcdH1cbiBcbiBcdGVyciA9IHNvY2tfZXJyb3Ioc2spO1xuLVx0aWYgKGVycikge1xuK1x0aWYgKGVyciBcdTAwMjZcdTAwMjZcbitcdCAgICBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TSU5HKSB7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gVENQX0NMT1NFO1xuIFx0XHRzb2NrLVx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzo0NC42MDQ4NTY5NTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTI2MDM5MDA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5lZWQgZm9yIERlZGljYXRlZCBLTVNBTiBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGJlaW5nIGFza2VkIGlmIHRoaXMga2VybmVsIHBhdGNoIGluIGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgIG5lZWRzIHNwZWNpYWwgS01TQU4gZnV6emluZywgb3IgaWYgS0FTQU4gYW5kIHN0YW5kYXJkIGZ1enppbmcgYXJlIHN1ZmZpY2llbnQuIFJpZ2h0LCBsZXQncyBicmVhayBpdCBkb3duLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGRvZXMuIEl0IGxvb2tzIGxpa2UgaXQncyBpbiB0aGUgYHZzb2NrX2Nvbm5lY3RgIGZ1bmN0aW9uLiBUaGUgY29kZSBibG9jayBhZGRyZXNzZXMgc29tZSBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgdGltZW91dHMgYW5kIHNpZ25hbHMgZHVyaW5nIHRoZSBjb25uZWN0aW9uIHByb2Nlc3MuIEl0IGFwcGVhcnMgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIG1pc3NpbmcgYSBzdGF0ZSBjaGVjay4gVGhleSd2ZSB1cGRhdGVkIHRoaXMgdG8gYWxsb3cgZXN0YWJsaXNoZWQgb3IgY2xvc2luZyBzb2NrZXRzLiBUaGVuIHdlIHNlZSBhbiBgZXJyYCBjaGVjayBhbmQgYSBzdGF0ZSB0cmFuc2l0aW9uIGJhY2sgdG8gYFRDUF9DTE9TRWAuIFRoZSBjb2RlIG5vdyBhdm9pZHMgdGhlIHN0YXRlIGNoZWNrIHdoZW4gdGhlIHNvY2tldCBpcyBpbiBhbiBlc3RhYmxpc2hlZCBvciBjbG9zaW5nIHN0YXRlLiBJdCdzIGVzc2VudGlhbGx5IHJlZmluaW5nIHRoZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGZsb3cuIFRoZXkgYXJlIGNvcnJlY3Rpbmcgc29ja2V0IHN0YXRlIGhhbmRsaW5nIGR1cmluZyBjb25uZWN0aW9uIHRpbWVvdXRzIGFuZCBpbnRlcnJ1cHRzLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBmaWxlIHBhdGggYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AsIGl0J3MgY2xlYXIgdGhpcyBpcyBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBmb3IgdnNvY2ssIHdoaWNoIGlzIGEgdmlydHVhbCBzb2NrZXQgaW1wbGVtZW50YXRpb24gdHlwaWNhbGx5IHVzZWQgaW4gdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLiBOZXR3b3JraW5nIGNvZGUgaXMgb2Z0ZW4gYSB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBpdCBpcyBjb21wbGV4LCBhbmQgY2FuIGJlIHN1YmplY3QgdG8gZXh0ZXJuYWwgaW5wdXQsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBwbGFjZSB0byB0cmlnZ2VyIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBUaGUgY29kZSBpdHNlbGYgdG91Y2hlcyBvbiBzb2NrZXQgc3RhdGVzIGFuZCBjb25uZWN0aW9uIHRpbWVvdXRzLCB3aGljaCBoaW50cyBhdCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBjb25jdXJyZW5jeSBwcm9ibGVtcy5cblxuU28sIGRvIHdlICpuZWVkKiBkZWRpY2F0ZWQgS01TQU4gZnV6emluZz8gTXkgZ3V0IHNheXMgXCJwcm9iYWJseSBub3QgKmp1c3QqIGZvciB0aGlzXCIuIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24ndCBzY3JlYW0gXCJLTVNBTiB2dWxuZXJhYmlsaXR5XCIgdG8gbWUuIEtBU0FOIHNob3VsZCBiZSBlbm91Z2ggZm9yIGJhc2ljIG1lbW9yeSBzYWZldHkgY2hlY2tzIGFuZCBkZXRlY3RpbmcgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgaXNzdWVzIGluIHRoaXMgYXJlYS4gV2UgY2FuIHVzZSBzdGFuZGFyZCBmdXp6aW5nIHRlY2huaXF1ZXMuIFRoaXMgaXMgYmVjYXVzZSBLQVNBTiBpcyBhbHJlYWR5IGVuYWJsZWQsIHNvIHdlIHdpbGwgbGlrZWx5IGNhdGNoIGFueSBjb21tb24gbWVtb3J5IGVycm9ycyB3aXRob3V0IGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiBCdXQgSSBuZWVkIHRvIGJlIG1vcmUgdGhvcm91Z2gsIHNvIEknbGwgYWxzbyBjb25zaWRlciB0aGlzOiBpZiB0aGlzIHZzb2NrIGNvZGUgaXMgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgYSBsYXJnZXIgc3lzdGVtLCBzYXkgYSBoeXBlcnZpc29yLCBvciBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbW1vbmx5IGNhbGxlZCB3aXRoIG1hbnkgZXh0ZXJuYWwgaW5wdXRzLCBpdCBtYXkgYmUgd29ydGh3aGlsZSB0byBpbnZlc3RpZ2F0ZSBmdXp6aW5nIGFuZCBLTVNBTi4gS01TQU4gaXMgbW9yZSBzcGVjaWZpYyBmb3Iga2VybmVsIG1lbW9yeSBzYWZldHkuIFNvLCBJZiBJIHNlZSBzb21lIHBvdGVudGlhbCBoZXJlLCBJIGNhbiBhZGQgaXQgdG8gdGhlIGxpc3QuIEknbGwgbmVlZCB0byBrbm93IG1vcmUgYWJvdXQgdGhlIGJyb2FkZXIgc3lzdGVtIGNvbnRleHQgdG8gbWFrZSBhIGZpbmFsIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzo1My44NjUyNTA0MTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgwMDpcXHRcXHQvKiBUaGUgcmVjZWl2ZSBwYXRoIHdpbGwgaGFuZGxlIGFsbCBjb21tdW5pY2F0aW9uIHVudGlsIHdlIGFyZSBhYmxlIHRvXFxuMTgwMTpcXHRcXHQgKiBlbnRlciB0aGUgY29ubmVjdGVkIHN0YXRlLiAgSGVyZSB3ZSB3YWl0IGZvciB0aGUgY29ubmVjdGlvbiB0byBiZVxcbjE4MDI6XFx0XFx0ICogY29tcGxldGVkIG9yIGEgbm90aWZpY2F0aW9uIG9mIGFuIGVycm9yLlxcbjE4MDM6XFx0XFx0ICovXFxuMTgwNDpcXHRcXHR0aW1lb3V0ID0gdnNrLVxcdTAwM2Vjb25uZWN0X3RpbWVvdXQ7XFxuMTgwNTpcXHRcXHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCBcXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcXG4xODA2OlxcdFxcbjE4MDc6XFx0XFx0LyogSWYgdGhlIHNvY2tldCBpcyBhbHJlYWR5IGNsb3Npbmcgb3IgaXQgaXMgaW4gYW4gZXJyb3Igc3RhdGUsIHRoZXJlXFxuMTgwODpcXHRcXHQgKiBpcyBubyBwb2ludCBpbiB3YWl0aW5nLlxcbjE4MDk6XFx0XFx0ICovXFxuMTgxMDpcXHRcXHR3aGlsZSAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCBcXHUwMDI2XFx1MDAyNlxcbjE4MTE6XFx0XFx0ICAgICAgIHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0lORyBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfZXJyID09IDApIHtcXG4xODEyOlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE9fTk9OQkxPQ0spIHtcXG4xODEzOlxcdFxcdFxcdFxcdC8qIElmIHdlJ3JlIG5vdCBnb2luZyB0byBibG9jaywgd2Ugc2NoZWR1bGUgYSB0aW1lb3V0XFxuMTgxNDpcXHRcXHRcXHRcXHQgKiBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHRpbWVvdXQgb24gdGhlIGNvbm5lY3Rpb25cXG4xODE1OlxcdFxcdFxcdFxcdCAqIGF0dGVtcHQsIGluIGNhc2UgdGhlIHBlZXIgZG9lc24ndCByZXNwb25kIGluIGFcXG4xODE2OlxcdFxcdFxcdFxcdCAqIHRpbWVseSBtYW5uZXIuIFdlIGhvbGQgb24gdG8gdGhlIHNvY2tldCB1bnRpbCB0aGVcXG4xODE3OlxcdFxcdFxcdFxcdCAqIHRpbWVvdXQgZmlyZXMuXFxuMTgxODpcXHRcXHRcXHRcXHQgKi9cXG4xODE5OlxcdFxcdFxcdFxcdHNvY2tfaG9sZChzayk7XFxuMTgyMDpcXHRcXG4xODIxOlxcdFxcdFxcdFxcdC8qIElmIHRoZSB0aW1lb3V0IGZ1bmN0aW9uIGlzIGFscmVhZHkgc2NoZWR1bGVkLFxcbjE4MjI6XFx0XFx0XFx0XFx0ICogcmVzY2hlZHVsZSBpdCwgdGhlbiB1bmdyYWIgdGhlIHNvY2tldCByZWZjb3VudCB0b1xcbjE4MjM6XFx0XFx0XFx0XFx0ICoga2VlcCBpdCBiYWxhbmNlZC5cXG4xODI0OlxcdFxcdFxcdFxcdCAqL1xcbjE4MjU6XFx0XFx0XFx0XFx0aWYgKG1vZF9kZWxheWVkX3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgXFx1MDAyNnZzay1cXHUwMDNlY29ubmVjdF93b3JrLFxcbjE4MjY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0aW1lb3V0KSlcXG4xODI3OlxcdFxcdFxcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4xODI4OlxcdFxcbjE4Mjk6XFx0XFx0XFx0XFx0LyogU2tpcCBhaGVhZCB0byBwcmVzZXJ2ZSBlcnJvciBjb2RlIHNldCBhYm92ZS4gKi9cXG4xODMwOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3dhaXQ7XFxuMTgzMTpcXHRcXHRcXHR9XFxuMTgzMjpcXHRcXG4xODMzOlxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuMTgzNDpcXHRcXHRcXHR0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTtcXG4xODM1OlxcdFxcdFxcdGxvY2tfc29jayhzayk7XFxuMTgzNjpcXHRcXG4xODM3OlxcdFxcdFxcdC8qIENvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLiBXaGF0ZXZlciBoYXBwZW5zIHRvIHNvY2tldCBvbmNlXFxuMTgzODpcXHRcXHRcXHQgKiB3ZSByZWxlYXNlIGl0LCB0aGF0J3Mgbm90IGNvbm5lY3QoKSdzIGNvbmNlcm4uIE5vIG5lZWQgdG8gZ29cXG4xODM5OlxcdFxcdFxcdCAqIGludG8gc2lnbmFsIGFuZCB0aW1lb3V0IGhhbmRsaW5nLiBDYWxsIGl0IGEgZGF5LlxcbjE4NDA6XFx0XFx0XFx0ICpcXG4xODQxOlxcdFxcdFxcdCAqIE5vdGUgdGhhdCBhbGxvd2luZyB0byBcXFwicmVzZXRcXFwiIGFuIGFscmVhZHkgZXN0YWJsaXNoZWQgc29ja2V0XFxuMTg0MjpcXHRcXHRcXHQgKiBoZXJlIGlzIHJhY3kgYW5kIGluc2VjdXJlLlxcbjE4NDM6XFx0XFx0XFx0ICovXFxuMTg0NDpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCB8fFxcbjE4NDU6XFx0XFx0XFx0ICAgIHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0lORylcXG4xODQ2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE4NDc6XFx0XFxuMTg0ODpcXHRcXHRcXHQvKiBJZiBjb25uZWN0aW9uIHdhcyBfbm90XyBlc3RhYmxpc2hlZCBhbmQgYSBzaWduYWwvdGltZW91dCBjYW1lXFxuMTg0OTpcXHRcXHRcXHQgKiB0byBiZSwgd2Ugd2FudCB0aGUgc29ja2V0J3Mgc3RhdGUgcmVzZXQuIFVzZXIgc3BhY2UgbWF5IHdhbnRcXG4xODUwOlxcdFxcdFxcdCAqIHRvIHJldHJ5LlxcbjE4NTE6XFx0XFx0XFx0ICovXFxuMTg1MjpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgfHwgdGltZW91dCA9PSAwKSB7XFxuMTg1MzpcXHRcXHRcXHRcXHRlcnIgPSB0aW1lb3V0ID09IDAgPyAtRVRJTUVET1VUIDogc29ja19pbnRyX2Vycm5vKHRpbWVvdXQpO1xcbjE4NTQ6XFx0XFxuMTg1NTpcXHRcXHRcXHRcXHQvKiBMaXN0ZW5lciBtaWdodCBoYXZlIGFscmVhZHkgcmVzcG9uZGVkIHdpdGhcXG4xODU2OlxcdFxcdFxcdFxcdCAqIFZJUlRJT19WU09DS19PUF9SRVNQT05TRS4gSXRzIGhhbmRsaW5nIGV4cGVjdHMgb3VyXFxuMTg1NzpcXHRcXHRcXHRcXHQgKiBza19zdGF0ZSA9PSBUQ1BfU1lOX1NFTlQsIHdoaWNoIGhlcmVieSB3ZSBicmVhay5cXG4xODU4OlxcdFxcdFxcdFxcdCAqIEluIHN1Y2ggY2FzZSBWSVJUSU9fVlNPQ0tfT1BfUlNUIHdpbGwgZm9sbG93LlxcbjE4NTk6XFx0XFx0XFx0XFx0ICovXFxuMTg2MDpcXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBUQ1BfQ0xPU0U7XFxuMTg2MTpcXHRcXHRcXHRcXHRzb2NrLVxcdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xcbjE4NjI6XFx0XFxuMTg2MzpcXHRcXHRcXHRcXHQvKiBUcnkgdG8gY2FuY2VsIFZJUlRJT19WU09DS19PUF9SRVFVRVNUIHNrYiBzZW50IG91dCBieVxcbjE4NjQ6XFx0XFx0XFx0XFx0ICogdHJhbnNwb3J0LVxcdTAwM2Vjb25uZWN0KCkuXFxuMTg2NTpcXHRcXHRcXHRcXHQgKi9cXG4xODY2OlxcdFxcdFxcdFxcdHZzb2NrX3RyYW5zcG9ydF9jYW5jZWxfcGt0KHZzayk7XFxuMTg2NzpcXHRcXG4xODY4OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3dhaXQ7XFxuMTg2OTpcXHRcXHRcXHR9XFxuMTg3MDpcXHRcXG4xODcxOlxcdFxcdFxcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChzayksIFxcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbjE4NzI6XFx0XFx0fVxcbjE4NzM6XFx0XFxuMTg3NDpcXHRcXHRlcnIgPSBzb2NrX2Vycm9yKHNrKTtcXG4xODc1OlxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjZcXG4xODc2OlxcdFxcdCAgICBzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0lORykge1xcbjE4Nzc6XFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gVENQX0NMT1NFO1xcbjE4Nzg6XFx0XFx0XFx0c29jay1cXHUwMDNlc3RhdGUgPSBTU19VTkNPTk5FQ1RFRDtcXG4xODc5OlxcdFxcdH1cXG4xODgwOlxcdFxcbjE4ODE6XFx0b3V0X3dhaXQ6XFxuMTg4MjpcXHRcXHRmaW5pc2hfd2FpdChza19zbGVlcChzayksIFxcdTAwMjZ3YWl0KTtcXG4xODgzOlxcdG91dDpcXG4xODg0OlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuMTg4NTpcXHRcXHRyZXR1cm4gZXJyO1xcbjE4ODY6XFx0fVxcbjE4ODc6XFx0XFxuMTg4ODpcXHRzdGF0aWMgaW50IHZzb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxcbjE4ODk6XFx0XFx0XFx0XFx0c3RydWN0IHByb3RvX2FjY2VwdF9hcmcgKmFyZylcXG4xODkwOlxcdHtcXG4xODkxOlxcdFxcdHN0cnVjdCBzb2NrICpsaXN0ZW5lcjtcXG4xODkyOlxcdFxcdGludCBlcnI7XFxuMTg5MzpcXHRcXHRzdHJ1Y3Qgc29jayAqY29ubmVjdGVkO1xcbjE4OTQ6XFx0XFx0c3RydWN0IHZzb2NrX3NvY2sgKnZjb25uZWN0ZWQ7XFxuMTg5NTpcXHRcXHRsb25nIHRpbWVvdXQ7XFxuMTg5NjpcXHRcXHRERUZJTkVfV0FJVCh3YWl0KTtcXG4xODk3OlxcdFxcbjE4OTg6XFx0XFx0ZXJyID0gMDtcXG4xODk5OlxcdFxcdGxpc3RlbmVyID0gc29jay1cXHUwMDNlc2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjMzOjUzLjg2NTQ3NjQzMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjQzMzMwNzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIHZzb2NrX2Nvbm5lY3QgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIG1vZGlmeWluZyB0aGUgYHZzb2NrX2Nvbm5lY3RgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgdGhlIHNvY2tldCBzdGF0ZSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgY29ubmVjdGlvbiB0byBiZSBlc3RhYmxpc2hlZC4gVGhlIGNvcmUgaXNzdWUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgaW4gbGluZSAxODEwIHdoZXJlIHRoZSBjb2RlIHdhaXRzIGZvciB0aGUgc29ja2V0IHN0YXRlIChgc2stXHUwMDNlc2tfc3RhdGVgKSB0byBiZWNvbWUgYFRDUF9FU1RBQkxJU0hFRGAuIFRoZSBvcmlnaW5hbCBsb29wIG9ubHkgY2hlY2tlZCBmb3IgYFRDUF9FU1RBQkxJU0hFRGAsIGJ1dCB0aGUgcmVtb3RlIGVuZCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGR1cmluZyB0aGlzIHdhaXQgY291bGQgY2F1c2UgdGhlIHN0YXRlIHRvIHRyYW5zaXRpb24gdG8gYFRDUF9DTE9TSU5HYC4gVGhlIHByZXZpb3VzIGxvZ2ljIGhhZCBhIHBvdGVudGlhbCBmbGF3LCBhbGxvd2luZyBgVENQX0NMT1NJTkdgIHN0YXRlcyB0byBiZSBtaXNzZWQsIHJlc3VsdGluZyBpbiBhbiBlcnJvciBjaGVjayBhZnRlciB0aGUgbG9vcCB0aGF0IGNvdWxkIGdpdmUgYW4gaW5hY2N1cmF0ZSBlcnJvciBjb2RlLlxuXG5UaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBgVENQX0NMT1NJTkdgIHdpdGhpbiB0aGUgbG9vcCBjb25kaXRpb24sIHByZXZlbnRpbmcgdGhlIGNvbm5lY3Rpb24gZnJvbSBzdGFsbGluZyBpbiB0aGUgZXZlbnQgb2YgYSByZW1vdGUgY2xvc3VyZSBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciBtZSwgZ2l2ZW4gbXkgZXhwZXJ0aXNlLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIHN5c3RlbWF0aWNhbGx5IGdvIHRocm91Z2ggdGhlIGNoZWNrcy5cblxuRmlyc3QsIEknbSBjaGVja2luZyBpZiB0aGlzIHBhdGNoIGFmZmVjdHMgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBOby4gVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaW50ZXJuYWwgc29ja2V0IHN0YXRlIHRyYW5zaXRpb25zLCBpdCBkb2Vzbid0IHRvdWNoIGFueSBkYXRhIHRyYW5zZmVycmVkIHRvIHVzZXIgc3BhY2UuXG5cbk5leHQsIEknbSB2ZXJpZnlpbmcgaWYgdGhlcmUncyBhbnkgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuIFRoZSBwYXRjaCBtYW5pcHVsYXRlcyB0aGUgYHNrLVx1MDAzZXNrX3N0YXRlYCwgd2hpY2ggaXMgYSB3ZWxsLWRlZmluZWQgZmllbGQgd2l0aGluIHRoZSBgc3RydWN0IHNvY2tgIHN0cnVjdHVyZS4gU28sIG5vLCB0aGVyZSBhcmUgbm8gY29uY2VybnMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC5cblxuVGhpcmQsIEknbSBldmFsdWF0aW5nIHdoZXRoZXIgdGhlIHBhdGNoIGFsbG9jYXRlcyBvciBpbml0aWFsaXplcyBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIGxhdGVyIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBjcmVhdGVkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgY2hhbmdlLlxuXG5GaW5hbGx5LCBJJ20gY2hlY2tpbmcgaWYgaXQgYWx0ZXJzIGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gVGhpcyBwYXRjaCBkb2Vzbid0IGludm9sdmUgYW55IGJ1ZmZlcnMgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucywgc28gdGhpcyBpc24ndCBhIGNvbmNlcm4gZWl0aGVyLlxuXG5JbiBzaG9ydCwgdGhpcyBwYXRjaCAqb25seSogbW9kaWZpZXMgdGhlIHNvY2tldCBzdGF0ZSBtYWNoaW5lIGZsb3cgd2l0aGluIGB2c29ja19jb25uZWN0KClgLiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHN0YXRlIGluY29uc2lzdGVuY3ksIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcvbG9ja2RlcC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGluZm9ybWF0aW9uIGxlYWsgcmlzay5cblxuKipLTVNBTlJlYXNvbmluZzoqKiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBzdGF0ZSBjaGVja2luZyBjb25kaXRpb24gKGBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0lOR2ApIHdpdGhpbiB0aGUgY29ubmVjdGlvbiBsb29wIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGB2c29ja19jb25uZWN0KClgLiBJdCBkb2Vzbid0IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBjb3B5IHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGludHJvZHVjZSBhbnkgaW5zdGFuY2VzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBjb3VsZCBvY2N1ci4gQW55IGlzc3VlcyB3aXRoIGNvbmN1cnJlbmN5IG9yIHNvY2tldCBzdGF0ZSBhcmUgZWl0aGVyIGxvZ2ljYWwgb3IgcmVsYXRlZCB0byBvYmplY3QgbGlmZWN5Y2xlcywgYW5kIHRoZXNlIGFyZSBoYW5kbGVkIGJ5IHRoZSBzdGFuZGFyZCBkZXRlY3Rpb24gbWVjaGFuaXNtcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cbioqTmVlZHNLTVNBTiA9IGZhbHNlKipcblxuXG4iLCJJbnB1dFRva2VucyI6NTEwMSwiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozNDowMC4xMDg4MTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN0YXRlIG1hY2hpbmUgaGFuZGxpbmcgaW4gdnNvY2tfY29ubmVjdCgpIGJ5IHRyZWF0aW5nIFRDUF9DTE9TSU5HIHNpbWlsYXJseSB0byBUQ1BfRVNUQUJMSVNIRUQgd2hlbiBjaGVja2luZyBzay1cXHUwMDNlc2tfc3RhdGUgdXBvbiB3YWtpbmcgZnJvbSBjb25uZWN0aW9uIHdhaXQgYW5kIGVycm9yIGhhbmRsaW5nLiBUaGlzIGNoYW5nZSBhZmZlY3RzIHNvY2tldCBjb250cm9sIGZsb3cgYW5kIHN0YXRlIHRyYW5zaXRpb25zIG9ubHkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgYnVmZmVyIGNvcHlpbmcgb3Igc2l6aW5nLCB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzL3BhZGRpbmcgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzdGF0ZSBtYWNoaW5lIGhhbmRsaW5nIGluIHZzb2NrX2Nvbm5lY3QoKSBieSB0cmVhdGluZyBUQ1BfQ0xPU0lORyBzaW1pbGFybHkgdG8gVENQX0VTVEFCTElTSEVEIHdoZW4gY2hlY2tpbmcgc2stXFx1MDAzZXNrX3N0YXRlIHVwb24gd2FraW5nIGZyb20gY29ubmVjdGlvbiB3YWl0IGFuZCBlcnJvciBoYW5kbGluZy4gVGhpcyBjaGFuZ2UgYWZmZWN0cyBzb2NrZXQgY29udHJvbCBmbG93IGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyBvbmx5LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGJ1ZmZlciBjb3B5aW5nIG9yIHNpemluZywgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcy9wYWRkaW5nIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflownccfq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 22:14:58 +0000 UTC FinishedAt: 2026-09-09 22:34:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VSOCKETS_LOOPBACK", "VIRTIO_VSOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VSOCKETS_LOOPBACK", "VIRTIO_VSOCKETS" ], "series_id": "4827e4c8-d504-4ed9-bcb7-4581f10229c5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vsock_connect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zzb2NrX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzdGF0ZSBtYWNoaW5lIGhhbmRsaW5nIGluIHZzb2NrX2Nvbm5lY3QoKSBieSB0cmVhdGluZyBUQ1BfQ0xPU0lORyBzaW1pbGFybHkgdG8gVENQX0VTVEFCTElTSEVEIHdoZW4gY2hlY2tpbmcgc2stXHUwMDNlc2tfc3RhdGUgdXBvbiB3YWtpbmcgZnJvbSBjb25uZWN0aW9uIHdhaXQgYW5kIGVycm9yIGhhbmRsaW5nLiBUaGlzIGNoYW5nZSBhZmZlY3RzIHNvY2tldCBjb250cm9sIGZsb3cgYW5kIHN0YXRlIHRyYW5zaXRpb25zIG9ubHkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgYnVmZmVyIGNvcHlpbmcgb3Igc2l6aW5nLCB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzL3BhZGRpbmcgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdnNvY2tfY29ubmVjdCgpIGluIG5ldC92bXdfdnNvY2svYWZfdnNvY2suYywgY2hhbmdpbmcgdGhlIHN0YXRlIHZhbGlkYXRpb24gbG9naWMgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgZXJyb3IgaGFuZGxpbmcgYnkgYWNjb21tb2RhdGluZyB0aGUgVENQX0NMT1NJTkcgc29ja2V0IHN0YXRlLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIEFGX1ZTT0NLIHNvY2tldCBsaWZlY3ljbGUgdHJhbnNpdGlvbnMgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MTdlZDQ3NjI5NTQwZTgyNzc4ZjA4MGE5ODY2NDFlNzcyNGU2MTYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAyMjozMzoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbmluZGV4IGY4NDA0OThiNThhZmIuLmVlYzVkZDZkYWViYjEgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuQEAgLTE4MzQsMjMgJiM0MzsxODM0LDIwIEBAIHN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbiBcdFx0dGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7XG4gXHRcdGxvY2tfc29jayhzayk7XG4gXG4tXHRcdC8qIENvbm5lY3Rpb24gZXN0YWJsaXNoZWQuIFdoYXRldmVyIGhhcHBlbnMgdG8gc29ja2V0IG9uY2Ugd2Vcbi1cdFx0ICogcmVsZWFzZSBpdCwgdGhhdCYjMzk7cyBub3QgY29ubmVjdCgpJiMzOTtzIGNvbmNlcm4uIE5vIG5lZWQgdG8gZ29cbiYjNDM7XHRcdC8qIENvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLiBXaGF0ZXZlciBoYXBwZW5zIHRvIHNvY2tldCBvbmNlXG4mIzQzO1x0XHQgKiB3ZSByZWxlYXNlIGl0LCB0aGF0JiMzOTtzIG5vdCBjb25uZWN0KCkmIzM5O3MgY29uY2Vybi4gTm8gbmVlZCB0byBnb1xuIFx0XHQgKiBpbnRvIHNpZ25hbCBhbmQgdGltZW91dCBoYW5kbGluZy4gQ2FsbCBpdCBhIGRheS5cbiBcdFx0ICpcbiBcdFx0ICogTm90ZSB0aGF0IGFsbG93aW5nIHRvIFwmIzM0O3Jlc2V0XCYjMzQ7IGFuIGFscmVhZHkgZXN0YWJsaXNoZWQgc29ja2V0XG4gXHRcdCAqIGhlcmUgaXMgcmFjeSBhbmQgaW5zZWN1cmUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEKVxuJiM0MztcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCB8fFxuJiM0MztcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TSU5HKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHQvKiBJZiBjb25uZWN0aW9uIHdhcyBfbm90XyBlc3RhYmxpc2hlZCBhbmQgYSBzaWduYWwvdGltZW91dCBjYW1lXG4gXHRcdCAqIHRvIGJlLCB3ZSB3YW50IHRoZSBzb2NrZXQmIzM5O3Mgc3RhdGUgcmVzZXQuIFVzZXIgc3BhY2UgbWF5IHdhbnRcbiBcdFx0ICogdG8gcmV0cnkuXG4tXHRcdCAqXG4tXHRcdCAqIHNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCBpbXBsaWVzIHRoYXQgc29ja2V0IGlzIG5vdCBvblxuLVx0XHQgKiB2c29ja19jb25uZWN0ZWRfdGFibGUuIFdlIGtlZXAgdGhlIGJpbmRpbmcgYW5kIHRoZSB0cmFuc3BvcnRcbi1cdFx0ICogYXNzaWduZWQuXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgfHwgdGltZW91dCA9PSAwKSB7XG4gXHRcdFx0ZXJyID0gdGltZW91dCA9PSAwID8gLUVUSU1FRE9VVCA6IHNvY2tfaW50cl9lcnJubyh0aW1lb3V0KTtcbkBAIC0xODc1LDcgJiM0MzsxODcyLDggQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuIFx0fVxuIFxuIFx0ZXJyID0gc29ja19lcnJvcihzayk7XG4tXHRpZiAoZXJyKSB7XG4mIzQzO1x0aWYgKGVyciBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0lORykge1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcbiBcdFx0c29jay1cdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zzb2NrX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdnNvY2tfY29ubmVjdCgpIGluIG5ldC92bXdfdnNvY2svYWZfdnNvY2suYywgY2hhbmdpbmcgdGhlIHN0YXRlIHZhbGlkYXRpb24gbG9naWMgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgZXJyb3IgaGFuZGxpbmcgYnkgYWNjb21tb2RhdGluZyB0aGUgVENQX0NMT1NJTkcgc29ja2V0IHN0YXRlLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIEFGX1ZTT0NLIHNvY2tldCBsaWZlY3ljbGUgdHJhbnNpdGlvbnMgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MTdlZDQ3NjI5NTQwZTgyNzc4ZjA4MGE5ODY2NDFlNzcyNGU2MTYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAyMjozMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwppbmRleCBmODQwNDk4YjU4YWZiLi5lZWM1ZGQ2ZGFlYmIxIDEwMDY0NAotLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCkBAIC0xODM0LDIzICYjNDM7MTgzNCwyMCBAQCBzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsCiAJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwogCQlsb2NrX3NvY2soc2spOwogCi0JCS8qIENvbm5lY3Rpb24gZXN0YWJsaXNoZWQuIFdoYXRldmVyIGhhcHBlbnMgdG8gc29ja2V0IG9uY2Ugd2UKLQkJICogcmVsZWFzZSBpdCwgdGhhdCYjMzk7cyBub3QgY29ubmVjdCgpJiMzOTtzIGNvbmNlcm4uIE5vIG5lZWQgdG8gZ28KJiM0MzsJCS8qIENvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLiBXaGF0ZXZlciBoYXBwZW5zIHRvIHNvY2tldCBvbmNlCiYjNDM7CQkgKiB3ZSByZWxlYXNlIGl0LCB0aGF0JiMzOTtzIG5vdCBjb25uZWN0KCkmIzM5O3MgY29uY2Vybi4gTm8gbmVlZCB0byBnbwogCQkgKiBpbnRvIHNpZ25hbCBhbmQgdGltZW91dCBoYW5kbGluZy4gQ2FsbCBpdCBhIGRheS4KIAkJICoKIAkJICogTm90ZSB0aGF0IGFsbG93aW5nIHRvICYjMzQ7cmVzZXQmIzM0OyBhbiBhbHJlYWR5IGVzdGFibGlzaGVkIHNvY2tldAogCQkgKiBoZXJlIGlzIHJhY3kgYW5kIGluc2VjdXJlLgogCQkgKi8KLQkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpCiYjNDM7CQlpZiAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCB8fAomIzQzOwkJICAgIHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0lORykKIAkJCWJyZWFrOwogCiAJCS8qIElmIGNvbm5lY3Rpb24gd2FzIF9ub3RfIGVzdGFibGlzaGVkIGFuZCBhIHNpZ25hbC90aW1lb3V0IGNhbWUKIAkJICogdG8gYmUsIHdlIHdhbnQgdGhlIHNvY2tldCYjMzk7cyBzdGF0ZSByZXNldC4gVXNlciBzcGFjZSBtYXkgd2FudAogCQkgKiB0byByZXRyeS4KLQkJICoKLQkJICogc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIGltcGxpZXMgdGhhdCBzb2NrZXQgaXMgbm90IG9uCi0JCSAqIHZzb2NrX2Nvbm5lY3RlZF90YWJsZS4gV2Uga2VlcCB0aGUgYmluZGluZyBhbmQgdGhlIHRyYW5zcG9ydAotCQkgKiBhc3NpZ25lZC4KIAkJICovCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSB8fCB0aW1lb3V0ID09IDApIHsKIAkJCWVyciA9IHRpbWVvdXQgPT0gMCA/IC1FVElNRURPVVQgOiBzb2NrX2ludHJfZXJybm8odGltZW91dCk7CkBAIC0xODc1LDcgJiM0MzsxODcyLDggQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLAogCX0KIAogCWVyciA9IHNvY2tfZXJyb3Ioc2spOwotCWlmIChlcnIpIHsKJiM0MzsJaWYgKGVyciAmYW1wOyZhbXA7CiYjNDM7CSAgICBzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEICZhbXA7JmFtcDsgc2stJmd0O3NrX3N0YXRlICE9IFRDUF9DTE9TSU5HKSB7CiAJCXNrLSZndDtza19zdGF0ZSA9IFRDUF9DTE9TRTsKIAkJc29jay0mZ3Q7c3RhdGUgPSBTU19VTkNPTk5FQ1RFRDsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIHZzb2NrX2Nvbm5lY3QgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcyBwYXRjaC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgY29udGV4dCDigJMgc3BlY2lmaWNhbGx5IHRoZSBgbmV0L3Ztd192c29jay9hZl92c29jay5jYCBmaWxlIHdpdGhpbiB0aGUgYHZzb2NrX2Nvbm5lY3RgIGZ1bmN0aW9uLiBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgYSBwbGFuLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUsIHNvIEkmIzM5O2xsIHF1aWNrbHkgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBwcmVmZXJyZWQgbWV0aG9kIGhlcmUgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGxldmVyYWdpbmcgbXkgdG9vbHMuIEkmIzM5O2xsIHJlYWNoIGZvciBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgcXVpY2sgdmlzdWFsIG9mIHRoZSBmaWxlIGFyb3VuZCBsaW5lIDE4MzQsIG9yLCBpZiBJJiMzOTttIGZlZWxpbmcgbGF6eSwgSSYjMzk7bGwgZ28gd2l0aCBgZ3JlcHBlcmAsIHRvIHF1aWNrbHkgZmluZCB3aGVyZSBgdnNvY2tfY29ubmVjdGAgZXhpc3RzIGluIHJlbGF0aW9uIHRvIGxpbmUgMTgzNC4gT2YgY291cnNlLCBgZ2l0IGdyZXBgIGlzIGFsd2F5cyBhbiBvcHRpb24uIEkganVzdCBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN1cnJvdW5kaW5nIGxpbmVzLCBhbnkgcmVsZXZhbnQgY29tbWVudHMsIGFuZCBhbnkgcHJldmlvdXMgY29tbWl0IG1lc3NhZ2VzIHRoYXQgcmVsYXRlIHRvIHRoYXQgc3BlY2lmaWMgYXJlYS4gVGhpcyBjb250ZXh0IGlzIGNydWNpYWwgdG8gZm9ybWluZyBhbiBpbmZvcm1lZCBqdWRnbWVudCBvbiB0aGUgcGF0Y2gmIzM5O3MgbWVyaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MDA6XHRcdC8qIFRoZSByZWNlaXZlIHBhdGggd2lsbCBoYW5kbGUgYWxsIGNvbW11bmljYXRpb24gdW50aWwgd2UgYXJlIGFibGUgdG9cbjE4MDE6XHRcdCAqIGVudGVyIHRoZSBjb25uZWN0ZWQgc3RhdGUuICBIZXJlIHdlIHdhaXQgZm9yIHRoZSBjb25uZWN0aW9uIHRvIGJlXG4xODAyOlx0XHQgKiBjb21wbGV0ZWQgb3IgYSBub3RpZmljYXRpb24gb2YgYW4gZXJyb3IuXG4xODAzOlx0XHQgKi9cbjE4MDQ6XHRcdHRpbWVvdXQgPSB2c2stXHUwMDNlY29ubmVjdF90aW1lb3V0O1xuMTgwNTpcdFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbjE4MDY6XHRcbjE4MDc6XHRcdC8qIElmIHRoZSBzb2NrZXQgaXMgYWxyZWFkeSBjbG9zaW5nIG9yIGl0IGlzIGluIGFuIGVycm9yIHN0YXRlLCB0aGVyZVxuMTgwODpcdFx0ICogaXMgbm8gcG9pbnQgaW4gd2FpdGluZy5cbjE4MDk6XHRcdCAqL1xuMTgxMDpcdFx0d2hpbGUgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCBcdTAwMjZcdTAwMjZcbjE4MTE6XHRcdCAgICAgICBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0lORyBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfZXJyID09IDApIHtcbjE4MTI6XHRcdFx0aWYgKGZsYWdzIFx1MDAyNiBPX05PTkJMT0NLKSB7XG4xODEzOlx0XHRcdFx0LyogSWYgd2UmIzM5O3JlIG5vdCBnb2luZyB0byBibG9jaywgd2Ugc2NoZWR1bGUgYSB0aW1lb3V0XG4xODE0Olx0XHRcdFx0ICogZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSB0aW1lb3V0IG9uIHRoZSBjb25uZWN0aW9uXG4xODE1Olx0XHRcdFx0ICogYXR0ZW1wdCwgaW4gY2FzZSB0aGUgcGVlciBkb2VzbiYjMzk7dCByZXNwb25kIGluIGFcbjE4MTY6XHRcdFx0XHQgKiB0aW1lbHkgbWFubmVyLiBXZSBob2xkIG9uIHRvIHRoZSBzb2NrZXQgdW50aWwgdGhlXG4xODE3Olx0XHRcdFx0ICogdGltZW91dCBmaXJlcy5cbjE4MTg6XHRcdFx0XHQgKi9cbjE4MTk6XHRcdFx0XHRzb2NrX2hvbGQoc2spO1xuMTgyMDpcdFxuMTgyMTpcdFx0XHRcdC8qIElmIHRoZSB0aW1lb3V0IGZ1bmN0aW9uIGlzIGFscmVhZHkgc2NoZWR1bGVkLFxuMTgyMjpcdFx0XHRcdCAqIHJlc2NoZWR1bGUgaXQsIHRoZW4gdW5ncmFiIHRoZSBzb2NrZXQgcmVmY291bnQgdG9cbjE4MjM6XHRcdFx0XHQgKiBrZWVwIGl0IGJhbGFuY2VkLlxuMTgyNDpcdFx0XHRcdCAqL1xuMTgyNTpcdFx0XHRcdGlmIChtb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wZXJjcHVfd3EsIFx1MDAyNnZzay1cdTAwM2Vjb25uZWN0X3dvcmssXG4xODI2Olx0XHRcdFx0XHRcdCAgICAgdGltZW91dCkpXG4xODI3Olx0XHRcdFx0XHRzb2NrX3B1dChzayk7XG4xODI4Olx0XG4xODI5Olx0XHRcdFx0LyogU2tpcCBhaGVhZCB0byBwcmVzZXJ2ZSBlcnJvciBjb2RlIHNldCBhYm92ZS4gKi9cbjE4MzA6XHRcdFx0XHRnb3RvIG91dF93YWl0O1xuMTgzMTpcdFx0XHR9XG4xODMyOlx0XG4xODMzOlx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xODM0Olx0XHRcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xuMTgzNTpcdFx0XHRsb2NrX3NvY2soc2spO1xuMTgzNjpcdFxuMTgzNzpcdFx0XHQvKiBDb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZC4gV2hhdGV2ZXIgaGFwcGVucyB0byBzb2NrZXQgb25jZVxuMTgzODpcdFx0XHQgKiB3ZSByZWxlYXNlIGl0LCB0aGF0JiMzOTtzIG5vdCBjb25uZWN0KCkmIzM5O3MgY29uY2Vybi4gTm8gbmVlZCB0byBnb1xuMTgzOTpcdFx0XHQgKiBpbnRvIHNpZ25hbCBhbmQgdGltZW91dCBoYW5kbGluZy4gQ2FsbCBpdCBhIGRheS5cbjE4NDA6XHRcdFx0ICpcbjE4NDE6XHRcdFx0ICogTm90ZSB0aGF0IGFsbG93aW5nIHRvIFwmIzM0O3Jlc2V0XCYjMzQ7IGFuIGFscmVhZHkgZXN0YWJsaXNoZWQgc29ja2V0XG4xODQyOlx0XHRcdCAqIGhlcmUgaXMgcmFjeSBhbmQgaW5zZWN1cmUuXG4xODQzOlx0XHRcdCAqL1xuMTg0NDpcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEIHx8XG4xODQ1Olx0XHRcdCAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0lORylcbjE4NDY6XHRcdFx0XHRicmVhaztcbjE4NDc6XHRcbjE4NDg6XHRcdFx0LyogSWYgY29ubmVjdGlvbiB3YXMgX25vdF8gZXN0YWJsaXNoZWQgYW5kIGEgc2lnbmFsL3RpbWVvdXQgY2FtZVxuMTg0OTpcdFx0XHQgKiB0byBiZSwgd2Ugd2FudCB0aGUgc29ja2V0JiMzOTtzIHN0YXRlIHJlc2V0LiBVc2VyIHNwYWNlIG1heSB3YW50XG4xODUwOlx0XHRcdCAqIHRvIHJldHJ5LlxuMTg1MTpcdFx0XHQgKi9cbjE4NTI6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIHx8IHRpbWVvdXQgPT0gMCkge1xuMTg1MzpcdFx0XHRcdGVyciA9IHRpbWVvdXQgPT0gMCA/IC1FVElNRURPVVQgOiBzb2NrX2ludHJfZXJybm8odGltZW91dCk7XG4xODU0Olx0XG4xODU1Olx0XHRcdFx0LyogTGlzdGVuZXIgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlc3BvbmRlZCB3aXRoXG4xODU2Olx0XHRcdFx0ICogVklSVElPX1ZTT0NLX09QX1JFU1BPTlNFLiBJdHMgaGFuZGxpbmcgZXhwZWN0cyBvdXJcbjE4NTc6XHRcdFx0XHQgKiBza19zdGF0ZSA9PSBUQ1BfU1lOX1NFTlQsIHdoaWNoIGhlcmVieSB3ZSBicmVhay5cbjE4NTg6XHRcdFx0XHQgKiBJbiBzdWNoIGNhc2UgVklSVElPX1ZTT0NLX09QX1JTVCB3aWxsIGZvbGxvdy5cbjE4NTk6XHRcdFx0XHQgKi9cbjE4NjA6XHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcbjE4NjE6XHRcdFx0XHRzb2NrLVx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XG4xODYyOlx0XG4xODYzOlx0XHRcdFx0LyogVHJ5IHRvIGNhbmNlbCBWSVJUSU9fVlNPQ0tfT1BfUkVRVUVTVCBza2Igc2VudCBvdXQgYnlcbjE4NjQ6XHRcdFx0XHQgKiB0cmFuc3BvcnQtXHUwMDNlY29ubmVjdCgpLlxuMTg2NTpcdFx0XHRcdCAqL1xuMTg2NjpcdFx0XHRcdHZzb2NrX3RyYW5zcG9ydF9jYW5jZWxfcGt0KHZzayk7XG4xODY3Olx0XG4xODY4Olx0XHRcdFx0Z290byBvdXRfd2FpdDtcbjE4Njk6XHRcdFx0fVxuMTg3MDpcdFxuMTg3MTpcdFx0XHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xuMTg3MjpcdFx0fVxuMTg3MzpcdFxuMTg3NDpcdFx0ZXJyID0gc29ja19lcnJvcihzayk7XG4xODc1Olx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNlxuMTg3NjpcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NJTkcpIHtcbjE4Nzc6XHRcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBUQ1BfQ0xPU0U7XG4xODc4Olx0XHRcdHNvY2stXHUwMDNlc3RhdGUgPSBTU19VTkNPTk5FQ1RFRDtcbjE4Nzk6XHRcdH1cbjE4ODA6XHRcbjE4ODE6XHRvdXRfd2FpdDpcbjE4ODI6XHRcdGZpbmlzaF93YWl0KHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCk7XG4xODgzOlx0b3V0OlxuMTg4NDpcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbjE4ODU6XHRcdHJldHVybiBlcnI7XG4xODg2Olx0fVxuMTg4NzpcdFxuMTg4ODpcdHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4xODg5Olx0XHRcdFx0c3RydWN0IHByb3RvX2FjY2VwdF9hcmcgKmFyZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVlNPQ0sgRXhwbG9yYXRpb24qKgoKT2theSwgbGV0IG1lIGdldCB0aGlzIHN0cmFpZ2h0LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGB2c29ja19jb25uZWN0YCwgYW5kIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhbmRzY2FwZSwgdGhhdCBmdW5jdGlvbiBsaXZlcyB3aXRoaW4gYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIFZTT0NLLCB0aGUgQUZfVlNPQ0sgc29ja2V0IHByb3RvY29sIGZhbWlseSwgc29tZXRoaW5nIEkmIzM5O20gdmVyeSBmYW1pbGlhciB3aXRoLiBJdCYjMzk7cyBwcmFjdGljYWxseSB1YmlxdWl0b3VzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhpbmsgdnNvY2sgbG9vcGJhY2ssIHZpcnRpby12c29jaywgYW5kIGV2ZW4gdm1jaSwgaXQgYWxsIGxldmVyYWdlcyB0aGF0IGZyYW1ld29yay4gSSBjYW4mIzM5O3QgYmVsaWV2ZSBJIGRpZG4mIzM5O3QgaW1tZWRpYXRlbHkgY29uc2lkZXIgY2hlY2tpbmcgS2NvbmZpZyBmb3IgaW5mb3JtYXRpb24gb24gYGFmX3Zzb2NrLmNgLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIEkmIzM5O2xsIGdldCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtWU09DSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMDA5IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo2OmNvbmZpZyBWU09DS0VUU1xubmV0L3Ztd192c29jay9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0xOC1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzoxOTpjb25maWcgVlNPQ0tFVFNfRElBR1xubmV0L3Ztd192c29jay9LY29uZmlnLTIwLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MjE6XHRkZXBlbmRzIG9uIFZTT0NLRVRTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjItXHRkZWZhdWx0IHlcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yMy1cdGhlbHBcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyNDpcdCAgU3VwcG9ydCBmb3IgUEZfVlNPQ0sgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxubmV0L3Ztd192c29jay9LY29uZmlnLTI1LVx0ICBJZiB1bnN1cmUsIHNheSBZLlxuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yOC1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyOTpjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcJiMzNDtcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozMTpcdGRlcGVuZHMgb24gVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMi1cdGRlZmF1bHQgeVxubmV0L3Ztd192c29jay9LY29uZmlnOjMzOlx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zNC1cdGhlbHBcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNDAtXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NDE6Y29uZmlnIFZNV0FSRV9WTUNJX1ZTT0NLRVRTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtWTXdhcmUgVk1DSSB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1wmIzM0O1xubmV0L3Ztd192c29jay9LY29uZmlnOjQzOlx0ZGVwZW5kcyBvbiBWU09DS0VUUyBcdTAwMjZcdTAwMjYgVk1XQVJFX1ZNQ0lcbm5ldC92bXdfdnNvY2svS2NvbmZpZy00NC1cdGhlbHBcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTItXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NTM6Y29uZmlnIFZJUlRJT19WU09DS0VUU1xubmV0L3Ztd192c29jay9LY29uZmlnLTU0LVx0dHJpc3RhdGUgXCYjMzQ7dmlydGlvIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXCYjMzQ7XG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NTU6XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBWSVJUSU9cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo1NjpcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTctXHRoZWxwXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTY1LVxubmV0L3Ztd192c29jay9LY29uZmlnOjY2OmNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNjctXHR0cmlzdGF0ZVxuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy03Mi1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo3Mzpjb25maWcgSFlQRVJWX1ZTT0NLRVRTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNzQtXHR0cmlzdGF0ZSBcJiMzNDtIeXBlci1WIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXCYjMzQ7XG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NzU6XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBIWVBFUlZfVk1CVVNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03Ni1cdGhlbHBcbi0tXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxubmV0L3Ztd192c29jay9NYWtlZmlsZToyOm9iai0kKENPTkZJR19WU09DS0VUUykgJiM0Mzs9IHZzb2NrLm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MzpvYmotJChDT05GSUdfVlNPQ0tFVFNfRElBRykgJiM0Mzs9IHZzb2NrX2RpYWcub1xubmV0L3Ztd192c29jay9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19WTVdBUkVfVk1DSV9WU09DS0VUUykgJiM0Mzs9IHZtd192c29ja192bWNpX3RyYW5zcG9ydC5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1ZJUlRJT19WU09DS0VUUykgJiM0Mzs9IHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0Lm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTX0NPTU1PTikgJiM0Mzs9IHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0hZUEVSVl9WU09DS0VUUykgJiM0Mzs9IGh2X3NvY2sub1xubmV0L3Ztd192c29jay9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19WU09DS0VUU19MT09QQkFDSykgJiM0Mzs9IHZzb2NrX2xvb3BiYWNrLm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtOS1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTExLSAqICAgICAgICBnbG9iYWwgbmFtZXNwYWNlIHdpbGwgbm90IGJlIGFibGUgdG8gYWxsb2NhdGUgdGhlIHNhbWUgQ0lELlxubmV0L3Ztd192c29jay9hZl92c29jay5jOjExMjogKiAgICAgIC0gZ2xvYmFsIG1vZGUgQUZfVlNPQ0sgc29ja2V0cyBjYW4gcmVhY2ggYW55IFZNIG9yIHNvY2tldCBpbiBhbnkgZ2xvYmFsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTEzLSAqICAgICAgICBuYW1lc3BhY2UsIHRoZXkgYXJlIG5vdCBjb250YWluZWQgdG8gb25seSB0aGVpciBvd24gbmFtZXNwYWNlLlxubmV0L3Ztd192c29jay9hZl92c29jay5jOjExNDogKiAgICAgIC0gQUZfVlNPQ0sgc29ja2V0cyBpbiBhIGdsb2JhbCBtb2RlIG5hbWVzcGFjZSBjYW5ub3QgcmVhY2ggVk1zIG9yXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTE1LSAqICAgICAgICBzb2NrZXRzIGluIGFueSBsb2NhbCBtb2RlIG5hbWVzcGFjZS5cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTIzLSAqICAgICAgIGFsbG9jYXRpb24gaW4gYW55IG90aGVyIG5hbWVzcGFjZSwgYnV0IG5vdCBpbiB0aGUgc2FtZSBuYW1lc3BhY2UuXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTI0OiAqICAgICAtIEFGX1ZTT0NLIHNvY2tldHMgaW4gYSBsb2NhbCBtb2RlIG5hbWVzcGFjZSBjYW4gY29ubmVjdCBvbmx5IHRvIFZNcyBvclxubmV0L3Ztd192c29jay9hZl92c29jay5jLTEyNS0gKiAgICAgICBvdGhlciBzb2NrZXRzIHdpdGhpbiB0aGVpciBvd24gbmFtZXNwYWNlLlxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNjctXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTY4OiNkZWZpbmUgVlNPQ0tfTkVUX01PREVfU1RSX0dMT0JBTCBcJiMzNDtnbG9iYWxcJiMzNDtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNjk6I2RlZmluZSBWU09DS19ORVRfTU9ERV9TVFJfTE9DQUwgXCYjMzQ7bG9jYWxcJiMzNDtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNzAtXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE3My0gKi9cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNzQ6I2RlZmluZSBWU09DS19ORVRfTU9ERV9TVFJfTUFYIDhcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNzUtXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTE4Mj1zdHJ1Y3QgcHJvdG8gdnNvY2tfcHJvdG8gPSB7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTgzOlx0Lm5hbWUgPSBcJiMzNDtBRl9WU09DS1wmIzM0Oyxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xODQtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTk0LSAqL1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjE5NTojZGVmaW5lIFZTT0NLX0RFRkFVTFRfQ09OTkVDVF9USU1FT1VUICgyICogSFopXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTk2LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE5NzojZGVmaW5lIFZTT0NLX0RFRkFVTFRfQlVGRkVSX1NJWkUgICAgICgxMDI0ICogMjU2KVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE5ODojZGVmaW5lIFZTT0NLX0RFRkFVTFRfQlVGRkVSX01BWF9TSVpFICgxMDI0ICogMjU2KVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE5OTojZGVmaW5lIFZTT0NLX0RFRkFVTFRfQlVGRkVSX01JTl9TSVpFIDEyOFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIwMC1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjA5PXN0YXRpYyBERUZJTkVfTVVURVgodnNvY2tfcmVnaXN0ZXJfbXV0ZXgpO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMjEtICogU3BlY2lmaWNhbGx5LCB3ZSBpbml0aWFsaXplIHRoZSB2c29ja19iaW5kX3RhYmxlIGFycmF5IHRvIGEgc2l6ZSBvZlxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIyMjogKiBWU09DS19IQVNIX1NJWkUgJiM0MzsgMSBzbyB0aGF0IHZzb2NrX2JpbmRfdGFibGVbMF0gdGhyb3VnaFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIyMzogKiB2c29ja19iaW5kX3RhYmxlW1ZTT0NLX0hBU0hfU0laRSAtIDFdIGFyZSBmb3IgYm91bmQgc29ja2V0cyBhbmRcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMjQ6ICogdnNvY2tfYmluZF90YWJsZVtWU09DS19IQVNIX1NJWkVdIGlzIGZvciB1bmJvdW5kIHNvY2tldHMuICBUaGUgaGFzaCBmdW5jdGlvblxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIyNTogKiBtb2RzIHdpdGggVlNPQ0tfSEFTSF9TSVpFIHRvIGVuc3VyZSB0aGlzLlxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIyNi0gKi9cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjI4LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIyOTojZGVmaW5lIFZTT0NLX0hBU0goYWRkcikgICAgICAgICgoYWRkciktXHUwMDNlc3ZtX3BvcnQgJSBWU09DS19IQVNIX1NJWkUpXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjMwOiNkZWZpbmUgdnNvY2tfYm91bmRfc29ja2V0cyhhZGRyKSAoXHUwMDI2dnNvY2tfYmluZF90YWJsZVtWU09DS19IQVNIKGFkZHIpXSlcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzE6I2RlZmluZSB2c29ja191bmJvdW5kX3NvY2tldHMgICAgIChcdTAwMjZ2c29ja19iaW5kX3RhYmxlW1ZTT0NLX0hBU0hfU0laRV0pXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjMyLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzMy0vKiBYWFggVGhpcyBjYW4gcHJvYmFibHkgYmUgaW1wbGVtZW50ZWQgaW4gYSBiZXR0ZXIgd2F5LiAqL1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzNDojZGVmaW5lIFZTT0NLX0NPTk5fSEFTSChzcmMsIGRzdClcdFx0XHRcdFxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM1Olx0KCgoc3JjKS1cdTAwM2Vzdm1fY2lkIF4gKGRzdCktXHUwMDNlc3ZtX3BvcnQpICUgVlNPQ0tfSEFTSF9TSVpFKVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzNi0jZGVmaW5lIHZzb2NrX2Nvbm5lY3RlZF9zb2NrZXRzKHNyYywgZHN0KVx0XHRcXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzNzpcdChcdTAwMjZ2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfQ09OTl9IQVNIKHNyYywgZHN0KV0pXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjM4LSNkZWZpbmUgdnNvY2tfY29ubmVjdGVkX3NvY2tldHNfdnNrKHZzaylcdFx0XHRcdFxcXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0MC1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDE6c3RydWN0IGxpc3RfaGVhZCB2c29ja19iaW5kX3RhYmxlW1ZTT0NLX0hBU0hfU0laRSAmIzQzOyAxXTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNDItRVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfYmluZF90YWJsZSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQzOnN0cnVjdCBsaXN0X2hlYWQgdnNvY2tfY29ubmVjdGVkX3RhYmxlW1ZTT0NLX0hBU0hfU0laRV07XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQ0LUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSk7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTkzNj1zdGF0aWMgc3RydWN0IHNvY2sgKl9fdnNvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTQ2LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjk0NzpcdHNrID0gc2tfYWxsb2MobmV0LCBBRl9WU09DSywgcHJpb3JpdHksIFx1MDAyNnZzb2NrX3Byb3RvLCBrZXJuKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy05NDgtXHRpZiAoIXNrKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy05OTAtXHRcdHZzay1cdTAwM2Vvd25lciA9IGdldF9jdXJyZW50X2NyZWQoKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5OTE6XHRcdHZzay1cdTAwM2Vjb25uZWN0X3RpbWVvdXQgPSBWU09DS19ERUZBVUxUX0NPTk5FQ1RfVElNRU9VVDtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5OTI6XHRcdHZzay1cdTAwM2VidWZmZXJfc2l6ZSA9IFZTT0NLX0RFRkFVTFRfQlVGRkVSX1NJWkU7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTkzOlx0XHR2c2stXHUwMDNlYnVmZmVyX21pbl9zaXplID0gVlNPQ0tfREVGQVVMVF9CVUZGRVJfTUlOX1NJWkU7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTk0Olx0XHR2c2stXHUwMDNlYnVmZmVyX21heF9zaXplID0gVlNPQ0tfREVGQVVMVF9CVUZGRVJfTUFYX1NJWkU7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTk1LVx0fVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xNjUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX2RncmFtX29wcyA9IHtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNjU0Olx0LmZhbWlseSA9IFBGX1ZTT0NLLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE2NTUtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTcwND1zdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE4NTUtXHRcdFx0LyogTGlzdGVuZXIgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlc3BvbmRlZCB3aXRoXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTg1NjpcdFx0XHQgKiBWSVJUSU9fVlNPQ0tfT1BfUkVTUE9OU0UuIEl0cyBoYW5kbGluZyBleHBlY3RzIG91clxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE4NTctXHRcdFx0ICogc2tfc3RhdGUgPT0gVENQX1NZTl9TRU5ULCB3aGljaCBoZXJlYnkgd2UgYnJlYWsuXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTg1ODpcdFx0XHQgKiBJbiBzdWNoIGNhc2UgVklSVElPX1ZTT0NLX09QX1JTVCB3aWxsIGZvbGxvdy5cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xODU5LVx0XHRcdCAqL1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xODYyLVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE4NjM6XHRcdFx0LyogVHJ5IHRvIGNhbmNlbCBWSVJUSU9fVlNPQ0tfT1BfUkVRVUVTVCBza2Igc2VudCBvdXQgYnlcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xODY0LVx0XHRcdCAqIHRyYW5zcG9ydC1cdTAwM2Vjb25uZWN0KCkuXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTIwMTM9c3RhdGljIGludCB2c29ja19jb25uZWN0aWJsZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIwMjQtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjAyNTpcdGlmIChsZXZlbCAhPSBBRl9WU09DSyBcdTAwMjZcdTAwMjYgbGV2ZWwgIT0gU09MX1NPQ0tFVClcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMDI2LVx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTA2LVx0XHRcdFx0dnNrLVx1MDAzZWNvbm5lY3RfdGltZW91dCA9XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjEwNzpcdFx0XHRcdCAgICBWU09DS19ERUZBVUxUX0NPTk5FQ1RfVElNRU9VVDtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTA4LVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yMTI3PXN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdGlibGVfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTQzLVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIxNDQ6XHRpZiAobGV2ZWwgIT0gQUZfVlNPQ0spXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjE0NS1cdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjU0NT1fX3Zzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTU1LVx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI1NTY6XHRcdHJldHVybiBzb2NrX3JlY3ZfZXJycXVldWUoc2ssIG1zZywgbGVuLCBTT0xfVlNPQ0ssIFZTT0NLX1JFQ1ZFUlIpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI1NTctXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI2NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdnNvY2tfc3RyZWFtX29wcyA9IHtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjUzOlx0LmZhbWlseSA9IFBGX1ZTT0NLLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTQtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjY3ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB2c29ja19zZXFwYWNrZXRfb3BzID0ge1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NzU6XHQuZmFtaWx5ID0gUEZfVlNPQ0ssXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY3Ni1cdC5vd25lciA9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjk1PXN0YXRpYyBpbnQgdnNvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjcwNC1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNzA1Olx0aWYgKHByb3RvY29sIFx1MDAyNlx1MDAyNiBwcm90b2NvbCAhPSBQRl9WU09DSylcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNzA2LVx0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjc1MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgdnNvY2tfZmFtaWx5X29wcyA9IHtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNzUxOlx0LmZhbWlseSA9IEFGX1ZTT0NLLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI3NTItXHQuY3JlYXRlID0gdnNvY2tfY3JlYXRlLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yODEzPXN0YXRpYyBpbnQgX192c29ja19uZXRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjgxNy17XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjgxODpcdGNoYXIgZGF0YVtWU09DS19ORVRfTU9ERV9TVFJfTUFYXSA9IHswfTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODE5LVx0c3RydWN0IGN0bF90YWJsZSB0bXA7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4MzMtXHRcdHN3aXRjaCAobW9kZSkge1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4MzQ6XHRcdGNhc2UgVlNPQ0tfTkVUX01PREVfR0xPQkFMOlxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4MzU6XHRcdFx0cCA9IFZTT0NLX05FVF9NT0RFX1NUUl9HTE9CQUw7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjgzNi1cdFx0XHRicmVhaztcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODM3Olx0XHRjYXNlIFZTT0NLX05FVF9NT0RFX0xPQ0FMOlxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4Mzg6XHRcdFx0cCA9IFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTDtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODM5LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODU2LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4NTc6XHRpZiAoIXN0cm5jbXAoZGF0YSwgVlNPQ0tfTkVUX01PREVfU1RSX0dMT0JBTCwgc2l6ZW9mKGRhdGEpKSlcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODU4Olx0XHQqbmV3X21vZGUgPSBWU09DS19ORVRfTU9ERV9HTE9CQUw7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjg1OTpcdGVsc2UgaWYgKCFzdHJuY21wKGRhdGEsIFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTCwgc2l6ZW9mKGRhdGEpKSlcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODYwOlx0XHQqbmV3X21vZGUgPSBWU09DS19ORVRfTU9ERV9MT0NBTDtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODYxLVx0ZWxzZVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yODgxPXN0YXRpYyBpbnQgdnNvY2tfbmV0X2NoaWxkX21vZGVfc3RyaW5nKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4OTgtXHRcdCAqL1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4OTk6XHRcdGlmICh2c29ja19uZXRfbW9kZShuZXQpID09IFZTT0NLX05FVF9NT0RFX0xPQ0FMIFx1MDAyNlx1MDAyNlxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI5MDA6XHRcdCAgICBuZXdfbW9kZSA9PSBWU09DS19ORVRfTU9ERV9HTE9CQUwpXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkwMS1cdFx0XHRyZXR1cm4gLUVQRVJNO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yOTEwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZzb2NrX3RhYmxlW10gPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MTMtXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQudnNvY2subW9kZSxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTE0Olx0XHQubWF4bGVuXHRcdD0gVlNPQ0tfTkVUX01PREVfU1RSX01BWCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTE1LVx0XHQubW9kZVx0XHQ9IDA0NDQsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MjAtXHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQudnNvY2suY2hpbGRfbnNfbW9kZSxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTIxOlx0XHQubWF4bGVuXHRcdD0gVlNPQ0tfTkVUX01PREVfU1RSX01BWCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTIyLVx0XHQubW9kZVx0XHQ9IDA2NDQsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI5ODc9c3RhdGljIHZvaWQgdnNvY2tfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTg5LVx0aWYgKG5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSlcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTkwOlx0XHRuZXQtXHUwMDNldnNvY2subW9kZSA9IFZTT0NLX05FVF9NT0RFX0dMT0JBTDtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTkxLVx0ZWxzZVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zMDE5PXN0YXRpYyBpbnQgX19pbml0IHZzb2NrX2luaXQodm9pZClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA0MS1cdFx0cHJfZXJyKFwmIzM0O2NvdWxkIG5vdCByZWdpc3RlciBhZl92c29jayAoJWQpIGFkZHJlc3MgZmFtaWx5OiAlZFxcblwmIzM0Oyxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMDQyOlx0XHQgICAgICAgQUZfVlNPQ0ssIGVycik7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA0My1cdFx0Z290byBlcnJfdW5yZWdpc3Rlcl9wcm90bztcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA1NS1lcnJfdW5yZWdpc3Rlcl9zb2NrOlxubmV0L3Ztd192c29jay9hZl92c29jay5jOjMwNTY6XHRzb2NrX3VucmVnaXN0ZXIoQUZfVlNPQ0spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNTctZXJyX3VucmVnaXN0ZXJfcHJvdG86XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTMwNjU9c3RhdGljIHZvaWQgX19leGl0IHZzb2NrX2V4aXQodm9pZClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA2Ny1cdG1pc2NfZGVyZWdpc3RlcihcdTAwMjZ2c29ja19kZXZpY2UpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjMwNjg6XHRzb2NrX3VucmVnaXN0ZXIoQUZfVlNPQ0spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNjktXHRwcm90b191bnJlZ2lzdGVyKFx1MDAyNnZzb2NrX3Byb3RvKTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzA3OT1pbnQgdnNvY2tfY29yZV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0ICp0LCBpbnQgZmVhdHVyZXMpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwOTEtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzA5MjpcdGlmIChmZWF0dXJlcyBcdTAwMjYgVlNPQ0tfVFJBTlNQT1JUX0ZfSDJHKSB7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA5My1cdFx0aWYgKHRfaDJnKSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwOTktXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzEwMDpcdGlmIChmZWF0dXJlcyBcdTAwMjYgVlNPQ0tfVFJBTlNQT1JUX0ZfRzJIKSB7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzEwMS1cdFx0aWYgKHRfZzJoKSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMxMDctXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzEwODpcdGlmIChmZWF0dXJlcyBcdTAwMjYgVlNPQ0tfVFJBTlNQT1JUX0ZfREdSQU0pIHtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMTA5LVx0XHRpZiAodF9kZ3JhbSkge1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMTE1LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjMxMTY6XHRpZiAoZmVhdHVyZXMgXHUwMDI2IFZTT0NLX1RSQU5TUE9SVF9GX0xPQ0FMKSB7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzExNy1cdFx0aWYgKHRfbG9jYWwpIHtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrX3RhcC5jLTItLypcbm5ldC92bXdfdnNvY2svYWZfdnNvY2tfdGFwLmM6MzogKiBUYXAgZnVuY3Rpb25zIGZvciBBRl9WU09DSyBzb2NrZXRzLlxubmV0L3Ztd192c29jay9hZl92c29ja190YXAuYy00LSAqXG4tLVxubmV0L3Ztd192c29jay9hZl92c29ja190YXAuYz0xNz1pbnQgdnNvY2tfYWRkX3RhcChzdHJ1Y3QgdnNvY2tfdGFwICp2dClcbm5ldC92bXdfdnNvY2svYWZfdnNvY2tfdGFwLmMtMTgte1xubmV0L3Ztd192c29jay9hZl92c29ja190YXAuYzoxOTpcdGlmICh1bmxpa2VseSh2dC1cdTAwM2VkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfVlNPQ0tNT04pKVxubmV0L3Ztd192c29jay9hZl92c29ja190YXAuYy0yMC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3Ztd192c29jay9kaWFnLmM9MTQ9c3RhdGljIGludCBza19kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC92bXdfdnNvY2svZGlhZy5jLTI2LVx0cmVwID0gbmxtc2dfZGF0YShubGgpO1xubmV0L3Ztd192c29jay9kaWFnLmM6Mjc6XHRyZXAtXHUwMDNldmRpYWdfZmFtaWx5ID0gQUZfVlNPQ0s7XG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0yOC1cbi0tXG5uZXQvdm13X3Zzb2NrL2RpYWcuYz0xNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBzb2NrX2RpYWdfaGFuZGxlciB2c29ja19kaWFnX2hhbmRsZXIgPSB7XG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0xNjAtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbm5ldC92bXdfdnNvY2svZGlhZy5jOjE2MTpcdC5mYW1pbHkgPSBBRl9WU09DSyxcbm5ldC92bXdfdnNvY2svZGlhZy5jLTE2Mi1cdC5kdW1wID0gdnNvY2tfZGlhZ19oYW5kbGVyX2R1bXAsXG4tLVxubmV0L3Ztd192c29jay9kaWFnLmM9MTc5PU1PRFVMRV9BTElBU19ORVRfUEZfUFJPVE9fVFlQRShQRl9ORVRMSU5LLCBORVRMSU5LX1NPQ0tfRElBRyxcbm5ldC92bXdfdnNvY2svZGlhZy5jOjE4MDpcdFx0XHQgICAgICAgNDAgLyogQUZfVlNPQ0sgKi8pO1xuLS1cbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jPTk0PXN0cnVjdCBodnNvY2sge1xuLS1cbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jLTExMS1cbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jOjExMjovKiBJbiB0aGUgVk0sIHdlIHN1cHBvcnQgSHlwZXItViBTb2NrZXRzIHdpdGggQUZfVlNPQ0ssIGFuZCB0aGUgZW5kcG9pbnQgaXNcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jLTExMy0gKiBcdTAwM2NjaWQsIHBvcnRcdTAwM2UgKHNlZSBzdHJ1Y3Qgc29ja2FkZHJfdm0pLiBOb3RlOiBjaWQgaXMgbm90IHJlYWxseSB1c2VkIGhlcmU6XG4tLVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTM1LSAqXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYzoxMzY6ICogVG8gbWFrZSB1c2Ugb2YgdGhlIEFGX1ZTT0NLIGluZnJhc3RydWN0dXJlIGluIExpbnV4IFZNLCB3ZSBoYXZlIHRvIGxpbWl0XG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy0xMzctICogdGhlIGF2YWlsYWJsZSBHVUlEIHNwYWNlIG9mIFNPQ0tBRERSX0hWIHNvIHRoYXQgd2UgY2FuIGNyZWF0ZSBhIG1hcHBpbmdcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jOjEzODogKiBiZXR3ZWVuIEFGX1ZTT0NLIHBvcnQgYW5kIFNPQ0tBRERSX0hWIFNlcnZpY2UgR1VJRC4gVGhlIHJ1bGUgb2Ygd3JpdGluZ1xubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTM5LSAqIEh5cGVyLVYgU29ja2V0cyBhcHBzIG9uIHRoZSBob3N0IGFuZCBpbiBMaW51eCBWTSBpczpcbi0tXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYz05NjA9c3RhdGljIGludCBfX2luaXQgaHZzX2luaXQodm9pZClcbi0tXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy05NjctXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYzo5Njg6XHRyZXQgPSB2c29ja19jb3JlX3JlZ2lzdGVyKFx1MDAyNmh2c190cmFuc3BvcnQsIFZTT0NLX1RSQU5TUE9SVF9GX0cySCk7XG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy05NjktXHRpZiAocmV0KSB7XG4tLVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmM9OTg4PU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYzo5ODk6TU9EVUxFX0FMSUFTX05FVFBST1RPKFBGX1ZTT0NLKTtcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz0zMD1zdHJ1Y3QgdmlydGlvX3Zzb2NrIHtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTMxLVx0c3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXY7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzozMjpcdHN0cnVjdCB2aXJ0cXVldWUgKnZxc1tWU09DS19WUV9NQVhdO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzMtXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzgtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzozOTpcdC8qIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBwcm90ZWN0ZWQgYnkgdHhfbG9jay4gIHZxc1tWU09DS19WUV9UWF1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQwLVx0ICogbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIHR4X2xvY2sgaGVsZC5cbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy00OS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjUwOlx0LyogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHByb3RlY3RlZCBieSByeF9sb2NrLiAgdnFzW1ZTT0NLX1ZRX1JYXVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNTEtXHQgKiBtdXN0IGJlIGFjY2Vzc2VkIHdpdGggcnhfbG9jayBoZWxkLlxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTcyLVx0LyogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHByb3RlY3RlZCBieSBldmVudF9sb2NrLlxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NzM6XHQgKiB2cXNbVlNPQ0tfVlFfRVZFTlRdIG11c3QgYmUgYWNjZXNzZWQgd2l0aCBldmVudF9sb2NrIGhlbGQuXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03NC1cdCAqL1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTE1OD12aXJ0aW9fdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTE3MC1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjE3MTpcdHZxID0gdnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTE3Mi1cbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0xOTAtXHRcdGlmIChyZXBseSkge1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6MTkxOlx0XHRcdHN0cnVjdCB2aXJ0cXVldWUgKnJ4X3ZxID0gdnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTE5Mi1cdFx0XHRpbnQgdmFsO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTIxNz1zdGF0aWMgaW50IHZpcnRpb190cmFuc3BvcnRfc2VuZF9za2JfZmFzdF9wYXRoKHN0cnVjdCB2aXJ0aW9fdnNvY2sgKnZzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMjE4LXtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjIxOTpcdHN0cnVjdCB2aXJ0cXVldWUgKnZxID0gdnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTIyMC1cdGludCByZXQ7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9MjgwPXZpcnRpb190cmFuc3BvcnRfY2FuY2VsX3BrdChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTI5NC1cdGlmIChjbnQpIHtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjI5NTpcdFx0c3RydWN0IHZpcnRxdWV1ZSAqcnhfdnEgPSB2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfUlhdO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMjk2LVx0XHRpbnQgbmV3X2NudDtcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz0zMTE9c3RhdGljIHZvaWQgdmlydGlvX3Zzb2NrX3J4X2ZpbGwoc3RydWN0IHZpcnRpb192c29jayAqdnNvY2spXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0zMTIte1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6MzEzOlx0aW50IHRvdGFsX2xlbiA9IFZJUlRJT19WU09DS19ERUZBVUxUX1JYX0JVRl9TSVpFO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzE0LVx0c3RydWN0IHNjYXR0ZXJsaXN0IHBrdCwgKnA7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzE4LVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6MzE5Olx0dnEgPSB2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfUlhdO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzIwLVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTMyNS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjMyNjpcdFx0bWVtc2V0KHNrYi1cdTAwM2VoZWFkLCAwLCBWSVJUSU9fVlNPQ0tfU0tCX0hFQURST09NKTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTMyNy1cdFx0c2dfaW5pdF9vbmUoXHUwMDI2cGt0LCB2aXJ0aW9fdnNvY2tfaGRyKHNrYiksIHRvdGFsX2xlbik7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9MzQyPXN0YXRpYyB2b2lkIHZpcnRpb190cmFuc3BvcnRfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzUzLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6MzU0Olx0dnEgPSB2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzU1LVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTM3NT1zdGF0aWMgYm9vbCB2aXJ0aW9fdHJhbnNwb3J0X21vcmVfcmVwbGllcyhzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jaylcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTM3Ni17XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzozNzc6XHRzdHJ1Y3QgdmlydHF1ZXVlICp2cSA9IHZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF07XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0zNzgtXHRpbnQgdmFsO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTM4Nz1zdGF0aWMgaW50IHZpcnRpb192c29ja19ldmVudF9maWxsX29uZShzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jayxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0zOTItXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzozOTM6XHR2cSA9IHZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9FVkVOVF07XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0zOTQtXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9NDAxPXN0YXRpYyB2b2lkIHZpcnRpb192c29ja19ldmVudF9maWxsKHN0cnVjdCB2aXJ0aW9fdnNvY2sgKnZzb2NrKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQxMC1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjQxMTpcdHZpcnRxdWV1ZV9raWNrKHZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9FVkVOVF0pO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDEyLX1cbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz00Mzc9c3RhdGljIHZvaWQgdmlydGlvX3Zzb2NrX2V2ZW50X2hhbmRsZShzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jayxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy00NDAtXHRzd2l0Y2ggKGxlMzJfdG9fY3B1KGV2ZW50LVx1MDAzZWlkKSkge1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NDQxOlx0Y2FzZSBWSVJUSU9fVlNPQ0tfRVZFTlRfVFJBTlNQT1JUX1JFU0VUOlxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDQyLVx0XHR2aXJ0aW9fdnNvY2tfdXBkYXRlX2d1ZXN0X2NpZCh2c29jayk7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9NDQ5PXN0YXRpYyB2b2lkIHZpcnRpb190cmFuc3BvcnRfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDU5LVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NDYwOlx0dnEgPSB2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfRVZFTlRdO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDYxLVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQ3NC1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjQ3NTpcdHZpcnRxdWV1ZV9raWNrKHZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9FVkVOVF0pO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDc2LW91dDpcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz01MDc9c3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF9jYW5fbXNnemVyb2NvcHkoaW50IGJ1ZnNfbnVtKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTUxNS1cdGlmICh2c29jaykge1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NTE2Olx0XHRzdHJ1Y3QgdmlydHF1ZXVlICp2cSA9IHZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9UWF07XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy01MTctXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9NjMyPXN0YXRpYyB2b2lkIHZpcnRpb190cmFuc3BvcnRfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNjQyLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NjQzOlx0dnEgPSB2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfUlhdO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNjQ0LVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTY5OT1zdGF0aWMgaW50IHZpcnRpb192c29ja192cXNfaW5pdChzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jaylcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03MTUtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo3MTY6XHRyZXQgPSB2aXJ0aW9fZmluZF92cXModmRldiwgVlNPQ0tfVlFfTUFYLCB2c29jay1cdTAwM2V2cXMsIHZxc19pbmZvLCBOVUxMKTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTcxNy1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9NzU1PXN0YXRpYyB2b2lkIHZpcnRpb192c29ja192cXNfZGVsKHN0cnVjdCB2aXJ0aW9fdnNvY2sgKnZzb2NrKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTc4NC1cdG11dGV4X2xvY2soXHUwMDI2dnNvY2stXHUwMDNlcnhfbG9jayk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo3ODU6XHR3aGlsZSAoKHNrYiA9IHZpcnRxdWV1ZV9kZXRhY2hfdW51c2VkX2J1Zih2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfUlhdKSkpXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03ODYtXHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTc4OS1cdG11dGV4X2xvY2soXHUwMDI2dnNvY2stXHUwMDNldHhfbG9jayk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo3OTA6XHR3aGlsZSAoKHNrYiA9IHZpcnRxdWV1ZV9kZXRhY2hfdW51c2VkX2J1Zih2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdKSkpXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03OTEtXHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTgwMD1zdGF0aWMgaW50IHZpcnRpb192c29ja19wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldilcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy04MzQtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo4MzU6XHRpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19WU09DS19GX1NFUVBBQ0tFVCkpXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy04MzYtXHRcdHZzb2NrLVx1MDAzZXNlcXBhY2tldF9hbGxvdyA9IHRydWU7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9OTI5PXN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0ge1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6OTMwOlx0eyBWSVJUSU9fSURfVlNPQ0ssIFZJUlRJT19ERVZfQU5ZX0lEIH0sXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy05MzEtXHR7IDAgfSxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz05MzQ9c3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0ge1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6OTM1Olx0VklSVElPX1ZTT0NLX0ZfU0VRUEFDS0VUXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy05MzYtfTtcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz05NTE9c3RhdGljIGludCBfX2luaXQgdmlydGlvX3Zzb2NrX2luaXQodm9pZClcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy05NTktXHRyZXQgPSB2c29ja19jb3JlX3JlZ2lzdGVyKFx1MDAyNnZpcnRpb190cmFuc3BvcnQudHJhbnNwb3J0LFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6OTYwOlx0XHRcdFx0ICBWU09DS19UUkFOU1BPUlRfRl9HMkgpO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtOTYxLVx0aWYgKHJldClcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjMtLyogSG93IGxvbmcgdG8gd2FpdCBmb3IgZ3JhY2VmdWwgc2h1dGRvd24gb2YgYSBjb25uZWN0aW9uICovXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQ6I2RlZmluZSBWU09DS19DTE9TRV9USU1FT1VUICg4ICogSFopXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjUtXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTMzLSNkZWZpbmUgTUFYX0NPTExBUFNFX0xFTiBcXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjM0Olx0U0tCX01BWF9PUkRFUihWSVJUSU9fVlNPQ0tfU0tCX0hFQURST09NLCBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0zNS1cbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MTE5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmlydGlvX3RyYW5zcG9ydF9idWlsZF9za2Iodm9pZCAqb3BhcXVlKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNDYtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTQ3Olx0aGRyLVx1MDAzZXRyYW5zcG9ydCA9IGNwdV90b19sZTE2KEFGX1ZTT0NLX1RSQU5TUE9SVF9WSVJUSU8pO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE0OC1cdGhkci1cdTAwM2VsZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBrdF9oZHIpKTtcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTUxLVx0c3dpdGNoIChsZTE2X3RvX2NwdShwa3RfaGRyLVx1MDAzZW9wKSkge1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE1MjpcdGNhc2UgVklSVElPX1ZTT0NLX09QX1JFUVVFU1Q6XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTUzOlx0Y2FzZSBWSVJUSU9fVlNPQ0tfT1BfUkVTUE9OU0U6XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTU0Olx0XHRoZHItXHUwMDNlb3AgPSBjcHVfdG9fbGUxNihBRl9WU09DS19PUF9DT05ORUNUKTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNTUtXHRcdGJyZWFrO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE1NjpcdGNhc2UgVklSVElPX1ZTT0NLX09QX1JTVDpcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNTc6XHRjYXNlIFZJUlRJT19WU09DS19PUF9TSFVURE9XTjpcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNTg6XHRcdGhkci1cdTAwM2VvcCA9IGNwdV90b19sZTE2KEFGX1ZTT0NLX09QX0RJU0NPTk5FQ1QpO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE1OS1cdFx0YnJlYWs7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTYwOlx0Y2FzZSBWSVJUSU9fVlNPQ0tfT1BfUlc6XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTYxOlx0XHRoZHItXHUwMDNlb3AgPSBjcHVfdG9fbGUxNihBRl9WU09DS19PUF9QQVlMT0FEKTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNjItXHRcdGJyZWFrO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE2MzpcdGNhc2UgVklSVElPX1ZTT0NLX09QX0NSRURJVF9VUERBVEU6XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTY0Olx0Y2FzZSBWSVJUSU9fVlNPQ0tfT1BfQ1JFRElUX1JFUVVFU1Q6XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTY1Olx0XHRoZHItXHUwMDNlb3AgPSBjcHVfdG9fbGUxNihBRl9WU09DS19PUF9DT05UUk9MKTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNjYtXHRcdGJyZWFrO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE2Ny1cdGRlZmF1bHQ6XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTY4Olx0XHRoZHItXHUwMDNlb3AgPSBjcHVfdG9fbGUxNihBRl9WU09DS19PUF9VTktOT1dOKTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNjktXHRcdGJyZWFrO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODItXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTgzOlx0XHRpZiAoc2tiX2NvcHlfZGF0YWdyYW1faXRlcihwa3QsIFZJUlRJT19WU09DS19TS0JfQ0IocGt0KS1cdTAwM2VvZmZzZXQsXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTg0LVx0XHRcdFx0XHQgICBcdTAwMjZpb3ZfaXRlciwgcGF5bG9hZF9sZW4pKSB7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTIwMz1zdGF0aWMgdTE2IHZpcnRpb190cmFuc3BvcnRfZ2V0X3R5cGUoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMDUtXHRpZiAoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSlcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyMDY6XHRcdHJldHVybiBWSVJUSU9fVlNPQ0tfVFlQRV9TVFJFQU07XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjA3LVx0ZWxzZVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjIwODpcdFx0cmV0dXJuIFZJUlRJT19WU09DS19UWVBFX1NFUVBBQ0tFVDtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMDktfVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMjQtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjI1Olx0c2tiX2xlbiA9IFZJUlRJT19WU09DS19TS0JfSEVBRFJPT007XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjI2LVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDEtXHQgKiBzZXR0aW5nIHNrYiBvd25lciBpbiAmIzM5O3NrYl9zZXRfb3duZXJfdygpJiMzOTsuIFRoZSBvbmx5IGNhc2Vcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDI6XHQgKiB3aGVuICYjMzk7dnNrJiMzOTsgPT0gTlVMTCBpcyBWSVJUSU9fVlNPQ0tfT1BfUlNUIGNvbnRyb2wgbWVzc2FnZVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0My1cdCAqIHdpdGhvdXQgcGF5bG9hZC5cbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjY2LVx0XHRpZiAobXNnX2RhdGFfbGVmdChpbmZvLVx1MDAzZW1zZykgPT0gMCBcdTAwMjZcdTAwMjZcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNjc6XHRcdCAgICBpbmZvLVx1MDAzZXR5cGUgPT0gVklSVElPX1ZTT0NLX1RZUEVfU0VRUEFDS0VUKSB7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjY4LVx0XHRcdHN0cnVjdCB2aXJ0aW9fdnNvY2tfaGRyICpoZHIgPSB2aXJ0aW9fdnNvY2tfaGRyKHNrYik7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQzNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgdnNvY2tfY29ubmVjdCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIGltcGFjdGluZyBgbmV0L3Ztd192c29jay9hZl92c29jay5jYCwgc3BlY2lmaWNhbGx5IHdoZW4gYENPTkZJR19WU09DS0VUU2AgaXMgZW5hYmxlZC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIHdoYXQmIzM5O3MgY2hhbmdlZCwgYW5kIGhvdyBjcml0aWNhbCBpcyBpdD8KClRoZSBvbmx5IGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGB2c29ja19jb25uZWN0YC4gTGV0JiMzOTtzIHNlZSBob3cgYHZzb2NrX2Nvbm5lY3RgIGlzIGNhbGxlZC4gQWgsIHJpZ2h0LCBpbiBgYWZfdnNvY2suY2AgaXRzZWxmLiBUaGUgYHZzb2NrX3N0cmVhbV9vcHNgIGFuZCBgdnNvY2tfc2VxcGFja2V0X29wc2Agc3RydWN0dXJlcyBkZWZpbmUgYC5jb25uZWN0ID0gdnNvY2tfY29ubmVjdGAuIFNvLCBhIHVzZXItc3BhY2UgYGNvbm5lY3QoKWAgc3lzdGVtIGNhbGwgZXZlbnR1YWxseSBoaXRzIHRoaXMgZnVuY3Rpb24sIGFzIGV4cGVjdGVkLgoKTm93LCB3aGF0JiMzOTtzIHRoZSBwYXRjaCAqZG9pbmcqIGluIGB2c29ja19jb25uZWN0YD8gSSBzZWUgdHdvIHByaW1hcnkgY2hhbmdlczoKCjEuICBJdCYjMzk7cyBhbHRlcmluZyB0aGUgc3RhdGUgY2hlY2suIFRoZSBvcmlnaW5hbCBjb2RlIGJyb2tlIG91dCBvZiB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IGlmIHRoZSBzb2NrZXQgd2FzIGFscmVhZHkgYFRDUF9FU1RBQkxJU0hFRGAuIE5vdywgaXQgYWxzbyBicmVha3MgaWYgdGhlIHNvY2tldCBpcyBgVENQX0NMT1NJTkdgLiBIbW1tLCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBoYW5kbGUgYFRDUF9DTE9TSU5HYCBzdGF0ZXMgbW9yZSBncmFjZWZ1bGx5LgoyLiAgSXQmIzM5O3MgYWx0ZXJpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljLiBJdCB1c2VkIHRvIGNoZWNrIGZvciBhbiBlcnJvciBhbmQgdHJhbnNpdGlvbiB0byBgVENQX0NMT1NFYCBpZiB0aGVyZSB3YXMgb25lLiBOb3csIHRoZSB0cmFuc2l0aW9uIHRvIGBUQ1BfQ0xPU0VgIG9ubHkgaGFwcGVucyAqaWYqIHRoZXJlJiMzOTtzIGFuIGVycm9yICphbmQqIHRoZSBzb2NrZXQgaXNuJiMzOTt0IGFscmVhZHkgYFRDUF9FU1RBQkxJU0hFRGAgb3IgYFRDUF9DTE9TSU5HYC4gVGhpcyBpbXBsaWVzIHRoZXkmIzM5O3JlIHRyeWluZyB0byBwcmV2ZW50IHByZW1hdHVyZSBzb2NrZXQgY2xvc3VyZSBpbiBjZXJ0YWluIGNvbm5lY3Rpb24gc2NlbmFyaW9zLgoKU28sIHRoaXMgcGF0Y2ggY2hhbmdlcyBzb2NrZXQgc3RhdGUgdHJhbnNpdGlvbnMgd2l0aGluIGB2c29ja19jb25uZWN0YC4gR2l2ZW4gdGhhdCBBRl9WU09DSyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgYW5kIGl0JiMzOTtzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHdpdGggdmlydGlvLXZzb2NrIG9yIHZzb2NrX2xvb3BiYWNrLiBBbHNvLCBzaW5jZSBTeXprYWxsZXIgaXMgYWN0aXZlbHkgdGVzdGluZyB0aGlzIHdpdGggdmFyaW91cyBzb2NrZXQgY2FsbHMgaW5jbHVkaW5nIGBjb25uZWN0KClgLCB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIGNvcmUsIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGFmZmVjdCBzdGFiaWxpdHkgYW5kIGVycm9yIGhhbmRsaW5nLgoKVGhlcmVmb3JlLCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCAqKnRydWUqKiEKCk5vdywgZm9yIEZvY3VzU3ltYm9scywgYHZzb2NrX2Nvbm5lY3RgIGlzIHRoZSBrZXkuIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgbW9kaWZpZWQ/IEkgbmVlZCB0byBjaGVjayB0aGUgcmVzdCBvZiBgYWZfdnNvY2suY2AgYW5kIHJlbGF0ZWQgZmlsZXMsIGJ1dCB0aGUgcGF0Y2ggc2VlbXMgZm9jdXNlZCBzb2xlbHkgb24gYHZzb2NrX2Nvbm5lY3RgLiBOb3cgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjYWxsZXJzIGFyZSB3aXRoaW4gYGFmX3Zzb2NrLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjA5PXN0YXRpYyBERUZJTkVfTVVURVgodnNvY2tfcmVnaXN0ZXJfbXV0ZXgpO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMzUtXHQoKChzcmMpLVx1MDAzZXN2bV9jaWQgXiAoZHN0KS1cdTAwM2Vzdm1fcG9ydCkgJSBWU09DS19IQVNIX1NJWkUpXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM2OiNkZWZpbmUgdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoc3JjLCBkc3QpXHRcdFxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM3Olx0KFx1MDAyNnZzb2NrX2Nvbm5lY3RlZF90YWJsZVtWU09DS19DT05OX0hBU0goc3JjLCBkc3QpXSlcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzg6I2RlZmluZSB2c29ja19jb25uZWN0ZWRfc29ja2V0c192c2sodnNrKVx0XHRcdFx0XFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzk6XHR2c29ja19jb25uZWN0ZWRfc29ja2V0cyhcdTAwMjYodnNrKS1cdTAwM2VyZW1vdGVfYWRkciwgXHUwMDI2KHZzayktXHUwMDNlbG9jYWxfYWRkcilcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNDAtXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI0Mj1FWFBPUlRfU1lNQk9MX0dQTCh2c29ja19iaW5kX3RhYmxlKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDM6c3RydWN0IGxpc3RfaGVhZCB2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfSEFTSF9TSVpFXTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDQ6RVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfY29ubmVjdGVkX3RhYmxlKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNDUtREVGSU5FX1NQSU5MT0NLKHZzb2NrX3RhYmxlX2xvY2spO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjA9c3RhdGljIHZvaWQgdnNvY2tfaW5pdF90YWJsZXModm9pZClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY2LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2tfY29ubmVjdGVkX3RhYmxlKTsgaSYjNDM7JiM0MzspXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY4Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2c29ja19jb25uZWN0ZWRfdGFibGVbaV0pO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2OS19XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTMyMD1fX3Zzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICpzcmMsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMyNC1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMjU6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzaywgdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoc3JjLCBkc3QpLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMyNi1cdFx0XHQgICAgY29ubmVjdGVkX3RhYmxlKSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTM0Nj12b2lkIHZzb2NrX2luc2VydF9jb25uZWN0ZWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNDcte1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjM0ODpcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSB2c29ja19jb25uZWN0ZWRfc29ja2V0cyhcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zNDktXHRcdFx1MDAyNnZzay1cdTAwM2VyZW1vdGVfYWRkciwgXHUwMDI2dnNrLVx1MDAzZWxvY2FsX2FkZHIpO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz00ODM9dm9pZCB2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDg5LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ5MDpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2tfY29ubmVjdGVkX3RhYmxlKTsgaSYjNDM7JiM0MzspIHtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00OTEtXHRcdHN0cnVjdCB2c29ja19zb2NrICp2c2s7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6NDkyOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzaywgXHUwMDI2dnNvY2tfY29ubmVjdGVkX3RhYmxlW2ldLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTQ5My1cdFx0XHRcdCAgICBjb25uZWN0ZWRfdGFibGUpIHtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9NTk5PWludCB2c29ja19hc3NpZ25fdHJhbnNwb3J0KHN0cnVjdCB2c29ja19zb2NrICp2c2ssIHN0cnVjdCB2c29ja19zb2NrICpwc2spXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTY3Mi1cdFx0LyogdHJhbnNwb3J0LVx1MDAzZXJlbGVhc2UoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIHNvY2sgbG9jayBhY3F1aXJlZC5cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo2NzM6XHRcdCAqIFRoaXMgcGF0aCBjYW4gb25seSBiZSB0YWtlbiBkdXJpbmcgdnNvY2tfY29ubmVjdCgpLCB3aGVyZSB3ZVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTY3NC1cdFx0ICogaGF2ZSBhbHJlYWR5IGhlbGQgdGhlIHNvY2sgbG9jay4gSW4gdGhlIG90aGVyIGNhc2VzLCB0aGlzXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTY4Mi1cdFx0ICogc3RhdGUsIHNpbmNlIHdlIGFyZSByZWFzc2lnbmluZyB0aGUgc29ja2V0IHRvIGEgbmV3IHRyYW5zcG9ydFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjY4MzpcdFx0ICogZHVyaW5nIHZzb2NrX2Nvbm5lY3QoKSwgbGV0JiMzOTtzIHJlc2V0IHRoZXNlIGZpZWxkcyB0byBoYXZlIGFcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy02ODQtXHRcdCAqIGNsZWFuIHN0YXRlLlxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz04OTc9c3RhdGljIGludCBfX3Zzb2NrX2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTkzMy1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5MzQ6c3RhdGljIHZvaWQgdnNvY2tfY29ubmVjdF90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTM1LVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTkzNj1zdGF0aWMgc3RydWN0IHNvY2sgKl9fdnNvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTc1LVx0V1JJVEVfT05DRSh2c2stXHUwMDNlcGVlcl9zaHV0ZG93biwgMCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTc2Olx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2dnNrLVx1MDAzZWNvbm5lY3Rfd29yaywgdnNvY2tfY29ubmVjdF90aW1lb3V0KTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy05NzctXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZ2c2stXHUwMDNlcGVuZGluZ193b3JrLCB2c29ja19wZW5kaW5nX3dvcmspO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xMDkwPUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX3N0cmVhbV9oYXNfZGF0YSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTA5MS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxMDkyOnM2NCB2c29ja19jb25uZWN0aWJsZV9oYXNfZGF0YShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTEwOTMte1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMTAzLX1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxMTA0OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2Nvbm5lY3RpYmxlX2hhc19kYXRhKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMTA1LVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xNjcyPXN0YXRpYyBpbnQgdnNvY2tfdHJhbnNwb3J0X2NhbmNlbF9wa3Qoc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTY4MS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNjgyOnN0YXRpYyB2b2lkIHZzb2NrX2Nvbm5lY3RfdGltZW91dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTY4My17XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE3MDMtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTcwNDpzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTcwNS1cdFx0XHQgaW50IGFkZHJfbGVuLCBpbnQgZmxhZ3MpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTE5OTY9c3RhdGljIHZvaWQgdnNvY2tfdXBkYXRlX2J1ZmZlcl9zaXplKHN0cnVjdCB2c29ja19zb2NrICp2c2ssXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIwMTItXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjAxMzpzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3RpYmxlX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMDE0LVx0XHRcdFx0XHRpbnQgbGV2ZWwsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIxMjYtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjEyNzpzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3RpYmxlX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTI4LVx0XHRcdFx0XHRpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTg1LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIxODY6c3RhdGljIGludCB2c29ja19jb25uZWN0aWJsZV9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTg3LVx0XHRcdFx0ICAgICBzaXplX3QgbGVuKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMzQ3LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzNDg6c3RhdGljIGludCB2c29ja19jb25uZWN0aWJsZV93YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzNDktXHRcdFx0XHQgICAgICAgc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzNjQtXHRcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChzayksIHdhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM2NTpcdFx0ZGF0YSA9IHZzb2NrX2Nvbm5lY3RpYmxlX2hhc19kYXRhKHZzayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjM2Ni1cdFx0aWYgKGRhdGEgIT0gMClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjQxNT1zdGF0aWMgaW50IF9fdnNvY2tfc3RyZWFtX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0NTItXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ1MzpcdFx0ZXJyID0gdnNvY2tfY29ubmVjdGlibGVfd2FpdF9kYXRhKHNrLCBcdTAwMjZ3YWl0LCB0aW1lb3V0LFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0NTQtXHRcdFx0XHRcdFx0ICBcdTAwMjZyZWN2X2RhdGEsIHRhcmdldCk7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI0OTQ9c3RhdGljIGludCBfX3Zzb2NrX3NlcXBhY2tldF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTA4LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI1MDk6XHRlcnIgPSB2c29ja19jb25uZWN0aWJsZV93YWl0X2RhdGEoc2ssIFx1MDAyNndhaXQsIHRpbWVvdXQsIE5VTEwsIDApO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI1MTAtXHRpZiAoZXJyIFx1MDAzYz0gMClcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjU0ND1pbnRcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNTQ1Ol9fdnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjU0Ni1cdFx0XHQgICAgaW50IGZsYWdzKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjExPWludFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2MTI6dnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYxMy1cdFx0XHQgIGludCBmbGFncylcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYyMy1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjI0Olx0cmV0dXJuIF9fdnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyhzb2NrLCBtc2csIGxlbiwgZmxhZ3MpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MjUtfVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2MjY6RVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYyNy1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjY1Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB2c29ja19zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjU2LVx0LmJpbmQgPSB2c29ja19iaW5kLFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NTc6XHQuY29ubmVjdCA9IHZzb2NrX2Nvbm5lY3QsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY1OC1cdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjY0LVx0LnNodXRkb3duID0gdnNvY2tfc2h1dGRvd24sXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY2NTpcdC5zZXRzb2Nrb3B0ID0gdnNvY2tfY29ubmVjdGlibGVfc2V0c29ja29wdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjY2Olx0LmdldHNvY2tvcHRfaXRlciA9IHZzb2NrX2Nvbm5lY3RpYmxlX2dldHNvY2tvcHQsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY2NzpcdC5zZW5kbXNnID0gdnNvY2tfY29ubmVjdGlibGVfc2VuZG1zZyxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjY4Olx0LnJlY3Ztc2cgPSB2c29ja19jb25uZWN0aWJsZV9yZWN2bXNnLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NjktXHQubW1hcCA9IHNvY2tfbm9fbW1hcCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjY3ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB2c29ja19zZXFwYWNrZXRfb3BzID0ge1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjc4LVx0LmJpbmQgPSB2c29ja19iaW5kLFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2Nzk6XHQuY29ubmVjdCA9IHZzb2NrX2Nvbm5lY3QsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY4MC1cdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjg2LVx0LnNodXRkb3duID0gdnNvY2tfc2h1dGRvd24sXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY4NzpcdC5zZXRzb2Nrb3B0ID0gdnNvY2tfY29ubmVjdGlibGVfc2V0c29ja29wdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjg4Olx0LmdldHNvY2tvcHRfaXRlciA9IHZzb2NrX2Nvbm5lY3RpYmxlX2dldHNvY2tvcHQsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY4OTpcdC5zZW5kbXNnID0gdnNvY2tfY29ubmVjdGlibGVfc2VuZG1zZyxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjkwOlx0LnJlY3Ztc2cgPSB2c29ja19jb25uZWN0aWJsZV9yZWN2bXNnLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2OTEtXHQubW1hcCA9IHNvY2tfbm9fbW1hcCxcbi0tXG5uZXQvdm13X3Zzb2NrL2RpYWcuYz00OD1zdGF0aWMgaW50IHZzb2NrX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L3Ztd192c29jay9kaWFnLmMtMTAxLVx0LyogQ29ubmVjdGVkIHRhYmxlIChhY2NlcHRlZCBjb25uZWN0aW9ucykgKi9cbm5ldC92bXdfdnNvY2svZGlhZy5jOjEwMjpcdHdoaWxlIChidWNrZXQgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2tfY29ubmVjdGVkX3RhYmxlKSkge1xubmV0L3Ztd192c29jay9kaWFnLmM6MTAzOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gXHUwMDI2dnNvY2tfY29ubmVjdGVkX3RhYmxlW2J1Y2tldF07XG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0xMDQtXG4tLVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmM9MTkzPXN0YXRpYyBpbnQgaHZzX2NoYW5uZWxfcmVhZGFibGVfcGF5bG9hZChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbilcbi0tXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy0xOTgtXHRcdC8qIEF0IGxlYXN0IHdlIGhhdmUgMSBieXRlIHRvIHJlYWQuIFdlIGRvbiYjMzk7dCBuZWVkIHRvIHJldHVyblxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmM6MTk5Olx0XHQgKiB0aGUgZXhhY3QgcmVhZGFibGUgYnl0ZXM6IHNlZSB2c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKCkgLVx1MDAzZVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMjAwLVx0XHQgKiB2c29ja19zdHJlYW1faGFzX2RhdGEoKS5cbi0tXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2JwZi5jPTI1PXN0YXRpYyBib29sIHZzb2NrX2hhc19kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2JwZi5jLTI5LVxubmV0L3Ztd192c29jay92c29ja19icGYuYzozMDpcdHJldCA9IHZzb2NrX2Nvbm5lY3RpYmxlX2hhc19kYXRhKHZzayk7XG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2JwZi5jLTMxLVx0aWYgKHJldCBcdTAwM2UgMClcbi0tXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2JwZi5jPTYxPXN0YXRpYyBpbnQgX192c29ja19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG4tLVxubmV0L3Ztd192c29jay92c29ja19icGYuYy02Ni1cdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNIHx8IHNrLVx1MDAzZXNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2JwZi5jOjY3Olx0XHRlcnIgPSBfX3Zzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2coc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcbm5ldC92bXdfdnNvY2svdnNvY2tfYnBmLmMtNjgtXHRlbHNlIGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfREdSQU0pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5MjAKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBWU09DSyBDb25uZWN0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYHZzb2NrX2Nvbm5lY3RgIGFuZCBgdnNvY2tfY29ubmVjdF90aW1lb3V0YCBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgc2luY2UgdGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIGB2c29ja19jb25uZWN0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19WU09DS0VUU2AgaXMgZW5hYmxlZCwgYXMgdGhpcyBpcyB0aGUgcHJpbWFyeSBlbmFibGVyIGZvciBgYWZfdnNvY2suY2AuIEZ1cnRoZXJtb3JlLCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1ZTT0NLRVRTX0xPT1BCQUNLYCBvciBgQ09ORklHX1ZJUlRJT19WU09DS0VUU2AgYXJlIGFsc28gZW5hYmxlZCwgYXMgdGhlc2Ugb3B0aW9ucyBwcm92aWRlIHRoZSBzcGVjaWZpYyB0cmFuc3BvcnRzIHRoYXQgdXRpbGl6ZSBWU09DSy4gSW4gZXNzZW5jZSwgYFZTT0NLRVRTYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIGVuYWJsaW5nIHRoZSBjb3JlIGBhZl92c29jay5jYCBtb2R1bGUgdGhhdCBob3VzZXMgdGhlIGB2c29ja19jb25uZWN0YCBmdW5jdGlvbi4KCk5vdywgbGV0JiMzOTtzIHNvbGlkaWZ5IHRoZSB1bmRlcnN0YW5kaW5nLiBUaGUgcHJvdmlkZWQgY29udGV4dCBpbmRpY2F0ZXMgdGhpcyBpcyB3b3J0aCBmdXp6aW5nIGFuZCB0aGF0IHRoZSBpbXBvcnRhbnQgY29uZmlndXJhdGlvbnMgYXJlIHByZXNlbnQuIGBWU09DS0VUU2AsIGBWU09DS0VUU19MT09QQkFDS2AsIGFuZCBgVklSVElPX1ZTT0NLRVRTYCBhcmUgdGhlIHJlbGV2YW50IGVuYWJsaW5nIGNvbmZpZ3MuIFRoZSBgdnNvY2tfY29ubmVjdGAgZnVuY3Rpb24gaXMgdGhlIHRhcmdldGVkIHN5bWJvbC4KClRoZSByZWFzb25pbmcgcHJvdmlkZWQgY2xhcmlmaWVzIHRoZSBjb3JlIGltcGFjdDogVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIHNvY2tldCBzdGF0ZSBjaGVja3Mgd2l0aGluIGB2c29ja19jb25uZWN0YCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGhvdyB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2NlZWRzIGFuZCBob3cgc29ja2V0IGVycm9ycyBhcmUgaGFuZGxlZC4gVGhlIGNoYW5nZSBhdm9pZHMgYW4gdW53YW50ZWQgc3RhdGUgcmVzZXQgaW4gY2VydGFpbiBlcnJvciBjb25kaXRpb25zIHdoZW4gdGhlIHNvY2tldCBzdGF0ZSAoYHNrX3N0YXRlYCkgaXMgYFRDUF9DTE9TSU5HYC4gVGhpcyBjbGVhcmx5IGFmZmVjdHMgdGhlIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudCB3aXRoaW4gdGhlIEFGX1ZTT0NLIG5ldHdvcmsgYWRkcmVzcyBmYW1pbHkuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGlzc3VlLgoKRmluYWxseSwgaGF2aW5nIHZhbGlkYXRlZCB0aGUgYW5hbHlzaXMgYW5kIGNvbmZpcm1lZCB0aGUgY3JpdGljYWwgZWxlbWVudHMsIGl0JiMzOTtzIHRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fVlNPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2c29ja19jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHZzb2NrX2Nvbm5lY3QoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMsIGNoYW5naW5nIHRoZSBzdGF0ZSB2YWxpZGF0aW9uIGxvZ2ljIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIGJ5IGFjY29tbW9kYXRpbmcgdGhlIFRDUF9DTE9TSU5HIHNvY2tldCBzdGF0ZS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBBRl9WU09DSyBzb2NrZXQgbGlmZWN5Y2xlIHRyYW5zaXRpb25zIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fVlNPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2c29ja19jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHZzb2NrX2Nvbm5lY3QoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMsIGNoYW5naW5nIHRoZSBzdGF0ZSB2YWxpZGF0aW9uIGxvZ2ljIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIGJ5IGFjY29tbW9kYXRpbmcgdGhlIFRDUF9DTE9TSU5HIHNvY2tldCBzdGF0ZS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBBRl9WU09DSyBzb2NrZXQgbGlmZWN5Y2xlIHRyYW5zaXRpb25zIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3RhdGUgbWFjaGluZSBoYW5kbGluZyBpbiB2c29ja19jb25uZWN0KCkgYnkgdHJlYXRpbmcgVENQX0NMT1NJTkcgc2ltaWxhcmx5IHRvIFRDUF9FU1RBQkxJU0hFRCB3aGVuIGNoZWNraW5nIHNrLVx1MDAzZXNrX3N0YXRlIHVwb24gd2FraW5nIGZyb20gY29ubmVjdGlvbiB3YWl0IGFuZCBlcnJvciBoYW5kbGluZy4gVGhpcyBjaGFuZ2UgYWZmZWN0cyBzb2NrZXQgY29udHJvbCBmbG93IGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyBvbmx5LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGJ1ZmZlciBjb3B5aW5nIG9yIHNpemluZywgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcy9wYWRkaW5nIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MTdlZDQ3NjI5NTQwZTgyNzc4ZjA4MGE5ODY2NDFlNzcyNGU2MTYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAyMjozMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwppbmRleCBmODQwNDk4YjU4YWZiLi5lZWM1ZGQ2ZGFlYmIxIDEwMDY0NAotLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCkBAIC0xODM0LDIzICYjNDM7MTgzNCwyMCBAQCBzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsCiAJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwogCQlsb2NrX3NvY2soc2spOwogCi0JCS8qIENvbm5lY3Rpb24gZXN0YWJsaXNoZWQuIFdoYXRldmVyIGhhcHBlbnMgdG8gc29ja2V0IG9uY2Ugd2UKLQkJICogcmVsZWFzZSBpdCwgdGhhdCYjMzk7cyBub3QgY29ubmVjdCgpJiMzOTtzIGNvbmNlcm4uIE5vIG5lZWQgdG8gZ28KJiM0MzsJCS8qIENvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLiBXaGF0ZXZlciBoYXBwZW5zIHRvIHNvY2tldCBvbmNlCiYjNDM7CQkgKiB3ZSByZWxlYXNlIGl0LCB0aGF0JiMzOTtzIG5vdCBjb25uZWN0KCkmIzM5O3MgY29uY2Vybi4gTm8gbmVlZCB0byBnbwogCQkgKiBpbnRvIHNpZ25hbCBhbmQgdGltZW91dCBoYW5kbGluZy4gQ2FsbCBpdCBhIGRheS4KIAkJICoKIAkJICogTm90ZSB0aGF0IGFsbG93aW5nIHRvICYjMzQ7cmVzZXQmIzM0OyBhbiBhbHJlYWR5IGVzdGFibGlzaGVkIHNvY2tldAogCQkgKiBoZXJlIGlzIHJhY3kgYW5kIGluc2VjdXJlLgogCQkgKi8KLQkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpCiYjNDM7CQlpZiAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCB8fAomIzQzOwkJICAgIHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0lORykKIAkJCWJyZWFrOwogCiAJCS8qIElmIGNvbm5lY3Rpb24gd2FzIF9ub3RfIGVzdGFibGlzaGVkIGFuZCBhIHNpZ25hbC90aW1lb3V0IGNhbWUKIAkJICogdG8gYmUsIHdlIHdhbnQgdGhlIHNvY2tldCYjMzk7cyBzdGF0ZSByZXNldC4gVXNlciBzcGFjZSBtYXkgd2FudAogCQkgKiB0byByZXRyeS4KLQkJICoKLQkJICogc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIGltcGxpZXMgdGhhdCBzb2NrZXQgaXMgbm90IG9uCi0JCSAqIHZzb2NrX2Nvbm5lY3RlZF90YWJsZS4gV2Uga2VlcCB0aGUgYmluZGluZyBhbmQgdGhlIHRyYW5zcG9ydAotCQkgKiBhc3NpZ25lZC4KIAkJICovCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSB8fCB0aW1lb3V0ID09IDApIHsKIAkJCWVyciA9IHRpbWVvdXQgPT0gMCA/IC1FVElNRURPVVQgOiBzb2NrX2ludHJfZXJybm8odGltZW91dCk7CkBAIC0xODc1LDcgJiM0MzsxODcyLDggQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLAogCX0KIAogCWVyciA9IHNvY2tfZXJyb3Ioc2spOwotCWlmIChlcnIpIHsKJiM0MzsJaWYgKGVyciAmYW1wOyZhbXA7CiYjNDM7CSAgICBzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEICZhbXA7JmFtcDsgc2stJmd0O3NrX3N0YXRlICE9IFRDUF9DTE9TSU5HKSB7CiAJCXNrLSZndDtza19zdGF0ZSA9IFRDUF9DTE9TRTsKIAkJc29jay0mZ3Q7c3RhdGUgPSBTU19VTkNPTk5FQ1RFRDsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDcwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmVlZCBmb3IgRGVkaWNhdGVkIEtNU0FOIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBiZWluZyBhc2tlZCBpZiB0aGlzIGtlcm5lbCBwYXRjaCBpbiBgbmV0L3Ztd192c29jay9hZl92c29jay5jYCBuZWVkcyBzcGVjaWFsIEtNU0FOIGZ1enppbmcsIG9yIGlmIEtBU0FOIGFuZCBzdGFuZGFyZCBmdXp6aW5nIGFyZSBzdWZmaWNpZW50LiBSaWdodCwgbGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGRvZXMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW4gdGhlIGB2c29ja19jb25uZWN0YCBmdW5jdGlvbi4gVGhlIGNvZGUgYmxvY2sgYWRkcmVzc2VzIHNvbWUgZWRnZSBjYXNlcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHRpbWVvdXRzIGFuZCBzaWduYWxzIGR1cmluZyB0aGUgY29ubmVjdGlvbiBwcm9jZXNzLiBJdCBhcHBlYXJzIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBtaXNzaW5nIGEgc3RhdGUgY2hlY2suIFRoZXkmIzM5O3ZlIHVwZGF0ZWQgdGhpcyB0byBhbGxvdyBlc3RhYmxpc2hlZCBvciBjbG9zaW5nIHNvY2tldHMuIFRoZW4gd2Ugc2VlIGFuIGBlcnJgIGNoZWNrIGFuZCBhIHN0YXRlIHRyYW5zaXRpb24gYmFjayB0byBgVENQX0NMT1NFYC4gVGhlIGNvZGUgbm93IGF2b2lkcyB0aGUgc3RhdGUgY2hlY2sgd2hlbiB0aGUgc29ja2V0IGlzIGluIGFuIGVzdGFibGlzaGVkIG9yIGNsb3Npbmcgc3RhdGUuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHJlZmluaW5nIHRoZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGZsb3cuIFRoZXkgYXJlIGNvcnJlY3Rpbmcgc29ja2V0IHN0YXRlIGhhbmRsaW5nIGR1cmluZyBjb25uZWN0aW9uIHRpbWVvdXRzIGFuZCBpbnRlcnJ1cHRzLgoKTm93LCBjb25zaWRlcmluZyB0aGUgZmlsZSBwYXRoIGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgLCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGZvciB2c29jaywgd2hpY2ggaXMgYSB2aXJ0dWFsIHNvY2tldCBpbXBsZW1lbnRhdGlvbiB0eXBpY2FsbHkgdXNlZCBpbiB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudHMuIE5ldHdvcmtpbmcgY29kZSBpcyBvZnRlbiBhIHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIGl0IGlzIGNvbXBsZXgsIGFuZCBjYW4gYmUgc3ViamVjdCB0byBleHRlcm5hbCBpbnB1dCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHBsYWNlIHRvIHRyaWdnZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIFRoZSBjb2RlIGl0c2VsZiB0b3VjaGVzIG9uIHNvY2tldCBzdGF0ZXMgYW5kIGNvbm5lY3Rpb24gdGltZW91dHMsIHdoaWNoIGhpbnRzIGF0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGNvbmN1cnJlbmN5IHByb2JsZW1zLgoKU28sIGRvIHdlICpuZWVkKiBkZWRpY2F0ZWQgS01TQU4gZnV6emluZz8gTXkgZ3V0IHNheXMgJiMzNDtwcm9iYWJseSBub3QgKmp1c3QqIGZvciB0aGlzJiMzNDsuIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24mIzM5O3Qgc2NyZWFtICYjMzQ7S01TQU4gdnVsbmVyYWJpbGl0eSYjMzQ7IHRvIG1lLiBLQVNBTiBzaG91bGQgYmUgZW5vdWdoIGZvciBiYXNpYyBtZW1vcnkgc2FmZXR5IGNoZWNrcyBhbmQgZGV0ZWN0aW5nIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGlzc3VlcyBpbiB0aGlzIGFyZWEuIFdlIGNhbiB1c2Ugc3RhbmRhcmQgZnV6emluZyB0ZWNobmlxdWVzLiBUaGlzIGlzIGJlY2F1c2UgS0FTQU4gaXMgYWxyZWFkeSBlbmFibGVkLCBzbyB3ZSB3aWxsIGxpa2VseSBjYXRjaCBhbnkgY29tbW9uIG1lbW9yeSBlcnJvcnMgd2l0aG91dCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4gQnV0IEkgbmVlZCB0byBiZSBtb3JlIHRob3JvdWdoLCBzbyBJJiMzOTtsbCBhbHNvIGNvbnNpZGVyIHRoaXM6IGlmIHRoaXMgdnNvY2sgY29kZSBpcyBhIGNyaXRpY2FsIGNvbXBvbmVudCBvZiBhIGxhcmdlciBzeXN0ZW0sIHNheSBhIGh5cGVydmlzb3IsIG9yIGlmIHRoaXMgZnVuY3Rpb24gaXMgY29tbW9ubHkgY2FsbGVkIHdpdGggbWFueSBleHRlcm5hbCBpbnB1dHMsIGl0IG1heSBiZSB3b3J0aHdoaWxlIHRvIGludmVzdGlnYXRlIGZ1enppbmcgYW5kIEtNU0FOLiBLTVNBTiBpcyBtb3JlIHNwZWNpZmljIGZvciBrZXJuZWwgbWVtb3J5IHNhZmV0eS4gU28sIElmIEkgc2VlIHNvbWUgcG90ZW50aWFsIGhlcmUsIEkgY2FuIGFkZCBpdCB0byB0aGUgbGlzdC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IG1vcmUgYWJvdXQgdGhlIGJyb2FkZXIgc3lzdGVtIGNvbnRleHQgdG8gbWFrZSBhIGZpbmFsIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgwMDpcdFx0LyogVGhlIHJlY2VpdmUgcGF0aCB3aWxsIGhhbmRsZSBhbGwgY29tbXVuaWNhdGlvbiB1bnRpbCB3ZSBhcmUgYWJsZSB0b1xuMTgwMTpcdFx0ICogZW50ZXIgdGhlIGNvbm5lY3RlZCBzdGF0ZS4gIEhlcmUgd2Ugd2FpdCBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gYmVcbjE4MDI6XHRcdCAqIGNvbXBsZXRlZCBvciBhIG5vdGlmaWNhdGlvbiBvZiBhbiBlcnJvci5cbjE4MDM6XHRcdCAqL1xuMTgwNDpcdFx0dGltZW91dCA9IHZzay1cdTAwM2Vjb25uZWN0X3RpbWVvdXQ7XG4xODA1Olx0XHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xuMTgwNjpcdFxuMTgwNzpcdFx0LyogSWYgdGhlIHNvY2tldCBpcyBhbHJlYWR5IGNsb3Npbmcgb3IgaXQgaXMgaW4gYW4gZXJyb3Igc3RhdGUsIHRoZXJlXG4xODA4Olx0XHQgKiBpcyBubyBwb2ludCBpbiB3YWl0aW5nLlxuMTgwOTpcdFx0ICovXG4xODEwOlx0XHR3aGlsZSAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIFx1MDAyNlx1MDAyNlxuMTgxMTpcdFx0ICAgICAgIHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TSU5HIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19lcnIgPT0gMCkge1xuMTgxMjpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0spIHtcbjE4MTM6XHRcdFx0XHQvKiBJZiB3ZSYjMzk7cmUgbm90IGdvaW5nIHRvIGJsb2NrLCB3ZSBzY2hlZHVsZSBhIHRpbWVvdXRcbjE4MTQ6XHRcdFx0XHQgKiBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHRpbWVvdXQgb24gdGhlIGNvbm5lY3Rpb25cbjE4MTU6XHRcdFx0XHQgKiBhdHRlbXB0LCBpbiBjYXNlIHRoZSBwZWVyIGRvZXNuJiMzOTt0IHJlc3BvbmQgaW4gYVxuMTgxNjpcdFx0XHRcdCAqIHRpbWVseSBtYW5uZXIuIFdlIGhvbGQgb24gdG8gdGhlIHNvY2tldCB1bnRpbCB0aGVcbjE4MTc6XHRcdFx0XHQgKiB0aW1lb3V0IGZpcmVzLlxuMTgxODpcdFx0XHRcdCAqL1xuMTgxOTpcdFx0XHRcdHNvY2tfaG9sZChzayk7XG4xODIwOlx0XG4xODIxOlx0XHRcdFx0LyogSWYgdGhlIHRpbWVvdXQgZnVuY3Rpb24gaXMgYWxyZWFkeSBzY2hlZHVsZWQsXG4xODIyOlx0XHRcdFx0ICogcmVzY2hlZHVsZSBpdCwgdGhlbiB1bmdyYWIgdGhlIHNvY2tldCByZWZjb3VudCB0b1xuMTgyMzpcdFx0XHRcdCAqIGtlZXAgaXQgYmFsYW5jZWQuXG4xODI0Olx0XHRcdFx0ICovXG4xODI1Olx0XHRcdFx0aWYgKG1vZF9kZWxheWVkX3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgXHUwMDI2dnNrLVx1MDAzZWNvbm5lY3Rfd29yayxcbjE4MjY6XHRcdFx0XHRcdFx0ICAgICB0aW1lb3V0KSlcbjE4Mjc6XHRcdFx0XHRcdHNvY2tfcHV0KHNrKTtcbjE4Mjg6XHRcbjE4Mjk6XHRcdFx0XHQvKiBTa2lwIGFoZWFkIHRvIHByZXNlcnZlIGVycm9yIGNvZGUgc2V0IGFib3ZlLiAqL1xuMTgzMDpcdFx0XHRcdGdvdG8gb3V0X3dhaXQ7XG4xODMxOlx0XHRcdH1cbjE4MzI6XHRcbjE4MzM6XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbjE4MzQ6XHRcdFx0dGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7XG4xODM1Olx0XHRcdGxvY2tfc29jayhzayk7XG4xODM2Olx0XG4xODM3Olx0XHRcdC8qIENvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLiBXaGF0ZXZlciBoYXBwZW5zIHRvIHNvY2tldCBvbmNlXG4xODM4Olx0XHRcdCAqIHdlIHJlbGVhc2UgaXQsIHRoYXQmIzM5O3Mgbm90IGNvbm5lY3QoKSYjMzk7cyBjb25jZXJuLiBObyBuZWVkIHRvIGdvXG4xODM5Olx0XHRcdCAqIGludG8gc2lnbmFsIGFuZCB0aW1lb3V0IGhhbmRsaW5nLiBDYWxsIGl0IGEgZGF5LlxuMTg0MDpcdFx0XHQgKlxuMTg0MTpcdFx0XHQgKiBOb3RlIHRoYXQgYWxsb3dpbmcgdG8gXCYjMzQ7cmVzZXRcJiMzNDsgYW4gYWxyZWFkeSBlc3RhYmxpc2hlZCBzb2NrZXRcbjE4NDI6XHRcdFx0ICogaGVyZSBpcyByYWN5IGFuZCBpbnNlY3VyZS5cbjE4NDM6XHRcdFx0ICovXG4xODQ0Olx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQgfHxcbjE4NDU6XHRcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TSU5HKVxuMTg0NjpcdFx0XHRcdGJyZWFrO1xuMTg0NzpcdFxuMTg0ODpcdFx0XHQvKiBJZiBjb25uZWN0aW9uIHdhcyBfbm90XyBlc3RhYmxpc2hlZCBhbmQgYSBzaWduYWwvdGltZW91dCBjYW1lXG4xODQ5Olx0XHRcdCAqIHRvIGJlLCB3ZSB3YW50IHRoZSBzb2NrZXQmIzM5O3Mgc3RhdGUgcmVzZXQuIFVzZXIgc3BhY2UgbWF5IHdhbnRcbjE4NTA6XHRcdFx0ICogdG8gcmV0cnkuXG4xODUxOlx0XHRcdCAqL1xuMTg1MjpcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgfHwgdGltZW91dCA9PSAwKSB7XG4xODUzOlx0XHRcdFx0ZXJyID0gdGltZW91dCA9PSAwID8gLUVUSU1FRE9VVCA6IHNvY2tfaW50cl9lcnJubyh0aW1lb3V0KTtcbjE4NTQ6XHRcbjE4NTU6XHRcdFx0XHQvKiBMaXN0ZW5lciBtaWdodCBoYXZlIGFscmVhZHkgcmVzcG9uZGVkIHdpdGhcbjE4NTY6XHRcdFx0XHQgKiBWSVJUSU9fVlNPQ0tfT1BfUkVTUE9OU0UuIEl0cyBoYW5kbGluZyBleHBlY3RzIG91clxuMTg1NzpcdFx0XHRcdCAqIHNrX3N0YXRlID09IFRDUF9TWU5fU0VOVCwgd2hpY2ggaGVyZWJ5IHdlIGJyZWFrLlxuMTg1ODpcdFx0XHRcdCAqIEluIHN1Y2ggY2FzZSBWSVJUSU9fVlNPQ0tfT1BfUlNUIHdpbGwgZm9sbG93LlxuMTg1OTpcdFx0XHRcdCAqL1xuMTg2MDpcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gVENQX0NMT1NFO1xuMTg2MTpcdFx0XHRcdHNvY2stXHUwMDNlc3RhdGUgPSBTU19VTkNPTk5FQ1RFRDtcbjE4NjI6XHRcbjE4NjM6XHRcdFx0XHQvKiBUcnkgdG8gY2FuY2VsIFZJUlRJT19WU09DS19PUF9SRVFVRVNUIHNrYiBzZW50IG91dCBieVxuMTg2NDpcdFx0XHRcdCAqIHRyYW5zcG9ydC1cdTAwM2Vjb25uZWN0KCkuXG4xODY1Olx0XHRcdFx0ICovXG4xODY2Olx0XHRcdFx0dnNvY2tfdHJhbnNwb3J0X2NhbmNlbF9wa3QodnNrKTtcbjE4Njc6XHRcbjE4Njg6XHRcdFx0XHRnb3RvIG91dF93YWl0O1xuMTg2OTpcdFx0XHR9XG4xODcwOlx0XG4xODcxOlx0XHRcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChzayksIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG4xODcyOlx0XHR9XG4xODczOlx0XG4xODc0Olx0XHRlcnIgPSBzb2NrX2Vycm9yKHNrKTtcbjE4NzU6XHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2XG4xODc2Olx0XHQgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0lORykge1xuMTg3NzpcdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcbjE4Nzg6XHRcdFx0c29jay1cdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xuMTg3OTpcdFx0fVxuMTg4MDpcdFxuMTg4MTpcdG91dF93YWl0OlxuMTg4MjpcdFx0ZmluaXNoX3dhaXQoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0KTtcbjE4ODM6XHRvdXQ6XG4xODg0Olx0XHRyZWxlYXNlX3NvY2soc2spO1xuMTg4NTpcdFx0cmV0dXJuIGVycjtcbjE4ODY6XHR9XG4xODg3Olx0XG4xODg4Olx0c3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbjE4ODk6XHRcdFx0XHRzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxuMTg5MDpcdHtcbjE4OTE6XHRcdHN0cnVjdCBzb2NrICpsaXN0ZW5lcjtcbjE4OTI6XHRcdGludCBlcnI7XG4xODkzOlx0XHRzdHJ1Y3Qgc29jayAqY29ubmVjdGVkO1xuMTg5NDpcdFx0c3RydWN0IHZzb2NrX3NvY2sgKnZjb25uZWN0ZWQ7XG4xODk1Olx0XHRsb25nIHRpbWVvdXQ7XG4xODk2Olx0XHRERUZJTkVfV0FJVCh3YWl0KTtcbjE4OTc6XHRcbjE4OTg6XHRcdGVyciA9IDA7XG4xODk5Olx0XHRsaXN0ZW5lciA9IHNvY2stXHUwMDNlc2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMDEKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogNjk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIHZzb2NrX2Nvbm5lY3QgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGB2c29ja19jb25uZWN0YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHRoZSBzb2NrZXQgc3RhdGUgd2hpbGUgd2FpdGluZyBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gYmUgZXN0YWJsaXNoZWQuIFRoZSBjb3JlIGlzc3VlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGluIGxpbmUgMTgxMCB3aGVyZSB0aGUgY29kZSB3YWl0cyBmb3IgdGhlIHNvY2tldCBzdGF0ZSAoYHNrLSZndDtza19zdGF0ZWApIHRvIGJlY29tZSBgVENQX0VTVEFCTElTSEVEYC4gVGhlIG9yaWdpbmFsIGxvb3Agb25seSBjaGVja2VkIGZvciBgVENQX0VTVEFCTElTSEVEYCwgYnV0IHRoZSByZW1vdGUgZW5kIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gZHVyaW5nIHRoaXMgd2FpdCBjb3VsZCBjYXVzZSB0aGUgc3RhdGUgdG8gdHJhbnNpdGlvbiB0byBgVENQX0NMT1NJTkdgLiBUaGUgcHJldmlvdXMgbG9naWMgaGFkIGEgcG90ZW50aWFsIGZsYXcsIGFsbG93aW5nIGBUQ1BfQ0xPU0lOR2Agc3RhdGVzIHRvIGJlIG1pc3NlZCwgcmVzdWx0aW5nIGluIGFuIGVycm9yIGNoZWNrIGFmdGVyIHRoZSBsb29wIHRoYXQgY291bGQgZ2l2ZSBhbiBpbmFjY3VyYXRlIGVycm9yIGNvZGUuCgpUaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBgVENQX0NMT1NJTkdgIHdpdGhpbiB0aGUgbG9vcCBjb25kaXRpb24sIHByZXZlbnRpbmcgdGhlIGNvbm5lY3Rpb24gZnJvbSBzdGFsbGluZyBpbiB0aGUgZXZlbnQgb2YgYSByZW1vdGUgY2xvc3VyZSBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBmb3IgbWUsIGdpdmVuIG15IGV4cGVydGlzZSwgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3Mgc3lzdGVtYXRpY2FsbHkgZ28gdGhyb3VnaCB0aGUgY2hlY2tzLgoKRmlyc3QsIEkmIzM5O20gY2hlY2tpbmcgaWYgdGhpcyBwYXRjaCBhZmZlY3RzIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgZXhwb3NlZC4gTm8uIFRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGludGVybmFsIHNvY2tldCBzdGF0ZSB0cmFuc2l0aW9ucywgaXQgZG9lc24mIzM5O3QgdG91Y2ggYW55IGRhdGEgdHJhbnNmZXJyZWQgdG8gdXNlciBzcGFjZS4KCk5leHQsIEkmIzM5O20gdmVyaWZ5aW5nIGlmIHRoZXJlJiMzOTtzIGFueSBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy4gVGhlIHBhdGNoIG1hbmlwdWxhdGVzIHRoZSBgc2stJmd0O3NrX3N0YXRlYCwgd2hpY2ggaXMgYSB3ZWxsLWRlZmluZWQgZmllbGQgd2l0aGluIHRoZSBgc3RydWN0IHNvY2tgIHN0cnVjdHVyZS4gU28sIG5vLCB0aGVyZSBhcmUgbm8gY29uY2VybnMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC4KClRoaXJkLCBJJiMzOTttIGV2YWx1YXRpbmcgd2hldGhlciB0aGUgcGF0Y2ggYWxsb2NhdGVzIG9yIGluaXRpYWxpemVzIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gbGF0ZXIgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBmaWVsZHMuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNyZWF0ZWQgb3IgbW9kaWZpZWQgYnkgdGhpcyBjaGFuZ2UuCgpGaW5hbGx5LCBJJiMzOTttIGNoZWNraW5nIGlmIGl0IGFsdGVycyBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCB3b3VsZCBhbGxvdyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgYnVmZmVycyBvciBsZW5ndGggY2FsY3VsYXRpb25zLCBzbyB0aGlzIGlzbiYjMzk7dCBhIGNvbmNlcm4gZWl0aGVyLgoKSW4gc2hvcnQsIHRoaXMgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIHRoZSBzb2NrZXQgc3RhdGUgbWFjaGluZSBmbG93IHdpdGhpbiBgdnNvY2tfY29ubmVjdCgpYC4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gc3RhdGUgaW5jb25zaXN0ZW5jeSwgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgdGVzdGluZy9sb2NrZGVwLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgaW5mb3JtYXRpb24gbGVhayByaXNrLgoKKipLTVNBTlJlYXNvbmluZzoqKiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBzdGF0ZSBjaGVja2luZyBjb25kaXRpb24gKGBzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0NMT1NJTkdgKSB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gbG9vcCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgdnNvY2tfY29ubmVjdCgpYC4gSXQgZG9lc24mIzM5O3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGNvcHkgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgaW50cm9kdWNlIGFueSBpbnN0YW5jZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGNvdWxkIG9jY3VyLiBBbnkgaXNzdWVzIHdpdGggY29uY3VycmVuY3kgb3Igc29ja2V0IHN0YXRlIGFyZSBlaXRoZXIgbG9naWNhbCBvciByZWxhdGVkIHRvIG9iamVjdCBsaWZlY3ljbGVzLCBhbmQgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdGhlIHN0YW5kYXJkIGRldGVjdGlvbiBtZWNoYW5pc21zLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLgoqKk5lZWRzS01TQU4gPSBmYWxzZSoqCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN0YXRlIG1hY2hpbmUgaGFuZGxpbmcgaW4gdnNvY2tfY29ubmVjdCgpIGJ5IHRyZWF0aW5nIFRDUF9DTE9TSU5HIHNpbWlsYXJseSB0byBUQ1BfRVNUQUJMSVNIRUQgd2hlbiBjaGVja2luZyBzay1cdTAwM2Vza19zdGF0ZSB1cG9uIHdha2luZyBmcm9tIGNvbm5lY3Rpb24gd2FpdCBhbmQgZXJyb3IgaGFuZGxpbmcuIFRoaXMgY2hhbmdlIGFmZmVjdHMgc29ja2V0IGNvbnRyb2wgZmxvdyBhbmQgc3RhdGUgdHJhbnNpdGlvbnMgb25seS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBidWZmZXIgY29weWluZyBvciBzaXppbmcsIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBleHBvc2Uga2VybmVsIHN0cnVjdHVyZXMvcGFkZGluZyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3RhdGUgbWFjaGluZSBoYW5kbGluZyBpbiB2c29ja19jb25uZWN0KCkgYnkgdHJlYXRpbmcgVENQX0NMT1NJTkcgc2ltaWxhcmx5IHRvIFRDUF9FU1RBQkxJU0hFRCB3aGVuIGNoZWNraW5nIHNrLVx1MDAzZXNrX3N0YXRlIHVwb24gd2FraW5nIGZyb20gY29ubmVjdGlvbiB3YWl0IGFuZCBlcnJvciBoYW5kbGluZy4gVGhpcyBjaGFuZ2UgYWZmZWN0cyBzb2NrZXQgY29udHJvbCBmbG93IGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyBvbmx5LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGJ1ZmZlciBjb3B5aW5nIG9yIHNpemluZywgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcy9wYWRkaW5nIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjMzOjIyLjI3MzI4MDg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc4MzU1NjEyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2c29ja19jb25uZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzdGF0ZSBtYWNoaW5lIGhhbmRsaW5nIGluIHZzb2NrX2Nvbm5lY3QoKSBieSB0cmVhdGluZyBUQ1BfQ0xPU0lORyBzaW1pbGFybHkgdG8gVENQX0VTVEFCTElTSEVEIHdoZW4gY2hlY2tpbmcgc2stXFx1MDAzZXNrX3N0YXRlIHVwb24gd2FraW5nIGZyb20gY29ubmVjdGlvbiB3YWl0IGFuZCBlcnJvciBoYW5kbGluZy4gVGhpcyBjaGFuZ2UgYWZmZWN0cyBzb2NrZXQgY29udHJvbCBmbG93IGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyBvbmx5LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGJ1ZmZlciBjb3B5aW5nIG9yIHNpemluZywgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcy9wYWRkaW5nIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdnNvY2tfY29ubmVjdCgpIGluIG5ldC92bXdfdnNvY2svYWZfdnNvY2suYywgY2hhbmdpbmcgdGhlIHN0YXRlIHZhbGlkYXRpb24gbG9naWMgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgZXJyb3IgaGFuZGxpbmcgYnkgYWNjb21tb2RhdGluZyB0aGUgVENQX0NMT1NJTkcgc29ja2V0IHN0YXRlLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIEFGX1ZTT0NLIHNvY2tldCBsaWZlY3ljbGUgdHJhbnNpdGlvbnMgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjMzOjIyLjI3MzI5MDA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg4MTY3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MTdlZDQ3NjI5NTQwZTgyNzc4ZjA4MGE5ODY2NDFlNzcyNGU2MTYxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMjI6MzM6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuaW5kZXggZjg0MDQ5OGI1OGFmYi4uZWVjNWRkNmRhZWJiMSAxMDA2NDRcXG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcXG4rKysgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcXG5AQCAtMTgzNCwyMyArMTgzNCwyMCBAQCBzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuIFxcdFxcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xcbiBcXHRcXHRsb2NrX3NvY2soc2spO1xcbiBcXG4tXFx0XFx0LyogQ29ubmVjdGlvbiBlc3RhYmxpc2hlZC4gV2hhdGV2ZXIgaGFwcGVucyB0byBzb2NrZXQgb25jZSB3ZVxcbi1cXHRcXHQgKiByZWxlYXNlIGl0LCB0aGF0J3Mgbm90IGNvbm5lY3QoKSdzIGNvbmNlcm4uIE5vIG5lZWQgdG8gZ29cXG4rXFx0XFx0LyogQ29ubmVjdGlvbiB3YXMgZXN0YWJsaXNoZWQuIFdoYXRldmVyIGhhcHBlbnMgdG8gc29ja2V0IG9uY2VcXG4rXFx0XFx0ICogd2UgcmVsZWFzZSBpdCwgdGhhdCdzIG5vdCBjb25uZWN0KCkncyBjb25jZXJuLiBObyBuZWVkIHRvIGdvXFxuIFxcdFxcdCAqIGludG8gc2lnbmFsIGFuZCB0aW1lb3V0IGhhbmRsaW5nLiBDYWxsIGl0IGEgZGF5LlxcbiBcXHRcXHQgKlxcbiBcXHRcXHQgKiBOb3RlIHRoYXQgYWxsb3dpbmcgdG8gXFxcInJlc2V0XFxcIiBhbiBhbHJlYWR5IGVzdGFibGlzaGVkIHNvY2tldFxcbiBcXHRcXHQgKiBoZXJlIGlzIHJhY3kgYW5kIGluc2VjdXJlLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpXFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEIHx8XFxuK1xcdFxcdCAgICBzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NJTkcpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0LyogSWYgY29ubmVjdGlvbiB3YXMgX25vdF8gZXN0YWJsaXNoZWQgYW5kIGEgc2lnbmFsL3RpbWVvdXQgY2FtZVxcbiBcXHRcXHQgKiB0byBiZSwgd2Ugd2FudCB0aGUgc29ja2V0J3Mgc3RhdGUgcmVzZXQuIFVzZXIgc3BhY2UgbWF5IHdhbnRcXG4gXFx0XFx0ICogdG8gcmV0cnkuXFxuLVxcdFxcdCAqXFxuLVxcdFxcdCAqIHNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCBpbXBsaWVzIHRoYXQgc29ja2V0IGlzIG5vdCBvblxcbi1cXHRcXHQgKiB2c29ja19jb25uZWN0ZWRfdGFibGUuIFdlIGtlZXAgdGhlIGJpbmRpbmcgYW5kIHRoZSB0cmFuc3BvcnRcXG4tXFx0XFx0ICogYXNzaWduZWQuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgfHwgdGltZW91dCA9PSAwKSB7XFxuIFxcdFxcdFxcdGVyciA9IHRpbWVvdXQgPT0gMCA/IC1FVElNRURPVVQgOiBzb2NrX2ludHJfZXJybm8odGltZW91dCk7XFxuQEAgLTE4NzUsNyArMTg3Miw4IEBAIHN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gc29ja19lcnJvcihzayk7XFxuLVxcdGlmIChlcnIpIHtcXG4rXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NJTkcpIHtcXG4gXFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gVENQX0NMT1NFO1xcbiBcXHRcXHRzb2NrLVxcdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjMzOjIyLjc0Mjg3NjU1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE4NjEzNDY1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2c29ja19jb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdnNvY2tfY29ubmVjdCgpIGluIG5ldC92bXdfdnNvY2svYWZfdnNvY2suYywgY2hhbmdpbmcgdGhlIHN0YXRlIHZhbGlkYXRpb24gbG9naWMgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgZXJyb3IgaGFuZGxpbmcgYnkgYWNjb21tb2RhdGluZyB0aGUgVENQX0NMT1NJTkcgc29ja2V0IHN0YXRlLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIEFGX1ZTT0NLIHNvY2tldCBsaWZlY3ljbGUgdHJhbnNpdGlvbnMgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTE3ZWQ0NzYyOTU0MGU4Mjc3OGYwODBhOTg2NjQxZTc3MjRlNjE2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjI6MzM6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbmluZGV4IGY4NDA0OThiNThhZmIuLmVlYzVkZDZkYWViYjEgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbisrKyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuQEAgLTE4MzQsMjMgKzE4MzQsMjAgQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuIFx0XHR0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTtcbiBcdFx0bG9ja19zb2NrKHNrKTtcbiBcbi1cdFx0LyogQ29ubmVjdGlvbiBlc3RhYmxpc2hlZC4gV2hhdGV2ZXIgaGFwcGVucyB0byBzb2NrZXQgb25jZSB3ZVxuLVx0XHQgKiByZWxlYXNlIGl0LCB0aGF0J3Mgbm90IGNvbm5lY3QoKSdzIGNvbmNlcm4uIE5vIG5lZWQgdG8gZ29cbitcdFx0LyogQ29ubmVjdGlvbiB3YXMgZXN0YWJsaXNoZWQuIFdoYXRldmVyIGhhcHBlbnMgdG8gc29ja2V0IG9uY2VcbitcdFx0ICogd2UgcmVsZWFzZSBpdCwgdGhhdCdzIG5vdCBjb25uZWN0KCkncyBjb25jZXJuLiBObyBuZWVkIHRvIGdvXG4gXHRcdCAqIGludG8gc2lnbmFsIGFuZCB0aW1lb3V0IGhhbmRsaW5nLiBDYWxsIGl0IGEgZGF5LlxuIFx0XHQgKlxuIFx0XHQgKiBOb3RlIHRoYXQgYWxsb3dpbmcgdG8gXCJyZXNldFwiIGFuIGFscmVhZHkgZXN0YWJsaXNoZWQgc29ja2V0XG4gXHRcdCAqIGhlcmUgaXMgcmFjeSBhbmQgaW5zZWN1cmUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEKVxuK1x0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEIHx8XG4rXHRcdCAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0lORylcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0LyogSWYgY29ubmVjdGlvbiB3YXMgX25vdF8gZXN0YWJsaXNoZWQgYW5kIGEgc2lnbmFsL3RpbWVvdXQgY2FtZVxuIFx0XHQgKiB0byBiZSwgd2Ugd2FudCB0aGUgc29ja2V0J3Mgc3RhdGUgcmVzZXQuIFVzZXIgc3BhY2UgbWF5IHdhbnRcbiBcdFx0ICogdG8gcmV0cnkuXG4tXHRcdCAqXG4tXHRcdCAqIHNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCBpbXBsaWVzIHRoYXQgc29ja2V0IGlzIG5vdCBvblxuLVx0XHQgKiB2c29ja19jb25uZWN0ZWRfdGFibGUuIFdlIGtlZXAgdGhlIGJpbmRpbmcgYW5kIHRoZSB0cmFuc3BvcnRcbi1cdFx0ICogYXNzaWduZWQuXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgfHwgdGltZW91dCA9PSAwKSB7XG4gXHRcdFx0ZXJyID0gdGltZW91dCA9PSAwID8gLUVUSU1FRE9VVCA6IHNvY2tfaW50cl9lcnJubyh0aW1lb3V0KTtcbkBAIC0xODc1LDcgKzE4NzIsOCBAQCBzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4gXHR9XG4gXG4gXHRlcnIgPSBzb2NrX2Vycm9yKHNrKTtcbi1cdGlmIChlcnIpIHtcbitcdGlmIChlcnIgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0lORykge1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcbiBcdFx0c29jay1cdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MzM6MjIuNzQyODc4MTM0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExODc1MTY0ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgdnNvY2tfY29ubmVjdCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgdGhpcyBwYXRjaC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgY29udGV4dCDigJMgc3BlY2lmaWNhbGx5IHRoZSBgbmV0L3Ztd192c29jay9hZl92c29jay5jYCBmaWxlIHdpdGhpbiB0aGUgYHZzb2NrX2Nvbm5lY3RgIGZ1bmN0aW9uLiBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBhIHBsYW4uXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBzbyBJJ2xsIHF1aWNrbHkgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBwcmVmZXJyZWQgbWV0aG9kIGhlcmUgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGxldmVyYWdpbmcgbXkgdG9vbHMuIEknbGwgcmVhY2ggZm9yIGVpdGhlciBgcmVhZC1maWxlYCB0byBnZXQgYSBxdWljayB2aXN1YWwgb2YgdGhlIGZpbGUgYXJvdW5kIGxpbmUgMTgzNCwgb3IsIGlmIEknbSBmZWVsaW5nIGxhenksIEknbGwgZ28gd2l0aCBgZ3JlcHBlcmAsIHRvIHF1aWNrbHkgZmluZCB3aGVyZSBgdnNvY2tfY29ubmVjdGAgZXhpc3RzIGluIHJlbGF0aW9uIHRvIGxpbmUgMTgzNC4gT2YgY291cnNlLCBgZ2l0IGdyZXBgIGlzIGFsd2F5cyBhbiBvcHRpb24uIEkganVzdCBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN1cnJvdW5kaW5nIGxpbmVzLCBhbnkgcmVsZXZhbnQgY29tbWVudHMsIGFuZCBhbnkgcHJldmlvdXMgY29tbWl0IG1lc3NhZ2VzIHRoYXQgcmVsYXRlIHRvIHRoYXQgc3BlY2lmaWMgYXJlYS4gVGhpcyBjb250ZXh0IGlzIGNydWNpYWwgdG8gZm9ybWluZyBhbiBpbmZvcm1lZCBqdWRnbWVudCBvbiB0aGUgcGF0Y2gncyBtZXJpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1OCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MzM6MzMuOTMwMzk3NTAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODAwOlxcdFxcdC8qIFRoZSByZWNlaXZlIHBhdGggd2lsbCBoYW5kbGUgYWxsIGNvbW11bmljYXRpb24gdW50aWwgd2UgYXJlIGFibGUgdG9cXG4xODAxOlxcdFxcdCAqIGVudGVyIHRoZSBjb25uZWN0ZWQgc3RhdGUuICBIZXJlIHdlIHdhaXQgZm9yIHRoZSBjb25uZWN0aW9uIHRvIGJlXFxuMTgwMjpcXHRcXHQgKiBjb21wbGV0ZWQgb3IgYSBub3RpZmljYXRpb24gb2YgYW4gZXJyb3IuXFxuMTgwMzpcXHRcXHQgKi9cXG4xODA0OlxcdFxcdHRpbWVvdXQgPSB2c2stXFx1MDAzZWNvbm5lY3RfdGltZW91dDtcXG4xODA1OlxcdFxcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChzayksIFxcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbjE4MDY6XFx0XFxuMTgwNzpcXHRcXHQvKiBJZiB0aGUgc29ja2V0IGlzIGFscmVhZHkgY2xvc2luZyBvciBpdCBpcyBpbiBhbiBlcnJvciBzdGF0ZSwgdGhlcmVcXG4xODA4OlxcdFxcdCAqIGlzIG5vIHBvaW50IGluIHdhaXRpbmcuXFxuMTgwOTpcXHRcXHQgKi9cXG4xODEwOlxcdFxcdHdoaWxlIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIFxcdTAwMjZcXHUwMDI2XFxuMTgxMTpcXHRcXHQgICAgICAgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TSU5HIFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19lcnIgPT0gMCkge1xcbjE4MTI6XFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgT19OT05CTE9DSykge1xcbjE4MTM6XFx0XFx0XFx0XFx0LyogSWYgd2UncmUgbm90IGdvaW5nIHRvIGJsb2NrLCB3ZSBzY2hlZHVsZSBhIHRpbWVvdXRcXG4xODE0OlxcdFxcdFxcdFxcdCAqIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgdGltZW91dCBvbiB0aGUgY29ubmVjdGlvblxcbjE4MTU6XFx0XFx0XFx0XFx0ICogYXR0ZW1wdCwgaW4gY2FzZSB0aGUgcGVlciBkb2Vzbid0IHJlc3BvbmQgaW4gYVxcbjE4MTY6XFx0XFx0XFx0XFx0ICogdGltZWx5IG1hbm5lci4gV2UgaG9sZCBvbiB0byB0aGUgc29ja2V0IHVudGlsIHRoZVxcbjE4MTc6XFx0XFx0XFx0XFx0ICogdGltZW91dCBmaXJlcy5cXG4xODE4OlxcdFxcdFxcdFxcdCAqL1xcbjE4MTk6XFx0XFx0XFx0XFx0c29ja19ob2xkKHNrKTtcXG4xODIwOlxcdFxcbjE4MjE6XFx0XFx0XFx0XFx0LyogSWYgdGhlIHRpbWVvdXQgZnVuY3Rpb24gaXMgYWxyZWFkeSBzY2hlZHVsZWQsXFxuMTgyMjpcXHRcXHRcXHRcXHQgKiByZXNjaGVkdWxlIGl0LCB0aGVuIHVuZ3JhYiB0aGUgc29ja2V0IHJlZmNvdW50IHRvXFxuMTgyMzpcXHRcXHRcXHRcXHQgKiBrZWVwIGl0IGJhbGFuY2VkLlxcbjE4MjQ6XFx0XFx0XFx0XFx0ICovXFxuMTgyNTpcXHRcXHRcXHRcXHRpZiAobW9kX2RlbGF5ZWRfd29yayhzeXN0ZW1fcGVyY3B1X3dxLCBcXHUwMDI2dnNrLVxcdTAwM2Vjb25uZWN0X3dvcmssXFxuMTgyNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRpbWVvdXQpKVxcbjE4Mjc6XFx0XFx0XFx0XFx0XFx0c29ja19wdXQoc2spO1xcbjE4Mjg6XFx0XFxuMTgyOTpcXHRcXHRcXHRcXHQvKiBTa2lwIGFoZWFkIHRvIHByZXNlcnZlIGVycm9yIGNvZGUgc2V0IGFib3ZlLiAqL1xcbjE4MzA6XFx0XFx0XFx0XFx0Z290byBvdXRfd2FpdDtcXG4xODMxOlxcdFxcdFxcdH1cXG4xODMyOlxcdFxcbjE4MzM6XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4xODM0OlxcdFxcdFxcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xcbjE4MzU6XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4xODM2OlxcdFxcbjE4Mzc6XFx0XFx0XFx0LyogQ29ubmVjdGlvbiB3YXMgZXN0YWJsaXNoZWQuIFdoYXRldmVyIGhhcHBlbnMgdG8gc29ja2V0IG9uY2VcXG4xODM4OlxcdFxcdFxcdCAqIHdlIHJlbGVhc2UgaXQsIHRoYXQncyBub3QgY29ubmVjdCgpJ3MgY29uY2Vybi4gTm8gbmVlZCB0byBnb1xcbjE4Mzk6XFx0XFx0XFx0ICogaW50byBzaWduYWwgYW5kIHRpbWVvdXQgaGFuZGxpbmcuIENhbGwgaXQgYSBkYXkuXFxuMTg0MDpcXHRcXHRcXHQgKlxcbjE4NDE6XFx0XFx0XFx0ICogTm90ZSB0aGF0IGFsbG93aW5nIHRvIFxcXCJyZXNldFxcXCIgYW4gYWxyZWFkeSBlc3RhYmxpc2hlZCBzb2NrZXRcXG4xODQyOlxcdFxcdFxcdCAqIGhlcmUgaXMgcmFjeSBhbmQgaW5zZWN1cmUuXFxuMTg0MzpcXHRcXHRcXHQgKi9cXG4xODQ0OlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEIHx8XFxuMTg0NTpcXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TSU5HKVxcbjE4NDY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTg0NzpcXHRcXG4xODQ4OlxcdFxcdFxcdC8qIElmIGNvbm5lY3Rpb24gd2FzIF9ub3RfIGVzdGFibGlzaGVkIGFuZCBhIHNpZ25hbC90aW1lb3V0IGNhbWVcXG4xODQ5OlxcdFxcdFxcdCAqIHRvIGJlLCB3ZSB3YW50IHRoZSBzb2NrZXQncyBzdGF0ZSByZXNldC4gVXNlciBzcGFjZSBtYXkgd2FudFxcbjE4NTA6XFx0XFx0XFx0ICogdG8gcmV0cnkuXFxuMTg1MTpcXHRcXHRcXHQgKi9cXG4xODUyOlxcdFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSB8fCB0aW1lb3V0ID09IDApIHtcXG4xODUzOlxcdFxcdFxcdFxcdGVyciA9IHRpbWVvdXQgPT0gMCA/IC1FVElNRURPVVQgOiBzb2NrX2ludHJfZXJybm8odGltZW91dCk7XFxuMTg1NDpcXHRcXG4xODU1OlxcdFxcdFxcdFxcdC8qIExpc3RlbmVyIG1pZ2h0IGhhdmUgYWxyZWFkeSByZXNwb25kZWQgd2l0aFxcbjE4NTY6XFx0XFx0XFx0XFx0ICogVklSVElPX1ZTT0NLX09QX1JFU1BPTlNFLiBJdHMgaGFuZGxpbmcgZXhwZWN0cyBvdXJcXG4xODU3OlxcdFxcdFxcdFxcdCAqIHNrX3N0YXRlID09IFRDUF9TWU5fU0VOVCwgd2hpY2ggaGVyZWJ5IHdlIGJyZWFrLlxcbjE4NTg6XFx0XFx0XFx0XFx0ICogSW4gc3VjaCBjYXNlIFZJUlRJT19WU09DS19PUF9SU1Qgd2lsbCBmb2xsb3cuXFxuMTg1OTpcXHRcXHRcXHRcXHQgKi9cXG4xODYwOlxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcXG4xODYxOlxcdFxcdFxcdFxcdHNvY2stXFx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XFxuMTg2MjpcXHRcXG4xODYzOlxcdFxcdFxcdFxcdC8qIFRyeSB0byBjYW5jZWwgVklSVElPX1ZTT0NLX09QX1JFUVVFU1Qgc2tiIHNlbnQgb3V0IGJ5XFxuMTg2NDpcXHRcXHRcXHRcXHQgKiB0cmFuc3BvcnQtXFx1MDAzZWNvbm5lY3QoKS5cXG4xODY1OlxcdFxcdFxcdFxcdCAqL1xcbjE4NjY6XFx0XFx0XFx0XFx0dnNvY2tfdHJhbnNwb3J0X2NhbmNlbF9wa3QodnNrKTtcXG4xODY3OlxcdFxcbjE4Njg6XFx0XFx0XFx0XFx0Z290byBvdXRfd2FpdDtcXG4xODY5OlxcdFxcdFxcdH1cXG4xODcwOlxcdFxcbjE4NzE6XFx0XFx0XFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgXFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuMTg3MjpcXHRcXHR9XFxuMTg3MzpcXHRcXG4xODc0OlxcdFxcdGVyciA9IHNvY2tfZXJyb3Ioc2spO1xcbjE4NzU6XFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNlxcbjE4NzY6XFx0XFx0ICAgIHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TSU5HKSB7XFxuMTg3NzpcXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBUQ1BfQ0xPU0U7XFxuMTg3ODpcXHRcXHRcXHRzb2NrLVxcdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xcbjE4Nzk6XFx0XFx0fVxcbjE4ODA6XFx0XFxuMTg4MTpcXHRvdXRfd2FpdDpcXG4xODgyOlxcdFxcdGZpbmlzaF93YWl0KHNrX3NsZWVwKHNrKSwgXFx1MDAyNndhaXQpO1xcbjE4ODM6XFx0b3V0OlxcbjE4ODQ6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4xODg1OlxcdFxcdHJldHVybiBlcnI7XFxuMTg4NjpcXHR9XFxuMTg4NzpcXHRcXG4xODg4OlxcdHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxuMTg4OTpcXHRcXHRcXHRcXHRzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzozMy45MzA1NDQ2MzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDIyMDIyNjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZTT0NLIEV4cGxvcmF0aW9uKipcblxuT2theSwgbGV0IG1lIGdldCB0aGlzIHN0cmFpZ2h0LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGB2c29ja19jb25uZWN0YCwgYW5kIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhbmRzY2FwZSwgdGhhdCBmdW5jdGlvbiBsaXZlcyB3aXRoaW4gYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBXZSdyZSBkZWFsaW5nIHdpdGggVlNPQ0ssIHRoZSBBRl9WU09DSyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5LCBzb21ldGhpbmcgSSdtIHZlcnkgZmFtaWxpYXIgd2l0aC4gSXQncyBwcmFjdGljYWxseSB1YmlxdWl0b3VzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhpbmsgdnNvY2sgbG9vcGJhY2ssIHZpcnRpby12c29jaywgYW5kIGV2ZW4gdm1jaSwgaXQgYWxsIGxldmVyYWdlcyB0aGF0IGZyYW1ld29yay4gSSBjYW4ndCBiZWxpZXZlIEkgZGlkbid0IGltbWVkaWF0ZWx5IGNvbnNpZGVyIGNoZWNraW5nIEtjb25maWcgZm9yIGluZm9ybWF0aW9uIG9uIGBhZl92c29jay5jYC4gQWxyaWdodCwgbGV0J3Mgc3RhcnQgdGhlcmUuIEknbGwgZ2V0IHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDAzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzozNi4zNTI1Njk4NTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NzM1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVlNPQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Ztd192c29jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMDA5IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Njpjb25maWcgVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXQgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMTgtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjE5OmNvbmZpZyBWU09DS0VUU19ESUFHXFxubmV0L3Ztd192c29jay9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3Ztd192c29jay9LY29uZmlnOjIxOlxcdGRlcGVuZHMgb24gVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjItXFx0ZGVmYXVsdCB5XFxubmV0L3Ztd192c29jay9LY29uZmlnLTIzLVxcdGhlbHBcXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MjQ6XFx0ICBTdXBwb3J0IGZvciBQRl9WU09DSyBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxubmV0L3Ztd192c29jay9LY29uZmlnLTI1LVxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yOC1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Mjk6Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXFxubmV0L3Ztd192c29jay9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XFxcIlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozMTpcXHRkZXBlbmRzIG9uIFZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTMyLVxcdGRlZmF1bHQgeVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozMzpcXHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zNC1cXHRoZWxwXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNDAtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjQxOmNvbmZpZyBWTVdBUkVfVk1DSV9WU09DS0VUU1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiVk13YXJlIFZNQ0kgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcXFwiXFxubmV0L3Ztd192c29jay9LY29uZmlnOjQzOlxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgVk1XQVJFX1ZNQ0lcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNDQtXFx0aGVscFxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTUyLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo1Mzpjb25maWcgVklSVElPX1ZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTU0LVxcdHRyaXN0YXRlIFxcXCJ2aXJ0aW8gdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcXFwiXFxubmV0L3Ztd192c29jay9LY29uZmlnOjU1OlxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgVklSVElPXFxubmV0L3Ztd192c29jay9LY29uZmlnOjU2OlxcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXFxubmV0L3Ztd192c29jay9LY29uZmlnLTU3LVxcdGhlbHBcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy02NS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NjY6Y29uZmlnIFZJUlRJT19WU09DS0VUU19DT01NT05cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNjctXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03Mi1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NzM6Y29uZmlnIEhZUEVSVl9WU09DS0VUU1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03NC1cXHR0cmlzdGF0ZSBcXFwiSHlwZXItViB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1xcXCJcXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NzU6XFx0ZGVwZW5kcyBvbiBWU09DS0VUUyBcXHUwMDI2XFx1MDAyNiBIWVBFUlZfVk1CVVNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNzYtXFx0aGVscFxcbi0tXFxubmV0L3Ztd192c29jay9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1ZTT0NLRVRTKSArPSB2c29jay5vXFxubmV0L3Ztd192c29jay9NYWtlZmlsZTozOm9iai0kKENPTkZJR19WU09DS0VUU19ESUFHKSArPSB2c29ja19kaWFnLm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1ZNV0FSRV9WTUNJX1ZTT0NLRVRTKSArPSB2bXdfdnNvY2tfdm1jaV90cmFuc3BvcnQub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6NTpvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTKSArPSB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydC5vXFxubmV0L3Ztd192c29jay9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19WSVJUSU9fVlNPQ0tFVFNfQ09NTU9OKSArPSB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24ub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6NzpvYmotJChDT05GSUdfSFlQRVJWX1ZTT0NLRVRTKSArPSBodl9zb2NrLm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1ZTT0NLRVRTX0xPT1BCQUNLKSArPSB2c29ja19sb29wYmFjay5vXFxubmV0L3Ztd192c29jay9NYWtlZmlsZS05LVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTExMS0gKiAgICAgICAgZ2xvYmFsIG5hbWVzcGFjZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGFsbG9jYXRlIHRoZSBzYW1lIENJRC5cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTEyOiAqICAgICAgLSBnbG9iYWwgbW9kZSBBRl9WU09DSyBzb2NrZXRzIGNhbiByZWFjaCBhbnkgVk0gb3Igc29ja2V0IGluIGFueSBnbG9iYWxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTEzLSAqICAgICAgICBuYW1lc3BhY2UsIHRoZXkgYXJlIG5vdCBjb250YWluZWQgdG8gb25seSB0aGVpciBvd24gbmFtZXNwYWNlLlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxMTQ6ICogICAgICAtIEFGX1ZTT0NLIHNvY2tldHMgaW4gYSBnbG9iYWwgbW9kZSBuYW1lc3BhY2UgY2Fubm90IHJlYWNoIFZNcyBvclxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMTUtICogICAgICAgIHNvY2tldHMgaW4gYW55IGxvY2FsIG1vZGUgbmFtZXNwYWNlLlxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTEyMy0gKiAgICAgICBhbGxvY2F0aW9uIGluIGFueSBvdGhlciBuYW1lc3BhY2UsIGJ1dCBub3QgaW4gdGhlIHNhbWUgbmFtZXNwYWNlLlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxMjQ6ICogICAgIC0gQUZfVlNPQ0sgc29ja2V0cyBpbiBhIGxvY2FsIG1vZGUgbmFtZXNwYWNlIGNhbiBjb25uZWN0IG9ubHkgdG8gVk1zIG9yXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTEyNS0gKiAgICAgICBvdGhlciBzb2NrZXRzIHdpdGhpbiB0aGVpciBvd24gbmFtZXNwYWNlLlxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE2Ny1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTY4OiNkZWZpbmUgVlNPQ0tfTkVUX01PREVfU1RSX0dMT0JBTCBcXFwiZ2xvYmFsXFxcIlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNjk6I2RlZmluZSBWU09DS19ORVRfTU9ERV9TVFJfTE9DQUwgXFxcImxvY2FsXFxcIlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNzAtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTczLSAqL1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNzQ6I2RlZmluZSBWU09DS19ORVRfTU9ERV9TVFJfTUFYIDhcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTc1LVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTE4Mj1zdHJ1Y3QgcHJvdG8gdnNvY2tfcHJvdG8gPSB7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE4MzpcXHQubmFtZSA9IFxcXCJBRl9WU09DS1xcXCIsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE4NC1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xOTQtICovXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE5NTojZGVmaW5lIFZTT0NLX0RFRkFVTFRfQ09OTkVDVF9USU1FT1VUICgyICogSFopXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE5Ni1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTk3OiNkZWZpbmUgVlNPQ0tfREVGQVVMVF9CVUZGRVJfU0laRSAgICAgKDEwMjQgKiAyNTYpXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE5ODojZGVmaW5lIFZTT0NLX0RFRkFVTFRfQlVGRkVSX01BWF9TSVpFICgxMDI0ICogMjU2KVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxOTk6I2RlZmluZSBWU09DS19ERUZBVUxUX0JVRkZFUl9NSU5fU0laRSAxMjhcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjAwLVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTIwOT1zdGF0aWMgREVGSU5FX01VVEVYKHZzb2NrX3JlZ2lzdGVyX211dGV4KTtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMjEtICogU3BlY2lmaWNhbGx5LCB3ZSBpbml0aWFsaXplIHRoZSB2c29ja19iaW5kX3RhYmxlIGFycmF5IHRvIGEgc2l6ZSBvZlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMjI6ICogVlNPQ0tfSEFTSF9TSVpFICsgMSBzbyB0aGF0IHZzb2NrX2JpbmRfdGFibGVbMF0gdGhyb3VnaFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMjM6ICogdnNvY2tfYmluZF90YWJsZVtWU09DS19IQVNIX1NJWkUgLSAxXSBhcmUgZm9yIGJvdW5kIHNvY2tldHMgYW5kXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIyNDogKiB2c29ja19iaW5kX3RhYmxlW1ZTT0NLX0hBU0hfU0laRV0gaXMgZm9yIHVuYm91bmQgc29ja2V0cy4gIFRoZSBoYXNoIGZ1bmN0aW9uXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIyNTogKiBtb2RzIHdpdGggVlNPQ0tfSEFTSF9TSVpFIHRvIGVuc3VyZSB0aGlzLlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMjYtICovXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjI4LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMjk6I2RlZmluZSBWU09DS19IQVNIKGFkZHIpICAgICAgICAoKGFkZHIpLVxcdTAwM2Vzdm1fcG9ydCAlIFZTT0NLX0hBU0hfU0laRSlcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjMwOiNkZWZpbmUgdnNvY2tfYm91bmRfc29ja2V0cyhhZGRyKSAoXFx1MDAyNnZzb2NrX2JpbmRfdGFibGVbVlNPQ0tfSEFTSChhZGRyKV0pXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzMTojZGVmaW5lIHZzb2NrX3VuYm91bmRfc29ja2V0cyAgICAgKFxcdTAwMjZ2c29ja19iaW5kX3RhYmxlW1ZTT0NLX0hBU0hfU0laRV0pXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzMi1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjMzLS8qIFhYWCBUaGlzIGNhbiBwcm9iYWJseSBiZSBpbXBsZW1lbnRlZCBpbiBhIGJldHRlciB3YXkuICovXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzNDojZGVmaW5lIFZTT0NLX0NPTk5fSEFTSChzcmMsIGRzdClcXHRcXHRcXHRcXHRcXFxcXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzNTpcXHQoKChzcmMpLVxcdTAwM2Vzdm1fY2lkIF4gKGRzdCktXFx1MDAzZXN2bV9wb3J0KSAlIFZTT0NLX0hBU0hfU0laRSlcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjM2LSNkZWZpbmUgdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoc3JjLCBkc3QpXFx0XFx0XFxcXFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzc6XFx0KFxcdTAwMjZ2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfQ09OTl9IQVNIKHNyYywgZHN0KV0pXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzOC0jZGVmaW5lIHZzb2NrX2Nvbm5lY3RlZF9zb2NrZXRzX3Zzayh2c2spXFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0MC1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQxOnN0cnVjdCBsaXN0X2hlYWQgdnNvY2tfYmluZF90YWJsZVtWU09DS19IQVNIX1NJWkUgKyAxXTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQyLUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2JpbmRfdGFibGUpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDM6c3RydWN0IGxpc3RfaGVhZCB2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfSEFTSF9TSVpFXTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQ0LUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9OTM2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0Ni1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTQ3OlxcdHNrID0gc2tfYWxsb2MobmV0LCBBRl9WU09DSywgcHJpb3JpdHksIFxcdTAwMjZ2c29ja19wcm90bywga2Vybik7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0OC1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk5MC1cXHRcXHR2c2stXFx1MDAzZW93bmVyID0gZ2V0X2N1cnJlbnRfY3JlZCgpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5OTE6XFx0XFx0dnNrLVxcdTAwM2Vjb25uZWN0X3RpbWVvdXQgPSBWU09DS19ERUZBVUxUX0NPTk5FQ1RfVElNRU9VVDtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTkyOlxcdFxcdHZzay1cXHUwMDNlYnVmZmVyX3NpemUgPSBWU09DS19ERUZBVUxUX0JVRkZFUl9TSVpFO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5OTM6XFx0XFx0dnNrLVxcdTAwM2VidWZmZXJfbWluX3NpemUgPSBWU09DS19ERUZBVUxUX0JVRkZFUl9NSU5fU0laRTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTk0OlxcdFxcdHZzay1cXHUwMDNlYnVmZmVyX21heF9zaXplID0gVlNPQ0tfREVGQVVMVF9CVUZGRVJfTUFYX1NJWkU7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk5NS1cXHR9XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTY1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB2c29ja19kZ3JhbV9vcHMgPSB7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE2NTQ6XFx0LmZhbWlseSA9IFBGX1ZTT0NLLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNjU1LVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTE3MDQ9c3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE4NTUtXFx0XFx0XFx0LyogTGlzdGVuZXIgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlc3BvbmRlZCB3aXRoXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE4NTY6XFx0XFx0XFx0ICogVklSVElPX1ZTT0NLX09QX1JFU1BPTlNFLiBJdHMgaGFuZGxpbmcgZXhwZWN0cyBvdXJcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1Ny1cXHRcXHRcXHQgKiBza19zdGF0ZSA9PSBUQ1BfU1lOX1NFTlQsIHdoaWNoIGhlcmVieSB3ZSBicmVhay5cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTg1ODpcXHRcXHRcXHQgKiBJbiBzdWNoIGNhc2UgVklSVElPX1ZTT0NLX09QX1JTVCB3aWxsIGZvbGxvdy5cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1OS1cXHRcXHRcXHQgKi9cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xODYyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxODYzOlxcdFxcdFxcdC8qIFRyeSB0byBjYW5jZWwgVklSVElPX1ZTT0NLX09QX1JFUVVFU1Qgc2tiIHNlbnQgb3V0IGJ5XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE4NjQtXFx0XFx0XFx0ICogdHJhbnNwb3J0LVxcdTAwM2Vjb25uZWN0KCkuXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjAxMz1zdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3RpYmxlX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMDI0LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMDI1OlxcdGlmIChsZXZlbCAhPSBBRl9WU09DSyBcXHUwMDI2XFx1MDAyNiBsZXZlbCAhPSBTT0xfU09DS0VUKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMDI2LVxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjEwNi1cXHRcXHRcXHRcXHR2c2stXFx1MDAzZWNvbm5lY3RfdGltZW91dCA9XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIxMDc6XFx0XFx0XFx0XFx0ICAgIFZTT0NLX0RFRkFVTFRfQ09OTkVDVF9USU1FT1VUO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTA4LVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTIxMjc9c3RhdGljIGludCB2c29ja19jb25uZWN0aWJsZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjE0My1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjE0NDpcXHRpZiAobGV2ZWwgIT0gQUZfVlNPQ0spXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIxNDUtXFx0XFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNTQ1PV9fdnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjU1NS1cXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNTU2OlxcdFxcdHJldHVybiBzb2NrX3JlY3ZfZXJycXVldWUoc2ssIG1zZywgbGVuLCBTT0xfVlNPQ0ssIFZTT0NLX1JFQ1ZFUlIpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTU3LVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI2NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdnNvY2tfc3RyZWFtX29wcyA9IHtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY1MzpcXHQuZmFtaWx5ID0gUEZfVlNPQ0ssXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTQtXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjY3ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB2c29ja19zZXFwYWNrZXRfb3BzID0ge1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjc1OlxcdC5mYW1pbHkgPSBQRl9WU09DSyxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY3Ni1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjk1PXN0YXRpYyBpbnQgdnNvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNzA0LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNzA1OlxcdGlmIChwcm90b2NvbCBcXHUwMDI2XFx1MDAyNiBwcm90b2NvbCAhPSBQRl9WU09DSylcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjcwNi1cXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNzUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSB2c29ja19mYW1pbHlfb3BzID0ge1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNzUxOlxcdC5mYW1pbHkgPSBBRl9WU09DSyxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjc1Mi1cXHQuY3JlYXRlID0gdnNvY2tfY3JlYXRlLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI4MTM9c3RhdGljIGludCBfX3Zzb2NrX25ldF9tb2RlX3N0cmluZyhjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4MTcte1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODE4OlxcdGNoYXIgZGF0YVtWU09DS19ORVRfTU9ERV9TVFJfTUFYXSA9IHswfTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjgxOS1cXHRzdHJ1Y3QgY3RsX3RhYmxlIHRtcDtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODMzLVxcdFxcdHN3aXRjaCAobW9kZSkge1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODM0OlxcdFxcdGNhc2UgVlNPQ0tfTkVUX01PREVfR0xPQkFMOlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODM1OlxcdFxcdFxcdHAgPSBWU09DS19ORVRfTU9ERV9TVFJfR0xPQkFMO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODM2LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODM3OlxcdFxcdGNhc2UgVlNPQ0tfTkVUX01PREVfTE9DQUw6XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4Mzg6XFx0XFx0XFx0cCA9IFZTT0NLX05FVF9NT0RFX1NUUl9MT0NBTDtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjgzOS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODU2LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODU3OlxcdGlmICghc3RybmNtcChkYXRhLCBWU09DS19ORVRfTU9ERV9TVFJfR0xPQkFMLCBzaXplb2YoZGF0YSkpKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODU4OlxcdFxcdCpuZXdfbW9kZSA9IFZTT0NLX05FVF9NT0RFX0dMT0JBTDtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjg1OTpcXHRlbHNlIGlmICghc3RybmNtcChkYXRhLCBWU09DS19ORVRfTU9ERV9TVFJfTE9DQUwsIHNpemVvZihkYXRhKSkpXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI4NjA6XFx0XFx0Km5ld19tb2RlID0gVlNPQ0tfTkVUX01PREVfTE9DQUw7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI4NjEtXFx0ZWxzZVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI4ODE9c3RhdGljIGludCB2c29ja19uZXRfY2hpbGRfbW9kZV9zdHJpbmcoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yODk4LVxcdFxcdCAqL1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyODk5OlxcdFxcdGlmICh2c29ja19uZXRfbW9kZShuZXQpID09IFZTT0NLX05FVF9NT0RFX0xPQ0FMIFxcdTAwMjZcXHUwMDI2XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI5MDA6XFx0XFx0ICAgIG5ld19tb2RlID09IFZTT0NLX05FVF9NT0RFX0dMT0JBTClcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjkwMS1cXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI5MTA9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdnNvY2tfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTEzLVxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2aW5pdF9uZXQudnNvY2subW9kZSxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjkxNDpcXHRcXHQubWF4bGVuXFx0XFx0PSBWU09DS19ORVRfTU9ERV9TVFJfTUFYLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yOTE1LVxcdFxcdC5tb2RlXFx0XFx0PSAwNDQ0LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MjAtXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC52c29jay5jaGlsZF9uc19tb2RlLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyOTIxOlxcdFxcdC5tYXhsZW5cXHRcXHQ9IFZTT0NLX05FVF9NT0RFX1NUUl9NQVgsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5MjItXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9Mjk4Nz1zdGF0aWMgdm9pZCB2c29ja19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjk4OS1cXHRpZiAobmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSlcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6Mjk5MDpcXHRcXHRuZXQtXFx1MDAzZXZzb2NrLm1vZGUgPSBWU09DS19ORVRfTU9ERV9HTE9CQUw7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI5OTEtXFx0ZWxzZVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTMwMTk9c3RhdGljIGludCBfX2luaXQgdnNvY2tfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNDEtXFx0XFx0cHJfZXJyKFxcXCJjb3VsZCBub3QgcmVnaXN0ZXIgYWZfdnNvY2sgKCVkKSBhZGRyZXNzIGZhbWlseTogJWRcXFxcblxcXCIsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjMwNDI6XFx0XFx0ICAgICAgIEFGX1ZTT0NLLCBlcnIpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMDQzLVxcdFxcdGdvdG8gZXJyX3VucmVnaXN0ZXJfcHJvdG87XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA1NS1lcnJfdW5yZWdpc3Rlcl9zb2NrOlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMDU2OlxcdHNvY2tfdW5yZWdpc3RlcihBRl9WU09DSyk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNTctZXJyX3VucmVnaXN0ZXJfcHJvdG86XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzA2NT1zdGF0aWMgdm9pZCBfX2V4aXQgdnNvY2tfZXhpdCh2b2lkKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNjctXFx0bWlzY19kZXJlZ2lzdGVyKFxcdTAwMjZ2c29ja19kZXZpY2UpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMDY4OlxcdHNvY2tfdW5yZWdpc3RlcihBRl9WU09DSyk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwNjktXFx0cHJvdG9fdW5yZWdpc3RlcihcXHUwMDI2dnNvY2tfcHJvdG8pO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTMwNzk9aW50IHZzb2NrX2NvcmVfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHZzb2NrX3RyYW5zcG9ydCAqdCwgaW50IGZlYXR1cmVzKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwOTEtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjMwOTI6XFx0aWYgKGZlYXR1cmVzIFxcdTAwMjYgVlNPQ0tfVFJBTlNQT1JUX0ZfSDJHKSB7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMwOTMtXFx0XFx0aWYgKHRfaDJnKSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA5OS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzEwMDpcXHRpZiAoZmVhdHVyZXMgXFx1MDAyNiBWU09DS19UUkFOU1BPUlRfRl9HMkgpIHtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzEwMS1cXHRcXHRpZiAodF9nMmgpIHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMTA3LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMTA4OlxcdGlmIChmZWF0dXJlcyBcXHUwMDI2IFZTT0NLX1RSQU5TUE9SVF9GX0RHUkFNKSB7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMxMDktXFx0XFx0aWYgKHRfZGdyYW0pIHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMTE1LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozMTE2OlxcdGlmIChmZWF0dXJlcyBcXHUwMDI2IFZTT0NLX1RSQU5TUE9SVF9GX0xPQ0FMKSB7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMxMTctXFx0XFx0aWYgKHRfbG9jYWwpIHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2tfdGFwLmMtMi0vKlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2tfdGFwLmM6MzogKiBUYXAgZnVuY3Rpb25zIGZvciBBRl9WU09DSyBzb2NrZXRzLlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2tfdGFwLmMtNC0gKlxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29ja190YXAuYz0xNz1pbnQgdnNvY2tfYWRkX3RhcChzdHJ1Y3QgdnNvY2tfdGFwICp2dClcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrX3RhcC5jLTE4LXtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrX3RhcC5jOjE5OlxcdGlmICh1bmxpa2VseSh2dC1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9WU09DS01PTikpXFxubmV0L3Ztd192c29jay9hZl92c29ja190YXAuYy0yMC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC92bXdfdnNvY2svZGlhZy5jPTE0PXN0YXRpYyBpbnQgc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC92bXdfdnNvY2svZGlhZy5jLTI2LVxcdHJlcCA9IG5sbXNnX2RhdGEobmxoKTtcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzoyNzpcXHRyZXAtXFx1MDAzZXZkaWFnX2ZhbWlseSA9IEFGX1ZTT0NLO1xcbm5ldC92bXdfdnNvY2svZGlhZy5jLTI4LVxcbi0tXFxubmV0L3Ztd192c29jay9kaWFnLmM9MTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja19kaWFnX2hhbmRsZXIgdnNvY2tfZGlhZ19oYW5kbGVyID0ge1xcbm5ldC92bXdfdnNvY2svZGlhZy5jLTE2MC1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzoxNjE6XFx0LmZhbWlseSA9IEFGX1ZTT0NLLFxcbm5ldC92bXdfdnNvY2svZGlhZy5jLTE2Mi1cXHQuZHVtcCA9IHZzb2NrX2RpYWdfaGFuZGxlcl9kdW1wLFxcbi0tXFxubmV0L3Ztd192c29jay9kaWFnLmM9MTc5PU1PRFVMRV9BTElBU19ORVRfUEZfUFJPVE9fVFlQRShQRl9ORVRMSU5LLCBORVRMSU5LX1NPQ0tfRElBRyxcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzoxODA6XFx0XFx0XFx0ICAgICAgIDQwIC8qIEFGX1ZTT0NLICovKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jPTk0PXN0cnVjdCBodnNvY2sge1xcbi0tXFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTExLVxcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jOjExMjovKiBJbiB0aGUgVk0sIHdlIHN1cHBvcnQgSHlwZXItViBTb2NrZXRzIHdpdGggQUZfVlNPQ0ssIGFuZCB0aGUgZW5kcG9pbnQgaXNcXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy0xMTMtICogXFx1MDAzY2NpZCwgcG9ydFxcdTAwM2UgKHNlZSBzdHJ1Y3Qgc29ja2FkZHJfdm0pLiBOb3RlOiBjaWQgaXMgbm90IHJlYWxseSB1c2VkIGhlcmU6XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy0xMzUtICpcXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYzoxMzY6ICogVG8gbWFrZSB1c2Ugb2YgdGhlIEFGX1ZTT0NLIGluZnJhc3RydWN0dXJlIGluIExpbnV4IFZNLCB3ZSBoYXZlIHRvIGxpbWl0XFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTM3LSAqIHRoZSBhdmFpbGFibGUgR1VJRCBzcGFjZSBvZiBTT0NLQUREUl9IViBzbyB0aGF0IHdlIGNhbiBjcmVhdGUgYSBtYXBwaW5nXFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmM6MTM4OiAqIGJldHdlZW4gQUZfVlNPQ0sgcG9ydCBhbmQgU09DS0FERFJfSFYgU2VydmljZSBHVUlELiBUaGUgcnVsZSBvZiB3cml0aW5nXFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTM5LSAqIEh5cGVyLVYgU29ja2V0cyBhcHBzIG9uIHRoZSBob3N0IGFuZCBpbiBMaW51eCBWTSBpczpcXG4tLVxcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jPTk2MD1zdGF0aWMgaW50IF9faW5pdCBodnNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtOTY3LVxcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jOjk2ODpcXHRyZXQgPSB2c29ja19jb3JlX3JlZ2lzdGVyKFxcdTAwMjZodnNfdHJhbnNwb3J0LCBWU09DS19UUkFOU1BPUlRfRl9HMkgpO1xcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jLTk2OS1cXHRpZiAocmV0KSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYz05ODg9TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jOjk4OTpNT0RVTEVfQUxJQVNfTkVUUFJPVE8oUEZfVlNPQ0spO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9MzA9c3RydWN0IHZpcnRpb192c29jayB7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzEtXFx0c3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXY7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6MzI6XFx0c3RydWN0IHZpcnRxdWV1ZSAqdnFzW1ZTT0NLX1ZRX01BWF07XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzMtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0zOC1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzozOTpcXHQvKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgcHJvdGVjdGVkIGJ5IHR4X2xvY2suICB2cXNbVlNPQ0tfVlFfVFhdXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNDAtXFx0ICogbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIHR4X2xvY2sgaGVsZC5cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQ5LVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjUwOlxcdC8qIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBwcm90ZWN0ZWQgYnkgcnhfbG9jay4gIHZxc1tWU09DS19WUV9SWF1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy01MS1cXHQgKiBtdXN0IGJlIGFjY2Vzc2VkIHdpdGggcnhfbG9jayBoZWxkLlxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNzItXFx0LyogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHByb3RlY3RlZCBieSBldmVudF9sb2NrLlxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjczOlxcdCAqIHZxc1tWU09DS19WUV9FVkVOVF0gbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIGV2ZW50X2xvY2sgaGVsZC5cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03NC1cXHQgKi9cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTE1OD12aXJ0aW9fdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMTcwLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjE3MTpcXHR2cSA9IHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTE3Mi1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTE5MC1cXHRcXHRpZiAocmVwbHkpIHtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzoxOTE6XFx0XFx0XFx0c3RydWN0IHZpcnRxdWV1ZSAqcnhfdnEgPSB2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0xOTItXFx0XFx0XFx0aW50IHZhbDtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTIxNz1zdGF0aWMgaW50IHZpcnRpb190cmFuc3BvcnRfc2VuZF9za2JfZmFzdF9wYXRoKHN0cnVjdCB2aXJ0aW9fdnNvY2sgKnZzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTIxOC17XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6MjE5OlxcdHN0cnVjdCB2aXJ0cXVldWUgKnZxID0gdnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9UWF07XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMjIwLVxcdGludCByZXQ7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz0yODA9dmlydGlvX3RyYW5zcG9ydF9jYW5jZWxfcGt0KHN0cnVjdCB2c29ja19zb2NrICp2c2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0yOTQtXFx0aWYgKGNudCkge1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjI5NTpcXHRcXHRzdHJ1Y3QgdmlydHF1ZXVlICpyeF92cSA9IHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfUlhdO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTI5Ni1cXHRcXHRpbnQgbmV3X2NudDtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTMxMT1zdGF0aWMgdm9pZCB2aXJ0aW9fdnNvY2tfcnhfZmlsbChzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jaylcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0zMTIte1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjMxMzpcXHRpbnQgdG90YWxfbGVuID0gVklSVElPX1ZTT0NLX0RFRkFVTFRfUlhfQlVGX1NJWkU7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzE0LVxcdHN0cnVjdCBzY2F0dGVybGlzdCBwa3QsICpwO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzE4LVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjMxOTpcXHR2cSA9IHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfUlhdO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTMyMC1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTMyNS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzozMjY6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlaGVhZCwgMCwgVklSVElPX1ZTT0NLX1NLQl9IRUFEUk9PTSk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzI3LVxcdFxcdHNnX2luaXRfb25lKFxcdTAwMjZwa3QsIHZpcnRpb192c29ja19oZHIoc2tiKSwgdG90YWxfbGVuKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTM0Mj1zdGF0aWMgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzUzLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjM1NDpcXHR2cSA9IHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTM1NS1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTM3NT1zdGF0aWMgYm9vbCB2aXJ0aW9fdHJhbnNwb3J0X21vcmVfcmVwbGllcyhzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jaylcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy0zNzYte1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjM3NzpcXHRzdHJ1Y3QgdmlydHF1ZXVlICp2cSA9IHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfUlhdO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTM3OC1cXHRpbnQgdmFsO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9Mzg3PXN0YXRpYyBpbnQgdmlydGlvX3Zzb2NrX2V2ZW50X2ZpbGxfb25lKHN0cnVjdCB2aXJ0aW9fdnNvY2sgKnZzb2NrLFxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtMzkyLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjM5MzpcXHR2cSA9IHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfRVZFTlRdO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTM5NC1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTQwMT1zdGF0aWMgdm9pZCB2aXJ0aW9fdnNvY2tfZXZlbnRfZmlsbChzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jaylcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQxMC1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo0MTE6XFx0dmlydHF1ZXVlX2tpY2sodnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9FVkVOVF0pO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQxMi19XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz00Mzc9c3RhdGljIHZvaWQgdmlydGlvX3Zzb2NrX2V2ZW50X2hhbmRsZShzdHJ1Y3QgdmlydGlvX3Zzb2NrICp2c29jayxcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQ0MC1cXHRzd2l0Y2ggKGxlMzJfdG9fY3B1KGV2ZW50LVxcdTAwM2VpZCkpIHtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo0NDE6XFx0Y2FzZSBWSVJUSU9fVlNPQ0tfRVZFTlRfVFJBTlNQT1JUX1JFU0VUOlxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQ0Mi1cXHRcXHR2aXJ0aW9fdnNvY2tfdXBkYXRlX2d1ZXN0X2NpZCh2c29jayk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz00NDk9c3RhdGljIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTQ1OS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo0NjA6XFx0dnEgPSB2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX0VWRU5UXTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy00NjEtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy00NzQtXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NDc1OlxcdHZpcnRxdWV1ZV9raWNrKHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfRVZFTlRdKTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy00NzYtb3V0Olxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9NTA3PXN0YXRpYyBib29sIHZpcnRpb190cmFuc3BvcnRfY2FuX21zZ3plcm9jb3B5KGludCBidWZzX251bSlcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTUxNS1cXHRpZiAodnNvY2spIHtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo1MTY6XFx0XFx0c3RydWN0IHZpcnRxdWV1ZSAqdnEgPSB2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy01MTctXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz02MzI9c3RhdGljIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTY0Mi1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYzo2NDM6XFx0dnEgPSB2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy02NDQtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz02OTk9c3RhdGljIGludCB2aXJ0aW9fdnNvY2tfdnFzX2luaXQoc3RydWN0IHZpcnRpb192c29jayAqdnNvY2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03MTUtXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NzE2OlxcdHJldCA9IHZpcnRpb19maW5kX3Zxcyh2ZGV2LCBWU09DS19WUV9NQVgsIHZzb2NrLVxcdTAwM2V2cXMsIHZxc19pbmZvLCBOVUxMKTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03MTctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz03NTU9c3RhdGljIHZvaWQgdmlydGlvX3Zzb2NrX3Zxc19kZWwoc3RydWN0IHZpcnRpb192c29jayAqdnNvY2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy03ODQtXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnNvY2stXFx1MDAzZXJ4X2xvY2spO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjc4NTpcXHR3aGlsZSAoKHNrYiA9IHZpcnRxdWV1ZV9kZXRhY2hfdW51c2VkX2J1Zih2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXSkpKVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTc4Ni1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTc4OS1cXHRtdXRleF9sb2NrKFxcdTAwMjZ2c29jay1cXHUwMDNldHhfbG9jayk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6NzkwOlxcdHdoaWxlICgoc2tiID0gdmlydHF1ZXVlX2RldGFjaF91bnVzZWRfYnVmKHZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfVFhdKSkpXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNzkxLVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9ODAwPXN0YXRpYyBpbnQgdmlydGlvX3Zzb2NrX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtODM0LVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjgzNTpcXHRpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19WU09DS19GX1NFUVBBQ0tFVCkpXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtODM2LVxcdFxcdHZzb2NrLVxcdTAwM2VzZXFwYWNrZXRfYWxsb3cgPSB0cnVlO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9OTI5PXN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0ge1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjkzMDpcXHR7IFZJUlRJT19JRF9WU09DSywgVklSVElPX0RFVl9BTllfSUQgfSxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy05MzEtXFx0eyAwIH0sXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYz05MzQ9c3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0ge1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjkzNTpcXHRWSVJUSU9fVlNPQ0tfRl9TRVFQQUNLRVRcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy05MzYtfTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTk1MT1zdGF0aWMgaW50IF9faW5pdCB2aXJ0aW9fdnNvY2tfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtOTU5LVxcdHJldCA9IHZzb2NrX2NvcmVfcmVnaXN0ZXIoXFx1MDAyNnZpcnRpb190cmFuc3BvcnQudHJhbnNwb3J0LFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjk2MDpcXHRcXHRcXHRcXHQgIFZTT0NLX1RSQU5TUE9SVF9GX0cySCk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtOTYxLVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjMtLyogSG93IGxvbmcgdG8gd2FpdCBmb3IgZ3JhY2VmdWwgc2h1dGRvd24gb2YgYSBjb25uZWN0aW9uICovXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0OiNkZWZpbmUgVlNPQ0tfQ0xPU0VfVElNRU9VVCAoOCAqIEhaKVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNS1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0zMy0jZGVmaW5lIE1BWF9DT0xMQVBTRV9MRU4gXFxcXFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzozNDpcXHRTS0JfTUFYX09SREVSKFZJUlRJT19WU09DS19TS0JfSEVBRFJPT00sIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0zNS1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0xMTk9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2J1aWxkX3NrYih2b2lkICpvcGFxdWUpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTQ2LVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNDc6XFx0aGRyLVxcdTAwM2V0cmFuc3BvcnQgPSBjcHVfdG9fbGUxNihBRl9WU09DS19UUkFOU1BPUlRfVklSVElPKTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTQ4LVxcdGhkci1cXHUwMDNlbGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpwa3RfaGRyKSk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTUxLVxcdHN3aXRjaCAobGUxNl90b19jcHUocGt0X2hkci1cXHUwMDNlb3ApKSB7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE1MjpcXHRjYXNlIFZJUlRJT19WU09DS19PUF9SRVFVRVNUOlxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNTM6XFx0Y2FzZSBWSVJUSU9fVlNPQ0tfT1BfUkVTUE9OU0U6XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE1NDpcXHRcXHRoZHItXFx1MDAzZW9wID0gY3B1X3RvX2xlMTYoQUZfVlNPQ0tfT1BfQ09OTkVDVCk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE1NS1cXHRcXHRicmVhaztcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTU2OlxcdGNhc2UgVklSVElPX1ZTT0NLX09QX1JTVDpcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTU3OlxcdGNhc2UgVklSVElPX1ZTT0NLX09QX1NIVVRET1dOOlxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNTg6XFx0XFx0aGRyLVxcdTAwM2VvcCA9IGNwdV90b19sZTE2KEFGX1ZTT0NLX09QX0RJU0NPTk5FQ1QpO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNTktXFx0XFx0YnJlYWs7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE2MDpcXHRjYXNlIFZJUlRJT19WU09DS19PUF9SVzpcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTYxOlxcdFxcdGhkci1cXHUwMDNlb3AgPSBjcHVfdG9fbGUxNihBRl9WU09DS19PUF9QQVlMT0FEKTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTYyLVxcdFxcdGJyZWFrO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNjM6XFx0Y2FzZSBWSVJUSU9fVlNPQ0tfT1BfQ1JFRElUX1VQREFURTpcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTY0OlxcdGNhc2UgVklSVElPX1ZTT0NLX09QX0NSRURJVF9SRVFVRVNUOlxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNjU6XFx0XFx0aGRyLVxcdTAwM2VvcCA9IGNwdV90b19sZTE2KEFGX1ZTT0NLX09QX0NPTlRST0wpO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNjYtXFx0XFx0YnJlYWs7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE2Ny1cXHRkZWZhdWx0Olxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNjg6XFx0XFx0aGRyLVxcdTAwM2VvcCA9IGNwdV90b19sZTE2KEFGX1ZTT0NLX09QX1VOS05PV04pO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNjktXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTgyLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxODM6XFx0XFx0aWYgKHNrYl9jb3B5X2RhdGFncmFtX2l0ZXIocGt0LCBWSVJUSU9fVlNPQ0tfU0tCX0NCKHBrdCktXFx1MDAzZW9mZnNldCxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTg0LVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZpb3ZfaXRlciwgcGF5bG9hZF9sZW4pKSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MjAzPXN0YXRpYyB1MTYgdmlydGlvX3RyYW5zcG9ydF9nZXRfdHlwZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjA1LVxcdGlmIChzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSlcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjA2OlxcdFxcdHJldHVybiBWSVJUSU9fVlNPQ0tfVFlQRV9TVFJFQU07XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTIwNy1cXHRlbHNlXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjIwODpcXHRcXHRyZXR1cm4gVklSVElPX1ZTT0NLX1RZUEVfU0VRUEFDS0VUO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMDktfVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTIxMj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZpcnRpb190cmFuc3BvcnRfYWxsb2Nfc2tiKHN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0X2luZm8gKmluZm8sXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjI0LVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyMjU6XFx0c2tiX2xlbiA9IFZJUlRJT19WU09DS19TS0JfSEVBRFJPT007XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTIyNi1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDEtXFx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJ3NrYl9zZXRfb3duZXJfdygpJy4gVGhlIG9ubHkgY2FzZVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDI6XFx0ICogd2hlbiAndnNrJyA9PSBOVUxMIGlzIFZJUlRJT19WU09DS19PUF9SU1QgY29udHJvbCBtZXNzYWdlXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0My1cXHQgKiB3aXRob3V0IHBheWxvYWQuXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjY2LVxcdFxcdGlmIChtc2dfZGF0YV9sZWZ0KGluZm8tXFx1MDAzZW1zZykgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNjc6XFx0XFx0ICAgIGluZm8tXFx1MDAzZXR5cGUgPT0gVklSVElPX1ZTT0NLX1RZUEVfU0VRUEFDS0VUKSB7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI2OC1cXHRcXHRcXHRzdHJ1Y3QgdmlydGlvX3Zzb2NrX2hkciAqaGRyID0gdmlydGlvX3Zzb2NrX2hkcihza2IpO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzozNi40MDE1NDkxMTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODI0MTU2MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSB2c29ja19jb25uZWN0IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggaW1wYWN0aW5nIGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgLCBzcGVjaWZpY2FsbHkgd2hlbiBgQ09ORklHX1ZTT0NLRVRTYCBpcyBlbmFibGVkLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgd2hhdCdzIGNoYW5nZWQsIGFuZCBob3cgY3JpdGljYWwgaXMgaXQ/XG5cblRoZSBvbmx5IGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGB2c29ja19jb25uZWN0YC4gTGV0J3Mgc2VlIGhvdyBgdnNvY2tfY29ubmVjdGAgaXMgY2FsbGVkLiBBaCwgcmlnaHQsIGluIGBhZl92c29jay5jYCBpdHNlbGYuIFRoZSBgdnNvY2tfc3RyZWFtX29wc2AgYW5kIGB2c29ja19zZXFwYWNrZXRfb3BzYCBzdHJ1Y3R1cmVzIGRlZmluZSBgLmNvbm5lY3QgPSB2c29ja19jb25uZWN0YC4gU28sIGEgdXNlci1zcGFjZSBgY29ubmVjdCgpYCBzeXN0ZW0gY2FsbCBldmVudHVhbGx5IGhpdHMgdGhpcyBmdW5jdGlvbiwgYXMgZXhwZWN0ZWQuXG5cbk5vdywgd2hhdCdzIHRoZSBwYXRjaCAqZG9pbmcqIGluIGB2c29ja19jb25uZWN0YD8gSSBzZWUgdHdvIHByaW1hcnkgY2hhbmdlczpcblxuMS4gIEl0J3MgYWx0ZXJpbmcgdGhlIHN0YXRlIGNoZWNrLiBUaGUgb3JpZ2luYWwgY29kZSBicm9rZSBvdXQgb2YgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdCBpZiB0aGUgc29ja2V0IHdhcyBhbHJlYWR5IGBUQ1BfRVNUQUJMSVNIRURgLiBOb3csIGl0IGFsc28gYnJlYWtzIGlmIHRoZSBzb2NrZXQgaXMgYFRDUF9DTE9TSU5HYC4gSG1tbSwgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBoYW5kbGUgYFRDUF9DTE9TSU5HYCBzdGF0ZXMgbW9yZSBncmFjZWZ1bGx5LlxuMi4gIEl0J3MgYWx0ZXJpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGxvZ2ljLiBJdCB1c2VkIHRvIGNoZWNrIGZvciBhbiBlcnJvciBhbmQgdHJhbnNpdGlvbiB0byBgVENQX0NMT1NFYCBpZiB0aGVyZSB3YXMgb25lLiBOb3csIHRoZSB0cmFuc2l0aW9uIHRvIGBUQ1BfQ0xPU0VgIG9ubHkgaGFwcGVucyAqaWYqIHRoZXJlJ3MgYW4gZXJyb3IgKmFuZCogdGhlIHNvY2tldCBpc24ndCBhbHJlYWR5IGBUQ1BfRVNUQUJMSVNIRURgIG9yIGBUQ1BfQ0xPU0lOR2AuIFRoaXMgaW1wbGllcyB0aGV5J3JlIHRyeWluZyB0byBwcmV2ZW50IHByZW1hdHVyZSBzb2NrZXQgY2xvc3VyZSBpbiBjZXJ0YWluIGNvbm5lY3Rpb24gc2NlbmFyaW9zLlxuXG5TbywgdGhpcyBwYXRjaCBjaGFuZ2VzIHNvY2tldCBzdGF0ZSB0cmFuc2l0aW9ucyB3aXRoaW4gYHZzb2NrX2Nvbm5lY3RgLiBHaXZlbiB0aGF0IEFGX1ZTT0NLIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBhbmQgaXQncyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSB3aXRoIHZpcnRpby12c29jayBvciB2c29ja19sb29wYmFjay4gQWxzbywgc2luY2UgU3l6a2FsbGVyIGlzIGFjdGl2ZWx5IHRlc3RpbmcgdGhpcyB3aXRoIHZhcmlvdXMgc29ja2V0IGNhbGxzIGluY2x1ZGluZyBgY29ubmVjdCgpYCwgdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGlzIHNpZ25pZmljYW50LiBJdCdzIGNvcmUsIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGFmZmVjdCBzdGFiaWxpdHkgYW5kIGVycm9yIGhhbmRsaW5nLlxuXG5UaGVyZWZvcmUsIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksICoqdHJ1ZSoqIVxuXG5Ob3csIGZvciBGb2N1c1N5bWJvbHMsIGB2c29ja19jb25uZWN0YCBpcyB0aGUga2V5LiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIG1vZGlmaWVkPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlc3Qgb2YgYGFmX3Zzb2NrLmNgIGFuZCByZWxhdGVkIGZpbGVzLCBidXQgdGhlIHBhdGNoIHNlZW1zIGZvY3VzZWQgc29sZWx5IG9uIGB2c29ja19jb25uZWN0YC4gTm93IGxldCdzIHNlZSB3aGF0IHRoZSBjYWxsZXJzIGFyZSB3aXRoaW4gYGFmX3Zzb2NrLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQzNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzo0MS4yMjU3MDc1NDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMTA3NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnNvY2tfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjA5PXN0YXRpYyBERUZJTkVfTVVURVgodnNvY2tfcmVnaXN0ZXJfbXV0ZXgpO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzNS1cXHQoKChzcmMpLVxcdTAwM2Vzdm1fY2lkIF4gKGRzdCktXFx1MDAzZXN2bV9wb3J0KSAlIFZTT0NLX0hBU0hfU0laRSlcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM2OiNkZWZpbmUgdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoc3JjLCBkc3QpXFx0XFx0XFxcXFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzc6XFx0KFxcdTAwMjZ2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfQ09OTl9IQVNIKHNyYywgZHN0KV0pXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzODojZGVmaW5lIHZzb2NrX2Nvbm5lY3RlZF9zb2NrZXRzX3Zzayh2c2spXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzk6XFx0dnNvY2tfY29ubmVjdGVkX3NvY2tldHMoXFx1MDAyNih2c2spLVxcdTAwM2VyZW1vdGVfYWRkciwgXFx1MDAyNih2c2spLVxcdTAwM2Vsb2NhbF9hZGRyKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNDAtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjQyPUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2JpbmRfdGFibGUpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDM6c3RydWN0IGxpc3RfaGVhZCB2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfSEFTSF9TSVpFXTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ0OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0NS1ERUZJTkVfU1BJTkxPQ0sodnNvY2tfdGFibGVfbG9jayk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjYwPXN0YXRpYyB2b2lkIHZzb2NrX2luaXRfdGFibGVzKHZvaWQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY2LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjc6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodnNvY2tfY29ubmVjdGVkX3RhYmxlKTsgaSsrKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjg6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZzb2NrX2Nvbm5lY3RlZF90YWJsZVtpXSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2OS19XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzIwPV9fdnNvY2tfZmluZF9jb25uZWN0ZWRfc29ja2V0X25ldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMjQtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjMyNTpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzaywgdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoc3JjLCBkc3QpLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMjYtXFx0XFx0XFx0ICAgIGNvbm5lY3RlZF90YWJsZSkge1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTM0Nj12b2lkIHZzb2NrX2luc2VydF9jb25uZWN0ZWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzQ3LXtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzQ4OlxcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSB2c29ja19jb25uZWN0ZWRfc29ja2V0cyhcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzQ5LVxcdFxcdFxcdTAwMjZ2c2stXFx1MDAzZXJlbW90ZV9hZGRyLCBcXHUwMDI2dnNrLVxcdTAwM2Vsb2NhbF9hZGRyKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz00ODM9dm9pZCB2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00ODktXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ5MDpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh2c29ja19jb25uZWN0ZWRfdGFibGUpOyBpKyspIHtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDkxLVxcdFxcdHN0cnVjdCB2c29ja19zb2NrICp2c2s7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ5MjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzaywgXFx1MDAyNnZzb2NrX2Nvbm5lY3RlZF90YWJsZVtpXSxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDkzLVxcdFxcdFxcdFxcdCAgICBjb25uZWN0ZWRfdGFibGUpIHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz01OTk9aW50IHZzb2NrX2Fzc2lnbl90cmFuc3BvcnQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgc3RydWN0IHZzb2NrX3NvY2sgKnBzaylcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy02NzItXFx0XFx0LyogdHJhbnNwb3J0LVxcdTAwM2VyZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBzb2NrIGxvY2sgYWNxdWlyZWQuXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjY3MzpcXHRcXHQgKiBUaGlzIHBhdGggY2FuIG9ubHkgYmUgdGFrZW4gZHVyaW5nIHZzb2NrX2Nvbm5lY3QoKSwgd2hlcmUgd2VcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNjc0LVxcdFxcdCAqIGhhdmUgYWxyZWFkeSBoZWxkIHRoZSBzb2NrIGxvY2suIEluIHRoZSBvdGhlciBjYXNlcywgdGhpc1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTY4Mi1cXHRcXHQgKiBzdGF0ZSwgc2luY2Ugd2UgYXJlIHJlYXNzaWduaW5nIHRoZSBzb2NrZXQgdG8gYSBuZXcgdHJhbnNwb3J0XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjY4MzpcXHRcXHQgKiBkdXJpbmcgdnNvY2tfY29ubmVjdCgpLCBsZXQncyByZXNldCB0aGVzZSBmaWVsZHMgdG8gaGF2ZSBhXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTY4NC1cXHRcXHQgKiBjbGVhbiBzdGF0ZS5cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz04OTc9c3RhdGljIGludCBfX3Zzb2NrX2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTMzLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5MzQ6c3RhdGljIHZvaWQgdnNvY2tfY29ubmVjdF90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTkzNS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9OTM2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk3NS1cXHRXUklURV9PTkNFKHZzay1cXHUwMDNlcGVlcl9zaHV0ZG93biwgMCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjk3NjpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2dnNrLVxcdTAwM2Vjb25uZWN0X3dvcmssIHZzb2NrX2Nvbm5lY3RfdGltZW91dCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk3Ny1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2dnNrLVxcdTAwM2VwZW5kaW5nX3dvcmssIHZzb2NrX3BlbmRpbmdfd29yayk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTA5MD1FWFBPUlRfU1lNQk9MX0dQTCh2c29ja19zdHJlYW1faGFzX2RhdGEpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMDkxLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxMDkyOnM2NCB2c29ja19jb25uZWN0aWJsZV9oYXNfZGF0YShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMDkzLXtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMTAzLX1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTEwNDpFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19jb25uZWN0aWJsZV9oYXNfZGF0YSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTExMDUtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTY3Mj1zdGF0aWMgaW50IHZzb2NrX3RyYW5zcG9ydF9jYW5jZWxfcGt0KHN0cnVjdCB2c29ja19zb2NrICp2c2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTY4MS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTY4MjpzdGF0aWMgdm9pZCB2c29ja19jb25uZWN0X3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNjgzLXtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNzAzLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNzA0OnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTcwNS1cXHRcXHRcXHQgaW50IGFkZHJfbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTk5Nj1zdGF0aWMgdm9pZCB2c29ja191cGRhdGVfYnVmZmVyX3NpemUoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMDEyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMDEzOnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdGlibGVfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMDE0LVxcdFxcdFxcdFxcdFxcdGludCBsZXZlbCxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTI2LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMTI3OnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdGlibGVfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTI4LVxcdFxcdFxcdFxcdFxcdGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjE4NS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjE4NjpzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3RpYmxlX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTg3LVxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMzQ3LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzQ4OnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdGlibGVfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjM0OS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjM2NC1cXHRcXHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCB3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzY1OlxcdFxcdGRhdGEgPSB2c29ja19jb25uZWN0aWJsZV9oYXNfZGF0YSh2c2spO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMzY2LVxcdFxcdGlmIChkYXRhICE9IDApXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjQxNT1zdGF0aWMgaW50IF9fdnNvY2tfc3RyZWFtX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQ1Mi1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ1MzpcXHRcXHRlcnIgPSB2c29ja19jb25uZWN0aWJsZV93YWl0X2RhdGEoc2ssIFxcdTAwMjZ3YWl0LCB0aW1lb3V0LFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNDU0LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnJlY3ZfZGF0YSwgdGFyZ2V0KTtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNDk0PXN0YXRpYyBpbnQgX192c29ja19zZXFwYWNrZXRfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTA4LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNTA5OlxcdGVyciA9IHZzb2NrX2Nvbm5lY3RpYmxlX3dhaXRfZGF0YShzaywgXFx1MDAyNndhaXQsIHRpbWVvdXQsIE5VTEwsIDApO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTEwLVxcdGlmIChlcnIgXFx1MDAzYz0gMClcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNTQ0PWludFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNTQ1Ol9fdnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI1NDYtXFx0XFx0XFx0ICAgIGludCBmbGFncylcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjExPWludFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjEyOnZzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjEzLVxcdFxcdFxcdCAgaW50IGZsYWdzKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MjMtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2MjQ6XFx0cmV0dXJuIF9fdnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyhzb2NrLCBtc2csIGxlbiwgZmxhZ3MpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjI1LX1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjYyNjpFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYyNy1cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3N0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY1Ni1cXHQuYmluZCA9IHZzb2NrX2JpbmQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NTc6XFx0LmNvbm5lY3QgPSB2c29ja19jb25uZWN0LFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjU4LVxcdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NjQtXFx0LnNodXRkb3duID0gdnNvY2tfc2h1dGRvd24sXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NjU6XFx0LnNldHNvY2tvcHQgPSB2c29ja19jb25uZWN0aWJsZV9zZXRzb2Nrb3B0LFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjY2OlxcdC5nZXRzb2Nrb3B0X2l0ZXIgPSB2c29ja19jb25uZWN0aWJsZV9nZXRzb2Nrb3B0LFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjY3OlxcdC5zZW5kbXNnID0gdnNvY2tfY29ubmVjdGlibGVfc2VuZG1zZyxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY2ODpcXHQucmVjdm1zZyA9IHZzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2csXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NjktXFx0Lm1tYXAgPSBzb2NrX25vX21tYXAsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjY3ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB2c29ja19zZXFwYWNrZXRfb3BzID0ge1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NzgtXFx0LmJpbmQgPSB2c29ja19iaW5kLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjc5OlxcdC5jb25uZWN0ID0gdnNvY2tfY29ubmVjdCxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY4MC1cXHQuc29ja2V0cGFpciA9IHNvY2tfbm9fc29ja2V0cGFpcixcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjg2LVxcdC5zaHV0ZG93biA9IHZzb2NrX3NodXRkb3duLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjg3OlxcdC5zZXRzb2Nrb3B0ID0gdnNvY2tfY29ubmVjdGlibGVfc2V0c29ja29wdCxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY4ODpcXHQuZ2V0c29ja29wdF9pdGVyID0gdnNvY2tfY29ubmVjdGlibGVfZ2V0c29ja29wdCxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY4OTpcXHQuc2VuZG1zZyA9IHZzb2NrX2Nvbm5lY3RpYmxlX3NlbmRtc2csXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2OTA6XFx0LnJlY3Ztc2cgPSB2c29ja19jb25uZWN0aWJsZV9yZWN2bXNnLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjkxLVxcdC5tbWFwID0gc29ja19ub19tbWFwLFxcbi0tXFxubmV0L3Ztd192c29jay9kaWFnLmM9NDg9c3RhdGljIGludCB2c29ja19kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L3Ztd192c29jay9kaWFnLmMtMTAxLVxcdC8qIENvbm5lY3RlZCB0YWJsZSAoYWNjZXB0ZWQgY29ubmVjdGlvbnMpICovXFxubmV0L3Ztd192c29jay9kaWFnLmM6MTAyOlxcdHdoaWxlIChidWNrZXQgXFx1MDAzYyBBUlJBWV9TSVpFKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSkpIHtcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYzoxMDM6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IFxcdTAwMjZ2c29ja19jb25uZWN0ZWRfdGFibGVbYnVja2V0XTtcXG5uZXQvdm13X3Zzb2NrL2RpYWcuYy0xMDQtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYz0xOTM9c3RhdGljIGludCBodnNfY2hhbm5lbF9yZWFkYWJsZV9wYXlsb2FkKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuKVxcbi0tXFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTk4LVxcdFxcdC8qIEF0IGxlYXN0IHdlIGhhdmUgMSBieXRlIHRvIHJlYWQuIFdlIGRvbid0IG5lZWQgdG8gcmV0dXJuXFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmM6MTk5OlxcdFxcdCAqIHRoZSBleGFjdCByZWFkYWJsZSBieXRlczogc2VlIHZzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2coKSAtXFx1MDAzZVxcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jLTIwMC1cXHRcXHQgKiB2c29ja19zdHJlYW1faGFzX2RhdGEoKS5cXG4tLVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYnBmLmM9MjU9c3RhdGljIGJvb2wgdnNvY2tfaGFzX2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L3Ztd192c29jay92c29ja19icGYuYy0yOS1cXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2JwZi5jOjMwOlxcdHJldCA9IHZzb2NrX2Nvbm5lY3RpYmxlX2hhc19kYXRhKHZzayk7XFxubmV0L3Ztd192c29jay92c29ja19icGYuYy0zMS1cXHRpZiAocmV0IFxcdTAwM2UgMClcXG4tLVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYnBmLmM9NjE9c3RhdGljIGludCBfX3Zzb2NrX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sIGludCBmbGFncylcXG4tLVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYnBmLmMtNjYtXFx0aWYgKHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNIHx8IHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU0VRUEFDS0VUKVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYnBmLmM6Njc6XFx0XFx0ZXJyID0gX192c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKHNvY2ssIG1zZywgbGVuLCBmbGFncyk7XFxubmV0L3Ztd192c29jay92c29ja19icGYuYy02OC1cXHRlbHNlIGlmIChzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX0RHUkFNKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzo0MS4yNzE4MjIzMjFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjQ2MTk4MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWU09DSyBDb25uZWN0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGB2c29ja19jb25uZWN0YCBhbmQgYHZzb2NrX2Nvbm5lY3RfdGltZW91dGAgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBgdnNvY2tfY29ubmVjdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGZlYXR1cmVzIGFyZSBlbmFibGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfVlNPQ0tFVFNgIGlzIGVuYWJsZWQsIGFzIHRoaXMgaXMgdGhlIHByaW1hcnkgZW5hYmxlciBmb3IgYGFmX3Zzb2NrLmNgLiBGdXJ0aGVybW9yZSwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1ZTT0NLRVRTX0xPT1BCQUNLYCBvciBgQ09ORklHX1ZJUlRJT19WU09DS0VUU2AgYXJlIGFsc28gZW5hYmxlZCwgYXMgdGhlc2Ugb3B0aW9ucyBwcm92aWRlIHRoZSBzcGVjaWZpYyB0cmFuc3BvcnRzIHRoYXQgdXRpbGl6ZSBWU09DSy4gSW4gZXNzZW5jZSwgYFZTT0NLRVRTYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIGVuYWJsaW5nIHRoZSBjb3JlIGBhZl92c29jay5jYCBtb2R1bGUgdGhhdCBob3VzZXMgdGhlIGB2c29ja19jb25uZWN0YCBmdW5jdGlvbi5cblxuTm93LCBsZXQncyBzb2xpZGlmeSB0aGUgdW5kZXJzdGFuZGluZy4gVGhlIHByb3ZpZGVkIGNvbnRleHQgaW5kaWNhdGVzIHRoaXMgaXMgd29ydGggZnV6emluZyBhbmQgdGhhdCB0aGUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBwcmVzZW50LiBgVlNPQ0tFVFNgLCBgVlNPQ0tFVFNfTE9PUEJBQ0tgLCBhbmQgYFZJUlRJT19WU09DS0VUU2AgYXJlIHRoZSByZWxldmFudCBlbmFibGluZyBjb25maWdzLiBUaGUgYHZzb2NrX2Nvbm5lY3RgIGZ1bmN0aW9uIGlzIHRoZSB0YXJnZXRlZCBzeW1ib2wuXG5cblRoZSByZWFzb25pbmcgcHJvdmlkZWQgY2xhcmlmaWVzIHRoZSBjb3JlIGltcGFjdDogVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIHNvY2tldCBzdGF0ZSBjaGVja3Mgd2l0aGluIGB2c29ja19jb25uZWN0YCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGhvdyB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2NlZWRzIGFuZCBob3cgc29ja2V0IGVycm9ycyBhcmUgaGFuZGxlZC4gVGhlIGNoYW5nZSBhdm9pZHMgYW4gdW53YW50ZWQgc3RhdGUgcmVzZXQgaW4gY2VydGFpbiBlcnJvciBjb25kaXRpb25zIHdoZW4gdGhlIHNvY2tldCBzdGF0ZSAoYHNrX3N0YXRlYCkgaXMgYFRDUF9DTE9TSU5HYC4gVGhpcyBjbGVhcmx5IGFmZmVjdHMgdGhlIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudCB3aXRoaW4gdGhlIEFGX1ZTT0NLIG5ldHdvcmsgYWRkcmVzcyBmYW1pbHkuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGlzc3VlLlxuXG5GaW5hbGx5LCBoYXZpbmcgdmFsaWRhdGVkIHRoZSBhbmFseXNpcyBhbmQgY29uZmlybWVkIHRoZSBjcml0aWNhbCBlbGVtZW50cywgaXQncyB0aW1lIHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjkyMCwiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MzM6NDQuNTE4MDIzMTM0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYxOTUzNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHZzb2NrX2Nvbm5lY3QoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMsIGNoYW5naW5nIHRoZSBzdGF0ZSB2YWxpZGF0aW9uIGxvZ2ljIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIGJ5IGFjY29tbW9kYXRpbmcgdGhlIFRDUF9DTE9TSU5HIHNvY2tldCBzdGF0ZS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBBRl9WU09DSyBzb2NrZXQgbGlmZWN5Y2xlIHRyYW5zaXRpb25zIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHZzb2NrX2Nvbm5lY3QoKSBpbiBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMsIGNoYW5naW5nIHRoZSBzdGF0ZSB2YWxpZGF0aW9uIGxvZ2ljIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIGJ5IGFjY29tbW9kYXRpbmcgdGhlIFRDUF9DTE9TSU5HIHNvY2tldCBzdGF0ZS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBBRl9WU09DSyBzb2NrZXQgbGlmZWN5Y2xlIHRyYW5zaXRpb25zIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzo0NC42MDQyMjc2ODVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTA0NjA0OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjI6MzM6NDQuNjA0ODU1Nzc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTU1MDM5NzIzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN0YXRlIG1hY2hpbmUgaGFuZGxpbmcgaW4gdnNvY2tfY29ubmVjdCgpIGJ5IHRyZWF0aW5nIFRDUF9DTE9TSU5HIHNpbWlsYXJseSB0byBUQ1BfRVNUQUJMSVNIRUQgd2hlbiBjaGVja2luZyBzay1cXHUwMDNlc2tfc3RhdGUgdXBvbiB3YWtpbmcgZnJvbSBjb25uZWN0aW9uIHdhaXQgYW5kIGVycm9yIGhhbmRsaW5nLiBUaGlzIGNoYW5nZSBhZmZlY3RzIHNvY2tldCBjb250cm9sIGZsb3cgYW5kIHN0YXRlIHRyYW5zaXRpb25zIG9ubHkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgYnVmZmVyIGNvcHlpbmcgb3Igc2l6aW5nLCB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzL3BhZGRpbmcgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MTdlZDQ3NjI5NTQwZTgyNzc4ZjA4MGE5ODY2NDFlNzcyNGU2MTYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAyMjozMzoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuaW5kZXggZjg0MDQ5OGI1OGFmYi4uZWVjNWRkNmRhZWJiMSAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuKysrIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5AQCAtMTgzNCwyMyArMTgzNCwyMCBAQCBzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4gXHRcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xuIFx0XHRsb2NrX3NvY2soc2spO1xuIFxuLVx0XHQvKiBDb25uZWN0aW9uIGVzdGFibGlzaGVkLiBXaGF0ZXZlciBoYXBwZW5zIHRvIHNvY2tldCBvbmNlIHdlXG4tXHRcdCAqIHJlbGVhc2UgaXQsIHRoYXQncyBub3QgY29ubmVjdCgpJ3MgY29uY2Vybi4gTm8gbmVlZCB0byBnb1xuK1x0XHQvKiBDb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZC4gV2hhdGV2ZXIgaGFwcGVucyB0byBzb2NrZXQgb25jZVxuK1x0XHQgKiB3ZSByZWxlYXNlIGl0LCB0aGF0J3Mgbm90IGNvbm5lY3QoKSdzIGNvbmNlcm4uIE5vIG5lZWQgdG8gZ29cbiBcdFx0ICogaW50byBzaWduYWwgYW5kIHRpbWVvdXQgaGFuZGxpbmcuIENhbGwgaXQgYSBkYXkuXG4gXHRcdCAqXG4gXHRcdCAqIE5vdGUgdGhhdCBhbGxvd2luZyB0byBcInJlc2V0XCIgYW4gYWxyZWFkeSBlc3RhYmxpc2hlZCBzb2NrZXRcbiBcdFx0ICogaGVyZSBpcyByYWN5IGFuZCBpbnNlY3VyZS5cbiBcdFx0ICovXG4tXHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpXG4rXHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQgfHxcbitcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TSU5HKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHQvKiBJZiBjb25uZWN0aW9uIHdhcyBfbm90XyBlc3RhYmxpc2hlZCBhbmQgYSBzaWduYWwvdGltZW91dCBjYW1lXG4gXHRcdCAqIHRvIGJlLCB3ZSB3YW50IHRoZSBzb2NrZXQncyBzdGF0ZSByZXNldC4gVXNlciBzcGFjZSBtYXkgd2FudFxuIFx0XHQgKiB0byByZXRyeS5cbi1cdFx0ICpcbi1cdFx0ICogc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIGltcGxpZXMgdGhhdCBzb2NrZXQgaXMgbm90IG9uXG4tXHRcdCAqIHZzb2NrX2Nvbm5lY3RlZF90YWJsZS4gV2Uga2VlcCB0aGUgYmluZGluZyBhbmQgdGhlIHRyYW5zcG9ydFxuLVx0XHQgKiBhc3NpZ25lZC5cbiBcdFx0ICovXG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSB8fCB0aW1lb3V0ID09IDApIHtcbiBcdFx0XHRlcnIgPSB0aW1lb3V0ID09IDAgPyAtRVRJTUVET1VUIDogc29ja19pbnRyX2Vycm5vKHRpbWVvdXQpO1xuQEAgLTE4NzUsNyArMTg3Miw4IEBAIHN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbiBcdH1cbiBcbiBcdGVyciA9IHNvY2tfZXJyb3Ioc2spO1xuLVx0aWYgKGVycikge1xuK1x0aWYgKGVyciBcdTAwMjZcdTAwMjZcbitcdCAgICBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TSU5HKSB7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gVENQX0NMT1NFO1xuIFx0XHRzb2NrLVx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzo0NC42MDQ4NTY5NTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTI2MDM5MDA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5lZWQgZm9yIERlZGljYXRlZCBLTVNBTiBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGJlaW5nIGFza2VkIGlmIHRoaXMga2VybmVsIHBhdGNoIGluIGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgIG5lZWRzIHNwZWNpYWwgS01TQU4gZnV6emluZywgb3IgaWYgS0FTQU4gYW5kIHN0YW5kYXJkIGZ1enppbmcgYXJlIHN1ZmZpY2llbnQuIFJpZ2h0LCBsZXQncyBicmVhayBpdCBkb3duLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGRvZXMuIEl0IGxvb2tzIGxpa2UgaXQncyBpbiB0aGUgYHZzb2NrX2Nvbm5lY3RgIGZ1bmN0aW9uLiBUaGUgY29kZSBibG9jayBhZGRyZXNzZXMgc29tZSBlZGdlIGNhc2VzIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgdGltZW91dHMgYW5kIHNpZ25hbHMgZHVyaW5nIHRoZSBjb25uZWN0aW9uIHByb2Nlc3MuIEl0IGFwcGVhcnMgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIG1pc3NpbmcgYSBzdGF0ZSBjaGVjay4gVGhleSd2ZSB1cGRhdGVkIHRoaXMgdG8gYWxsb3cgZXN0YWJsaXNoZWQgb3IgY2xvc2luZyBzb2NrZXRzLiBUaGVuIHdlIHNlZSBhbiBgZXJyYCBjaGVjayBhbmQgYSBzdGF0ZSB0cmFuc2l0aW9uIGJhY2sgdG8gYFRDUF9DTE9TRWAuIFRoZSBjb2RlIG5vdyBhdm9pZHMgdGhlIHN0YXRlIGNoZWNrIHdoZW4gdGhlIHNvY2tldCBpcyBpbiBhbiBlc3RhYmxpc2hlZCBvciBjbG9zaW5nIHN0YXRlLiBJdCdzIGVzc2VudGlhbGx5IHJlZmluaW5nIHRoZSBlcnJvciBoYW5kbGluZyBpbiB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGZsb3cuIFRoZXkgYXJlIGNvcnJlY3Rpbmcgc29ja2V0IHN0YXRlIGhhbmRsaW5nIGR1cmluZyBjb25uZWN0aW9uIHRpbWVvdXRzIGFuZCBpbnRlcnJ1cHRzLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBmaWxlIHBhdGggYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AsIGl0J3MgY2xlYXIgdGhpcyBpcyBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBmb3IgdnNvY2ssIHdoaWNoIGlzIGEgdmlydHVhbCBzb2NrZXQgaW1wbGVtZW50YXRpb24gdHlwaWNhbGx5IHVzZWQgaW4gdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLiBOZXR3b3JraW5nIGNvZGUgaXMgb2Z0ZW4gYSB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBpdCBpcyBjb21wbGV4LCBhbmQgY2FuIGJlIHN1YmplY3QgdG8gZXh0ZXJuYWwgaW5wdXQsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBwbGFjZSB0byB0cmlnZ2VyIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBUaGUgY29kZSBpdHNlbGYgdG91Y2hlcyBvbiBzb2NrZXQgc3RhdGVzIGFuZCBjb25uZWN0aW9uIHRpbWVvdXRzLCB3aGljaCBoaW50cyBhdCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBjb25jdXJyZW5jeSBwcm9ibGVtcy5cblxuU28sIGRvIHdlICpuZWVkKiBkZWRpY2F0ZWQgS01TQU4gZnV6emluZz8gTXkgZ3V0IHNheXMgXCJwcm9iYWJseSBub3QgKmp1c3QqIGZvciB0aGlzXCIuIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24ndCBzY3JlYW0gXCJLTVNBTiB2dWxuZXJhYmlsaXR5XCIgdG8gbWUuIEtBU0FOIHNob3VsZCBiZSBlbm91Z2ggZm9yIGJhc2ljIG1lbW9yeSBzYWZldHkgY2hlY2tzIGFuZCBkZXRlY3RpbmcgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgaXNzdWVzIGluIHRoaXMgYXJlYS4gV2UgY2FuIHVzZSBzdGFuZGFyZCBmdXp6aW5nIHRlY2huaXF1ZXMuIFRoaXMgaXMgYmVjYXVzZSBLQVNBTiBpcyBhbHJlYWR5IGVuYWJsZWQsIHNvIHdlIHdpbGwgbGlrZWx5IGNhdGNoIGFueSBjb21tb24gbWVtb3J5IGVycm9ycyB3aXRob3V0IGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiBCdXQgSSBuZWVkIHRvIGJlIG1vcmUgdGhvcm91Z2gsIHNvIEknbGwgYWxzbyBjb25zaWRlciB0aGlzOiBpZiB0aGlzIHZzb2NrIGNvZGUgaXMgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgYSBsYXJnZXIgc3lzdGVtLCBzYXkgYSBoeXBlcnZpc29yLCBvciBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbW1vbmx5IGNhbGxlZCB3aXRoIG1hbnkgZXh0ZXJuYWwgaW5wdXRzLCBpdCBtYXkgYmUgd29ydGh3aGlsZSB0byBpbnZlc3RpZ2F0ZSBmdXp6aW5nIGFuZCBLTVNBTi4gS01TQU4gaXMgbW9yZSBzcGVjaWZpYyBmb3Iga2VybmVsIG1lbW9yeSBzYWZldHkuIFNvLCBJZiBJIHNlZSBzb21lIHBvdGVudGlhbCBoZXJlLCBJIGNhbiBhZGQgaXQgdG8gdGhlIGxpc3QuIEknbGwgbmVlZCB0byBrbm93IG1vcmUgYWJvdXQgdGhlIGJyb2FkZXIgc3lzdGVtIGNvbnRleHQgdG8gbWFrZSBhIGZpbmFsIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozMzo1My44NjUyNTA0MTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgwMDpcXHRcXHQvKiBUaGUgcmVjZWl2ZSBwYXRoIHdpbGwgaGFuZGxlIGFsbCBjb21tdW5pY2F0aW9uIHVudGlsIHdlIGFyZSBhYmxlIHRvXFxuMTgwMTpcXHRcXHQgKiBlbnRlciB0aGUgY29ubmVjdGVkIHN0YXRlLiAgSGVyZSB3ZSB3YWl0IGZvciB0aGUgY29ubmVjdGlvbiB0byBiZVxcbjE4MDI6XFx0XFx0ICogY29tcGxldGVkIG9yIGEgbm90aWZpY2F0aW9uIG9mIGFuIGVycm9yLlxcbjE4MDM6XFx0XFx0ICovXFxuMTgwNDpcXHRcXHR0aW1lb3V0ID0gdnNrLVxcdTAwM2Vjb25uZWN0X3RpbWVvdXQ7XFxuMTgwNTpcXHRcXHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCBcXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcXG4xODA2OlxcdFxcbjE4MDc6XFx0XFx0LyogSWYgdGhlIHNvY2tldCBpcyBhbHJlYWR5IGNsb3Npbmcgb3IgaXQgaXMgaW4gYW4gZXJyb3Igc3RhdGUsIHRoZXJlXFxuMTgwODpcXHRcXHQgKiBpcyBubyBwb2ludCBpbiB3YWl0aW5nLlxcbjE4MDk6XFx0XFx0ICovXFxuMTgxMDpcXHRcXHR3aGlsZSAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCBcXHUwMDI2XFx1MDAyNlxcbjE4MTE6XFx0XFx0ICAgICAgIHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0lORyBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfZXJyID09IDApIHtcXG4xODEyOlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE9fTk9OQkxPQ0spIHtcXG4xODEzOlxcdFxcdFxcdFxcdC8qIElmIHdlJ3JlIG5vdCBnb2luZyB0byBibG9jaywgd2Ugc2NoZWR1bGUgYSB0aW1lb3V0XFxuMTgxNDpcXHRcXHRcXHRcXHQgKiBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHRpbWVvdXQgb24gdGhlIGNvbm5lY3Rpb25cXG4xODE1OlxcdFxcdFxcdFxcdCAqIGF0dGVtcHQsIGluIGNhc2UgdGhlIHBlZXIgZG9lc24ndCByZXNwb25kIGluIGFcXG4xODE2OlxcdFxcdFxcdFxcdCAqIHRpbWVseSBtYW5uZXIuIFdlIGhvbGQgb24gdG8gdGhlIHNvY2tldCB1bnRpbCB0aGVcXG4xODE3OlxcdFxcdFxcdFxcdCAqIHRpbWVvdXQgZmlyZXMuXFxuMTgxODpcXHRcXHRcXHRcXHQgKi9cXG4xODE5OlxcdFxcdFxcdFxcdHNvY2tfaG9sZChzayk7XFxuMTgyMDpcXHRcXG4xODIxOlxcdFxcdFxcdFxcdC8qIElmIHRoZSB0aW1lb3V0IGZ1bmN0aW9uIGlzIGFscmVhZHkgc2NoZWR1bGVkLFxcbjE4MjI6XFx0XFx0XFx0XFx0ICogcmVzY2hlZHVsZSBpdCwgdGhlbiB1bmdyYWIgdGhlIHNvY2tldCByZWZjb3VudCB0b1xcbjE4MjM6XFx0XFx0XFx0XFx0ICoga2VlcCBpdCBiYWxhbmNlZC5cXG4xODI0OlxcdFxcdFxcdFxcdCAqL1xcbjE4MjU6XFx0XFx0XFx0XFx0aWYgKG1vZF9kZWxheWVkX3dvcmsoc3lzdGVtX3BlcmNwdV93cSwgXFx1MDAyNnZzay1cXHUwMDNlY29ubmVjdF93b3JrLFxcbjE4MjY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0aW1lb3V0KSlcXG4xODI3OlxcdFxcdFxcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4xODI4OlxcdFxcbjE4Mjk6XFx0XFx0XFx0XFx0LyogU2tpcCBhaGVhZCB0byBwcmVzZXJ2ZSBlcnJvciBjb2RlIHNldCBhYm92ZS4gKi9cXG4xODMwOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3dhaXQ7XFxuMTgzMTpcXHRcXHRcXHR9XFxuMTgzMjpcXHRcXG4xODMzOlxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuMTgzNDpcXHRcXHRcXHR0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTtcXG4xODM1OlxcdFxcdFxcdGxvY2tfc29jayhzayk7XFxuMTgzNjpcXHRcXG4xODM3OlxcdFxcdFxcdC8qIENvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLiBXaGF0ZXZlciBoYXBwZW5zIHRvIHNvY2tldCBvbmNlXFxuMTgzODpcXHRcXHRcXHQgKiB3ZSByZWxlYXNlIGl0LCB0aGF0J3Mgbm90IGNvbm5lY3QoKSdzIGNvbmNlcm4uIE5vIG5lZWQgdG8gZ29cXG4xODM5OlxcdFxcdFxcdCAqIGludG8gc2lnbmFsIGFuZCB0aW1lb3V0IGhhbmRsaW5nLiBDYWxsIGl0IGEgZGF5LlxcbjE4NDA6XFx0XFx0XFx0ICpcXG4xODQxOlxcdFxcdFxcdCAqIE5vdGUgdGhhdCBhbGxvd2luZyB0byBcXFwicmVzZXRcXFwiIGFuIGFscmVhZHkgZXN0YWJsaXNoZWQgc29ja2V0XFxuMTg0MjpcXHRcXHRcXHQgKiBoZXJlIGlzIHJhY3kgYW5kIGluc2VjdXJlLlxcbjE4NDM6XFx0XFx0XFx0ICovXFxuMTg0NDpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCB8fFxcbjE4NDU6XFx0XFx0XFx0ICAgIHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0lORylcXG4xODQ2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE4NDc6XFx0XFxuMTg0ODpcXHRcXHRcXHQvKiBJZiBjb25uZWN0aW9uIHdhcyBfbm90XyBlc3RhYmxpc2hlZCBhbmQgYSBzaWduYWwvdGltZW91dCBjYW1lXFxuMTg0OTpcXHRcXHRcXHQgKiB0byBiZSwgd2Ugd2FudCB0aGUgc29ja2V0J3Mgc3RhdGUgcmVzZXQuIFVzZXIgc3BhY2UgbWF5IHdhbnRcXG4xODUwOlxcdFxcdFxcdCAqIHRvIHJldHJ5LlxcbjE4NTE6XFx0XFx0XFx0ICovXFxuMTg1MjpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgfHwgdGltZW91dCA9PSAwKSB7XFxuMTg1MzpcXHRcXHRcXHRcXHRlcnIgPSB0aW1lb3V0ID09IDAgPyAtRVRJTUVET1VUIDogc29ja19pbnRyX2Vycm5vKHRpbWVvdXQpO1xcbjE4NTQ6XFx0XFxuMTg1NTpcXHRcXHRcXHRcXHQvKiBMaXN0ZW5lciBtaWdodCBoYXZlIGFscmVhZHkgcmVzcG9uZGVkIHdpdGhcXG4xODU2OlxcdFxcdFxcdFxcdCAqIFZJUlRJT19WU09DS19PUF9SRVNQT05TRS4gSXRzIGhhbmRsaW5nIGV4cGVjdHMgb3VyXFxuMTg1NzpcXHRcXHRcXHRcXHQgKiBza19zdGF0ZSA9PSBUQ1BfU1lOX1NFTlQsIHdoaWNoIGhlcmVieSB3ZSBicmVhay5cXG4xODU4OlxcdFxcdFxcdFxcdCAqIEluIHN1Y2ggY2FzZSBWSVJUSU9fVlNPQ0tfT1BfUlNUIHdpbGwgZm9sbG93LlxcbjE4NTk6XFx0XFx0XFx0XFx0ICovXFxuMTg2MDpcXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBUQ1BfQ0xPU0U7XFxuMTg2MTpcXHRcXHRcXHRcXHRzb2NrLVxcdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xcbjE4NjI6XFx0XFxuMTg2MzpcXHRcXHRcXHRcXHQvKiBUcnkgdG8gY2FuY2VsIFZJUlRJT19WU09DS19PUF9SRVFVRVNUIHNrYiBzZW50IG91dCBieVxcbjE4NjQ6XFx0XFx0XFx0XFx0ICogdHJhbnNwb3J0LVxcdTAwM2Vjb25uZWN0KCkuXFxuMTg2NTpcXHRcXHRcXHRcXHQgKi9cXG4xODY2OlxcdFxcdFxcdFxcdHZzb2NrX3RyYW5zcG9ydF9jYW5jZWxfcGt0KHZzayk7XFxuMTg2NzpcXHRcXG4xODY4OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3dhaXQ7XFxuMTg2OTpcXHRcXHRcXHR9XFxuMTg3MDpcXHRcXG4xODcxOlxcdFxcdFxcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChzayksIFxcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbjE4NzI6XFx0XFx0fVxcbjE4NzM6XFx0XFxuMTg3NDpcXHRcXHRlcnIgPSBzb2NrX2Vycm9yKHNrKTtcXG4xODc1OlxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjZcXG4xODc2OlxcdFxcdCAgICBzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEIFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0lORykge1xcbjE4Nzc6XFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gVENQX0NMT1NFO1xcbjE4Nzg6XFx0XFx0XFx0c29jay1cXHUwMDNlc3RhdGUgPSBTU19VTkNPTk5FQ1RFRDtcXG4xODc5OlxcdFxcdH1cXG4xODgwOlxcdFxcbjE4ODE6XFx0b3V0X3dhaXQ6XFxuMTg4MjpcXHRcXHRmaW5pc2hfd2FpdChza19zbGVlcChzayksIFxcdTAwMjZ3YWl0KTtcXG4xODgzOlxcdG91dDpcXG4xODg0OlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuMTg4NTpcXHRcXHRyZXR1cm4gZXJyO1xcbjE4ODY6XFx0fVxcbjE4ODc6XFx0XFxuMTg4ODpcXHRzdGF0aWMgaW50IHZzb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxcbjE4ODk6XFx0XFx0XFx0XFx0c3RydWN0IHByb3RvX2FjY2VwdF9hcmcgKmFyZylcXG4xODkwOlxcdHtcXG4xODkxOlxcdFxcdHN0cnVjdCBzb2NrICpsaXN0ZW5lcjtcXG4xODkyOlxcdFxcdGludCBlcnI7XFxuMTg5MzpcXHRcXHRzdHJ1Y3Qgc29jayAqY29ubmVjdGVkO1xcbjE4OTQ6XFx0XFx0c3RydWN0IHZzb2NrX3NvY2sgKnZjb25uZWN0ZWQ7XFxuMTg5NTpcXHRcXHRsb25nIHRpbWVvdXQ7XFxuMTg5NjpcXHRcXHRERUZJTkVfV0FJVCh3YWl0KTtcXG4xODk3OlxcdFxcbjE4OTg6XFx0XFx0ZXJyID0gMDtcXG4xODk5OlxcdFxcdGxpc3RlbmVyID0gc29jay1cXHUwMDNlc2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIyOjMzOjUzLjg2NTQ3NjQzMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjQzMzMwNzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIHZzb2NrX2Nvbm5lY3QgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIG1vZGlmeWluZyB0aGUgYHZzb2NrX2Nvbm5lY3RgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgdGhlIHNvY2tldCBzdGF0ZSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgY29ubmVjdGlvbiB0byBiZSBlc3RhYmxpc2hlZC4gVGhlIGNvcmUgaXNzdWUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgaW4gbGluZSAxODEwIHdoZXJlIHRoZSBjb2RlIHdhaXRzIGZvciB0aGUgc29ja2V0IHN0YXRlIChgc2stXHUwMDNlc2tfc3RhdGVgKSB0byBiZWNvbWUgYFRDUF9FU1RBQkxJU0hFRGAuIFRoZSBvcmlnaW5hbCBsb29wIG9ubHkgY2hlY2tlZCBmb3IgYFRDUF9FU1RBQkxJU0hFRGAsIGJ1dCB0aGUgcmVtb3RlIGVuZCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGR1cmluZyB0aGlzIHdhaXQgY291bGQgY2F1c2UgdGhlIHN0YXRlIHRvIHRyYW5zaXRpb24gdG8gYFRDUF9DTE9TSU5HYC4gVGhlIHByZXZpb3VzIGxvZ2ljIGhhZCBhIHBvdGVudGlhbCBmbGF3LCBhbGxvd2luZyBgVENQX0NMT1NJTkdgIHN0YXRlcyB0byBiZSBtaXNzZWQsIHJlc3VsdGluZyBpbiBhbiBlcnJvciBjaGVjayBhZnRlciB0aGUgbG9vcCB0aGF0IGNvdWxkIGdpdmUgYW4gaW5hY2N1cmF0ZSBlcnJvciBjb2RlLlxuXG5UaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBgVENQX0NMT1NJTkdgIHdpdGhpbiB0aGUgbG9vcCBjb25kaXRpb24sIHByZXZlbnRpbmcgdGhlIGNvbm5lY3Rpb24gZnJvbSBzdGFsbGluZyBpbiB0aGUgZXZlbnQgb2YgYSByZW1vdGUgY2xvc3VyZSBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciBtZSwgZ2l2ZW4gbXkgZXhwZXJ0aXNlLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIHN5c3RlbWF0aWNhbGx5IGdvIHRocm91Z2ggdGhlIGNoZWNrcy5cblxuRmlyc3QsIEknbSBjaGVja2luZyBpZiB0aGlzIHBhdGNoIGFmZmVjdHMgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBOby4gVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaW50ZXJuYWwgc29ja2V0IHN0YXRlIHRyYW5zaXRpb25zLCBpdCBkb2Vzbid0IHRvdWNoIGFueSBkYXRhIHRyYW5zZmVycmVkIHRvIHVzZXIgc3BhY2UuXG5cbk5leHQsIEknbSB2ZXJpZnlpbmcgaWYgdGhlcmUncyBhbnkgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuIFRoZSBwYXRjaCBtYW5pcHVsYXRlcyB0aGUgYHNrLVx1MDAzZXNrX3N0YXRlYCwgd2hpY2ggaXMgYSB3ZWxsLWRlZmluZWQgZmllbGQgd2l0aGluIHRoZSBgc3RydWN0IHNvY2tgIHN0cnVjdHVyZS4gU28sIG5vLCB0aGVyZSBhcmUgbm8gY29uY2VybnMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC5cblxuVGhpcmQsIEknbSBldmFsdWF0aW5nIHdoZXRoZXIgdGhlIHBhdGNoIGFsbG9jYXRlcyBvciBpbml0aWFsaXplcyBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIGxhdGVyIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBjcmVhdGVkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgY2hhbmdlLlxuXG5GaW5hbGx5LCBJJ20gY2hlY2tpbmcgaWYgaXQgYWx0ZXJzIGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IHdvdWxkIGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gVGhpcyBwYXRjaCBkb2Vzbid0IGludm9sdmUgYW55IGJ1ZmZlcnMgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucywgc28gdGhpcyBpc24ndCBhIGNvbmNlcm4gZWl0aGVyLlxuXG5JbiBzaG9ydCwgdGhpcyBwYXRjaCAqb25seSogbW9kaWZpZXMgdGhlIHNvY2tldCBzdGF0ZSBtYWNoaW5lIGZsb3cgd2l0aGluIGB2c29ja19jb25uZWN0KClgLiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHN0YXRlIGluY29uc2lzdGVuY3ksIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcvbG9ja2RlcC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGluZm9ybWF0aW9uIGxlYWsgcmlzay5cblxuKipLTVNBTlJlYXNvbmluZzoqKiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBzdGF0ZSBjaGVja2luZyBjb25kaXRpb24gKGBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0lOR2ApIHdpdGhpbiB0aGUgY29ubmVjdGlvbiBsb29wIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGB2c29ja19jb25uZWN0KClgLiBJdCBkb2Vzbid0IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBjb3B5IHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGludHJvZHVjZSBhbnkgaW5zdGFuY2VzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBjb3VsZCBvY2N1ci4gQW55IGlzc3VlcyB3aXRoIGNvbmN1cnJlbmN5IG9yIHNvY2tldCBzdGF0ZSBhcmUgZWl0aGVyIGxvZ2ljYWwgb3IgcmVsYXRlZCB0byBvYmplY3QgbGlmZWN5Y2xlcywgYW5kIHRoZXNlIGFyZSBoYW5kbGVkIGJ5IHRoZSBzdGFuZGFyZCBkZXRlY3Rpb24gbWVjaGFuaXNtcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cbioqTmVlZHNLTVNBTiA9IGZhbHNlKipcblxuXG4iLCJJbnB1dFRva2VucyI6NTEwMSwiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMjozNDowMC4xMDg4MTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN0YXRlIG1hY2hpbmUgaGFuZGxpbmcgaW4gdnNvY2tfY29ubmVjdCgpIGJ5IHRyZWF0aW5nIFRDUF9DTE9TSU5HIHNpbWlsYXJseSB0byBUQ1BfRVNUQUJMSVNIRUQgd2hlbiBjaGVja2luZyBzay1cXHUwMDNlc2tfc3RhdGUgdXBvbiB3YWtpbmcgZnJvbSBjb25uZWN0aW9uIHdhaXQgYW5kIGVycm9yIGhhbmRsaW5nLiBUaGlzIGNoYW5nZSBhZmZlY3RzIHNvY2tldCBjb250cm9sIGZsb3cgYW5kIHN0YXRlIHRyYW5zaXRpb25zIG9ubHkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgYnVmZmVyIGNvcHlpbmcgb3Igc2l6aW5nLCB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzL3BhZGRpbmcgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzdGF0ZSBtYWNoaW5lIGhhbmRsaW5nIGluIHZzb2NrX2Nvbm5lY3QoKSBieSB0cmVhdGluZyBUQ1BfQ0xPU0lORyBzaW1pbGFybHkgdG8gVENQX0VTVEFCTElTSEVEIHdoZW4gY2hlY2tpbmcgc2stXFx1MDAzZXNrX3N0YXRlIHVwb24gd2FraW5nIGZyb20gY29ubmVjdGlvbiB3YWl0IGFuZCBlcnJvciBoYW5kbGluZy4gVGhpcyBjaGFuZ2UgYWZmZWN0cyBzb2NrZXQgY29udHJvbCBmbG93IGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyBvbmx5LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IGJ1ZmZlciBjb3B5aW5nIG9yIHNpemluZywgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcy9wYWRkaW5nIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflownccfq[1] Phase: Succeeded StartedAt: 2026-09-09 22:34:12 +0000 UTC FinishedAt: 2026-09-09 22:34:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 22:34:12 +0000 UTC FinishedAt: 2026-09-09 22:34:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2] Phase: Succeeded StartedAt: 2026-09-09 22:34:12 +0000 UTC FinishedAt: 2026-09-10 02:15:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 22:34:12 +0000 UTC FinishedAt: 2026-09-10 02:15:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 22:34:12 +0000 UTC FinishedAt: 2026-09-09 22:34:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 22:34:12 +0000 UTC FinishedAt: 2026-09-09 22:34:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownccfq/series-workflownccfq-convert-artifact-1628083711/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 22:34:22 +0000 UTC FinishedAt: 2026-09-09 22:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 22:34:22 +0000 UTC FinishedAt: 2026-09-09 22:51:02 +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:*2b5476af-c6f9-49ac-a116-2b71b4babe89,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-workflownccfq/series-workflownccfq-convert-artifact-1628083711/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": "7b956646-68d0-40d5-8c84-909d6e5da0f1", "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-workflownccfq/series-workflownccfq-build-action-3598807173/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 22:34:22 +0000 UTC FinishedAt: 2026-09-09 22:50:52 +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:*2b5476af-c6f9-49ac-a116-2b71b4babe89,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-workflownccfq/series-workflownccfq-convert-artifact-1628083711/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": "7b956646-68d0-40d5-8c84-909d6e5da0f1", "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-workflownccfq/series-workflownccfq-build-action-3598807173/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 22:51:02 +0000 UTC FinishedAt: 2026-09-09 22:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 22:51:02 +0000 UTC FinishedAt: 2026-09-09 22:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 22:51:02 +0000 UTC FinishedAt: 2026-09-09 22:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 22:51:02 +0000 UTC FinishedAt: 2026-09-09 22:51:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownccfq/series-workflownccfq-convert-artifact-104248334/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 22:51:12 +0000 UTC FinishedAt: 2026-09-09 22:52:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 22:51:12 +0000 UTC FinishedAt: 2026-09-09 22:52:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7b956646-68d0-40d5-8c84-909d6e5da0f1,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-workflownccfq/series-workflownccfq-build-action-3598807173/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-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 22:52:54 +0000 UTC FinishedAt: 2026-09-09 22:52:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 22:52:54 +0000 UTC FinishedAt: 2026-09-09 22:52:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 22:52:54 +0000 UTC FinishedAt: 2026-09-09 23:09:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 22:52:54 +0000 UTC FinishedAt: 2026-09-09 23:09:10 +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:*2b5476af-c6f9-49ac-a116-2b71b4babe89,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-workflownccfq/series-workflownccfq-convert-artifact-104248334/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": "b256c2de-5476-42db-8612-4c1ab582d7c8", "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-workflownccfq/series-workflownccfq-build-action-2902591906/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 22:52:54 +0000 UTC FinishedAt: 2026-09-09 23:09:00 +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:*2b5476af-c6f9-49ac-a116-2b71b4babe89,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-workflownccfq/series-workflownccfq-convert-artifact-104248334/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": "b256c2de-5476-42db-8612-4c1ab582d7c8", "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-workflownccfq/series-workflownccfq-build-action-2902591906/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 23:09:10 +0000 UTC FinishedAt: 2026-09-09 23:09:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 23:09:10 +0000 UTC FinishedAt: 2026-09-09 23:09:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 23:09:10 +0000 UTC FinishedAt: 2026-09-09 23:12:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 23:09:10 +0000 UTC FinishedAt: 2026-09-09 23:12:00 +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:*b256c2de-5476-42db-8612-4c1ab582d7c8,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-workflownccfq/series-workflownccfq-build-action-2902591906/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-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 23:12:10 +0000 UTC FinishedAt: 2026-09-10 02:15:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 23:12:10 +0000 UTC FinishedAt: 2026-09-10 02:15:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*7b956646-68d0-40d5-8c84-909d6e5da0f1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b256c2de-5476-42db-8612-4c1ab582d7c8,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-workflownccfq/series-workflownccfq-build-action-3598807173/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-workflownccfq/series-workflownccfq-build-action-2902591906/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 23:12:10 +0000 UTC FinishedAt: 2026-09-09 23:12:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 23:12:10 +0000 UTC FinishedAt: 2026-09-09 23:12:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownccfq/series-workflownccfq-convert-artifact-3886581299/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 23:12:10 +0000 UTC FinishedAt: 2026-09-09 23:12:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 23:12:10 +0000 UTC FinishedAt: 2026-09-09 23:12:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 23:12:10 +0000 UTC FinishedAt: 2026-09-09 23:12:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 23:12:20 +0000 UTC FinishedAt: 2026-09-10 02:15:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflownccfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO_VSOCKETS"],"series_id":"4827e4c8-d504-4ed9-bcb7-4581f10229c5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 23:12:20 +0000 UTC FinishedAt: 2026-09-10 02:14:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7b956646-68d0-40d5-8c84-909d6e5da0f1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b256c2de-5476-42db-8612-4c1ab582d7c8,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-workflownccfq/series-workflownccfq-build-action-3598807173/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-workflownccfq/series-workflownccfq-build-action-2902591906/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-workflownccfq/series-workflownccfq-convert-artifact-3886581299/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,}