Name: series-workflowldjb8 Phase: Succeeded StartedAt: 2026-09-07 18:39:51 +0000 UTC FinishedAt: 2026-09-07 23:26:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[0] Phase: Succeeded StartedAt: 2026-09-07 18:39:51 +0000 UTC FinishedAt: 2026-09-07 19:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 18:39:51 +0000 UTC FinishedAt: 2026-09-07 19:43:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_DIAG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_DIAG" ], "series_id": "fb3c2901-4207-475f-b631-bb14da2f6119" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "inet_diag_bc_audit", "__inet_diag_dump_start", "inet_diag_dump_start", "inet_diag_bc_sk", "inet_diag_handler_cmd" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRElBRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luZXRfZGlhZ19iY19hdWRpdCYjMzQ7LAogICAgJiMzNDtfX2luZXRfZGlhZ19kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O2luZXRfZGlhZ19kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O2luZXRfZGlhZ19iY19zayYjMzQ7LAogICAgJiMzNDtpbmV0X2RpYWdfaGFuZGxlcl9jbWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIHVwcGVyIGJvdW5kIChJTkVUX0RJQUdfQkNfTUFYX09QUyA9IDY0KSBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVjb2RlIG9wZXJhdGlvbnMgdmVyaWZpZWQgZHVyaW5nIGluZXRfZGlhZyBmaWx0ZXIgYXVkaXRpbmcgaW4gaW5ldF9kaWFnX2JjX2F1ZGl0KCkgdG8gcHJldmVudCBleGNlc3NpdmVseSBsb25nIGJ5dGVjb2RlIGV4ZWN1dGlvbnMgd2hpbGUgaG9sZGluZyBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MuIFRoZSBvbmx5IHZhcmlhYmxlIGFkZGVkIGlzIGEgbG9jYWwgaW50ZWdlciBjb3VudGVyIGluaXRpYWxpemVkIHRvIDAuIFRoZSBwYXRjaCBkb2VzIG5vdCB0b3VjaCBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgc3RydWN0IHBhZGRpbmcsIGJ1ZmZlciBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW5ldF9kaWFnX2JjX2F1ZGl0IGluIG5ldC9pcHY0L2luZXRfZGlhZy5jLCBwbGFjaW5nIGEgbGltaXQgKElORVRfRElBR19CQ19NQVhfT1BTKSBvbiB0aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgYWxsb3dlZCBpbiBpbmV0X2RpYWcgYnl0ZWNvZGUgZmlsdGVycy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0bGluayBzb2NrZXQgZGlhZ25vc3RpYyBkdW1wIHBhcnNpbmcgbG9naWMgYW5kIGVycm9yIHBhdGhzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjhhMmZkM2M4NzNiOWZjN2JmZDljOTUwYzVmMzM2NWVmYzgzYjIwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTk6NDE6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMgYi9uZXQvaXB2NC9pbmV0X2RpYWcuY1xuaW5kZXggMzRiNzdhYTg3ZDBhNC4uMWNhNTI4Y2QzZTcyYiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2luZXRfZGlhZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pbmV0X2RpYWcuY1xuQEAgLTcyNSw2ICYjNDM7NzI1LDEyIEBAIHN0YXRpYyBib29sIHZhbGlkX2Nncm91cGNvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sXG4gfVxuICNlbmRpZlxuIFxuJiM0MzsvKiBzcyg4KSBmaWx0ZXJzIG9ubHkgbmVlZCBhIGhhbmRmdWwgb2YgY29tcGFyZS9ob3N0L21hcmsgb3BzLlxuJiM0MzsgKiBCb3VuZCB0aGUgcHJvZ3JhbSBzbyBkdW1wIHdhbGtzIGNhbm5vdCBydW4gYW4gYXJiaXRyYXJpbHkgbG9uZ1xuJiM0MzsgKiBieXRlY29kZSBzZXF1ZW5jZSB1bmRlciB0aGUgc29ja2V0IGhhc2ggYnVja2V0IGxvY2tzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBJTkVUX0RJQUdfQkNfTUFYX09QUyA2NFxuJiM0MztcbiBzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbkBAIC03MzIsNiAmIzQzOzczOCw3IEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxuIFx0Y29uc3Qgdm9pZCAqYnl0ZWNvZGUsICpiYztcbiBcdGludCBieXRlY29kZV9sZW4sIGxlbjtcbiBcdGJvb2wgbmV0X2FkbWluO1xuJiM0MztcdGludCBvcHMgPSAwO1xuIFxuIFx0aWYgKCFhdHRyKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC03NDcsNiAmIzQzOzc1NCw5IEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxuIFx0XHRpbnQgbWluX2xlbiA9IHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wKTtcbiBcdFx0Y29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AgPSBiYztcbiBcbiYjNDM7XHRcdGlmICgmIzQzOyYjNDM7b3BzIFx1MDAzZSBJTkVUX0RJQUdfQkNfTUFYX09QUylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0XHRzd2l0Y2ggKG9wLVx1MDAzZWNvZGUpIHtcbiBcdFx0Y2FzZSBJTkVUX0RJQUdfQkNfU19DT05EOlxuIFx0XHRjYXNlIElORVRfRElBR19CQ19EX0NPTkQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVF9ESUFHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5ldF9kaWFnX2JjX2F1ZGl0JiMzNDssCiAgICAmIzM0O19faW5ldF9kaWFnX2R1bXBfc3RhcnQmIzM0OywKICAgICYjMzQ7aW5ldF9kaWFnX2R1bXBfc3RhcnQmIzM0OywKICAgICYjMzQ7aW5ldF9kaWFnX2JjX3NrJiMzNDssCiAgICAmIzM0O2luZXRfZGlhZ19oYW5kbGVyX2NtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpbmV0X2RpYWdfYmNfYXVkaXQgaW4gbmV0L2lwdjQvaW5ldF9kaWFnLmMsIHBsYWNpbmcgYSBsaW1pdCAoSU5FVF9ESUFHX0JDX01BWF9PUFMpIG9uIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBhbGxvd2VkIGluIGluZXRfZGlhZyBieXRlY29kZSBmaWx0ZXJzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIHNvY2tldCBkaWFnbm9zdGljIGR1bXAgcGFyc2luZyBsb2dpYyBhbmQgZXJyb3IgcGF0aHMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2OGEyZmQzYzg3M2I5ZmM3YmZkOWM5NTBjNWYzMzY1ZWZjODNiMjA4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxOTo0MTo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZGlhZy5jIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKaW5kZXggMzRiNzdhYTg3ZDBhNC4uMWNhNTI4Y2QzZTcyYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKQEAgLTcyNSw2ICYjNDM7NzI1LDEyIEBAIHN0YXRpYyBib29sIHZhbGlkX2Nncm91cGNvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sCiB9CiAjZW5kaWYKIAomIzQzOy8qIHNzKDgpIGZpbHRlcnMgb25seSBuZWVkIGEgaGFuZGZ1bCBvZiBjb21wYXJlL2hvc3QvbWFyayBvcHMuCiYjNDM7ICogQm91bmQgdGhlIHByb2dyYW0gc28gZHVtcCB3YWxrcyBjYW5ub3QgcnVuIGFuIGFyYml0cmFyaWx5IGxvbmcKJiM0MzsgKiBieXRlY29kZSBzZXF1ZW5jZSB1bmRlciB0aGUgc29ja2V0IGhhc2ggYnVja2V0IGxvY2tzLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgSU5FVF9ESUFHX0JDX01BWF9PUFMgNjQKJiM0MzsKIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLAogCQkJICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTczMiw2ICYjNDM7NzM4LDcgQEAgc3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsCiAJY29uc3Qgdm9pZCAqYnl0ZWNvZGUsICpiYzsKIAlpbnQgYnl0ZWNvZGVfbGVuLCBsZW47CiAJYm9vbCBuZXRfYWRtaW47CiYjNDM7CWludCBvcHMgPSAwOwogCiAJaWYgKCFhdHRyKQogCQlyZXR1cm4gMDsKQEAgLTc0Nyw2ICYjNDM7NzU0LDkgQEAgc3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsCiAJCWludCBtaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBpbmV0X2RpYWdfYmNfb3ApOwogCQljb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCA9IGJjOwogCiYjNDM7CQlpZiAoJiM0MzsmIzQzO29wcyAmZ3Q7IElORVRfRElBR19CQ19NQVhfT1BTKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCQlzd2l0Y2ggKG9wLSZndDtjb2RlKSB7CiAJCWNhc2UgSU5FVF9ESUFHX0JDX1NfQ09ORDoKIAkJY2FzZSBJTkVUX0RJQUdfQkNfRF9DT05EOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqRGl2aW5nIGludG8gdGhlIGBpbmV0X2RpYWcuY2AgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9pcHY0L2luZXRfZGlhZy5jYC4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIGRpdmUgaW4gYW5kIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBhbHRlcmVkIGFuZCwgY3J1Y2lhbGx5LCAqd2h5Ki4gTXkgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIHBpbnBvaW50IHRoZSBjYWxscyB0byBgaW5ldF9kaWFnX2JjX2F1ZGl0YC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpa2VseSBsaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGNvbnRleHQuIEkmIzM5O2xsIHByb2JhYmx5IHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHdoYXRldmVyJiMzOTtzIGZhc3Rlc3QgYW5kIG1vc3QgZWZmaWNpZW50IGZvciB0cmF2ZXJzaW5nIHRoYXQgZmlsZSBhbmQgaWRlbnRpZnlpbmcgdGhvc2UgY2FsbCBzaXRlcy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGljaCBjb25maWd1cmF0aW9ucyBhbmQgdXBzdHJlYW0gY29kZSBhcmUgaW1wYWN0ZWQuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9kaWFnX2JjX2F1ZGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9kaWFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9kaWFnLmM9NzIwPXN0YXRpYyBib29sIHZhbGlkX2Nncm91cGNvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzMzLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NzM0OnN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzM1LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9ODU1PXN0YXRpYyBpbnQgX19pbmV0X2RpYWdfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCBoZHJsZW4pXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODcxLVx0fVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6ODcyOlx0ZXJyID0gaW5ldF9kaWFnX2JjX2F1ZGl0KGNiX2RhdGEsIHNrYik7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04NzMtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgaW5ldF9kaWFnIENvZGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYXJvdW5kIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGFuZCBgX19pbmV0X2RpYWdfZHVtcF9zdGFydGAgaW4gYG5ldC9pcHY0L2luZXRfZGlhZy5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgdGhlc2UgZnVuY3Rpb25zLiBUaGlzIG1lYW5zIGRpZ2dpbmcgaW50byB0aGUgYnVpbGQgc3lzdGVtLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY0L01ha2VmaWxlYCBhbmQgYG5ldC9pcHY0L0tjb25maWdgLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIHRoZSBwcmVwcm9jZXNzb3IgZGVmaW5lcyBJIG5lZWQgdG8gcHJvcGVybHkgaW50ZXJwcmV0IHRoZWlyIHJvbGUuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyB3aWxsIHF1aWNrbHkgdGVsbCBtZSB3aGF0IGlzIGdvaW5nIG9uLCBhbmQgZnJvbSB0aGVyZSBJIGNhbiBiZXR0ZXIgYXNzZXNzIHRoZWlyIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9kaWFnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczMDpcdCAqIGJ5dGVjb2RlIHNlcXVlbmNlIHVuZGVyIHRoZSBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MuXG4gNzMxOlx0ICovXG4gNzMyOlx0I2RlZmluZSBJTkVUX0RJQUdfQkNfTUFYX09QUyA2NFxuIDczMzpcdFxuIDczNDpcdHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxuIDczNTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gNzM2Olx0e1xuIDczNzpcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciA9IGNiX2RhdGEtXHUwMDNlaW5ldF9kaWFnX25sYV9iYztcbiA3Mzg6XHRcdGNvbnN0IHZvaWQgKmJ5dGVjb2RlLCAqYmM7XG4gNzM5Olx0XHRpbnQgYnl0ZWNvZGVfbGVuLCBsZW47XG4gNzQwOlx0XHRib29sIG5ldF9hZG1pbjtcbiA3NDE6XHRcdGludCBvcHMgPSAwO1xuIDc0MjpcdFxuIDc0MzpcdFx0aWYgKCFhdHRyKVxuIDc0NDpcdFx0XHRyZXR1cm4gMDtcbiA3NDU6XHRcbiA3NDY6XHRcdGlmIChubGFfbGVuKGF0dHIpIFx1MDAzYyBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCkpXG4gNzQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc0ODpcdFxuIDc0OTpcdFx0bmV0X2FkbWluID0gbmV0bGlua19uZXRfY2FwYWJsZShza2IsIENBUF9ORVRfQURNSU4pO1xuIDc1MDpcdFx0Ynl0ZWNvZGUgPSBiYyA9IG5sYV9kYXRhKGF0dHIpO1xuIDc1MTpcdFx0bGVuID0gYnl0ZWNvZGVfbGVuID0gbmxhX2xlbihhdHRyKTtcbiA3NTI6XHRcbiA3NTM6XHRcdHdoaWxlIChsZW4gXHUwMDNlIDApIHtcbiA3NTQ6XHRcdFx0aW50IG1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCk7XG4gNzU1Olx0XHRcdGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wID0gYmM7XG4gNzU2Olx0XG4gNzU3Olx0XHRcdGlmICgmIzQzOyYjNDM7b3BzIFx1MDAzZSBJTkVUX0RJQUdfQkNfTUFYX09QUylcbiA3NTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3NTk6XHRcbiA3NjA6XHRcdFx0c3dpdGNoIChvcC1cdTAwM2Vjb2RlKSB7XG4gNzYxOlx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX1NfQ09ORDpcbiA3NjI6XHRcdFx0Y2FzZSBJTkVUX0RJQUdfQkNfRF9DT05EOlxuIDc2MzpcdFx0XHRcdGlmICghdmFsaWRfaG9zdGNvbmQoYmMsIGxlbiwgXHUwMDI2bWluX2xlbikpXG4gNzY0Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3NjU6XHRcdFx0XHRicmVhaztcbiA3NjY6XHRcdFx0Y2FzZSBJTkVUX0RJQUdfQkNfREVWX0NPTkQ6XG4gNzY3Olx0XHRcdFx0aWYgKCF2YWxpZF9kZXZjb25kKGJjLCBsZW4sIFx1MDAyNm1pbl9sZW4pKVxuIDc2ODpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzY5Olx0XHRcdFx0YnJlYWs7XG4gNzcwOlx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX1NfRVE6XG4gNzcxOlx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX1NfR0U6XG4gNzcyOlx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX1NfTEU6XG4gNzczOlx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX0RfRVE6XG4gNzc0Olx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX0RfR0U6XG4gNzc1Olx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX0RfTEU6XG4gNzc2Olx0XHRcdFx0aWYgKCF2YWxpZF9wb3J0X2NvbXBhcmlzb24oYmMsIGxlbiwgXHUwMDI2bWluX2xlbikpXG4gNzc3Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3Nzg6XHRcdFx0XHRicmVhaztcbiA3Nzk6XHRcdFx0Y2FzZSBJTkVUX0RJQUdfQkNfTUFSS19DT05EOlxuIDc4MDpcdFx0XHRcdGlmICghbmV0X2FkbWluKVxuIDc4MTpcdFx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA3ODI6XHRcdFx0XHRpZiAoIXZhbGlkX21hcmtjb25kKGJjLCBsZW4sIFx1MDAyNm1pbl9sZW4pKVxuIDc4MzpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzg0Olx0XHRcdFx0Y2JfZGF0YS1cdTAwM2VtYXJrX25lZWRlZCA9IHRydWU7XG4gNzg1Olx0XHRcdFx0YnJlYWs7XG4gNzg2Olx0I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXG4gNzg3Olx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX0NHUk9VUF9DT05EOlxuIDc4ODpcdFx0XHRcdGlmICghdmFsaWRfY2dyb3VwY29uZChiYywgbGVuLCBcdTAwMjZtaW5fbGVuKSlcbiA3ODk6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc5MDpcdFx0XHRcdGNiX2RhdGEtXHUwMDNlY2dyb3VwX25lZWRlZCA9IHRydWU7XG4gNzkxOlx0XHRcdFx0YnJlYWs7XG4gNzkyOlx0I2VuZGlmXG4gNzkzOlx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX0FVVE86XG4gNzk0Olx0XHRcdFx0Y2JfZGF0YS1cdTAwM2V1c2VybG9ja3NfbmVlZGVkID0gdHJ1ZTtcbiA3OTU6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbiA3OTY6XHRcdFx0Y2FzZSBJTkVUX0RJQUdfQkNfSk1QOlxuIDc5NzpcdFx0XHRjYXNlIElORVRfRElBR19CQ19OT1A6XG4gNzk4Olx0XHRcdFx0YnJlYWs7XG4gNzk5Olx0XHRcdGRlZmF1bHQ6XG4gODAwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODAxOlx0XHRcdH1cbiA4MDI6XHRcbiA4MDM6XHRcdFx0aWYgKG9wLVx1MDAzZWNvZGUgIT0gSU5FVF9ESUFHX0JDX05PUCkge1xuIDgwNDpcdFx0XHRcdGlmIChvcC1cdTAwM2VubyBcdTAwM2MgbWluX2xlbiB8fCBvcC1cdTAwM2VubyBcdTAwM2UgbGVuICYjNDM7IDQgfHwgb3AtXHUwMDNlbm8gXHUwMDI2IDMpXG4gODA1Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4MDY6XHRcdFx0XHRpZiAob3AtXHUwMDNlbm8gXHUwMDNjIGxlbiBcdTAwMjZcdTAwMjZcbiA4MDc6XHRcdFx0XHQgICAgIXZhbGlkX2NjKGJ5dGVjb2RlLCBieXRlY29kZV9sZW4sIGxlbiAtIG9wLVx1MDAzZW5vKSlcbiA4MDg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDgwOTpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI0MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gdGhlIEtlcm5lbCBCdWlsZCBQcm9jZXNzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGBpbmV0X2RpYWcuY2AgZ2V0cyBjb21waWxlZC4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCB0aW1lIHRvIHJldmlzaXQgdGhlIGJ1aWxkIHN5c3RlbSwgc28gSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgbmV0L2lwdjQvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byBob3cgdGhlIElQdjQgbmV0d29ya2luZyBzdGFjayBtb2R1bGVzIGFyZSBjb25zdHJ1Y3RlZC4gSG9wZWZ1bGx5LCB0aGUgaW5jbHVzaW9uIG9mIGBpbmV0X2RpYWcuY2Agd2lsbCBiZSBoYW5kbGVkIHRoZXJlLCBvciBhdCBsZWFzdCB0aGF0IE1ha2VmaWxlIHdpbGwgcG9pbnQgbWUgdG8gdGhlIHJlbGV2YW50IGZpbGVzIGFuZCBydWxlcy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgeW91IG5ldmVyIGtub3cgd2l0aCB0aGVzZSBsYXJnZSwgY29tcGxleCBwcm9qZWN0cy4gVGltZSB0byBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfZGlhZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTQyPW9iai0kKENPTkZJR19ORVRGSUxURVIpXHQmIzQzOz0gbmV0ZmlsdGVyLm8gbmV0ZmlsdGVyL1xubmV0L2lwdjQvTWFrZWZpbGU6NDM6b2JqLSQoQ09ORklHX0lORVRfRElBRykgJiM0Mzs9IGluZXRfZGlhZy5vXG5uZXQvaXB2NC9NYWtlZmlsZS00NC1vYmotJChDT05GSUdfSU5FVF9UQ1BfRElBRykgJiM0Mzs9IHRjcF9kaWFnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTQyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OgoKKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBJTkVUX0RJQUcqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBJTkVUX0RJQUdgLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHN5c3RlbS4gVGhleSBkZWZpbmUgdGhlIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGF0IHVzZXJzIHNlZSBpbiB0b29scyBsaWtlIGBtZW51Y29uZmlnYCBvciBgZGVmY29uZmlnYC4gR2l2ZW4gdGhhdCBgSU5FVF9ESUFHYCBzZWVtcyBuZXR3b3JrLXJlbGF0ZWQsIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYG5ldC9pcHY0L0tjb25maWdgLiBJdCYjMzk7cyBhbG1vc3QgZ3VhcmFudGVlZCB0byBiZSBpbiB0aGVyZS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRElBRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz00MTk9Y29uZmlnIElORVRfVFVOTkVMXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MjItXG5uZXQvaXB2NC9LY29uZmlnOjQyMzpjb25maWcgSU5FVF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cdHRyaXN0YXRlIFwmIzM0O0lORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9NDQ3PWNvbmZpZyBJTkVUX1JBV19ESUFHXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00NTQtXG5uZXQvaXB2NC9LY29uZmlnOjQ1NTpjb25maWcgSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L0tjb25maWctNDU2LVx0Ym9vbCBcJiMzNDtJTkVUOiBhbGxvdyBwcml2aWxlZ2VkIHByb2Nlc3MgdG8gYWRtaW5pc3RyYXRpdmVseSBjbG9zZSBzb2NrZXRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIElQdjQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIElQdjQgY29uZmlndXJhdGlvbiBvcHRpb24uIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBuZXQvaXB2NC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQyMy4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgcGxhY2UgdG8gYmVnaW47IEtjb25maWcgZmlsZXMgYXJlIHRoZSBzdGFuZGFyZCBmb3IgZGVmaW5pbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoZSBsaW5lIG51bWJlciBzZWVtcyBsaWtlbHkgdG8gYmUgYSByZWxldmFudCBzZWN0aW9uIHJlbGF0ZWQgdG8gdGhlIGZlYXR1cmUgSSYjMzk7bSBleGFtaW5pbmcuIEtub3dpbmcgdGhlIGdlbmVyYWwgbGF5b3V0IG9mIHRoZSBmaWxlLCB0aGlzIHNob3VsZCBnZXQgbWUgdG8gdGhlIHJpZ2h0IHJlZ2lvbiB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgZm9ybWF0OiBgY29uZmlnYCwgYGJvb2wvdHJpc3RhdGVgLCBgZGVwZW5kcyBvbmAsIGBoZWxwYCwgYW5kIG1heWJlIHNvbWUgYGRlZmF1bHRgIHN0YXRlbWVudHMuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBvcHRpb24gaW50ZXJhY3RzIHdpdGggb3RoZXJzLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQyMDpcdFx0dHJpc3RhdGVcbiA0MjE6XHRcdGRlZmF1bHQgblxuIDQyMjpcdFxuIDQyMzpcdGNvbmZpZyBJTkVUX0RJQUdcbiA0MjQ6XHRcdHRyaXN0YXRlIFwmIzM0O0lORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuIDQyNTpcdFx0ZGVmYXVsdCB5XG4gNDI2Olx0XHRoZWxwXG4gNDI3Olx0XHQgIFN1cHBvcnQgZm9yIElORVQgKFRDUCwgVURQLCBldGMpIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5XG4gNDI4Olx0XHQgIG5hdGl2ZSBMaW51eCB0b29scyBzdWNoIGFzIHNzLiBzcyBpcyBpbmNsdWRlZCBpbiBpcHJvdXRlMiwgY3VycmVudGx5XG4gNDI5Olx0XHQgIGRvd25sb2FkYWJsZSBhdDpcbiA0MzA6XHRcbiA0MzE6XHRcdCAgICBodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2lwcm91dGUyXG4gNDMyOlx0XG4gNDMzOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gNDM0Olx0XG4gNDM1Olx0Y29uZmlnIElORVRfVENQX0RJQUdcbiA0MzY6XHRcdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4gNDM3Olx0XHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4gNDM4Olx0XG4gNDM5Olx0Y29uZmlnIElORVRfVURQX0RJQUdcbiA0NDA6XHRcdHRyaXN0YXRlIFwmIzM0O1VEUDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gNDQxOlx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuIDQ0MjpcdFx0ZGVmYXVsdCBuXG4gNDQzOlx0XHRoZWxwXG4gNDQ0Olx0XHQgIFN1cHBvcnQgZm9yIFVEUCBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0aGUgc3MgdG9vbC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIGBpbmV0X2RpYWdfYmNfYXVkaXRgIFVzYWdlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGluZXRfZGlhZ19iY19hdWRpdGAgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqIHdpdGhpbiB0aGUgYGluZXRfZGlhZy5jYCBtb2R1bGUuIE15IGdvYWwgaXMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgY29udGV4dC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZm9sbG93IHRoZSBjb2RlIHRvIHNlZSB3aGVyZSB0aGlzIGF1ZGl0IGZ1bmN0aW9uIGlzIGludm9rZWQgYW5kIHVuZGVyIHdoYXQgc3BlY2lmaWMgY29uZGl0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBwdXJwb3NlIGFuZCB3b3JrZmxvdyBvZiBgaW5ldF9kaWFnX2JjX2F1ZGl0YC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGxvZ2ljIHRpZWQgdG8gdGhpcyBhdWRpdCBmdW5jdGlvbiBhbmQgaG9wZWZ1bGx5LCB0aGlzIHdpbGwgaGlnaGxpZ2h0IGFueSBhcmVhcyBvZiBwb3RlbnRpYWwgaW50ZXJlc3Qgb3IgY29uY2Vybi4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2RpYWcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0c3RhdGljIGludCBpbmV0X2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gODUxOlx0e1xuIDg1MjpcdFx0cmV0dXJuIF9faW5ldF9kaWFnX2R1bXAoc2tiLCBjYiwgbmxtc2dfZGF0YShjYi1cdTAwM2VubGgpKTtcbiA4NTM6XHR9XG4gODU0Olx0XG4gODU1Olx0c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IGhkcmxlbilcbiA4NTY6XHR7XG4gODU3Olx0XHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVx1MDAzZW5saDtcbiA4NTg6XHRcdHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhO1xuIDg1OTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGNiLVx1MDAzZXNrYjtcbiA4NjA6XHRcdHN0cnVjdCBubGF0dHIgKm5sYTtcbiA4NjE6XHRcdGludCBlcnI7XG4gODYyOlx0XG4gODYzOlx0XHRjYl9kYXRhID0ga3phbGxvY19vYmooKmNiX2RhdGEpO1xuIDg2NDpcdFx0aWYgKCFjYl9kYXRhKVxuIDg2NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA4NjY6XHRcbiA4Njc6XHRcdGVyciA9IGluZXRfZGlhZ19wYXJzZV9hdHRycyhubGgsIGhkcmxlbiwgY2JfZGF0YS1cdTAwM2VyZXFfbmxhcyk7XG4gODY4Olx0XHRpZiAoZXJyKSB7XG4gODY5Olx0XHRcdGtmcmVlKGNiX2RhdGEpO1xuIDg3MDpcdFx0XHRyZXR1cm4gZXJyO1xuIDg3MTpcdFx0fVxuIDg3MjpcdFx0ZXJyID0gaW5ldF9kaWFnX2JjX2F1ZGl0KGNiX2RhdGEsIHNrYik7XG4gODczOlx0XHRpZiAoZXJyKSB7XG4gODc0Olx0XHRcdGtmcmVlKGNiX2RhdGEpO1xuIDg3NTpcdFx0XHRyZXR1cm4gZXJyO1xuIDg3NjpcdFx0fVxuIDg3NzpcdFxuIDg3ODpcdFx0bmxhID0gY2JfZGF0YS1cdTAwM2VpbmV0X2RpYWdfbmxhX2JwZl9zdGdzO1xuIDg3OTpcdFx0aWYgKG5sYSkge1xuIDg4MDpcdFx0XHRzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyAqYnBmX3N0Z19kaWFnO1xuIDg4MTpcdFxuIDg4MjpcdFx0XHRicGZfc3RnX2RpYWcgPSBicGZfc2tfc3RvcmFnZV9kaWFnX2FsbG9jKG5sYSk7XG4gODgzOlx0XHRcdGlmIChJU19FUlIoYnBmX3N0Z19kaWFnKSkge1xuIDg4NDpcdFx0XHRcdGtmcmVlKGNiX2RhdGEpO1xuIDg4NTpcdFx0XHRcdHJldHVybiBQVFJfRVJSKGJwZl9zdGdfZGlhZyk7XG4gODg2Olx0XHRcdH1cbiA4ODc6XHRcdFx0Y2JfZGF0YS1cdTAwM2VicGZfc3RnX2RpYWcgPSBicGZfc3RnX2RpYWc7XG4gODg4Olx0XHR9XG4gODg5Olx0XG4gODkwOlx0XHRjYi1cdTAwM2VkYXRhID0gY2JfZGF0YTtcbiA4OTE6XHRcdHJldHVybiAwO1xuIDg5MjpcdH1cbiA4OTM6XHRcbiA4OTQ6XHRzdGF0aWMgaW50IGluZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiA4OTU6XHR7XG4gODk2Olx0XHRyZXR1cm4gX19pbmV0X2RpYWdfZHVtcF9zdGFydChjYiwgc2l6ZW9mKHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyKSk7XG4gODk3Olx0fVxuIDg5ODpcdFxuIDg5OTpcdHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnRfY29tcGF0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkNvZGUgQXVkaXQ6IGBpbmV0X2RpYWcuY2AgLSBQb3RlbnRpYWwgQXJlYXMgZm9yIFJldmlldyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYGluZXRfZGlhZ19iY19hdWRpdGAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gZG8gaXMgZmlndXJlIG91dCBpdHMgc2NvcGUuIElzIGl0IHVzZWQgb25seSBpbiBhIHZlcnkgc3BlY2lmaWMgcGxhY2UsIG9yIGlzIGl0IHBvdGVudGlhbGx5IGNhbGxlZCBmcm9tIGFsbCBvdmVyIHRoZSBrZXJuZWw/IElkZW50aWZ5aW5nIGl0cyBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB2dWxuZXJhYmxlIGl0IGlzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgb2YgYGluZXRfZGlhZy5jYC4gQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlIHRoYXQgcmVsYXRlIHRvIGJ5dGVjb2RlIHByb2Nlc3Npbmcgb3IgZHVtcGluZyBuZXR3b3JrIGluZm9ybWF0aW9uPyBJdCYjMzk7cyBwb3NzaWJsZSBJJiMzOTtsbCBmaW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eSBJIG5lZWQgdG8gZXhhbWluZSB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gYnJvYWRlbiBteSBzZWFyY2ggYmV5b25kIGp1c3QgYGluZXRfZGlhZ19iY19hdWRpdGAgaXRzZWxmLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfZGlhZ19iY18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2RpYWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2RpYWcuYz00Mzk9c3RhdGljIGludCBiaXRzdHJpbmdfbWF0Y2goY29uc3QgX19iZTMyICphMSwgY29uc3QgX19iZTMyICphMiwgaW50IGJpdHMpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDY0LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NDY1OnN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX3J1bihjb25zdCBzdHJ1Y3QgbmxhdHRyICpfYmMsXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy00NjYtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfZW50cnkgKmVudHJ5KVxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTQ3Mi1cdFx0aW50IHllcyA9IDE7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo0NzM6XHRcdGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wID0gYmM7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy00NzQtXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9NTg0PXN0YXRpYyB2b2lkIGVudHJ5X2ZpbGxfYWRkcnMoc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnksXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNTk4LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NTk5OmludCBpbmV0X2RpYWdfYmNfc2soY29uc3Qgc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsIHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYwMC17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjMwLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NjMxOlx0cmV0dXJuIGluZXRfZGlhZ19iY19ydW4oYmMsIFx1MDAyNmVudHJ5KTtcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYzMi19XG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo2MzM6RVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX2JjX3NrKTtcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYzNC1cbm5ldC9pcHY0L2luZXRfZGlhZy5jPTYzNT1zdGF0aWMgaW50IHZhbGlkX2NjKGNvbnN0IHZvaWQgKmJjLCBpbnQgbGVuLCBpbnQgY2MpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjM3LVx0d2hpbGUgKGxlbiBcdTAwM2U9IDApIHtcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjYzODpcdFx0Y29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AgPSBiYztcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYzOS1cbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy02NTItLyogZGF0YSBpcyB1MzIgaWZpbmRleCAqL1xubmV0L2lwdjQvaW5ldF9kaWFnLmM6NjUzOnN0YXRpYyBib29sIHZhbGlkX2RldmNvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy02NTQtXHRcdFx0ICBpbnQgKm1pbl9sZW4pXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjYzLS8qIFZhbGlkYXRlIGFuIGluZXRfZGlhZ19ob3N0Y29uZC4gKi9cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjY2NDpzdGF0aWMgYm9vbCB2YWxpZF9ob3N0Y29uZChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCwgaW50IGxlbixcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTY2NS1cdFx0XHQgICBpbnQgKm1pbl9sZW4pXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzAxLS8qIFZhbGlkYXRlIGEgcG9ydCBjb21wYXJpc29uIG9wZXJhdG9yLiAqL1xubmV0L2lwdjQvaW5ldF9kaWFnLmM6NzAyOnN0YXRpYyBib29sIHZhbGlkX3BvcnRfY29tcGFyaXNvbihjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTcwMy1cdFx0XHRcdCAgaW50IGxlbiwgaW50ICptaW5fbGVuKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzA0LXtcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjcwNTpcdC8qIFBvcnQgY29tcGFyaXNvbnMgcHV0IHRoZSBwb3J0IGluIGEgZm9sbG93LW9uIGluZXRfZGlhZ19iY19vcC4gKi9cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjcwNjpcdCptaW5fbGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCk7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MDctXHRpZiAobGVuIFx1MDAzYyAqbWluX2xlbilcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MTEtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo3MTI6c3RhdGljIGJvb2wgdmFsaWRfbWFya2NvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MTMtXHRcdFx0ICAgaW50ICptaW5fbGVuKVxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTcxOS0jaWZkZWYgQ09ORklHX1NPQ0tfQ0dST1VQX0RBVEFcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjcyMDpzdGF0aWMgYm9vbCB2YWxpZF9jZ3JvdXBjb25kKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wLCBpbnQgbGVuLFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzIxLVx0XHRcdCAgICAgaW50ICptaW5fbGVuKVxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTczMy1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjczNDpzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTczNS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTc0NS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjc0NjpcdGlmIChubGFfbGVuKGF0dHIpIFx1MDAzYyBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCkpXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03NDctXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTc1My1cdHdoaWxlIChsZW4gXHUwMDNlIDApIHtcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjc1NDpcdFx0aW50IG1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCk7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo3NTU6XHRcdGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wID0gYmM7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03NTYtXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9ODU1PXN0YXRpYyBpbnQgX19pbmV0X2RpYWdfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCBoZHJsZW4pXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODcxLVx0fVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6ODcyOlx0ZXJyID0gaW5ldF9kaWFnX2JjX2F1ZGl0KGNiX2RhdGEsIHNrYik7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04NzMtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyODQKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA0ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBDb2RlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGBpbmV0X2RpYWcuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2hldGhlciBpdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYE5FVExJTktfSU5FVF9ESUFHYCBzb2NrZXQgZGlhZ25vc3RpYyBpbnRlcmZhY2UuIFRoaXMgaXMgdXNlZCBmb3IgZHVtcGluZyBzb2NrZXRzIHdpdGggYnl0ZWNvZGUgZmlsdGVyaW5nIOKAkyB0aGUgYElORVRfRElBR19SRVFfQllURUNPREVgIGFzcGVjdC4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGNvZGUgcGF0aCBpcyBhY2Nlc3NpYmxlIGluIGEgdHlwaWNhbCBRRU1VIGVudmlyb25tZW50LiBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgYE5FVExJTktfSU5FVF9ESUFHYCBpcyBpbmRlZWQgYSBzdGFuZGFyZCwgdXNlci1zcGFjZSByZWFjaGFibGUgc29ja2V0IEFQSSBpbiBMaW51eCwgc28gdGhhdCYjMzk7cyBhIHBvc2l0aXZlLiBHaXZlbiBTeXprYWxsZXImIzM5O3MgaGVhdnkgZnV6emluZyBvZiBuZXRsaW5rIGFuZCBpbmV0X2RpYWcsIHRoaXMgYXJlYSBpcyBjZXJ0YWlubHkgaW4gcGxheS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGluc3RydWN0aW9uIGNvdW50ZXIgbGltaXQsIGBJTkVUX0RJQUdfQkNfTUFYX09QUyA2NGAsIHRvIHRoZSBgaW5ldF9kaWFnX2JjX2F1ZGl0YCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY0L2luZXRfZGlhZy5jYC4gVGhpcyBpcyBpbnRyaWd1aW5nIOKAkyBpdCYjMzk7cyBhIGJvdW5kYXJ5IGNvbmRpdGlvbiBvbiBob3cgYnl0ZWNvZGUgZmlsdGVycyBhcmUgcHJvY2Vzc2VkIGR1cmluZyBzb2NrZXQgZGlhZ25vc3RpY3MsIHdoaWNoIGNhbiBpbXBhY3QgYm90aCBkdW1wIHJlcXVlc3RzIGFuZCBlcnJvciBoYW5kbGluZy4KClRoZSBjcml0ZXJpYSBsb29rIHByb21pc2luZzogaXQmIzM5O3MgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBiZWNhdXNlIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBieXRlY29kZSBmaWx0ZXIgdmFsaWRhdGlvbi4gVGhlIEVuYWJsZUNvbmZpZ3MgY2hlY2sgaXMgZ29vZC4gSU5FVF9ESUFHIGJlaW5nIGEgdHJpc3RhdGUgYnV0IGRlZmF1bHRzIHRvICYjMzk7eSYjMzk7IG1lYW5zIGl0IHNob3VsZCBiZSBnZW5lcmFsbHkgYWNjZXNzaWJsZS4KClRoZSBsaXN0ZWQgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBhcmUgcmlnaHQgb24gdGFyZ2V0LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYGluZXRfZGlhZ19iY19hdWRpdGAsIGFuZCB0aGUgdmFyaW91cyBgaW5ldF9kaWFnX2R1bXBfKmAsIGBpbmV0X2RpYWdfYmNfcnVuYCBhbmQgYGluZXRfZGlhZ19iY19za2AgZnVuY3Rpb25zLiBOb3csIGEgcXVpY2sgY2hlY2sgb24gdGhlIGV4YWN0IHN5bWJvbCBuYW1lcyBpbiB0aGUgZmlsZSBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5IHRoYXQgdGhlIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGlzIGBzdGF0aWNgIGFuZCB0aGF0IGl0IGlzIGluIHRoZSBjb21waWxhdGlvbiB1bml0LiBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygb3RoZXIgZW50cnkgcG9pbnRzIGFzIHdlbGwgbGlrZSBgX19pbmV0X2RpYWdfZHVtcF9zdGFydGAsIGBpbmV0X2RpYWdfZHVtcF9zdGFydGAsIGBpbmV0X2RpYWdfZHVtcF9zdGFydF9jb21wYXRgLCBgaW5ldF9kaWFnX2JjX3NrYCwgYGluZXRfZGlhZ19kdW1wX29uZV9pY3NrYCwgYGluZXRfZGlhZ19kdW1wX2ljc2tgLiBJIHdpbGwgY2hlY2sgYWxsIGVudHJ5cG9pbnRzIGluIGBpbmV0X2RpYWcuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oaW50fHZvaWQpIFthLXpBLVowLTlfXSYjNDM7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9kaWFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9kaWFnLmM9NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciAqaW5ldF9kaWFnX2xvY2tfaGFuZGxlcihpbnQgcHJvdG8pXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjYtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo2NzpzdGF0aWMgdm9pZCBpbmV0X2RpYWdfdW5sb2NrX2hhbmRsZXIoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyICpoYW5kbGVyKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjgte1xuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTcxLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NzI6dm9pZCBpbmV0X2RpYWdfbXNnX2NvbW1vbl9maWxsKHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03My17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9OTU9RVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX21zZ19jb21tb25fZmlsbCk7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05Ni1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjk3OmludCBpbmV0X2RpYWdfbXNnX2F0dHJzX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTgtXHRcdFx0ICAgICBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqciwgaW50IGV4dCxcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz0xNzk9RVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX21zZ19hdHRyc19maWxsKTtcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTE4MC1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjE4MTpzdGF0aWMgaW50IGluZXRfZGlhZ19wYXJzZV9hdHRycyhjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgaW50IGhkcmxlbixcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTE4Mi1cdFx0XHRcdCBzdHJ1Y3QgbmxhdHRyICoqcmVxX25sYXMpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTk4LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTk5OnN0YXRpYyBpbnQgaW5ldF9kaWFnX2dldF9wcm90b2NvbChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxLFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMjAwLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqZGF0YSlcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0yMDgtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoyMDk6aW50IGluZXRfc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrLFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMjEwLVx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9NDAwPUVYUE9SVF9TWU1CT0xfR1BMKGluZXRfc2tfZGlhZ19maWxsKTtcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTQwMS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjQwMjpzdGF0aWMgaW50IGluZXRfZGlhZ19jbWRfZXhhY3QoaW50IGNtZCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTQwMy1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDM4LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NDM5OnN0YXRpYyBpbnQgYml0c3RyaW5nX21hdGNoKGNvbnN0IF9fYmUzMiAqYTEsIGNvbnN0IF9fYmUzMiAqYTIsIGludCBiaXRzKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDQwLXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy00NjQtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo0NjU6c3RhdGljIGludCBpbmV0X2RpYWdfYmNfcnVuKGNvbnN0IHN0cnVjdCBubGF0dHIgKl9iYyxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTQ2Ni1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnkpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNTgzLSAqL1xubmV0L2lwdjQvaW5ldF9kaWFnLmM6NTg0OnN0YXRpYyB2b2lkIGVudHJ5X2ZpbGxfYWRkcnMoc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnksXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy01ODUtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNTk4LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NTk5OmludCBpbmV0X2RpYWdfYmNfc2soY29uc3Qgc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsIHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYwMC17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9NjMzPUVYUE9SVF9TWU1CT0xfR1BMKGluZXRfZGlhZ19iY19zayk7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy02MzQtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo2MzU6c3RhdGljIGludCB2YWxpZF9jYyhjb25zdCB2b2lkICpiYywgaW50IGxlbiwgaW50IGNjKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjM2LXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz03MjA9c3RhdGljIGJvb2wgdmFsaWRfY2dyb3VwY29uZChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCwgaW50IGxlbixcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MzMtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo3MzQ6c3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MzUtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04MTgtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4MTk6c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTgyMC1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnIpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODQ5LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6ODUwOnN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODUxLXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04NTQtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4NTU6c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IGhkcmxlbilcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg1Ni17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODkzLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6ODk0OnN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODk1LXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04OTgtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4OTk6c3RhdGljIGludCBpbmV0X2RpYWdfZHVtcF9zdGFydF9jb21wYXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTAwLXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05MDMtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo5MDQ6c3RhdGljIGludCBpbmV0X2RpYWdfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTkwNS17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTEzLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTE0OnN0YXRpYyBpbnQgaW5ldF9kaWFnX3R5cGUycHJvdG8oaW50IHR5cGUpXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05MTUte1xuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTkyMy1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjkyNDpzdGF0aWMgaW50IGluZXRfZGlhZ19kdW1wX2NvbXBhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTI1LVx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05MzktXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo5NDA6c3RhdGljIGludCBpbmV0X2RpYWdfZ2V0X2V4YWN0X2NvbXBhdChzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTQxLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTU2LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTU3OnN0YXRpYyBpbnQgaW5ldF9kaWFnX3Jjdl9tc2dfY29tcGF0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTU4LXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05NzctXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo5Nzg6c3RhdGljIGludCBpbmV0X2RpYWdfaGFuZGxlcl9jbWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpoKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTc5LXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz0xMDAwPXN0YXRpY1xubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTAwMTppbnQgaW5ldF9kaWFnX2hhbmRsZXJfZ2V0X2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTAwMi17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9MTA1NT1zdGF0aWMgY29uc3Qgc3RydWN0IHNvY2tfZGlhZ19oYW5kbGVyIGluZXQ2X2RpYWdfaGFuZGxlciA9IHtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xMDYyLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTA2MzppbnQgaW5ldF9kaWFnX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciAqaClcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTEwNjQte1xuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jPTEwNzM9RVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX3JlZ2lzdGVyKTtcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTEwNzQtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxMDc1OnZvaWQgaW5ldF9kaWFnX3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyICpoKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTA3Ni17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9MTA4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHNvY2tfZGlhZ19pbmV0X2NvbXBhdCBpbmV0X2RpYWdfY29tcGF0ID0ge1xuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTEwOTEtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxMDkyOnN0YXRpYyBpbnQgX19pbml0IGluZXRfZGlhZ19pbml0KHZvaWQpXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xMDkzLXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xMTIwLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTEyMTpzdGF0aWMgdm9pZCBfX2V4aXQgaW5ldF9kaWFnX2V4aXQodm9pZClcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTExMjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1MAoJCQkJCQkJb3V0cHV0OiAxNTYKCQkJCQkJCXRob3VnaHRzOiAzMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIExpbnV4IEtlcm5lbCYjMzk7cyBpbmV0X2RpYWcgRnV6emluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGUgYGluZXRfZGlhZ2AgZnVuY3Rpb25hbGl0eSB0aGF0IGFyZSByZWxldmFudCBmb3IgZnV6emluZy4gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IGBpbmV0X2RpYWdfYmNfYXVkaXRgLCBgX19pbmV0X2RpYWdfZHVtcF9zdGFydGAsIGBpbmV0X2RpYWdfZHVtcF9zdGFydGAsIGBpbmV0X2RpYWdfYmNfc2tgLCBhbmQgYGluZXRfZGlhZ19oYW5kbGVyX2NtZGAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgYW5kIGhhbmRsZXJzIHRoYXQgd2FycmFudCBjbG9zZXIgZXhhbWluYXRpb24uCgpOZXh0LCBJIGhhdmUgdG8gZGV0ZXJtaW5lIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoZSBvYnZpb3VzIGNhbmRpZGF0ZSBpcyBgSU5FVF9ESUFHYCwgYnV0IEkgbmVlZCB0byBiZSBjZXJ0YWluLiBXaGlsZSBgTkVUTElOS19ESUFHYCB3b3VsZCBiZSBhIHJlbGF0ZWQgb3B0aW9uLCBteSByZXNlYXJjaCBwb2ludHMgdG93YXJkcyBgSU5FVF9ESUFHYCBiZWluZyB0aGUgY29ycmVjdCBzZXR0aW5nLCBhbmQgdGhlIGZhY3QgdGhhdCBgSU5FVF9ESUFHYCBkZXBlbmRzIG9ubHkgb24gYElORVRgIGNvbmZpcm1zIHRoaXM7IGdpdmVuIHRoYXQgYElORVRgIGlzIHRoZSBkZWZhdWx0IGZvciBJUHY0LCBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4dHJhIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgYElORVRfRElBR2AgaGFzIG5vIGV4cGxpY2l0IGRlcGVuZGVuY2llcyBiZXlvbmQgYElORVRgIGluIElQdjQsIGFuZCBzdXJlIGVub3VnaCwgaXQmIzM5O3MgYXQgYG5ldC9pcHY0L0tjb25maWc6NDIzYCBhbmQgaXMgc3RyYWlnaHRmb3J3YXJkLgoKTm93LCBhIGNydWNpYWwgYXNwZWN0IG9mIHRoaXMgZXZhbHVhdGlvbiBpcyB3aGV0aGVyIHRoZSBjb2RlIGNoYW5nZXMgYXJlIGltcGFjdGZ1bCBmb3IgZnV6emluZy4gSXQgYXBwZWFycyB0aGF0IHRoZXJlJiMzOTtzIGEgbmV3IGluc3RydWN0aW9uIGxpbWl0IGNoZWNrIGFkZGVkIHdpdGhpbiBgaW5ldF9kaWFnX2JjX2F1ZGl0YDogYGlmICgmIzQzOyYjNDM7b3BzICZndDsgSU5FVF9ESUFHX0JDX01BWF9PUFMpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgYWRkaXRpb24gaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCYjMzk7cyBhIG5ldyBjb250cm9sIGZsb3cgbWVjaGFuaXNtIHRoYXQgd2lsbCBsaWtlbHkgaW5mbHVlbmNlIGhvdyB0aGUgZnV6emVyIG9wZXJhdGVzLiBCZWNhdXNlIG9mIHRoaXMsIGl0JiMzOTtzIHdvcnRoIGZ1enppbmchCgpTbywgdGhlIGNvcmUgb2YgdGhlIGZ1enppbmcgc2V0dXAgbG9va3MgZ29vZDogYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUsIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzZXQgdG8gYFsmIzM0O0lORVRfRElBRyYjMzQ7XWAsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFybHkgZGVmaW5lZC4KCkZpbmFsbHksIEkmIzM5O2xsIHVwZGF0ZSB0aGUgcmVzdWx0cy4gSSBhbSBjb25maWRlbnQgaW4gbXkgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0RJQUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpbmV0X2RpYWdfYmNfYXVkaXQmIzM0OywKICAgICYjMzQ7X19pbmV0X2RpYWdfZHVtcF9zdGFydCYjMzQ7LAogICAgJiMzNDtpbmV0X2RpYWdfZHVtcF9zdGFydCYjMzQ7LAogICAgJiMzNDtpbmV0X2RpYWdfYmNfc2smIzM0OywKICAgICYjMzQ7aW5ldF9kaWFnX2hhbmRsZXJfY21kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGluZXRfZGlhZ19iY19hdWRpdCBpbiBuZXQvaXB2NC9pbmV0X2RpYWcuYywgcGxhY2luZyBhIGxpbWl0IChJTkVUX0RJQUdfQkNfTUFYX09QUykgb24gdGhlIG51bWJlciBvZiBvcGVyYXRpb25zIGFsbG93ZWQgaW4gaW5ldF9kaWFnIGJ5dGVjb2RlIGZpbHRlcnMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgc29ja2V0IGRpYWdub3N0aWMgZHVtcCBwYXJzaW5nIGxvZ2ljIGFuZCBlcnJvciBwYXRocyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVF9ESUFHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5ldF9kaWFnX2JjX2F1ZGl0JiMzNDssCiAgICAmIzM0O19faW5ldF9kaWFnX2R1bXBfc3RhcnQmIzM0OywKICAgICYjMzQ7aW5ldF9kaWFnX2R1bXBfc3RhcnQmIzM0OywKICAgICYjMzQ7aW5ldF9kaWFnX2JjX3NrJiMzNDssCiAgICAmIzM0O2luZXRfZGlhZ19oYW5kbGVyX2NtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpbmV0X2RpYWdfYmNfYXVkaXQgaW4gbmV0L2lwdjQvaW5ldF9kaWFnLmMsIHBsYWNpbmcgYSBsaW1pdCAoSU5FVF9ESUFHX0JDX01BWF9PUFMpIG9uIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBhbGxvd2VkIGluIGluZXRfZGlhZyBieXRlY29kZSBmaWx0ZXJzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIHNvY2tldCBkaWFnbm9zdGljIGR1bXAgcGFyc2luZyBsb2dpYyBhbmQgZXJyb3IgcGF0aHMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIHVwcGVyIGJvdW5kIChJTkVUX0RJQUdfQkNfTUFYX09QUyA9IDY0KSBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVjb2RlIG9wZXJhdGlvbnMgdmVyaWZpZWQgZHVyaW5nIGluZXRfZGlhZyBmaWx0ZXIgYXVkaXRpbmcgaW4gaW5ldF9kaWFnX2JjX2F1ZGl0KCkgdG8gcHJldmVudCBleGNlc3NpdmVseSBsb25nIGJ5dGVjb2RlIGV4ZWN1dGlvbnMgd2hpbGUgaG9sZGluZyBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MuIFRoZSBvbmx5IHZhcmlhYmxlIGFkZGVkIGlzIGEgbG9jYWwgaW50ZWdlciBjb3VudGVyIGluaXRpYWxpemVkIHRvIDAuIFRoZSBwYXRjaCBkb2VzIG5vdCB0b3VjaCBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgc3RydWN0IHBhZGRpbmcsIGJ1ZmZlciBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY4YTJmZDNjODczYjlmYzdiZmQ5Yzk1MGM1ZjMzNjVlZmM4M2IyMDgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE5OjQxOjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwppbmRleCAzNGI3N2FhODdkMGE0Li4xY2E1MjhjZDNlNzJiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwpAQCAtNzI1LDYgJiM0Mzs3MjUsMTIgQEAgc3RhdGljIGJvb2wgdmFsaWRfY2dyb3VwY29uZChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCwgaW50IGxlbiwKIH0KICNlbmRpZgogCiYjNDM7Lyogc3MoOCkgZmlsdGVycyBvbmx5IG5lZWQgYSBoYW5kZnVsIG9mIGNvbXBhcmUvaG9zdC9tYXJrIG9wcy4KJiM0MzsgKiBCb3VuZCB0aGUgcHJvZ3JhbSBzbyBkdW1wIHdhbGtzIGNhbm5vdCBydW4gYW4gYXJiaXRyYXJpbHkgbG9uZwomIzQzOyAqIGJ5dGVjb2RlIHNlcXVlbmNlIHVuZGVyIHRoZSBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBJTkVUX0RJQUdfQkNfTUFYX09QUyA2NAomIzQzOwogc3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtNzMyLDYgJiM0Mzs3MzgsNyBAQCBzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSwKIAljb25zdCB2b2lkICpieXRlY29kZSwgKmJjOwogCWludCBieXRlY29kZV9sZW4sIGxlbjsKIAlib29sIG5ldF9hZG1pbjsKJiM0MzsJaW50IG9wcyA9IDA7CiAKIAlpZiAoIWF0dHIpCiAJCXJldHVybiAwOwpAQCAtNzQ3LDYgJiM0Mzs3NTQsOSBAQCBzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSwKIAkJaW50IG1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCk7CiAJCWNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wID0gYmM7CiAKJiM0MzsJCWlmICgmIzQzOyYjNDM7b3BzICZndDsgSU5FVF9ESUFHX0JDX01BWF9PUFMpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJCXN3aXRjaCAob3AtJmd0O2NvZGUpIHsKIAkJY2FzZSBJTkVUX0RJQUdfQkNfU19DT05EOgogCQljYXNlIElORVRfRElBR19CQ19EX0NPTkQ6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEV2YWx1YXRpb24gb2YgdGhlIExpbnV4IEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSByZXF1ZXN0IGhlcmUgdG8gYXNzZXNzIGEgTGludXgga2VybmVsIHBhdGNoIGFuZCBkZWNpZGUgd2hldGhlciBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBnZXQgdGhpcyBkb25lLCBubyBtYWxpY2lvdXMgcGF5bG9hZHMgb3IgZXhwbG9pdHMgYXJlIHJlcXVlc3RlZCwgdGhpcyBpcyBiZW5pZ24uCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O2xsIGRvIGEgcXVpY2sgc2FmZXR5IGV2YWx1YXRpb24g4oCTIHRoaXMgaXMgY29kZSByZXZpZXcvc2VjdXJpdHkgYXNzZXNzbWVudCBhbmQgSSBjYW4gdGFrZSB0aGlzIGRpcmVjdGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBLTVNBTi13b3J0aHkuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRpZmY6IFRoZSBjaGFuZ2UgaXMgaW4gYG5ldC9pcHY0L2luZXRfZGlhZy5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgYElORVRfRElBR19CQ19NQVhfT1BTYCBkZWZpbmUgc2V0IHRvIDY0LiAgVGhpcyBsaW1pdCBpcyBmb3IgdGhlIGJ5dGVjb2RlIHVzZWQgYnkgYHNzKDgpYCBmaWx0ZXJpbmcsIHByZXZlbnRpbmcgYXJiaXRyYXJpbHkgbG9uZyBzZXF1ZW5jZXMgdW5kZXIgdGhlIHNvY2tldCBoYXNoIGJ1Y2tldCBsb2NrcywgaW4gdGhlIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGZ1bmN0aW9uLiBUaGUgY29kZSBub3cgaW5jcmVtZW50cyBhbiBgb3BzYCBjb3VudGVyIGFuZCByZXR1cm5zIC1FSU5WQUwgaWYgaXQgZXhjZWVkcyB0aGUgbWF4IGFsbG93ZWQgb3BlcmF0aW9ucy4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBoYXJkZW5pbmcgbWVhc3VyZSwgcHJldmVudGluZyBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2Ugb3IgcGVyaGFwcyBldmVuIG1vcmUgc3VidGxlIHZ1bG5lcmFiaWxpdGllcyBzdGVtbWluZyBmcm9tIG92ZXJseSBjb21wbGV4IGJ5dGVjb2RlIGV4ZWN1dGlvbi4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZeKAlGEgYnl0ZWNvZGUgbGltaXTigJRhbmQgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgS0FTQU4gYW5kIEtNU0FOIHJlbGF0ZSwgSSYjMzk7bSB0aGlua2luZy4uLiBLQVNBTiB3b3VsZCBiZSB0aGUgaW5pdGlhbCB0b29sLCByaWdodD8gVGhpcyBpcyBsaWtlbHkgYSBnb29kIHBsYWNlIGZvciBLQVNBTiB0byBkbyBpdHMgdGhpbmcgd2l0aCB0aGUgb3JpZ2luYWwgdmVyc2lvbi4gS01TQU4gaXMgbW9yZSBmb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBLQVNBTiBtaWdodCBtaXNzIGFuZCB0aGlzIGlzIG5vdCB3aGF0IHRoaXMgbG9va3MgbGlrZS4gIEl0JiMzOTtzIGEgYm91bmRzIGNoZWNrLCB3aGljaCBpcyBtb3JlIG9mIGEgcG90ZW50aWFsIERvUyB2dWxuZXJhYmlsaXR5LCB3aGljaCBpcyB3aXRoaW4gdGhlIGJvdW5kcyBvZiBLQVNBTiYjMzk7cyBhYmlsaXRpZXMuIEtNU0FOIGlzIGRlZmluaXRlbHkgbm90IG5lZWRlZCwgYXMgdGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGlzc3VlLCBub3QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLgoKU28sIGluIGNvbmNsdXNpb24sIHdoaWxlIGl0JiMzOTtzIGEgZ29vZCBkZWZlbnNpdmUgYWRkaXRpb24gdG8gdGhlIGNvZGUsIEkgZG9uJiMzOTt0IHRoaW5rIHRoaXMgY2hhbmdlIGJ5IGl0c2VsZiB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBzZXZlcml0eSBvZiB0aGUgY2hhbmdlIGRvZXNuJiMzOTt0IHdhcnJhbnQgaXQsIGFuZCBLQVNBTiBzaG91bGQgaGFuZGxlIGFueSBpc3N1ZXMgd2l0aCB0aGUgb3JpZ2luYWwgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2RpYWcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzI1Olx0fVxuIDcyNjpcdCNlbmRpZlxuIDcyNzpcdFxuIDcyODpcdC8qIHNzKDgpIGZpbHRlcnMgb25seSBuZWVkIGEgaGFuZGZ1bCBvZiBjb21wYXJlL2hvc3QvbWFyayBvcHMuXG4gNzI5Olx0ICogQm91bmQgdGhlIHByb2dyYW0gc28gZHVtcCB3YWxrcyBjYW5ub3QgcnVuIGFuIGFyYml0cmFyaWx5IGxvbmdcbiA3MzA6XHQgKiBieXRlY29kZSBzZXF1ZW5jZSB1bmRlciB0aGUgc29ja2V0IGhhc2ggYnVja2V0IGxvY2tzLlxuIDczMTpcdCAqL1xuIDczMjpcdCNkZWZpbmUgSU5FVF9ESUFHX0JDX01BWF9PUFMgNjRcbiA3MzM6XHRcbiA3MzQ6XHRzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcbiA3MzU6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDczNjpcdHtcbiA3Mzc6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIgPSBjYl9kYXRhLVx1MDAzZWluZXRfZGlhZ19ubGFfYmM7XG4gNzM4Olx0XHRjb25zdCB2b2lkICpieXRlY29kZSwgKmJjO1xuIDczOTpcdFx0aW50IGJ5dGVjb2RlX2xlbiwgbGVuO1xuIDc0MDpcdFx0Ym9vbCBuZXRfYWRtaW47XG4gNzQxOlx0XHRpbnQgb3BzID0gMDtcbiA3NDI6XHRcbiA3NDM6XHRcdGlmICghYXR0cilcbiA3NDQ6XHRcdFx0cmV0dXJuIDA7XG4gNzQ1Olx0XG4gNzQ2Olx0XHRpZiAobmxhX2xlbihhdHRyKSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBpbmV0X2RpYWdfYmNfb3ApKVxuIDc0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3NDg6XHRcbiA3NDk6XHRcdG5ldF9hZG1pbiA9IG5ldGxpbmtfbmV0X2NhcGFibGUoc2tiLCBDQVBfTkVUX0FETUlOKTtcbiA3NTA6XHRcdGJ5dGVjb2RlID0gYmMgPSBubGFfZGF0YShhdHRyKTtcbiA3NTE6XHRcdGxlbiA9IGJ5dGVjb2RlX2xlbiA9IG5sYV9sZW4oYXR0cik7XG4gNzUyOlx0XG4gNzUzOlx0XHR3aGlsZSAobGVuIFx1MDAzZSAwKSB7XG4gNzU0Olx0XHRcdGludCBtaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBpbmV0X2RpYWdfYmNfb3ApO1xuIDc1NTpcdFx0XHRjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCA9IGJjO1xuIDc1NjpcdFxuIDc1NzpcdFx0XHRpZiAoJiM0MzsmIzQzO29wcyBcdTAwM2UgSU5FVF9ESUFHX0JDX01BWF9PUFMpXG4gNzU4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzU5Olx0XG4gNzYwOlx0XHRcdHN3aXRjaCAob3AtXHUwMDNlY29kZSkge1xuIDc2MTpcdFx0XHRjYXNlIElORVRfRElBR19CQ19TX0NPTkQ6XG4gNzYyOlx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX0RfQ09ORDpcbiA3NjM6XHRcdFx0XHRpZiAoIXZhbGlkX2hvc3Rjb25kKGJjLCBsZW4sIFx1MDAyNm1pbl9sZW4pKVxuIDc2NDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzY1Olx0XHRcdFx0YnJlYWs7XG4gNzY2Olx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX0RFVl9DT05EOlxuIDc2NzpcdFx0XHRcdGlmICghdmFsaWRfZGV2Y29uZChiYywgbGVuLCBcdTAwMjZtaW5fbGVuKSlcbiA3Njg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc2OTpcdFx0XHRcdGJyZWFrO1xuIDc3MDpcdFx0XHRjYXNlIElORVRfRElBR19CQ19TX0VROlxuIDc3MTpcdFx0XHRjYXNlIElORVRfRElBR19CQ19TX0dFOlxuIDc3MjpcdFx0XHRjYXNlIElORVRfRElBR19CQ19TX0xFOlxuIDc3MzpcdFx0XHRjYXNlIElORVRfRElBR19CQ19EX0VROlxuIDc3NDpcdFx0XHRjYXNlIElORVRfRElBR19CQ19EX0dFOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjQ4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnl0ZWNvZGUgQXVkaXQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiwgZXNwZWNpYWxseSBpbiBsaWdodCBvZiB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgaGFyZCBsaW1pdCDigJMgYElORVRfRElBR19CQ19NQVhfT1BTID0gNjRgIOKAkyBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHByb2Nlc3NlZCB3aXRoaW4gYGluZXRfZGlhZ19iY19hdWRpdGAuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCwgd2l0aGluIGBpbmV0X2RpYWdfYmNfYXVkaXRgLCB0aGV54oCZcmUgaW5jcmVtZW50aW5nIHRoaXMgYG9wc2AgY291bnRlciBmb3IgZWFjaCBvcGNvZGUgdGhleSBlbmNvdW50ZXIuIElmIHRoYXQgYG9wc2AgY291bnRlciBleGNlZWRzIGBJTkVUX0RJQUdfQkNfTUFYX09QU2AsIHRoZSBmdW5jdGlvbiBraWNrcyBiYWNrIGFuIGAtRUlOVkFMYCBlcnJvci4gVGhhdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgc2VjdXJpdHkgbWVhc3VyZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbGFyZ2VyIGNvbnRleHQ6IHdoZXJlIGlzIHRoaXMgYGluZXRfZGlhZ19iY19hdWRpdGAgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBBbmQgY3JpdGljYWxseSwgaG93IGlzIHRoaXMgYnl0ZWNvZGUgYmVpbmcgZXhlY3V0ZWQgb3Igb3RoZXJ3aXNlIGhhbmRsZWQgYnkgdGhlIHN5c3RlbT8gVW5kZXJzdGFuZGluZyB0aG9zZSBjYWxsIHNpdGVzIGFuZCB0aGUgYnl0ZWNvZGUgZXhlY3V0aW9uIGZsb3cgd2lsbCBiZSBjcnVjaWFsIHRvIGFzc2Vzc2luZyB0aGUgb3ZlcmFsbCBpbXBhY3QgYW5kIGVmZmVjdGl2ZW5lc3Mgb2YgdGhpcyBjaGFuZ2UuIElzIHRoaXMgYSBmaWx0ZXI/IEEgdHJhbnNmb3JtYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBieXRlY29kZeKAmXMgcHVycG9zZSB0byBzZWUgdGhlIHJpc2sgdGhlIGxpbWl0IGFkZHJlc3Nlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9kaWFnX2JjX2F1ZGl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2luZXRfZGlhZy5jPTcyMD1zdGF0aWMgYm9vbCB2YWxpZF9jZ3JvdXBjb25kKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wLCBpbnQgbGVuLFxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTczMy1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjczNDpzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTczNS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jPTg1NT1zdGF0aWMgaW50IF9faW5ldF9kaWFnX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgaGRybGVuKVxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg3MS1cdH1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjg3MjpcdGVyciA9IGluZXRfZGlhZ19iY19hdWRpdChjYl9kYXRhLCBza2IpO1xubmV0L2lwdjQvaW5ldF9kaWFnLmMtODczLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTE3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgaW5ldF9kaWFnX2R1bXBfc3RhcnRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgYGluZXRfZGlhZ2Agc3Vic3lzdGVtLCBhbmQgYSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQgaXMgdGhhdCBkdW1wIGZ1bmN0aW9uLiBMZXQmIzM5O3MgemVybyBpbiBvbiBgX19pbmV0X2RpYWdfZHVtcF9zdGFydGAgYXJvdW5kIGxpbmUgODU1LiBUaGlzIHN1Z2dlc3RzIHRoYXQgaXQmIzM5O3MgdGhlIGNvcmUgZnVuY3Rpb24gdGhhdCBvcmNoZXN0cmF0ZXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGlhZ25vc3RpYyBkYXRhIGR1bXAgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBpbml0aWFsaXphdGlvbiBhbmQgaXRlcmF0aW9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIHdvcmtzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgYWNjZXNzZXMgYW5kIG1hbmlwdWxhdGVzLiBJcyBpdCB1c2luZyBhIHN0YW5kYXJkIGl0ZXJhdG9yLCBvciBzb21ldGhpbmcgY3VzdG9tPyBXaGF0IGFib3V0IGFueSBwb3RlbnRpYWwgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcz8gVW5kZXJzdGFuZGluZyB0aGUgZW50cnkgcG9pbnQgd2lsbCBtYWtlIHRoZSByZXN0IG9mIHRoZSBwdXp6bGUgbXVjaCBjbGVhcmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2luZXRfZGlhZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTU6XHRzdGF0aWMgaW50IF9faW5ldF9kaWFnX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgaGRybGVuKVxuIDg1NjpcdHtcbiA4NTc6XHRcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXHUwMDNlbmxoO1xuIDg1ODpcdFx0c3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGE7XG4gODU5Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gY2ItXHUwMDNlc2tiO1xuIDg2MDpcdFx0c3RydWN0IG5sYXR0ciAqbmxhO1xuIDg2MTpcdFx0aW50IGVycjtcbiA4NjI6XHRcbiA4NjM6XHRcdGNiX2RhdGEgPSBremFsbG9jX29iaigqY2JfZGF0YSk7XG4gODY0Olx0XHRpZiAoIWNiX2RhdGEpXG4gODY1Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDg2NjpcdFxuIDg2NzpcdFx0ZXJyID0gaW5ldF9kaWFnX3BhcnNlX2F0dHJzKG5saCwgaGRybGVuLCBjYl9kYXRhLVx1MDAzZXJlcV9ubGFzKTtcbiA4Njg6XHRcdGlmIChlcnIpIHtcbiA4Njk6XHRcdFx0a2ZyZWUoY2JfZGF0YSk7XG4gODcwOlx0XHRcdHJldHVybiBlcnI7XG4gODcxOlx0XHR9XG4gODcyOlx0XHRlcnIgPSBpbmV0X2RpYWdfYmNfYXVkaXQoY2JfZGF0YSwgc2tiKTtcbiA4NzM6XHRcdGlmIChlcnIpIHtcbiA4NzQ6XHRcdFx0a2ZyZWUoY2JfZGF0YSk7XG4gODc1Olx0XHRcdHJldHVybiBlcnI7XG4gODc2Olx0XHR9XG4gODc3Olx0XG4gODc4Olx0XHRubGEgPSBjYl9kYXRhLVx1MDAzZWluZXRfZGlhZ19ubGFfYnBmX3N0Z3M7XG4gODc5Olx0XHRpZiAobmxhKSB7XG4gODgwOlx0XHRcdHN0cnVjdCBicGZfc2tfc3RvcmFnZV9kaWFnICpicGZfc3RnX2RpYWc7XG4gODgxOlx0XG4gODgyOlx0XHRcdGJwZl9zdGdfZGlhZyA9IGJwZl9za19zdG9yYWdlX2RpYWdfYWxsb2MobmxhKTtcbiA4ODM6XHRcdFx0aWYgKElTX0VSUihicGZfc3RnX2RpYWcpKSB7XG4gODg0Olx0XHRcdFx0a2ZyZWUoY2JfZGF0YSk7XG4gODg1Olx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYnBmX3N0Z19kaWFnKTtcbiA4ODY6XHRcdFx0fVxuIDg4NzpcdFx0XHRjYl9kYXRhLVx1MDAzZWJwZl9zdGdfZGlhZyA9IGJwZl9zdGdfZGlhZztcbiA4ODg6XHRcdH1cbiA4ODk6XHRcbiA4OTA6XHRcdGNiLVx1MDAzZWRhdGEgPSBjYl9kYXRhO1xuIDg5MTpcdFx0cmV0dXJuIDA7XG4gODkyOlx0fVxuIDg5MzpcdFxuIDg5NDpcdHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzcwCgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDQwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBpbmV0X2RpYWcgQnl0ZWNvZGUgT3BlcmF0aW9uIExpbWl0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXTigJlzIHByaW1hcmlseSBmb2N1c2VkIG9uIHJlc3RyaWN0aW5nIHRoZSBudW1iZXIgb2YgYnl0ZWNvZGUgb3BlcmF0aW9ucyBhbGxvd2VkIHdpdGhpbiBgaW5ldF9kaWFnYCBzb2NrZXQgZmlsdGVyIGR1bXBzLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBsaW1pdCwgYElORVRfRElBR19CQ19NQVhfT1BTYCAoc2V0IHRvIDY0KSwgYW5kIGEgY291bnRlciwgYG9wc2AsIHRoYXQgaW5jcmVtZW50cyB3aXRoIGVhY2ggb3BlcmF0aW9uIHdpdGhpbiBgaW5ldF9kaWFnX2JjX2F1ZGl0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBpbnRyb2R1Y2luZyBhbnkgbmV3IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcz8mIzM0OwoKRmlyc3QsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3MgdGhpbmsgdGhyb3VnaCB0aGUgc2NlbmFyaW9zLiBUaGUgY291bnRlciBgb3BzYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCByaWdodD8gR29vZC4gTm8gbmV3IGJ1ZmZlcnMgYXJlIGJlaW5nIGludHJvZHVjZWQsIGFuZCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBoYXBwZW5pbmcuIEV4Y2VsbGVudC4gTm8gZGF0YSBpcyBiZWluZyBjb3BpZWQgZnJvbSB0aGUga2VybmVsIHRvIHVzZXIgc3BhY2UsIHNvIG5vIHBvdGVudGlhbCBmb3IgaW5mb3JtYXRpb24gbGVha2FnZSB0aGVyZS4gQW5kIGNyaXRpY2FsbHksIG5vIGNvbmRpdGlvbnMgYXJlIGJyYW5jaGluZyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIGRlZmluaXRlbHkgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgYW55d2hlcmUgaW4gdGhpcyBzY29wZS4gSeKAmW0gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIG9uIHRoYXQgZnJvbnQuCgpOb3csIGRvZXMgdGhpcyBwYXRjaCB3YXJyYW50IGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBydW4/IEtNU0FOIGlzIHJlbGV2YW50IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcG90ZW50aWFsIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGJyYW5jaCBjb25kaXRpb25zLiBMb29raW5nIGF0IHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyDigJMganVzdCBhZGRpbmcgYSBjb3VudGVyIGFuZCBhIGNoZWNrIOKAkyBub25lIG9mIHRob3NlIEtNU0FOIGNvbmNlcm5zIHNlZW0gdG8gYXBwbHkuIFN0YW5kYXJkIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCBvdGhlciBzYW5pdGl6ZXJzIHNob3VsZCBiZSBzdWZmaWNpZW50IGhlcmUuIFRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIGFueSBLTVNBTi1zcGVjaWZpYyBidWdzIG9yIGV4cG9zaW5nIGV4aXN0aW5nIG9uZXMuCgpTbywgbGV0JiMzOTtzIHN1bW1hcml6ZSBpdCBmb3IgdGhlIHJlY29yZC4gVGhlIHBhdGNoIGlzIHNpbXBseSBhZGRpbmcgYW4gb3Bjb2RlIGNvdW50IGxpbWl0LCBgSU5FVF9ESUFHX0JDX01BWF9PUFNgLCBkdXJpbmcgYGluZXRfZGlhZ19iY19hdWRpdGAuIFRoaXMgaXMgaW50ZW5kZWQgdG8gbWl0aWdhdGUgZGVuaWFsLW9mLXNlcnZpY2Ugcmlza3MsIG9yIHBvdGVudGlhbCBleGNlc3NpdmUgbG9jayBob2xkIHRpbWVzLiBUaGUgYWRkZWQgbG9jYWwgY291bnRlciBgb3BzYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLiBDcnVjaWFsbHksIHRoZSBwYXRjaCBkb2VzICpub3QqIGFsbG9jYXRlIG9yIGFsdGVyIGV4aXN0aW5nIGtlcm5lbCBtZW1vcnkgc3RydWN0dXJlczsgaXQgZG9lc24mIzM5O3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2U7IGFuZCBpbXBvcnRhbnRseSwgaXQgZG9lcyAqbm90KiBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgZGF0YSBidWZmZXIgcmVhZHMgaW4gYW55IHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gVGhlcmVmb3JlLCBubyBLTVNBTiBpcyBuZWVkZWQuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplcnMgYXJlIGdvb2QgdG8gZ28uIFRpbWUgdG8gc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gdXBwZXIgYm91bmQgKElORVRfRElBR19CQ19NQVhfT1BTID0gNjQpIG9uIHRoZSBudW1iZXIgb2YgYnl0ZWNvZGUgb3BlcmF0aW9ucyB2ZXJpZmllZCBkdXJpbmcgaW5ldF9kaWFnIGZpbHRlciBhdWRpdGluZyBpbiBpbmV0X2RpYWdfYmNfYXVkaXQoKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZWx5IGxvbmcgYnl0ZWNvZGUgZXhlY3V0aW9ucyB3aGlsZSBob2xkaW5nIHNvY2tldCBoYXNoIGJ1Y2tldCBsb2Nrcy4gVGhlIG9ubHkgdmFyaWFibGUgYWRkZWQgaXMgYSBsb2NhbCBpbnRlZ2VyIGNvdW50ZXIgaW5pdGlhbGl6ZWQgdG8gMC4gVGhlIHBhdGNoIGRvZXMgbm90IHRvdWNoIGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzLCBzdHJ1Y3QgcGFkZGluZywgYnVmZmVyIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24sIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiB1cHBlciBib3VuZCAoSU5FVF9ESUFHX0JDX01BWF9PUFMgPSA2NCkgb24gdGhlIG51bWJlciBvZiBieXRlY29kZSBvcGVyYXRpb25zIHZlcmlmaWVkIGR1cmluZyBpbmV0X2RpYWcgZmlsdGVyIGF1ZGl0aW5nIGluIGluZXRfZGlhZ19iY19hdWRpdCgpIHRvIHByZXZlbnQgZXhjZXNzaXZlbHkgbG9uZyBieXRlY29kZSBleGVjdXRpb25zIHdoaWxlIGhvbGRpbmcgc29ja2V0IGhhc2ggYnVja2V0IGxvY2tzLiBUaGUgb25seSB2YXJpYWJsZSBhZGRlZCBpcyBhIGxvY2FsIGludGVnZXIgY291bnRlciBpbml0aWFsaXplZCB0byAwLiBUaGUgcGF0Y2ggZG9lcyBub3QgdG91Y2gga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMsIHN0cnVjdCBwYWRkaW5nLCBidWZmZXIgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiwgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjAwLjUzNzU4Mjk2NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMTUyOTMxODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRElBR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImluZXRfZGlhZ19iY19hdWRpdFwiLFxuICAgIFwiX19pbmV0X2RpYWdfZHVtcF9zdGFydFwiLFxuICAgIFwiaW5ldF9kaWFnX2R1bXBfc3RhcnRcIixcbiAgICBcImluZXRfZGlhZ19iY19za1wiLFxuICAgIFwiaW5ldF9kaWFnX2hhbmRsZXJfY21kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIHVwcGVyIGJvdW5kIChJTkVUX0RJQUdfQkNfTUFYX09QUyA9IDY0KSBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVjb2RlIG9wZXJhdGlvbnMgdmVyaWZpZWQgZHVyaW5nIGluZXRfZGlhZyBmaWx0ZXIgYXVkaXRpbmcgaW4gaW5ldF9kaWFnX2JjX2F1ZGl0KCkgdG8gcHJldmVudCBleGNlc3NpdmVseSBsb25nIGJ5dGVjb2RlIGV4ZWN1dGlvbnMgd2hpbGUgaG9sZGluZyBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MuIFRoZSBvbmx5IHZhcmlhYmxlIGFkZGVkIGlzIGEgbG9jYWwgaW50ZWdlciBjb3VudGVyIGluaXRpYWxpemVkIHRvIDAuIFRoZSBwYXRjaCBkb2VzIG5vdCB0b3VjaCBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgc3RydWN0IHBhZGRpbmcsIGJ1ZmZlciBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbmV0X2RpYWdfYmNfYXVkaXQgaW4gbmV0L2lwdjQvaW5ldF9kaWFnLmMsIHBsYWNpbmcgYSBsaW1pdCAoSU5FVF9ESUFHX0JDX01BWF9PUFMpIG9uIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBhbGxvd2VkIGluIGluZXRfZGlhZyBieXRlY29kZSBmaWx0ZXJzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIHNvY2tldCBkaWFnbm9zdGljIGR1bXAgcGFyc2luZyBsb2dpYyBhbmQgZXJyb3IgcGF0aHMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjAwLjUzNzU4Nzc0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MDM2NzMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY4YTJmZDNjODczYjlmYzdiZmQ5Yzk1MGM1ZjMzNjVlZmM4M2IyMDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAxOTo0MTo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2RpYWcuYyBiL25ldC9pcHY0L2luZXRfZGlhZy5jXFxuaW5kZXggMzRiNzdhYTg3ZDBhNC4uMWNhNTI4Y2QzZTcyYiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuY1xcbisrKyBiL25ldC9pcHY0L2luZXRfZGlhZy5jXFxuQEAgLTcyNSw2ICs3MjUsMTIgQEAgc3RhdGljIGJvb2wgdmFsaWRfY2dyb3VwY29uZChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCwgaW50IGxlbixcXG4gfVxcbiAjZW5kaWZcXG4gXFxuKy8qIHNzKDgpIGZpbHRlcnMgb25seSBuZWVkIGEgaGFuZGZ1bCBvZiBjb21wYXJlL2hvc3QvbWFyayBvcHMuXFxuKyAqIEJvdW5kIHRoZSBwcm9ncmFtIHNvIGR1bXAgd2Fsa3MgY2Fubm90IHJ1biBhbiBhcmJpdHJhcmlseSBsb25nXFxuKyAqIGJ5dGVjb2RlIHNlcXVlbmNlIHVuZGVyIHRoZSBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MuXFxuKyAqL1xcbisjZGVmaW5lIElORVRfRElBR19CQ19NQVhfT1BTIDY0XFxuK1xcbiBzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcXG4gXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbkBAIC03MzIsNiArNzM4LDcgQEAgc3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXFxuIFxcdGNvbnN0IHZvaWQgKmJ5dGVjb2RlLCAqYmM7XFxuIFxcdGludCBieXRlY29kZV9sZW4sIGxlbjtcXG4gXFx0Ym9vbCBuZXRfYWRtaW47XFxuK1xcdGludCBvcHMgPSAwO1xcbiBcXG4gXFx0aWYgKCFhdHRyKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtNzQ3LDYgKzc1NCw5IEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxcbiBcXHRcXHRpbnQgbWluX2xlbiA9IHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wKTtcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AgPSBiYztcXG4gXFxuK1xcdFxcdGlmICgrK29wcyBcXHUwMDNlIElORVRfRElBR19CQ19NQVhfT1BTKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdFxcdHN3aXRjaCAob3AtXFx1MDAzZWNvZGUpIHtcXG4gXFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfU19DT05EOlxcbiBcXHRcXHRjYXNlIElORVRfRElBR19CQ19EX0NPTkQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjAyLjAxODczMDE1NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDYyOTA5NDYwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVF9ESUFHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5ldF9kaWFnX2JjX2F1ZGl0XCIsXG4gICAgXCJfX2luZXRfZGlhZ19kdW1wX3N0YXJ0XCIsXG4gICAgXCJpbmV0X2RpYWdfZHVtcF9zdGFydFwiLFxuICAgIFwiaW5ldF9kaWFnX2JjX3NrXCIsXG4gICAgXCJpbmV0X2RpYWdfaGFuZGxlcl9jbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbmV0X2RpYWdfYmNfYXVkaXQgaW4gbmV0L2lwdjQvaW5ldF9kaWFnLmMsIHBsYWNpbmcgYSBsaW1pdCAoSU5FVF9ESUFHX0JDX01BWF9PUFMpIG9uIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBhbGxvd2VkIGluIGluZXRfZGlhZyBieXRlY29kZSBmaWx0ZXJzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIHNvY2tldCBkaWFnbm9zdGljIGR1bXAgcGFyc2luZyBsb2dpYyBhbmQgZXJyb3IgcGF0aHMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjhhMmZkM2M4NzNiOWZjN2JmZDljOTUwYzVmMzM2NWVmYzgzYjIwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTk6NDE6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2RpYWcuYyBiL25ldC9pcHY0L2luZXRfZGlhZy5jXG5pbmRleCAzNGI3N2FhODdkMGE0Li4xY2E1MjhjZDNlNzJiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaW5ldF9kaWFnLmNcbisrKyBiL25ldC9pcHY0L2luZXRfZGlhZy5jXG5AQCAtNzI1LDYgKzcyNSwxMiBAQCBzdGF0aWMgYm9vbCB2YWxpZF9jZ3JvdXBjb25kKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wLCBpbnQgbGVuLFxuIH1cbiAjZW5kaWZcbiBcbisvKiBzcyg4KSBmaWx0ZXJzIG9ubHkgbmVlZCBhIGhhbmRmdWwgb2YgY29tcGFyZS9ob3N0L21hcmsgb3BzLlxuKyAqIEJvdW5kIHRoZSBwcm9ncmFtIHNvIGR1bXAgd2Fsa3MgY2Fubm90IHJ1biBhbiBhcmJpdHJhcmlseSBsb25nXG4rICogYnl0ZWNvZGUgc2VxdWVuY2UgdW5kZXIgdGhlIHNvY2tldCBoYXNoIGJ1Y2tldCBsb2Nrcy5cbisgKi9cbisjZGVmaW5lIElORVRfRElBR19CQ19NQVhfT1BTIDY0XG4rXG4gc3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXG4gXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5AQCAtNzMyLDYgKzczOCw3IEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxuIFx0Y29uc3Qgdm9pZCAqYnl0ZWNvZGUsICpiYztcbiBcdGludCBieXRlY29kZV9sZW4sIGxlbjtcbiBcdGJvb2wgbmV0X2FkbWluO1xuK1x0aW50IG9wcyA9IDA7XG4gXG4gXHRpZiAoIWF0dHIpXG4gXHRcdHJldHVybiAwO1xuQEAgLTc0Nyw2ICs3NTQsOSBAQCBzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcbiBcdFx0aW50IG1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCk7XG4gXHRcdGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wID0gYmM7XG4gXG4rXHRcdGlmICgrK29wcyBcdTAwM2UgSU5FVF9ESUFHX0JDX01BWF9PUFMpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRcdHN3aXRjaCAob3AtXHUwMDNlY29kZSkge1xuIFx0XHRjYXNlIElORVRfRElBR19CQ19TX0NPTkQ6XG4gXHRcdGNhc2UgSU5FVF9ESUFHX0JDX0RfQ09ORDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjAyLjAxODczMTQ3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MTcxNjAwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgaW5ldF9kaWFnLmNgIFBhdGNoKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBuZXQvaXB2NC9pbmV0X2RpYWcuY2AuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBhbHRlcmVkIGFuZCwgY3J1Y2lhbGx5LCAqd2h5Ki4gTXkgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIHBpbnBvaW50IHRoZSBjYWxscyB0byBgaW5ldF9kaWFnX2JjX2F1ZGl0YC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpa2VseSBsaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGNvbnRleHQuIEknbGwgcHJvYmFibHkgcmVhY2ggZm9yIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIncyBmYXN0ZXN0IGFuZCBtb3N0IGVmZmljaWVudCBmb3IgdHJhdmVyc2luZyB0aGF0IGZpbGUgYW5kIGlkZW50aWZ5aW5nIHRob3NlIGNhbGwgc2l0ZXMuIFRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hpY2ggY29uZmlndXJhdGlvbnMgYW5kIHVwc3RyZWFtIGNvZGUgYXJlIGltcGFjdGVkLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo0MjowNy40MzU4OTQwOTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4ODU1MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9kaWFnX2JjX2F1ZGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2luZXRfZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2luZXRfZGlhZy5jPTcyMD1zdGF0aWMgYm9vbCB2YWxpZF9jZ3JvdXBjb25kKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wLCBpbnQgbGVuLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzMzLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjczNDpzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MzUtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTg1NT1zdGF0aWMgaW50IF9faW5ldF9kaWFnX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgaGRybGVuKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODcxLVxcdH1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4NzI6XFx0ZXJyID0gaW5ldF9kaWFnX2JjX2F1ZGl0KGNiX2RhdGEsIHNrYik7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODczLVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDI6MDcuNDg1NzgzODAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5MjQ3MjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGluZXRfZGlhZyBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYXJvdW5kIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGFuZCBgX19pbmV0X2RpYWdfZHVtcF9zdGFydGAgaW4gYG5ldC9pcHY0L2luZXRfZGlhZy5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiB0aGVzZSBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0sIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvTWFrZWZpbGVgIGFuZCBgbmV0L2lwdjQvS2NvbmZpZ2AuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgdGhlIHByZXByb2Nlc3NvciBkZWZpbmVzIEkgbmVlZCB0byBwcm9wZXJseSBpbnRlcnByZXQgdGhlaXIgcm9sZS4gSSdtIGd1ZXNzaW5nIHRoaXMgd2lsbCBxdWlja2x5IHRlbGwgbWUgd2hhdCBpcyBnb2luZyBvbiwgYW5kIGZyb20gdGhlcmUgSSBjYW4gYmV0dGVyIGFzc2VzcyB0aGVpciBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjA5LjQ3ODI1ODAxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pbmV0X2RpYWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MzA6XFx0ICogYnl0ZWNvZGUgc2VxdWVuY2UgdW5kZXIgdGhlIHNvY2tldCBoYXNoIGJ1Y2tldCBsb2Nrcy5cXG4gNzMxOlxcdCAqL1xcbiA3MzI6XFx0I2RlZmluZSBJTkVUX0RJQUdfQkNfTUFYX09QUyA2NFxcbiA3MzM6XFx0XFxuIDczNDpcXHRzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcXG4gNzM1OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDczNjpcXHR7XFxuIDczNzpcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyID0gY2JfZGF0YS1cXHUwMDNlaW5ldF9kaWFnX25sYV9iYztcXG4gNzM4OlxcdFxcdGNvbnN0IHZvaWQgKmJ5dGVjb2RlLCAqYmM7XFxuIDczOTpcXHRcXHRpbnQgYnl0ZWNvZGVfbGVuLCBsZW47XFxuIDc0MDpcXHRcXHRib29sIG5ldF9hZG1pbjtcXG4gNzQxOlxcdFxcdGludCBvcHMgPSAwO1xcbiA3NDI6XFx0XFxuIDc0MzpcXHRcXHRpZiAoIWF0dHIpXFxuIDc0NDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzQ1OlxcdFxcbiA3NDY6XFx0XFx0aWYgKG5sYV9sZW4oYXR0cikgXFx1MDAzYyBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCkpXFxuIDc0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzQ4OlxcdFxcbiA3NDk6XFx0XFx0bmV0X2FkbWluID0gbmV0bGlua19uZXRfY2FwYWJsZShza2IsIENBUF9ORVRfQURNSU4pO1xcbiA3NTA6XFx0XFx0Ynl0ZWNvZGUgPSBiYyA9IG5sYV9kYXRhKGF0dHIpO1xcbiA3NTE6XFx0XFx0bGVuID0gYnl0ZWNvZGVfbGVuID0gbmxhX2xlbihhdHRyKTtcXG4gNzUyOlxcdFxcbiA3NTM6XFx0XFx0d2hpbGUgKGxlbiBcXHUwMDNlIDApIHtcXG4gNzU0OlxcdFxcdFxcdGludCBtaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBpbmV0X2RpYWdfYmNfb3ApO1xcbiA3NTU6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AgPSBiYztcXG4gNzU2OlxcdFxcbiA3NTc6XFx0XFx0XFx0aWYgKCsrb3BzIFxcdTAwM2UgSU5FVF9ESUFHX0JDX01BWF9PUFMpXFxuIDc1ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzU5OlxcdFxcbiA3NjA6XFx0XFx0XFx0c3dpdGNoIChvcC1cXHUwMDNlY29kZSkge1xcbiA3NjE6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfU19DT05EOlxcbiA3NjI6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfRF9DT05EOlxcbiA3NjM6XFx0XFx0XFx0XFx0aWYgKCF2YWxpZF9ob3N0Y29uZChiYywgbGVuLCBcXHUwMDI2bWluX2xlbikpXFxuIDc2NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzY1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3NjY6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfREVWX0NPTkQ6XFxuIDc2NzpcXHRcXHRcXHRcXHRpZiAoIXZhbGlkX2RldmNvbmQoYmMsIGxlbiwgXFx1MDAyNm1pbl9sZW4pKVxcbiA3Njg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc2OTpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzcwOlxcdFxcdFxcdGNhc2UgSU5FVF9ESUFHX0JDX1NfRVE6XFxuIDc3MTpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19TX0dFOlxcbiA3NzI6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfU19MRTpcXG4gNzczOlxcdFxcdFxcdGNhc2UgSU5FVF9ESUFHX0JDX0RfRVE6XFxuIDc3NDpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19EX0dFOlxcbiA3NzU6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfRF9MRTpcXG4gNzc2OlxcdFxcdFxcdFxcdGlmICghdmFsaWRfcG9ydF9jb21wYXJpc29uKGJjLCBsZW4sIFxcdTAwMjZtaW5fbGVuKSlcXG4gNzc3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3Nzg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDc3OTpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19NQVJLX0NPTkQ6XFxuIDc4MDpcXHRcXHRcXHRcXHRpZiAoIW5ldF9hZG1pbilcXG4gNzgxOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDc4MjpcXHRcXHRcXHRcXHRpZiAoIXZhbGlkX21hcmtjb25kKGJjLCBsZW4sIFxcdTAwMjZtaW5fbGVuKSlcXG4gNzgzOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3ODQ6XFx0XFx0XFx0XFx0Y2JfZGF0YS1cXHUwMDNlbWFya19uZWVkZWQgPSB0cnVlO1xcbiA3ODU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDc4NjpcXHQjaWZkZWYgQ09ORklHX1NPQ0tfQ0dST1VQX0RBVEFcXG4gNzg3OlxcdFxcdFxcdGNhc2UgSU5FVF9ESUFHX0JDX0NHUk9VUF9DT05EOlxcbiA3ODg6XFx0XFx0XFx0XFx0aWYgKCF2YWxpZF9jZ3JvdXBjb25kKGJjLCBsZW4sIFxcdTAwMjZtaW5fbGVuKSlcXG4gNzg5OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3OTA6XFx0XFx0XFx0XFx0Y2JfZGF0YS1cXHUwMDNlY2dyb3VwX25lZWRlZCA9IHRydWU7XFxuIDc5MTpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzkyOlxcdCNlbmRpZlxcbiA3OTM6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfQVVUTzpcXG4gNzk0OlxcdFxcdFxcdFxcdGNiX2RhdGEtXFx1MDAzZXVzZXJsb2Nrc19uZWVkZWQgPSB0cnVlO1xcbiA3OTU6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuIDc5NjpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19KTVA6XFxuIDc5NzpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19OT1A6XFxuIDc5ODpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzk5OlxcdFxcdFxcdGRlZmF1bHQ6XFxuIDgwMDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODAxOlxcdFxcdFxcdH1cXG4gODAyOlxcdFxcbiA4MDM6XFx0XFx0XFx0aWYgKG9wLVxcdTAwM2Vjb2RlICE9IElORVRfRElBR19CQ19OT1ApIHtcXG4gODA0OlxcdFxcdFxcdFxcdGlmIChvcC1cXHUwMDNlbm8gXFx1MDAzYyBtaW5fbGVuIHx8IG9wLVxcdTAwM2VubyBcXHUwMDNlIGxlbiArIDQgfHwgb3AtXFx1MDAzZW5vIFxcdTAwMjYgMylcXG4gODA1OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4MDY6XFx0XFx0XFx0XFx0aWYgKG9wLVxcdTAwM2VubyBcXHUwMDNjIGxlbiBcXHUwMDI2XFx1MDAyNlxcbiA4MDc6XFx0XFx0XFx0XFx0ICAgICF2YWxpZF9jYyhieXRlY29kZSwgYnl0ZWNvZGVfbGVuLCBsZW4gLSBvcC1cXHUwMDNlbm8pKVxcbiA4MDg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgwOTpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjA5LjQ3ODM2NDYzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMyNDc5ODkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgS2VybmVsIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBgaW5ldF9kaWFnLmNgIGdldHMgY29tcGlsZWQuIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgdGltZSB0byByZXZpc2l0IHRoZSBidWlsZCBzeXN0ZW0sIHNvIEknbSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgbmV0L2lwdjQvTWFrZWZpbGVgLiBUaGF0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGhvdyB0aGUgSVB2NCBuZXR3b3JraW5nIHN0YWNrIG1vZHVsZXMgYXJlIGNvbnN0cnVjdGVkLiBIb3BlZnVsbHksIHRoZSBpbmNsdXNpb24gb2YgYGluZXRfZGlhZy5jYCB3aWxsIGJlIGhhbmRsZWQgdGhlcmUsIG9yIGF0IGxlYXN0IHRoYXQgTWFrZWZpbGUgd2lsbCBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQgZmlsZXMgYW5kIHJ1bGVzLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IHlvdSBuZXZlciBrbm93IHdpdGggdGhlc2UgbGFyZ2UsIGNvbXBsZXggcHJvamVjdHMuIFRpbWUgdG8gZGl2ZSBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NTI0MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDI6MTEuODAzMTY3MTQ1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NTk0MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfZGlhZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT00Mj1vYmotJChDT05GSUdfTkVURklMVEVSKVxcdCs9IG5ldGZpbHRlci5vIG5ldGZpbHRlci9cXG5uZXQvaXB2NC9NYWtlZmlsZTo0MzpvYmotJChDT05GSUdfSU5FVF9ESUFHKSArPSBpbmV0X2RpYWcub1xcbm5ldC9pcHY0L01ha2VmaWxlLTQ0LW9iai0kKENPTkZJR19JTkVUX1RDUF9ESUFHKSArPSB0Y3BfZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjExLjg5ODc2NjgzOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNzQ5MjYyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6XG5cbioqRXhhbWluaW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgSU5FVF9ESUFHKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBJTkVUX0RJQUdgLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBUaGV5IGRlZmluZSB0aGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0IHRoYXQgdXNlcnMgc2VlIGluIHRvb2xzIGxpa2UgYG1lbnVjb25maWdgIG9yIGBkZWZjb25maWdgLiBHaXZlbiB0aGF0IGBJTkVUX0RJQUdgIHNlZW1zIG5ldHdvcmstcmVsYXRlZCwgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBgbmV0L2lwdjQvS2NvbmZpZ2AuIEl0J3MgYWxtb3N0IGd1YXJhbnRlZWQgdG8gYmUgaW4gdGhlcmUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU0MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjE2LjE3MzY5NTc2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NTQ3MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVRfRElBR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NDE5PWNvbmZpZyBJTkVUX1RVTk5FTFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MjItXFxubmV0L2lwdjQvS2NvbmZpZzo0MjM6Y29uZmlnIElORVRfRElBR1xcbm5ldC9pcHY0L0tjb25maWctNDI0LVxcdHRyaXN0YXRlIFxcXCJJTkVUOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTQ0Nz1jb25maWcgSU5FVF9SQVdfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00NTQtXFxubmV0L2lwdjQvS2NvbmZpZzo0NTU6Y29uZmlnIElORVRfRElBR19ERVNUUk9ZXFxubmV0L2lwdjQvS2NvbmZpZy00NTYtXFx0Ym9vbCBcXFwiSU5FVDogYWxsb3cgcHJpdmlsZWdlZCBwcm9jZXNzIHRvIGFkbWluaXN0cmF0aXZlbHkgY2xvc2Ugc29ja2V0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDI6MTYuMjE5MjU2NzIyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODg1NTAyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gSVB2NCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBJUHY0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBuZXQvaXB2NC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQyMy4gVGhhdCdzIGEgcmVhc29uYWJsZSBwbGFjZSB0byBiZWdpbjsgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIHN0YW5kYXJkIGZvciBkZWZpbmluZyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdGhlIGxpbmUgbnVtYmVyIHNlZW1zIGxpa2VseSB0byBiZSBhIHJlbGV2YW50IHNlY3Rpb24gcmVsYXRlZCB0byB0aGUgZmVhdHVyZSBJJ20gZXhhbWluaW5nLiBLbm93aW5nIHRoZSBnZW5lcmFsIGxheW91dCBvZiB0aGUgZmlsZSwgdGhpcyBzaG91bGQgZ2V0IG1lIHRvIHRoZSByaWdodCByZWdpb24gdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgYW5kIGRlZmF1bHQgc2V0dGluZ3MuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgZm9ybWF0OiBgY29uZmlnYCwgYGJvb2wvdHJpc3RhdGVgLCBgZGVwZW5kcyBvbmAsIGBoZWxwYCwgYW5kIG1heWJlIHNvbWUgYGRlZmF1bHRgIHN0YXRlbWVudHMuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBvcHRpb24gaW50ZXJhY3RzIHdpdGggb3RoZXJzLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjE4LjYwNzgwOTM4NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyMDpcXHRcXHR0cmlzdGF0ZVxcbiA0MjE6XFx0XFx0ZGVmYXVsdCBuXFxuIDQyMjpcXHRcXG4gNDIzOlxcdGNvbmZpZyBJTkVUX0RJQUdcXG4gNDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJJTkVUOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuIDQyNTpcXHRcXHRkZWZhdWx0IHlcXG4gNDI2OlxcdFxcdGhlbHBcXG4gNDI3OlxcdFxcdCAgU3VwcG9ydCBmb3IgSU5FVCAoVENQLCBVRFAsIGV0Yykgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnlcXG4gNDI4OlxcdFxcdCAgbmF0aXZlIExpbnV4IHRvb2xzIHN1Y2ggYXMgc3MuIHNzIGlzIGluY2x1ZGVkIGluIGlwcm91dGUyLCBjdXJyZW50bHlcXG4gNDI5OlxcdFxcdCAgZG93bmxvYWRhYmxlIGF0OlxcbiA0MzA6XFx0XFxuIDQzMTpcXHRcXHQgICAgaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2NvbGxhYm9yYXRlL3dvcmtncm91cHMvbmV0d29ya2luZy9pcHJvdXRlMlxcbiA0MzI6XFx0XFxuIDQzMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDQzNDpcXHRcXG4gNDM1OlxcdGNvbmZpZyBJTkVUX1RDUF9ESUFHXFxuIDQzNjpcXHRcXHRkZXBlbmRzIG9uIElORVRfRElBR1xcbiA0Mzc6XFx0XFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xcbiA0Mzg6XFx0XFxuIDQzOTpcXHRjb25maWcgSU5FVF9VRFBfRElBR1xcbiA0NDA6XFx0XFx0dHJpc3RhdGUgXFxcIlVEUDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiA0NDE6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gNDQyOlxcdFxcdGRlZmF1bHQgblxcbiA0NDM6XFx0XFx0aGVscFxcbiA0NDQ6XFx0XFx0ICBTdXBwb3J0IGZvciBVRFAgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjE4LjYwNzg5MDYzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjI1MjQyMzY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYGluZXRfZGlhZ19iY19hdWRpdGAgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKiB3aXRoaW4gdGhlIGBpbmV0X2RpYWcuY2AgbW9kdWxlLiBNeSBnb2FsIGlzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgYW5kIGNvbnRleHQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZm9sbG93IHRoZSBjb2RlIHRvIHNlZSB3aGVyZSB0aGlzIGF1ZGl0IGZ1bmN0aW9uIGlzIGludm9rZWQgYW5kIHVuZGVyIHdoYXQgc3BlY2lmaWMgY29uZGl0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBwdXJwb3NlIGFuZCB3b3JrZmxvdyBvZiBgaW5ldF9kaWFnX2JjX2F1ZGl0YC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGxvZ2ljIHRpZWQgdG8gdGhpcyBhdWRpdCBmdW5jdGlvbiBhbmQgaG9wZWZ1bGx5LCB0aGlzIHdpbGwgaGlnaGxpZ2h0IGFueSBhcmVhcyBvZiBwb3RlbnRpYWwgaW50ZXJlc3Qgb3IgY29uY2Vybi4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTIxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo0MjozNC44NjAzMTc3NzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaW5ldF9kaWFnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiA4NTE6XFx0e1xcbiA4NTI6XFx0XFx0cmV0dXJuIF9faW5ldF9kaWFnX2R1bXAoc2tiLCBjYiwgbmxtc2dfZGF0YShjYi1cXHUwMDNlbmxoKSk7XFxuIDg1MzpcXHR9XFxuIDg1NDpcXHRcXG4gODU1OlxcdHN0YXRpYyBpbnQgX19pbmV0X2RpYWdfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCBoZHJsZW4pXFxuIDg1NjpcXHR7XFxuIDg1NzpcXHRcXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVxcdTAwM2VubGg7XFxuIDg1ODpcXHRcXHRzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YTtcXG4gODU5OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBjYi1cXHUwMDNlc2tiO1xcbiA4NjA6XFx0XFx0c3RydWN0IG5sYXR0ciAqbmxhO1xcbiA4NjE6XFx0XFx0aW50IGVycjtcXG4gODYyOlxcdFxcbiA4NjM6XFx0XFx0Y2JfZGF0YSA9IGt6YWxsb2Nfb2JqKCpjYl9kYXRhKTtcXG4gODY0OlxcdFxcdGlmICghY2JfZGF0YSlcXG4gODY1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA4NjY6XFx0XFxuIDg2NzpcXHRcXHRlcnIgPSBpbmV0X2RpYWdfcGFyc2VfYXR0cnMobmxoLCBoZHJsZW4sIGNiX2RhdGEtXFx1MDAzZXJlcV9ubGFzKTtcXG4gODY4OlxcdFxcdGlmIChlcnIpIHtcXG4gODY5OlxcdFxcdFxcdGtmcmVlKGNiX2RhdGEpO1xcbiA4NzA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gODcxOlxcdFxcdH1cXG4gODcyOlxcdFxcdGVyciA9IGluZXRfZGlhZ19iY19hdWRpdChjYl9kYXRhLCBza2IpO1xcbiA4NzM6XFx0XFx0aWYgKGVycikge1xcbiA4NzQ6XFx0XFx0XFx0a2ZyZWUoY2JfZGF0YSk7XFxuIDg3NTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA4NzY6XFx0XFx0fVxcbiA4Nzc6XFx0XFxuIDg3ODpcXHRcXHRubGEgPSBjYl9kYXRhLVxcdTAwM2VpbmV0X2RpYWdfbmxhX2JwZl9zdGdzO1xcbiA4Nzk6XFx0XFx0aWYgKG5sYSkge1xcbiA4ODA6XFx0XFx0XFx0c3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKmJwZl9zdGdfZGlhZztcXG4gODgxOlxcdFxcbiA4ODI6XFx0XFx0XFx0YnBmX3N0Z19kaWFnID0gYnBmX3NrX3N0b3JhZ2VfZGlhZ19hbGxvYyhubGEpO1xcbiA4ODM6XFx0XFx0XFx0aWYgKElTX0VSUihicGZfc3RnX2RpYWcpKSB7XFxuIDg4NDpcXHRcXHRcXHRcXHRrZnJlZShjYl9kYXRhKTtcXG4gODg1OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJwZl9zdGdfZGlhZyk7XFxuIDg4NjpcXHRcXHRcXHR9XFxuIDg4NzpcXHRcXHRcXHRjYl9kYXRhLVxcdTAwM2VicGZfc3RnX2RpYWcgPSBicGZfc3RnX2RpYWc7XFxuIDg4ODpcXHRcXHR9XFxuIDg4OTpcXHRcXG4gODkwOlxcdFxcdGNiLVxcdTAwM2VkYXRhID0gY2JfZGF0YTtcXG4gODkxOlxcdFxcdHJldHVybiAwO1xcbiA4OTI6XFx0fVxcbiA4OTM6XFx0XFxuIDg5NDpcXHRzdGF0aWMgaW50IGluZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gODk1OlxcdHtcXG4gODk2OlxcdFxcdHJldHVybiBfX2luZXRfZGlhZ19kdW1wX3N0YXJ0KGNiLCBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19yZXFfdjIpKTtcXG4gODk3OlxcdH1cXG4gODk4OlxcdFxcbiA4OTk6XFx0c3RhdGljIGludCBpbmV0X2RpYWdfZHVtcF9zdGFydF9jb21wYXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo0MjozNC44NjA0MDcwOTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYzNzA0MDc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQ29kZSBBdWRpdDogYGluZXRfZGlhZy5jYCAtIFBvdGVudGlhbCBBcmVhcyBmb3IgUmV2aWV3KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGZ1bmN0aW9uLiBUaGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIGRvIGlzIGZpZ3VyZSBvdXQgaXRzIHNjb3BlLiBJcyBpdCB1c2VkIG9ubHkgaW4gYSB2ZXJ5IHNwZWNpZmljIHBsYWNlLCBvciBpcyBpdCBwb3RlbnRpYWxseSBjYWxsZWQgZnJvbSBhbGwgb3ZlciB0aGUga2VybmVsPyBJZGVudGlmeWluZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdnVsbmVyYWJsZSBpdCBpcy4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgb2YgYGluZXRfZGlhZy5jYC4gQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlIHRoYXQgcmVsYXRlIHRvIGJ5dGVjb2RlIHByb2Nlc3Npbmcgb3IgZHVtcGluZyBuZXR3b3JrIGluZm9ybWF0aW9uPyBJdCdzIHBvc3NpYmxlIEknbGwgZmluZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgSSBuZWVkIHRvIGV4YW1pbmUgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gYnJvYWRlbiBteSBzZWFyY2ggYmV5b25kIGp1c3QgYGluZXRfZGlhZ19iY19hdWRpdGAgaXRzZWxmLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjM3LjQ5NzQ1MTM2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU3NzE5NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfZGlhZ19iY19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaW5ldF9kaWFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaW5ldF9kaWFnLmM9NDM5PXN0YXRpYyBpbnQgYml0c3RyaW5nX21hdGNoKGNvbnN0IF9fYmUzMiAqYTEsIGNvbnN0IF9fYmUzMiAqYTIsIGludCBiaXRzKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDY0LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjQ2NTpzdGF0aWMgaW50IGluZXRfZGlhZ19iY19ydW4oY29uc3Qgc3RydWN0IG5sYXR0ciAqX2JjLFxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTQ2Ni1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy00NzItXFx0XFx0aW50IHllcyA9IDE7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NDczOlxcdFxcdGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wID0gYmM7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDc0LVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM9NTg0PXN0YXRpYyB2b2lkIGVudHJ5X2ZpbGxfYWRkcnMoc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnksXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy01OTgtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NTk5OmludCBpbmV0X2RpYWdfYmNfc2soY29uc3Qgc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsIHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy02MDAte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjMwLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjYzMTpcXHRyZXR1cm4gaW5ldF9kaWFnX2JjX3J1bihiYywgXFx1MDAyNmVudHJ5KTtcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy02MzItfVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjYzMzpFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2RpYWdfYmNfc2spO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYzNC1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz02MzU9c3RhdGljIGludCB2YWxpZF9jYyhjb25zdCB2b2lkICpiYywgaW50IGxlbiwgaW50IGNjKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjM3LVxcdHdoaWxlIChsZW4gXFx1MDAzZT0gMCkge1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjYzODpcXHRcXHRjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCA9IGJjO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYzOS1cXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTY1Mi0vKiBkYXRhIGlzIHUzMiBpZmluZGV4ICovXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NjUzOnN0YXRpYyBib29sIHZhbGlkX2RldmNvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjU0LVxcdFxcdFxcdCAgaW50ICptaW5fbGVuKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjYzLS8qIFZhbGlkYXRlIGFuIGluZXRfZGlhZ19ob3N0Y29uZC4gKi9cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo2NjQ6c3RhdGljIGJvb2wgdmFsaWRfaG9zdGNvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjY1LVxcdFxcdFxcdCAgIGludCAqbWluX2xlbilcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTcwMS0vKiBWYWxpZGF0ZSBhIHBvcnQgY29tcGFyaXNvbiBvcGVyYXRvci4gKi9cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo3MDI6c3RhdGljIGJvb2wgdmFsaWRfcG9ydF9jb21wYXJpc29uKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wLFxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTcwMy1cXHRcXHRcXHRcXHQgIGludCBsZW4sIGludCAqbWluX2xlbilcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MDQte1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjcwNTpcXHQvKiBQb3J0IGNvbXBhcmlzb25zIHB1dCB0aGUgcG9ydCBpbiBhIGZvbGxvdy1vbiBpbmV0X2RpYWdfYmNfb3AuICovXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NzA2OlxcdCptaW5fbGVuICs9IHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wKTtcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MDctXFx0aWYgKGxlbiBcXHUwMDNjICptaW5fbGVuKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzExLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjcxMjpzdGF0aWMgYm9vbCB2YWxpZF9tYXJrY29uZChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCwgaW50IGxlbixcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MTMtXFx0XFx0XFx0ICAgaW50ICptaW5fbGVuKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzE5LSNpZmRlZiBDT05GSUdfU09DS19DR1JPVVBfREFUQVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjcyMDpzdGF0aWMgYm9vbCB2YWxpZF9jZ3JvdXBjb25kKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wLCBpbnQgbGVuLFxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTcyMS1cXHRcXHRcXHQgICAgIGludCAqbWluX2xlbilcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTczMy1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo3MzQ6c3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzM1LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03NDUtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NzQ2OlxcdGlmIChubGFfbGVuKGF0dHIpIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBpbmV0X2RpYWdfYmNfb3ApKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTc0Ny1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTc1My1cXHR3aGlsZSAobGVuIFxcdTAwM2UgMCkge1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjc1NDpcXHRcXHRpbnQgbWluX2xlbiA9IHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wKTtcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo3NTU6XFx0XFx0Y29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AgPSBiYztcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03NTYtXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz04NTU9c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IGhkcmxlbilcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg3MS1cXHR9XFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6ODcyOlxcdGVyciA9IGluZXRfZGlhZ19iY19hdWRpdChjYl9kYXRhLCBza2IpO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg3My1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjM4LjM1NTE3NjE3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTk0NDE1MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgQ29kZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGNvbmNlcm5pbmcgYGluZXRfZGlhZy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQgYW5kIHdoZXRoZXIgaXQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJdCBzZWVtcyB3ZSdyZSBkZWFsaW5nIHdpdGggY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYE5FVExJTktfSU5FVF9ESUFHYCBzb2NrZXQgZGlhZ25vc3RpYyBpbnRlcmZhY2UuIFRoaXMgaXMgdXNlZCBmb3IgZHVtcGluZyBzb2NrZXRzIHdpdGggYnl0ZWNvZGUgZmlsdGVyaW5nIOKAkyB0aGUgYElORVRfRElBR19SRVFfQllURUNPREVgIGFzcGVjdC5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgY29kZSBwYXRoIGlzIGFjY2Vzc2libGUgaW4gYSB0eXBpY2FsIFFFTVUgZW52aXJvbm1lbnQuIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBgTkVUTElOS19JTkVUX0RJQUdgIGlzIGluZGVlZCBhIHN0YW5kYXJkLCB1c2VyLXNwYWNlIHJlYWNoYWJsZSBzb2NrZXQgQVBJIGluIExpbnV4LCBzbyB0aGF0J3MgYSBwb3NpdGl2ZS4gR2l2ZW4gU3l6a2FsbGVyJ3MgaGVhdnkgZnV6emluZyBvZiBuZXRsaW5rIGFuZCBpbmV0X2RpYWcsIHRoaXMgYXJlYSBpcyBjZXJ0YWlubHkgaW4gcGxheS5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludHJvZHVjZXMgYW4gaW5zdHJ1Y3Rpb24gY291bnRlciBsaW1pdCwgYElORVRfRElBR19CQ19NQVhfT1BTIDY0YCwgdG8gdGhlIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2lwdjQvaW5ldF9kaWFnLmNgLiBUaGlzIGlzIGludHJpZ3Vpbmcg4oCTIGl0J3MgYSBib3VuZGFyeSBjb25kaXRpb24gb24gaG93IGJ5dGVjb2RlIGZpbHRlcnMgYXJlIHByb2Nlc3NlZCBkdXJpbmcgc29ja2V0IGRpYWdub3N0aWNzLCB3aGljaCBjYW4gaW1wYWN0IGJvdGggZHVtcCByZXF1ZXN0cyBhbmQgZXJyb3IgaGFuZGxpbmcuXG5cblRoZSBjcml0ZXJpYSBsb29rIHByb21pc2luZzogaXQncyBcIldvcnRoRnV6emluZ1wiIGJlY2F1c2UgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGJ5dGVjb2RlIGZpbHRlciB2YWxpZGF0aW9uLiBUaGUgRW5hYmxlQ29uZmlncyBjaGVjayBpcyBnb29kLiBJTkVUX0RJQUcgYmVpbmcgYSB0cmlzdGF0ZSBidXQgZGVmYXVsdHMgdG8gJ3knIG1lYW5zIGl0IHNob3VsZCBiZSBnZW5lcmFsbHkgYWNjZXNzaWJsZS5cblxuVGhlIGxpc3RlZCBcIkZvY3VzU3ltYm9sc1wiIGFyZSByaWdodCBvbiB0YXJnZXQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBpbmV0X2RpYWdfYmNfYXVkaXRgLCBhbmQgdGhlIHZhcmlvdXMgYGluZXRfZGlhZ19kdW1wXypgLCBgaW5ldF9kaWFnX2JjX3J1bmAgYW5kIGBpbmV0X2RpYWdfYmNfc2tgIGZ1bmN0aW9ucy4gTm93LCBhIHF1aWNrIGNoZWNrIG9uIHRoZSBleGFjdCBzeW1ib2wgbmFtZXMgaW4gdGhlIGZpbGUgaXMgaW1wb3J0YW50IHRvIHZlcmlmeSB0aGF0IHRoZSBgaW5ldF9kaWFnX2JjX2F1ZGl0YCBpcyBgc3RhdGljYCBhbmQgdGhhdCBpdCBpcyBpbiB0aGUgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIG90aGVyIGVudHJ5IHBvaW50cyBhcyB3ZWxsIGxpa2UgYF9faW5ldF9kaWFnX2R1bXBfc3RhcnRgLCBgaW5ldF9kaWFnX2R1bXBfc3RhcnRgLCBgaW5ldF9kaWFnX2R1bXBfc3RhcnRfY29tcGF0YCwgYGluZXRfZGlhZ19iY19za2AsIGBpbmV0X2RpYWdfZHVtcF9vbmVfaWNza2AsIGBpbmV0X2RpYWdfZHVtcF9pY3NrYC4gSSB3aWxsIGNoZWNrIGFsbCBlbnRyeXBvaW50cyBpbiBgaW5ldF9kaWFnLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyODQsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDI6NDMuOTQ5NTk0NzcyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTE0NjE4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZCkgW2EtekEtWjAtOV9dK1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pbmV0X2RpYWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pbmV0X2RpYWcuYz00OD1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyICppbmV0X2RpYWdfbG9ja19oYW5kbGVyKGludCBwcm90bylcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTY2LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjY3OnN0YXRpYyB2b2lkIGluZXRfZGlhZ191bmxvY2tfaGFuZGxlcihjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgKmhhbmRsZXIpXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjgte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzEtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NzI6dm9pZCBpbmV0X2RpYWdfbXNnX2NvbW1vbl9maWxsKHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzMte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM9OTU9RVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX21zZ19jb21tb25fZmlsbCk7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTYtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTc6aW50IGluZXRfZGlhZ19tc2dfYXR0cnNfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqciwgaW50IGV4dCxcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTE3OT1FWFBPUlRfU1lNQk9MX0dQTChpbmV0X2RpYWdfbXNnX2F0dHJzX2ZpbGwpO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTE4MC1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxODE6c3RhdGljIGludCBpbmV0X2RpYWdfcGFyc2VfYXR0cnMoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsIGludCBoZHJsZW4sXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTgyLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqcmVxX25sYXMpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xOTgtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTk5OnN0YXRpYyBpbnQgaW5ldF9kaWFnX2dldF9wcm90b2NvbChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxLFxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIwMC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpkYXRhKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMjA4LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjIwOTppbnQgaW5ldF9za19kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2ssXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMjEwLVxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTQwMD1FWFBPUlRfU1lNQk9MX0dQTChpbmV0X3NrX2RpYWdfZmlsbCk7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDAxLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjQwMjpzdGF0aWMgaW50IGluZXRfZGlhZ19jbWRfZXhhY3QoaW50IGNtZCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy00MDMtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDM4LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjQzOTpzdGF0aWMgaW50IGJpdHN0cmluZ19tYXRjaChjb25zdCBfX2JlMzIgKmExLCBjb25zdCBfX2JlMzIgKmEyLCBpbnQgYml0cylcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy00NDAte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDY0LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjQ2NTpzdGF0aWMgaW50IGluZXRfZGlhZ19iY19ydW4oY29uc3Qgc3RydWN0IG5sYXR0ciAqX2JjLFxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTQ2Ni1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy01ODMtICovXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NTg0OnN0YXRpYyB2b2lkIGVudHJ5X2ZpbGxfYWRkcnMoc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnksXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNTg1LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNTk4LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjU5OTppbnQgaW5ldF9kaWFnX2JjX3NrKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjAwLXtcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTYzMz1FWFBPUlRfU1lNQk9MX0dQTChpbmV0X2RpYWdfYmNfc2spO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYzNC1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo2MzU6c3RhdGljIGludCB2YWxpZF9jYyhjb25zdCB2b2lkICpiYywgaW50IGxlbiwgaW50IGNjKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYzNi17XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz03MjA9c3RhdGljIGJvb2wgdmFsaWRfY2dyb3VwY29uZChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCwgaW50IGxlbixcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTczMy1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo3MzQ6c3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzM1LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04MTgtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6ODE5OnN0YXRpYyBpbnQgX19pbmV0X2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODIwLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcilcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg0OS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4NTA6c3RhdGljIGludCBpbmV0X2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODUxLXtcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg1NC1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4NTU6c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IGhkcmxlbilcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04NTYte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODkzLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjg5NDpzdGF0aWMgaW50IGluZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04OTUte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODk4LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjg5OTpzdGF0aWMgaW50IGluZXRfZGlhZ19kdW1wX3N0YXJ0X2NvbXBhdChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTAwLXtcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTkwMy1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo5MDQ6c3RhdGljIGludCBpbmV0X2RpYWdfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05MDUte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTEzLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjkxNDpzdGF0aWMgaW50IGluZXRfZGlhZ190eXBlMnByb3RvKGludCB0eXBlKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTkxNS17XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05MjMtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTI0OnN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfY29tcGF0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTI1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05MzktXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTQwOnN0YXRpYyBpbnQgaW5ldF9kaWFnX2dldF9leGFjdF9jb21wYXQoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05NDEtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05NTYtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTU3OnN0YXRpYyBpbnQgaW5ldF9kaWFnX3Jjdl9tc2dfY29tcGF0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTk1OC17XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05NzctXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTc4OnN0YXRpYyBpbnQgaW5ldF9kaWFnX2hhbmRsZXJfY21kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqaClcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05Nzkte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM9MTAwMD1zdGF0aWNcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxMDAxOmludCBpbmV0X2RpYWdfaGFuZGxlcl9nZXRfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTAwMi17XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz0xMDU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja19kaWFnX2hhbmRsZXIgaW5ldDZfZGlhZ19oYW5kbGVyID0ge1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTA2Mi1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxMDYzOmludCBpbmV0X2RpYWdfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyICpoKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTEwNjQte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM9MTA3Mz1FWFBPUlRfU1lNQk9MX0dQTChpbmV0X2RpYWdfcmVnaXN0ZXIpO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTEwNzQtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTA3NTp2b2lkIGluZXRfZGlhZ191bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciAqaClcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xMDc2LXtcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTEwODc9c3RhdGljIGNvbnN0IHN0cnVjdCBzb2NrX2RpYWdfaW5ldF9jb21wYXQgaW5ldF9kaWFnX2NvbXBhdCA9IHtcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTEwOTEtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTA5MjpzdGF0aWMgaW50IF9faW5pdCBpbmV0X2RpYWdfaW5pdCh2b2lkKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTEwOTMte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTEyMC1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxMTIxOnN0YXRpYyB2b2lkIF9fZXhpdCBpbmV0X2RpYWdfZXhpdCh2b2lkKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTExMjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo0Mjo0NC4wMDg3NDY1MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIyMzY2MDUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTGludXggS2VybmVsJ3MgaW5ldF9kaWFnIEZ1enppbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSBgaW5ldF9kaWFnYCBmdW5jdGlvbmFsaXR5IHRoYXQgYXJlIHJlbGV2YW50IGZvciBmdXp6aW5nLiBJJ3ZlIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZyBcIkZvY3VzU3ltYm9sc1wiOiBgaW5ldF9kaWFnX2JjX2F1ZGl0YCwgYF9faW5ldF9kaWFnX2R1bXBfc3RhcnRgLCBgaW5ldF9kaWFnX2R1bXBfc3RhcnRgLCBgaW5ldF9kaWFnX2JjX3NrYCwgYW5kIGBpbmV0X2RpYWdfaGFuZGxlcl9jbWRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGFuZCBoYW5kbGVycyB0aGF0IHdhcnJhbnQgY2xvc2VyIGV4YW1pbmF0aW9uLlxuXG5OZXh0LCBJIGhhdmUgdG8gZGV0ZXJtaW5lIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoZSBvYnZpb3VzIGNhbmRpZGF0ZSBpcyBgSU5FVF9ESUFHYCwgYnV0IEkgbmVlZCB0byBiZSBjZXJ0YWluLiBXaGlsZSBgTkVUTElOS19ESUFHYCB3b3VsZCBiZSBhIHJlbGF0ZWQgb3B0aW9uLCBteSByZXNlYXJjaCBwb2ludHMgdG93YXJkcyBgSU5FVF9ESUFHYCBiZWluZyB0aGUgY29ycmVjdCBzZXR0aW5nLCBhbmQgdGhlIGZhY3QgdGhhdCBgSU5FVF9ESUFHYCBkZXBlbmRzIG9ubHkgb24gYElORVRgIGNvbmZpcm1zIHRoaXM7IGdpdmVuIHRoYXQgYElORVRgIGlzIHRoZSBkZWZhdWx0IGZvciBJUHY0LCBJIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgZXh0cmEgZGVwZW5kZW5jaWVzLiBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aGF0IGBJTkVUX0RJQUdgIGhhcyBubyBleHBsaWNpdCBkZXBlbmRlbmNpZXMgYmV5b25kIGBJTkVUYCBpbiBJUHY0LCBhbmQgc3VyZSBlbm91Z2gsIGl0J3MgYXQgYG5ldC9pcHY0L0tjb25maWc6NDIzYCBhbmQgaXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIGEgY3J1Y2lhbCBhc3BlY3Qgb2YgdGhpcyBldmFsdWF0aW9uIGlzIHdoZXRoZXIgdGhlIGNvZGUgY2hhbmdlcyBhcmUgaW1wYWN0ZnVsIGZvciBmdXp6aW5nLiBJdCBhcHBlYXJzIHRoYXQgdGhlcmUncyBhIG5ldyBpbnN0cnVjdGlvbiBsaW1pdCBjaGVjayBhZGRlZCB3aXRoaW4gYGluZXRfZGlhZ19iY19hdWRpdGA6IGBpZiAoKytvcHMgXHUwMDNlIElORVRfRElBR19CQ19NQVhfT1BTKSByZXR1cm4gLUVJTlZBTDtgLiBUaGlzIGFkZGl0aW9uIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQncyBhIG5ldyBjb250cm9sIGZsb3cgbWVjaGFuaXNtIHRoYXQgd2lsbCBsaWtlbHkgaW5mbHVlbmNlIGhvdyB0aGUgZnV6emVyIG9wZXJhdGVzLiBCZWNhdXNlIG9mIHRoaXMsIGl0J3Mgd29ydGggZnV6emluZyFcblxuU28sIHRoZSBjb3JlIG9mIHRoZSBmdXp6aW5nIHNldHVwIGxvb2tzIGdvb2Q6IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc2V0IHRvIGBbXCJJTkVUX0RJQUdcIl1gLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQuXG5cbkZpbmFsbHksIEknbGwgdXBkYXRlIHRoZSByZXN1bHRzLiBJIGFtIGNvbmZpZGVudCBpbiBteSBmaW5kaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NTAsIk91dHB1dFRva2VucyI6MTU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjQ4LjIzMjQwOTY0NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MjYzMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0RJQUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmV0X2RpYWdfYmNfYXVkaXRcIixcbiAgICBcIl9faW5ldF9kaWFnX2R1bXBfc3RhcnRcIixcbiAgICBcImluZXRfZGlhZ19kdW1wX3N0YXJ0XCIsXG4gICAgXCJpbmV0X2RpYWdfYmNfc2tcIixcbiAgICBcImluZXRfZGlhZ19oYW5kbGVyX2NtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGluZXRfZGlhZ19iY19hdWRpdCBpbiBuZXQvaXB2NC9pbmV0X2RpYWcuYywgcGxhY2luZyBhIGxpbWl0IChJTkVUX0RJQUdfQkNfTUFYX09QUykgb24gdGhlIG51bWJlciBvZiBvcGVyYXRpb25zIGFsbG93ZWQgaW4gaW5ldF9kaWFnIGJ5dGVjb2RlIGZpbHRlcnMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgc29ja2V0IGRpYWdub3N0aWMgZHVtcCBwYXJzaW5nIGxvZ2ljIGFuZCBlcnJvciBwYXRocyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0RJQUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmV0X2RpYWdfYmNfYXVkaXRcIixcbiAgICBcIl9faW5ldF9kaWFnX2R1bXBfc3RhcnRcIixcbiAgICBcImluZXRfZGlhZ19kdW1wX3N0YXJ0XCIsXG4gICAgXCJpbmV0X2RpYWdfYmNfc2tcIixcbiAgICBcImluZXRfZGlhZ19oYW5kbGVyX2NtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGluZXRfZGlhZ19iY19hdWRpdCBpbiBuZXQvaXB2NC9pbmV0X2RpYWcuYywgcGxhY2luZyBhIGxpbWl0IChJTkVUX0RJQUdfQkNfTUFYX09QUykgb24gdGhlIG51bWJlciBvZiBvcGVyYXRpb25zIGFsbG93ZWQgaW4gaW5ldF9kaWFnIGJ5dGVjb2RlIGZpbHRlcnMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgc29ja2V0IGRpYWdub3N0aWMgZHVtcCBwYXJzaW5nIGxvZ2ljIGFuZCBlcnJvciBwYXRocyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDI6NDguMzA5Njc5NjIzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTM4MDgyNDE1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjQ4LjMxMDE5NjgzM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI1MzgwMzAzMTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIHVwcGVyIGJvdW5kIChJTkVUX0RJQUdfQkNfTUFYX09QUyA9IDY0KSBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVjb2RlIG9wZXJhdGlvbnMgdmVyaWZpZWQgZHVyaW5nIGluZXRfZGlhZyBmaWx0ZXIgYXVkaXRpbmcgaW4gaW5ldF9kaWFnX2JjX2F1ZGl0KCkgdG8gcHJldmVudCBleGNlc3NpdmVseSBsb25nIGJ5dGVjb2RlIGV4ZWN1dGlvbnMgd2hpbGUgaG9sZGluZyBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MuIFRoZSBvbmx5IHZhcmlhYmxlIGFkZGVkIGlzIGEgbG9jYWwgaW50ZWdlciBjb3VudGVyIGluaXRpYWxpemVkIHRvIDAuIFRoZSBwYXRjaCBkb2VzIG5vdCB0b3VjaCBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgc3RydWN0IHBhZGRpbmcsIGJ1ZmZlciBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2OGEyZmQzYzg3M2I5ZmM3YmZkOWM5NTBjNWYzMzY1ZWZjODNiMjA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxOTo0MTo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZGlhZy5jIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmNcbmluZGV4IDM0Yjc3YWE4N2QwYTQuLjFjYTUyOGNkM2U3MmIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuY1xuKysrIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmNcbkBAIC03MjUsNiArNzI1LDEyIEBAIHN0YXRpYyBib29sIHZhbGlkX2Nncm91cGNvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sXG4gfVxuICNlbmRpZlxuIFxuKy8qIHNzKDgpIGZpbHRlcnMgb25seSBuZWVkIGEgaGFuZGZ1bCBvZiBjb21wYXJlL2hvc3QvbWFyayBvcHMuXG4rICogQm91bmQgdGhlIHByb2dyYW0gc28gZHVtcCB3YWxrcyBjYW5ub3QgcnVuIGFuIGFyYml0cmFyaWx5IGxvbmdcbisgKiBieXRlY29kZSBzZXF1ZW5jZSB1bmRlciB0aGUgc29ja2V0IGhhc2ggYnVja2V0IGxvY2tzLlxuKyAqL1xuKyNkZWZpbmUgSU5FVF9ESUFHX0JDX01BWF9PUFMgNjRcbitcbiBzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbkBAIC03MzIsNiArNzM4LDcgQEAgc3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXG4gXHRjb25zdCB2b2lkICpieXRlY29kZSwgKmJjO1xuIFx0aW50IGJ5dGVjb2RlX2xlbiwgbGVuO1xuIFx0Ym9vbCBuZXRfYWRtaW47XG4rXHRpbnQgb3BzID0gMDtcbiBcbiBcdGlmICghYXR0cilcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNzQ3LDYgKzc1NCw5IEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxuIFx0XHRpbnQgbWluX2xlbiA9IHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wKTtcbiBcdFx0Y29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AgPSBiYztcbiBcbitcdFx0aWYgKCsrb3BzIFx1MDAzZSBJTkVUX0RJQUdfQkNfTUFYX09QUylcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdFx0c3dpdGNoIChvcC1cdTAwM2Vjb2RlKSB7XG4gXHRcdGNhc2UgSU5FVF9ESUFHX0JDX1NfQ09ORDpcbiBcdFx0Y2FzZSBJTkVUX0RJQUdfQkNfRF9DT05EOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDI6NDguMzEwMTk3ODgzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMzcyNTA3NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEV2YWx1YXRpb24gb2YgdGhlIExpbnV4IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcmVxdWVzdCBoZXJlIHRvIGFzc2VzcyBhIExpbnV4IGtlcm5lbCBwYXRjaCBhbmQgZGVjaWRlIHdoZXRoZXIgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQncyBnZXQgdGhpcyBkb25lLCBubyBtYWxpY2lvdXMgcGF5bG9hZHMgb3IgZXhwbG9pdHMgYXJlIHJlcXVlc3RlZCwgdGhpcyBpcyBiZW5pZ24uXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdsbCBkbyBhIHF1aWNrIHNhZmV0eSBldmFsdWF0aW9uIOKAkyB0aGlzIGlzIGNvZGUgcmV2aWV3L3NlY3VyaXR5IGFzc2Vzc21lbnQgYW5kIEkgY2FuIHRha2UgdGhpcyBkaXJlY3RseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBLTVNBTi13b3J0aHkuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBkaWZmOiBUaGUgY2hhbmdlIGlzIGluIGBuZXQvaXB2NC9pbmV0X2RpYWcuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGBJTkVUX0RJQUdfQkNfTUFYX09QU2AgZGVmaW5lIHNldCB0byA2NC4gIFRoaXMgbGltaXQgaXMgZm9yIHRoZSBieXRlY29kZSB1c2VkIGJ5IGBzcyg4KWAgZmlsdGVyaW5nLCBwcmV2ZW50aW5nIGFyYml0cmFyaWx5IGxvbmcgc2VxdWVuY2VzIHVuZGVyIHRoZSBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MsIGluIHRoZSBgaW5ldF9kaWFnX2JjX2F1ZGl0YCBmdW5jdGlvbi4gVGhlIGNvZGUgbm93IGluY3JlbWVudHMgYW4gYG9wc2AgY291bnRlciBhbmQgcmV0dXJucyAtRUlOVkFMIGlmIGl0IGV4Y2VlZHMgdGhlIG1heCBhbGxvd2VkIG9wZXJhdGlvbnMuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgaGFyZGVuaW5nIG1lYXN1cmUsIHByZXZlbnRpbmcgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlIG9yIHBlcmhhcHMgZXZlbiBtb3JlIHN1YnRsZSB2dWxuZXJhYmlsaXRpZXMgc3RlbW1pbmcgZnJvbSBvdmVybHkgY29tcGxleCBieXRlY29kZSBleGVjdXRpb24uXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZeKAlGEgYnl0ZWNvZGUgbGltaXTigJRhbmQgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgS0FTQU4gYW5kIEtNU0FOIHJlbGF0ZSwgSSdtIHRoaW5raW5nLi4uIEtBU0FOIHdvdWxkIGJlIHRoZSBpbml0aWFsIHRvb2wsIHJpZ2h0PyBUaGlzIGlzIGxpa2VseSBhIGdvb2QgcGxhY2UgZm9yIEtBU0FOIHRvIGRvIGl0cyB0aGluZyB3aXRoIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLiBLTVNBTiBpcyBtb3JlIGZvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IEtBU0FOIG1pZ2h0IG1pc3MgYW5kIHRoaXMgaXMgbm90IHdoYXQgdGhpcyBsb29rcyBsaWtlLiAgSXQncyBhIGJvdW5kcyBjaGVjaywgd2hpY2ggaXMgbW9yZSBvZiBhIHBvdGVudGlhbCBEb1MgdnVsbmVyYWJpbGl0eSwgd2hpY2ggaXMgd2l0aGluIHRoZSBib3VuZHMgb2YgS0FTQU4ncyBhYmlsaXRpZXMuIEtNU0FOIGlzIGRlZmluaXRlbHkgbm90IG5lZWRlZCwgYXMgdGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGlzc3VlLCBub3QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLlxuXG5TbywgaW4gY29uY2x1c2lvbiwgd2hpbGUgaXQncyBhIGdvb2QgZGVmZW5zaXZlIGFkZGl0aW9uIHRvIHRoZSBjb2RlLCBJIGRvbid0IHRoaW5rIHRoaXMgY2hhbmdlIGJ5IGl0c2VsZiB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBzZXZlcml0eSBvZiB0aGUgY2hhbmdlIGRvZXNuJ3Qgd2FycmFudCBpdCwgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUgYW55IGlzc3VlcyB3aXRoIHRoZSBvcmlnaW5hbCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDM6MDEuNjgyNzA4MzQ0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2luZXRfZGlhZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyNTpcXHR9XFxuIDcyNjpcXHQjZW5kaWZcXG4gNzI3OlxcdFxcbiA3Mjg6XFx0Lyogc3MoOCkgZmlsdGVycyBvbmx5IG5lZWQgYSBoYW5kZnVsIG9mIGNvbXBhcmUvaG9zdC9tYXJrIG9wcy5cXG4gNzI5OlxcdCAqIEJvdW5kIHRoZSBwcm9ncmFtIHNvIGR1bXAgd2Fsa3MgY2Fubm90IHJ1biBhbiBhcmJpdHJhcmlseSBsb25nXFxuIDczMDpcXHQgKiBieXRlY29kZSBzZXF1ZW5jZSB1bmRlciB0aGUgc29ja2V0IGhhc2ggYnVja2V0IGxvY2tzLlxcbiA3MzE6XFx0ICovXFxuIDczMjpcXHQjZGVmaW5lIElORVRfRElBR19CQ19NQVhfT1BTIDY0XFxuIDczMzpcXHRcXG4gNzM0OlxcdHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxcbiA3MzU6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNzM2OlxcdHtcXG4gNzM3OlxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIgPSBjYl9kYXRhLVxcdTAwM2VpbmV0X2RpYWdfbmxhX2JjO1xcbiA3Mzg6XFx0XFx0Y29uc3Qgdm9pZCAqYnl0ZWNvZGUsICpiYztcXG4gNzM5OlxcdFxcdGludCBieXRlY29kZV9sZW4sIGxlbjtcXG4gNzQwOlxcdFxcdGJvb2wgbmV0X2FkbWluO1xcbiA3NDE6XFx0XFx0aW50IG9wcyA9IDA7XFxuIDc0MjpcXHRcXG4gNzQzOlxcdFxcdGlmICghYXR0cilcXG4gNzQ0OlxcdFxcdFxcdHJldHVybiAwO1xcbiA3NDU6XFx0XFxuIDc0NjpcXHRcXHRpZiAobmxhX2xlbihhdHRyKSBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wKSlcXG4gNzQ3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NDg6XFx0XFxuIDc0OTpcXHRcXHRuZXRfYWRtaW4gPSBuZXRsaW5rX25ldF9jYXBhYmxlKHNrYiwgQ0FQX05FVF9BRE1JTik7XFxuIDc1MDpcXHRcXHRieXRlY29kZSA9IGJjID0gbmxhX2RhdGEoYXR0cik7XFxuIDc1MTpcXHRcXHRsZW4gPSBieXRlY29kZV9sZW4gPSBubGFfbGVuKGF0dHIpO1xcbiA3NTI6XFx0XFxuIDc1MzpcXHRcXHR3aGlsZSAobGVuIFxcdTAwM2UgMCkge1xcbiA3NTQ6XFx0XFx0XFx0aW50IG1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCk7XFxuIDc1NTpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCA9IGJjO1xcbiA3NTY6XFx0XFxuIDc1NzpcXHRcXHRcXHRpZiAoKytvcHMgXFx1MDAzZSBJTkVUX0RJQUdfQkNfTUFYX09QUylcXG4gNzU4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NTk6XFx0XFxuIDc2MDpcXHRcXHRcXHRzd2l0Y2ggKG9wLVxcdTAwM2Vjb2RlKSB7XFxuIDc2MTpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19TX0NPTkQ6XFxuIDc2MjpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19EX0NPTkQ6XFxuIDc2MzpcXHRcXHRcXHRcXHRpZiAoIXZhbGlkX2hvc3Rjb25kKGJjLCBsZW4sIFxcdTAwMjZtaW5fbGVuKSlcXG4gNzY0OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NjU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDc2NjpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19ERVZfQ09ORDpcXG4gNzY3OlxcdFxcdFxcdFxcdGlmICghdmFsaWRfZGV2Y29uZChiYywgbGVuLCBcXHUwMDI2bWluX2xlbikpXFxuIDc2ODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzY5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3NzA6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfU19FUTpcXG4gNzcxOlxcdFxcdFxcdGNhc2UgSU5FVF9ESUFHX0JDX1NfR0U6XFxuIDc3MjpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19TX0xFOlxcbiA3NzM6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfRF9FUTpcXG4gNzc0OlxcdFxcdFxcdGNhc2UgSU5FVF9ESUFHX0JDX0RfR0U6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQzOjAxLjY4MjgwMTY3NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzk1MTM4MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQnl0ZWNvZGUgQXVkaXQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaW5ldF9kaWFnX2JjX2F1ZGl0YCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiwgZXNwZWNpYWxseSBpbiBsaWdodCBvZiB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgaGFyZCBsaW1pdCDigJMgYElORVRfRElBR19CQ19NQVhfT1BTID0gNjRgIOKAkyBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHByb2Nlc3NlZCB3aXRoaW4gYGluZXRfZGlhZ19iY19hdWRpdGAuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCwgd2l0aGluIGBpbmV0X2RpYWdfYmNfYXVkaXRgLCB0aGV54oCZcmUgaW5jcmVtZW50aW5nIHRoaXMgYG9wc2AgY291bnRlciBmb3IgZWFjaCBvcGNvZGUgdGhleSBlbmNvdW50ZXIuIElmIHRoYXQgYG9wc2AgY291bnRlciBleGNlZWRzIGBJTkVUX0RJQUdfQkNfTUFYX09QU2AsIHRoZSBmdW5jdGlvbiBraWNrcyBiYWNrIGFuIGAtRUlOVkFMYCBlcnJvci4gVGhhdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBzZWN1cml0eSBtZWFzdXJlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBiZXR0ZXIuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGxhcmdlciBjb250ZXh0OiB3aGVyZSBpcyB0aGlzIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKj8gQW5kIGNyaXRpY2FsbHksIGhvdyBpcyB0aGlzIGJ5dGVjb2RlIGJlaW5nIGV4ZWN1dGVkIG9yIG90aGVyd2lzZSBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0/IFVuZGVyc3RhbmRpbmcgdGhvc2UgY2FsbCBzaXRlcyBhbmQgdGhlIGJ5dGVjb2RlIGV4ZWN1dGlvbiBmbG93IHdpbGwgYmUgY3J1Y2lhbCB0byBhc3Nlc3NpbmcgdGhlIG92ZXJhbGwgaW1wYWN0IGFuZCBlZmZlY3RpdmVuZXNzIG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGEgZmlsdGVyPyBBIHRyYW5zZm9ybWF0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnl0ZWNvZGXigJlzIHB1cnBvc2UgdG8gc2VlIHRoZSByaXNrIHRoZSBsaW1pdCBhZGRyZXNzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNDgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo0MzowNC40Nzc5NDI2NjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTE1MDk4ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9kaWFnX2JjX2F1ZGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2luZXRfZGlhZy5jPTcyMD1zdGF0aWMgYm9vbCB2YWxpZF9jZ3JvdXBjb25kKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wLCBpbnQgbGVuLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzMzLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjczNDpzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MzUtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTg1NT1zdGF0aWMgaW50IF9faW5ldF9kaWFnX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgaGRybGVuKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODcxLVxcdH1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4NzI6XFx0ZXJyID0gaW5ldF9kaWFnX2JjX2F1ZGl0KGNiX2RhdGEsIHNrYik7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODczLVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDM6MDYuNjg5NDU4MjUzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjAwMTA0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgaW5ldF9kaWFnX2R1bXBfc3RhcnRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhlIGBpbmV0X2RpYWdgIHN1YnN5c3RlbSwgYW5kIGEgbGlrZWx5IHN0YXJ0aW5nIHBvaW50IGlzIHRoYXQgZHVtcCBmdW5jdGlvbi4gTGV0J3MgemVybyBpbiBvbiBgX19pbmV0X2RpYWdfZHVtcF9zdGFydGAgYXJvdW5kIGxpbmUgODU1LiBUaGlzIHN1Z2dlc3RzIHRoYXQgaXQncyB0aGUgY29yZSBmdW5jdGlvbiB0aGF0IG9yY2hlc3RyYXRlcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkaWFnbm9zdGljIGRhdGEgZHVtcCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBpdGVyYXRpb24gd2l0aGluIHRoYXQgZnVuY3Rpb24gd29ya3MuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IGFjY2Vzc2VzIGFuZCBtYW5pcHVsYXRlcy4gSXMgaXQgdXNpbmcgYSBzdGFuZGFyZCBpdGVyYXRvciwgb3Igc29tZXRoaW5nIGN1c3RvbT8gV2hhdCBhYm91dCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXM/IFVuZGVyc3RhbmRpbmcgdGhlIGVudHJ5IHBvaW50IHdpbGwgbWFrZSB0aGUgcmVzdCBvZiB0aGUgcHV6emxlIG11Y2ggY2xlYXJlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQzOjA4LjY0OTQ3MjEyNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pbmV0X2RpYWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTU6XFx0c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IGhkcmxlbilcXG4gODU2OlxcdHtcXG4gODU3OlxcdFxcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXFx1MDAzZW5saDtcXG4gODU4OlxcdFxcdHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhO1xcbiA4NTk6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGNiLVxcdTAwM2Vza2I7XFxuIDg2MDpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpubGE7XFxuIDg2MTpcXHRcXHRpbnQgZXJyO1xcbiA4NjI6XFx0XFxuIDg2MzpcXHRcXHRjYl9kYXRhID0ga3phbGxvY19vYmooKmNiX2RhdGEpO1xcbiA4NjQ6XFx0XFx0aWYgKCFjYl9kYXRhKVxcbiA4NjU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDg2NjpcXHRcXG4gODY3OlxcdFxcdGVyciA9IGluZXRfZGlhZ19wYXJzZV9hdHRycyhubGgsIGhkcmxlbiwgY2JfZGF0YS1cXHUwMDNlcmVxX25sYXMpO1xcbiA4Njg6XFx0XFx0aWYgKGVycikge1xcbiA4Njk6XFx0XFx0XFx0a2ZyZWUoY2JfZGF0YSk7XFxuIDg3MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA4NzE6XFx0XFx0fVxcbiA4NzI6XFx0XFx0ZXJyID0gaW5ldF9kaWFnX2JjX2F1ZGl0KGNiX2RhdGEsIHNrYik7XFxuIDg3MzpcXHRcXHRpZiAoZXJyKSB7XFxuIDg3NDpcXHRcXHRcXHRrZnJlZShjYl9kYXRhKTtcXG4gODc1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDg3NjpcXHRcXHR9XFxuIDg3NzpcXHRcXG4gODc4OlxcdFxcdG5sYSA9IGNiX2RhdGEtXFx1MDAzZWluZXRfZGlhZ19ubGFfYnBmX3N0Z3M7XFxuIDg3OTpcXHRcXHRpZiAobmxhKSB7XFxuIDg4MDpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyAqYnBmX3N0Z19kaWFnO1xcbiA4ODE6XFx0XFxuIDg4MjpcXHRcXHRcXHRicGZfc3RnX2RpYWcgPSBicGZfc2tfc3RvcmFnZV9kaWFnX2FsbG9jKG5sYSk7XFxuIDg4MzpcXHRcXHRcXHRpZiAoSVNfRVJSKGJwZl9zdGdfZGlhZykpIHtcXG4gODg0OlxcdFxcdFxcdFxcdGtmcmVlKGNiX2RhdGEpO1xcbiA4ODU6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYnBmX3N0Z19kaWFnKTtcXG4gODg2OlxcdFxcdFxcdH1cXG4gODg3OlxcdFxcdFxcdGNiX2RhdGEtXFx1MDAzZWJwZl9zdGdfZGlhZyA9IGJwZl9zdGdfZGlhZztcXG4gODg4OlxcdFxcdH1cXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0Y2ItXFx1MDAzZWRhdGEgPSBjYl9kYXRhO1xcbiA4OTE6XFx0XFx0cmV0dXJuIDA7XFxuIDg5MjpcXHR9XFxuIDg5MzpcXHRcXG4gODk0OlxcdHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo0MzowOC42NDk1Njk3NzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA0MDkxMDQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBpbmV0X2RpYWcgQnl0ZWNvZGUgT3BlcmF0aW9uIExpbWl0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl04oCZcyBwcmltYXJpbHkgZm9jdXNlZCBvbiByZXN0cmljdGluZyB0aGUgbnVtYmVyIG9mIGJ5dGVjb2RlIG9wZXJhdGlvbnMgYWxsb3dlZCB3aXRoaW4gYGluZXRfZGlhZ2Agc29ja2V0IGZpbHRlciBkdW1wcy4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgbGltaXQsIGBJTkVUX0RJQUdfQkNfTUFYX09QU2AgKHNldCB0byA2NCksIGFuZCBhIGNvdW50ZXIsIGBvcHNgLCB0aGF0IGluY3JlbWVudHMgd2l0aCBlYWNoIG9wZXJhdGlvbiB3aXRoaW4gYGluZXRfZGlhZ19iY19hdWRpdGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoaXMgaW50cm9kdWNpbmcgYW55IG5ldyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXM/XCJcblxuRmlyc3QsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyB0aGluayB0aHJvdWdoIHRoZSBzY2VuYXJpb3MuIFRoZSBjb3VudGVyIGBvcHNgIGlzIGluaXRpYWxpemVkIHRvIHplcm8sIHJpZ2h0PyBHb29kLiBObyBuZXcgYnVmZmVycyBhcmUgYmVpbmcgaW50cm9kdWNlZCwgYW5kIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGhhcHBlbmluZy4gRXhjZWxsZW50LiBObyBkYXRhIGlzIGJlaW5nIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlciBzcGFjZSwgc28gbm8gcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrYWdlIHRoZXJlLiBBbmQgY3JpdGljYWxseSwgbm8gY29uZGl0aW9ucyBhcmUgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgZGVmaW5pdGVseSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBhbnl3aGVyZSBpbiB0aGlzIHNjb3BlLiBJ4oCZbSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3Mgb24gdGhhdCBmcm9udC5cblxuTm93LCBkb2VzIHRoaXMgcGF0Y2ggd2FycmFudCBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgcnVuPyBLTVNBTiBpcyByZWxldmFudCB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcG90ZW50aWFsIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGJyYW5jaCBjb25kaXRpb25zLiBMb29raW5nIGF0IHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyDigJMganVzdCBhZGRpbmcgYSBjb3VudGVyIGFuZCBhIGNoZWNrIOKAkyBub25lIG9mIHRob3NlIEtNU0FOIGNvbmNlcm5zIHNlZW0gdG8gYXBwbHkuIFN0YW5kYXJkIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCBvdGhlciBzYW5pdGl6ZXJzIHNob3VsZCBiZSBzdWZmaWNpZW50IGhlcmUuIFRoaXMgcGF0Y2ggaXNuJ3QgaW50cm9kdWNpbmcgYW55IEtNU0FOLXNwZWNpZmljIGJ1Z3Mgb3IgZXhwb3NpbmcgZXhpc3Rpbmcgb25lcy5cblxuU28sIGxldCdzIHN1bW1hcml6ZSBpdCBmb3IgdGhlIHJlY29yZC4gVGhlIHBhdGNoIGlzIHNpbXBseSBhZGRpbmcgYW4gb3Bjb2RlIGNvdW50IGxpbWl0LCBgSU5FVF9ESUFHX0JDX01BWF9PUFNgLCBkdXJpbmcgYGluZXRfZGlhZ19iY19hdWRpdGAuIFRoaXMgaXMgaW50ZW5kZWQgdG8gbWl0aWdhdGUgZGVuaWFsLW9mLXNlcnZpY2Ugcmlza3MsIG9yIHBvdGVudGlhbCBleGNlc3NpdmUgbG9jayBob2xkIHRpbWVzLiBUaGUgYWRkZWQgbG9jYWwgY291bnRlciBgb3BzYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLiBDcnVjaWFsbHksIHRoZSBwYXRjaCBkb2VzICpub3QqIGFsbG9jYXRlIG9yIGFsdGVyIGV4aXN0aW5nIGtlcm5lbCBtZW1vcnkgc3RydWN0dXJlczsgaXQgZG9lc24ndCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZTsgYW5kIGltcG9ydGFudGx5LCBpdCBkb2VzICpub3QqIGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciBkYXRhIGJ1ZmZlciByZWFkcyBpbiBhbnkgd2F5IHRoYXQgd291bGQgaW50cm9kdWNlIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBUaGVyZWZvcmUsIG5vIEtNU0FOIGlzIG5lZWRlZC4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVycyBhcmUgZ29vZCB0byBnby4gVGltZSB0byBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc3MCwiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo0MzoxMy42OTA0ODI2NDZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gdXBwZXIgYm91bmQgKElORVRfRElBR19CQ19NQVhfT1BTID0gNjQpIG9uIHRoZSBudW1iZXIgb2YgYnl0ZWNvZGUgb3BlcmF0aW9ucyB2ZXJpZmllZCBkdXJpbmcgaW5ldF9kaWFnIGZpbHRlciBhdWRpdGluZyBpbiBpbmV0X2RpYWdfYmNfYXVkaXQoKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZWx5IGxvbmcgYnl0ZWNvZGUgZXhlY3V0aW9ucyB3aGlsZSBob2xkaW5nIHNvY2tldCBoYXNoIGJ1Y2tldCBsb2Nrcy4gVGhlIG9ubHkgdmFyaWFibGUgYWRkZWQgaXMgYSBsb2NhbCBpbnRlZ2VyIGNvdW50ZXIgaW5pdGlhbGl6ZWQgdG8gMC4gVGhlIHBhdGNoIGRvZXMgbm90IHRvdWNoIGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzLCBzdHJ1Y3QgcGFkZGluZywgYnVmZmVyIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24sIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gdXBwZXIgYm91bmQgKElORVRfRElBR19CQ19NQVhfT1BTID0gNjQpIG9uIHRoZSBudW1iZXIgb2YgYnl0ZWNvZGUgb3BlcmF0aW9ucyB2ZXJpZmllZCBkdXJpbmcgaW5ldF9kaWFnIGZpbHRlciBhdWRpdGluZyBpbiBpbmV0X2RpYWdfYmNfYXVkaXQoKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZWx5IGxvbmcgYnl0ZWNvZGUgZXhlY3V0aW9ucyB3aGlsZSBob2xkaW5nIHNvY2tldCBoYXNoIGJ1Y2tldCBsb2Nrcy4gVGhlIG9ubHkgdmFyaWFibGUgYWRkZWQgaXMgYSBsb2NhbCBpbnRlZ2VyIGNvdW50ZXIgaW5pdGlhbGl6ZWQgdG8gMC4gVGhlIHBhdGNoIGRvZXMgbm90IHRvdWNoIGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzLCBzdHJ1Y3QgcGFkZGluZywgYnVmZmVyIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24sIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowldjb8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 18:39:51 +0000 UTC FinishedAt: 2026-09-07 19:43:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_DIAG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_DIAG" ], "series_id": "fb3c2901-4207-475f-b631-bb14da2f6119" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "inet_diag_bc_audit", "__inet_diag_dump_start", "inet_diag_dump_start", "inet_diag_bc_sk", "inet_diag_handler_cmd" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRElBRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luZXRfZGlhZ19iY19hdWRpdCYjMzQ7LAogICAgJiMzNDtfX2luZXRfZGlhZ19kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O2luZXRfZGlhZ19kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O2luZXRfZGlhZ19iY19zayYjMzQ7LAogICAgJiMzNDtpbmV0X2RpYWdfaGFuZGxlcl9jbWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIHVwcGVyIGJvdW5kIChJTkVUX0RJQUdfQkNfTUFYX09QUyA9IDY0KSBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVjb2RlIG9wZXJhdGlvbnMgdmVyaWZpZWQgZHVyaW5nIGluZXRfZGlhZyBmaWx0ZXIgYXVkaXRpbmcgaW4gaW5ldF9kaWFnX2JjX2F1ZGl0KCkgdG8gcHJldmVudCBleGNlc3NpdmVseSBsb25nIGJ5dGVjb2RlIGV4ZWN1dGlvbnMgd2hpbGUgaG9sZGluZyBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MuIFRoZSBvbmx5IHZhcmlhYmxlIGFkZGVkIGlzIGEgbG9jYWwgaW50ZWdlciBjb3VudGVyIGluaXRpYWxpemVkIHRvIDAuIFRoZSBwYXRjaCBkb2VzIG5vdCB0b3VjaCBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgc3RydWN0IHBhZGRpbmcsIGJ1ZmZlciBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW5ldF9kaWFnX2JjX2F1ZGl0IGluIG5ldC9pcHY0L2luZXRfZGlhZy5jLCBwbGFjaW5nIGEgbGltaXQgKElORVRfRElBR19CQ19NQVhfT1BTKSBvbiB0aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgYWxsb3dlZCBpbiBpbmV0X2RpYWcgYnl0ZWNvZGUgZmlsdGVycy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0bGluayBzb2NrZXQgZGlhZ25vc3RpYyBkdW1wIHBhcnNpbmcgbG9naWMgYW5kIGVycm9yIHBhdGhzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjhhMmZkM2M4NzNiOWZjN2JmZDljOTUwYzVmMzM2NWVmYzgzYjIwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTk6NDE6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMgYi9uZXQvaXB2NC9pbmV0X2RpYWcuY1xuaW5kZXggMzRiNzdhYTg3ZDBhNC4uMWNhNTI4Y2QzZTcyYiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2luZXRfZGlhZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pbmV0X2RpYWcuY1xuQEAgLTcyNSw2ICYjNDM7NzI1LDEyIEBAIHN0YXRpYyBib29sIHZhbGlkX2Nncm91cGNvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sXG4gfVxuICNlbmRpZlxuIFxuJiM0MzsvKiBzcyg4KSBmaWx0ZXJzIG9ubHkgbmVlZCBhIGhhbmRmdWwgb2YgY29tcGFyZS9ob3N0L21hcmsgb3BzLlxuJiM0MzsgKiBCb3VuZCB0aGUgcHJvZ3JhbSBzbyBkdW1wIHdhbGtzIGNhbm5vdCBydW4gYW4gYXJiaXRyYXJpbHkgbG9uZ1xuJiM0MzsgKiBieXRlY29kZSBzZXF1ZW5jZSB1bmRlciB0aGUgc29ja2V0IGhhc2ggYnVja2V0IGxvY2tzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBJTkVUX0RJQUdfQkNfTUFYX09QUyA2NFxuJiM0MztcbiBzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbkBAIC03MzIsNiAmIzQzOzczOCw3IEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxuIFx0Y29uc3Qgdm9pZCAqYnl0ZWNvZGUsICpiYztcbiBcdGludCBieXRlY29kZV9sZW4sIGxlbjtcbiBcdGJvb2wgbmV0X2FkbWluO1xuJiM0MztcdGludCBvcHMgPSAwO1xuIFxuIFx0aWYgKCFhdHRyKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC03NDcsNiAmIzQzOzc1NCw5IEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxuIFx0XHRpbnQgbWluX2xlbiA9IHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wKTtcbiBcdFx0Y29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AgPSBiYztcbiBcbiYjNDM7XHRcdGlmICgmIzQzOyYjNDM7b3BzIFx1MDAzZSBJTkVUX0RJQUdfQkNfTUFYX09QUylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0XHRzd2l0Y2ggKG9wLVx1MDAzZWNvZGUpIHtcbiBcdFx0Y2FzZSBJTkVUX0RJQUdfQkNfU19DT05EOlxuIFx0XHRjYXNlIElORVRfRElBR19CQ19EX0NPTkQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVF9ESUFHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5ldF9kaWFnX2JjX2F1ZGl0JiMzNDssCiAgICAmIzM0O19faW5ldF9kaWFnX2R1bXBfc3RhcnQmIzM0OywKICAgICYjMzQ7aW5ldF9kaWFnX2R1bXBfc3RhcnQmIzM0OywKICAgICYjMzQ7aW5ldF9kaWFnX2JjX3NrJiMzNDssCiAgICAmIzM0O2luZXRfZGlhZ19oYW5kbGVyX2NtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpbmV0X2RpYWdfYmNfYXVkaXQgaW4gbmV0L2lwdjQvaW5ldF9kaWFnLmMsIHBsYWNpbmcgYSBsaW1pdCAoSU5FVF9ESUFHX0JDX01BWF9PUFMpIG9uIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBhbGxvd2VkIGluIGluZXRfZGlhZyBieXRlY29kZSBmaWx0ZXJzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIHNvY2tldCBkaWFnbm9zdGljIGR1bXAgcGFyc2luZyBsb2dpYyBhbmQgZXJyb3IgcGF0aHMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2OGEyZmQzYzg3M2I5ZmM3YmZkOWM5NTBjNWYzMzY1ZWZjODNiMjA4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxOTo0MTo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZGlhZy5jIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKaW5kZXggMzRiNzdhYTg3ZDBhNC4uMWNhNTI4Y2QzZTcyYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKQEAgLTcyNSw2ICYjNDM7NzI1LDEyIEBAIHN0YXRpYyBib29sIHZhbGlkX2Nncm91cGNvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sCiB9CiAjZW5kaWYKIAomIzQzOy8qIHNzKDgpIGZpbHRlcnMgb25seSBuZWVkIGEgaGFuZGZ1bCBvZiBjb21wYXJlL2hvc3QvbWFyayBvcHMuCiYjNDM7ICogQm91bmQgdGhlIHByb2dyYW0gc28gZHVtcCB3YWxrcyBjYW5ub3QgcnVuIGFuIGFyYml0cmFyaWx5IGxvbmcKJiM0MzsgKiBieXRlY29kZSBzZXF1ZW5jZSB1bmRlciB0aGUgc29ja2V0IGhhc2ggYnVja2V0IGxvY2tzLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgSU5FVF9ESUFHX0JDX01BWF9PUFMgNjQKJiM0MzsKIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLAogCQkJICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTczMiw2ICYjNDM7NzM4LDcgQEAgc3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsCiAJY29uc3Qgdm9pZCAqYnl0ZWNvZGUsICpiYzsKIAlpbnQgYnl0ZWNvZGVfbGVuLCBsZW47CiAJYm9vbCBuZXRfYWRtaW47CiYjNDM7CWludCBvcHMgPSAwOwogCiAJaWYgKCFhdHRyKQogCQlyZXR1cm4gMDsKQEAgLTc0Nyw2ICYjNDM7NzU0LDkgQEAgc3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsCiAJCWludCBtaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBpbmV0X2RpYWdfYmNfb3ApOwogCQljb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCA9IGJjOwogCiYjNDM7CQlpZiAoJiM0MzsmIzQzO29wcyAmZ3Q7IElORVRfRElBR19CQ19NQVhfT1BTKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCQlzd2l0Y2ggKG9wLSZndDtjb2RlKSB7CiAJCWNhc2UgSU5FVF9ESUFHX0JDX1NfQ09ORDoKIAkJY2FzZSBJTkVUX0RJQUdfQkNfRF9DT05EOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqRGl2aW5nIGludG8gdGhlIGBpbmV0X2RpYWcuY2AgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9pcHY0L2luZXRfZGlhZy5jYC4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIGRpdmUgaW4gYW5kIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBhbHRlcmVkIGFuZCwgY3J1Y2lhbGx5LCAqd2h5Ki4gTXkgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIHBpbnBvaW50IHRoZSBjYWxscyB0byBgaW5ldF9kaWFnX2JjX2F1ZGl0YC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpa2VseSBsaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGNvbnRleHQuIEkmIzM5O2xsIHByb2JhYmx5IHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHdoYXRldmVyJiMzOTtzIGZhc3Rlc3QgYW5kIG1vc3QgZWZmaWNpZW50IGZvciB0cmF2ZXJzaW5nIHRoYXQgZmlsZSBhbmQgaWRlbnRpZnlpbmcgdGhvc2UgY2FsbCBzaXRlcy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGljaCBjb25maWd1cmF0aW9ucyBhbmQgdXBzdHJlYW0gY29kZSBhcmUgaW1wYWN0ZWQuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9kaWFnX2JjX2F1ZGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9kaWFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9kaWFnLmM9NzIwPXN0YXRpYyBib29sIHZhbGlkX2Nncm91cGNvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzMzLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NzM0OnN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzM1LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9ODU1PXN0YXRpYyBpbnQgX19pbmV0X2RpYWdfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCBoZHJsZW4pXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODcxLVx0fVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6ODcyOlx0ZXJyID0gaW5ldF9kaWFnX2JjX2F1ZGl0KGNiX2RhdGEsIHNrYik7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04NzMtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgaW5ldF9kaWFnIENvZGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYXJvdW5kIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGFuZCBgX19pbmV0X2RpYWdfZHVtcF9zdGFydGAgaW4gYG5ldC9pcHY0L2luZXRfZGlhZy5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgdGhlc2UgZnVuY3Rpb25zLiBUaGlzIG1lYW5zIGRpZ2dpbmcgaW50byB0aGUgYnVpbGQgc3lzdGVtLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY0L01ha2VmaWxlYCBhbmQgYG5ldC9pcHY0L0tjb25maWdgLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIHRoZSBwcmVwcm9jZXNzb3IgZGVmaW5lcyBJIG5lZWQgdG8gcHJvcGVybHkgaW50ZXJwcmV0IHRoZWlyIHJvbGUuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyB3aWxsIHF1aWNrbHkgdGVsbCBtZSB3aGF0IGlzIGdvaW5nIG9uLCBhbmQgZnJvbSB0aGVyZSBJIGNhbiBiZXR0ZXIgYXNzZXNzIHRoZWlyIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9kaWFnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczMDpcdCAqIGJ5dGVjb2RlIHNlcXVlbmNlIHVuZGVyIHRoZSBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MuXG4gNzMxOlx0ICovXG4gNzMyOlx0I2RlZmluZSBJTkVUX0RJQUdfQkNfTUFYX09QUyA2NFxuIDczMzpcdFxuIDczNDpcdHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxuIDczNTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gNzM2Olx0e1xuIDczNzpcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciA9IGNiX2RhdGEtXHUwMDNlaW5ldF9kaWFnX25sYV9iYztcbiA3Mzg6XHRcdGNvbnN0IHZvaWQgKmJ5dGVjb2RlLCAqYmM7XG4gNzM5Olx0XHRpbnQgYnl0ZWNvZGVfbGVuLCBsZW47XG4gNzQwOlx0XHRib29sIG5ldF9hZG1pbjtcbiA3NDE6XHRcdGludCBvcHMgPSAwO1xuIDc0MjpcdFxuIDc0MzpcdFx0aWYgKCFhdHRyKVxuIDc0NDpcdFx0XHRyZXR1cm4gMDtcbiA3NDU6XHRcbiA3NDY6XHRcdGlmIChubGFfbGVuKGF0dHIpIFx1MDAzYyBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCkpXG4gNzQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc0ODpcdFxuIDc0OTpcdFx0bmV0X2FkbWluID0gbmV0bGlua19uZXRfY2FwYWJsZShza2IsIENBUF9ORVRfQURNSU4pO1xuIDc1MDpcdFx0Ynl0ZWNvZGUgPSBiYyA9IG5sYV9kYXRhKGF0dHIpO1xuIDc1MTpcdFx0bGVuID0gYnl0ZWNvZGVfbGVuID0gbmxhX2xlbihhdHRyKTtcbiA3NTI6XHRcbiA3NTM6XHRcdHdoaWxlIChsZW4gXHUwMDNlIDApIHtcbiA3NTQ6XHRcdFx0aW50IG1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCk7XG4gNzU1Olx0XHRcdGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wID0gYmM7XG4gNzU2Olx0XG4gNzU3Olx0XHRcdGlmICgmIzQzOyYjNDM7b3BzIFx1MDAzZSBJTkVUX0RJQUdfQkNfTUFYX09QUylcbiA3NTg6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3NTk6XHRcbiA3NjA6XHRcdFx0c3dpdGNoIChvcC1cdTAwM2Vjb2RlKSB7XG4gNzYxOlx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX1NfQ09ORDpcbiA3NjI6XHRcdFx0Y2FzZSBJTkVUX0RJQUdfQkNfRF9DT05EOlxuIDc2MzpcdFx0XHRcdGlmICghdmFsaWRfaG9zdGNvbmQoYmMsIGxlbiwgXHUwMDI2bWluX2xlbikpXG4gNzY0Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3NjU6XHRcdFx0XHRicmVhaztcbiA3NjY6XHRcdFx0Y2FzZSBJTkVUX0RJQUdfQkNfREVWX0NPTkQ6XG4gNzY3Olx0XHRcdFx0aWYgKCF2YWxpZF9kZXZjb25kKGJjLCBsZW4sIFx1MDAyNm1pbl9sZW4pKVxuIDc2ODpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzY5Olx0XHRcdFx0YnJlYWs7XG4gNzcwOlx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX1NfRVE6XG4gNzcxOlx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX1NfR0U6XG4gNzcyOlx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX1NfTEU6XG4gNzczOlx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX0RfRVE6XG4gNzc0Olx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX0RfR0U6XG4gNzc1Olx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX0RfTEU6XG4gNzc2Olx0XHRcdFx0aWYgKCF2YWxpZF9wb3J0X2NvbXBhcmlzb24oYmMsIGxlbiwgXHUwMDI2bWluX2xlbikpXG4gNzc3Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3Nzg6XHRcdFx0XHRicmVhaztcbiA3Nzk6XHRcdFx0Y2FzZSBJTkVUX0RJQUdfQkNfTUFSS19DT05EOlxuIDc4MDpcdFx0XHRcdGlmICghbmV0X2FkbWluKVxuIDc4MTpcdFx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA3ODI6XHRcdFx0XHRpZiAoIXZhbGlkX21hcmtjb25kKGJjLCBsZW4sIFx1MDAyNm1pbl9sZW4pKVxuIDc4MzpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzg0Olx0XHRcdFx0Y2JfZGF0YS1cdTAwM2VtYXJrX25lZWRlZCA9IHRydWU7XG4gNzg1Olx0XHRcdFx0YnJlYWs7XG4gNzg2Olx0I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXG4gNzg3Olx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX0NHUk9VUF9DT05EOlxuIDc4ODpcdFx0XHRcdGlmICghdmFsaWRfY2dyb3VwY29uZChiYywgbGVuLCBcdTAwMjZtaW5fbGVuKSlcbiA3ODk6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc5MDpcdFx0XHRcdGNiX2RhdGEtXHUwMDNlY2dyb3VwX25lZWRlZCA9IHRydWU7XG4gNzkxOlx0XHRcdFx0YnJlYWs7XG4gNzkyOlx0I2VuZGlmXG4gNzkzOlx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX0FVVE86XG4gNzk0Olx0XHRcdFx0Y2JfZGF0YS1cdTAwM2V1c2VybG9ja3NfbmVlZGVkID0gdHJ1ZTtcbiA3OTU6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbiA3OTY6XHRcdFx0Y2FzZSBJTkVUX0RJQUdfQkNfSk1QOlxuIDc5NzpcdFx0XHRjYXNlIElORVRfRElBR19CQ19OT1A6XG4gNzk4Olx0XHRcdFx0YnJlYWs7XG4gNzk5Olx0XHRcdGRlZmF1bHQ6XG4gODAwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODAxOlx0XHRcdH1cbiA4MDI6XHRcbiA4MDM6XHRcdFx0aWYgKG9wLVx1MDAzZWNvZGUgIT0gSU5FVF9ESUFHX0JDX05PUCkge1xuIDgwNDpcdFx0XHRcdGlmIChvcC1cdTAwM2VubyBcdTAwM2MgbWluX2xlbiB8fCBvcC1cdTAwM2VubyBcdTAwM2UgbGVuICYjNDM7IDQgfHwgb3AtXHUwMDNlbm8gXHUwMDI2IDMpXG4gODA1Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4MDY6XHRcdFx0XHRpZiAob3AtXHUwMDNlbm8gXHUwMDNjIGxlbiBcdTAwMjZcdTAwMjZcbiA4MDc6XHRcdFx0XHQgICAgIXZhbGlkX2NjKGJ5dGVjb2RlLCBieXRlY29kZV9sZW4sIGxlbiAtIG9wLVx1MDAzZW5vKSlcbiA4MDg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDgwOTpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI0MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gdGhlIEtlcm5lbCBCdWlsZCBQcm9jZXNzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGBpbmV0X2RpYWcuY2AgZ2V0cyBjb21waWxlZC4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCB0aW1lIHRvIHJldmlzaXQgdGhlIGJ1aWxkIHN5c3RlbSwgc28gSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgbmV0L2lwdjQvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byBob3cgdGhlIElQdjQgbmV0d29ya2luZyBzdGFjayBtb2R1bGVzIGFyZSBjb25zdHJ1Y3RlZC4gSG9wZWZ1bGx5LCB0aGUgaW5jbHVzaW9uIG9mIGBpbmV0X2RpYWcuY2Agd2lsbCBiZSBoYW5kbGVkIHRoZXJlLCBvciBhdCBsZWFzdCB0aGF0IE1ha2VmaWxlIHdpbGwgcG9pbnQgbWUgdG8gdGhlIHJlbGV2YW50IGZpbGVzIGFuZCBydWxlcy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgeW91IG5ldmVyIGtub3cgd2l0aCB0aGVzZSBsYXJnZSwgY29tcGxleCBwcm9qZWN0cy4gVGltZSB0byBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfZGlhZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTQyPW9iai0kKENPTkZJR19ORVRGSUxURVIpXHQmIzQzOz0gbmV0ZmlsdGVyLm8gbmV0ZmlsdGVyL1xubmV0L2lwdjQvTWFrZWZpbGU6NDM6b2JqLSQoQ09ORklHX0lORVRfRElBRykgJiM0Mzs9IGluZXRfZGlhZy5vXG5uZXQvaXB2NC9NYWtlZmlsZS00NC1vYmotJChDT05GSUdfSU5FVF9UQ1BfRElBRykgJiM0Mzs9IHRjcF9kaWFnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTQyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OgoKKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBJTkVUX0RJQUcqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBJTkVUX0RJQUdgLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHN5c3RlbS4gVGhleSBkZWZpbmUgdGhlIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGF0IHVzZXJzIHNlZSBpbiB0b29scyBsaWtlIGBtZW51Y29uZmlnYCBvciBgZGVmY29uZmlnYC4gR2l2ZW4gdGhhdCBgSU5FVF9ESUFHYCBzZWVtcyBuZXR3b3JrLXJlbGF0ZWQsIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYG5ldC9pcHY0L0tjb25maWdgLiBJdCYjMzk7cyBhbG1vc3QgZ3VhcmFudGVlZCB0byBiZSBpbiB0aGVyZS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRElBRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz00MTk9Y29uZmlnIElORVRfVFVOTkVMXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MjItXG5uZXQvaXB2NC9LY29uZmlnOjQyMzpjb25maWcgSU5FVF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cdHRyaXN0YXRlIFwmIzM0O0lORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9NDQ3PWNvbmZpZyBJTkVUX1JBV19ESUFHXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00NTQtXG5uZXQvaXB2NC9LY29uZmlnOjQ1NTpjb25maWcgSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L0tjb25maWctNDU2LVx0Ym9vbCBcJiMzNDtJTkVUOiBhbGxvdyBwcml2aWxlZ2VkIHByb2Nlc3MgdG8gYWRtaW5pc3RyYXRpdmVseSBjbG9zZSBzb2NrZXRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIElQdjQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIElQdjQgY29uZmlndXJhdGlvbiBvcHRpb24uIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBuZXQvaXB2NC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQyMy4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgcGxhY2UgdG8gYmVnaW47IEtjb25maWcgZmlsZXMgYXJlIHRoZSBzdGFuZGFyZCBmb3IgZGVmaW5pbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoZSBsaW5lIG51bWJlciBzZWVtcyBsaWtlbHkgdG8gYmUgYSByZWxldmFudCBzZWN0aW9uIHJlbGF0ZWQgdG8gdGhlIGZlYXR1cmUgSSYjMzk7bSBleGFtaW5pbmcuIEtub3dpbmcgdGhlIGdlbmVyYWwgbGF5b3V0IG9mIHRoZSBmaWxlLCB0aGlzIHNob3VsZCBnZXQgbWUgdG8gdGhlIHJpZ2h0IHJlZ2lvbiB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgZm9ybWF0OiBgY29uZmlnYCwgYGJvb2wvdHJpc3RhdGVgLCBgZGVwZW5kcyBvbmAsIGBoZWxwYCwgYW5kIG1heWJlIHNvbWUgYGRlZmF1bHRgIHN0YXRlbWVudHMuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBvcHRpb24gaW50ZXJhY3RzIHdpdGggb3RoZXJzLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQyMDpcdFx0dHJpc3RhdGVcbiA0MjE6XHRcdGRlZmF1bHQgblxuIDQyMjpcdFxuIDQyMzpcdGNvbmZpZyBJTkVUX0RJQUdcbiA0MjQ6XHRcdHRyaXN0YXRlIFwmIzM0O0lORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuIDQyNTpcdFx0ZGVmYXVsdCB5XG4gNDI2Olx0XHRoZWxwXG4gNDI3Olx0XHQgIFN1cHBvcnQgZm9yIElORVQgKFRDUCwgVURQLCBldGMpIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5XG4gNDI4Olx0XHQgIG5hdGl2ZSBMaW51eCB0b29scyBzdWNoIGFzIHNzLiBzcyBpcyBpbmNsdWRlZCBpbiBpcHJvdXRlMiwgY3VycmVudGx5XG4gNDI5Olx0XHQgIGRvd25sb2FkYWJsZSBhdDpcbiA0MzA6XHRcbiA0MzE6XHRcdCAgICBodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2lwcm91dGUyXG4gNDMyOlx0XG4gNDMzOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gNDM0Olx0XG4gNDM1Olx0Y29uZmlnIElORVRfVENQX0RJQUdcbiA0MzY6XHRcdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4gNDM3Olx0XHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4gNDM4Olx0XG4gNDM5Olx0Y29uZmlnIElORVRfVURQX0RJQUdcbiA0NDA6XHRcdHRyaXN0YXRlIFwmIzM0O1VEUDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gNDQxOlx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuIDQ0MjpcdFx0ZGVmYXVsdCBuXG4gNDQzOlx0XHRoZWxwXG4gNDQ0Olx0XHQgIFN1cHBvcnQgZm9yIFVEUCBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0aGUgc3MgdG9vbC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIGBpbmV0X2RpYWdfYmNfYXVkaXRgIFVzYWdlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGluZXRfZGlhZ19iY19hdWRpdGAgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqIHdpdGhpbiB0aGUgYGluZXRfZGlhZy5jYCBtb2R1bGUuIE15IGdvYWwgaXMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgY29udGV4dC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZm9sbG93IHRoZSBjb2RlIHRvIHNlZSB3aGVyZSB0aGlzIGF1ZGl0IGZ1bmN0aW9uIGlzIGludm9rZWQgYW5kIHVuZGVyIHdoYXQgc3BlY2lmaWMgY29uZGl0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBwdXJwb3NlIGFuZCB3b3JrZmxvdyBvZiBgaW5ldF9kaWFnX2JjX2F1ZGl0YC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGxvZ2ljIHRpZWQgdG8gdGhpcyBhdWRpdCBmdW5jdGlvbiBhbmQgaG9wZWZ1bGx5LCB0aGlzIHdpbGwgaGlnaGxpZ2h0IGFueSBhcmVhcyBvZiBwb3RlbnRpYWwgaW50ZXJlc3Qgb3IgY29uY2Vybi4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2RpYWcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0c3RhdGljIGludCBpbmV0X2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gODUxOlx0e1xuIDg1MjpcdFx0cmV0dXJuIF9faW5ldF9kaWFnX2R1bXAoc2tiLCBjYiwgbmxtc2dfZGF0YShjYi1cdTAwM2VubGgpKTtcbiA4NTM6XHR9XG4gODU0Olx0XG4gODU1Olx0c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IGhkcmxlbilcbiA4NTY6XHR7XG4gODU3Olx0XHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVx1MDAzZW5saDtcbiA4NTg6XHRcdHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhO1xuIDg1OTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGNiLVx1MDAzZXNrYjtcbiA4NjA6XHRcdHN0cnVjdCBubGF0dHIgKm5sYTtcbiA4NjE6XHRcdGludCBlcnI7XG4gODYyOlx0XG4gODYzOlx0XHRjYl9kYXRhID0ga3phbGxvY19vYmooKmNiX2RhdGEpO1xuIDg2NDpcdFx0aWYgKCFjYl9kYXRhKVxuIDg2NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA4NjY6XHRcbiA4Njc6XHRcdGVyciA9IGluZXRfZGlhZ19wYXJzZV9hdHRycyhubGgsIGhkcmxlbiwgY2JfZGF0YS1cdTAwM2VyZXFfbmxhcyk7XG4gODY4Olx0XHRpZiAoZXJyKSB7XG4gODY5Olx0XHRcdGtmcmVlKGNiX2RhdGEpO1xuIDg3MDpcdFx0XHRyZXR1cm4gZXJyO1xuIDg3MTpcdFx0fVxuIDg3MjpcdFx0ZXJyID0gaW5ldF9kaWFnX2JjX2F1ZGl0KGNiX2RhdGEsIHNrYik7XG4gODczOlx0XHRpZiAoZXJyKSB7XG4gODc0Olx0XHRcdGtmcmVlKGNiX2RhdGEpO1xuIDg3NTpcdFx0XHRyZXR1cm4gZXJyO1xuIDg3NjpcdFx0fVxuIDg3NzpcdFxuIDg3ODpcdFx0bmxhID0gY2JfZGF0YS1cdTAwM2VpbmV0X2RpYWdfbmxhX2JwZl9zdGdzO1xuIDg3OTpcdFx0aWYgKG5sYSkge1xuIDg4MDpcdFx0XHRzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyAqYnBmX3N0Z19kaWFnO1xuIDg4MTpcdFxuIDg4MjpcdFx0XHRicGZfc3RnX2RpYWcgPSBicGZfc2tfc3RvcmFnZV9kaWFnX2FsbG9jKG5sYSk7XG4gODgzOlx0XHRcdGlmIChJU19FUlIoYnBmX3N0Z19kaWFnKSkge1xuIDg4NDpcdFx0XHRcdGtmcmVlKGNiX2RhdGEpO1xuIDg4NTpcdFx0XHRcdHJldHVybiBQVFJfRVJSKGJwZl9zdGdfZGlhZyk7XG4gODg2Olx0XHRcdH1cbiA4ODc6XHRcdFx0Y2JfZGF0YS1cdTAwM2VicGZfc3RnX2RpYWcgPSBicGZfc3RnX2RpYWc7XG4gODg4Olx0XHR9XG4gODg5Olx0XG4gODkwOlx0XHRjYi1cdTAwM2VkYXRhID0gY2JfZGF0YTtcbiA4OTE6XHRcdHJldHVybiAwO1xuIDg5MjpcdH1cbiA4OTM6XHRcbiA4OTQ6XHRzdGF0aWMgaW50IGluZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiA4OTU6XHR7XG4gODk2Olx0XHRyZXR1cm4gX19pbmV0X2RpYWdfZHVtcF9zdGFydChjYiwgc2l6ZW9mKHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyKSk7XG4gODk3Olx0fVxuIDg5ODpcdFxuIDg5OTpcdHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnRfY29tcGF0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkNvZGUgQXVkaXQ6IGBpbmV0X2RpYWcuY2AgLSBQb3RlbnRpYWwgQXJlYXMgZm9yIFJldmlldyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYGluZXRfZGlhZ19iY19hdWRpdGAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gZG8gaXMgZmlndXJlIG91dCBpdHMgc2NvcGUuIElzIGl0IHVzZWQgb25seSBpbiBhIHZlcnkgc3BlY2lmaWMgcGxhY2UsIG9yIGlzIGl0IHBvdGVudGlhbGx5IGNhbGxlZCBmcm9tIGFsbCBvdmVyIHRoZSBrZXJuZWw/IElkZW50aWZ5aW5nIGl0cyBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB2dWxuZXJhYmxlIGl0IGlzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgb2YgYGluZXRfZGlhZy5jYC4gQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlIHRoYXQgcmVsYXRlIHRvIGJ5dGVjb2RlIHByb2Nlc3Npbmcgb3IgZHVtcGluZyBuZXR3b3JrIGluZm9ybWF0aW9uPyBJdCYjMzk7cyBwb3NzaWJsZSBJJiMzOTtsbCBmaW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eSBJIG5lZWQgdG8gZXhhbWluZSB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gYnJvYWRlbiBteSBzZWFyY2ggYmV5b25kIGp1c3QgYGluZXRfZGlhZ19iY19hdWRpdGAgaXRzZWxmLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfZGlhZ19iY18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2RpYWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2RpYWcuYz00Mzk9c3RhdGljIGludCBiaXRzdHJpbmdfbWF0Y2goY29uc3QgX19iZTMyICphMSwgY29uc3QgX19iZTMyICphMiwgaW50IGJpdHMpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDY0LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NDY1OnN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX3J1bihjb25zdCBzdHJ1Y3QgbmxhdHRyICpfYmMsXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy00NjYtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfZW50cnkgKmVudHJ5KVxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTQ3Mi1cdFx0aW50IHllcyA9IDE7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo0NzM6XHRcdGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wID0gYmM7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy00NzQtXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9NTg0PXN0YXRpYyB2b2lkIGVudHJ5X2ZpbGxfYWRkcnMoc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnksXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNTk4LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NTk5OmludCBpbmV0X2RpYWdfYmNfc2soY29uc3Qgc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsIHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYwMC17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjMwLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NjMxOlx0cmV0dXJuIGluZXRfZGlhZ19iY19ydW4oYmMsIFx1MDAyNmVudHJ5KTtcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYzMi19XG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo2MzM6RVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX2JjX3NrKTtcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYzNC1cbm5ldC9pcHY0L2luZXRfZGlhZy5jPTYzNT1zdGF0aWMgaW50IHZhbGlkX2NjKGNvbnN0IHZvaWQgKmJjLCBpbnQgbGVuLCBpbnQgY2MpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjM3LVx0d2hpbGUgKGxlbiBcdTAwM2U9IDApIHtcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjYzODpcdFx0Y29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AgPSBiYztcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYzOS1cbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy02NTItLyogZGF0YSBpcyB1MzIgaWZpbmRleCAqL1xubmV0L2lwdjQvaW5ldF9kaWFnLmM6NjUzOnN0YXRpYyBib29sIHZhbGlkX2RldmNvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy02NTQtXHRcdFx0ICBpbnQgKm1pbl9sZW4pXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjYzLS8qIFZhbGlkYXRlIGFuIGluZXRfZGlhZ19ob3N0Y29uZC4gKi9cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjY2NDpzdGF0aWMgYm9vbCB2YWxpZF9ob3N0Y29uZChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCwgaW50IGxlbixcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTY2NS1cdFx0XHQgICBpbnQgKm1pbl9sZW4pXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzAxLS8qIFZhbGlkYXRlIGEgcG9ydCBjb21wYXJpc29uIG9wZXJhdG9yLiAqL1xubmV0L2lwdjQvaW5ldF9kaWFnLmM6NzAyOnN0YXRpYyBib29sIHZhbGlkX3BvcnRfY29tcGFyaXNvbihjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTcwMy1cdFx0XHRcdCAgaW50IGxlbiwgaW50ICptaW5fbGVuKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzA0LXtcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjcwNTpcdC8qIFBvcnQgY29tcGFyaXNvbnMgcHV0IHRoZSBwb3J0IGluIGEgZm9sbG93LW9uIGluZXRfZGlhZ19iY19vcC4gKi9cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjcwNjpcdCptaW5fbGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCk7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MDctXHRpZiAobGVuIFx1MDAzYyAqbWluX2xlbilcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MTEtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo3MTI6c3RhdGljIGJvb2wgdmFsaWRfbWFya2NvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MTMtXHRcdFx0ICAgaW50ICptaW5fbGVuKVxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTcxOS0jaWZkZWYgQ09ORklHX1NPQ0tfQ0dST1VQX0RBVEFcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjcyMDpzdGF0aWMgYm9vbCB2YWxpZF9jZ3JvdXBjb25kKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wLCBpbnQgbGVuLFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzIxLVx0XHRcdCAgICAgaW50ICptaW5fbGVuKVxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTczMy1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjczNDpzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTczNS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTc0NS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjc0NjpcdGlmIChubGFfbGVuKGF0dHIpIFx1MDAzYyBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCkpXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03NDctXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTc1My1cdHdoaWxlIChsZW4gXHUwMDNlIDApIHtcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjc1NDpcdFx0aW50IG1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCk7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo3NTU6XHRcdGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wID0gYmM7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03NTYtXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9ODU1PXN0YXRpYyBpbnQgX19pbmV0X2RpYWdfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCBoZHJsZW4pXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODcxLVx0fVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6ODcyOlx0ZXJyID0gaW5ldF9kaWFnX2JjX2F1ZGl0KGNiX2RhdGEsIHNrYik7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04NzMtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyODQKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA0ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBDb2RlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGBpbmV0X2RpYWcuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2hldGhlciBpdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYE5FVExJTktfSU5FVF9ESUFHYCBzb2NrZXQgZGlhZ25vc3RpYyBpbnRlcmZhY2UuIFRoaXMgaXMgdXNlZCBmb3IgZHVtcGluZyBzb2NrZXRzIHdpdGggYnl0ZWNvZGUgZmlsdGVyaW5nIOKAkyB0aGUgYElORVRfRElBR19SRVFfQllURUNPREVgIGFzcGVjdC4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGNvZGUgcGF0aCBpcyBhY2Nlc3NpYmxlIGluIGEgdHlwaWNhbCBRRU1VIGVudmlyb25tZW50LiBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgYE5FVExJTktfSU5FVF9ESUFHYCBpcyBpbmRlZWQgYSBzdGFuZGFyZCwgdXNlci1zcGFjZSByZWFjaGFibGUgc29ja2V0IEFQSSBpbiBMaW51eCwgc28gdGhhdCYjMzk7cyBhIHBvc2l0aXZlLiBHaXZlbiBTeXprYWxsZXImIzM5O3MgaGVhdnkgZnV6emluZyBvZiBuZXRsaW5rIGFuZCBpbmV0X2RpYWcsIHRoaXMgYXJlYSBpcyBjZXJ0YWlubHkgaW4gcGxheS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGluc3RydWN0aW9uIGNvdW50ZXIgbGltaXQsIGBJTkVUX0RJQUdfQkNfTUFYX09QUyA2NGAsIHRvIHRoZSBgaW5ldF9kaWFnX2JjX2F1ZGl0YCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY0L2luZXRfZGlhZy5jYC4gVGhpcyBpcyBpbnRyaWd1aW5nIOKAkyBpdCYjMzk7cyBhIGJvdW5kYXJ5IGNvbmRpdGlvbiBvbiBob3cgYnl0ZWNvZGUgZmlsdGVycyBhcmUgcHJvY2Vzc2VkIGR1cmluZyBzb2NrZXQgZGlhZ25vc3RpY3MsIHdoaWNoIGNhbiBpbXBhY3QgYm90aCBkdW1wIHJlcXVlc3RzIGFuZCBlcnJvciBoYW5kbGluZy4KClRoZSBjcml0ZXJpYSBsb29rIHByb21pc2luZzogaXQmIzM5O3MgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBiZWNhdXNlIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBieXRlY29kZSBmaWx0ZXIgdmFsaWRhdGlvbi4gVGhlIEVuYWJsZUNvbmZpZ3MgY2hlY2sgaXMgZ29vZC4gSU5FVF9ESUFHIGJlaW5nIGEgdHJpc3RhdGUgYnV0IGRlZmF1bHRzIHRvICYjMzk7eSYjMzk7IG1lYW5zIGl0IHNob3VsZCBiZSBnZW5lcmFsbHkgYWNjZXNzaWJsZS4KClRoZSBsaXN0ZWQgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBhcmUgcmlnaHQgb24gdGFyZ2V0LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYGluZXRfZGlhZ19iY19hdWRpdGAsIGFuZCB0aGUgdmFyaW91cyBgaW5ldF9kaWFnX2R1bXBfKmAsIGBpbmV0X2RpYWdfYmNfcnVuYCBhbmQgYGluZXRfZGlhZ19iY19za2AgZnVuY3Rpb25zLiBOb3csIGEgcXVpY2sgY2hlY2sgb24gdGhlIGV4YWN0IHN5bWJvbCBuYW1lcyBpbiB0aGUgZmlsZSBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5IHRoYXQgdGhlIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGlzIGBzdGF0aWNgIGFuZCB0aGF0IGl0IGlzIGluIHRoZSBjb21waWxhdGlvbiB1bml0LiBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygb3RoZXIgZW50cnkgcG9pbnRzIGFzIHdlbGwgbGlrZSBgX19pbmV0X2RpYWdfZHVtcF9zdGFydGAsIGBpbmV0X2RpYWdfZHVtcF9zdGFydGAsIGBpbmV0X2RpYWdfZHVtcF9zdGFydF9jb21wYXRgLCBgaW5ldF9kaWFnX2JjX3NrYCwgYGluZXRfZGlhZ19kdW1wX29uZV9pY3NrYCwgYGluZXRfZGlhZ19kdW1wX2ljc2tgLiBJIHdpbGwgY2hlY2sgYWxsIGVudHJ5cG9pbnRzIGluIGBpbmV0X2RpYWcuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oaW50fHZvaWQpIFthLXpBLVowLTlfXSYjNDM7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9kaWFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9kaWFnLmM9NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciAqaW5ldF9kaWFnX2xvY2tfaGFuZGxlcihpbnQgcHJvdG8pXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjYtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo2NzpzdGF0aWMgdm9pZCBpbmV0X2RpYWdfdW5sb2NrX2hhbmRsZXIoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyICpoYW5kbGVyKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjgte1xuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTcxLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NzI6dm9pZCBpbmV0X2RpYWdfbXNnX2NvbW1vbl9maWxsKHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03My17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9OTU9RVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX21zZ19jb21tb25fZmlsbCk7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05Ni1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjk3OmludCBpbmV0X2RpYWdfbXNnX2F0dHJzX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTgtXHRcdFx0ICAgICBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqciwgaW50IGV4dCxcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz0xNzk9RVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX21zZ19hdHRyc19maWxsKTtcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTE4MC1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjE4MTpzdGF0aWMgaW50IGluZXRfZGlhZ19wYXJzZV9hdHRycyhjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgaW50IGhkcmxlbixcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTE4Mi1cdFx0XHRcdCBzdHJ1Y3QgbmxhdHRyICoqcmVxX25sYXMpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTk4LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTk5OnN0YXRpYyBpbnQgaW5ldF9kaWFnX2dldF9wcm90b2NvbChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxLFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMjAwLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqZGF0YSlcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0yMDgtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoyMDk6aW50IGluZXRfc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrLFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMjEwLVx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9NDAwPUVYUE9SVF9TWU1CT0xfR1BMKGluZXRfc2tfZGlhZ19maWxsKTtcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTQwMS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjQwMjpzdGF0aWMgaW50IGluZXRfZGlhZ19jbWRfZXhhY3QoaW50IGNtZCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTQwMy1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDM4LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NDM5OnN0YXRpYyBpbnQgYml0c3RyaW5nX21hdGNoKGNvbnN0IF9fYmUzMiAqYTEsIGNvbnN0IF9fYmUzMiAqYTIsIGludCBiaXRzKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDQwLXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy00NjQtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo0NjU6c3RhdGljIGludCBpbmV0X2RpYWdfYmNfcnVuKGNvbnN0IHN0cnVjdCBubGF0dHIgKl9iYyxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTQ2Ni1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnkpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNTgzLSAqL1xubmV0L2lwdjQvaW5ldF9kaWFnLmM6NTg0OnN0YXRpYyB2b2lkIGVudHJ5X2ZpbGxfYWRkcnMoc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnksXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy01ODUtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNTk4LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NTk5OmludCBpbmV0X2RpYWdfYmNfc2soY29uc3Qgc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsIHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYwMC17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9NjMzPUVYUE9SVF9TWU1CT0xfR1BMKGluZXRfZGlhZ19iY19zayk7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy02MzQtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo2MzU6c3RhdGljIGludCB2YWxpZF9jYyhjb25zdCB2b2lkICpiYywgaW50IGxlbiwgaW50IGNjKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjM2LXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz03MjA9c3RhdGljIGJvb2wgdmFsaWRfY2dyb3VwY29uZChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCwgaW50IGxlbixcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MzMtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo3MzQ6c3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MzUtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04MTgtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4MTk6c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTgyMC1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnIpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODQ5LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6ODUwOnN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODUxLXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04NTQtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4NTU6c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IGhkcmxlbilcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg1Ni17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODkzLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6ODk0OnN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODk1LXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04OTgtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4OTk6c3RhdGljIGludCBpbmV0X2RpYWdfZHVtcF9zdGFydF9jb21wYXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTAwLXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05MDMtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo5MDQ6c3RhdGljIGludCBpbmV0X2RpYWdfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTkwNS17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTEzLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTE0OnN0YXRpYyBpbnQgaW5ldF9kaWFnX3R5cGUycHJvdG8oaW50IHR5cGUpXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05MTUte1xuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTkyMy1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjkyNDpzdGF0aWMgaW50IGluZXRfZGlhZ19kdW1wX2NvbXBhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTI1LVx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05MzktXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo5NDA6c3RhdGljIGludCBpbmV0X2RpYWdfZ2V0X2V4YWN0X2NvbXBhdChzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTQxLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTU2LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTU3OnN0YXRpYyBpbnQgaW5ldF9kaWFnX3Jjdl9tc2dfY29tcGF0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTU4LXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05NzctXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo5Nzg6c3RhdGljIGludCBpbmV0X2RpYWdfaGFuZGxlcl9jbWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpoKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTc5LXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz0xMDAwPXN0YXRpY1xubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTAwMTppbnQgaW5ldF9kaWFnX2hhbmRsZXJfZ2V0X2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTAwMi17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9MTA1NT1zdGF0aWMgY29uc3Qgc3RydWN0IHNvY2tfZGlhZ19oYW5kbGVyIGluZXQ2X2RpYWdfaGFuZGxlciA9IHtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xMDYyLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTA2MzppbnQgaW5ldF9kaWFnX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciAqaClcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTEwNjQte1xuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jPTEwNzM9RVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX3JlZ2lzdGVyKTtcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTEwNzQtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxMDc1OnZvaWQgaW5ldF9kaWFnX3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyICpoKVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTA3Ni17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9MTA4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHNvY2tfZGlhZ19pbmV0X2NvbXBhdCBpbmV0X2RpYWdfY29tcGF0ID0ge1xuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTEwOTEtXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxMDkyOnN0YXRpYyBpbnQgX19pbml0IGluZXRfZGlhZ19pbml0KHZvaWQpXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xMDkzLXtcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xMTIwLVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTEyMTpzdGF0aWMgdm9pZCBfX2V4aXQgaW5ldF9kaWFnX2V4aXQodm9pZClcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTExMjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1MAoJCQkJCQkJb3V0cHV0OiAxNTYKCQkJCQkJCXRob3VnaHRzOiAzMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIExpbnV4IEtlcm5lbCYjMzk7cyBpbmV0X2RpYWcgRnV6emluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGUgYGluZXRfZGlhZ2AgZnVuY3Rpb25hbGl0eSB0aGF0IGFyZSByZWxldmFudCBmb3IgZnV6emluZy4gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IGBpbmV0X2RpYWdfYmNfYXVkaXRgLCBgX19pbmV0X2RpYWdfZHVtcF9zdGFydGAsIGBpbmV0X2RpYWdfZHVtcF9zdGFydGAsIGBpbmV0X2RpYWdfYmNfc2tgLCBhbmQgYGluZXRfZGlhZ19oYW5kbGVyX2NtZGAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgYW5kIGhhbmRsZXJzIHRoYXQgd2FycmFudCBjbG9zZXIgZXhhbWluYXRpb24uCgpOZXh0LCBJIGhhdmUgdG8gZGV0ZXJtaW5lIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoZSBvYnZpb3VzIGNhbmRpZGF0ZSBpcyBgSU5FVF9ESUFHYCwgYnV0IEkgbmVlZCB0byBiZSBjZXJ0YWluLiBXaGlsZSBgTkVUTElOS19ESUFHYCB3b3VsZCBiZSBhIHJlbGF0ZWQgb3B0aW9uLCBteSByZXNlYXJjaCBwb2ludHMgdG93YXJkcyBgSU5FVF9ESUFHYCBiZWluZyB0aGUgY29ycmVjdCBzZXR0aW5nLCBhbmQgdGhlIGZhY3QgdGhhdCBgSU5FVF9ESUFHYCBkZXBlbmRzIG9ubHkgb24gYElORVRgIGNvbmZpcm1zIHRoaXM7IGdpdmVuIHRoYXQgYElORVRgIGlzIHRoZSBkZWZhdWx0IGZvciBJUHY0LCBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4dHJhIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgYElORVRfRElBR2AgaGFzIG5vIGV4cGxpY2l0IGRlcGVuZGVuY2llcyBiZXlvbmQgYElORVRgIGluIElQdjQsIGFuZCBzdXJlIGVub3VnaCwgaXQmIzM5O3MgYXQgYG5ldC9pcHY0L0tjb25maWc6NDIzYCBhbmQgaXMgc3RyYWlnaHRmb3J3YXJkLgoKTm93LCBhIGNydWNpYWwgYXNwZWN0IG9mIHRoaXMgZXZhbHVhdGlvbiBpcyB3aGV0aGVyIHRoZSBjb2RlIGNoYW5nZXMgYXJlIGltcGFjdGZ1bCBmb3IgZnV6emluZy4gSXQgYXBwZWFycyB0aGF0IHRoZXJlJiMzOTtzIGEgbmV3IGluc3RydWN0aW9uIGxpbWl0IGNoZWNrIGFkZGVkIHdpdGhpbiBgaW5ldF9kaWFnX2JjX2F1ZGl0YDogYGlmICgmIzQzOyYjNDM7b3BzICZndDsgSU5FVF9ESUFHX0JDX01BWF9PUFMpIHJldHVybiAtRUlOVkFMO2AuIFRoaXMgYWRkaXRpb24gaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCYjMzk7cyBhIG5ldyBjb250cm9sIGZsb3cgbWVjaGFuaXNtIHRoYXQgd2lsbCBsaWtlbHkgaW5mbHVlbmNlIGhvdyB0aGUgZnV6emVyIG9wZXJhdGVzLiBCZWNhdXNlIG9mIHRoaXMsIGl0JiMzOTtzIHdvcnRoIGZ1enppbmchCgpTbywgdGhlIGNvcmUgb2YgdGhlIGZ1enppbmcgc2V0dXAgbG9va3MgZ29vZDogYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUsIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzZXQgdG8gYFsmIzM0O0lORVRfRElBRyYjMzQ7XWAsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFybHkgZGVmaW5lZC4KCkZpbmFsbHksIEkmIzM5O2xsIHVwZGF0ZSB0aGUgcmVzdWx0cy4gSSBhbSBjb25maWRlbnQgaW4gbXkgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0RJQUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpbmV0X2RpYWdfYmNfYXVkaXQmIzM0OywKICAgICYjMzQ7X19pbmV0X2RpYWdfZHVtcF9zdGFydCYjMzQ7LAogICAgJiMzNDtpbmV0X2RpYWdfZHVtcF9zdGFydCYjMzQ7LAogICAgJiMzNDtpbmV0X2RpYWdfYmNfc2smIzM0OywKICAgICYjMzQ7aW5ldF9kaWFnX2hhbmRsZXJfY21kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGluZXRfZGlhZ19iY19hdWRpdCBpbiBuZXQvaXB2NC9pbmV0X2RpYWcuYywgcGxhY2luZyBhIGxpbWl0IChJTkVUX0RJQUdfQkNfTUFYX09QUykgb24gdGhlIG51bWJlciBvZiBvcGVyYXRpb25zIGFsbG93ZWQgaW4gaW5ldF9kaWFnIGJ5dGVjb2RlIGZpbHRlcnMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgc29ja2V0IGRpYWdub3N0aWMgZHVtcCBwYXJzaW5nIGxvZ2ljIGFuZCBlcnJvciBwYXRocyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVF9ESUFHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5ldF9kaWFnX2JjX2F1ZGl0JiMzNDssCiAgICAmIzM0O19faW5ldF9kaWFnX2R1bXBfc3RhcnQmIzM0OywKICAgICYjMzQ7aW5ldF9kaWFnX2R1bXBfc3RhcnQmIzM0OywKICAgICYjMzQ7aW5ldF9kaWFnX2JjX3NrJiMzNDssCiAgICAmIzM0O2luZXRfZGlhZ19oYW5kbGVyX2NtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpbmV0X2RpYWdfYmNfYXVkaXQgaW4gbmV0L2lwdjQvaW5ldF9kaWFnLmMsIHBsYWNpbmcgYSBsaW1pdCAoSU5FVF9ESUFHX0JDX01BWF9PUFMpIG9uIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBhbGxvd2VkIGluIGluZXRfZGlhZyBieXRlY29kZSBmaWx0ZXJzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIHNvY2tldCBkaWFnbm9zdGljIGR1bXAgcGFyc2luZyBsb2dpYyBhbmQgZXJyb3IgcGF0aHMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIHVwcGVyIGJvdW5kIChJTkVUX0RJQUdfQkNfTUFYX09QUyA9IDY0KSBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVjb2RlIG9wZXJhdGlvbnMgdmVyaWZpZWQgZHVyaW5nIGluZXRfZGlhZyBmaWx0ZXIgYXVkaXRpbmcgaW4gaW5ldF9kaWFnX2JjX2F1ZGl0KCkgdG8gcHJldmVudCBleGNlc3NpdmVseSBsb25nIGJ5dGVjb2RlIGV4ZWN1dGlvbnMgd2hpbGUgaG9sZGluZyBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MuIFRoZSBvbmx5IHZhcmlhYmxlIGFkZGVkIGlzIGEgbG9jYWwgaW50ZWdlciBjb3VudGVyIGluaXRpYWxpemVkIHRvIDAuIFRoZSBwYXRjaCBkb2VzIG5vdCB0b3VjaCBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgc3RydWN0IHBhZGRpbmcsIGJ1ZmZlciBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY4YTJmZDNjODczYjlmYzdiZmQ5Yzk1MGM1ZjMzNjVlZmM4M2IyMDgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE5OjQxOjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwppbmRleCAzNGI3N2FhODdkMGE0Li4xY2E1MjhjZDNlNzJiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwpAQCAtNzI1LDYgJiM0Mzs3MjUsMTIgQEAgc3RhdGljIGJvb2wgdmFsaWRfY2dyb3VwY29uZChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCwgaW50IGxlbiwKIH0KICNlbmRpZgogCiYjNDM7Lyogc3MoOCkgZmlsdGVycyBvbmx5IG5lZWQgYSBoYW5kZnVsIG9mIGNvbXBhcmUvaG9zdC9tYXJrIG9wcy4KJiM0MzsgKiBCb3VuZCB0aGUgcHJvZ3JhbSBzbyBkdW1wIHdhbGtzIGNhbm5vdCBydW4gYW4gYXJiaXRyYXJpbHkgbG9uZwomIzQzOyAqIGJ5dGVjb2RlIHNlcXVlbmNlIHVuZGVyIHRoZSBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBJTkVUX0RJQUdfQkNfTUFYX09QUyA2NAomIzQzOwogc3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtNzMyLDYgJiM0Mzs3MzgsNyBAQCBzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSwKIAljb25zdCB2b2lkICpieXRlY29kZSwgKmJjOwogCWludCBieXRlY29kZV9sZW4sIGxlbjsKIAlib29sIG5ldF9hZG1pbjsKJiM0MzsJaW50IG9wcyA9IDA7CiAKIAlpZiAoIWF0dHIpCiAJCXJldHVybiAwOwpAQCAtNzQ3LDYgJiM0Mzs3NTQsOSBAQCBzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSwKIAkJaW50IG1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCk7CiAJCWNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wID0gYmM7CiAKJiM0MzsJCWlmICgmIzQzOyYjNDM7b3BzICZndDsgSU5FVF9ESUFHX0JDX01BWF9PUFMpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJCXN3aXRjaCAob3AtJmd0O2NvZGUpIHsKIAkJY2FzZSBJTkVUX0RJQUdfQkNfU19DT05EOgogCQljYXNlIElORVRfRElBR19CQ19EX0NPTkQ6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEV2YWx1YXRpb24gb2YgdGhlIExpbnV4IEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSByZXF1ZXN0IGhlcmUgdG8gYXNzZXNzIGEgTGludXgga2VybmVsIHBhdGNoIGFuZCBkZWNpZGUgd2hldGhlciBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBnZXQgdGhpcyBkb25lLCBubyBtYWxpY2lvdXMgcGF5bG9hZHMgb3IgZXhwbG9pdHMgYXJlIHJlcXVlc3RlZCwgdGhpcyBpcyBiZW5pZ24uCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O2xsIGRvIGEgcXVpY2sgc2FmZXR5IGV2YWx1YXRpb24g4oCTIHRoaXMgaXMgY29kZSByZXZpZXcvc2VjdXJpdHkgYXNzZXNzbWVudCBhbmQgSSBjYW4gdGFrZSB0aGlzIGRpcmVjdGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBLTVNBTi13b3J0aHkuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRpZmY6IFRoZSBjaGFuZ2UgaXMgaW4gYG5ldC9pcHY0L2luZXRfZGlhZy5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgYElORVRfRElBR19CQ19NQVhfT1BTYCBkZWZpbmUgc2V0IHRvIDY0LiAgVGhpcyBsaW1pdCBpcyBmb3IgdGhlIGJ5dGVjb2RlIHVzZWQgYnkgYHNzKDgpYCBmaWx0ZXJpbmcsIHByZXZlbnRpbmcgYXJiaXRyYXJpbHkgbG9uZyBzZXF1ZW5jZXMgdW5kZXIgdGhlIHNvY2tldCBoYXNoIGJ1Y2tldCBsb2NrcywgaW4gdGhlIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGZ1bmN0aW9uLiBUaGUgY29kZSBub3cgaW5jcmVtZW50cyBhbiBgb3BzYCBjb3VudGVyIGFuZCByZXR1cm5zIC1FSU5WQUwgaWYgaXQgZXhjZWVkcyB0aGUgbWF4IGFsbG93ZWQgb3BlcmF0aW9ucy4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBoYXJkZW5pbmcgbWVhc3VyZSwgcHJldmVudGluZyBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2Ugb3IgcGVyaGFwcyBldmVuIG1vcmUgc3VidGxlIHZ1bG5lcmFiaWxpdGllcyBzdGVtbWluZyBmcm9tIG92ZXJseSBjb21wbGV4IGJ5dGVjb2RlIGV4ZWN1dGlvbi4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZeKAlGEgYnl0ZWNvZGUgbGltaXTigJRhbmQgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgS0FTQU4gYW5kIEtNU0FOIHJlbGF0ZSwgSSYjMzk7bSB0aGlua2luZy4uLiBLQVNBTiB3b3VsZCBiZSB0aGUgaW5pdGlhbCB0b29sLCByaWdodD8gVGhpcyBpcyBsaWtlbHkgYSBnb29kIHBsYWNlIGZvciBLQVNBTiB0byBkbyBpdHMgdGhpbmcgd2l0aCB0aGUgb3JpZ2luYWwgdmVyc2lvbi4gS01TQU4gaXMgbW9yZSBmb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBLQVNBTiBtaWdodCBtaXNzIGFuZCB0aGlzIGlzIG5vdCB3aGF0IHRoaXMgbG9va3MgbGlrZS4gIEl0JiMzOTtzIGEgYm91bmRzIGNoZWNrLCB3aGljaCBpcyBtb3JlIG9mIGEgcG90ZW50aWFsIERvUyB2dWxuZXJhYmlsaXR5LCB3aGljaCBpcyB3aXRoaW4gdGhlIGJvdW5kcyBvZiBLQVNBTiYjMzk7cyBhYmlsaXRpZXMuIEtNU0FOIGlzIGRlZmluaXRlbHkgbm90IG5lZWRlZCwgYXMgdGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGlzc3VlLCBub3QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLgoKU28sIGluIGNvbmNsdXNpb24sIHdoaWxlIGl0JiMzOTtzIGEgZ29vZCBkZWZlbnNpdmUgYWRkaXRpb24gdG8gdGhlIGNvZGUsIEkgZG9uJiMzOTt0IHRoaW5rIHRoaXMgY2hhbmdlIGJ5IGl0c2VsZiB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBzZXZlcml0eSBvZiB0aGUgY2hhbmdlIGRvZXNuJiMzOTt0IHdhcnJhbnQgaXQsIGFuZCBLQVNBTiBzaG91bGQgaGFuZGxlIGFueSBpc3N1ZXMgd2l0aCB0aGUgb3JpZ2luYWwgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2RpYWcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzI1Olx0fVxuIDcyNjpcdCNlbmRpZlxuIDcyNzpcdFxuIDcyODpcdC8qIHNzKDgpIGZpbHRlcnMgb25seSBuZWVkIGEgaGFuZGZ1bCBvZiBjb21wYXJlL2hvc3QvbWFyayBvcHMuXG4gNzI5Olx0ICogQm91bmQgdGhlIHByb2dyYW0gc28gZHVtcCB3YWxrcyBjYW5ub3QgcnVuIGFuIGFyYml0cmFyaWx5IGxvbmdcbiA3MzA6XHQgKiBieXRlY29kZSBzZXF1ZW5jZSB1bmRlciB0aGUgc29ja2V0IGhhc2ggYnVja2V0IGxvY2tzLlxuIDczMTpcdCAqL1xuIDczMjpcdCNkZWZpbmUgSU5FVF9ESUFHX0JDX01BWF9PUFMgNjRcbiA3MzM6XHRcbiA3MzQ6XHRzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcbiA3MzU6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDczNjpcdHtcbiA3Mzc6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIgPSBjYl9kYXRhLVx1MDAzZWluZXRfZGlhZ19ubGFfYmM7XG4gNzM4Olx0XHRjb25zdCB2b2lkICpieXRlY29kZSwgKmJjO1xuIDczOTpcdFx0aW50IGJ5dGVjb2RlX2xlbiwgbGVuO1xuIDc0MDpcdFx0Ym9vbCBuZXRfYWRtaW47XG4gNzQxOlx0XHRpbnQgb3BzID0gMDtcbiA3NDI6XHRcbiA3NDM6XHRcdGlmICghYXR0cilcbiA3NDQ6XHRcdFx0cmV0dXJuIDA7XG4gNzQ1Olx0XG4gNzQ2Olx0XHRpZiAobmxhX2xlbihhdHRyKSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBpbmV0X2RpYWdfYmNfb3ApKVxuIDc0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3NDg6XHRcbiA3NDk6XHRcdG5ldF9hZG1pbiA9IG5ldGxpbmtfbmV0X2NhcGFibGUoc2tiLCBDQVBfTkVUX0FETUlOKTtcbiA3NTA6XHRcdGJ5dGVjb2RlID0gYmMgPSBubGFfZGF0YShhdHRyKTtcbiA3NTE6XHRcdGxlbiA9IGJ5dGVjb2RlX2xlbiA9IG5sYV9sZW4oYXR0cik7XG4gNzUyOlx0XG4gNzUzOlx0XHR3aGlsZSAobGVuIFx1MDAzZSAwKSB7XG4gNzU0Olx0XHRcdGludCBtaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBpbmV0X2RpYWdfYmNfb3ApO1xuIDc1NTpcdFx0XHRjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCA9IGJjO1xuIDc1NjpcdFxuIDc1NzpcdFx0XHRpZiAoJiM0MzsmIzQzO29wcyBcdTAwM2UgSU5FVF9ESUFHX0JDX01BWF9PUFMpXG4gNzU4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzU5Olx0XG4gNzYwOlx0XHRcdHN3aXRjaCAob3AtXHUwMDNlY29kZSkge1xuIDc2MTpcdFx0XHRjYXNlIElORVRfRElBR19CQ19TX0NPTkQ6XG4gNzYyOlx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX0RfQ09ORDpcbiA3NjM6XHRcdFx0XHRpZiAoIXZhbGlkX2hvc3Rjb25kKGJjLCBsZW4sIFx1MDAyNm1pbl9sZW4pKVxuIDc2NDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzY1Olx0XHRcdFx0YnJlYWs7XG4gNzY2Olx0XHRcdGNhc2UgSU5FVF9ESUFHX0JDX0RFVl9DT05EOlxuIDc2NzpcdFx0XHRcdGlmICghdmFsaWRfZGV2Y29uZChiYywgbGVuLCBcdTAwMjZtaW5fbGVuKSlcbiA3Njg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc2OTpcdFx0XHRcdGJyZWFrO1xuIDc3MDpcdFx0XHRjYXNlIElORVRfRElBR19CQ19TX0VROlxuIDc3MTpcdFx0XHRjYXNlIElORVRfRElBR19CQ19TX0dFOlxuIDc3MjpcdFx0XHRjYXNlIElORVRfRElBR19CQ19TX0xFOlxuIDc3MzpcdFx0XHRjYXNlIElORVRfRElBR19CQ19EX0VROlxuIDc3NDpcdFx0XHRjYXNlIElORVRfRElBR19CQ19EX0dFOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjQ4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnl0ZWNvZGUgQXVkaXQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiwgZXNwZWNpYWxseSBpbiBsaWdodCBvZiB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgaGFyZCBsaW1pdCDigJMgYElORVRfRElBR19CQ19NQVhfT1BTID0gNjRgIOKAkyBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHByb2Nlc3NlZCB3aXRoaW4gYGluZXRfZGlhZ19iY19hdWRpdGAuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCwgd2l0aGluIGBpbmV0X2RpYWdfYmNfYXVkaXRgLCB0aGV54oCZcmUgaW5jcmVtZW50aW5nIHRoaXMgYG9wc2AgY291bnRlciBmb3IgZWFjaCBvcGNvZGUgdGhleSBlbmNvdW50ZXIuIElmIHRoYXQgYG9wc2AgY291bnRlciBleGNlZWRzIGBJTkVUX0RJQUdfQkNfTUFYX09QU2AsIHRoZSBmdW5jdGlvbiBraWNrcyBiYWNrIGFuIGAtRUlOVkFMYCBlcnJvci4gVGhhdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgc2VjdXJpdHkgbWVhc3VyZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbGFyZ2VyIGNvbnRleHQ6IHdoZXJlIGlzIHRoaXMgYGluZXRfZGlhZ19iY19hdWRpdGAgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBBbmQgY3JpdGljYWxseSwgaG93IGlzIHRoaXMgYnl0ZWNvZGUgYmVpbmcgZXhlY3V0ZWQgb3Igb3RoZXJ3aXNlIGhhbmRsZWQgYnkgdGhlIHN5c3RlbT8gVW5kZXJzdGFuZGluZyB0aG9zZSBjYWxsIHNpdGVzIGFuZCB0aGUgYnl0ZWNvZGUgZXhlY3V0aW9uIGZsb3cgd2lsbCBiZSBjcnVjaWFsIHRvIGFzc2Vzc2luZyB0aGUgb3ZlcmFsbCBpbXBhY3QgYW5kIGVmZmVjdGl2ZW5lc3Mgb2YgdGhpcyBjaGFuZ2UuIElzIHRoaXMgYSBmaWx0ZXI/IEEgdHJhbnNmb3JtYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBieXRlY29kZeKAmXMgcHVycG9zZSB0byBzZWUgdGhlIHJpc2sgdGhlIGxpbWl0IGFkZHJlc3Nlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9kaWFnX2JjX2F1ZGl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2luZXRfZGlhZy5jPTcyMD1zdGF0aWMgYm9vbCB2YWxpZF9jZ3JvdXBjb25kKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wLCBpbnQgbGVuLFxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTczMy1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjczNDpzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTczNS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jPTg1NT1zdGF0aWMgaW50IF9faW5ldF9kaWFnX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgaGRybGVuKVxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg3MS1cdH1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjg3MjpcdGVyciA9IGluZXRfZGlhZ19iY19hdWRpdChjYl9kYXRhLCBza2IpO1xubmV0L2lwdjQvaW5ldF9kaWFnLmMtODczLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTE3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgaW5ldF9kaWFnX2R1bXBfc3RhcnRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgYGluZXRfZGlhZ2Agc3Vic3lzdGVtLCBhbmQgYSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQgaXMgdGhhdCBkdW1wIGZ1bmN0aW9uLiBMZXQmIzM5O3MgemVybyBpbiBvbiBgX19pbmV0X2RpYWdfZHVtcF9zdGFydGAgYXJvdW5kIGxpbmUgODU1LiBUaGlzIHN1Z2dlc3RzIHRoYXQgaXQmIzM5O3MgdGhlIGNvcmUgZnVuY3Rpb24gdGhhdCBvcmNoZXN0cmF0ZXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGlhZ25vc3RpYyBkYXRhIGR1bXAgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBpbml0aWFsaXphdGlvbiBhbmQgaXRlcmF0aW9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIHdvcmtzLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgYWNjZXNzZXMgYW5kIG1hbmlwdWxhdGVzLiBJcyBpdCB1c2luZyBhIHN0YW5kYXJkIGl0ZXJhdG9yLCBvciBzb21ldGhpbmcgY3VzdG9tPyBXaGF0IGFib3V0IGFueSBwb3RlbnRpYWwgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcz8gVW5kZXJzdGFuZGluZyB0aGUgZW50cnkgcG9pbnQgd2lsbCBtYWtlIHRoZSByZXN0IG9mIHRoZSBwdXp6bGUgbXVjaCBjbGVhcmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2luZXRfZGlhZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTU6XHRzdGF0aWMgaW50IF9faW5ldF9kaWFnX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgaGRybGVuKVxuIDg1NjpcdHtcbiA4NTc6XHRcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXHUwMDNlbmxoO1xuIDg1ODpcdFx0c3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGE7XG4gODU5Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gY2ItXHUwMDNlc2tiO1xuIDg2MDpcdFx0c3RydWN0IG5sYXR0ciAqbmxhO1xuIDg2MTpcdFx0aW50IGVycjtcbiA4NjI6XHRcbiA4NjM6XHRcdGNiX2RhdGEgPSBremFsbG9jX29iaigqY2JfZGF0YSk7XG4gODY0Olx0XHRpZiAoIWNiX2RhdGEpXG4gODY1Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDg2NjpcdFxuIDg2NzpcdFx0ZXJyID0gaW5ldF9kaWFnX3BhcnNlX2F0dHJzKG5saCwgaGRybGVuLCBjYl9kYXRhLVx1MDAzZXJlcV9ubGFzKTtcbiA4Njg6XHRcdGlmIChlcnIpIHtcbiA4Njk6XHRcdFx0a2ZyZWUoY2JfZGF0YSk7XG4gODcwOlx0XHRcdHJldHVybiBlcnI7XG4gODcxOlx0XHR9XG4gODcyOlx0XHRlcnIgPSBpbmV0X2RpYWdfYmNfYXVkaXQoY2JfZGF0YSwgc2tiKTtcbiA4NzM6XHRcdGlmIChlcnIpIHtcbiA4NzQ6XHRcdFx0a2ZyZWUoY2JfZGF0YSk7XG4gODc1Olx0XHRcdHJldHVybiBlcnI7XG4gODc2Olx0XHR9XG4gODc3Olx0XG4gODc4Olx0XHRubGEgPSBjYl9kYXRhLVx1MDAzZWluZXRfZGlhZ19ubGFfYnBmX3N0Z3M7XG4gODc5Olx0XHRpZiAobmxhKSB7XG4gODgwOlx0XHRcdHN0cnVjdCBicGZfc2tfc3RvcmFnZV9kaWFnICpicGZfc3RnX2RpYWc7XG4gODgxOlx0XG4gODgyOlx0XHRcdGJwZl9zdGdfZGlhZyA9IGJwZl9za19zdG9yYWdlX2RpYWdfYWxsb2MobmxhKTtcbiA4ODM6XHRcdFx0aWYgKElTX0VSUihicGZfc3RnX2RpYWcpKSB7XG4gODg0Olx0XHRcdFx0a2ZyZWUoY2JfZGF0YSk7XG4gODg1Olx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYnBmX3N0Z19kaWFnKTtcbiA4ODY6XHRcdFx0fVxuIDg4NzpcdFx0XHRjYl9kYXRhLVx1MDAzZWJwZl9zdGdfZGlhZyA9IGJwZl9zdGdfZGlhZztcbiA4ODg6XHRcdH1cbiA4ODk6XHRcbiA4OTA6XHRcdGNiLVx1MDAzZWRhdGEgPSBjYl9kYXRhO1xuIDg5MTpcdFx0cmV0dXJuIDA7XG4gODkyOlx0fVxuIDg5MzpcdFxuIDg5NDpcdHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzcwCgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDQwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBpbmV0X2RpYWcgQnl0ZWNvZGUgT3BlcmF0aW9uIExpbWl0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXTigJlzIHByaW1hcmlseSBmb2N1c2VkIG9uIHJlc3RyaWN0aW5nIHRoZSBudW1iZXIgb2YgYnl0ZWNvZGUgb3BlcmF0aW9ucyBhbGxvd2VkIHdpdGhpbiBgaW5ldF9kaWFnYCBzb2NrZXQgZmlsdGVyIGR1bXBzLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBsaW1pdCwgYElORVRfRElBR19CQ19NQVhfT1BTYCAoc2V0IHRvIDY0KSwgYW5kIGEgY291bnRlciwgYG9wc2AsIHRoYXQgaW5jcmVtZW50cyB3aXRoIGVhY2ggb3BlcmF0aW9uIHdpdGhpbiBgaW5ldF9kaWFnX2JjX2F1ZGl0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBpbnRyb2R1Y2luZyBhbnkgbmV3IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcz8mIzM0OwoKRmlyc3QsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3MgdGhpbmsgdGhyb3VnaCB0aGUgc2NlbmFyaW9zLiBUaGUgY291bnRlciBgb3BzYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCByaWdodD8gR29vZC4gTm8gbmV3IGJ1ZmZlcnMgYXJlIGJlaW5nIGludHJvZHVjZWQsIGFuZCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBoYXBwZW5pbmcuIEV4Y2VsbGVudC4gTm8gZGF0YSBpcyBiZWluZyBjb3BpZWQgZnJvbSB0aGUga2VybmVsIHRvIHVzZXIgc3BhY2UsIHNvIG5vIHBvdGVudGlhbCBmb3IgaW5mb3JtYXRpb24gbGVha2FnZSB0aGVyZS4gQW5kIGNyaXRpY2FsbHksIG5vIGNvbmRpdGlvbnMgYXJlIGJyYW5jaGluZyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIGRlZmluaXRlbHkgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgYW55d2hlcmUgaW4gdGhpcyBzY29wZS4gSeKAmW0gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIG9uIHRoYXQgZnJvbnQuCgpOb3csIGRvZXMgdGhpcyBwYXRjaCB3YXJyYW50IGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBydW4/IEtNU0FOIGlzIHJlbGV2YW50IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcG90ZW50aWFsIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGJyYW5jaCBjb25kaXRpb25zLiBMb29raW5nIGF0IHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyDigJMganVzdCBhZGRpbmcgYSBjb3VudGVyIGFuZCBhIGNoZWNrIOKAkyBub25lIG9mIHRob3NlIEtNU0FOIGNvbmNlcm5zIHNlZW0gdG8gYXBwbHkuIFN0YW5kYXJkIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCBvdGhlciBzYW5pdGl6ZXJzIHNob3VsZCBiZSBzdWZmaWNpZW50IGhlcmUuIFRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIGFueSBLTVNBTi1zcGVjaWZpYyBidWdzIG9yIGV4cG9zaW5nIGV4aXN0aW5nIG9uZXMuCgpTbywgbGV0JiMzOTtzIHN1bW1hcml6ZSBpdCBmb3IgdGhlIHJlY29yZC4gVGhlIHBhdGNoIGlzIHNpbXBseSBhZGRpbmcgYW4gb3Bjb2RlIGNvdW50IGxpbWl0LCBgSU5FVF9ESUFHX0JDX01BWF9PUFNgLCBkdXJpbmcgYGluZXRfZGlhZ19iY19hdWRpdGAuIFRoaXMgaXMgaW50ZW5kZWQgdG8gbWl0aWdhdGUgZGVuaWFsLW9mLXNlcnZpY2Ugcmlza3MsIG9yIHBvdGVudGlhbCBleGNlc3NpdmUgbG9jayBob2xkIHRpbWVzLiBUaGUgYWRkZWQgbG9jYWwgY291bnRlciBgb3BzYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLiBDcnVjaWFsbHksIHRoZSBwYXRjaCBkb2VzICpub3QqIGFsbG9jYXRlIG9yIGFsdGVyIGV4aXN0aW5nIGtlcm5lbCBtZW1vcnkgc3RydWN0dXJlczsgaXQgZG9lc24mIzM5O3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2U7IGFuZCBpbXBvcnRhbnRseSwgaXQgZG9lcyAqbm90KiBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgZGF0YSBidWZmZXIgcmVhZHMgaW4gYW55IHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSB0aGUgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gVGhlcmVmb3JlLCBubyBLTVNBTiBpcyBuZWVkZWQuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplcnMgYXJlIGdvb2QgdG8gZ28uIFRpbWUgdG8gc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gdXBwZXIgYm91bmQgKElORVRfRElBR19CQ19NQVhfT1BTID0gNjQpIG9uIHRoZSBudW1iZXIgb2YgYnl0ZWNvZGUgb3BlcmF0aW9ucyB2ZXJpZmllZCBkdXJpbmcgaW5ldF9kaWFnIGZpbHRlciBhdWRpdGluZyBpbiBpbmV0X2RpYWdfYmNfYXVkaXQoKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZWx5IGxvbmcgYnl0ZWNvZGUgZXhlY3V0aW9ucyB3aGlsZSBob2xkaW5nIHNvY2tldCBoYXNoIGJ1Y2tldCBsb2Nrcy4gVGhlIG9ubHkgdmFyaWFibGUgYWRkZWQgaXMgYSBsb2NhbCBpbnRlZ2VyIGNvdW50ZXIgaW5pdGlhbGl6ZWQgdG8gMC4gVGhlIHBhdGNoIGRvZXMgbm90IHRvdWNoIGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzLCBzdHJ1Y3QgcGFkZGluZywgYnVmZmVyIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24sIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiB1cHBlciBib3VuZCAoSU5FVF9ESUFHX0JDX01BWF9PUFMgPSA2NCkgb24gdGhlIG51bWJlciBvZiBieXRlY29kZSBvcGVyYXRpb25zIHZlcmlmaWVkIGR1cmluZyBpbmV0X2RpYWcgZmlsdGVyIGF1ZGl0aW5nIGluIGluZXRfZGlhZ19iY19hdWRpdCgpIHRvIHByZXZlbnQgZXhjZXNzaXZlbHkgbG9uZyBieXRlY29kZSBleGVjdXRpb25zIHdoaWxlIGhvbGRpbmcgc29ja2V0IGhhc2ggYnVja2V0IGxvY2tzLiBUaGUgb25seSB2YXJpYWJsZSBhZGRlZCBpcyBhIGxvY2FsIGludGVnZXIgY291bnRlciBpbml0aWFsaXplZCB0byAwLiBUaGUgcGF0Y2ggZG9lcyBub3QgdG91Y2gga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMsIHN0cnVjdCBwYWRkaW5nLCBidWZmZXIgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiwgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjAwLjUzNzU4Mjk2NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMTUyOTMxODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRElBR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImluZXRfZGlhZ19iY19hdWRpdFwiLFxuICAgIFwiX19pbmV0X2RpYWdfZHVtcF9zdGFydFwiLFxuICAgIFwiaW5ldF9kaWFnX2R1bXBfc3RhcnRcIixcbiAgICBcImluZXRfZGlhZ19iY19za1wiLFxuICAgIFwiaW5ldF9kaWFnX2hhbmRsZXJfY21kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIHVwcGVyIGJvdW5kIChJTkVUX0RJQUdfQkNfTUFYX09QUyA9IDY0KSBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVjb2RlIG9wZXJhdGlvbnMgdmVyaWZpZWQgZHVyaW5nIGluZXRfZGlhZyBmaWx0ZXIgYXVkaXRpbmcgaW4gaW5ldF9kaWFnX2JjX2F1ZGl0KCkgdG8gcHJldmVudCBleGNlc3NpdmVseSBsb25nIGJ5dGVjb2RlIGV4ZWN1dGlvbnMgd2hpbGUgaG9sZGluZyBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MuIFRoZSBvbmx5IHZhcmlhYmxlIGFkZGVkIGlzIGEgbG9jYWwgaW50ZWdlciBjb3VudGVyIGluaXRpYWxpemVkIHRvIDAuIFRoZSBwYXRjaCBkb2VzIG5vdCB0b3VjaCBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgc3RydWN0IHBhZGRpbmcsIGJ1ZmZlciBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbmV0X2RpYWdfYmNfYXVkaXQgaW4gbmV0L2lwdjQvaW5ldF9kaWFnLmMsIHBsYWNpbmcgYSBsaW1pdCAoSU5FVF9ESUFHX0JDX01BWF9PUFMpIG9uIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBhbGxvd2VkIGluIGluZXRfZGlhZyBieXRlY29kZSBmaWx0ZXJzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIHNvY2tldCBkaWFnbm9zdGljIGR1bXAgcGFyc2luZyBsb2dpYyBhbmQgZXJyb3IgcGF0aHMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjAwLjUzNzU4Nzc0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MDM2NzMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY4YTJmZDNjODczYjlmYzdiZmQ5Yzk1MGM1ZjMzNjVlZmM4M2IyMDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAxOTo0MTo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2RpYWcuYyBiL25ldC9pcHY0L2luZXRfZGlhZy5jXFxuaW5kZXggMzRiNzdhYTg3ZDBhNC4uMWNhNTI4Y2QzZTcyYiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuY1xcbisrKyBiL25ldC9pcHY0L2luZXRfZGlhZy5jXFxuQEAgLTcyNSw2ICs3MjUsMTIgQEAgc3RhdGljIGJvb2wgdmFsaWRfY2dyb3VwY29uZChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCwgaW50IGxlbixcXG4gfVxcbiAjZW5kaWZcXG4gXFxuKy8qIHNzKDgpIGZpbHRlcnMgb25seSBuZWVkIGEgaGFuZGZ1bCBvZiBjb21wYXJlL2hvc3QvbWFyayBvcHMuXFxuKyAqIEJvdW5kIHRoZSBwcm9ncmFtIHNvIGR1bXAgd2Fsa3MgY2Fubm90IHJ1biBhbiBhcmJpdHJhcmlseSBsb25nXFxuKyAqIGJ5dGVjb2RlIHNlcXVlbmNlIHVuZGVyIHRoZSBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MuXFxuKyAqL1xcbisjZGVmaW5lIElORVRfRElBR19CQ19NQVhfT1BTIDY0XFxuK1xcbiBzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcXG4gXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbkBAIC03MzIsNiArNzM4LDcgQEAgc3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXFxuIFxcdGNvbnN0IHZvaWQgKmJ5dGVjb2RlLCAqYmM7XFxuIFxcdGludCBieXRlY29kZV9sZW4sIGxlbjtcXG4gXFx0Ym9vbCBuZXRfYWRtaW47XFxuK1xcdGludCBvcHMgPSAwO1xcbiBcXG4gXFx0aWYgKCFhdHRyKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtNzQ3LDYgKzc1NCw5IEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxcbiBcXHRcXHRpbnQgbWluX2xlbiA9IHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wKTtcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AgPSBiYztcXG4gXFxuK1xcdFxcdGlmICgrK29wcyBcXHUwMDNlIElORVRfRElBR19CQ19NQVhfT1BTKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdFxcdHN3aXRjaCAob3AtXFx1MDAzZWNvZGUpIHtcXG4gXFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfU19DT05EOlxcbiBcXHRcXHRjYXNlIElORVRfRElBR19CQ19EX0NPTkQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjAyLjAxODczMDE1NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDYyOTA5NDYwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVF9ESUFHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5ldF9kaWFnX2JjX2F1ZGl0XCIsXG4gICAgXCJfX2luZXRfZGlhZ19kdW1wX3N0YXJ0XCIsXG4gICAgXCJpbmV0X2RpYWdfZHVtcF9zdGFydFwiLFxuICAgIFwiaW5ldF9kaWFnX2JjX3NrXCIsXG4gICAgXCJpbmV0X2RpYWdfaGFuZGxlcl9jbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbmV0X2RpYWdfYmNfYXVkaXQgaW4gbmV0L2lwdjQvaW5ldF9kaWFnLmMsIHBsYWNpbmcgYSBsaW1pdCAoSU5FVF9ESUFHX0JDX01BWF9PUFMpIG9uIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBhbGxvd2VkIGluIGluZXRfZGlhZyBieXRlY29kZSBmaWx0ZXJzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIHNvY2tldCBkaWFnbm9zdGljIGR1bXAgcGFyc2luZyBsb2dpYyBhbmQgZXJyb3IgcGF0aHMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjhhMmZkM2M4NzNiOWZjN2JmZDljOTUwYzVmMzM2NWVmYzgzYjIwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTk6NDE6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2RpYWcuYyBiL25ldC9pcHY0L2luZXRfZGlhZy5jXG5pbmRleCAzNGI3N2FhODdkMGE0Li4xY2E1MjhjZDNlNzJiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaW5ldF9kaWFnLmNcbisrKyBiL25ldC9pcHY0L2luZXRfZGlhZy5jXG5AQCAtNzI1LDYgKzcyNSwxMiBAQCBzdGF0aWMgYm9vbCB2YWxpZF9jZ3JvdXBjb25kKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wLCBpbnQgbGVuLFxuIH1cbiAjZW5kaWZcbiBcbisvKiBzcyg4KSBmaWx0ZXJzIG9ubHkgbmVlZCBhIGhhbmRmdWwgb2YgY29tcGFyZS9ob3N0L21hcmsgb3BzLlxuKyAqIEJvdW5kIHRoZSBwcm9ncmFtIHNvIGR1bXAgd2Fsa3MgY2Fubm90IHJ1biBhbiBhcmJpdHJhcmlseSBsb25nXG4rICogYnl0ZWNvZGUgc2VxdWVuY2UgdW5kZXIgdGhlIHNvY2tldCBoYXNoIGJ1Y2tldCBsb2Nrcy5cbisgKi9cbisjZGVmaW5lIElORVRfRElBR19CQ19NQVhfT1BTIDY0XG4rXG4gc3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXG4gXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5AQCAtNzMyLDYgKzczOCw3IEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxuIFx0Y29uc3Qgdm9pZCAqYnl0ZWNvZGUsICpiYztcbiBcdGludCBieXRlY29kZV9sZW4sIGxlbjtcbiBcdGJvb2wgbmV0X2FkbWluO1xuK1x0aW50IG9wcyA9IDA7XG4gXG4gXHRpZiAoIWF0dHIpXG4gXHRcdHJldHVybiAwO1xuQEAgLTc0Nyw2ICs3NTQsOSBAQCBzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcbiBcdFx0aW50IG1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCk7XG4gXHRcdGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wID0gYmM7XG4gXG4rXHRcdGlmICgrK29wcyBcdTAwM2UgSU5FVF9ESUFHX0JDX01BWF9PUFMpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRcdHN3aXRjaCAob3AtXHUwMDNlY29kZSkge1xuIFx0XHRjYXNlIElORVRfRElBR19CQ19TX0NPTkQ6XG4gXHRcdGNhc2UgSU5FVF9ESUFHX0JDX0RfQ09ORDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjAyLjAxODczMTQ3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MTcxNjAwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgaW5ldF9kaWFnLmNgIFBhdGNoKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBuZXQvaXB2NC9pbmV0X2RpYWcuY2AuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBhbHRlcmVkIGFuZCwgY3J1Y2lhbGx5LCAqd2h5Ki4gTXkgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIHBpbnBvaW50IHRoZSBjYWxscyB0byBgaW5ldF9kaWFnX2JjX2F1ZGl0YC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpa2VseSBsaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGNvbnRleHQuIEknbGwgcHJvYmFibHkgcmVhY2ggZm9yIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIncyBmYXN0ZXN0IGFuZCBtb3N0IGVmZmljaWVudCBmb3IgdHJhdmVyc2luZyB0aGF0IGZpbGUgYW5kIGlkZW50aWZ5aW5nIHRob3NlIGNhbGwgc2l0ZXMuIFRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hpY2ggY29uZmlndXJhdGlvbnMgYW5kIHVwc3RyZWFtIGNvZGUgYXJlIGltcGFjdGVkLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo0MjowNy40MzU4OTQwOTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4ODU1MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9kaWFnX2JjX2F1ZGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2luZXRfZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2luZXRfZGlhZy5jPTcyMD1zdGF0aWMgYm9vbCB2YWxpZF9jZ3JvdXBjb25kKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wLCBpbnQgbGVuLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzMzLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjczNDpzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MzUtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTg1NT1zdGF0aWMgaW50IF9faW5ldF9kaWFnX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgaGRybGVuKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODcxLVxcdH1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4NzI6XFx0ZXJyID0gaW5ldF9kaWFnX2JjX2F1ZGl0KGNiX2RhdGEsIHNrYik7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODczLVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDI6MDcuNDg1NzgzODAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5MjQ3MjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGluZXRfZGlhZyBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYXJvdW5kIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGFuZCBgX19pbmV0X2RpYWdfZHVtcF9zdGFydGAgaW4gYG5ldC9pcHY0L2luZXRfZGlhZy5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiB0aGVzZSBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0sIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvTWFrZWZpbGVgIGFuZCBgbmV0L2lwdjQvS2NvbmZpZ2AuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgdGhlIHByZXByb2Nlc3NvciBkZWZpbmVzIEkgbmVlZCB0byBwcm9wZXJseSBpbnRlcnByZXQgdGhlaXIgcm9sZS4gSSdtIGd1ZXNzaW5nIHRoaXMgd2lsbCBxdWlja2x5IHRlbGwgbWUgd2hhdCBpcyBnb2luZyBvbiwgYW5kIGZyb20gdGhlcmUgSSBjYW4gYmV0dGVyIGFzc2VzcyB0aGVpciBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjA5LjQ3ODI1ODAxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pbmV0X2RpYWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MzA6XFx0ICogYnl0ZWNvZGUgc2VxdWVuY2UgdW5kZXIgdGhlIHNvY2tldCBoYXNoIGJ1Y2tldCBsb2Nrcy5cXG4gNzMxOlxcdCAqL1xcbiA3MzI6XFx0I2RlZmluZSBJTkVUX0RJQUdfQkNfTUFYX09QUyA2NFxcbiA3MzM6XFx0XFxuIDczNDpcXHRzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcXG4gNzM1OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDczNjpcXHR7XFxuIDczNzpcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyID0gY2JfZGF0YS1cXHUwMDNlaW5ldF9kaWFnX25sYV9iYztcXG4gNzM4OlxcdFxcdGNvbnN0IHZvaWQgKmJ5dGVjb2RlLCAqYmM7XFxuIDczOTpcXHRcXHRpbnQgYnl0ZWNvZGVfbGVuLCBsZW47XFxuIDc0MDpcXHRcXHRib29sIG5ldF9hZG1pbjtcXG4gNzQxOlxcdFxcdGludCBvcHMgPSAwO1xcbiA3NDI6XFx0XFxuIDc0MzpcXHRcXHRpZiAoIWF0dHIpXFxuIDc0NDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzQ1OlxcdFxcbiA3NDY6XFx0XFx0aWYgKG5sYV9sZW4oYXR0cikgXFx1MDAzYyBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCkpXFxuIDc0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzQ4OlxcdFxcbiA3NDk6XFx0XFx0bmV0X2FkbWluID0gbmV0bGlua19uZXRfY2FwYWJsZShza2IsIENBUF9ORVRfQURNSU4pO1xcbiA3NTA6XFx0XFx0Ynl0ZWNvZGUgPSBiYyA9IG5sYV9kYXRhKGF0dHIpO1xcbiA3NTE6XFx0XFx0bGVuID0gYnl0ZWNvZGVfbGVuID0gbmxhX2xlbihhdHRyKTtcXG4gNzUyOlxcdFxcbiA3NTM6XFx0XFx0d2hpbGUgKGxlbiBcXHUwMDNlIDApIHtcXG4gNzU0OlxcdFxcdFxcdGludCBtaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBpbmV0X2RpYWdfYmNfb3ApO1xcbiA3NTU6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AgPSBiYztcXG4gNzU2OlxcdFxcbiA3NTc6XFx0XFx0XFx0aWYgKCsrb3BzIFxcdTAwM2UgSU5FVF9ESUFHX0JDX01BWF9PUFMpXFxuIDc1ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzU5OlxcdFxcbiA3NjA6XFx0XFx0XFx0c3dpdGNoIChvcC1cXHUwMDNlY29kZSkge1xcbiA3NjE6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfU19DT05EOlxcbiA3NjI6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfRF9DT05EOlxcbiA3NjM6XFx0XFx0XFx0XFx0aWYgKCF2YWxpZF9ob3N0Y29uZChiYywgbGVuLCBcXHUwMDI2bWluX2xlbikpXFxuIDc2NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzY1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3NjY6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfREVWX0NPTkQ6XFxuIDc2NzpcXHRcXHRcXHRcXHRpZiAoIXZhbGlkX2RldmNvbmQoYmMsIGxlbiwgXFx1MDAyNm1pbl9sZW4pKVxcbiA3Njg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc2OTpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzcwOlxcdFxcdFxcdGNhc2UgSU5FVF9ESUFHX0JDX1NfRVE6XFxuIDc3MTpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19TX0dFOlxcbiA3NzI6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfU19MRTpcXG4gNzczOlxcdFxcdFxcdGNhc2UgSU5FVF9ESUFHX0JDX0RfRVE6XFxuIDc3NDpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19EX0dFOlxcbiA3NzU6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfRF9MRTpcXG4gNzc2OlxcdFxcdFxcdFxcdGlmICghdmFsaWRfcG9ydF9jb21wYXJpc29uKGJjLCBsZW4sIFxcdTAwMjZtaW5fbGVuKSlcXG4gNzc3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3Nzg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDc3OTpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19NQVJLX0NPTkQ6XFxuIDc4MDpcXHRcXHRcXHRcXHRpZiAoIW5ldF9hZG1pbilcXG4gNzgxOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDc4MjpcXHRcXHRcXHRcXHRpZiAoIXZhbGlkX21hcmtjb25kKGJjLCBsZW4sIFxcdTAwMjZtaW5fbGVuKSlcXG4gNzgzOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3ODQ6XFx0XFx0XFx0XFx0Y2JfZGF0YS1cXHUwMDNlbWFya19uZWVkZWQgPSB0cnVlO1xcbiA3ODU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDc4NjpcXHQjaWZkZWYgQ09ORklHX1NPQ0tfQ0dST1VQX0RBVEFcXG4gNzg3OlxcdFxcdFxcdGNhc2UgSU5FVF9ESUFHX0JDX0NHUk9VUF9DT05EOlxcbiA3ODg6XFx0XFx0XFx0XFx0aWYgKCF2YWxpZF9jZ3JvdXBjb25kKGJjLCBsZW4sIFxcdTAwMjZtaW5fbGVuKSlcXG4gNzg5OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3OTA6XFx0XFx0XFx0XFx0Y2JfZGF0YS1cXHUwMDNlY2dyb3VwX25lZWRlZCA9IHRydWU7XFxuIDc5MTpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzkyOlxcdCNlbmRpZlxcbiA3OTM6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfQVVUTzpcXG4gNzk0OlxcdFxcdFxcdFxcdGNiX2RhdGEtXFx1MDAzZXVzZXJsb2Nrc19uZWVkZWQgPSB0cnVlO1xcbiA3OTU6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuIDc5NjpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19KTVA6XFxuIDc5NzpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19OT1A6XFxuIDc5ODpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzk5OlxcdFxcdFxcdGRlZmF1bHQ6XFxuIDgwMDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODAxOlxcdFxcdFxcdH1cXG4gODAyOlxcdFxcbiA4MDM6XFx0XFx0XFx0aWYgKG9wLVxcdTAwM2Vjb2RlICE9IElORVRfRElBR19CQ19OT1ApIHtcXG4gODA0OlxcdFxcdFxcdFxcdGlmIChvcC1cXHUwMDNlbm8gXFx1MDAzYyBtaW5fbGVuIHx8IG9wLVxcdTAwM2VubyBcXHUwMDNlIGxlbiArIDQgfHwgb3AtXFx1MDAzZW5vIFxcdTAwMjYgMylcXG4gODA1OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4MDY6XFx0XFx0XFx0XFx0aWYgKG9wLVxcdTAwM2VubyBcXHUwMDNjIGxlbiBcXHUwMDI2XFx1MDAyNlxcbiA4MDc6XFx0XFx0XFx0XFx0ICAgICF2YWxpZF9jYyhieXRlY29kZSwgYnl0ZWNvZGVfbGVuLCBsZW4gLSBvcC1cXHUwMDNlbm8pKVxcbiA4MDg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgwOTpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjA5LjQ3ODM2NDYzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMyNDc5ODkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgS2VybmVsIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBgaW5ldF9kaWFnLmNgIGdldHMgY29tcGlsZWQuIFRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgdGltZSB0byByZXZpc2l0IHRoZSBidWlsZCBzeXN0ZW0sIHNvIEknbSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgbmV0L2lwdjQvTWFrZWZpbGVgLiBUaGF0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGhvdyB0aGUgSVB2NCBuZXR3b3JraW5nIHN0YWNrIG1vZHVsZXMgYXJlIGNvbnN0cnVjdGVkLiBIb3BlZnVsbHksIHRoZSBpbmNsdXNpb24gb2YgYGluZXRfZGlhZy5jYCB3aWxsIGJlIGhhbmRsZWQgdGhlcmUsIG9yIGF0IGxlYXN0IHRoYXQgTWFrZWZpbGUgd2lsbCBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQgZmlsZXMgYW5kIHJ1bGVzLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IHlvdSBuZXZlciBrbm93IHdpdGggdGhlc2UgbGFyZ2UsIGNvbXBsZXggcHJvamVjdHMuIFRpbWUgdG8gZGl2ZSBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NTI0MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDI6MTEuODAzMTY3MTQ1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NTk0MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfZGlhZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT00Mj1vYmotJChDT05GSUdfTkVURklMVEVSKVxcdCs9IG5ldGZpbHRlci5vIG5ldGZpbHRlci9cXG5uZXQvaXB2NC9NYWtlZmlsZTo0MzpvYmotJChDT05GSUdfSU5FVF9ESUFHKSArPSBpbmV0X2RpYWcub1xcbm5ldC9pcHY0L01ha2VmaWxlLTQ0LW9iai0kKENPTkZJR19JTkVUX1RDUF9ESUFHKSArPSB0Y3BfZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjExLjg5ODc2NjgzOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNzQ5MjYyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6XG5cbioqRXhhbWluaW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgSU5FVF9ESUFHKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBJTkVUX0RJQUdgLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBUaGV5IGRlZmluZSB0aGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0IHRoYXQgdXNlcnMgc2VlIGluIHRvb2xzIGxpa2UgYG1lbnVjb25maWdgIG9yIGBkZWZjb25maWdgLiBHaXZlbiB0aGF0IGBJTkVUX0RJQUdgIHNlZW1zIG5ldHdvcmstcmVsYXRlZCwgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBgbmV0L2lwdjQvS2NvbmZpZ2AuIEl0J3MgYWxtb3N0IGd1YXJhbnRlZWQgdG8gYmUgaW4gdGhlcmUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU0MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjE2LjE3MzY5NTc2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NTQ3MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVRfRElBR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NDE5PWNvbmZpZyBJTkVUX1RVTk5FTFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MjItXFxubmV0L2lwdjQvS2NvbmZpZzo0MjM6Y29uZmlnIElORVRfRElBR1xcbm5ldC9pcHY0L0tjb25maWctNDI0LVxcdHRyaXN0YXRlIFxcXCJJTkVUOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTQ0Nz1jb25maWcgSU5FVF9SQVdfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00NTQtXFxubmV0L2lwdjQvS2NvbmZpZzo0NTU6Y29uZmlnIElORVRfRElBR19ERVNUUk9ZXFxubmV0L2lwdjQvS2NvbmZpZy00NTYtXFx0Ym9vbCBcXFwiSU5FVDogYWxsb3cgcHJpdmlsZWdlZCBwcm9jZXNzIHRvIGFkbWluaXN0cmF0aXZlbHkgY2xvc2Ugc29ja2V0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDI6MTYuMjE5MjU2NzIyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODg1NTAyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gSVB2NCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBJUHY0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBuZXQvaXB2NC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQyMy4gVGhhdCdzIGEgcmVhc29uYWJsZSBwbGFjZSB0byBiZWdpbjsgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIHN0YW5kYXJkIGZvciBkZWZpbmluZyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdGhlIGxpbmUgbnVtYmVyIHNlZW1zIGxpa2VseSB0byBiZSBhIHJlbGV2YW50IHNlY3Rpb24gcmVsYXRlZCB0byB0aGUgZmVhdHVyZSBJJ20gZXhhbWluaW5nLiBLbm93aW5nIHRoZSBnZW5lcmFsIGxheW91dCBvZiB0aGUgZmlsZSwgdGhpcyBzaG91bGQgZ2V0IG1lIHRvIHRoZSByaWdodCByZWdpb24gdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgYW5kIGRlZmF1bHQgc2V0dGluZ3MuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgZm9ybWF0OiBgY29uZmlnYCwgYGJvb2wvdHJpc3RhdGVgLCBgZGVwZW5kcyBvbmAsIGBoZWxwYCwgYW5kIG1heWJlIHNvbWUgYGRlZmF1bHRgIHN0YXRlbWVudHMuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBvcHRpb24gaW50ZXJhY3RzIHdpdGggb3RoZXJzLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjE4LjYwNzgwOTM4NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyMDpcXHRcXHR0cmlzdGF0ZVxcbiA0MjE6XFx0XFx0ZGVmYXVsdCBuXFxuIDQyMjpcXHRcXG4gNDIzOlxcdGNvbmZpZyBJTkVUX0RJQUdcXG4gNDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJJTkVUOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuIDQyNTpcXHRcXHRkZWZhdWx0IHlcXG4gNDI2OlxcdFxcdGhlbHBcXG4gNDI3OlxcdFxcdCAgU3VwcG9ydCBmb3IgSU5FVCAoVENQLCBVRFAsIGV0Yykgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnlcXG4gNDI4OlxcdFxcdCAgbmF0aXZlIExpbnV4IHRvb2xzIHN1Y2ggYXMgc3MuIHNzIGlzIGluY2x1ZGVkIGluIGlwcm91dGUyLCBjdXJyZW50bHlcXG4gNDI5OlxcdFxcdCAgZG93bmxvYWRhYmxlIGF0OlxcbiA0MzA6XFx0XFxuIDQzMTpcXHRcXHQgICAgaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2NvbGxhYm9yYXRlL3dvcmtncm91cHMvbmV0d29ya2luZy9pcHJvdXRlMlxcbiA0MzI6XFx0XFxuIDQzMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDQzNDpcXHRcXG4gNDM1OlxcdGNvbmZpZyBJTkVUX1RDUF9ESUFHXFxuIDQzNjpcXHRcXHRkZXBlbmRzIG9uIElORVRfRElBR1xcbiA0Mzc6XFx0XFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xcbiA0Mzg6XFx0XFxuIDQzOTpcXHRjb25maWcgSU5FVF9VRFBfRElBR1xcbiA0NDA6XFx0XFx0dHJpc3RhdGUgXFxcIlVEUDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiA0NDE6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gNDQyOlxcdFxcdGRlZmF1bHQgblxcbiA0NDM6XFx0XFx0aGVscFxcbiA0NDQ6XFx0XFx0ICBTdXBwb3J0IGZvciBVRFAgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjE4LjYwNzg5MDYzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjI1MjQyMzY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYGluZXRfZGlhZ19iY19hdWRpdGAgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKiB3aXRoaW4gdGhlIGBpbmV0X2RpYWcuY2AgbW9kdWxlLiBNeSBnb2FsIGlzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgYW5kIGNvbnRleHQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZm9sbG93IHRoZSBjb2RlIHRvIHNlZSB3aGVyZSB0aGlzIGF1ZGl0IGZ1bmN0aW9uIGlzIGludm9rZWQgYW5kIHVuZGVyIHdoYXQgc3BlY2lmaWMgY29uZGl0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBwdXJwb3NlIGFuZCB3b3JrZmxvdyBvZiBgaW5ldF9kaWFnX2JjX2F1ZGl0YC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGxvZ2ljIHRpZWQgdG8gdGhpcyBhdWRpdCBmdW5jdGlvbiBhbmQgaG9wZWZ1bGx5LCB0aGlzIHdpbGwgaGlnaGxpZ2h0IGFueSBhcmVhcyBvZiBwb3RlbnRpYWwgaW50ZXJlc3Qgb3IgY29uY2Vybi4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTIxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo0MjozNC44NjAzMTc3NzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaW5ldF9kaWFnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiA4NTE6XFx0e1xcbiA4NTI6XFx0XFx0cmV0dXJuIF9faW5ldF9kaWFnX2R1bXAoc2tiLCBjYiwgbmxtc2dfZGF0YShjYi1cXHUwMDNlbmxoKSk7XFxuIDg1MzpcXHR9XFxuIDg1NDpcXHRcXG4gODU1OlxcdHN0YXRpYyBpbnQgX19pbmV0X2RpYWdfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCBoZHJsZW4pXFxuIDg1NjpcXHR7XFxuIDg1NzpcXHRcXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVxcdTAwM2VubGg7XFxuIDg1ODpcXHRcXHRzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YTtcXG4gODU5OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBjYi1cXHUwMDNlc2tiO1xcbiA4NjA6XFx0XFx0c3RydWN0IG5sYXR0ciAqbmxhO1xcbiA4NjE6XFx0XFx0aW50IGVycjtcXG4gODYyOlxcdFxcbiA4NjM6XFx0XFx0Y2JfZGF0YSA9IGt6YWxsb2Nfb2JqKCpjYl9kYXRhKTtcXG4gODY0OlxcdFxcdGlmICghY2JfZGF0YSlcXG4gODY1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA4NjY6XFx0XFxuIDg2NzpcXHRcXHRlcnIgPSBpbmV0X2RpYWdfcGFyc2VfYXR0cnMobmxoLCBoZHJsZW4sIGNiX2RhdGEtXFx1MDAzZXJlcV9ubGFzKTtcXG4gODY4OlxcdFxcdGlmIChlcnIpIHtcXG4gODY5OlxcdFxcdFxcdGtmcmVlKGNiX2RhdGEpO1xcbiA4NzA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gODcxOlxcdFxcdH1cXG4gODcyOlxcdFxcdGVyciA9IGluZXRfZGlhZ19iY19hdWRpdChjYl9kYXRhLCBza2IpO1xcbiA4NzM6XFx0XFx0aWYgKGVycikge1xcbiA4NzQ6XFx0XFx0XFx0a2ZyZWUoY2JfZGF0YSk7XFxuIDg3NTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA4NzY6XFx0XFx0fVxcbiA4Nzc6XFx0XFxuIDg3ODpcXHRcXHRubGEgPSBjYl9kYXRhLVxcdTAwM2VpbmV0X2RpYWdfbmxhX2JwZl9zdGdzO1xcbiA4Nzk6XFx0XFx0aWYgKG5sYSkge1xcbiA4ODA6XFx0XFx0XFx0c3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKmJwZl9zdGdfZGlhZztcXG4gODgxOlxcdFxcbiA4ODI6XFx0XFx0XFx0YnBmX3N0Z19kaWFnID0gYnBmX3NrX3N0b3JhZ2VfZGlhZ19hbGxvYyhubGEpO1xcbiA4ODM6XFx0XFx0XFx0aWYgKElTX0VSUihicGZfc3RnX2RpYWcpKSB7XFxuIDg4NDpcXHRcXHRcXHRcXHRrZnJlZShjYl9kYXRhKTtcXG4gODg1OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJwZl9zdGdfZGlhZyk7XFxuIDg4NjpcXHRcXHRcXHR9XFxuIDg4NzpcXHRcXHRcXHRjYl9kYXRhLVxcdTAwM2VicGZfc3RnX2RpYWcgPSBicGZfc3RnX2RpYWc7XFxuIDg4ODpcXHRcXHR9XFxuIDg4OTpcXHRcXG4gODkwOlxcdFxcdGNiLVxcdTAwM2VkYXRhID0gY2JfZGF0YTtcXG4gODkxOlxcdFxcdHJldHVybiAwO1xcbiA4OTI6XFx0fVxcbiA4OTM6XFx0XFxuIDg5NDpcXHRzdGF0aWMgaW50IGluZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gODk1OlxcdHtcXG4gODk2OlxcdFxcdHJldHVybiBfX2luZXRfZGlhZ19kdW1wX3N0YXJ0KGNiLCBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19yZXFfdjIpKTtcXG4gODk3OlxcdH1cXG4gODk4OlxcdFxcbiA4OTk6XFx0c3RhdGljIGludCBpbmV0X2RpYWdfZHVtcF9zdGFydF9jb21wYXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo0MjozNC44NjA0MDcwOTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYzNzA0MDc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQ29kZSBBdWRpdDogYGluZXRfZGlhZy5jYCAtIFBvdGVudGlhbCBBcmVhcyBmb3IgUmV2aWV3KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGZ1bmN0aW9uLiBUaGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIGRvIGlzIGZpZ3VyZSBvdXQgaXRzIHNjb3BlLiBJcyBpdCB1c2VkIG9ubHkgaW4gYSB2ZXJ5IHNwZWNpZmljIHBsYWNlLCBvciBpcyBpdCBwb3RlbnRpYWxseSBjYWxsZWQgZnJvbSBhbGwgb3ZlciB0aGUga2VybmVsPyBJZGVudGlmeWluZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdnVsbmVyYWJsZSBpdCBpcy4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgb2YgYGluZXRfZGlhZy5jYC4gQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlIHRoYXQgcmVsYXRlIHRvIGJ5dGVjb2RlIHByb2Nlc3Npbmcgb3IgZHVtcGluZyBuZXR3b3JrIGluZm9ybWF0aW9uPyBJdCdzIHBvc3NpYmxlIEknbGwgZmluZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgSSBuZWVkIHRvIGV4YW1pbmUgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gYnJvYWRlbiBteSBzZWFyY2ggYmV5b25kIGp1c3QgYGluZXRfZGlhZ19iY19hdWRpdGAgaXRzZWxmLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjM3LjQ5NzQ1MTM2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU3NzE5NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfZGlhZ19iY19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaW5ldF9kaWFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaW5ldF9kaWFnLmM9NDM5PXN0YXRpYyBpbnQgYml0c3RyaW5nX21hdGNoKGNvbnN0IF9fYmUzMiAqYTEsIGNvbnN0IF9fYmUzMiAqYTIsIGludCBiaXRzKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDY0LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjQ2NTpzdGF0aWMgaW50IGluZXRfZGlhZ19iY19ydW4oY29uc3Qgc3RydWN0IG5sYXR0ciAqX2JjLFxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTQ2Ni1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy00NzItXFx0XFx0aW50IHllcyA9IDE7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NDczOlxcdFxcdGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wID0gYmM7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDc0LVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM9NTg0PXN0YXRpYyB2b2lkIGVudHJ5X2ZpbGxfYWRkcnMoc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnksXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy01OTgtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NTk5OmludCBpbmV0X2RpYWdfYmNfc2soY29uc3Qgc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsIHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy02MDAte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjMwLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjYzMTpcXHRyZXR1cm4gaW5ldF9kaWFnX2JjX3J1bihiYywgXFx1MDAyNmVudHJ5KTtcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy02MzItfVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjYzMzpFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2RpYWdfYmNfc2spO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYzNC1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz02MzU9c3RhdGljIGludCB2YWxpZF9jYyhjb25zdCB2b2lkICpiYywgaW50IGxlbiwgaW50IGNjKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjM3LVxcdHdoaWxlIChsZW4gXFx1MDAzZT0gMCkge1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjYzODpcXHRcXHRjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCA9IGJjO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYzOS1cXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTY1Mi0vKiBkYXRhIGlzIHUzMiBpZmluZGV4ICovXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NjUzOnN0YXRpYyBib29sIHZhbGlkX2RldmNvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjU0LVxcdFxcdFxcdCAgaW50ICptaW5fbGVuKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjYzLS8qIFZhbGlkYXRlIGFuIGluZXRfZGlhZ19ob3N0Y29uZC4gKi9cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo2NjQ6c3RhdGljIGJvb2wgdmFsaWRfaG9zdGNvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjY1LVxcdFxcdFxcdCAgIGludCAqbWluX2xlbilcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTcwMS0vKiBWYWxpZGF0ZSBhIHBvcnQgY29tcGFyaXNvbiBvcGVyYXRvci4gKi9cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo3MDI6c3RhdGljIGJvb2wgdmFsaWRfcG9ydF9jb21wYXJpc29uKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wLFxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTcwMy1cXHRcXHRcXHRcXHQgIGludCBsZW4sIGludCAqbWluX2xlbilcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MDQte1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjcwNTpcXHQvKiBQb3J0IGNvbXBhcmlzb25zIHB1dCB0aGUgcG9ydCBpbiBhIGZvbGxvdy1vbiBpbmV0X2RpYWdfYmNfb3AuICovXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NzA2OlxcdCptaW5fbGVuICs9IHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wKTtcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MDctXFx0aWYgKGxlbiBcXHUwMDNjICptaW5fbGVuKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzExLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjcxMjpzdGF0aWMgYm9vbCB2YWxpZF9tYXJrY29uZChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCwgaW50IGxlbixcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MTMtXFx0XFx0XFx0ICAgaW50ICptaW5fbGVuKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzE5LSNpZmRlZiBDT05GSUdfU09DS19DR1JPVVBfREFUQVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjcyMDpzdGF0aWMgYm9vbCB2YWxpZF9jZ3JvdXBjb25kKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wLCBpbnQgbGVuLFxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTcyMS1cXHRcXHRcXHQgICAgIGludCAqbWluX2xlbilcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTczMy1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo3MzQ6c3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzM1LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03NDUtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NzQ2OlxcdGlmIChubGFfbGVuKGF0dHIpIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBpbmV0X2RpYWdfYmNfb3ApKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTc0Ny1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTc1My1cXHR3aGlsZSAobGVuIFxcdTAwM2UgMCkge1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjc1NDpcXHRcXHRpbnQgbWluX2xlbiA9IHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wKTtcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo3NTU6XFx0XFx0Y29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AgPSBiYztcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03NTYtXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz04NTU9c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IGhkcmxlbilcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg3MS1cXHR9XFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6ODcyOlxcdGVyciA9IGluZXRfZGlhZ19iY19hdWRpdChjYl9kYXRhLCBza2IpO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg3My1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjM4LjM1NTE3NjE3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTk0NDE1MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgQ29kZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGNvbmNlcm5pbmcgYGluZXRfZGlhZy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQgYW5kIHdoZXRoZXIgaXQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJdCBzZWVtcyB3ZSdyZSBkZWFsaW5nIHdpdGggY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYE5FVExJTktfSU5FVF9ESUFHYCBzb2NrZXQgZGlhZ25vc3RpYyBpbnRlcmZhY2UuIFRoaXMgaXMgdXNlZCBmb3IgZHVtcGluZyBzb2NrZXRzIHdpdGggYnl0ZWNvZGUgZmlsdGVyaW5nIOKAkyB0aGUgYElORVRfRElBR19SRVFfQllURUNPREVgIGFzcGVjdC5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgY29kZSBwYXRoIGlzIGFjY2Vzc2libGUgaW4gYSB0eXBpY2FsIFFFTVUgZW52aXJvbm1lbnQuIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBgTkVUTElOS19JTkVUX0RJQUdgIGlzIGluZGVlZCBhIHN0YW5kYXJkLCB1c2VyLXNwYWNlIHJlYWNoYWJsZSBzb2NrZXQgQVBJIGluIExpbnV4LCBzbyB0aGF0J3MgYSBwb3NpdGl2ZS4gR2l2ZW4gU3l6a2FsbGVyJ3MgaGVhdnkgZnV6emluZyBvZiBuZXRsaW5rIGFuZCBpbmV0X2RpYWcsIHRoaXMgYXJlYSBpcyBjZXJ0YWlubHkgaW4gcGxheS5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludHJvZHVjZXMgYW4gaW5zdHJ1Y3Rpb24gY291bnRlciBsaW1pdCwgYElORVRfRElBR19CQ19NQVhfT1BTIDY0YCwgdG8gdGhlIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2lwdjQvaW5ldF9kaWFnLmNgLiBUaGlzIGlzIGludHJpZ3Vpbmcg4oCTIGl0J3MgYSBib3VuZGFyeSBjb25kaXRpb24gb24gaG93IGJ5dGVjb2RlIGZpbHRlcnMgYXJlIHByb2Nlc3NlZCBkdXJpbmcgc29ja2V0IGRpYWdub3N0aWNzLCB3aGljaCBjYW4gaW1wYWN0IGJvdGggZHVtcCByZXF1ZXN0cyBhbmQgZXJyb3IgaGFuZGxpbmcuXG5cblRoZSBjcml0ZXJpYSBsb29rIHByb21pc2luZzogaXQncyBcIldvcnRoRnV6emluZ1wiIGJlY2F1c2UgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGJ5dGVjb2RlIGZpbHRlciB2YWxpZGF0aW9uLiBUaGUgRW5hYmxlQ29uZmlncyBjaGVjayBpcyBnb29kLiBJTkVUX0RJQUcgYmVpbmcgYSB0cmlzdGF0ZSBidXQgZGVmYXVsdHMgdG8gJ3knIG1lYW5zIGl0IHNob3VsZCBiZSBnZW5lcmFsbHkgYWNjZXNzaWJsZS5cblxuVGhlIGxpc3RlZCBcIkZvY3VzU3ltYm9sc1wiIGFyZSByaWdodCBvbiB0YXJnZXQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGBpbmV0X2RpYWdfYmNfYXVkaXRgLCBhbmQgdGhlIHZhcmlvdXMgYGluZXRfZGlhZ19kdW1wXypgLCBgaW5ldF9kaWFnX2JjX3J1bmAgYW5kIGBpbmV0X2RpYWdfYmNfc2tgIGZ1bmN0aW9ucy4gTm93LCBhIHF1aWNrIGNoZWNrIG9uIHRoZSBleGFjdCBzeW1ib2wgbmFtZXMgaW4gdGhlIGZpbGUgaXMgaW1wb3J0YW50IHRvIHZlcmlmeSB0aGF0IHRoZSBgaW5ldF9kaWFnX2JjX2F1ZGl0YCBpcyBgc3RhdGljYCBhbmQgdGhhdCBpdCBpcyBpbiB0aGUgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIG90aGVyIGVudHJ5IHBvaW50cyBhcyB3ZWxsIGxpa2UgYF9faW5ldF9kaWFnX2R1bXBfc3RhcnRgLCBgaW5ldF9kaWFnX2R1bXBfc3RhcnRgLCBgaW5ldF9kaWFnX2R1bXBfc3RhcnRfY29tcGF0YCwgYGluZXRfZGlhZ19iY19za2AsIGBpbmV0X2RpYWdfZHVtcF9vbmVfaWNza2AsIGBpbmV0X2RpYWdfZHVtcF9pY3NrYC4gSSB3aWxsIGNoZWNrIGFsbCBlbnRyeXBvaW50cyBpbiBgaW5ldF9kaWFnLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyODQsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDI6NDMuOTQ5NTk0NzcyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTE0NjE4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZCkgW2EtekEtWjAtOV9dK1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pbmV0X2RpYWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pbmV0X2RpYWcuYz00OD1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyICppbmV0X2RpYWdfbG9ja19oYW5kbGVyKGludCBwcm90bylcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTY2LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjY3OnN0YXRpYyB2b2lkIGluZXRfZGlhZ191bmxvY2tfaGFuZGxlcihjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgKmhhbmRsZXIpXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjgte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzEtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NzI6dm9pZCBpbmV0X2RpYWdfbXNnX2NvbW1vbl9maWxsKHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzMte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM9OTU9RVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX21zZ19jb21tb25fZmlsbCk7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTYtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTc6aW50IGluZXRfZGlhZ19tc2dfYXR0cnNfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqciwgaW50IGV4dCxcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTE3OT1FWFBPUlRfU1lNQk9MX0dQTChpbmV0X2RpYWdfbXNnX2F0dHJzX2ZpbGwpO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTE4MC1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxODE6c3RhdGljIGludCBpbmV0X2RpYWdfcGFyc2VfYXR0cnMoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsIGludCBoZHJsZW4sXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTgyLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqcmVxX25sYXMpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xOTgtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTk5OnN0YXRpYyBpbnQgaW5ldF9kaWFnX2dldF9wcm90b2NvbChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxLFxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIwMC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpkYXRhKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMjA4LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjIwOTppbnQgaW5ldF9za19kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2ssXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMjEwLVxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTQwMD1FWFBPUlRfU1lNQk9MX0dQTChpbmV0X3NrX2RpYWdfZmlsbCk7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDAxLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjQwMjpzdGF0aWMgaW50IGluZXRfZGlhZ19jbWRfZXhhY3QoaW50IGNtZCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy00MDMtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDM4LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjQzOTpzdGF0aWMgaW50IGJpdHN0cmluZ19tYXRjaChjb25zdCBfX2JlMzIgKmExLCBjb25zdCBfX2JlMzIgKmEyLCBpbnQgYml0cylcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy00NDAte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNDY0LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjQ2NTpzdGF0aWMgaW50IGluZXRfZGlhZ19iY19ydW4oY29uc3Qgc3RydWN0IG5sYXR0ciAqX2JjLFxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTQ2Ni1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy01ODMtICovXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6NTg0OnN0YXRpYyB2b2lkIGVudHJ5X2ZpbGxfYWRkcnMoc3RydWN0IGluZXRfZGlhZ19lbnRyeSAqZW50cnksXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNTg1LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNTk4LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjU5OTppbnQgaW5ldF9kaWFnX2JjX3NrKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNjAwLXtcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTYzMz1FWFBPUlRfU1lNQk9MX0dQTChpbmV0X2RpYWdfYmNfc2spO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYzNC1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo2MzU6c3RhdGljIGludCB2YWxpZF9jYyhjb25zdCB2b2lkICpiYywgaW50IGxlbiwgaW50IGNjKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTYzNi17XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz03MjA9c3RhdGljIGJvb2wgdmFsaWRfY2dyb3VwY29uZChjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCwgaW50IGxlbixcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTczMy1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo3MzQ6c3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzM1LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04MTgtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6ODE5OnN0YXRpYyBpbnQgX19pbmV0X2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODIwLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcilcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg0OS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4NTA6c3RhdGljIGludCBpbmV0X2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODUxLXtcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg1NC1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4NTU6c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IGhkcmxlbilcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04NTYte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODkzLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjg5NDpzdGF0aWMgaW50IGluZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy04OTUte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODk4LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjg5OTpzdGF0aWMgaW50IGluZXRfZGlhZ19kdW1wX3N0YXJ0X2NvbXBhdChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTAwLXtcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTkwMy1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo5MDQ6c3RhdGljIGludCBpbmV0X2RpYWdfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05MDUte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTEzLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjkxNDpzdGF0aWMgaW50IGluZXRfZGlhZ190eXBlMnByb3RvKGludCB0eXBlKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTkxNS17XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05MjMtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTI0OnN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfY29tcGF0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTI1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05MzktXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTQwOnN0YXRpYyBpbnQgaW5ldF9kaWFnX2dldF9leGFjdF9jb21wYXQoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05NDEtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05NTYtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTU3OnN0YXRpYyBpbnQgaW5ldF9kaWFnX3Jjdl9tc2dfY29tcGF0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTk1OC17XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05NzctXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTc4OnN0YXRpYyBpbnQgaW5ldF9kaWFnX2hhbmRsZXJfY21kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqaClcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy05Nzkte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM9MTAwMD1zdGF0aWNcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxMDAxOmludCBpbmV0X2RpYWdfaGFuZGxlcl9nZXRfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTAwMi17XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz0xMDU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja19kaWFnX2hhbmRsZXIgaW5ldDZfZGlhZ19oYW5kbGVyID0ge1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTA2Mi1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxMDYzOmludCBpbmV0X2RpYWdfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyICpoKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTEwNjQte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM9MTA3Mz1FWFBPUlRfU1lNQk9MX0dQTChpbmV0X2RpYWdfcmVnaXN0ZXIpO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTEwNzQtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTA3NTp2b2lkIGluZXRfZGlhZ191bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciAqaClcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0xMDc2LXtcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTEwODc9c3RhdGljIGNvbnN0IHN0cnVjdCBzb2NrX2RpYWdfaW5ldF9jb21wYXQgaW5ldF9kaWFnX2NvbXBhdCA9IHtcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTEwOTEtXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MTA5MjpzdGF0aWMgaW50IF9faW5pdCBpbmV0X2RpYWdfaW5pdCh2b2lkKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTEwOTMte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMTEyMC1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoxMTIxOnN0YXRpYyB2b2lkIF9fZXhpdCBpbmV0X2RpYWdfZXhpdCh2b2lkKVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTExMjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo0Mjo0NC4wMDg3NDY1MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIyMzY2MDUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTGludXggS2VybmVsJ3MgaW5ldF9kaWFnIEZ1enppbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSBgaW5ldF9kaWFnYCBmdW5jdGlvbmFsaXR5IHRoYXQgYXJlIHJlbGV2YW50IGZvciBmdXp6aW5nLiBJJ3ZlIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZyBcIkZvY3VzU3ltYm9sc1wiOiBgaW5ldF9kaWFnX2JjX2F1ZGl0YCwgYF9faW5ldF9kaWFnX2R1bXBfc3RhcnRgLCBgaW5ldF9kaWFnX2R1bXBfc3RhcnRgLCBgaW5ldF9kaWFnX2JjX3NrYCwgYW5kIGBpbmV0X2RpYWdfaGFuZGxlcl9jbWRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGFuZCBoYW5kbGVycyB0aGF0IHdhcnJhbnQgY2xvc2VyIGV4YW1pbmF0aW9uLlxuXG5OZXh0LCBJIGhhdmUgdG8gZGV0ZXJtaW5lIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoZSBvYnZpb3VzIGNhbmRpZGF0ZSBpcyBgSU5FVF9ESUFHYCwgYnV0IEkgbmVlZCB0byBiZSBjZXJ0YWluLiBXaGlsZSBgTkVUTElOS19ESUFHYCB3b3VsZCBiZSBhIHJlbGF0ZWQgb3B0aW9uLCBteSByZXNlYXJjaCBwb2ludHMgdG93YXJkcyBgSU5FVF9ESUFHYCBiZWluZyB0aGUgY29ycmVjdCBzZXR0aW5nLCBhbmQgdGhlIGZhY3QgdGhhdCBgSU5FVF9ESUFHYCBkZXBlbmRzIG9ubHkgb24gYElORVRgIGNvbmZpcm1zIHRoaXM7IGdpdmVuIHRoYXQgYElORVRgIGlzIHRoZSBkZWZhdWx0IGZvciBJUHY0LCBJIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgZXh0cmEgZGVwZW5kZW5jaWVzLiBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aGF0IGBJTkVUX0RJQUdgIGhhcyBubyBleHBsaWNpdCBkZXBlbmRlbmNpZXMgYmV5b25kIGBJTkVUYCBpbiBJUHY0LCBhbmQgc3VyZSBlbm91Z2gsIGl0J3MgYXQgYG5ldC9pcHY0L0tjb25maWc6NDIzYCBhbmQgaXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIGEgY3J1Y2lhbCBhc3BlY3Qgb2YgdGhpcyBldmFsdWF0aW9uIGlzIHdoZXRoZXIgdGhlIGNvZGUgY2hhbmdlcyBhcmUgaW1wYWN0ZnVsIGZvciBmdXp6aW5nLiBJdCBhcHBlYXJzIHRoYXQgdGhlcmUncyBhIG5ldyBpbnN0cnVjdGlvbiBsaW1pdCBjaGVjayBhZGRlZCB3aXRoaW4gYGluZXRfZGlhZ19iY19hdWRpdGA6IGBpZiAoKytvcHMgXHUwMDNlIElORVRfRElBR19CQ19NQVhfT1BTKSByZXR1cm4gLUVJTlZBTDtgLiBUaGlzIGFkZGl0aW9uIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQncyBhIG5ldyBjb250cm9sIGZsb3cgbWVjaGFuaXNtIHRoYXQgd2lsbCBsaWtlbHkgaW5mbHVlbmNlIGhvdyB0aGUgZnV6emVyIG9wZXJhdGVzLiBCZWNhdXNlIG9mIHRoaXMsIGl0J3Mgd29ydGggZnV6emluZyFcblxuU28sIHRoZSBjb3JlIG9mIHRoZSBmdXp6aW5nIHNldHVwIGxvb2tzIGdvb2Q6IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc2V0IHRvIGBbXCJJTkVUX0RJQUdcIl1gLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQuXG5cbkZpbmFsbHksIEknbGwgdXBkYXRlIHRoZSByZXN1bHRzLiBJIGFtIGNvbmZpZGVudCBpbiBteSBmaW5kaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NTAsIk91dHB1dFRva2VucyI6MTU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjQ4LjIzMjQwOTY0NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MjYzMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0RJQUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmV0X2RpYWdfYmNfYXVkaXRcIixcbiAgICBcIl9faW5ldF9kaWFnX2R1bXBfc3RhcnRcIixcbiAgICBcImluZXRfZGlhZ19kdW1wX3N0YXJ0XCIsXG4gICAgXCJpbmV0X2RpYWdfYmNfc2tcIixcbiAgICBcImluZXRfZGlhZ19oYW5kbGVyX2NtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGluZXRfZGlhZ19iY19hdWRpdCBpbiBuZXQvaXB2NC9pbmV0X2RpYWcuYywgcGxhY2luZyBhIGxpbWl0IChJTkVUX0RJQUdfQkNfTUFYX09QUykgb24gdGhlIG51bWJlciBvZiBvcGVyYXRpb25zIGFsbG93ZWQgaW4gaW5ldF9kaWFnIGJ5dGVjb2RlIGZpbHRlcnMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgc29ja2V0IGRpYWdub3N0aWMgZHVtcCBwYXJzaW5nIGxvZ2ljIGFuZCBlcnJvciBwYXRocyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0RJQUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmV0X2RpYWdfYmNfYXVkaXRcIixcbiAgICBcIl9faW5ldF9kaWFnX2R1bXBfc3RhcnRcIixcbiAgICBcImluZXRfZGlhZ19kdW1wX3N0YXJ0XCIsXG4gICAgXCJpbmV0X2RpYWdfYmNfc2tcIixcbiAgICBcImluZXRfZGlhZ19oYW5kbGVyX2NtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGluZXRfZGlhZ19iY19hdWRpdCBpbiBuZXQvaXB2NC9pbmV0X2RpYWcuYywgcGxhY2luZyBhIGxpbWl0IChJTkVUX0RJQUdfQkNfTUFYX09QUykgb24gdGhlIG51bWJlciBvZiBvcGVyYXRpb25zIGFsbG93ZWQgaW4gaW5ldF9kaWFnIGJ5dGVjb2RlIGZpbHRlcnMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgc29ja2V0IGRpYWdub3N0aWMgZHVtcCBwYXJzaW5nIGxvZ2ljIGFuZCBlcnJvciBwYXRocyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDI6NDguMzA5Njc5NjIzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTM4MDgyNDE1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQyOjQ4LjMxMDE5NjgzM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI1MzgwMzAzMTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIHVwcGVyIGJvdW5kIChJTkVUX0RJQUdfQkNfTUFYX09QUyA9IDY0KSBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVjb2RlIG9wZXJhdGlvbnMgdmVyaWZpZWQgZHVyaW5nIGluZXRfZGlhZyBmaWx0ZXIgYXVkaXRpbmcgaW4gaW5ldF9kaWFnX2JjX2F1ZGl0KCkgdG8gcHJldmVudCBleGNlc3NpdmVseSBsb25nIGJ5dGVjb2RlIGV4ZWN1dGlvbnMgd2hpbGUgaG9sZGluZyBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MuIFRoZSBvbmx5IHZhcmlhYmxlIGFkZGVkIGlzIGEgbG9jYWwgaW50ZWdlciBjb3VudGVyIGluaXRpYWxpemVkIHRvIDAuIFRoZSBwYXRjaCBkb2VzIG5vdCB0b3VjaCBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgc3RydWN0IHBhZGRpbmcsIGJ1ZmZlciBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2OGEyZmQzYzg3M2I5ZmM3YmZkOWM5NTBjNWYzMzY1ZWZjODNiMjA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxOTo0MTo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZGlhZy5jIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmNcbmluZGV4IDM0Yjc3YWE4N2QwYTQuLjFjYTUyOGNkM2U3MmIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuY1xuKysrIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmNcbkBAIC03MjUsNiArNzI1LDEyIEBAIHN0YXRpYyBib29sIHZhbGlkX2Nncm91cGNvbmQoY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AsIGludCBsZW4sXG4gfVxuICNlbmRpZlxuIFxuKy8qIHNzKDgpIGZpbHRlcnMgb25seSBuZWVkIGEgaGFuZGZ1bCBvZiBjb21wYXJlL2hvc3QvbWFyayBvcHMuXG4rICogQm91bmQgdGhlIHByb2dyYW0gc28gZHVtcCB3YWxrcyBjYW5ub3QgcnVuIGFuIGFyYml0cmFyaWx5IGxvbmdcbisgKiBieXRlY29kZSBzZXF1ZW5jZSB1bmRlciB0aGUgc29ja2V0IGhhc2ggYnVja2V0IGxvY2tzLlxuKyAqL1xuKyNkZWZpbmUgSU5FVF9ESUFHX0JDX01BWF9PUFMgNjRcbitcbiBzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbkBAIC03MzIsNiArNzM4LDcgQEAgc3RhdGljIGludCBpbmV0X2RpYWdfYmNfYXVkaXQoc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXG4gXHRjb25zdCB2b2lkICpieXRlY29kZSwgKmJjO1xuIFx0aW50IGJ5dGVjb2RlX2xlbiwgbGVuO1xuIFx0Ym9vbCBuZXRfYWRtaW47XG4rXHRpbnQgb3BzID0gMDtcbiBcbiBcdGlmICghYXR0cilcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNzQ3LDYgKzc1NCw5IEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxuIFx0XHRpbnQgbWluX2xlbiA9IHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wKTtcbiBcdFx0Y29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AgPSBiYztcbiBcbitcdFx0aWYgKCsrb3BzIFx1MDAzZSBJTkVUX0RJQUdfQkNfTUFYX09QUylcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdFx0c3dpdGNoIChvcC1cdTAwM2Vjb2RlKSB7XG4gXHRcdGNhc2UgSU5FVF9ESUFHX0JDX1NfQ09ORDpcbiBcdFx0Y2FzZSBJTkVUX0RJQUdfQkNfRF9DT05EOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDI6NDguMzEwMTk3ODgzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMzcyNTA3NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEV2YWx1YXRpb24gb2YgdGhlIExpbnV4IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcmVxdWVzdCBoZXJlIHRvIGFzc2VzcyBhIExpbnV4IGtlcm5lbCBwYXRjaCBhbmQgZGVjaWRlIHdoZXRoZXIgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQncyBnZXQgdGhpcyBkb25lLCBubyBtYWxpY2lvdXMgcGF5bG9hZHMgb3IgZXhwbG9pdHMgYXJlIHJlcXVlc3RlZCwgdGhpcyBpcyBiZW5pZ24uXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdsbCBkbyBhIHF1aWNrIHNhZmV0eSBldmFsdWF0aW9uIOKAkyB0aGlzIGlzIGNvZGUgcmV2aWV3L3NlY3VyaXR5IGFzc2Vzc21lbnQgYW5kIEkgY2FuIHRha2UgdGhpcyBkaXJlY3RseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBLTVNBTi13b3J0aHkuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBkaWZmOiBUaGUgY2hhbmdlIGlzIGluIGBuZXQvaXB2NC9pbmV0X2RpYWcuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGBJTkVUX0RJQUdfQkNfTUFYX09QU2AgZGVmaW5lIHNldCB0byA2NC4gIFRoaXMgbGltaXQgaXMgZm9yIHRoZSBieXRlY29kZSB1c2VkIGJ5IGBzcyg4KWAgZmlsdGVyaW5nLCBwcmV2ZW50aW5nIGFyYml0cmFyaWx5IGxvbmcgc2VxdWVuY2VzIHVuZGVyIHRoZSBzb2NrZXQgaGFzaCBidWNrZXQgbG9ja3MsIGluIHRoZSBgaW5ldF9kaWFnX2JjX2F1ZGl0YCBmdW5jdGlvbi4gVGhlIGNvZGUgbm93IGluY3JlbWVudHMgYW4gYG9wc2AgY291bnRlciBhbmQgcmV0dXJucyAtRUlOVkFMIGlmIGl0IGV4Y2VlZHMgdGhlIG1heCBhbGxvd2VkIG9wZXJhdGlvbnMuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgaGFyZGVuaW5nIG1lYXN1cmUsIHByZXZlbnRpbmcgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlIG9yIHBlcmhhcHMgZXZlbiBtb3JlIHN1YnRsZSB2dWxuZXJhYmlsaXRpZXMgc3RlbW1pbmcgZnJvbSBvdmVybHkgY29tcGxleCBieXRlY29kZSBleGVjdXRpb24uXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZeKAlGEgYnl0ZWNvZGUgbGltaXTigJRhbmQgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgS0FTQU4gYW5kIEtNU0FOIHJlbGF0ZSwgSSdtIHRoaW5raW5nLi4uIEtBU0FOIHdvdWxkIGJlIHRoZSBpbml0aWFsIHRvb2wsIHJpZ2h0PyBUaGlzIGlzIGxpa2VseSBhIGdvb2QgcGxhY2UgZm9yIEtBU0FOIHRvIGRvIGl0cyB0aGluZyB3aXRoIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLiBLTVNBTiBpcyBtb3JlIGZvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IEtBU0FOIG1pZ2h0IG1pc3MgYW5kIHRoaXMgaXMgbm90IHdoYXQgdGhpcyBsb29rcyBsaWtlLiAgSXQncyBhIGJvdW5kcyBjaGVjaywgd2hpY2ggaXMgbW9yZSBvZiBhIHBvdGVudGlhbCBEb1MgdnVsbmVyYWJpbGl0eSwgd2hpY2ggaXMgd2l0aGluIHRoZSBib3VuZHMgb2YgS0FTQU4ncyBhYmlsaXRpZXMuIEtNU0FOIGlzIGRlZmluaXRlbHkgbm90IG5lZWRlZCwgYXMgdGhlIHBhdGNoIGZpeGVzIGEgYm91bmRzIGlzc3VlLCBub3QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLlxuXG5TbywgaW4gY29uY2x1c2lvbiwgd2hpbGUgaXQncyBhIGdvb2QgZGVmZW5zaXZlIGFkZGl0aW9uIHRvIHRoZSBjb2RlLCBJIGRvbid0IHRoaW5rIHRoaXMgY2hhbmdlIGJ5IGl0c2VsZiB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBzZXZlcml0eSBvZiB0aGUgY2hhbmdlIGRvZXNuJ3Qgd2FycmFudCBpdCwgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUgYW55IGlzc3VlcyB3aXRoIHRoZSBvcmlnaW5hbCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDM6MDEuNjgyNzA4MzQ0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2luZXRfZGlhZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyNTpcXHR9XFxuIDcyNjpcXHQjZW5kaWZcXG4gNzI3OlxcdFxcbiA3Mjg6XFx0Lyogc3MoOCkgZmlsdGVycyBvbmx5IG5lZWQgYSBoYW5kZnVsIG9mIGNvbXBhcmUvaG9zdC9tYXJrIG9wcy5cXG4gNzI5OlxcdCAqIEJvdW5kIHRoZSBwcm9ncmFtIHNvIGR1bXAgd2Fsa3MgY2Fubm90IHJ1biBhbiBhcmJpdHJhcmlseSBsb25nXFxuIDczMDpcXHQgKiBieXRlY29kZSBzZXF1ZW5jZSB1bmRlciB0aGUgc29ja2V0IGhhc2ggYnVja2V0IGxvY2tzLlxcbiA3MzE6XFx0ICovXFxuIDczMjpcXHQjZGVmaW5lIElORVRfRElBR19CQ19NQVhfT1BTIDY0XFxuIDczMzpcXHRcXG4gNzM0OlxcdHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLFxcbiA3MzU6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNzM2OlxcdHtcXG4gNzM3OlxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIgPSBjYl9kYXRhLVxcdTAwM2VpbmV0X2RpYWdfbmxhX2JjO1xcbiA3Mzg6XFx0XFx0Y29uc3Qgdm9pZCAqYnl0ZWNvZGUsICpiYztcXG4gNzM5OlxcdFxcdGludCBieXRlY29kZV9sZW4sIGxlbjtcXG4gNzQwOlxcdFxcdGJvb2wgbmV0X2FkbWluO1xcbiA3NDE6XFx0XFx0aW50IG9wcyA9IDA7XFxuIDc0MjpcXHRcXG4gNzQzOlxcdFxcdGlmICghYXR0cilcXG4gNzQ0OlxcdFxcdFxcdHJldHVybiAwO1xcbiA3NDU6XFx0XFxuIDc0NjpcXHRcXHRpZiAobmxhX2xlbihhdHRyKSBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wKSlcXG4gNzQ3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NDg6XFx0XFxuIDc0OTpcXHRcXHRuZXRfYWRtaW4gPSBuZXRsaW5rX25ldF9jYXBhYmxlKHNrYiwgQ0FQX05FVF9BRE1JTik7XFxuIDc1MDpcXHRcXHRieXRlY29kZSA9IGJjID0gbmxhX2RhdGEoYXR0cik7XFxuIDc1MTpcXHRcXHRsZW4gPSBieXRlY29kZV9sZW4gPSBubGFfbGVuKGF0dHIpO1xcbiA3NTI6XFx0XFxuIDc1MzpcXHRcXHR3aGlsZSAobGVuIFxcdTAwM2UgMCkge1xcbiA3NTQ6XFx0XFx0XFx0aW50IG1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19iY19vcCk7XFxuIDc1NTpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2JjX29wICpvcCA9IGJjO1xcbiA3NTY6XFx0XFxuIDc1NzpcXHRcXHRcXHRpZiAoKytvcHMgXFx1MDAzZSBJTkVUX0RJQUdfQkNfTUFYX09QUylcXG4gNzU4OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NTk6XFx0XFxuIDc2MDpcXHRcXHRcXHRzd2l0Y2ggKG9wLVxcdTAwM2Vjb2RlKSB7XFxuIDc2MTpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19TX0NPTkQ6XFxuIDc2MjpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19EX0NPTkQ6XFxuIDc2MzpcXHRcXHRcXHRcXHRpZiAoIXZhbGlkX2hvc3Rjb25kKGJjLCBsZW4sIFxcdTAwMjZtaW5fbGVuKSlcXG4gNzY0OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NjU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDc2NjpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19ERVZfQ09ORDpcXG4gNzY3OlxcdFxcdFxcdFxcdGlmICghdmFsaWRfZGV2Y29uZChiYywgbGVuLCBcXHUwMDI2bWluX2xlbikpXFxuIDc2ODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzY5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3NzA6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfU19FUTpcXG4gNzcxOlxcdFxcdFxcdGNhc2UgSU5FVF9ESUFHX0JDX1NfR0U6XFxuIDc3MjpcXHRcXHRcXHRjYXNlIElORVRfRElBR19CQ19TX0xFOlxcbiA3NzM6XFx0XFx0XFx0Y2FzZSBJTkVUX0RJQUdfQkNfRF9FUTpcXG4gNzc0OlxcdFxcdFxcdGNhc2UgSU5FVF9ESUFHX0JDX0RfR0U6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQzOjAxLjY4MjgwMTY3NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzk1MTM4MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQnl0ZWNvZGUgQXVkaXQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaW5ldF9kaWFnX2JjX2F1ZGl0YCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiwgZXNwZWNpYWxseSBpbiBsaWdodCBvZiB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgaGFyZCBsaW1pdCDigJMgYElORVRfRElBR19CQ19NQVhfT1BTID0gNjRgIOKAkyBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHByb2Nlc3NlZCB3aXRoaW4gYGluZXRfZGlhZ19iY19hdWRpdGAuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCwgd2l0aGluIGBpbmV0X2RpYWdfYmNfYXVkaXRgLCB0aGV54oCZcmUgaW5jcmVtZW50aW5nIHRoaXMgYG9wc2AgY291bnRlciBmb3IgZWFjaCBvcGNvZGUgdGhleSBlbmNvdW50ZXIuIElmIHRoYXQgYG9wc2AgY291bnRlciBleGNlZWRzIGBJTkVUX0RJQUdfQkNfTUFYX09QU2AsIHRoZSBmdW5jdGlvbiBraWNrcyBiYWNrIGFuIGAtRUlOVkFMYCBlcnJvci4gVGhhdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBzZWN1cml0eSBtZWFzdXJlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBiZXR0ZXIuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGxhcmdlciBjb250ZXh0OiB3aGVyZSBpcyB0aGlzIGBpbmV0X2RpYWdfYmNfYXVkaXRgIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKj8gQW5kIGNyaXRpY2FsbHksIGhvdyBpcyB0aGlzIGJ5dGVjb2RlIGJlaW5nIGV4ZWN1dGVkIG9yIG90aGVyd2lzZSBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0/IFVuZGVyc3RhbmRpbmcgdGhvc2UgY2FsbCBzaXRlcyBhbmQgdGhlIGJ5dGVjb2RlIGV4ZWN1dGlvbiBmbG93IHdpbGwgYmUgY3J1Y2lhbCB0byBhc3Nlc3NpbmcgdGhlIG92ZXJhbGwgaW1wYWN0IGFuZCBlZmZlY3RpdmVuZXNzIG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGEgZmlsdGVyPyBBIHRyYW5zZm9ybWF0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnl0ZWNvZGXigJlzIHB1cnBvc2UgdG8gc2VlIHRoZSByaXNrIHRoZSBsaW1pdCBhZGRyZXNzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNDgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo0MzowNC40Nzc5NDI2NjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTE1MDk4ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9kaWFnX2JjX2F1ZGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2luZXRfZGlhZy5jPTcyMD1zdGF0aWMgYm9vbCB2YWxpZF9jZ3JvdXBjb25kKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wLCBpbnQgbGVuLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtNzMzLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjczNDpzdGF0aWMgaW50IGluZXRfZGlhZ19iY19hdWRpdChzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy03MzUtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTg1NT1zdGF0aWMgaW50IF9faW5ldF9kaWFnX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgaGRybGVuKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODcxLVxcdH1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4NzI6XFx0ZXJyID0gaW5ldF9kaWFnX2JjX2F1ZGl0KGNiX2RhdGEsIHNrYik7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODczLVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NDM6MDYuNjg5NDU4MjUzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjAwMTA0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgaW5ldF9kaWFnX2R1bXBfc3RhcnRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhlIGBpbmV0X2RpYWdgIHN1YnN5c3RlbSwgYW5kIGEgbGlrZWx5IHN0YXJ0aW5nIHBvaW50IGlzIHRoYXQgZHVtcCBmdW5jdGlvbi4gTGV0J3MgemVybyBpbiBvbiBgX19pbmV0X2RpYWdfZHVtcF9zdGFydGAgYXJvdW5kIGxpbmUgODU1LiBUaGlzIHN1Z2dlc3RzIHRoYXQgaXQncyB0aGUgY29yZSBmdW5jdGlvbiB0aGF0IG9yY2hlc3RyYXRlcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkaWFnbm9zdGljIGRhdGEgZHVtcCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBpdGVyYXRpb24gd2l0aGluIHRoYXQgZnVuY3Rpb24gd29ya3MuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IGFjY2Vzc2VzIGFuZCBtYW5pcHVsYXRlcy4gSXMgaXQgdXNpbmcgYSBzdGFuZGFyZCBpdGVyYXRvciwgb3Igc29tZXRoaW5nIGN1c3RvbT8gV2hhdCBhYm91dCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXM/IFVuZGVyc3RhbmRpbmcgdGhlIGVudHJ5IHBvaW50IHdpbGwgbWFrZSB0aGUgcmVzdCBvZiB0aGUgcHV6emxlIG11Y2ggY2xlYXJlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjQzOjA4LjY0OTQ3MjEyNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pbmV0X2RpYWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTU6XFx0c3RhdGljIGludCBfX2luZXRfZGlhZ19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IGhkcmxlbilcXG4gODU2OlxcdHtcXG4gODU3OlxcdFxcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXFx1MDAzZW5saDtcXG4gODU4OlxcdFxcdHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhO1xcbiA4NTk6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGNiLVxcdTAwM2Vza2I7XFxuIDg2MDpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpubGE7XFxuIDg2MTpcXHRcXHRpbnQgZXJyO1xcbiA4NjI6XFx0XFxuIDg2MzpcXHRcXHRjYl9kYXRhID0ga3phbGxvY19vYmooKmNiX2RhdGEpO1xcbiA4NjQ6XFx0XFx0aWYgKCFjYl9kYXRhKVxcbiA4NjU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDg2NjpcXHRcXG4gODY3OlxcdFxcdGVyciA9IGluZXRfZGlhZ19wYXJzZV9hdHRycyhubGgsIGhkcmxlbiwgY2JfZGF0YS1cXHUwMDNlcmVxX25sYXMpO1xcbiA4Njg6XFx0XFx0aWYgKGVycikge1xcbiA4Njk6XFx0XFx0XFx0a2ZyZWUoY2JfZGF0YSk7XFxuIDg3MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA4NzE6XFx0XFx0fVxcbiA4NzI6XFx0XFx0ZXJyID0gaW5ldF9kaWFnX2JjX2F1ZGl0KGNiX2RhdGEsIHNrYik7XFxuIDg3MzpcXHRcXHRpZiAoZXJyKSB7XFxuIDg3NDpcXHRcXHRcXHRrZnJlZShjYl9kYXRhKTtcXG4gODc1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDg3NjpcXHRcXHR9XFxuIDg3NzpcXHRcXG4gODc4OlxcdFxcdG5sYSA9IGNiX2RhdGEtXFx1MDAzZWluZXRfZGlhZ19ubGFfYnBmX3N0Z3M7XFxuIDg3OTpcXHRcXHRpZiAobmxhKSB7XFxuIDg4MDpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyAqYnBmX3N0Z19kaWFnO1xcbiA4ODE6XFx0XFxuIDg4MjpcXHRcXHRcXHRicGZfc3RnX2RpYWcgPSBicGZfc2tfc3RvcmFnZV9kaWFnX2FsbG9jKG5sYSk7XFxuIDg4MzpcXHRcXHRcXHRpZiAoSVNfRVJSKGJwZl9zdGdfZGlhZykpIHtcXG4gODg0OlxcdFxcdFxcdFxcdGtmcmVlKGNiX2RhdGEpO1xcbiA4ODU6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYnBmX3N0Z19kaWFnKTtcXG4gODg2OlxcdFxcdFxcdH1cXG4gODg3OlxcdFxcdFxcdGNiX2RhdGEtXFx1MDAzZWJwZl9zdGdfZGlhZyA9IGJwZl9zdGdfZGlhZztcXG4gODg4OlxcdFxcdH1cXG4gODg5OlxcdFxcbiA4OTA6XFx0XFx0Y2ItXFx1MDAzZWRhdGEgPSBjYl9kYXRhO1xcbiA4OTE6XFx0XFx0cmV0dXJuIDA7XFxuIDg5MjpcXHR9XFxuIDg5MzpcXHRcXG4gODk0OlxcdHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo0MzowOC42NDk1Njk3NzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA0MDkxMDQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBpbmV0X2RpYWcgQnl0ZWNvZGUgT3BlcmF0aW9uIExpbWl0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl04oCZcyBwcmltYXJpbHkgZm9jdXNlZCBvbiByZXN0cmljdGluZyB0aGUgbnVtYmVyIG9mIGJ5dGVjb2RlIG9wZXJhdGlvbnMgYWxsb3dlZCB3aXRoaW4gYGluZXRfZGlhZ2Agc29ja2V0IGZpbHRlciBkdW1wcy4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgbGltaXQsIGBJTkVUX0RJQUdfQkNfTUFYX09QU2AgKHNldCB0byA2NCksIGFuZCBhIGNvdW50ZXIsIGBvcHNgLCB0aGF0IGluY3JlbWVudHMgd2l0aCBlYWNoIG9wZXJhdGlvbiB3aXRoaW4gYGluZXRfZGlhZ19iY19hdWRpdGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoaXMgaW50cm9kdWNpbmcgYW55IG5ldyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXM/XCJcblxuRmlyc3QsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyB0aGluayB0aHJvdWdoIHRoZSBzY2VuYXJpb3MuIFRoZSBjb3VudGVyIGBvcHNgIGlzIGluaXRpYWxpemVkIHRvIHplcm8sIHJpZ2h0PyBHb29kLiBObyBuZXcgYnVmZmVycyBhcmUgYmVpbmcgaW50cm9kdWNlZCwgYW5kIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGhhcHBlbmluZy4gRXhjZWxsZW50LiBObyBkYXRhIGlzIGJlaW5nIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlciBzcGFjZSwgc28gbm8gcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrYWdlIHRoZXJlLiBBbmQgY3JpdGljYWxseSwgbm8gY29uZGl0aW9ucyBhcmUgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgZGVmaW5pdGVseSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBhbnl3aGVyZSBpbiB0aGlzIHNjb3BlLiBJ4oCZbSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3Mgb24gdGhhdCBmcm9udC5cblxuTm93LCBkb2VzIHRoaXMgcGF0Y2ggd2FycmFudCBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgcnVuPyBLTVNBTiBpcyByZWxldmFudCB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcG90ZW50aWFsIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGJyYW5jaCBjb25kaXRpb25zLiBMb29raW5nIGF0IHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyDigJMganVzdCBhZGRpbmcgYSBjb3VudGVyIGFuZCBhIGNoZWNrIOKAkyBub25lIG9mIHRob3NlIEtNU0FOIGNvbmNlcm5zIHNlZW0gdG8gYXBwbHkuIFN0YW5kYXJkIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCBvdGhlciBzYW5pdGl6ZXJzIHNob3VsZCBiZSBzdWZmaWNpZW50IGhlcmUuIFRoaXMgcGF0Y2ggaXNuJ3QgaW50cm9kdWNpbmcgYW55IEtNU0FOLXNwZWNpZmljIGJ1Z3Mgb3IgZXhwb3NpbmcgZXhpc3Rpbmcgb25lcy5cblxuU28sIGxldCdzIHN1bW1hcml6ZSBpdCBmb3IgdGhlIHJlY29yZC4gVGhlIHBhdGNoIGlzIHNpbXBseSBhZGRpbmcgYW4gb3Bjb2RlIGNvdW50IGxpbWl0LCBgSU5FVF9ESUFHX0JDX01BWF9PUFNgLCBkdXJpbmcgYGluZXRfZGlhZ19iY19hdWRpdGAuIFRoaXMgaXMgaW50ZW5kZWQgdG8gbWl0aWdhdGUgZGVuaWFsLW9mLXNlcnZpY2Ugcmlza3MsIG9yIHBvdGVudGlhbCBleGNlc3NpdmUgbG9jayBob2xkIHRpbWVzLiBUaGUgYWRkZWQgbG9jYWwgY291bnRlciBgb3BzYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLiBDcnVjaWFsbHksIHRoZSBwYXRjaCBkb2VzICpub3QqIGFsbG9jYXRlIG9yIGFsdGVyIGV4aXN0aW5nIGtlcm5lbCBtZW1vcnkgc3RydWN0dXJlczsgaXQgZG9lc24ndCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZTsgYW5kIGltcG9ydGFudGx5LCBpdCBkb2VzICpub3QqIGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciBkYXRhIGJ1ZmZlciByZWFkcyBpbiBhbnkgd2F5IHRoYXQgd291bGQgaW50cm9kdWNlIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBUaGVyZWZvcmUsIG5vIEtNU0FOIGlzIG5lZWRlZC4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVycyBhcmUgZ29vZCB0byBnby4gVGltZSB0byBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc3MCwiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo0MzoxMy42OTA0ODI2NDZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gdXBwZXIgYm91bmQgKElORVRfRElBR19CQ19NQVhfT1BTID0gNjQpIG9uIHRoZSBudW1iZXIgb2YgYnl0ZWNvZGUgb3BlcmF0aW9ucyB2ZXJpZmllZCBkdXJpbmcgaW5ldF9kaWFnIGZpbHRlciBhdWRpdGluZyBpbiBpbmV0X2RpYWdfYmNfYXVkaXQoKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZWx5IGxvbmcgYnl0ZWNvZGUgZXhlY3V0aW9ucyB3aGlsZSBob2xkaW5nIHNvY2tldCBoYXNoIGJ1Y2tldCBsb2Nrcy4gVGhlIG9ubHkgdmFyaWFibGUgYWRkZWQgaXMgYSBsb2NhbCBpbnRlZ2VyIGNvdW50ZXIgaW5pdGlhbGl6ZWQgdG8gMC4gVGhlIHBhdGNoIGRvZXMgbm90IHRvdWNoIGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzLCBzdHJ1Y3QgcGFkZGluZywgYnVmZmVyIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24sIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gdXBwZXIgYm91bmQgKElORVRfRElBR19CQ19NQVhfT1BTID0gNjQpIG9uIHRoZSBudW1iZXIgb2YgYnl0ZWNvZGUgb3BlcmF0aW9ucyB2ZXJpZmllZCBkdXJpbmcgaW5ldF9kaWFnIGZpbHRlciBhdWRpdGluZyBpbiBpbmV0X2RpYWdfYmNfYXVkaXQoKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZWx5IGxvbmcgYnl0ZWNvZGUgZXhlY3V0aW9ucyB3aGlsZSBob2xkaW5nIHNvY2tldCBoYXNoIGJ1Y2tldCBsb2Nrcy4gVGhlIG9ubHkgdmFyaWFibGUgYWRkZWQgaXMgYSBsb2NhbCBpbnRlZ2VyIGNvdW50ZXIgaW5pdGlhbGl6ZWQgdG8gMC4gVGhlIHBhdGNoIGRvZXMgbm90IHRvdWNoIGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzLCBzdHJ1Y3QgcGFkZGluZywgYnVmZmVyIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24sIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowldjb8[1] Phase: Succeeded StartedAt: 2026-09-07 19:43:24 +0000 UTC FinishedAt: 2026-09-07 19:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 19:43:24 +0000 UTC FinishedAt: 2026-09-07 19:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2] Phase: Succeeded StartedAt: 2026-09-07 19:43:24 +0000 UTC FinishedAt: 2026-09-07 23:26:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 19:43:24 +0000 UTC FinishedAt: 2026-09-07 23:26:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 19:43:24 +0000 UTC FinishedAt: 2026-09-07 19:43:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 19:43:24 +0000 UTC FinishedAt: 2026-09-07 19:43:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowldjb8/series-workflowldjb8-convert-artifact-3007881978/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 19:43:34 +0000 UTC FinishedAt: 2026-09-07 20:04:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 19:43:34 +0000 UTC FinishedAt: 2026-09-07 20:04:16 +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:*5ef22593-0072-4cc6-aadb-2c4644729ca5,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-workflowldjb8/series-workflowldjb8-convert-artifact-3007881978/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": "288038fb-5d2f-4f30-9536-5d1d26d28ee5", "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-workflowldjb8/series-workflowldjb8-build-action-1047688104/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 19:43:34 +0000 UTC FinishedAt: 2026-09-07 20:03:51 +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:*5ef22593-0072-4cc6-aadb-2c4644729ca5,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-workflowldjb8/series-workflowldjb8-convert-artifact-3007881978/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": "288038fb-5d2f-4f30-9536-5d1d26d28ee5", "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-workflowldjb8/series-workflowldjb8-build-action-1047688104/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 20:04:16 +0000 UTC FinishedAt: 2026-09-07 20:04:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 20:04:16 +0000 UTC FinishedAt: 2026-09-07 20:04:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 20:04:16 +0000 UTC FinishedAt: 2026-09-07 20:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 20:04:16 +0000 UTC FinishedAt: 2026-09-07 20:04:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowldjb8/series-workflowldjb8-convert-artifact-400149845/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 20:04:26 +0000 UTC FinishedAt: 2026-09-07 20:06:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 20:04:26 +0000 UTC FinishedAt: 2026-09-07 20:06:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*288038fb-5d2f-4f30-9536-5d1d26d28ee5,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-workflowldjb8/series-workflowldjb8-build-action-1047688104/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-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 20:06:14 +0000 UTC FinishedAt: 2026-09-07 20:06:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 20:06:14 +0000 UTC FinishedAt: 2026-09-07 20:06:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 20:06:14 +0000 UTC FinishedAt: 2026-09-07 20:22:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 20:06:14 +0000 UTC FinishedAt: 2026-09-07 20:22:44 +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:*5ef22593-0072-4cc6-aadb-2c4644729ca5,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-workflowldjb8/series-workflowldjb8-convert-artifact-400149845/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": "a32bf69b-b086-423d-9954-a18b0a67a10c", "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-workflowldjb8/series-workflowldjb8-build-action-1976233697/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 20:06:14 +0000 UTC FinishedAt: 2026-09-07 20:22:34 +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:*5ef22593-0072-4cc6-aadb-2c4644729ca5,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-workflowldjb8/series-workflowldjb8-convert-artifact-400149845/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": "a32bf69b-b086-423d-9954-a18b0a67a10c", "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-workflowldjb8/series-workflowldjb8-build-action-1976233697/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 20:22:44 +0000 UTC FinishedAt: 2026-09-07 20:22:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 20:22:44 +0000 UTC FinishedAt: 2026-09-07 20:22:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 20:22:44 +0000 UTC FinishedAt: 2026-09-07 20:24:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 20:22:44 +0000 UTC FinishedAt: 2026-09-07 20:24:45 +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:*a32bf69b-b086-423d-9954-a18b0a67a10c,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-workflowldjb8/series-workflowldjb8-build-action-1976233697/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-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 20:24:55 +0000 UTC FinishedAt: 2026-09-07 23:26:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 20:24:55 +0000 UTC FinishedAt: 2026-09-07 23:26:42 +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":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"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:*288038fb-5d2f-4f30-9536-5d1d26d28ee5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a32bf69b-b086-423d-9954-a18b0a67a10c,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-workflowldjb8/series-workflowldjb8-build-action-1047688104/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-workflowldjb8/series-workflowldjb8-build-action-1976233697/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 20:24:55 +0000 UTC FinishedAt: 2026-09-07 20:25:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 20:24:55 +0000 UTC FinishedAt: 2026-09-07 20:25:00 +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":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"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-workflowldjb8/series-workflowldjb8-convert-artifact-1736828730/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 20:24:55 +0000 UTC FinishedAt: 2026-09-07 20:24:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 20:24:55 +0000 UTC FinishedAt: 2026-09-07 20:24:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 20:24:55 +0000 UTC FinishedAt: 2026-09-07 20:24:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 20:25:05 +0000 UTC FinishedAt: 2026-09-07 23:26:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldjb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_diag_bc_audit","__inet_diag_dump_start","inet_diag_dump_start","inet_diag_bc_sk","inet_diag_handler_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG"],"series_id":"fb3c2901-4207-475f-b631-bb14da2f6119","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 20:25:05 +0000 UTC FinishedAt: 2026-09-07 23:26:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*288038fb-5d2f-4f30-9536-5d1d26d28ee5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a32bf69b-b086-423d-9954-a18b0a67a10c,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-workflowldjb8/series-workflowldjb8-build-action-1047688104/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-workflowldjb8/series-workflowldjb8-build-action-1976233697/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-workflowldjb8/series-workflowldjb8-convert-artifact-1736828730/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,}