Name: series-workflow52qcf Phase: Succeeded StartedAt: 2026-07-18 17:26:28 +0000 UTC FinishedAt: 2026-07-18 22:25:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[0] Phase: Succeeded StartedAt: 2026-07-18 17:26:28 +0000 UTC FinishedAt: 2026-07-18 17:55:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[0].run-triage Phase: Succeeded StartedAt: 2026-07-18 17:26:28 +0000 UTC FinishedAt: 2026-07-18 17:55:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LEDS_TRIGGERS_HW_CHANGED", "LEDS_TRIGGER_NETDEV", "IDEAPAD_LAPTOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LEDS_TRIGGERS_HW_CHANGED", "LEDS_TRIGGER_NETDEV", "IDEAPAD_LAPTOP" ], "series_id": "ec597fb5-87fc-4e6d-a794-d030803ce037" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__led_trigger_is_hw_controlled", "led_trigger_is_hw_controlled", "led_trigger_remove_hw_control", "trigger_may_offload_show", "led_trigger_do_hw_control_transition", "led_trigger_notify_hw_control_changed", "__led_trigger_set", "netdev_trig_offloaded" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCYjMzQ7LAogICAgJiMzNDtMRURTX1RSSUdHRVJfTkVUREVWJiMzNDssCiAgICAmIzM0O0lERUFQQURfTEFQVE9QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQmIzM0OywKICAgICYjMzQ7bGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wmIzM0OywKICAgICYjMzQ7dHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93JiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbiYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDssCiAgICAmIzM0O19fbGVkX3RyaWdnZXJfc2V0JiMzNDssCiAgICAmIzM0O25ldGRldl90cmlnX29mZmxvYWRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBMRUQgdHJpZ2dlciBzdWJzeXN0ZW0sIGFkZGluZyBzdXBwb3J0IGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyBhbmQgb2ZmbG9hZCBzdGF0ZSByZXBvcnRpbmcuIFRoZXNlIG5ldyBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGF0dHJpYnV0ZXMgKGB0cmlnZ2VyX21heV9vZmZsb2FkYCwgYGJyaWdodG5lc3NgLCBgdHJpZ2dlcmApIGFuZCBkcml2ZXIgbm90aWZpY2F0aW9ucy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGxvZ2ljIGFuZCBvZmZsb2FkIHF1ZXJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZGU4ZjBiM2IzMjkzNTQyNjFhMTU1NGQ2OTRlZDNiYjExNTc4MTRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMTc6NTM6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZFxuaW5kZXggZDRjOTE4Y2MxMWExMjcuLjdkYzk1ZjdhMzUwNWNlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWRcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkXG5AQCAtNzgsNiAmIzQzOzc4LDMxIEBAIERlc2NyaXB0aW9uOlxuIFx0XHQod2hpY2ggd291bGQgb2Z0ZW4gYmUgY29uZmlndXJlZCBpbiB0aGUgZGV2aWNlIHRyZWUgZm9yIHRoZVxuIFx0XHRoYXJkd2FyZSkuXG4gXG4mIzQzO1doYXQ6XHRcdC9zeXMvY2xhc3MvbGVkcy9cdTAwM2NsZWRcdTAwM2UvdHJpZ2dlcl9tYXlfb2ZmbG9hZFxuJiM0MztEYXRlOlx0XHRKdWx5IDIwMjZcbiYjNDM7S2VybmVsVmVyc2lvbjpcdDcuM1xuJiM0MztDb250YWN0Olx0bGludXgtbGVkc0B2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7RGVzY3JpcHRpb246XG4mIzQzO1x0XHROYW1lcyBhbmQgc3RhdGVzIG9mIHRyaWdnZXJzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCB0byBoYXJkd2FyZS5cbiYjNDM7XHRcdFN1Y2ggdHJpZ2dlcnMgYXJlIGFsc28gY2FsbGVkIFwmIzM0O2hhcmR3YXJlIGNvbnRyb2wgdHJpZ2dlclwmIzM0OyBpbiBzb21lXG4mIzQzO1x0XHRjb250ZXh0LlxuJiM0MztcbiYjNDM7XHRcdE9ubHkgZXhpc3RzIHdoZW4gdGhlIExFRCBzdXBwb3J0cyB0cmlnZ2VyIG9mZmxvYWQuXG4mIzQzO1xuJiM0MztcdFx0UmVhZGluZyB0aGlzIGZpbGUgcmV0dXJucyBhIGxpc3Qgb2YgdHJpZ2dlcnMgdGhhdCBhcmUgY2FwYWJsZSB0b1xuJiM0MztcdFx0YmUgb2ZmbG9hZGVkLiBUaGUgb3B0aW9uYWwgYnJhY2tldHMgYXJvdW5kIHRoZSB0cmlnZ2VyIG5hbWVcbiYjNDM7XHRcdGluZGljYXRlIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCB0cmlnZ2VyOlxuJiM0MztcbiYjNDM7XHRcdC0gYGZvb190cmlnZ2VyYDogdGhlIHRyaWdnZXIgaXMgbm90IHNlbGVjdGVkLlxuJiM0MztcdFx0LSBgXHUwMDNjZm9vX3RyaWdnZXJcdTAwM2VgOiB0aGUgdHJpZ2dlciBpcyBzZWxlY3RlZCwgYnV0IGZhbGxzIGJhY2sgdG9cbiYjNDM7XHRcdCAgc29mdHdhcmUgYmxpbmsgZm9yIHNvbWUgcmVhc29uIChlLmcuLCBpbmNvbXBhdGlibGUgdHJpZ2dlclxuJiM0MztcdFx0ICBwYXJhbWV0ZXJzKVxuJiM0MztcdFx0LSBgW2Zvb190cmlnZ2VyXWA6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkIGFuZCBvZmZsb2FkZWQgdG9cbiYjNDM7XHRcdCAgaGFyZHdhcmUuXG4mIzQzO1xuJiM0MztcdFx0VGhlIFwmIzM0O25ldGRldlwmIzM0OyB0cmlnZ2VyIGFsc28gcHJvdmlkZXMgYSBjdXN0b20gYXR0cmlidXRlIHRvXG4mIzQzO1x0XHRpbmRpY2F0ZSBpdHMgc3RhdGUsIHNlZSBgL3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS9vZmZsb2FkZWRgLlxuJiM0MztcbiBXaGF0Olx0XHQvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL2ludmVydGVkXG4gRGF0ZTpcdFx0SmFudWFyeSAyMDExXG4gS2VybmVsVmVyc2lvbjpcdDIuNi4zOFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcbmluZGV4IGVkNDZiMzdhYjhhMjg0Li5hNTE0NmVhMWUzZTYxYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldlxuQEAgLTc1LDYgJiM0Mzs3NSw5IEBAIERlc2NyaXB0aW9uOlxuIFx0XHRJZiAxLCB0aGUgTEVEIGJsaW5raW5nIGluIHJlcXVlc3RlZCBtb2RlIGlzIG9mZmxvYWRlZCB0b1xuIFx0XHRoYXJkd2FyZS5cbiBcbiYjNDM7XHRcdExFRCB0cmlnZ2VyIGNvcmUgYWxzbyBwcm92aWRlcyBhIGdlbmVyaWMgYXR0cmlidXRlIGZvciB0aGlzXG4mIzQzO1x0XHRwdXJwb3NlLCBzZWUgYC9zeXMvY2xhc3MvbGVkcy9cdTAwM2NsZWRcdTAwM2UvdHJpZ2dlcl9tYXlfb2ZmbG9hZGAuXG4mIzQzO1xuIFdoYXQ6XHRcdC9zeXMvY2xhc3MvbGVkcy9cdTAwM2NsZWRcdTAwM2UvbGlua18xMFxuIERhdGU6XHRcdEp1biAyMDIzXG4gS2VybmVsVmVyc2lvbjpcdDYuNVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxuaW5kZXggMzkxMzk2NmNmZGFjMDQuLmFkYmM1N2I5ZjQ5YzMzIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcbkBAIC0yNDIsNiAmIzQzOzI0Miw5IEBAIG9wcyBhbmQgbmVlZHMgdG8gZGVjbGFyZSBzcGVjaWZpYyBzdXBwb3J0IGZvciB0aGUgc3VwcG9ydGVkIHRyaWdnZXJzLlxuIFxuIFdpdGggaHcgY29udHJvbCB3ZSByZWZlciB0byB0aGUgTEVEIGRyaXZlbiBieSBoYXJkd2FyZS5cbiBcbiYjNDM7QSBzeXNmcyBhdHRyaWJ1dGUgYHRyaWdnZXJfbWF5X29mZmxvYWRgIGlzIHByb3ZpZGVkIGZvciB1c2Vyc3BhY2UgdG9cbiYjNDM7cXVlcnkgc3VwcG9ydGVkIHRyaWdnZXJzIGFuZCB0aGVpciBzdGF0ZXMuXG4mIzQzO1xuIExFRCBkcml2ZXIgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YWx1ZSB0byBzdXBwb3J0IGh3IGNvbnRyb2w6XG4gXG4gICAgIC0gaHdfY29udHJvbF90cmlnZ2VyOlxuQEAgLTI5OCw2ICYjNDM7MzAxLDE1IEBAIExFRCBkcml2ZXIgbXVzdCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gc3VwcG9ydCBodyBjb250cm9sOlxuICAgICAgICAgICAgICAgICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0cnVjdCBkZXZpY2Ugb3IgTlVMTCBpZiBub3RoaW5nXG4gICAgICAgICAgICAgICAgIGlzIGN1cnJlbnRseSBhdHRhY2hlZC5cbiBcbiYjNDM7TEVEIHRyaWdnZXIgc2hvdWxkIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEFQSSB0byBpbmRpY2F0ZSBodyBjb250cm9sOlxuJiM0MzsgICAgLSBvZmZsb2FkZWQ6XG4mIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHRyaWdnZXIgaXMgY3VycmVudGx5XG4mIzQzOyAgICAgICAgICAgICAgICBvZmZsb2FkZWQgdG8gaGFyZHdhcmUuXG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgSWYgYSB0cmlnZ2VyIGRvZXNuJiMzOTt0IGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLCB0aGUgZGVmYXVsdFxuJiM0MzsgICAgICAgICAgICAgICAgdmFsdWUgd2lsbCBiZSB0cnVlIGZvciBwcml2YXRlIHRyaWdnZXJzIGFuZCBmYWxzZSBmb3IgZ2VuZXJpY1xuJiM0MzsgICAgICAgICAgICAgICAgb25lcy5cbiYjNDM7XG4gTEVEIGRyaXZlciBjYW4gYWN0aXZhdGUgYWRkaXRpb25hbCBtb2RlcyBieSBkZWZhdWx0IHRvIHdvcmthcm91bmQgdGhlXG4gaW1wb3NzaWJpbGl0eSBvZiBzdXBwb3J0aW5nIGVhY2ggZGlmZmVyZW50IG1vZGUgb24gdGhlIHN1cHBvcnRlZCB0cmlnZ2VyLlxuIEV4YW1wbGVzIGFyZSBoYXJkY29kaW5nIHRoZSBibGluayBzcGVlZCB0byBhIHNldCBpbnRlcnZhbCwgZW5hYmxlIHNwZWNpYWxcbkBAIC0zMTEsOSAmIzQzOzMyMyw2OSBAQCB0aGUgZW5kIHVzZSBod19jb250cm9sX3NldCB0byBhY3RpdmF0ZSBodyBjb250cm9sLlxuIEEgdHJpZ2dlciBjYW4gdXNlIGh3X2NvbnRyb2xfZ2V0IHRvIGNoZWNrIGlmIGEgTEVEIGlzIGFscmVhZHkgaW4gaHcgY29udHJvbFxuIGFuZCBpbml0IHRoZWlyIGZsYWdzLlxuIFxuJiM0MztBbHRlcm5hdGl2ZWx5LCBhIHByaXZhdGUgdHJpZ2dlciBjYW4gYmUgaW1wbGVtZW50ZWQgYWxvbmcgd2l0aCB0aGUgTEVEIGRyaXZlciBpZlxuJiM0Mzt0aGUgTEVEJiMzOTtzIGhhcmR3YXJlIGNvbnRyb2wgZG9lc24mIzM5O3QgZml0IGFueSBnZW5lcmljIHRyaWdnZXIuIFRvIGFzc29jaWF0ZSB0aGVcbiYjNDM7cHJpdmF0ZSB0cmlnZ2VyIHdpdGggdGhlIExFRCBjbGFzc2RldiwgdGhlaXIgYHRyaWdnZXJfdHlwZWAgbXVzdCBiZSB0aGUgc2FtZS4gVG9cbiYjNDM7ZGVjbGFyZSB0aGF0IHRoZSBwcml2YXRlIHRyaWdnZXIgcHJvdmlkZXMgaGFyZHdhcmUgY29udHJvbCBmb3IgdGhlIGFzc29jaWF0ZWRcbiYjNDM7TEVEIGNsYXNzZGV2LCBzZXQgdGhlIGBod19jb250cm9sX3RyaWdnZXJgIHN0cmluZyB0byB0aGUgdHJpZ2dlciYjMzk7cyBuYW1lLiBTaW5jZVxuJiM0Mztib3RoIHRoZSBMRUQgY2xhc3NkZXYgYW5kIHRoZSBwcml2YXRlIHRyaWdnZXIgYXJlIGluIHRoZSBzYW1lIExFRCBkcml2ZXIsIGl0JiMzOTtzXG4mIzQzO25vdCBuZWNlc3NhcnkgZm9yIHRoZW0gdG8gY29vcmRpbmF0ZSB2aWEgYGh3X2NvbnRyb2xfKmAgY2FsbGJhY2tzLlxuJiM0MztcbiBXaGVuIHRoZSBMRUQgaXMgaW4gaHcgY29udHJvbCwgbm8gc29mdHdhcmUgYmxpbmsgaXMgcG9zc2libGUgYW5kIGRvaW5nIHNvXG4gd2lsbCBlZmZlY3RpdmVseSBkaXNhYmxlIGh3IGNvbnRyb2wuXG4gXG4mIzQzO0hhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25cbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7U29tZSBoYXJkd2FyZSBjYW4gYXV0b25vbW91c2x5IGFjdGl2YXRlL2RlYWN0aXZhdGUgaGFyZHdhcmUgY29udHJvbC4gQWZ0ZXIgdGhhdCxcbiYjNDM7dGhlIExFRCBoYXJkd2FyZSBub3RpZmllcyB0aGUgTEVEIGRyaXZlci5cbiYjNDM7XG4mIzQzO0lmIHRoZSBkcml2ZXIgY2FuIGRldGVjdCBzdWNoIHRyYW5zaXRpb25zIGFuZCB0aHVzIHdhbnRzIHRvIG5vdGlmeSB0aGUgTEVEIGNvcmVcbiYjNDM7dG8gdXBkYXRlIHRoZSBjdXJyZW50IHRyaWdnZXIgdGhlbiB0aGUgYExFRF9UUklHX0hXX0NIQU5HRURgIGZsYWcgbXVzdCBiZSBzZXQgaW5cbiYjNDM7ZmxhZ3MgYmVmb3JlIHJlZ2lzdGVyaW5nLiBUbyB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciBhY2NvcmRpbmdseSwgY2FsbFxuJiM0MztgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAgb24gdGhlIExFRCBjbGFzc2Rldi5cbiYjNDM7XG4mIzQzO1RoaXMgY2FwYWJpbGl0eSBpcyByZXN0cmljdGVkIHRvIHRoZSBMRUQgZGV2aWNlJiMzOTtzIHByaXZhdGUgdHJpZ2dlci4gVGhlIHByaXZhdGVcbiYjNDM7dHJpZ2dlciBtdXN0IGhhdmUgYmVlbiBwcm9wZXJseSByZWdpc3RlcmVkIChzZWUgYWJvdmUpIGFuZCBuYW1lZCBhZnRlclxuJiM0MztgaHdfY29udHJvbF90cmlnZ2VyYC5cbiYjNDM7XG4mIzQzO09ubHkgdHdvIHRyYW5zaXRpb25zIGFyZSBkZWZpbmVkOlxuJiM0MztcbiYjNDM7LSBcJiMzNDtub25lXCYjMzQ7ID1cdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyOlxuJiM0MzsgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2xcbiYjNDM7ICAgICAgICBhbmQgd2hlbiBcJiMzNDtub25lXCYjMzQ7IChpLmUuLCBubyB0cmlnZ2VyKSBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiB0aGUgcHJpdmF0ZVxuJiM0MzsgICAgICAgIHRyaWdnZXIgaXMgYWxyZWFkeSBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseVxuJiM0MzsgICAgICAgIGEgbm8tb3AuXG4mIzQzO1xuJiM0MzsgICAgICAgIFRoZSBhY3RpdmF0aW9uIHNlcXVlbmNlIGZvciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHdpbGwgYmUgZXhlY3V0ZWQgYXNcbiYjNDM7ICAgICAgICBub3JtYWwuXG4mIzQzO1xuJiM0MzsgICAgICAgIFRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgdGhlXG4mIzQzOyAgICAgICAgYWN0aXZhdGlvbiBzZXF1ZW5jZSBldmVuIGlmIHRoZSBoYXJkd2FyZSBpcyBjdXJyZW50bHkgaW4gaGFyZHdhcmVcbiYjNDM7ICAgICAgICBjb250cm9sLlxuJiM0MztcbiYjNDM7ICAgICAgICBJZiBlcnJvciBvY2N1cnMgaW4gdGhlIGFjdGl2YXRpb24gc2VxdWVuY2UsIHRoZSBMRUQgVHJpZ2dlciBjb3JlIHJldmVydHNcbiYjNDM7ICAgICAgICB0aGUgZWZmZWN0aXZlIHRyaWdnZXIgdG8gXCYjMzQ7bm9uZVwmIzM0Oy5cbiYjNDM7XG4mIzQzOy0gcHJpdmF0ZSB0cmlnZ2VyID1cdTAwM2UgXCYjMzQ7bm9uZVwmIzM0O1xuJiM0MzsgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0ZXMgaGFyZHdhcmUgY29udHJvbFxuJiM0MzsgICAgICAgIGFuZCB3aGVuIHRoZSBwcml2YXRlIHRyaWdnZXIgaXMgY3VycmVudGx5IGFjdGl2ZS4gSWYgXCYjMzQ7bm9uZVwmIzM0OyAoaS5lLiwgbm9cbiYjNDM7ICAgICAgICB0cmlnZ2VyKSBpcyBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseSBhXG4mIzQzOyAgICAgICAgbm8tb3AuXG4mIzQzO1xuJiM0MzsgICAgICAgIFRoZSBkZWFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhc1xuJiM0MzsgICAgICAgIG5vcm1hbCwgZXhjZXB0IHRoYXQgdGhlIGN1cnJlbnQgTEVEIGJyaWdodG5lc3MgaXMgcmV0YWluZWQuIFRoZSByZWFzb25cbiYjNDM7ICAgICAgICBmb3Iga2VlcGluZyB0aGUgYnJpZ2h0bmVzcyB1bmNoYW5nZWQgaXMgdGhhdCBzb21lIGhhcmR3YXJlIG1heSBjaG9vc2UgYVxuJiM0MzsgICAgICAgIHNwZWNpZmljIGJyaWdodG5lc3MgaW5zdGVhZCBvZiBzaW1wbHkgdHVybmluZyBvZmYgdGhlIExFRCBhZnRlclxuJiM0MzsgICAgICAgIGF1dG9ub21vdXNseSBkZWFjdGl2YXRpbmcgaGFyZHdhcmUgY29udHJvbC5cbiYjNDM7XG4mIzQzOyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGVcbiYjNDM7ICAgICAgICBkZWFjdGl2YXRpb24gc2VxdWVuY2UgZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXMgbm90IGN1cnJlbnRseSBpbiBoYXJkd2FyZVxuJiM0MzsgICAgICAgIGNvbnRyb2wuXG4mIzQzO1xuJiM0MztJZiB0aGUgY3VycmVudCB0cmlnZ2VyIGlzIG5laXRoZXIgdGhlIHByaXZhdGUgdHJpZ2dlciBub3IgXCYjMzQ7bm9uZVwmIzM0Oywgbm8gdHJhbnNpdGlvblxuJiM0Mzt3aWxsIGJlIG1hZGUuXG4mIzQzO1xuIEtub3duIElzc3Vlc1xuID09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuY1xuaW5kZXggYTUxYjBlZDUzODg2NDQuLjI0NjBmY2YwYzQ2OTBhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcbkBAIC0yNywxNiAmIzQzOzI3LDYgQEAgc3RhdGljIExJU1RfSEVBRChsZWRzX2xvb2t1cF9saXN0KTtcbiBcbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmxlZHNfd3E7XG4gXG4tc3RhdGljIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbi17XG4tI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG4tXHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuLVx0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXIgXHUwMDI2XHUwMDI2IGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNldHJpZ2dlcl90eXBlO1xuLSNlbHNlXG4tXHRyZXR1cm4gZmFsc2U7XG4tI2VuZGlmXG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuQEAgLTc0LDYgJiM0Mzs2NCw5IEBAIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIFxuIFx0aWYgKHN0YXRlID09IExFRF9PRkYpXG4gXHRcdGxlZF90cmlnZ2VyX3JlbW92ZShsZWRfY2Rldik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wobGVkX2NkZXYpO1xuJiM0MztcbiBcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2Rldiwgc3RhdGUpO1xuIFxuIFx0cmV0ID0gc2l6ZTtcbkBAIC0xMDMsOCAmIzQzOzk2LDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqY29uc3QgbGVkX3RyaWdnZXJfYmluX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZiaW5fYXR0cl90cmlnZ2VyLFxuIFx0TlVMTCxcbiB9O1xuJiM0MztcbiYjNDM7c3RhdGljIERFVklDRV9BVFRSX1JPKHRyaWdnZXJfbWF5X29mZmxvYWQpO1xuJiM0MztzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbGVkX3RyaWdnZXJfYXR0cnNbXSA9IHtcbiYjNDM7XHRcdTAwMjZkZXZfYXR0cl90cmlnZ2VyX21heV9vZmZsb2FkLmF0dHIsXG4mIzQzO1x0TlVMTFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHVtb2RlX3QgbGVkX3RyaWdnZXJfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuJiM0MztcdFx0XHRcdCAgICAgIGludCBpZHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBrb2JqX3RvX2Rldihrb2JqKTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoYXR0ciA9PSBcdTAwMjZkZXZfYXR0cl90cmlnZ2VyX21heV9vZmZsb2FkLmF0dHIpXG4mIzQzO1x0XHRyZXR1cm4gbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID8gYXR0ci1cdTAwM2Vtb2RlIDogMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGF0dHItXHUwMDNlbW9kZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsZWRfdHJpZ2dlcl9ncm91cCA9IHtcbiBcdC5iaW5fYXR0cnMgPSBsZWRfdHJpZ2dlcl9iaW5fYXR0cnMsXG4mIzQzO1x0LmF0dHJzID0gbGVkX3RyaWdnZXJfYXR0cnMsXG4mIzQzO1x0LmlzX3Zpc2libGUgPSBsZWRfdHJpZ2dlcl9pc192aXNpYmxlLFxuIH07XG4gI2VuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jIGIvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jXG5pbmRleCBiMTIyMzIxOGJkYTExMy4uNmFlMjhjYmQxYzc3ODMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xuQEAgLTcsOSAmIzQzOzcsMTIgQEBcbiAgKiBBdXRob3I6IFJpY2hhcmQgUHVyZGllIFx1MDAzY3JwdXJkaWVAb3BlbmVkaGFuZC5jb21cdTAwM2VcbiAgKi9cbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2NrZGVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lci5oXHUwMDNlXG5AQCAtMzMsNiAmIzQzOzM2LDMzIEBAIHRyaWdnZXJfcmVsZXZhbnQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiBcdHJldHVybiAhdHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgfHwgdHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoIWxlZF9jZGV2LVx1MDAzZXRyaWdnZXIpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyIHx8XG4mIzQzO1x0ICAgIHN0cmNtcChsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIsIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlbmFtZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW9mZmxvYWRlZClcbiYjNDM7XHRcdHJldHVybiBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW9mZmxvYWRlZChsZWRfY2Rldik7XG4mIzQzO1xuJiM0MztcdGRldl93YXJuX29uY2UobGVkX2NkZXYtXHUwMDNlZGV2LCBcJiMzNDtodyBjb250cm9sIHRyaWdnZXIgJXMgZG9lc24mIzM5O3QgaW1wbGVtZW50IG9mZmxvYWRlZCgpXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgbGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2VuYW1lKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNldHJpZ2dlcl90eXBlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuJiM0MztcdHJldHVybiBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQpO1xuJiM0MztcbiBzc2l6ZV90IGxlZF90cmlnZ2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLFxuIFx0XHRcdCAgbG9mZl90IHBvcywgc2l6ZV90IGNvdW50KVxuQEAgLTE2Myw3ICYjNDM7MTkzLDggQEAgc3NpemVfdCBsZWRfdHJpZ2dlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZWFkKTtcbiBcbiAvKiBDYWxsZXIgbXVzdCBlbnN1cmUgbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrIGhlbGQgKi9cbi1pbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4mIzQzO3N0YXRpYyBpbnQgX19sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcbiYjNDM7XHRcdFx0ICAgICBib29sIGh3X3RyaWdnZXJlZClcbiB7XG4gXHRjaGFyICpldmVudCA9IE5VTEw7XG4gXHRjaGFyICplbnZwWzJdO1xuQEAgLTE5NCw3ICYjNDM7MjI1LDIxIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiBcdFx0bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9kYXRhID0gTlVMTDtcbiBcdFx0bGVkX2NkZXYtXHUwMDNlYWN0aXZhdGVkID0gZmFsc2U7XG4gXHRcdGxlZF9jZGV2LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkxFRF9JTklUX0RFRkFVTFRfVFJJR0dFUjtcbi1cdFx0bGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBMRURfT0ZGKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSGFyZHdhcmUgbWF5IGhhdmUgc2VsZWN0ZWQgYSBuZXcgYnJpZ2h0bmVzcyBsZXZlbCBkdXJpbmcgaXRzXG4mIzQzO1x0XHQgKiBoYXJkd2FyZSBjb250cm9sIHRyYW5zaXRpb24sIHNvIG9ubHkgcmVzZXQgYnJpZ2h0bmVzcyBpZiB3ZVxuJiM0MztcdFx0ICogYXJlIHN3aXRjaGluZyB0byBhbm90aGVyIHRyaWdnZXIgb3IgaWYgdGhlIHN3aXRjaGluZyBpcyBub3RcbiYjNDM7XHRcdCAqIGhhcmR3YXJlIHRyaWdnZXJlZC5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgZXJyb3IgcGF0aCwgYXMgcnVubmluZ1xuJiM0MztcdFx0ICogaW50byB0aGUgZXJyb3IgcGF0aCBpbXBsaWVzIGEgbm9uZSA9XHUwMDNlIHByaXZhdGUgdHJpZ2dlclxuJiM0MztcdFx0ICogdHJhbnNpdGlvbi4gVGhpcyBoaW50cyB0aGF0IHRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZVxuJiM0MztcdFx0ICogdHJpZ2dlciBtdXN0IGhhdmUgc29tZSBmdW5kYW1lbnRhbCBidWdzLCBzbyBkb24mIzM5O3QgYm90aGVyXG4mIzQzO1x0XHQgKiBsZWF2aW5nIHRoZSBMRUQgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodHJpZyB8fCAhaHdfdHJpZ2dlcmVkKVxuJiM0MztcdFx0XHRsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIExFRF9PRkYpO1xuIFx0fVxuIFx0aWYgKHRyaWcpIHtcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnRyaWctXHUwMDNlbGVkZGV2X2xpc3RfbG9jayk7XG5AQCAtMjU4LDYgJiM0MzszMDMsMTEgQEAgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzO1xuJiM0MztpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19sZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIHRyaWcsIGZhbHNlKTtcbiYjNDM7fVxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldCk7XG4gXG4gdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG5AQCAtMjY4LDYgJiM0MzszMTgsMTUgQEAgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZSk7XG4gXG4mIzQzO3ZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2RldikpXG4mIzQzO1x0XHRsZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKTtcbiYjNDM7XG4gc3RhdGljIGJvb2wgbGVkX21hdGNoX2RlZmF1bHRfdHJpZ2dlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiB7XG5AQCAtMzEzLDYgJiM0MzszNzIsMzIgQEAgdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQpO1xuIFxuJiM0Mztzc2l6ZV90IHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcdHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZztcbiYjNDM7XHRib29sIGhpdCwgb2ZmbG9hZGVkO1xuJiM0MztcdGludCBsZW47XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZsZWRfY2Rldi1cdTAwM2VsZWRfYWNjZXNzKTtcbiYjNDM7XHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuJiM0MztcbiYjNDM7XHR0cmlnID0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcjtcbiYjNDM7XG4mIzQzO1x0b2ZmbG9hZGVkID0gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRoaXQgPSBvZmZsb2FkZWQgfHwgKHRyaWcgXHUwMDI2XHUwMDI2ICFzdHJjbXAobGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLCB0cmlnLVx1MDAzZW5hbWUpKTtcbiYjNDM7XG4mIzQzO1x0LyogW29mZmxvYWRlZF0gXHUwMDNjYWN0aXZlX2J1dF9ub3Rfb2ZmbG9hZGVkXHUwMDNlIGluYWN0aXZlICovXG4mIzQzO1x0bGVuID0gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVzJXMlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0IG9mZmxvYWRlZCA/IFwmIzM0O1tcJiMzNDsgOiAoaGl0ID8gXCYjMzQ7XHUwMDNjXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KSxcbiYjNDM7XHRcdFx0IGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcixcbiYjNDM7XHRcdFx0IG9mZmxvYWRlZCA/IFwmIzM0O11cJiMzNDsgOiAoaGl0ID8gXCYjMzQ7XHUwMDNlXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBsZW47XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KTtcbiYjNDM7XG4gLyogTEVEIFRyaWdnZXIgSW50ZXJmYWNlICovXG4gXG4gaW50IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbkBAIC00MDMsNiAmIzQzOzQ4OCw2MyBAQCBpbnQgZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIpO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuJiM0MztzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24oc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKmhjX3RyaWcpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyKSB7XG4mIzQzO1x0XHQvKiBcJiMzNDtub25lXCYjMzQ7ID1cdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyLiAqL1xuJiM0MztcdFx0aWYgKGFjdGl2YXRlKVxuJiM0MztcdFx0XHRlcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgaGNfdHJpZywgdHJ1ZSk7XG4mIzQzO1x0fSBlbHNlIGlmIChsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyID09IGhjX3RyaWcpIHtcbiYjNDM7XHRcdC8qIHByaXZhdGUgdHJpZ2dlciA9XHUwMDNlIFwmIzM0O25vbmVcJiMzNDsuICovXG4mIzQzO1x0XHRpZiAoIWFjdGl2YXRlKVxuJiM0MztcdFx0XHRlcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgTlVMTCwgdHJ1ZSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIE90aGVyIHRyaWdnZXIgaXMgYWN0aXZlLiAqL1xuJiM0MztcdFx0ZGV2X2RiZyhsZWRfY2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O0lnbm9yaW5nIGh3IGNvbnRyb2wgdHJhbnNpdGlvbiAoJXMgJXMpIHdoaWxlICVzIGlzIGFjdGl2ZVwmIzM0OyxcbiYjNDM7XHRcdFx0YWN0aXZhdGUgPyBcJiMzNDthY3RpdmF0ZVwmIzM0OyA6IFwmIzM0O2RlYWN0aXZhdGVcJiMzNDssIGhjX3RyaWctXHUwMDNlbmFtZSxcbiYjNDM7XHRcdFx0bGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2VuYW1lKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0ZGV2X3dhcm4obGVkX2NkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gJXMgJXMgaW4gaHcgY29udHJvbCB0cmFuc2l0aW9uOiAlZFwmIzM0OyxcbiYjNDM7XHRcdFx0IGFjdGl2YXRlID8gXCYjMzQ7YWN0aXZhdGVcJiMzNDsgOiBcJiMzNDtkZWFjdGl2YXRlXCYjMzQ7LCBoY190cmlnLVx1MDAzZW5hbWUsIGVycik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZztcbiYjNDM7XG4mIzQzO1x0LyogUmVzdHJpY3RlZCB0byBwcml2YXRlIHRyaWdnZXJzLiAqL1xuJiM0MztcdGlmIChXQVJOX09OKCEobGVkX2NkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IExFRF9UUklHX0hXX0NIQU5HRUQpIHx8XG4mIzQzO1x0XHQgICAgIWxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciB8fCAhbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsIFx1MDAyNnRyaWdnZXJzX2xpc3RfbG9jaykge1xuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0cmlnLCBcdTAwMjZ0cmlnZ2VyX2xpc3QsIG5leHRfdHJpZykge1xuJiM0MztcdFx0XHRpZiAodHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIXN0cmNtcCh0cmlnLVx1MDAzZW5hbWUsIGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcikpIHtcbiYjNDM7XHRcdFx0XHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0bGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKGxlZF9jZGV2LCBhY3RpdmF0ZSwgdHJpZyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZfZXJyKGxlZF9jZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFwmIzM0OyVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0X19mdW5jX18sIGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcik7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXG4mIzQzO1xuIC8qIFNpbXBsZSBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi9cbiBcbiB2b2lkIGxlZF90cmlnZ2VyX2V2ZW50KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcbmluZGV4IDE4NDRkMGNkNWY1Mjg0Li42ZGI4M2QwMTUyNzc1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jXG5AQCAtODUsMTIgJiM0Mzs4NSwxOCBAQCBzdGF0aWMgaW50IGNyb3NfZWNfbGVkX3RyaWdnZXJfYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gXHRyZXR1cm4gY3Jvc19lY19sZWRfc2VuZF9jbWQocHJpdi1cdTAwM2Vjcm9zX2VjLCBcdTAwMjZhcmcpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgY3Jvc19lY19sZWRfdHJpZ2dlcl9vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgY3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgY3Jvc19lY19sZWRfdHJpZ2dlciA9IHtcbiBcdC5uYW1lID0gXCYjMzQ7Y2hyb21lb3MtYXV0b1wmIzM0OyxcbiBcdC50cmlnZ2VyX3R5cGUgPSBcdTAwMjZjcm9zX2VjX2xlZF90cmlnZ2VyX3R5cGUsXG4gXHQuYWN0aXZhdGUgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX2FjdGl2YXRlLFxuJiM0MztcdC5vZmZsb2FkZWQgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xuaW5kZXggZWQ2YTQ3YmJiNDRmOWMuLjMyZDQwZDE3NmQzZjExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jXG5AQCAtMTk1LDEwICYjNDM7MTk1LDE2IEBAIHN0YXRpYyB2b2lkIG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpXG4gXHRcdFx0ZXJyKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIG9tbmlhX2h3dHJpZ19vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgb21uaWFfaHdfdHJpZ2dlciA9IHtcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7b21uaWEtbWN1XCYjMzQ7LFxuIFx0LmFjdGl2YXRlXHQ9IG9tbmlhX2h3dHJpZ19hY3RpdmF0ZSxcbiBcdC5kZWFjdGl2YXRlXHQ9IG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlLFxuJiM0MztcdC5vZmZsb2FkZWRcdD0gb21uaWFfaHd0cmlnX29mZmxvYWRlZCxcbiBcdC50cmlnZ2VyX3R5cGVcdD0gXHUwMDI2b21uaWFfaHdfdHJpZ2dlcl90eXBlLFxuIH07XG4gXG5AQCAtMjUxLDYgJiM0MzsyNTcsNyBAQCBzdGF0aWMgaW50IG9tbmlhX2xlZF9yZWdpc3RlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3Qgb21uaWFfbGVkICpsZWQsXG4gXHQgKiBieSBMRUQgY2xhc3MgZnJvbSB0aGUgbGludXgsZGVmYXVsdC10cmlnZ2VyIHByb3BlcnR5LlxuIFx0ICovXG4gXHRjZGV2LVx1MDAzZWRlZmF1bHRfdHJpZ2dlciA9IG9tbmlhX2h3X3RyaWdnZXIubmFtZTtcbiYjNDM7XHRjZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IG9tbmlhX2h3X3RyaWdnZXIubmFtZTtcbiBcbiBcdC8qIFB1dCB0aGUgTEVEIGludG8gc29mdHdhcmUgbW9kZSAqL1xuIFx0cmV0ID0gb21uaWFfY21kX3dyaXRlX3U4KGNsaWVudCwgT01OSUFfQ01EX0xFRF9NT0RFLCBPTU5JQV9DTURfTEVEX01PREVfTEVEKGxlZC1cdTAwM2VyZWcpIHxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy5oIGIvZHJpdmVycy9sZWRzL2xlZHMuaFxuaW5kZXggYmVlNDY2NTFlMDY4ZjcuLmIwOGEyODkzOTdlNDYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZHMuaFxuQEAgLTI3LDYgJiM0MzsyNyw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsXG4gXHRcdFx0bG9mZl90IHBvcywgc2l6ZV90IGNvdW50KTtcbiYjNDM7c3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTtcbiBcbiBleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBsZWRzX2xpc3RfbG9jaztcbiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBsZWRzX2xpc3Q7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdcbmluZGV4IGMxMTI4MmE3NGI1YWMzLi43OTgxMjIxNTQwNDliNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdcbkBAIC05LDYgJiM0Mzs5LDE1IEBAIG1lbnVjb25maWcgTEVEU19UUklHR0VSU1xuIFxuIGlmIExFRFNfVFJJR0dFUlNcbiBcbiYjNDM7Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuJiM0MztcdGJvb2wgXCYjMzQ7TEVEIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb24gc3VwcG9ydFwmIzM0O1xuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgaGFyZHdhcmUgaW5pdGlhdGVkIGhhcmR3YXJlIGNvbnRyb2xcbiYjNDM7XHQgIHRyYW5zaXRpb25zLCB3aGVyZSB0aGUgTEVEIGhhcmR3YXJlIGF1dG9ub21vdXNseSBzd2l0Y2hlcyBiZXR3ZWVuXG4mIzQzO1x0ICBcJiMzNDtub25lXCYjMzQ7IChpLmUuLCBubyB0cmlnZ2VyKSBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlci5cbiYjNDM7XG4mIzQzO1x0ICBTZWUgRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0IGZvciBkZXRhaWxzLlxuJiM0MztcbiBjb25maWcgTEVEU19UUklHR0VSX1RJTUVSXG4gXHR0cmlzdGF0ZSBcJiMzNDtMRUQgVGltZXIgVHJpZ2dlclwmIzM0O1xuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG5pbmRleCA2NGMwNzhlOTk3ZjI4YS4uYTI2MTA5Y2E0YjFjOWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG5AQCAtNzU0LDEwICYjNDM7NzU0LDE4IEBAIHN0YXRpYyB2b2lkIG5ldGRldl90cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gXHRrZnJlZSh0cmlnZ2VyX2RhdGEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxlZF9uZXRkZXZfZGF0YSAqdHJpZ2dlcl9kYXRhID0gbGVkX2dldF90cmlnZ2VyX2RhdGEobGVkX2NkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJpZ2dlcl9kYXRhLVx1MDAzZWh3X2NvbnRyb2w7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBuZXRkZXZfbGVkX3RyaWdnZXIgPSB7XG4gXHQubmFtZSA9IFwmIzM0O25ldGRldlwmIzM0OyxcbiBcdC5hY3RpdmF0ZSA9IG5ldGRldl90cmlnX2FjdGl2YXRlLFxuIFx0LmRlYWN0aXZhdGUgPSBuZXRkZXZfdHJpZ19kZWFjdGl2YXRlLFxuJiM0MztcdC5vZmZsb2FkZWQgPSBuZXRkZXZfdHJpZ19vZmZsb2FkZWQsXG4gXHQuZ3JvdXBzID0gbmV0ZGV2X3RyaWdfZ3JvdXBzLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xuaW5kZXggNDQ0M2Y0MGVmOGFhN2UuLmU5MmIxZTkwMDc5NTEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnXG5AQCAtMTYsNiAmIzQzOzE2LDcgQEAgY29uZmlnIElERUFQQURfTEFQVE9QXG4gXHRzZWxlY3QgSU5QVVRfU1BBUlNFS01BUFxuIFx0c2VsZWN0IE5FV19MRURTXG4gXHRzZWxlY3QgTEVEU19DTEFTU1xuJiM0MztcdHNlbGVjdCBMRURTX1RSSUdHRVJTXG4gXHRoZWxwXG4gXHQgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIExlbm92byBJZGVhUGFkIG5ldGJvb2tzIGNvbnRhaW5zIGRyaXZlcnMgZm9yXG4gXHQgIHJma2lsbCBzd2l0Y2gsIGhvdGtleSwgZmFuIGNvbnRyb2wgYW5kIGJhY2tsaWdodCBjb250cm9sLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmNcbmluZGV4IDRmYmM5MDRmMWZjMzkwLi4yNTNkMjk2MmI5Mjc2MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xuQEAgLTksNiAmIzQzOzksNyBAQFxuICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10XG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2xpZ2h0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbkBAIC0yNSw3ICYjNDM7MjYsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ppZmZpZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvY2tkZXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX3Byb2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bvd2VyX3N1cHBseS5oXHUwMDNlXG5AQCAtMTM0LDEwICYjNDM7MTM3LDMxIEBAIGVudW0ge1xuIH07XG4gXG4gLypcbi0gKiBUaGVzZSBjb3JyZXNwb25kIHRvIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIHN0YXRlcyAtIDFcbi0gKiBGdXR1cmUga2V5Ym9hcmQgdHlwZXMgbWF5IG5lZWQgYSBuZXcgc3lzdGVtLCBpZiB0aGVyZSYjMzk7cyBhIGNvbGxpc2lvblxuLSAqIEtCRF9CTF9UUklTVEFURV9BVVRPIGhhcyBubyB3YXkgdG8gcmVwb3J0IG9yIHNldCB0aGUgYXV0byBzdGF0ZVxuLSAqIHNvIGl0IGVmZmVjdGl2ZWx5IGhhcyAzIHN0YXRlcywgYnV0IG5lZWRzIHRvIGhhbmRsZSA0XG4mIzQzOyAqIFRoZSBlbnVtZXJhdGlvbiBoYXMgdHdvIHB1cnBvc2VzOlxuJiM0MzsgKiAgIC0gYXMgYW4gaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYWxsIGtub3duIHR5cGVzIG9mIGtleWJvYXJkIGJhY2tsaWdodFxuJiM0MzsgKiAgIC0gYXMgYSBtYW5kYXRvcnkgcGFyYW1ldGVyIG9mIHRoZSBLQkxDIGNvbW1hbmRcbiYjNDM7ICpcbiYjNDM7ICogRm9yIGVhY2ggdHlwZSwgdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgdmFsdWVzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgICAgICBIYXJkd2FyZSBicmlnaHRuZXNzIHwgICAgICAgIDAgfCAgIDEgfCAgICAyIHwgICAgMyB8XG4mIzQzOyAqIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgS0JEX0JMX1NUQU5EQVJEICAgICAgICAgIHwgICAgICBvZmYgfCAgb24gfCAgTi9BIHwgIE4vQSB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgS0JEX0JMX1RSSVNUQVRFICAgICAgICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgIE4vQSB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgS0JEX0JMX1RSSVNUQVRFX0FVVE8gICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgYXV0byB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqXG4mIzQzOyAqIFdlIG1hcCBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyBmb3IgS0JEX0JMX1RSSVNUQVRFX0FVVE8gYXMgZm9sbG93czpcbiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgIExFRCBjbGFzc2RldiBicmlnaHRuZXNzIHwgICAgICAgIDAgfCAgIDEgfCAgICAyIHxcbiYjNDM7ICogfCBPcGVyYXRpb24gICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8ICAgICAgfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MztcbiYjNDM7ICogfCBSZWFkICAgICAgICAgICAgICAgICAgICAgfCBvZmYvYXV0byB8IGxvdyB8IGhpZ2ggfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MztcbiYjNDM7ICogfCBXcml0ZSAgICAgICAgICAgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MztcbiAgKi9cbiBlbnVtIHtcbiBcdEtCRF9CTF9TVEFOREFSRCAgICAgID0gMSxcbkBAIC0xNDUsNiAmIzQzOzE2OSw4IEBAIGVudW0ge1xuIFx0S0JEX0JMX1RSSVNUQVRFX0FVVE8gPSAzLFxuIH07XG4gXG4mIzQzOyNkZWZpbmUgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTXHQzXG4mIzQzO1xuICNkZWZpbmUgS0JEX0JMX1FVRVJZX1RZUEVcdFx0MHgxXG4gI2RlZmluZSBLQkRfQkxfVFJJU1RBVEVfVFlQRVx0XHQweDVcbiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9BVVRPX1RZUEVcdDB4N1xuQEAgLTIwMyw3ICYjNDM7MjI5LDkgQEAgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSB7XG4gXHRcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRcdGludCB0eXBlO1xuIFx0XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZDtcbi1cdFx0dW5zaWduZWQgaW50IGxhc3RfYnJpZ2h0bmVzcztcbiYjNDM7XHRcdGF0b21pY190IGxhc3RfaHdfYnJpZ2h0bmVzcztcbiYjNDM7XG4mIzQzO1x0XHRzdHJ1Y3QgbXV0ZXggbm90aWZfbXV0ZXg7IC8qIHByb3RlY3RzIG5vdGlmaWNhdGlvbnMgKi9cbiBcdH0ga2JkX2JsO1xuIFx0c3RydWN0IHtcbiBcdFx0Ym9vbCBpbml0aWFsaXplZDtcbkBAIC0xNTkyLDcgJiM0MzsxNjIwLDI0IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUoaW50IHR5cGUpXG4gXHRyZXR1cm4gKHR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFKSB8fCAodHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIGludCBod19icmlnaHRuZXNzKVxuJiM0Mzt7XG4mIzQzO1x0LyogT2ZmLCBsb3cgb3IgaGlnaCAqL1xuJiM0MztcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYz0gcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxuJiM0MztcdFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XG4mIzQzO1xuJiM0MztcdC8qIEF1dG8gKGNvbnRyb2xsZWQgYnkgRUMgYWNjb3JkaW5nIHRvIEFMUyksIHJlcG9ydCBhcyBvZmYgKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VrYmRfYmwudHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogVW5rbm93biB2YWx1ZSAqL1xuJiM0MztcdGRldl93YXJuKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldixcbiYjNDM7XHRcdCBcJiMzNDtVbmtub3duIGtleWJvYXJkIGJhY2tsaWdodCB2YWx1ZTogJWRcJiMzNDssIGh3X2JyaWdodG5lc3MpO1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB2YWx1ZTtcbiBcdGludCBlcnI7XG5AQCAtMTYwNiwyMSAmIzQzOzE2NTEsNyBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcbi1cdFx0LyogQ29udmVydCByZXR1cm5lZCB2YWx1ZSB0byBicmlnaHRuZXNzIGxldmVsICovXG4tXHRcdHZhbHVlID0gRklFTERfR0VUKEtCRF9CTF9HRVRfQlJJR0hUTkVTUywgdmFsdWUpO1xuLVxuLVx0XHQvKiBPZmYsIGxvdyBvciBoaWdoICovXG4tXHRcdGlmICh2YWx1ZSBcdTAwM2M9IHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcbi1cdFx0XHRyZXR1cm4gdmFsdWU7XG4tXG4tXHRcdC8qIEF1dG8sIHJlcG9ydCBhcyBvZmYgKi9cbi1cdFx0aWYgKHZhbHVlID09IHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyAmIzQzOyAxKVxuLVx0XHRcdHJldHVybiAwO1xuLVxuLVx0XHQvKiBVbmtub3duIHZhbHVlICovXG4tXHRcdGRldl93YXJuKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldixcbi1cdFx0XHQgXCYjMzQ7VW5rbm93biBrZXlib2FyZCBiYWNrbGlnaHQgdmFsdWU6ICVsdVwmIzM0OywgdmFsdWUpO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdHJldHVybiBGSUVMRF9HRVQoS0JEX0JMX0dFVF9CUklHSFRORVNTLCB2YWx1ZSk7XG4gXHR9XG4gXG4gXHRlcnIgPSBldmFsX2hhbHMocHJpdi1cdTAwM2VhZGV2LVx1MDAzZWhhbmRsZSwgXHUwMDI2dmFsdWUpO1xuQEAgLTE2MzAsNiAmIzQzOzE2NjEsMTYgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIFx0cmV0dXJuICEhdGVzdF9iaXQoSEFMU19LQkRfQkxfU1RBVEVfQklULCBcdTAwMjZ2YWx1ZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoaHdfYnJpZ2h0bmVzcyBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBod19icmlnaHRuZXNzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB7XG4gXHRzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTtcbkBAIC0xNjM3LDYyICYjNDM7MTY3OCwxMjMgQEAgc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGxlZF9jbGFcbiBcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcbiB9XG4gXG4tc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCB1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzcylcbiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCBpbnQgaHdfYnJpZ2h0bmVzcylcbiB7XG4tXHRpbnQgZXJyO1xuIFx0dW5zaWduZWQgbG9uZyB2YWx1ZTtcbiBcdGludCB0eXBlID0gcHJpdi1cdTAwM2VrYmRfYmwudHlwZTtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7XG4tXHRcdGlmIChicmlnaHRuZXNzIFx1MDAzZSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGJyaWdodG5lc3MpIHxcbiYjNDM7XHRcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGh3X2JyaWdodG5lc3MpIHxcbiBcdFx0XHRGSUVMRF9QUkVQKEtCRF9CTF9DT01NQU5EX1RZUEUsIHR5cGUpIHxcbiBcdFx0XHRLQkRfQkxfQ09NTUFORF9TRVQ7XG4gXHRcdGVyciA9IGV4ZWNfa2JsYyhwcml2LVx1MDAzZWFkZXYtXHUwMDNlaGFuZGxlLCB2YWx1ZSk7XG4gXHR9IGVsc2Uge1xuLVx0XHRlcnIgPSBleGVjX3NhbHMocHJpdi1cdTAwM2VhZGV2LVx1MDAzZWhhbmRsZSwgYnJpZ2h0bmVzcyA/IFNBTFNfS0JEX0JMX09OIDogU0FMU19LQkRfQkxfT0ZGKTtcbiYjNDM7XHRcdHZhbHVlID0gaHdfYnJpZ2h0bmVzcyA/IFNBTFNfS0JEX0JMX09OIDogU0FMU19LQkRfQkxfT0ZGO1xuJiM0MztcdFx0ZXJyID0gZXhlY19zYWxzKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIHZhbHVlKTtcbiBcdH1cbi1cbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCBpbnQgYnJpZ2h0bmVzcylcbiYjNDM7e1xuJiM0MztcdGlmIChicmlnaHRuZXNzIFx1MDAzZSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4gXHRcdFx0XHRcdFx0ICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4ge1xuIFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIGRlaW5pdGlhbGl6aW5nOiBJdCBtdXN0IGJlIHRoZSBzaWRlIGVmZmVjdCBvZiBsZWRfY2RldlxuJiM0MztcdCAqIHVucmVnaXN0cmF0aW9uIHdoZW4gb3VyIHByaXZhdGUgdHJpZ2dlciBpcyBhY3RpdmUuIFdlJiMzOTt2ZSBzZXRcbiYjNDM7XHQgKiBMRURfUkVUQUlOX0FUX1NIVVRET1dOIHRvIHJldGFpbiBsZWRfY2RldiBicmlnaHRuZXNzIGxldmVsLlxuJiM0MztcdCAqIFRvIGRvIHRoZSBzYW1lIGZvciBhdXRvIG1vZGUsIGdhdGUgY2hhbmdlcyBhbmQgcmV0dXJuIGVhcmx5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseSghcHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzKSA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlciA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O2lkZWFwYWQtYXV0b1wmIzM0OyxcbiYjNDM7XHQudHJpZ2dlcl90eXBlID0gXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGUsXG4mIzQzO1x0LmFjdGl2YXRlID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlLFxuJiM0MztcdC5vZmZsb2FkZWQgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBpbnQgaHdfYnJpZ2h0bmVzcywgaW50IGxhc3RfaHdfYnJpZ2h0bmVzcylcbiYjNDM7e1xuJiM0MztcdGJvb2wgaHdfY29udHJvbCwgbGFzdF9od19jb250cm9sO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VrYmRfYmwudHlwZSAhPSBLQkRfQkxfVFJJU1RBVEVfQVVUTylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aHdfY29udHJvbCA9IGh3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTO1xuJiM0MztcdGxhc3RfaHdfY29udHJvbCA9IGxhc3RfaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XG4mIzQzO1xuJiM0MztcdGlmIChod19jb250cm9sICE9IGxhc3RfaHdfY29udHJvbClcbiYjNDM7XHRcdGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGVkLCBod19jb250cm9sKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnkoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiB7XG4tXHRpbnQgYnJpZ2h0bmVzcztcbiYjNDM7XHRpbnQgaHdfYnJpZ2h0bmVzcywgYnJpZ2h0bmVzcywgbGFzdF9od19icmlnaHRuZXNzO1xuIFxuIFx0aWYgKCFwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuLVx0aWYgKGJyaWdodG5lc3MgXHUwMDNjIDApXG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLm5vdGlmX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0aHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuJiM0MztcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoYnJpZ2h0bmVzcyA9PSBwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MpXG4mIzQzO1x0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XG4mIzQzO1x0aWYgKGJyaWdodG5lc3MgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47IC8qIFJlamVjdCBpbnNhbmUgdmFsdWVzIGVhcmx5LiAqL1xuJiM0MztcbiYjNDM7XHRsYXN0X2h3X2JyaWdodG5lc3MgPSBhdG9taWNfeGNoZyhcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MsIGh3X2JyaWdodG5lc3MpO1xuJiM0MztcdGlmIChod19icmlnaHRuZXNzID09IGxhc3RfaHdfYnJpZ2h0bmVzcylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzcztcbiYjNDM7XHRpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChwcml2LCBod19icmlnaHRuZXNzLCBsYXN0X2h3X2JyaWdodG5lc3MpO1xuIFxuIFx0bGVkX2NsYXNzZGV2X25vdGlmeV9icmlnaHRuZXNzX2h3X2NoYW5nZWQoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGVkLCBicmlnaHRuZXNzKTtcbiB9XG4gXG4gc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9pbml0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4ge1xuLVx0aW50IGJyaWdodG5lc3MsIGVycjtcbiYjNDM7XHRpbnQgaHdfYnJpZ2h0bmVzcywgZXJyO1xuIFxuIFx0aWYgKCFwcml2LVx1MDAzZWZlYXR1cmVzLmtiZF9ibClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG5AQCAtMTcwMCwyOCAmIzQzOzE4MDIsNjggQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9pbml0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4gXHRpZiAoV0FSTl9PTihwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCkpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuLVx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHByaXYtXHUwMDNla2JkX2JsLnR5cGUpKVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyO1xuLVx0ZWxzZVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAxO1xuJiM0MztcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsIFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLm5vdGlmX211dGV4KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcbi1cdGlmIChicmlnaHRuZXNzIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gYnJpZ2h0bmVzcztcbiYjNDM7XHRod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7XG4mIzQzO1x0aWYgKGh3X2JyaWdodG5lc3MgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gaHdfYnJpZ2h0bmVzcztcbiYjNDM7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MsIGh3X2JyaWdodG5lc3MpO1xuIFxuLVx0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzcztcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5uYW1lICAgICAgICAgICAgICAgICAgICA9IFwmIzM0O3BsYXRmb3JtOjpcJiMzNDsgTEVEX0ZVTkNUSU9OX0tCRF9CQUNLTElHSFQ7XG4gXHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuYnJpZ2h0bmVzc19nZXQgICAgICAgICAgPSBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldDtcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5icmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0O1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmZsYWdzICAgICAgICAgICAgICAgICAgID0gTEVEX0JSSUdIVF9IV19DSEFOR0VEIHwgTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcbiBcbi1cdGVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsIFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLmxlZCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdHN3aXRjaCAocHJpdi1cdTAwM2VrYmRfYmwudHlwZSkge1xuJiM0MztcdGNhc2UgS0JEX0JMX1RSSVNUQVRFX0FVVE86XG4mIzQzO1x0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyO1xuIFxuJiM0MztcdFx0aWYgKCFpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCkge1xuJiM0MztcdFx0XHRkZXZfd2FybihcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O0NvdWxkIG5vdCBwcm92aWRlIExFRCB0cmlnZ2VyICVzIGZvciBrZXlib2FyZCBiYWNrbGlnaHRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmZsYWdzICAgICAgICAgICAgIHw9IExFRF9UUklHX0hXX0NIQU5HRUQ7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuaHdfY29udHJvbF90cmlnZ2VyID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWU7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQudHJpZ2dlcl90eXBlICAgICAgID0gXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7XG4mIzQzO1xuJiM0MztcdFx0LyogSGFyZHdhcmUgcmVtZW1iZXJzIHRoZSBsYXN0IGJyaWdodG5lc3MgbGV2ZWwsIGluY2x1ZGluZyBhdXRvIG1vZGUuICovXG4mIzQzO1x0XHRpZiAoaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpXG4mIzQzO1x0XHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5kZWZhdWx0X3RyaWdnZXIgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZTtcbiYjNDM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEtCRF9CTF9UUklTVEFURTpcbiYjNDM7XHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEtCRF9CTF9TVEFOREFSRDpcbiYjNDM7XHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0LyogVGhpcyBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBieSBpZGVhcGFkX2NoZWNrX2ZlYXR1cmVzKCkuICovXG4mIzQzO1x0XHR1bnJlYWNoYWJsZSgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUXVldWUgbm90aWZpY2F0aW9ucywgYXMga2JkX2JsLmluaXRpYWxpemVkIGlzIGFib3V0IHRvIGJlIHNldC4gKi9cbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubm90aWZfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHRpbmcga2JkX2JsLmluaXRpYWxpemVkIGFmdGVyIGxlZF9jbGFzc2Rldl9yZWdpc3RlcigpIGNvdWxkIGxlYWRcbiYjNDM7XHQgKiB0byByYWNlIGNvbmRpdGlvbnMgaW4gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQoKSB3aGVyZVxuJiM0MztcdCAqIGtiZF9ibC5pbml0aWFsaXplZCBpcyBjaGVja2VkLCBzbyBzZXQgaXQgbm93LiBJdCBjYW4gYmUgcmV2ZXJ0ZWQgYmFja1xuJiM0MztcdCAqIGlmIHRoZSBMRUQgY2xhc3NkZXYgZmFpbGVkIHRvIHJlZ2lzdGVyLlxuJiM0MztcdCAqL1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0ZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldiwgXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGVkKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfZXhpdChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuQEAgLTI1NDgsMTcgJiM0MzsyNjkwLDMwIEBAIHN0YXRpYyBpbnQgX19pbml0IGlkZWFwYWRfbGFwdG9wX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGVyciA9IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgTEVEIHRyaWdnZXIgJXM6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZSwgZXJyKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBpZGVhcGFkX3dtaV9kcml2ZXJfcmVnaXN0ZXIoKTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRnb3RvIGVycl9sZWR0cmlnO1xuIFxuIFx0ZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xuLVx0aWYgKGVycikge1xuLVx0XHRpZGVhcGFkX3dtaV9kcml2ZXJfdW5yZWdpc3RlcigpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl93bWk7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl93bWk6XG4mIzQzO1x0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbiYjNDM7ZXJyX2xlZHRyaWc6XG4mIzQzO1x0aWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKVxuJiM0MztcdFx0bGVkX3RyaWdnZXJfdW5yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIG1vZHVsZV9pbml0KGlkZWFwYWRfbGFwdG9wX2luaXQpXG4gXG5AQCAtMjU2Niw2ICYjNDM7MjcyMSw5IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBpZGVhcGFkX2xhcHRvcF9leGl0KHZvaWQpXG4ge1xuIFx0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbiBcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xuJiM0MztcbiYjNDM7XHRpZiAoaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpXG4mIzQzO1x0XHRsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7XG4gfVxuIG1vZHVsZV9leGl0KGlkZWFwYWRfbGFwdG9wX2V4aXQpXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMuaFxuaW5kZXggYjE2YjgwM2NjMWFjNTEuLjE2NzU5ODk2MmI3M2VjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sZWRzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbGVkcy5oXG5AQCAtMTA5LDYgJiM0MzsxMDksNyBAQCBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHtcbiAjZGVmaW5lIExFRF9JTklUX0RFRkFVTFRfVFJJR0dFUiBCSVQoMjMpXG4gI2RlZmluZSBMRURfUkVKRUNUX05BTUVfQ09ORkxJQ1QgQklUKDI0KVxuICNkZWZpbmUgTEVEX01VTFRJX0NPTE9SXHRcdEJJVCgyNSlcbiYjNDM7I2RlZmluZSBMRURfVFJJR19IV19DSEFOR0VEXHRCSVQoMjYpXG4gXG4gXHQvKiBzZXRfYnJpZ2h0bmVzc193b3JrIC8gYmxpbmtfdGltZXIgZmxhZ3MsIGF0b21pYywgcHJpdmF0ZS4gKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0d29ya19mbGFncztcbkBAIC00ODUsNiAmIzQzOzQ4Niw3IEBAIHN0cnVjdCBsZWRfdHJpZ2dlciB7XG4gXHRjb25zdCBjaGFyXHQgKm5hbWU7XG4gXHRpbnRcdFx0KCphY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuIFx0dm9pZFx0XHQoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiYjNDM7XHRib29sXHRcdCgqb2ZmbG9hZGVkKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4gXG4gXHQvKiBCcmlnaHRuZXNzIHNldCBieSBsZWRfdHJpZ2dlcl9ldmVudCAqL1xuIFx0ZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzO1xuQEAgLTUzMyw2ICYjNDM7NTM1LDkgQEAgdm9pZCBsZWRfdHJpZ2dlcl9ibGlua19vbmVzaG90KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcixcbiB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpO1xuIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4mIzQzO1xuJiM0Mztib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfc2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiBcdFx0XHRcdFx0dm9pZCAqdHJpZ2dlcl9kYXRhKVxuQEAgLTU4NCw2ICYjNDM7NTg5LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGxlZF9zZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCAqbGVkX2dldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4ge1xuQEAgLTU5OCw2ICYjNDM7NjEwLDEzIEBAIGxlZF90cmlnZ2VyX2dldF9icmlnaHRuZXNzKGNvbnN0IHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcilcbiBcbiAjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlMgKi9cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IGJvb2wgYWN0aXZhdGUpIHt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKiBUcmlnZ2VyIHNwZWNpZmljIGVudW0gKi9cbiBlbnVtIGxlZF90cmlnZ2VyX25ldGRldl9tb2RlcyB7XG4gXHRUUklHR0VSX05FVERFVl9MSU5LID0gMCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSX05FVERFViYjMzQ7LAogICAgJiMzNDtJREVBUEFEX0xBUFRPUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZCYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sJiMzNDssCiAgICAmIzM0O3RyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24mIzM0OywKICAgICYjMzQ7bGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCYjMzQ7LAogICAgJiMzNDtfX2xlZF90cmlnZ2VyX3NldCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfdHJpZ19vZmZsb2FkZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgTEVEIHRyaWdnZXIgc3Vic3lzdGVtLCBhZGRpbmcgc3VwcG9ydCBmb3IgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbnMgYW5kIG9mZmxvYWQgc3RhdGUgcmVwb3J0aW5nLiBUaGVzZSBuZXcgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhdHRyaWJ1dGVzIChgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAsIGBicmlnaHRuZXNzYCwgYHRyaWdnZXJgKSBhbmQgZHJpdmVyIG5vdGlmaWNhdGlvbnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgc3RhdGUgdHJhbnNpdGlvbiBsb2dpYyBhbmQgb2ZmbG9hZCBxdWVyaWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZGU4ZjBiM2IzMjkzNTQyNjFhMTU1NGQ2OTRlZDNiYjExNTc4MTRiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTggMTc6NTM6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkCmluZGV4IGQ0YzkxOGNjMTFhMTI3Li43ZGM5NWY3YTM1MDVjZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQKQEAgLTc4LDYgJiM0Mzs3OCwzMSBAQCBEZXNjcmlwdGlvbjoKIAkJKHdoaWNoIHdvdWxkIG9mdGVuIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIGRldmljZSB0cmVlIGZvciB0aGUKIAkJaGFyZHdhcmUpLgogCiYjNDM7V2hhdDoJCS9zeXMvY2xhc3MvbGVkcy8mbHQ7bGVkJmd0Oy90cmlnZ2VyX21heV9vZmZsb2FkCiYjNDM7RGF0ZToJCUp1bHkgMjAyNgomIzQzO0tlcm5lbFZlcnNpb246CTcuMwomIzQzO0NvbnRhY3Q6CWxpbnV4LWxlZHNAdmdlci5rZXJuZWwub3JnCiYjNDM7RGVzY3JpcHRpb246CiYjNDM7CQlOYW1lcyBhbmQgc3RhdGVzIG9mIHRyaWdnZXJzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCB0byBoYXJkd2FyZS4KJiM0MzsJCVN1Y2ggdHJpZ2dlcnMgYXJlIGFsc28gY2FsbGVkICYjMzQ7aGFyZHdhcmUgY29udHJvbCB0cmlnZ2VyJiMzNDsgaW4gc29tZQomIzQzOwkJY29udGV4dC4KJiM0MzsKJiM0MzsJCU9ubHkgZXhpc3RzIHdoZW4gdGhlIExFRCBzdXBwb3J0cyB0cmlnZ2VyIG9mZmxvYWQuCiYjNDM7CiYjNDM7CQlSZWFkaW5nIHRoaXMgZmlsZSByZXR1cm5zIGEgbGlzdCBvZiB0cmlnZ2VycyB0aGF0IGFyZSBjYXBhYmxlIHRvCiYjNDM7CQliZSBvZmZsb2FkZWQuIFRoZSBvcHRpb25hbCBicmFja2V0cyBhcm91bmQgdGhlIHRyaWdnZXIgbmFtZQomIzQzOwkJaW5kaWNhdGUgdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IHRyaWdnZXI6CiYjNDM7CiYjNDM7CQktIGBmb29fdHJpZ2dlcmA6IHRoZSB0cmlnZ2VyIGlzIG5vdCBzZWxlY3RlZC4KJiM0MzsJCS0gYCZsdDtmb29fdHJpZ2dlciZndDtgOiB0aGUgdHJpZ2dlciBpcyBzZWxlY3RlZCwgYnV0IGZhbGxzIGJhY2sgdG8KJiM0MzsJCSAgc29mdHdhcmUgYmxpbmsgZm9yIHNvbWUgcmVhc29uIChlLmcuLCBpbmNvbXBhdGlibGUgdHJpZ2dlcgomIzQzOwkJICBwYXJhbWV0ZXJzKQomIzQzOwkJLSBgW2Zvb190cmlnZ2VyXWA6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkIGFuZCBvZmZsb2FkZWQgdG8KJiM0MzsJCSAgaGFyZHdhcmUuCiYjNDM7CiYjNDM7CQlUaGUgJiMzNDtuZXRkZXYmIzM0OyB0cmlnZ2VyIGFsc28gcHJvdmlkZXMgYSBjdXN0b20gYXR0cmlidXRlIHRvCiYjNDM7CQlpbmRpY2F0ZSBpdHMgc3RhdGUsIHNlZSBgL3N5cy9jbGFzcy9sZWRzLyZsdDtsZWQmZ3Q7L29mZmxvYWRlZGAuCiYjNDM7CiBXaGF0OgkJL3N5cy9jbGFzcy9sZWRzLyZsdDtsZWQmZ3Q7L2ludmVydGVkCiBEYXRlOgkJSmFudWFyeSAyMDExCiBLZXJuZWxWZXJzaW9uOgkyLjYuMzgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXYKaW5kZXggZWQ0NmIzN2FiOGEyODQuLmE1MTQ2ZWExZTNlNjFjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldgpAQCAtNzUsNiAmIzQzOzc1LDkgQEAgRGVzY3JpcHRpb246CiAJCUlmIDEsIHRoZSBMRUQgYmxpbmtpbmcgaW4gcmVxdWVzdGVkIG1vZGUgaXMgb2ZmbG9hZGVkIHRvCiAJCWhhcmR3YXJlLgogCiYjNDM7CQlMRUQgdHJpZ2dlciBjb3JlIGFsc28gcHJvdmlkZXMgYSBnZW5lcmljIGF0dHJpYnV0ZSBmb3IgdGhpcwomIzQzOwkJcHVycG9zZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvJmx0O2xlZCZndDsvdHJpZ2dlcl9tYXlfb2ZmbG9hZGAuCiYjNDM7CiBXaGF0OgkJL3N5cy9jbGFzcy9sZWRzLyZsdDtsZWQmZ3Q7L2xpbmtfMTAKIERhdGU6CQlKdW4gMjAyMwogS2VybmVsVmVyc2lvbjoJNi41CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QKaW5kZXggMzkxMzk2NmNmZGFjMDQuLmFkYmM1N2I5ZjQ5YzMzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0CkBAIC0yNDIsNiAmIzQzOzI0Miw5IEBAIG9wcyBhbmQgbmVlZHMgdG8gZGVjbGFyZSBzcGVjaWZpYyBzdXBwb3J0IGZvciB0aGUgc3VwcG9ydGVkIHRyaWdnZXJzLgogCiBXaXRoIGh3IGNvbnRyb2wgd2UgcmVmZXIgdG8gdGhlIExFRCBkcml2ZW4gYnkgaGFyZHdhcmUuCiAKJiM0MztBIHN5c2ZzIGF0dHJpYnV0ZSBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAgaXMgcHJvdmlkZWQgZm9yIHVzZXJzcGFjZSB0bwomIzQzO3F1ZXJ5IHN1cHBvcnRlZCB0cmlnZ2VycyBhbmQgdGhlaXIgc3RhdGVzLgomIzQzOwogTEVEIGRyaXZlciBtdXN0IGRlZmluZSB0aGUgZm9sbG93aW5nIHZhbHVlIHRvIHN1cHBvcnQgaHcgY29udHJvbDoKIAogICAgIC0gaHdfY29udHJvbF90cmlnZ2VyOgpAQCAtMjk4LDYgJiM0MzszMDEsMTUgQEAgTEVEIGRyaXZlciBtdXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEFQSSB0byBzdXBwb3J0IGh3IGNvbnRyb2w6CiAgICAgICAgICAgICAgICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZGV2aWNlIG9yIE5VTEwgaWYgbm90aGluZwogICAgICAgICAgICAgICAgIGlzIGN1cnJlbnRseSBhdHRhY2hlZC4KIAomIzQzO0xFRCB0cmlnZ2VyIHNob3VsZCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gaW5kaWNhdGUgaHcgY29udHJvbDoKJiM0MzsgICAgLSBvZmZsb2FkZWQ6CiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdHJpZ2dlciBpcyBjdXJyZW50bHkKJiM0MzsgICAgICAgICAgICAgICAgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlLgomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBJZiBhIHRyaWdnZXIgZG9lc24mIzM5O3QgaW1wbGVtZW50IHRoaXMgY2FsbGJhY2ssIHRoZSBkZWZhdWx0CiYjNDM7ICAgICAgICAgICAgICAgIHZhbHVlIHdpbGwgYmUgdHJ1ZSBmb3IgcHJpdmF0ZSB0cmlnZ2VycyBhbmQgZmFsc2UgZm9yIGdlbmVyaWMKJiM0MzsgICAgICAgICAgICAgICAgb25lcy4KJiM0MzsKIExFRCBkcml2ZXIgY2FuIGFjdGl2YXRlIGFkZGl0aW9uYWwgbW9kZXMgYnkgZGVmYXVsdCB0byB3b3JrYXJvdW5kIHRoZQogaW1wb3NzaWJpbGl0eSBvZiBzdXBwb3J0aW5nIGVhY2ggZGlmZmVyZW50IG1vZGUgb24gdGhlIHN1cHBvcnRlZCB0cmlnZ2VyLgogRXhhbXBsZXMgYXJlIGhhcmRjb2RpbmcgdGhlIGJsaW5rIHNwZWVkIHRvIGEgc2V0IGludGVydmFsLCBlbmFibGUgc3BlY2lhbApAQCAtMzExLDkgJiM0MzszMjMsNjkgQEAgdGhlIGVuZCB1c2UgaHdfY29udHJvbF9zZXQgdG8gYWN0aXZhdGUgaHcgY29udHJvbC4KIEEgdHJpZ2dlciBjYW4gdXNlIGh3X2NvbnRyb2xfZ2V0IHRvIGNoZWNrIGlmIGEgTEVEIGlzIGFscmVhZHkgaW4gaHcgY29udHJvbAogYW5kIGluaXQgdGhlaXIgZmxhZ3MuCiAKJiM0MztBbHRlcm5hdGl2ZWx5LCBhIHByaXZhdGUgdHJpZ2dlciBjYW4gYmUgaW1wbGVtZW50ZWQgYWxvbmcgd2l0aCB0aGUgTEVEIGRyaXZlciBpZgomIzQzO3RoZSBMRUQmIzM5O3MgaGFyZHdhcmUgY29udHJvbCBkb2VzbiYjMzk7dCBmaXQgYW55IGdlbmVyaWMgdHJpZ2dlci4gVG8gYXNzb2NpYXRlIHRoZQomIzQzO3ByaXZhdGUgdHJpZ2dlciB3aXRoIHRoZSBMRUQgY2xhc3NkZXYsIHRoZWlyIGB0cmlnZ2VyX3R5cGVgIG11c3QgYmUgdGhlIHNhbWUuIFRvCiYjNDM7ZGVjbGFyZSB0aGF0IHRoZSBwcml2YXRlIHRyaWdnZXIgcHJvdmlkZXMgaGFyZHdhcmUgY29udHJvbCBmb3IgdGhlIGFzc29jaWF0ZWQKJiM0MztMRUQgY2xhc3NkZXYsIHNldCB0aGUgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgc3RyaW5nIHRvIHRoZSB0cmlnZ2VyJiMzOTtzIG5hbWUuIFNpbmNlCiYjNDM7Ym90aCB0aGUgTEVEIGNsYXNzZGV2IGFuZCB0aGUgcHJpdmF0ZSB0cmlnZ2VyIGFyZSBpbiB0aGUgc2FtZSBMRUQgZHJpdmVyLCBpdCYjMzk7cwomIzQzO25vdCBuZWNlc3NhcnkgZm9yIHRoZW0gdG8gY29vcmRpbmF0ZSB2aWEgYGh3X2NvbnRyb2xfKmAgY2FsbGJhY2tzLgomIzQzOwogV2hlbiB0aGUgTEVEIGlzIGluIGh3IGNvbnRyb2wsIG5vIHNvZnR3YXJlIGJsaW5rIGlzIHBvc3NpYmxlIGFuZCBkb2luZyBzbwogd2lsbCBlZmZlY3RpdmVseSBkaXNhYmxlIGh3IGNvbnRyb2wuCiAKJiM0MztIYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uCiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO1NvbWUgaGFyZHdhcmUgY2FuIGF1dG9ub21vdXNseSBhY3RpdmF0ZS9kZWFjdGl2YXRlIGhhcmR3YXJlIGNvbnRyb2wuIEFmdGVyIHRoYXQsCiYjNDM7dGhlIExFRCBoYXJkd2FyZSBub3RpZmllcyB0aGUgTEVEIGRyaXZlci4KJiM0MzsKJiM0MztJZiB0aGUgZHJpdmVyIGNhbiBkZXRlY3Qgc3VjaCB0cmFuc2l0aW9ucyBhbmQgdGh1cyB3YW50cyB0byBub3RpZnkgdGhlIExFRCBjb3JlCiYjNDM7dG8gdXBkYXRlIHRoZSBjdXJyZW50IHRyaWdnZXIgdGhlbiB0aGUgYExFRF9UUklHX0hXX0NIQU5HRURgIGZsYWcgbXVzdCBiZSBzZXQgaW4KJiM0MztmbGFncyBiZWZvcmUgcmVnaXN0ZXJpbmcuIFRvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIGFjY29yZGluZ2x5LCBjYWxsCiYjNDM7YGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIG9uIHRoZSBMRUQgY2xhc3NkZXYuCiYjNDM7CiYjNDM7VGhpcyBjYXBhYmlsaXR5IGlzIHJlc3RyaWN0ZWQgdG8gdGhlIExFRCBkZXZpY2UmIzM5O3MgcHJpdmF0ZSB0cmlnZ2VyLiBUaGUgcHJpdmF0ZQomIzQzO3RyaWdnZXIgbXVzdCBoYXZlIGJlZW4gcHJvcGVybHkgcmVnaXN0ZXJlZCAoc2VlIGFib3ZlKSBhbmQgbmFtZWQgYWZ0ZXIKJiM0MztgaHdfY29udHJvbF90cmlnZ2VyYC4KJiM0MzsKJiM0MztPbmx5IHR3byB0cmFuc2l0aW9ucyBhcmUgZGVmaW5lZDoKJiM0MzsKJiM0MzstICYjMzQ7bm9uZSYjMzQ7ID0mZ3Q7IHByaXZhdGUgdHJpZ2dlcjoKJiM0MzsgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2wKJiM0MzsgICAgICAgIGFuZCB3aGVuICYjMzQ7bm9uZSYjMzQ7IChpLmUuLCBubyB0cmlnZ2VyKSBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiB0aGUgcHJpdmF0ZQomIzQzOyAgICAgICAgdHJpZ2dlciBpcyBhbHJlYWR5IGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5CiYjNDM7ICAgICAgICBhIG5vLW9wLgomIzQzOwomIzQzOyAgICAgICAgVGhlIGFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhcwomIzQzOyAgICAgICAgbm9ybWFsLgomIzQzOwomIzQzOyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGUKJiM0MzsgICAgICAgIGFjdGl2YXRpb24gc2VxdWVuY2UgZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXMgY3VycmVudGx5IGluIGhhcmR3YXJlCiYjNDM7ICAgICAgICBjb250cm9sLgomIzQzOwomIzQzOyAgICAgICAgSWYgZXJyb3Igb2NjdXJzIGluIHRoZSBhY3RpdmF0aW9uIHNlcXVlbmNlLCB0aGUgTEVEIFRyaWdnZXIgY29yZSByZXZlcnRzCiYjNDM7ICAgICAgICB0aGUgZWZmZWN0aXZlIHRyaWdnZXIgdG8gJiMzNDtub25lJiMzNDsuCiYjNDM7CiYjNDM7LSBwcml2YXRlIHRyaWdnZXIgPSZndDsgJiMzNDtub25lJiMzNDsKJiM0MzsgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0ZXMgaGFyZHdhcmUgY29udHJvbAomIzQzOyAgICAgICAgYW5kIHdoZW4gdGhlIHByaXZhdGUgdHJpZ2dlciBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiAmIzM0O25vbmUmIzM0OyAoaS5lLiwgbm8KJiM0MzsgICAgICAgIHRyaWdnZXIpIGlzIGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5IGEKJiM0MzsgICAgICAgIG5vLW9wLgomIzQzOwomIzQzOyAgICAgICAgVGhlIGRlYWN0aXZhdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIHByaXZhdGUgdHJpZ2dlciB3aWxsIGJlIGV4ZWN1dGVkIGFzCiYjNDM7ICAgICAgICBub3JtYWwsIGV4Y2VwdCB0aGF0IHRoZSBjdXJyZW50IExFRCBicmlnaHRuZXNzIGlzIHJldGFpbmVkLiBUaGUgcmVhc29uCiYjNDM7ICAgICAgICBmb3Iga2VlcGluZyB0aGUgYnJpZ2h0bmVzcyB1bmNoYW5nZWQgaXMgdGhhdCBzb21lIGhhcmR3YXJlIG1heSBjaG9vc2UgYQomIzQzOyAgICAgICAgc3BlY2lmaWMgYnJpZ2h0bmVzcyBpbnN0ZWFkIG9mIHNpbXBseSB0dXJuaW5nIG9mZiB0aGUgTEVEIGFmdGVyCiYjNDM7ICAgICAgICBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0aW5nIGhhcmR3YXJlIGNvbnRyb2wuCiYjNDM7CiYjNDM7ICAgICAgICBUaGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlciBtdXN0IGJlIGFibGUgdG8gaGFuZGxlIHRoZQomIzQzOyAgICAgICAgZGVhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIG5vdCBjdXJyZW50bHkgaW4gaGFyZHdhcmUKJiM0MzsgICAgICAgIGNvbnRyb2wuCiYjNDM7CiYjNDM7SWYgdGhlIGN1cnJlbnQgdHJpZ2dlciBpcyBuZWl0aGVyIHRoZSBwcml2YXRlIHRyaWdnZXIgbm9yICYjMzQ7bm9uZSYjMzQ7LCBubyB0cmFuc2l0aW9uCiYjNDM7d2lsbCBiZSBtYWRlLgomIzQzOwogS25vd24gSXNzdWVzCiA9PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jIGIvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCmluZGV4IGE1MWIwZWQ1Mzg4NjQ0Li4yNDYwZmNmMGM0NjkwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYwpAQCAtMjcsMTYgJiM0MzsyNyw2IEBAIHN0YXRpYyBMSVNUX0hFQUQobGVkc19sb29rdXBfbGlzdCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGVkc193cTsKIAotc3RhdGljIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKLXsKLSNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwotCWd1YXJkKHJ3c2VtX3JlYWQpKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJfbG9jayk7Ci0JcmV0dXJuIGxlZF9jZGV2LSZndDt0cmlnZ2VyICZhbXA7JmFtcDsgbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O3RyaWdnZXJfdHlwZTsKLSNlbHNlCi0JcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC03NCw2ICYjNDM7NjQsOSBAQCBzdGF0aWMgc3NpemVfdCBicmlnaHRuZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAogCWlmIChzdGF0ZSA9PSBMRURfT0ZGKQogCQlsZWRfdHJpZ2dlcl9yZW1vdmUobGVkX2NkZXYpOwomIzQzOwllbHNlCiYjNDM7CQlsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChsZWRfY2Rldik7CiYjNDM7CiAJbGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBzdGF0ZSk7CiAKIAlyZXQgPSBzaXplOwpAQCAtMTAzLDggJiM0Mzs5NiwzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGxlZF90cmlnZ2VyX2Jpbl9hdHRyc1tdID0gewogCSZhbXA7YmluX2F0dHJfdHJpZ2dlciwKIAlOVUxMLAogfTsKJiM0MzsKJiM0MztzdGF0aWMgREVWSUNFX0FUVFJfUk8odHJpZ2dlcl9tYXlfb2ZmbG9hZCk7CiYjNDM7c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxlZF90cmlnZ2VyX2F0dHJzW10gPSB7CiYjNDM7CSZhbXA7ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyLAomIzQzOwlOVUxMCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdW1vZGVfdCBsZWRfdHJpZ2dlcl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAomIzQzOwkJCQkgICAgICBpbnQgaWR4KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0ga29ial90b19kZXYoa29iaik7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CiYjNDM7CWlmIChhdHRyID09ICZhbXA7ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyKQomIzQzOwkJcmV0dXJuIGxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgPyBhdHRyLSZndDttb2RlIDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGF0dHItJmd0O21vZGU7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbGVkX3RyaWdnZXJfZ3JvdXAgPSB7CiAJLmJpbl9hdHRycyA9IGxlZF90cmlnZ2VyX2Jpbl9hdHRycywKJiM0MzsJLmF0dHJzID0gbGVkX3RyaWdnZXJfYXR0cnMsCiYjNDM7CS5pc192aXNpYmxlID0gbGVkX3RyaWdnZXJfaXNfdmlzaWJsZSwKIH07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jIGIvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jCmluZGV4IGIxMjIzMjE4YmRhMTEzLi42YWUyOGNiZDFjNzc4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYwpAQCAtNyw5ICYjNDM7NywxMiBAQAogICogQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSAmbHQ7cnB1cmRpZUBvcGVuZWRoYW5kLmNvbSZndDsKICAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sb2NrZGVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aW1lci5oJmd0OwpAQCAtMzMsNiAmIzQzOzM2LDMzIEBAIHRyaWdnZXJfcmVsZXZhbnQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKIAlyZXR1cm4gIXRyaWctJmd0O3RyaWdnZXJfdHlwZSB8fCB0cmlnLSZndDt0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtJmd0O3RyaWdnZXJfdHlwZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKCFsZWRfY2Rldi0mZ3Q7dHJpZ2dlcikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCFsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyIHx8CiYjNDM7CSAgICBzdHJjbXAobGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciwgbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O25hbWUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAobGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O29mZmxvYWRlZCkKJiM0MzsJCXJldHVybiBsZWRfY2Rldi0mZ3Q7dHJpZ2dlci0mZ3Q7b2ZmbG9hZGVkKGxlZF9jZGV2KTsKJiM0MzsKJiM0MzsJZGV2X3dhcm5fb25jZShsZWRfY2Rldi0mZ3Q7ZGV2LCAmIzM0O2h3IGNvbnRyb2wgdHJpZ2dlciAlcyBkb2VzbiYjMzk7dCBpbXBsZW1lbnQgb2ZmbG9hZGVkKClcbiYjMzQ7LAomIzQzOwkJICAgICAgbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O25hbWUpOwomIzQzOwomIzQzOwlyZXR1cm4gbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O3RyaWdnZXJfdHlwZTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJZ3VhcmQocndzZW1fcmVhZCkoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrKTsKJiM0MzsJcmV0dXJuIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQpOwomIzQzOwogc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLAogCQkJICBsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpCkBAIC0xNjMsNyAmIzQzOzE5Myw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZWFkKTsKIAogLyogQ2FsbGVyIG11c3QgZW5zdXJlIGxlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2sgaGVsZCAqLwotaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQomIzQzO3N0YXRpYyBpbnQgX19sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZywKJiM0MzsJCQkgICAgIGJvb2wgaHdfdHJpZ2dlcmVkKQogewogCWNoYXIgKmV2ZW50ID0gTlVMTDsKIAljaGFyICplbnZwWzJdOwpAQCAtMTk0LDcgJiM0MzsyMjUsMjEgQEAgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQogCQlsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9kYXRhID0gTlVMTDsKIAkJbGVkX2NkZXYtJmd0O2FjdGl2YXRlZCA9IGZhbHNlOwogCQlsZWRfY2Rldi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5MRURfSU5JVF9ERUZBVUxUX1RSSUdHRVI7Ci0JCWxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2RldiwgTEVEX09GRik7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogSGFyZHdhcmUgbWF5IGhhdmUgc2VsZWN0ZWQgYSBuZXcgYnJpZ2h0bmVzcyBsZXZlbCBkdXJpbmcgaXRzCiYjNDM7CQkgKiBoYXJkd2FyZSBjb250cm9sIHRyYW5zaXRpb24sIHNvIG9ubHkgcmVzZXQgYnJpZ2h0bmVzcyBpZiB3ZQomIzQzOwkJICogYXJlIHN3aXRjaGluZyB0byBhbm90aGVyIHRyaWdnZXIgb3IgaWYgdGhlIHN3aXRjaGluZyBpcyBub3QKJiM0MzsJCSAqIGhhcmR3YXJlIHRyaWdnZXJlZC4KJiM0MzsJCSAqCiYjNDM7CQkgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgZXJyb3IgcGF0aCwgYXMgcnVubmluZwomIzQzOwkJICogaW50byB0aGUgZXJyb3IgcGF0aCBpbXBsaWVzIGEgbm9uZSA9Jmd0OyBwcml2YXRlIHRyaWdnZXIKJiM0MzsJCSAqIHRyYW5zaXRpb24uIFRoaXMgaGludHMgdGhhdCB0aGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGUKJiM0MzsJCSAqIHRyaWdnZXIgbXVzdCBoYXZlIHNvbWUgZnVuZGFtZW50YWwgYnVncywgc28gZG9uJiMzOTt0IGJvdGhlcgomIzQzOwkJICogbGVhdmluZyB0aGUgTEVEIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHRyaWcgfHwgIWh3X3RyaWdnZXJlZCkKJiM0MzsJCQlsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIExFRF9PRkYpOwogCX0KIAlpZiAodHJpZykgewogCQlzcGluX2xvY2soJmFtcDt0cmlnLSZndDtsZWRkZXZfbGlzdF9sb2NrKTsKQEAgLTI1OCw2ICYjNDM7MzAzLDExIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKIAogCXJldHVybiByZXQ7CiB9CiYjNDM7CiYjNDM7aW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCB0cmlnLCBmYWxzZSk7CiYjNDM7fQogRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0KTsKIAogdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCkBAIC0yNjgsNiAmIzQzOzMxOCwxNSBAQCB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZSk7CiAKJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJZ3VhcmQocndzZW1fd3JpdGUpKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKQomIzQzOwkJbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wpOwomIzQzOwogc3RhdGljIGJvb2wgbGVkX21hdGNoX2RlZmF1bHRfdHJpZ2dlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQkgICAgICBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpCiB7CkBAIC0zMTMsNiAmIzQzOzM3MiwzMiBAQCB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQpOwogCiYjNDM7c3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CXN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZzsKJiM0MzsJYm9vbCBoaXQsIG9mZmxvYWRlZDsKJiM0MzsJaW50IGxlbjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7bGVkX2NkZXYtJmd0O2xlZF9hY2Nlc3MpOwomIzQzOwlndWFyZChyd3NlbV9yZWFkKSgmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2spOwomIzQzOwomIzQzOwl0cmlnID0gbGVkX2NkZXYtJmd0O3RyaWdnZXI7CiYjNDM7CiYjNDM7CW9mZmxvYWRlZCA9IF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7CiYjNDM7CWhpdCA9IG9mZmxvYWRlZCB8fCAodHJpZyAmYW1wOyZhbXA7ICFzdHJjbXAobGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciwgdHJpZy0mZ3Q7bmFtZSkpOwomIzQzOwomIzQzOwkvKiBbb2ZmbG9hZGVkXSAmbHQ7YWN0aXZlX2J1dF9ub3Rfb2ZmbG9hZGVkJmd0OyBpbmFjdGl2ZSAqLwomIzQzOwlsZW4gPSBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcyVzJXNcbiYjMzQ7LAomIzQzOwkJCSBvZmZsb2FkZWQgPyAmIzM0O1smIzM0OyA6IChoaXQgPyAmIzM0OyZsdDsmIzM0OyA6ICYjMzQ7JiMzNDspLAomIzQzOwkJCSBsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyLAomIzQzOwkJCSBvZmZsb2FkZWQgPyAmIzM0O10mIzM0OyA6IChoaXQgPyAmIzM0OyZndDsmIzM0OyA6ICYjMzQ7JiMzNDspKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGxlbjsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KTsKJiM0MzsKIC8qIExFRCBUcmlnZ2VyIEludGVyZmFjZSAqLwogCiBpbnQgbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQpAQCAtNDAzLDYgJiM0Mzs0ODgsNjMgQEAgaW50IGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRAomIzQzO3N0YXRpYyB2b2lkIGxlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSwKJiM0MzsJCQkJCQkgc3RydWN0IGxlZF90cmlnZ2VyICpoY190cmlnKQomIzQzO3sKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmICghbGVkX2NkZXYtJmd0O3RyaWdnZXIpIHsKJiM0MzsJCS8qICYjMzQ7bm9uZSYjMzQ7ID0mZ3Q7IHByaXZhdGUgdHJpZ2dlci4gKi8KJiM0MzsJCWlmIChhY3RpdmF0ZSkKJiM0MzsJCQllcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgaGNfdHJpZywgdHJ1ZSk7CiYjNDM7CX0gZWxzZSBpZiAobGVkX2NkZXYtJmd0O3RyaWdnZXIgPT0gaGNfdHJpZykgewomIzQzOwkJLyogcHJpdmF0ZSB0cmlnZ2VyID0mZ3Q7ICYjMzQ7bm9uZSYjMzQ7LiAqLwomIzQzOwkJaWYgKCFhY3RpdmF0ZSkKJiM0MzsJCQllcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgTlVMTCwgdHJ1ZSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBPdGhlciB0cmlnZ2VyIGlzIGFjdGl2ZS4gKi8KJiM0MzsJCWRldl9kYmcobGVkX2NkZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O0lnbm9yaW5nIGh3IGNvbnRyb2wgdHJhbnNpdGlvbiAoJXMgJXMpIHdoaWxlICVzIGlzIGFjdGl2ZSYjMzQ7LAomIzQzOwkJCWFjdGl2YXRlID8gJiMzNDthY3RpdmF0ZSYjMzQ7IDogJiMzNDtkZWFjdGl2YXRlJiMzNDssIGhjX3RyaWctJmd0O25hbWUsCiYjNDM7CQkJbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O25hbWUpOwomIzQzOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlkZXZfd2FybihsZWRfY2Rldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byAlcyAlcyBpbiBodyBjb250cm9sIHRyYW5zaXRpb246ICVkJiMzNDssCiYjNDM7CQkJIGFjdGl2YXRlID8gJiMzNDthY3RpdmF0ZSYjMzQ7IDogJiMzNDtkZWFjdGl2YXRlJiMzNDssIGhjX3RyaWctJmd0O25hbWUsIGVycik7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZzsKJiM0MzsKJiM0MzsJLyogUmVzdHJpY3RlZCB0byBwcml2YXRlIHRyaWdnZXJzLiAqLwomIzQzOwlpZiAoV0FSTl9PTighKGxlZF9jZGV2LSZndDtmbGFncyAmYW1wOyBMRURfVFJJR19IV19DSEFOR0VEKSB8fAomIzQzOwkJICAgICFsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyIHx8ICFsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl90eXBlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsICZhbXA7dHJpZ2dlcnNfbGlzdF9sb2NrKSB7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyaWcsICZhbXA7dHJpZ2dlcl9saXN0LCBuZXh0X3RyaWcpIHsKJiM0MzsJCQlpZiAodHJpZy0mZ3Q7dHJpZ2dlcl90eXBlID09IGxlZF9jZGV2LSZndDt0cmlnZ2VyX3R5cGUgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAhc3RyY21wKHRyaWctJmd0O25hbWUsIGxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIpKSB7CiYjNDM7CQkJCWd1YXJkKHJ3c2VtX3dyaXRlKSgmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2spOwomIzQzOwomIzQzOwkJCQlsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24obGVkX2NkZXYsIGFjdGl2YXRlLCB0cmlnKTsKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlkZXZfZXJyKGxlZF9jZGV2LSZndDtkZXYsCiYjNDM7CQkmIzM0OyVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXG4mIzM0OywKJiM0MzsJCV9fZnVuY19fLCBsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQgKi8KJiM0MzsKIC8qIFNpbXBsZSBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi8KIAogdm9pZCBsZWRfdHJpZ2dlcl9ldmVudChzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMKaW5kZXggMTg0NGQwY2Q1ZjUyODQuLjZkYjgzZDAxNTI3NzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jCkBAIC04NSwxMiAmIzQzOzg1LDE4IEBAIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKIAlyZXR1cm4gY3Jvc19lY19sZWRfc2VuZF9jbWQocHJpdi0mZ3Q7Y3Jvc19lYywgJmFtcDthcmcpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgY3Jvc19lY19sZWRfdHJpZ2dlcl9vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgY3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlOwogCiBzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIGNyb3NfZWNfbGVkX3RyaWdnZXIgPSB7CiAJLm5hbWUgPSAmIzM0O2Nocm9tZW9zLWF1dG8mIzM0OywKIAkudHJpZ2dlcl90eXBlID0gJmFtcDtjcm9zX2VjX2xlZF90cmlnZ2VyX3R5cGUsCiAJLmFjdGl2YXRlID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZSwKJiM0MzsJLm9mZmxvYWRlZCA9IGNyb3NfZWNfbGVkX3RyaWdnZXJfb2ZmbG9hZGVkLAogfTsKIAogc3RhdGljIGludCBjcm9zX2VjX2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmMKaW5kZXggZWQ2YTQ3YmJiNDRmOWMuLjMyZDQwZDE3NmQzZjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuYwpAQCAtMTk1LDEwICYjNDM7MTk1LDE2IEBAIHN0YXRpYyB2b2lkIG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpCiAJCQllcnIpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgb21uaWFfaHd0cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBvbW5pYV9od190cmlnZ2VyID0gewogCS5uYW1lCQk9ICYjMzQ7b21uaWEtbWN1JiMzNDssCiAJLmFjdGl2YXRlCT0gb21uaWFfaHd0cmlnX2FjdGl2YXRlLAogCS5kZWFjdGl2YXRlCT0gb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUsCiYjNDM7CS5vZmZsb2FkZWQJPSBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkLAogCS50cmlnZ2VyX3R5cGUJPSAmYW1wO29tbmlhX2h3X3RyaWdnZXJfdHlwZSwKIH07CiAKQEAgLTI1MSw2ICYjNDM7MjU3LDcgQEAgc3RhdGljIGludCBvbW5pYV9sZWRfcmVnaXN0ZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IG9tbmlhX2xlZCAqbGVkLAogCSAqIGJ5IExFRCBjbGFzcyBmcm9tIHRoZSBsaW51eCxkZWZhdWx0LXRyaWdnZXIgcHJvcGVydHkuCiAJICovCiAJY2Rldi0mZ3Q7ZGVmYXVsdF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lOwomIzQzOwljZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgPSBvbW5pYV9od190cmlnZ2VyLm5hbWU7CiAKIAkvKiBQdXQgdGhlIExFRCBpbnRvIHNvZnR3YXJlIG1vZGUgKi8KIAlyZXQgPSBvbW5pYV9jbWRfd3JpdGVfdTgoY2xpZW50LCBPTU5JQV9DTURfTEVEX01PREUsIE9NTklBX0NNRF9MRURfTU9ERV9MRUQobGVkLSZndDtyZWcpIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLmggYi9kcml2ZXJzL2xlZHMvbGVkcy5oCmluZGV4IGJlZTQ2NjUxZTA2OGY3Li5iMDhhMjg5Mzk3ZTQ2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkcy5oCkBAIC0yNyw2ICYjNDM7MjcsOCBAQCBzc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAogc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQljb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZiwKIAkJCWxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCk7CiYjNDM7c3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CiAKIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIGxlZHNfbGlzdF9sb2NrOwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbGVkc19saXN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWcKaW5kZXggYzExMjgyYTc0YjVhYzMuLjc5ODEyMjE1NDA0OWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWcKQEAgLTksNiAmIzQzOzksMTUgQEAgbWVudWNvbmZpZyBMRURTX1RSSUdHRVJTCiAKIGlmIExFRFNfVFJJR0dFUlMKIAomIzQzO2NvbmZpZyBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQKJiM0MzsJYm9vbCAmIzM0O0xFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnQmIzM0OwomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBoYXJkd2FyZSBpbml0aWF0ZWQgaGFyZHdhcmUgY29udHJvbAomIzQzOwkgIHRyYW5zaXRpb25zLCB3aGVyZSB0aGUgTEVEIGhhcmR3YXJlIGF1dG9ub21vdXNseSBzd2l0Y2hlcyBiZXR3ZWVuCiYjNDM7CSAgJiMzNDtub25lJiMzNDsgKGkuZS4sIG5vIHRyaWdnZXIpIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyLgomIzQzOwomIzQzOwkgIFNlZSBEb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgZm9yIGRldGFpbHMuCiYjNDM7CiBjb25maWcgTEVEU19UUklHR0VSX1RJTUVSCiAJdHJpc3RhdGUgJiMzNDtMRUQgVGltZXIgVHJpZ2dlciYjMzQ7CiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMKaW5kZXggNjRjMDc4ZTk5N2YyOGEuLmEyNjEwOWNhNGIxYzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMKQEAgLTc1NCwxMCAmIzQzOzc1NCwxOCBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfdHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogCWtmcmVlKHRyaWdnZXJfZGF0YSk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBuZXRkZXZfdHJpZ19vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGVkX25ldGRldl9kYXRhICp0cmlnZ2VyX2RhdGEgPSBsZWRfZ2V0X3RyaWdnZXJfZGF0YShsZWRfY2Rldik7CiYjNDM7CiYjNDM7CXJldHVybiB0cmlnZ2VyX2RhdGEtJmd0O2h3X2NvbnRyb2w7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBuZXRkZXZfbGVkX3RyaWdnZXIgPSB7CiAJLm5hbWUgPSAmIzM0O25ldGRldiYjMzQ7LAogCS5hY3RpdmF0ZSA9IG5ldGRldl90cmlnX2FjdGl2YXRlLAogCS5kZWFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfZGVhY3RpdmF0ZSwKJiM0MzsJLm9mZmxvYWRlZCA9IG5ldGRldl90cmlnX29mZmxvYWRlZCwKIAkuZ3JvdXBzID0gbmV0ZGV2X3RyaWdfZ3JvdXBzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZwppbmRleCA0NDQzZjQwZWY4YWE3ZS4uZTkyYjFlOTAwNzk1MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnCkBAIC0xNiw2ICYjNDM7MTYsNyBAQCBjb25maWcgSURFQVBBRF9MQVBUT1AKIAlzZWxlY3QgSU5QVVRfU1BBUlNFS01BUAogCXNlbGVjdCBORVdfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTCiYjNDM7CXNlbGVjdCBMRURTX1RSSUdHRVJTCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MgY29udGFpbnMgZHJpdmVycyBmb3IKIAkgIHJma2lsbCBzd2l0Y2gsIGhvdGtleSwgZmFuIGNvbnRyb2wgYW5kIGJhY2tsaWdodCBjb250cm9sLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYwppbmRleCA0ZmJjOTA0ZjFmYzM5MC4uMjUzZDI5NjJiOTI3NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jCkBAIC05LDYgJiM0Mzs5LDcgQEAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgJiMzNDs6ICYjMzQ7IGZtdAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYWNwaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hdG9taWMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iYWNrbGlnaHQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG9wcy5oJmd0OwpAQCAtMjUsNyAmIzQzOzI2LDkgQEAKICNpbmNsdWRlICZsdDtsaW51eC9qaWZmaWVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGVkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sb2NrZGVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fcHJvZmlsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Bvd2VyX3N1cHBseS5oJmd0OwpAQCAtMTM0LDEwICYjNDM7MTM3LDMxIEBAIGVudW0gewogfTsKIAogLyoKLSAqIFRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgc3RhdGVzIC0gMQotICogRnV0dXJlIGtleWJvYXJkIHR5cGVzIG1heSBuZWVkIGEgbmV3IHN5c3RlbSwgaWYgdGhlcmUmIzM5O3MgYSBjb2xsaXNpb24KLSAqIEtCRF9CTF9UUklTVEFURV9BVVRPIGhhcyBubyB3YXkgdG8gcmVwb3J0IG9yIHNldCB0aGUgYXV0byBzdGF0ZQotICogc28gaXQgZWZmZWN0aXZlbHkgaGFzIDMgc3RhdGVzLCBidXQgbmVlZHMgdG8gaGFuZGxlIDQKJiM0MzsgKiBUaGUgZW51bWVyYXRpb24gaGFzIHR3byBwdXJwb3NlczoKJiM0MzsgKiAgIC0gYXMgYW4gaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYWxsIGtub3duIHR5cGVzIG9mIGtleWJvYXJkIGJhY2tsaWdodAomIzQzOyAqICAgLSBhcyBhIG1hbmRhdG9yeSBwYXJhbWV0ZXIgb2YgdGhlIEtCTEMgY29tbWFuZAomIzQzOyAqCiYjNDM7ICogRm9yIGVhY2ggdHlwZSwgdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgdmFsdWVzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8ICAgICAgSGFyZHdhcmUgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8ICAgIDMgfAomIzQzOyAqIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8IEtCRF9CTF9TVEFOREFSRCAgICAgICAgICB8ICAgICAgb2ZmIHwgIG9uIHwgIE4vQSB8ICBOL0EgfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7CiYjNDM7ICogfCBLQkRfQkxfVFJJU1RBVEUgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfCAgTi9BIHwKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0mIzQzOwomIzQzOyAqIHwgS0JEX0JMX1RSSVNUQVRFX0FVVE8gICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgYXV0byB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKgomIzQzOyAqIFdlIG1hcCBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyBmb3IgS0JEX0JMX1RSSVNUQVRFX0FVVE8gYXMgZm9sbG93czoKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8ICBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8CiYjNDM7ICogfCBPcGVyYXRpb24gICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8ICAgICAgfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOwomIzQzOyAqIHwgUmVhZCAgICAgICAgICAgICAgICAgICAgIHwgb2ZmL2F1dG8gfCBsb3cgfCBoaWdoIHwKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8IFdyaXRlICAgICAgICAgICAgICAgICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7CiAgKi8KIGVudW0gewogCUtCRF9CTF9TVEFOREFSRCAgICAgID0gMSwKQEAgLTE0NSw2ICYjNDM7MTY5LDggQEAgZW51bSB7CiAJS0JEX0JMX1RSSVNUQVRFX0FVVE8gPSAzLAogfTsKIAomIzQzOyNkZWZpbmUgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTCTMKJiM0MzsKICNkZWZpbmUgS0JEX0JMX1FVRVJZX1RZUEUJCTB4MQogI2RlZmluZSBLQkRfQkxfVFJJU1RBVEVfVFlQRQkJMHg1CiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9BVVRPX1RZUEUJMHg3CkBAIC0yMDMsNyAmIzQzOzIyOSw5IEBAIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgewogCQlib29sIGluaXRpYWxpemVkOwogCQlpbnQgdHlwZTsKIAkJc3RydWN0IGxlZF9jbGFzc2RldiBsZWQ7Ci0JCXVuc2lnbmVkIGludCBsYXN0X2JyaWdodG5lc3M7CiYjNDM7CQlhdG9taWNfdCBsYXN0X2h3X2JyaWdodG5lc3M7CiYjNDM7CiYjNDM7CQlzdHJ1Y3QgbXV0ZXggbm90aWZfbXV0ZXg7IC8qIHByb3RlY3RzIG5vdGlmaWNhdGlvbnMgKi8KIAl9IGtiZF9ibDsKIAlzdHJ1Y3QgewogCQlib29sIGluaXRpYWxpemVkOwpAQCAtMTU5Miw3ICYjNDM7MTYyMCwyNCBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKGludCB0eXBlKQogCXJldHVybiAodHlwZSA9PSBLQkRfQkxfVFJJU1RBVEUpIHx8ICh0eXBlID09IEtCRF9CTF9UUklTVEFURV9BVVRPKTsKIH0KIAotc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCBpbnQgaHdfYnJpZ2h0bmVzcykKJiM0Mzt7CiYjNDM7CS8qIE9mZiwgbG93IG9yIGhpZ2ggKi8KJiM0MzsJaWYgKGh3X2JyaWdodG5lc3MgJmx0Oz0gcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcykKJiM0MzsJCXJldHVybiBod19icmlnaHRuZXNzOwomIzQzOwomIzQzOwkvKiBBdXRvIChjb250cm9sbGVkIGJ5IEVDIGFjY29yZGluZyB0byBBTFMpLCByZXBvcnQgYXMgb2ZmICovCiYjNDM7CWlmIChwcml2LSZndDtrYmRfYmwudHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyAmYW1wOyZhbXA7CiYjNDM7CSAgICBod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBVbmtub3duIHZhbHVlICovCiYjNDM7CWRldl93YXJuKCZhbXA7cHJpdi0mZ3Q7cGxhdGZvcm1fZGV2aWNlLSZndDtkZXYsCiYjNDM7CQkgJiMzNDtVbmtub3duIGtleWJvYXJkIGJhY2tsaWdodCB2YWx1ZTogJWQmIzM0OywgaHdfYnJpZ2h0bmVzcyk7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAlpbnQgZXJyOwpAQCAtMTYwNiwyMSAmIzQzOzE2NTEsNyBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCS8qIENvbnZlcnQgcmV0dXJuZWQgdmFsdWUgdG8gYnJpZ2h0bmVzcyBsZXZlbCAqLwotCQl2YWx1ZSA9IEZJRUxEX0dFVChLQkRfQkxfR0VUX0JSSUdIVE5FU1MsIHZhbHVlKTsKLQotCQkvKiBPZmYsIGxvdyBvciBoaWdoICovCi0JCWlmICh2YWx1ZSAmbHQ7PSBwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKQotCQkJcmV0dXJuIHZhbHVlOwotCi0JCS8qIEF1dG8sIHJlcG9ydCBhcyBvZmYgKi8KLQkJaWYgKHZhbHVlID09IHByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgJiM0MzsgMSkKLQkJCXJldHVybiAwOwotCi0JCS8qIFVua25vd24gdmFsdWUgKi8KLQkJZGV2X3dhcm4oJmFtcDtwcml2LSZndDtwbGF0Zm9ybV9kZXZpY2UtJmd0O2RldiwKLQkJCSAmIzM0O1Vua25vd24ga2V5Ym9hcmQgYmFja2xpZ2h0IHZhbHVlOiAlbHUmIzM0OywgdmFsdWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldHVybiBGSUVMRF9HRVQoS0JEX0JMX0dFVF9CUklHSFRORVNTLCB2YWx1ZSk7CiAJfQogCiAJZXJyID0gZXZhbF9oYWxzKHByaXYtJmd0O2FkZXYtJmd0O2hhbmRsZSwgJmFtcDt2YWx1ZSk7CkBAIC0xNjMwLDYgJiM0MzsxNjYxLDE2IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKIAlyZXR1cm4gISF0ZXN0X2JpdChIQUxTX0tCRF9CTF9TVEFURV9CSVQsICZhbXA7dmFsdWUpOwogfQogCiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQomIzQzO3sKJiM0MzsJaW50IGh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTsKJiM0MzsKJiM0MzsJaWYgKGh3X2JyaWdodG5lc3MgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGh3X2JyaWdodG5lc3M7CiYjNDM7CiYjNDM7CXJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogewogCXN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpOwpAQCAtMTYzNyw2MiAmIzQzOzE2NzgsMTIzIEBAIHN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBsZWRfY2xhCiAJcmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpOwogfQogCi1zdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBicmlnaHRuZXNzKQomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgaW50IGh3X2JyaWdodG5lc3MpCiB7Ci0JaW50IGVycjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWludCB0eXBlID0gcHJpdi0mZ3Q7a2JkX2JsLnR5cGU7CiYjNDM7CWludCBlcnI7CiAKIAlpZiAoaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUodHlwZSkpIHsKLQkJaWYgKGJyaWdodG5lc3MgJmd0OyBwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJdmFsdWUgPSBGSUVMRF9QUkVQKEtCRF9CTF9TRVRfQlJJR0hUTkVTUywgYnJpZ2h0bmVzcykgfAomIzQzOwkJdmFsdWUgPSBGSUVMRF9QUkVQKEtCRF9CTF9TRVRfQlJJR0hUTkVTUywgaHdfYnJpZ2h0bmVzcykgfAogCQkJRklFTERfUFJFUChLQkRfQkxfQ09NTUFORF9UWVBFLCB0eXBlKSB8CiAJCQlLQkRfQkxfQ09NTUFORF9TRVQ7CiAJCWVyciA9IGV4ZWNfa2JsYyhwcml2LSZndDthZGV2LSZndDtoYW5kbGUsIHZhbHVlKTsKIAl9IGVsc2UgewotCQllcnIgPSBleGVjX3NhbHMocHJpdi0mZ3Q7YWRldi0mZ3Q7aGFuZGxlLCBicmlnaHRuZXNzID8gU0FMU19LQkRfQkxfT04gOiBTQUxTX0tCRF9CTF9PRkYpOwomIzQzOwkJdmFsdWUgPSBod19icmlnaHRuZXNzID8gU0FMU19LQkRfQkxfT04gOiBTQUxTX0tCRF9CTF9PRkY7CiYjNDM7CQllcnIgPSBleGVjX3NhbHMocHJpdi0mZ3Q7YWRldi0mZ3Q7aGFuZGxlLCB2YWx1ZSk7CiAJfQotCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXByaXYtJmd0O2tiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cHJpdi0mZ3Q7a2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcywgaHdfYnJpZ2h0bmVzcyk7CiAKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgaW50IGJyaWdodG5lc3MpCiYjNDM7ewomIzQzOwlpZiAoYnJpZ2h0bmVzcyAmZ3Q7IHByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiAJCQkJCQkgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKIHsKIAlzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTsKIAomIzQzOwkvKgomIzQzOwkgKiBXaGVuIGRlaW5pdGlhbGl6aW5nOiBJdCBtdXN0IGJlIHRoZSBzaWRlIGVmZmVjdCBvZiBsZWRfY2RldgomIzQzOwkgKiB1bnJlZ2lzdHJhdGlvbiB3aGVuIG91ciBwcml2YXRlIHRyaWdnZXIgaXMgYWN0aXZlLiBXZSYjMzk7dmUgc2V0CiYjNDM7CSAqIExFRF9SRVRBSU5fQVRfU0hVVERPV04gdG8gcmV0YWluIGxlZF9jZGV2IGJyaWdodG5lc3MgbGV2ZWwuCiYjNDM7CSAqIFRvIGRvIHRoZSBzYW1lIGZvciBhdXRvIG1vZGUsIGdhdGUgY2hhbmdlcyBhbmQgcmV0dXJuIGVhcmx5LgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KCFwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJcmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpOwomIzQzOwomIzQzOwlyZXR1cm4gYXRvbWljX3JlYWQoJmFtcDtwcml2LSZndDtrYmRfYmwubGFzdF9od19icmlnaHRuZXNzKSA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7CiYjNDM7CiYjNDM7CXJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtpZGVhcGFkLWF1dG8mIzM0OywKJiM0MzsJLnRyaWdnZXJfdHlwZSA9ICZhbXA7aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGUsCiYjNDM7CS5hY3RpdmF0ZSA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZSwKJiM0MzsJLm9mZmxvYWRlZCA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9vZmZsb2FkZWQsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZDsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LAomIzQzOwkJCQkJICAgICBpbnQgaHdfYnJpZ2h0bmVzcywgaW50IGxhc3RfaHdfYnJpZ2h0bmVzcykKJiM0Mzt7CiYjNDM7CWJvb2wgaHdfY29udHJvbCwgbGFzdF9od19jb250cm9sOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7a2JkX2JsLnR5cGUgIT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWh3X2NvbnRyb2wgPSBod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUzsKJiM0MzsJbGFzdF9od19jb250cm9sID0gbGFzdF9od19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUzsKJiM0MzsKJiM0MzsJaWYgKGh3X2NvbnRyb2wgIT0gbGFzdF9od19jb250cm9sKQomIzQzOwkJbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCgmYW1wO3ByaXYtJmd0O2tiZF9ibC5sZWQsIGh3X2NvbnRyb2wpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX25vdGlmeShzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQogewotCWludCBicmlnaHRuZXNzOwomIzQzOwlpbnQgaHdfYnJpZ2h0bmVzcywgYnJpZ2h0bmVzcywgbGFzdF9od19icmlnaHRuZXNzOwogCiAJaWYgKCFwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQpCiAJCXJldHVybjsKIAotCWJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTsKLQlpZiAoYnJpZ2h0bmVzcyAmbHQ7IDApCiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3ByaXYtJmd0O2tiZF9ibC5ub3RpZl9tdXRleCk7CiYjNDM7CiYjNDM7CWh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTsKJiM0MzsJaWYgKGh3X2JyaWdodG5lc3MgJmx0OyAwKQogCQlyZXR1cm47CiAKLQlpZiAoYnJpZ2h0bmVzcyA9PSBwcml2LSZndDtrYmRfYmwubGFzdF9icmlnaHRuZXNzKQomIzQzOwlicmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTsKJiM0MzsJaWYgKGJyaWdodG5lc3MgJmx0OyAwKQomIzQzOwkJcmV0dXJuOyAvKiBSZWplY3QgaW5zYW5lIHZhbHVlcyBlYXJseS4gKi8KJiM0MzsKJiM0MzsJbGFzdF9od19icmlnaHRuZXNzID0gYXRvbWljX3hjaGcoJmFtcDtwcml2LSZndDtrYmRfYmwubGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKTsKJiM0MzsJaWYgKGh3X2JyaWdodG5lc3MgPT0gbGFzdF9od19icmlnaHRuZXNzKQogCQlyZXR1cm47CiAKLQlwcml2LSZndDtrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKJiM0MzsJaWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2wocHJpdiwgaHdfYnJpZ2h0bmVzcywgbGFzdF9od19icmlnaHRuZXNzKTsKIAogCWxlZF9jbGFzc2Rldl9ub3RpZnlfYnJpZ2h0bmVzc19od19jaGFuZ2VkKCZhbXA7cHJpdi0mZ3Q7a2JkX2JsLmxlZCwgYnJpZ2h0bmVzcyk7CiB9CiAKIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaW5pdChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQogewotCWludCBicmlnaHRuZXNzLCBlcnI7CiYjNDM7CWludCBod19icmlnaHRuZXNzLCBlcnI7CiAKIAlpZiAoIXByaXYtJmd0O2ZlYXR1cmVzLmtiZF9ibCkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xNzAwLDI4ICYjNDM7MTgwMiw2OCBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2luaXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKIAlpZiAoV0FSTl9PTihwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQpKQogCQlyZXR1cm4gLUVFWElTVDsKIAotCWlmIChpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZShwcml2LSZndDtrYmRfYmwudHlwZSkpCi0JCXByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyOwotCWVsc2UKLQkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7CiYjNDM7CWVyciA9IGRldm1fbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O3BsYXRmb3JtX2RldmljZS0mZ3Q7ZGV2LCAmYW1wO3ByaXYtJmd0O2tiZF9ibC5ub3RpZl9tdXRleCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwogCi0JYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpOwotCWlmIChicmlnaHRuZXNzICZsdDsgMCkKLQkJcmV0dXJuIGJyaWdodG5lc3M7CiYjNDM7CWh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTsKJiM0MzsJaWYgKGh3X2JyaWdodG5lc3MgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGh3X2JyaWdodG5lc3M7CiYjNDM7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtwcml2LSZndDtrYmRfYmwubGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKTsKIAotCXByaXYtJmd0O2tiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzOwogCXByaXYtJmd0O2tiZF9ibC5sZWQubmFtZSAgICAgICAgICAgICAgICAgICAgPSAmIzM0O3BsYXRmb3JtOjomIzM0OyBMRURfRlVOQ1RJT05fS0JEX0JBQ0tMSUdIVDsKIAlwcml2LSZndDtrYmRfYmwubGVkLmJyaWdodG5lc3NfZ2V0ICAgICAgICAgID0gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQ7CiAJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5icmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0OwogCXByaXYtJmd0O2tiZF9ibC5sZWQuZmxhZ3MgICAgICAgICAgICAgICAgICAgPSBMRURfQlJJR0hUX0hXX0NIQU5HRUQgfCBMRURfUkVUQUlOX0FUX1NIVVRET1dOOwogCi0JZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZhbXA7cHJpdi0mZ3Q7cGxhdGZvcm1fZGV2aWNlLSZndDtkZXYsICZhbXA7cHJpdi0mZ3Q7a2JkX2JsLmxlZCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJc3dpdGNoIChwcml2LSZndDtrYmRfYmwudHlwZSkgewomIzQzOwljYXNlIEtCRF9CTF9UUklTVEFURV9BVVRPOgomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7CiAKJiM0MzsJCWlmICghaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpIHsKJiM0MzsJCQlkZXZfd2FybigmYW1wO3ByaXYtJmd0O3BsYXRmb3JtX2RldmljZS0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtDb3VsZCBub3QgcHJvdmlkZSBMRUQgdHJpZ2dlciAlcyBmb3Iga2V5Ym9hcmQgYmFja2xpZ2h0XG4mIzM0OywKJiM0MzsJCQkJIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXByaXYtJmd0O2tiZF9ibC5sZWQuZmxhZ3MgICAgICAgICAgICAgfD0gTEVEX1RSSUdfSFdfQ0hBTkdFRDsKJiM0MzsJCXByaXYtJmd0O2tiZF9ibC5sZWQuaHdfY29udHJvbF90cmlnZ2VyID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWU7CiYjNDM7CQlwcml2LSZndDtrYmRfYmwubGVkLnRyaWdnZXJfdHlwZSAgICAgICA9ICZhbXA7aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7CiYjNDM7CiYjNDM7CQkvKiBIYXJkd2FyZSByZW1lbWJlcnMgdGhlIGxhc3QgYnJpZ2h0bmVzcyBsZXZlbCwgaW5jbHVkaW5nIGF1dG8gbW9kZS4gKi8KJiM0MzsJCWlmIChod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUykKJiM0MzsJCQlwcml2LSZndDtrYmRfYmwubGVkLmRlZmF1bHRfdHJpZ2dlciA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lOwomIzQzOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgS0JEX0JMX1RSSVNUQVRFOgomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBLQkRfQkxfU1RBTkRBUkQ6CiYjNDM7CQlwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJLyogVGhpcyBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBieSBpZGVhcGFkX2NoZWNrX2ZlYXR1cmVzKCkuICovCiYjNDM7CQl1bnJlYWNoYWJsZSgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFF1ZXVlIG5vdGlmaWNhdGlvbnMsIGFzIGtiZF9ibC5pbml0aWFsaXplZCBpcyBhYm91dCB0byBiZSBzZXQuICovCiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3ByaXYtJmd0O2tiZF9ibC5ub3RpZl9tdXRleCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNldHRpbmcga2JkX2JsLmluaXRpYWxpemVkIGFmdGVyIGxlZF9jbGFzc2Rldl9yZWdpc3RlcigpIGNvdWxkIGxlYWQKJiM0MzsJICogdG8gcmFjZSBjb25kaXRpb25zIGluIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0KCkgd2hlcmUKJiM0MzsJICoga2JkX2JsLmluaXRpYWxpemVkIGlzIGNoZWNrZWQsIHNvIHNldCBpdCBub3cuIEl0IGNhbiBiZSByZXZlcnRlZCBiYWNrCiYjNDM7CSAqIGlmIHRoZSBMRUQgY2xhc3NkZXYgZmFpbGVkIHRvIHJlZ2lzdGVyLgomIzQzOwkgKi8KIAlwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgPSB0cnVlOwogCi0JcmV0dXJuIDA7CiYjNDM7CWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmYW1wO3ByaXYtJmd0O3BsYXRmb3JtX2RldmljZS0mZ3Q7ZGV2LCAmYW1wO3ByaXYtJmd0O2tiZF9ibC5sZWQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmluaXRpYWxpemVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX2V4aXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKQEAgLTI1NDgsMTcgJiM0MzsyNjkwLDMwIEBAIHN0YXRpYyBpbnQgX19pbml0IGlkZWFwYWRfbGFwdG9wX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCiYjNDM7CWVyciA9IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKCZhbXA7aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJcHJfd2FybigmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBMRUQgdHJpZ2dlciAlczogJWRcbiYjMzQ7LAomIzQzOwkJCWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lLCBlcnIpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJZXJyID0gaWRlYXBhZF93bWlfZHJpdmVyX3JlZ2lzdGVyKCk7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gZXJyX2xlZHRyaWc7CiAKIAllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFtcDtpZGVhcGFkX2FjcGlfZHJpdmVyKTsKLQlpZiAoZXJyKSB7Ci0JCWlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7Ci0JCXJldHVybiBlcnI7Ci0JfQomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfd21pOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3dtaToKJiM0MzsJaWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTsKJiM0MztlcnJfbGVkdHJpZzoKJiM0MzsJaWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKQomIzQzOwkJbGVkX3RyaWdnZXJfdW5yZWdpc3RlcigmYW1wO2lkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7CiYjNDM7CXJldHVybiBlcnI7CiB9CiBtb2R1bGVfaW5pdChpZGVhcGFkX2xhcHRvcF9pbml0KQogCkBAIC0yNTY2LDYgJiM0MzsyNzIxLDkgQEAgc3RhdGljIHZvaWQgX19leGl0IGlkZWFwYWRfbGFwdG9wX2V4aXQodm9pZCkKIHsKIAlpZGVhcGFkX3dtaV9kcml2ZXJfdW5yZWdpc3RlcigpOwogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhbXA7aWRlYXBhZF9hY3BpX2RyaXZlcik7CiYjNDM7CiYjNDM7CWlmIChpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCkKJiM0MzsJCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoJmFtcDtpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpOwogfQogbW9kdWxlX2V4aXQoaWRlYXBhZF9sYXB0b3BfZXhpdCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMuaAppbmRleCBiMTZiODAzY2MxYWM1MS4uMTY3NTk4OTYyYjczZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGVkcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbGVkcy5oCkBAIC0xMDksNiAmIzQzOzEwOSw3IEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYgewogI2RlZmluZSBMRURfSU5JVF9ERUZBVUxUX1RSSUdHRVIgQklUKDIzKQogI2RlZmluZSBMRURfUkVKRUNUX05BTUVfQ09ORkxJQ1QgQklUKDI0KQogI2RlZmluZSBMRURfTVVMVElfQ09MT1IJCUJJVCgyNSkKJiM0MzsjZGVmaW5lIExFRF9UUklHX0hXX0NIQU5HRUQJQklUKDI2KQogCiAJLyogc2V0X2JyaWdodG5lc3Nfd29yayAvIGJsaW5rX3RpbWVyIGZsYWdzLCBhdG9taWMsIHByaXZhdGUuICovCiAJdW5zaWduZWQgbG9uZwkJd29ya19mbGFnczsKQEAgLTQ4NSw2ICYjNDM7NDg2LDcgQEAgc3RydWN0IGxlZF90cmlnZ2VyIHsKIAljb25zdCBjaGFyCSAqbmFtZTsKIAlpbnQJCSgqYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIAl2b2lkCQkoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKJiM0MzsJYm9vbAkJKCpvZmZsb2FkZWQpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIAogCS8qIEJyaWdodG5lc3Mgc2V0IGJ5IGxlZF90cmlnZ2VyX2V2ZW50ICovCiAJZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzOwpAQCAtNTMzLDYgJiM0Mzs1MzUsOSBAQCB2b2lkIGxlZF90cmlnZ2VyX2JsaW5rX29uZXNob3Qoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyLAogdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpOwogdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwomIzQzO3ZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwomIzQzOwomIzQzO2Jvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfc2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQkJdm9pZCAqdHJpZ2dlcl9kYXRhKQpAQCAtNTg0LDYgJiM0Mzs1ODksMTMgQEAgc3RhdGljIGlubGluZSBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgKmxlZF9nZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogewpAQCAtNTk4LDYgJiM0Mzs2MTAsMTMgQEAgbGVkX3RyaWdnZXJfZ2V0X2JyaWdodG5lc3MoY29uc3Qgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKQogCiAjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlMgKi8KIAomIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VECiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAomIzQzOwkJCQkJCQkgYm9vbCBhY3RpdmF0ZSkge30KJiM0MzsjZW5kaWYKJiM0MzsKIC8qIFRyaWdnZXIgc3BlY2lmaWMgZW51bSAqLwogZW51bSBsZWRfdHJpZ2dlcl9uZXRkZXZfbW9kZXMgewogCVRSSUdHRVJfTkVUREVWX0xJTksgPSAwLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ1NgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciBMRUQgSGFyZHdhcmUgVHJpZ2dlciBUcmFuc2l0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUgdGhhdCBhaW1zIHRvIGludHJvZHVjZSBzdXBwb3J0IGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyBpbiB0aGUgTEVEIHN1YnN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgd29ydGggZnV6emluZz8mIzM0OyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gSXQgdG91Y2hlcyBhIGRlY2VudCBudW1iZXIgb2YgZmlsZXMsIGluY2x1ZGluZyB0aGUgY29yZSBMRUQgY2xhc3NlcyAoYGxlZC1jbGFzcy5jYCwgYGxlZC10cmlnZ2Vycy5jYCksIHNvbWUgc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVycyAoYGxlZHMtY3Jvc19lYy5jYCwgYGxlZHMtdHVycmlzLW9tbmlhLmNgLCBgaWRlYXBhZC1sYXB0b3AuY2ApLCBhbmQgYSBuZXR3b3JrIGRldmljZSB0cmlnZ2VyIChgbGVkdHJpZy1uZXRkZXYuY2ApLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBmb290cHJpbnQsIHdoaWNoIGdpdmVzIHVzIGEgc29saWQgYXR0YWNrIHN1cmZhY2UgdG8gdGhpbmsgYWJvdXQuCgpUaGUgY2hhbmdlcyBpbnZvbHZlIGFkZGluZyBuZXcgZnVuY3Rpb25zIHRvIHRoZSBjb3JlIHRyaWdnZXIgbG9naWM6IGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCwgYGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRgLCBhbmQgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYC4gQWxzbywgYGlkZWFwYWQtbGFwdG9wLmNgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGFjdHVhbGx5ICp1c2UqIHRoaXMgbmV3IGZlYXR1cmUuIFJpZ2h0LCBzbyB0aGlzIGNvcmUgTEVEIHRyaWdnZXIgbG9naWMgaXMgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMuIFRoYXQmIzM5O3MgYSBtYWpvciBwbHVzLiBUaGUgcGxhdGZvcm0gZHJpdmVyIGlzIGEgYml0IG9mIGEgcXVlc3Rpb24gbWFyayAtIG1pZ2h0IGJlIHRyaWNreSB0byB0ZXN0IHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUsIGJ1dCB0aGUgY29yZSBzdHVmZiBpcyBmYWlyIGdhbWUuCgpIYW5nIG9uLi4uIENhbiB3ZSBhY3R1YWxseSByZWFjaCBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2U/IEhtbSwgbm8sIGxvb2tzIGxpa2UgZHJpdmVycyBjYWxsIGl0IHdoZW4gaGFyZHdhcmUgc3RhdGUgY2hhbmdlcy4gQnV0IHdlICpjYW4qIGdldCB0byBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YCB2aWEgc3lzZnMsIGFuZCBgbGVkX3RyaWdnZXJfc2V0YCB2aWEgdGhlIGB0cmlnZ2VyYCBhdHRyaWJ1dGUuIE5vdywgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYC4uLnRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYGJyaWdodG5lc3Nfc3RvcmVgIHdoZW4gdGhlIExFRCBzdGF0ZSBpc24mIzM5O3QgYExFRF9PRkZgLiBJbnRlcmVzdGluZy4KCkxldCYjMzk7cyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBXaGVyZSBlbHNlIGlzIGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCBjYWxsZWQ/IExvb2tzIGxpa2UgYGlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sYCBpbiBgaWRlYXBhZC1sYXB0b3AuY2AuIExldCYjMzk7cyBjb25maXJtIHdpdGggYSBxdWljayBgZ3JlcGAganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjYWxsIHNpdGVzLCBhbmQgd2UgY2FuIGNvbmZpcm0gdGhhdCB3ZSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBhdHRhY2sgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdD0zNDU9ZmxhZ3MgYmVmb3JlIHJlZ2lzdGVyaW5nLiBUbyB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciBhY2NvcmRpbmdseSwgY2FsbFxuRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0OjM0NjpgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAgb24gdGhlIExFRCBjbGFzc2Rldi5cbkRvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdC0zNDctXG4tLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jPTQ5Mj1zdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24oc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUsXG4tLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTUxOS1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzo1MjA6dm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTUyMS17XG4tLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTU0NC19XG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6NTQ1OkVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQpO1xuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTU0Ni0jZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jPTE3NTQ9c3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2woc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYy0xNzY1LVx0aWYgKGh3X2NvbnRyb2wgIT0gbGFzdF9od19jb250cm9sKVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmM6MTc2NjpcdFx0bGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQsIGh3X2NvbnRyb2wpO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMtMTc2Ny19XG4tLVxuaW5jbHVkZS9saW51eC9sZWRzLmg9NjA2PWxlZF90cmlnZ2VyX2dldF9icmlnaHRuZXNzKGNvbnN0IHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcilcbi0tXG5pbmNsdWRlL2xpbnV4L2xlZHMuaC02MTMtI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbmluY2x1ZGUvbGludXgvbGVkcy5oOjYxNDp2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpO1xuaW5jbHVkZS9saW51eC9sZWRzLmgtNjE1LSNlbHNlXG5pbmNsdWRlL2xpbnV4L2xlZHMuaDo2MTY6c3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG5pbmNsdWRlL2xpbnV4L2xlZHMuaC02MTctXHRcdFx0XHRcdFx0XHQgYm9vbCBhY3RpdmF0ZSkge31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAxMgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTEVEIFRyaWdnZXIgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiBtYW5hZ2luZyB0aG9zZSBMRUQgdHJpZ2dlcnMgc2hvdWxkIGJlIGFjY2Vzc2libGUgdmlhIHN5c2ZzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGtlcm5lbCBjb25maWd1cmF0aW9ucyByZXF1aXJlZCB0byBlbmFibGUgYW5kIHV0aWxpemUgdGhlbSBlZmZlY3RpdmVseS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzOiBgQ09ORklHX0xFRFNfVFJJR0dFUlNgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgbm8gZG91YnQuIFRoZW4sIEkgc3VzcGVjdCB3ZSYjMzk7bGwgbmVlZCBgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAgZm9yIHNwZWNpZmljIGhhcmR3YXJlLXJlbGF0ZWQgY2hhbmdlcyBhcyB0aGUgbmFtZSBpbXBsaWVzLCBhbmQgb2YgY291cnNlLCBgQ09ORklHX0xFRFNfQ0xBU1NgIGlzIHByb2JhYmx5IGFsc28gY3JpdGljYWwgZm9yIHRoZSBkZXZpY2UgY2xhc3Mgc3VwcG9ydC4KClRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyIG9uIHRoZSBgSFdfQ0hBTkdFRGAgdHJpZ2dlciYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGBkcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgZGV0YWlscyBmb3IgdGhhdCBwYXJ0aWN1bGFyIHRyaWdnZXIgc2hvdWxkIHJlc2lkZS4gVGhpcyBpcyB0aGUgZmFzdGVzdCByb3V0ZSB0byBjb25maXJtIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBhbnkgbnVhbmNlcyBpbiBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnPTEwPWlmIExFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTEtXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnOjEyOmNvbmZpZyBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTMtXHRib29sIFwmIzM0O0xFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ0NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMRUQgVHJpZ2dlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXMgdGhpcyBgTEVEU19UUklHR0VSU19IV19DSEFOR0VEYCBzZXR0aW5nIGVuYWJsZWQgYnkgZGVmYXVsdD8gTm8sIGl0JiMzOTtzIGEgYm9vbCwgc28gdGhhdCBhbnN3ZXJzIHRoYXQgcXVlc3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBnZXRzIGFkZGVkIHRvIG91ciBFbmFibGVDb25maWdzLiBUaGF0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LgoKTm93LCB3aGF0IGFib3V0IHRoZSBgaWRlYXBhZC1sYXB0b3AuY2AgZHJpdmVyPyBBaCwgdGhhdCByZWxpZXMgb24gYENPTkZJR19JREVBUEFEX0xBUFRPUGAuIFRoYXQmIzM5O3MgYW4geDg2IHBsYXRmb3JtIGRyaXZlciwgdGllZCB0byBBQ1BJIGFuZCBzcGVjaWZpYyBoYXJkd2FyZSwgc28gZnV6emluZyBpdCBkaXJlY3RseSBjb3VsZCBiZSB0cmlja3kuIEl0JiMzOTtzIG5vdCBnb2luZyB0byBiZSB0aGUgKmVhc2llc3QqIHRhcmdldCwgdGhhdCYjMzk7cyBmb3Igc3VyZS4gSSBhbSBub3Qgc2VlaW5nIGEgZGlyZWN0IHBhdGggZm9yIGVhc2llciBmdXp6aW5nIG9mIHRoaXMgZHJpdmVyLgoKSG93ZXZlciwgdGhlIGNvcmUgTEVEIHRyaWdnZXIgbG9naWMsIHRoYXQmIzM5O3Mgc3RpbGwgcG90ZW50aWFsbHkgcmVhY2hhYmxlLiBXZSBtaWdodCBzdGlsbCBoYXZlIGEgc2hvdCwgZXZlbiBpZiBpdCBpcyBub3QgdGhlIGVhc2llc3QuIExldCBtZSBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiBgZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBsaWtlbHkgbGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jPTM0PXRyaWdnZXJfcmVsZXZhbnQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMzgtXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6Mzk6c3RhdGljIGJvb2wgX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTQwLXtcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM9NTk9Ym9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuLS1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy02MS1cdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6NjI6XHRyZXR1cm4gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy02My19XG4tLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jPTMyMT12b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuLS1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy0zMjQtXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6MzI1Olx0aWYgKF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2RldikpXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMzI2LVx0XHRsZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIE5VTEwpO1xuLS1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz0zNzU9c3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy0zODctXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6Mzg4Olx0b2ZmbG9hZGVkID0gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy0zODktXHRoaXQgPSBvZmZsb2FkZWQgfHwgKHRyaWcgXHUwMDI2XHUwMDI2ICFzdHJjbXAobGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLCB0cmlnLVx1MDAzZW5hbWUpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMzMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBIYXJkd2FyZSBMRUQgVHJpZ2dlciBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIExFRCB0cmlnZ2VyIGNvZGUsIGFuZCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBvbmVzIEkgbmVlZCB0byB6ZXJvIGluIG9uIGFyZTogYF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAsIGBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYCwgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCwgYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AsIGBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb25gLCBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAsIGFuZCBgX19sZWRfdHJpZ2dlcl9zZXRgLgoKUmlnaHQsIHRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgY29yZSBzZXQgdG8gc3RhcnQgd2l0aC4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gaGFyZHdhcmUgY29udHJvbCBhbmQgdGhlIHNvZnR3YXJlIHRyaWdnZXJzIGlzIGltcG9ydGFudC4gSSB0aGluayB0aGF0IGBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb25gIGlzIHByb2JhYmx5IHRoZSBtb3N0IGNyaXRpY2FsIHBsYWNlIHRvIGJlZ2luIHVuZGVyc3RhbmRpbmcgdGhlIHN0YXRlIHRyYW5zaXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz00ODk9RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7XG4tLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTQ5MS0jaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jOjQ5MjpzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24oc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUsXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNDkzLVx0XHRcdFx0XHRcdCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKmhjX3RyaWcpXG4tLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jPTUyMD12b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpXG4tLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTUzNC1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzo1MzU6XHRcdFx0XHRsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24obGVkX2NkZXYsIGFjdGl2YXRlLCB0cmlnKTtcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy01MzYtXHRcdFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTI1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4cGxvcmluZyBMRUQgVHJpZ2dlciBDb250cm9sKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgSSBjYW4gbWFuaXB1bGF0ZSBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAgZnJvbSB1c2Vyc3BhY2UsIHNwZWNpZmljYWxseSB0byB0cmlnZ2VyIHNvbWUgaW50ZXJlc3RpbmcgYmVoYXZpb3IuIE15IGluaXRpYWwgdGhvdWdodCBpcyBubywgYmVjYXVzZSBpdCBhcHBlYXJzIHRvIGJlIHByaW1hcmlseSBjYWxsZWQgYnkgZHJpdmVycy4gQnV0IHRoZW4uLi4gaG9sZCBvbiwgaXQgKmlzKiBleHBvcnRlZCEgVGhhdCBvcGVucyBhIHRpbnkgd2luZG93LiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIGZpbmQgYSB2dWxuZXJhYmxlIGRyaXZlciB0aGF0IHByb3ZpZGVzIGEgYmFja2Rvb3I/CgpNeSBuZXh0IGF2ZW51ZSBvZiBhdHRhY2sgaXMgdG8gZmluZCBhIGZ1enphYmxlIGRyaXZlciB0aGF0ICptaWdodCogYmUgcmVhY2hhYmxlLiBgaWRlYXBhZC1sYXB0b3AuY2AgaXMgdGVtcHRpbmcuIEl0JiMzOTtzIGFuIEFDUEkgZHJpdmVyLCBhbmQgQUNQSSBpbnRlcmZhY2VzIGNhbiwgaW4gdGhlb3J5LCBiZSBmdXp6IHRlc3RlZC4gSXQmIzM5O3Mgbm90IGEgZGlyZWN0IHJvdXRlLCBJIGtub3csIEFDUEkgZnV6emluZyBjYW4gYmUgYSBwYWluIGluIHRoZS4uLiB3ZWxsLCB5b3UgZ2V0IHRoZSBpZGVhLiBJdCYjMzk7cyBub3QgdGhlIGVhc2llc3QgcGF0aC4KClRoZW4gSSBzaGlmdGVkIG15IHBlcnNwZWN0aXZlLCB3aGF0IGFib3V0IGEgc2ltaWxhciBmdW5jdGlvbiBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgPyBXaGVyZSBpcyB0aGF0IGNhbGxlZD8gSSBmaW5kIGl0IGluIGBicmlnaHRuZXNzX3N0b3JlYCB3aXRoaW4gYGxlZC1jbGFzcy5jYC4gQWgsIHRoYXTigJlzIGludGVyZXN0aW5nLCBgYnJpZ2h0bmVzc19zdG9yZWAgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2ZzLiBUaGF0JiMzOTtzIGEgZGlyZWN0IHJvdXRlIGludG8gdGhlIGtlcm5lbCBmcm9tIHVzZXJzcGFjZS4gSSYjMzk7dmUgZ290IGEgbXVjaCBtb3JlIGFjY2Vzc2libGUgaW50ZXJmYWNlIHRoZXJlIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jPTQ3PXN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy02Ny1cdGVsc2VcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo2ODpcdFx0bGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wobGVkX2NkZXYpO1xuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTY5LVxuLS1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz0zMTk9RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVtb3ZlKTtcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy0zMjAtXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6MzIxOnZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMzIyLXtcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMzI3LX1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzozMjg6RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wpO1xuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTMyOS1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlZHMuaD01Mzc9dm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuaW5jbHVkZS9saW51eC9sZWRzLmg6NTM4OnZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuaW5jbHVkZS9saW51eC9sZWRzLmgtNTM5LVxuLS1cbmluY2x1ZGUvbGludXgvbGVkcy5oPTU5MT1zdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fVxuaW5jbHVkZS9saW51eC9sZWRzLmg6NTkyOnN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cbmluY2x1ZGUvbGludXgvbGVkcy5oLTU5My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIExFRCBUcmlnZ2VyIENvbnRyb2wgRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gbWFwIG91dCB0aGUgY29udHJvbCBmbG93IGZvciB0aGVzZSBMRUQgdHJpZ2dlcnMuIEl0IHNlZW1zIHRoYXQgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gR29vZCwgdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kLiBUaGVuLCB0aGUgYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AgZnVuY3Rpb24sIHdoaWNoIGRlYWxzIHdpdGggdGhlIHN5c2ZzIGludGVyZmFjZSB0aHJvdWdoIGB0cmlnZ2VyX21heV9vZmZsb2FkYCwgaXMgYWxzbyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gTm93LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nIGJlY2F1c2UgYF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAgaGFzIHR3byBkaWZmZXJlbnQgcGF0aHMgdG8gaXQsIHRocm91Z2ggdGhlIGNhbGxzIHRvIGB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dgIGFuZCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIGFuZCB0aGUgY29ubmVjdGlvbiBtYWtlcyBzZW5zZS4gIEFuZCB0aGVuIGZpbmFsbHksIHRoZXJlJiMzOTtzIGBfX2xlZF90cmlnZ2VyX3NldGAsIHRoYXQmIzM5O3MgcmVhY2hhYmxlIHRocm91Z2ggYGxlZF90cmlnZ2VyX3NldGAuIFRoaXMgbGFzdCBvbmUgaXMgdWx0aW1hdGVseSBjYWxsZWQgZnJvbSBgbGVkX3RyaWdnZXJfd3JpdGVgLCB3aGljaCBpdHNlbGYgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzeXNmcyBgdHJpZ2dlcmAgYXR0cmlidXRlLiBTbywgaWYgYSB1c2VyIHdyaXRlcyB0byB0aGF0IHN5c2ZzIGVudHJ5LCB3ZSYjMzk7cmUgdWx0aW1hdGVseSBoaXR0aW5nIGBfX2xlZF90cmlnZ2VyX3NldGAuCgpBbHJpZ2h0LCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBhIGRlY2VudCBncmFzcCBvbiB0aGlzLiBOb3cgbGV0JiMzOTtzIGRpZyBpbnRvIGBsZWRfdHJpZ2dlcl93cml0ZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIHJlYWxseSBzZWVtcyB0byBiZSBoYXBwZW5pbmcgd2l0aCB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGVkX3RyaWdnZXJfd3JpdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jPTkxPXN0YXRpYyBERVZJQ0VfQVRUUl9STyhtYXhfYnJpZ2h0bmVzcyk7XG4tLVxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTkzLSNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jOjk0OnN0YXRpYyBjb25zdCBCSU5fQVRUUih0cmlnZ2VyLCAwNjQ0LCBsZWRfdHJpZ2dlcl9yZWFkLCBsZWRfdHJpZ2dlcl93cml0ZSwgMCk7XG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtOTUtc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpjb25zdCBsZWRfdHJpZ2dlcl9iaW5fYXR0cnNbXSA9IHtcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM9NjQ9RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZCk7XG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNjUtXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6NjY6c3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNjctXHRcdFx0ICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMTEwLX1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzoxMTE6RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfd3JpdGUpO1xuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTExMi1cbi0tXG5kcml2ZXJzL2xlZHMvbGVkcy5oPTI0PXNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxuZHJpdmVycy9sZWRzL2xlZHMuaC0yNi1cdFx0XHRsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpO1xuZHJpdmVycy9sZWRzL2xlZHMuaDoyNzpzc2l6ZV90IGxlZF90cmlnZ2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbmRyaXZlcnMvbGVkcy9sZWRzLmgtMjgtXHRcdFx0Y29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzA5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIExFRCBUcmlnZ2VyIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O3ZlIHBpbnBvaW50ZWQgdGhlIGNvcmUgTEVEIHRyaWdnZXIgbG9naWMgYXMgYSBwcm9taXNpbmcgdGFyZ2V0IGZvciBmdXp6aW5nLiBEZWZpbml0ZWx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGluLiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgYXJlIGBMRURTX0NMQVNTYCwgYExFRFNfVFJJR0dFUlNgLCBhbmQgYExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAuIFRoYXQgbGFzdCBvbmUgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGFzIGl0IGhhbmRsZXMgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbnMuCgpXYWl0LCBJIHNlZSB0aGF0IGBpZGVhcGFkLWxhcHRvcC5jYCBpcyBhbHNvIG1vZGlmaWVkLCB3aGljaCBtYWtlcyBtZSB3b25kZXIgaWYgdGhhdCBkcml2ZXIgaXMgYWxzbyB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciwgdGhvdWdoLCBhbmQgU3l6a2FsbGVyIGlzbiYjMzk7dCB0eXBpY2FsbHkgZ3JlYXQgYXQgZnV6emluZyBBQ1BJIHBsYXRmb3JtIGRyaXZlcnMgdW5sZXNzIHRoZXJlJiMzOTtzIHNwZWNpZmljIHN1cHBvcnQuIEJ1dCB0aGF0IGNvcmUgTEVEIHRyaWdnZXIgbG9naWMgaXMgbW9yZSBnZW5lcmljLCBzbyBJJiMzOTtsbCBwcmlvcml0aXplIHRoYXQgZm9yIG5vdy4gSSYjMzk7bGwgZm9jdXMgb24gYExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAgdG8gZW5zdXJlIGhhcmR3YXJlLWluaXRpYXRlZCB0cmFuc2l0aW9uIHN1cHBvcnQuCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50IHRvIGZvY3VzIG9uPyBMZXQmIzM5O3Mgc2VlOiBgX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYCwgYGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRgLCBgX19sZWRfdHJpZ2dlcl9zZXRgLCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgLCBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YCwgYGxlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbmAsIGFuZCBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAuIFRoZXNlIGxvb2sgbGlrZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYW5kIGNvbnRyb2wgZmxvdyBmdW5jdGlvbnMuCgpPa2F5LCBJIG5lZWQgdG8ga25vdyBpZiBgbGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uYCBpcyByZWFjaGFibGUgd2l0aG91dCBgaWRlYXBhZC1sYXB0b3AuY2AuIEl0JiMzOTtzIG9ubHkgY2FsbGVkIGJ5IGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCwgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgYGlkZWFwYWQtbGFwdG9wLmNgLiBIbW0sIHNvIGlmIEkgd2FudCB0byBmdXp6IGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCwgSSBuZWVkIGBpZGVhcGFkLWxhcHRvcC5jYCBvciBhbm90aGVyIGRyaXZlciB0aGF0IGNhbGxzIGl0LiBTaW5jZSBTeXprYWxsZXIgY2FuJiMzOTt0IGVhc2lseSByZWFjaCBgaWRlYXBhZC1sYXB0b3AuY2AgZHVlIHRvIGl0cyBBQ1BJIGhhcmR3YXJlIGRlcGVuZGVuY3ksIG1heWJlIEkgc2hvdWxkIHRyeSBlbmFibGluZyBgSURFQVBBRF9MQVBUT1BgIGluIHRoZSBjb25maWdzIGp1c3QgaW4gY2FzZS4gSXQgbWlnaHQgYmUgd29ydGggaW5jbHVkaW5nLCByaWdodD8gTGV0IG1lIGNoZWNrIGBkcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSURFQVBBRF9MQVBUT1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWctNS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnOjY6Y29uZmlnIElERUFQQURfTEFQVE9QXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7TGVub3ZvIElkZWFQYWQgTGFwdG9wIEV4dHJhc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcyMAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEltbWVkaWF0ZSBQbGFuKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBjb250aW5nZW50IG9uIGBBQ1BJYCBhbmQgdGhlIHVuZGVybHlpbmcgYFg4NmAgYXJjaGl0ZWN0dXJlLiBUaGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgSURFQVBBRF9MQVBUT1BgIGlzIGluY2x1ZGVkIHdpdGhpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgdG8gcHJvcGVybHkgZW5hYmxlIHRoZSBzeXN0ZW0uCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgYGxlZHMtY3Jvc19lYy5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIHRvIHNlZSBob3cgdGhlIEVDIGhhbmRsZXMgdGhlIExFRHMsIGFuZCBob3BlZnVsbHksIEkgY2FuIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExFRFNfQ1JPU19FQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2xlZHMvS2NvbmZpZz0xODk9Y29uZmlnIExFRFNfQ1IwMDE0MTE0XG4tLVxuZHJpdmVycy9sZWRzL0tjb25maWctMjAxLVxuZHJpdmVycy9sZWRzL0tjb25maWc6MjAyOmNvbmZpZyBMRURTX0NST1NfRUNcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTIwMy1cdHRyaXN0YXRlIFwmIzM0O0xFRCBTdXBwb3J0IGZvciBDaHJvbWVPUyBFQ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTAwNwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGEgbW9kZXJhdGVseSBleHBlcmllbmNlZCBkZXZlbG9wZXIgZmFtaWxpYXIgd2l0aCBlbWJlZGRlZCBzeXN0ZW1zOgoKKipDb25zaWRlcmluZyBgbGVkcy10dXJyaXMtb21uaWEuY2AqKgoKUmlnaHQsIHNvIHRoYXQgdGhvdWdodCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBkcml2ZXIgaW1wbGVtZW50YXRpb25zLiBJJiMzOTttIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiBzb21lIGxvdy1sZXZlbCBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgcHJvYmFibHkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgb3Igc29tZXRoaW5nIHZlcnkgY2xvc2VseSByZWxhdGVkLiAmIzM0O2xlZHMmIzM0OyBvYnZpb3VzbHkgcG9pbnRzIHRvIExFRCBjb250cm9sLCBhbmQgdGhlICYjMzQ7dHVycmlzLW9tbmlhJiMzNDsgcGFydCBpcyB0aGUgc3BlY2lmaWMgdGFyZ2V0IHBsYXRmb3JtIOKAkyBhIFR1cnJpcyBPbW5pYSByb3V0ZXIsIEkgYmVsaWV2ZS4gU28gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyB0aGUgTEVEcyBvbiB0aGF0IHBhcnRpY3VsYXIgZGV2aWNlLiBJJiMzOTttIHByb2JhYmx5IHRoaW5raW5nIGFib3V0IGhvdyB0aGVzZSBMRURzIGFyZSBtYXBwZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUgcGlucywgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzIGludm9sdmVkLCBhbmQgaG93IHRoZSBkcml2ZXIgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBpbnRlcmZhY2VzIGZvciBoaWdoZXItbGV2ZWwgYXBwbGljYXRpb25zIChsaWtlIHRoZSB1c2VyIGludGVyZmFjZSkgdG8gaW50ZXJhY3Qgd2l0aCB0aGVtLiBJJiMzOTtsbCBsaWtlbHkgYmUgZ29pbmcgdGhyb3VnaCB0aGUgY29kZSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgZm9yIHNldHRpbmcgTEVEIHN0YXRlcyAob24vb2ZmLCBibGlua2luZywgYnJpZ2h0bmVzcyksIGludGVycnVwdCBoYW5kbGluZyAoaWYgYW55KSwgYW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgZGV2aWNlJiMzOTtzIGhhcmR3YXJlLiBJIG1pZ2h0IGJlIGNvbnNpZGVyaW5nIG1vZGlmaWNhdGlvbnMgb3IgZGVidWdnaW5nIGEgcHJvYmxlbSB3aXRoIHRoZSBkcml2ZXIuIEkmIzM5O2xsIGxpa2VseSBiZSBjaGVja2luZyBmb3IgY29ycmVjdCBpbnRlcnJ1cHQgaGFuZGxpbmcsIERNQSwgY29uY3VycmVuY3ksIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gSG9wZWZ1bGx5LCB0aGUgY29kZSBpcyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGZvbGxvd3MgZ29vZCBjb2RpbmcgcHJhY3RpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTEVEU19UVVJSSVNfT01OSUEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzL0tjb25maWc9MjE3PWNvbmZpZyBMRURTX0VMMTUyMDMwMDBcbi0tXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yMjktXG5kcml2ZXJzL2xlZHMvS2NvbmZpZzoyMzA6Y29uZmlnIExFRFNfVFVSUklTX09NTklBXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yMzEtXHR0cmlzdGF0ZSBcJiMzNDtMRUQgc3VwcG9ydCBmb3IgQ1ouTklDJiMzOTtzIFR1cnJpcyBPbW5pYVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQyMwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byB0aGUgQ29kZTogYGxlZHRyaWctbmV0ZGV2LmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoYXQgYGxlZHRyaWctbmV0ZGV2LmNgIGZpbGUgYWdhaW4uIFNlZW1zIGxpa2UgYSBjcml0aWNhbCBwaWVjZSwgZG9lc24mIzM5O3QgaXQ/IEl0JiMzOTtzIHdoZXJlIHRoZSBuZXR3b3JrIGRldmljZSBMRUQgdHJpZ2dlcmluZyBsb2dpYyByZXNpZGVzLCBvYnZpb3VzbHkuIFRoZSAmIzM0O2xlZHRyaWcmIzM0OyBwcmVmaXggZ2l2ZXMgaXQgYXdheS4gSSYjMzk7bSBpbWFnaW5pbmcgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLiBNeSBleHBlcmllbmNlIGhhcyBiZWVuIEkgaGF2ZSBzZWVuIHNpbWlsYXIgY29uc3RydWN0cyBoYW5kbGluZyBpbnRlcmZhY2UgY2hhbmdlcywgcGFja2V0IGRyb3BzLCBvciBsaW5rIHN0YXR1cyBjaGFuZ2VzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtaW5kIG9uIHRoZSBnZW5lcmFsIExFRCB0cmlnZ2VyaW5nIGZyYW1ld29yay4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaGVyZT8gSG93IGFyZSB0aGUgbmV0d29yayBldmVudHMgaG9va2VkIGludG8gdGhlIExFRCBkcml2ZXIgY2FsbHM/IEkgYmV0IHRoZXJlJiMzOTtzIHNvbWUgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gZ29pbmcgb24sIGRlYWxpbmcgd2l0aCBOZXRsaW5rIGV2ZW50cywgcHJvYmFibHkgc29tZSB3b3JrcXVldWVzIHRvIGF2b2lkIGJsb2NraW5nLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRhdGEgZmxvdyBhbmQgaG93IHRoZSBuZXRkZXYgZXZlbnRzLCBpbnRlcmZhY2UgdXAsIGludGVyZmFjZSBkb3duLCB0cmFuc21pdCBvciByZWNlaXZlIHRyYWZmaWMgZXZlbnRzIGFyZSBmZWQgaW50byB0aGlzIGFuZCB1bHRpbWF0ZWx5IGhvdyB0aGV5IGNoYW5nZSBhbiBMRUQgc3RhdHVzLiBJIGFudGljaXBhdGUgc2VlaW5nIHNvbWUgY2xldmVyIHRyaWNrcyB0byBrZWVwIHRoZSBvdmVyaGVhZCBsb3csIGVzcGVjaWFsbHkgaW4gaGlnaC1iYW5kd2lkdGggc2NlbmFyaW9zLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0aGUgaW50ZXJydXB0IGNvbnRleHQgdmVyc3VzIHRhc2sgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgaW50ZXJydXB0IHBhdGggZmlyc3Q7IGdldCB0aGUgbW9zdCBjcml0aWNhbCBwYXJ0IG9mIHRoZSBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMRURTX1RSSUdHRVJfTkVUREVWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc9MTI1PWNvbmZpZyBMRURTX1RSSUdHRVJfUEFOSUNcbi0tXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTEzMy1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTM0OmNvbmZpZyBMRURTX1RSSUdHRVJfTkVUREVWXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTEzNS1cdHRyaXN0YXRlIFwmIzM0O0xFRCBOZXRkZXYgVHJpZ2dlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg0NwoJCQkJCQkJb3V0cHV0OiAyMjcKCQkJCQkJCXRob3VnaHRzOiAxMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIExFRCBIYXJkd2FyZSBDb250cm9sIGFuZCBPZmZsb2FkKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBhZGQgYExFRFNfVFJJR0dFUl9ORVRERVZgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEl0JiMzOTtzIGEgZmFpcmx5IGdlbmVyaWMgdHJpZ2dlciB0aGF0IGltcGxlbWVudHMgYG9mZmxvYWRlZGAsIGFuZCB0aGF0IG1ha2VzIGl0IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGVzdGluZyB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGFsc28gZ29pbmcgdG8gdGhyb3cgaW4gYExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAgYmVjYXVzZSB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzLiBJJiMzOTtsbCBrZWVwIGBJREVBUEFEX0xBUFRPUGAgYXMgd2VsbCwgc2luY2UgdGhhdCYjMzk7cyBhbm90aGVyIGltcG9ydGFudCBvbmUuCgpJIGJyaWVmbHkgY29uc2lkZXJlZCBhZGRpbmcgYExFRFNfQ0xBU1NgLCBgTEVEU19UUklHR0VSU2AsIGBMRURTX0NST1NfRUNgIGFuZCBgTEVEU19UVVJSSVNfT01OSUFgIGFzIHdlbGwsIGJ1dCBgTEVEU19DTEFTU2AgYW5kIGBMRURTX1RSSUdHRVJTYCBhcmUgcHJvYmFibHkgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQuIGBMRURTX0NST1NfRUNgIGRlcGVuZHMgb24gYENST1NfRUNgLCBhbmQgYExFRFNfVFVSUklTX09NTklBYCBoYXMgbW9yZSBkZXBlbmRlbmNpZXMsIHNvIGBMRURTX1RSSUdHRVJfTkVUREVWYCBhbG9uZyB3aXRoIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgIHNlZW1zIGxpa2UgYSBnb29kIGJhbGFuY2UgZm9yIHRoZSBtb21lbnQuIExldCYjMzk7cyBzZWUgaWYgdGhhdCYjMzk7cyBlbm91Z2ggdG8gZ2V0IGF0IHRoZSBjb3JlIGlzc3VlLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIGFuZCBjb25maXJtZWQgdGhhdCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBzdXBwb3J0ZWQgYnkgc3l6a2FsbGVyLiBJJiMzOTtsbCBuZWVkIHRvIGluY2x1ZGU6CgoqICAgYF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAKKiAgIGBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYAoqICAgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYAoqICAgYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AKKiAgIGBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb25gCiogICBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAKKiAgIGBfX2xlZF90cmlnZ2VyX3NldGAKKiAgIGBuZXRkZXZfdHJpZ19vZmZsb2FkZWRgCgpJIGxvb2tlZCBhdCB0aGUgY29kZSB0byBzZWUgd2hlcmUgdGhlc2UgZ2V0IHVzZWQuIGBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbGAgaXMgY2FsbGVkIHdoZW4gd3JpdGluZyB0byBgL3N5cy9jbGFzcy9sZWRzLyZsdDtsZWQmZ3Q7L2JyaWdodG5lc3NgIHdoZW4gdGhlIHN0YXRlIGlzbiYjMzk7dCBMRURfT0ZGLCB3aGljaCBtZWFucyB0aGUgZnV6emluZyB3aWxsIHRyaWdnZXIgdGhlIGNvZGUgcGF0aC4gYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AgaXMgY2FsbGVkIG9uIHJlYWRpbmcgYC9zeXMvY2xhc3MvbGVkcy8mbHQ7bGVkJmd0Oy90cmlnZ2VyX21heV9vZmZsb2FkYCwgd2hpY2ggaXMgYW5vdGhlciBpbXBvcnRhbnQgc3lzZnMgaW50ZXJhY3Rpb24uIGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCBpcyBjYWxsZWQgYnkgZHJpdmVycyBhbmQgdHJpZ2dlcnMgYSBzdGF0ZSB0cmFuc2l0aW9uLCBpbXBvcnRhbnQgZm9yIHJlYWNoaW5nIHRoZSBjaGFuZ2VkIGxvZ2ljLgoKVWx0aW1hdGVseSwgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gdGhlIExFRCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyBhbmQgb2ZmbG9hZCBzdGF0ZSByZXBvcnRpbmcuIFRoZXkmIzM5O3JlIGFjY2Vzc2libGUgdmlhIHN5c2ZzIGludGVyYWN0aW9ucyBhbmQgZHJpdmVyIG5vdGlmaWNhdGlvbnMuCgpJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIGJlY2F1c2UgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNpZ25pZmljYW50IG5ldyBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gaGFyZHdhcmUgY29udHJvbCBhbmQgb2ZmbG9hZCwgd2hpY2ggYXJlIGxpa2VseSB0byBoYXZlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCYjMzQ7LAogICAgJiMzNDtMRURTX1RSSUdHRVJfTkVUREVWJiMzNDssCiAgICAmIzM0O0lERUFQQURfTEFQVE9QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQmIzM0OywKICAgICYjMzQ7bGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wmIzM0OywKICAgICYjMzQ7dHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93JiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbiYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDssCiAgICAmIzM0O19fbGVkX3RyaWdnZXJfc2V0JiMzNDssCiAgICAmIzM0O25ldGRldl90cmlnX29mZmxvYWRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBMRUQgdHJpZ2dlciBzdWJzeXN0ZW0sIGFkZGluZyBzdXBwb3J0IGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyBhbmQgb2ZmbG9hZCBzdGF0ZSByZXBvcnRpbmcuIFRoZXNlIG5ldyBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGF0dHJpYnV0ZXMgKGB0cmlnZ2VyX21heV9vZmZsb2FkYCwgYGJyaWdodG5lc3NgLCBgdHJpZ2dlcmApIGFuZCBkcml2ZXIgbm90aWZpY2F0aW9ucy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGxvZ2ljIGFuZCBvZmZsb2FkIHF1ZXJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCYjMzQ7LAogICAgJiMzNDtMRURTX1RSSUdHRVJfTkVUREVWJiMzNDssCiAgICAmIzM0O0lERUFQQURfTEFQVE9QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQmIzM0OywKICAgICYjMzQ7bGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wmIzM0OywKICAgICYjMzQ7dHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93JiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbiYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDssCiAgICAmIzM0O19fbGVkX3RyaWdnZXJfc2V0JiMzNDssCiAgICAmIzM0O25ldGRldl90cmlnX29mZmxvYWRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBMRUQgdHJpZ2dlciBzdWJzeXN0ZW0sIGFkZGluZyBzdXBwb3J0IGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyBhbmQgb2ZmbG9hZCBzdGF0ZSByZXBvcnRpbmcuIFRoZXNlIG5ldyBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGF0dHJpYnV0ZXMgKGB0cmlnZ2VyX21heV9vZmZsb2FkYCwgYGJyaWdodG5lc3NgLCBgdHJpZ2dlcmApIGFuZCBkcml2ZXIgbm90aWZpY2F0aW9ucy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGxvZ2ljIGFuZCBvZmZsb2FkIHF1ZXJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzo1Mzo1My41OTgyMzMzOTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjY5MjA2ODk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcIixcbiAgICBcIkxFRFNfVFJJR0dFUl9ORVRERVZcIixcbiAgICBcIklERUFQQURfTEFQVE9QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkXCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkXCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbFwiLFxuICAgIFwidHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93XCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb25cIixcbiAgICBcImxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRcIixcbiAgICBcIl9fbGVkX3RyaWdnZXJfc2V0XCIsXG4gICAgXCJuZXRkZXZfdHJpZ19vZmZsb2FkZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBMRUQgdHJpZ2dlciBzdWJzeXN0ZW0sIGFkZGluZyBzdXBwb3J0IGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyBhbmQgb2ZmbG9hZCBzdGF0ZSByZXBvcnRpbmcuIFRoZXNlIG5ldyBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGF0dHJpYnV0ZXMgKGB0cmlnZ2VyX21heV9vZmZsb2FkYCwgYGJyaWdodG5lc3NgLCBgdHJpZ2dlcmApIGFuZCBkcml2ZXIgbm90aWZpY2F0aW9ucy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGxvZ2ljIGFuZCBvZmZsb2FkIHF1ZXJpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjUzOjUzLjU5ODIzOTE5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA5MTY4MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGRlOGYwYjNiMzI5MzU0MjYxYTE1NTRkNjk0ZWQzYmIxMTU3ODE0YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxOCAxNzo1Mzo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkXFxuaW5kZXggZDRjOTE4Y2MxMWExMjcuLjdkYzk1ZjdhMzUwNWNlIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWRcXG5AQCAtNzgsNiArNzgsMzEgQEAgRGVzY3JpcHRpb246XFxuIFxcdFxcdCh3aGljaCB3b3VsZCBvZnRlbiBiZSBjb25maWd1cmVkIGluIHRoZSBkZXZpY2UgdHJlZSBmb3IgdGhlXFxuIFxcdFxcdGhhcmR3YXJlKS5cXG4gXFxuK1doYXQ6XFx0XFx0L3N5cy9jbGFzcy9sZWRzL1xcdTAwM2NsZWRcXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRcXG4rRGF0ZTpcXHRcXHRKdWx5IDIwMjZcXG4rS2VybmVsVmVyc2lvbjpcXHQ3LjNcXG4rQ29udGFjdDpcXHRsaW51eC1sZWRzQHZnZXIua2VybmVsLm9yZ1xcbitEZXNjcmlwdGlvbjpcXG4rXFx0XFx0TmFtZXMgYW5kIHN0YXRlcyBvZiB0cmlnZ2VycyB0aGF0IG1heSBiZSBvZmZsb2FkZWQgdG8gaGFyZHdhcmUuXFxuK1xcdFxcdFN1Y2ggdHJpZ2dlcnMgYXJlIGFsc28gY2FsbGVkIFxcXCJoYXJkd2FyZSBjb250cm9sIHRyaWdnZXJcXFwiIGluIHNvbWVcXG4rXFx0XFx0Y29udGV4dC5cXG4rXFxuK1xcdFxcdE9ubHkgZXhpc3RzIHdoZW4gdGhlIExFRCBzdXBwb3J0cyB0cmlnZ2VyIG9mZmxvYWQuXFxuK1xcbitcXHRcXHRSZWFkaW5nIHRoaXMgZmlsZSByZXR1cm5zIGEgbGlzdCBvZiB0cmlnZ2VycyB0aGF0IGFyZSBjYXBhYmxlIHRvXFxuK1xcdFxcdGJlIG9mZmxvYWRlZC4gVGhlIG9wdGlvbmFsIGJyYWNrZXRzIGFyb3VuZCB0aGUgdHJpZ2dlciBuYW1lXFxuK1xcdFxcdGluZGljYXRlIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCB0cmlnZ2VyOlxcbitcXG4rXFx0XFx0LSBgZm9vX3RyaWdnZXJgOiB0aGUgdHJpZ2dlciBpcyBub3Qgc2VsZWN0ZWQuXFxuK1xcdFxcdC0gYFxcdTAwM2Nmb29fdHJpZ2dlclxcdTAwM2VgOiB0aGUgdHJpZ2dlciBpcyBzZWxlY3RlZCwgYnV0IGZhbGxzIGJhY2sgdG9cXG4rXFx0XFx0ICBzb2Z0d2FyZSBibGluayBmb3Igc29tZSByZWFzb24gKGUuZy4sIGluY29tcGF0aWJsZSB0cmlnZ2VyXFxuK1xcdFxcdCAgcGFyYW1ldGVycylcXG4rXFx0XFx0LSBgW2Zvb190cmlnZ2VyXWA6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkIGFuZCBvZmZsb2FkZWQgdG9cXG4rXFx0XFx0ICBoYXJkd2FyZS5cXG4rXFxuK1xcdFxcdFRoZSBcXFwibmV0ZGV2XFxcIiB0cmlnZ2VyIGFsc28gcHJvdmlkZXMgYSBjdXN0b20gYXR0cmlidXRlIHRvXFxuK1xcdFxcdGluZGljYXRlIGl0cyBzdGF0ZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvXFx1MDAzY2xlZFxcdTAwM2Uvb2ZmbG9hZGVkYC5cXG4rXFxuIFdoYXQ6XFx0XFx0L3N5cy9jbGFzcy9sZWRzL1xcdTAwM2NsZWRcXHUwMDNlL2ludmVydGVkXFxuIERhdGU6XFx0XFx0SmFudWFyeSAyMDExXFxuIEtlcm5lbFZlcnNpb246XFx0Mi42LjM4XFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcXG5pbmRleCBlZDQ2YjM3YWI4YTI4NC4uYTUxNDZlYTFlM2U2MWMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldlxcbkBAIC03NSw2ICs3NSw5IEBAIERlc2NyaXB0aW9uOlxcbiBcXHRcXHRJZiAxLCB0aGUgTEVEIGJsaW5raW5nIGluIHJlcXVlc3RlZCBtb2RlIGlzIG9mZmxvYWRlZCB0b1xcbiBcXHRcXHRoYXJkd2FyZS5cXG4gXFxuK1xcdFxcdExFRCB0cmlnZ2VyIGNvcmUgYWxzbyBwcm92aWRlcyBhIGdlbmVyaWMgYXR0cmlidXRlIGZvciB0aGlzXFxuK1xcdFxcdHB1cnBvc2UsIHNlZSBgL3N5cy9jbGFzcy9sZWRzL1xcdTAwM2NsZWRcXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRgLlxcbitcXG4gV2hhdDpcXHRcXHQvc3lzL2NsYXNzL2xlZHMvXFx1MDAzY2xlZFxcdTAwM2UvbGlua18xMFxcbiBEYXRlOlxcdFxcdEp1biAyMDIzXFxuIEtlcm5lbFZlcnNpb246XFx0Ni41XFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxcbmluZGV4IDM5MTM5NjZjZmRhYzA0Li5hZGJjNTdiOWY0OWMzMyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcXG5AQCAtMjQyLDYgKzI0Miw5IEBAIG9wcyBhbmQgbmVlZHMgdG8gZGVjbGFyZSBzcGVjaWZpYyBzdXBwb3J0IGZvciB0aGUgc3VwcG9ydGVkIHRyaWdnZXJzLlxcbiBcXG4gV2l0aCBodyBjb250cm9sIHdlIHJlZmVyIHRvIHRoZSBMRUQgZHJpdmVuIGJ5IGhhcmR3YXJlLlxcbiBcXG4rQSBzeXNmcyBhdHRyaWJ1dGUgYHRyaWdnZXJfbWF5X29mZmxvYWRgIGlzIHByb3ZpZGVkIGZvciB1c2Vyc3BhY2UgdG9cXG4rcXVlcnkgc3VwcG9ydGVkIHRyaWdnZXJzIGFuZCB0aGVpciBzdGF0ZXMuXFxuK1xcbiBMRUQgZHJpdmVyIG11c3QgZGVmaW5lIHRoZSBmb2xsb3dpbmcgdmFsdWUgdG8gc3VwcG9ydCBodyBjb250cm9sOlxcbiBcXG4gICAgIC0gaHdfY29udHJvbF90cmlnZ2VyOlxcbkBAIC0yOTgsNiArMzAxLDE1IEBAIExFRCBkcml2ZXIgbXVzdCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gc3VwcG9ydCBodyBjb250cm9sOlxcbiAgICAgICAgICAgICAgICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZGV2aWNlIG9yIE5VTEwgaWYgbm90aGluZ1xcbiAgICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IGF0dGFjaGVkLlxcbiBcXG4rTEVEIHRyaWdnZXIgc2hvdWxkIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEFQSSB0byBpbmRpY2F0ZSBodyBjb250cm9sOlxcbisgICAgLSBvZmZsb2FkZWQ6XFxuKyAgICAgICAgICAgICAgICByZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHRyaWdnZXIgaXMgY3VycmVudGx5XFxuKyAgICAgICAgICAgICAgICBvZmZsb2FkZWQgdG8gaGFyZHdhcmUuXFxuK1xcbisgICAgICAgICAgICAgICAgSWYgYSB0cmlnZ2VyIGRvZXNuJ3QgaW1wbGVtZW50IHRoaXMgY2FsbGJhY2ssIHRoZSBkZWZhdWx0XFxuKyAgICAgICAgICAgICAgICB2YWx1ZSB3aWxsIGJlIHRydWUgZm9yIHByaXZhdGUgdHJpZ2dlcnMgYW5kIGZhbHNlIGZvciBnZW5lcmljXFxuKyAgICAgICAgICAgICAgICBvbmVzLlxcbitcXG4gTEVEIGRyaXZlciBjYW4gYWN0aXZhdGUgYWRkaXRpb25hbCBtb2RlcyBieSBkZWZhdWx0IHRvIHdvcmthcm91bmQgdGhlXFxuIGltcG9zc2liaWxpdHkgb2Ygc3VwcG9ydGluZyBlYWNoIGRpZmZlcmVudCBtb2RlIG9uIHRoZSBzdXBwb3J0ZWQgdHJpZ2dlci5cXG4gRXhhbXBsZXMgYXJlIGhhcmRjb2RpbmcgdGhlIGJsaW5rIHNwZWVkIHRvIGEgc2V0IGludGVydmFsLCBlbmFibGUgc3BlY2lhbFxcbkBAIC0zMTEsOSArMzIzLDY5IEBAIHRoZSBlbmQgdXNlIGh3X2NvbnRyb2xfc2V0IHRvIGFjdGl2YXRlIGh3IGNvbnRyb2wuXFxuIEEgdHJpZ2dlciBjYW4gdXNlIGh3X2NvbnRyb2xfZ2V0IHRvIGNoZWNrIGlmIGEgTEVEIGlzIGFscmVhZHkgaW4gaHcgY29udHJvbFxcbiBhbmQgaW5pdCB0aGVpciBmbGFncy5cXG4gXFxuK0FsdGVybmF0aXZlbHksIGEgcHJpdmF0ZSB0cmlnZ2VyIGNhbiBiZSBpbXBsZW1lbnRlZCBhbG9uZyB3aXRoIHRoZSBMRUQgZHJpdmVyIGlmXFxuK3RoZSBMRUQncyBoYXJkd2FyZSBjb250cm9sIGRvZXNuJ3QgZml0IGFueSBnZW5lcmljIHRyaWdnZXIuIFRvIGFzc29jaWF0ZSB0aGVcXG4rcHJpdmF0ZSB0cmlnZ2VyIHdpdGggdGhlIExFRCBjbGFzc2RldiwgdGhlaXIgYHRyaWdnZXJfdHlwZWAgbXVzdCBiZSB0aGUgc2FtZS4gVG9cXG4rZGVjbGFyZSB0aGF0IHRoZSBwcml2YXRlIHRyaWdnZXIgcHJvdmlkZXMgaGFyZHdhcmUgY29udHJvbCBmb3IgdGhlIGFzc29jaWF0ZWRcXG4rTEVEIGNsYXNzZGV2LCBzZXQgdGhlIGBod19jb250cm9sX3RyaWdnZXJgIHN0cmluZyB0byB0aGUgdHJpZ2dlcidzIG5hbWUuIFNpbmNlXFxuK2JvdGggdGhlIExFRCBjbGFzc2RldiBhbmQgdGhlIHByaXZhdGUgdHJpZ2dlciBhcmUgaW4gdGhlIHNhbWUgTEVEIGRyaXZlciwgaXQnc1xcbitub3QgbmVjZXNzYXJ5IGZvciB0aGVtIHRvIGNvb3JkaW5hdGUgdmlhIGBod19jb250cm9sXypgIGNhbGxiYWNrcy5cXG4rXFxuIFdoZW4gdGhlIExFRCBpcyBpbiBodyBjb250cm9sLCBubyBzb2Z0d2FyZSBibGluayBpcyBwb3NzaWJsZSBhbmQgZG9pbmcgc29cXG4gd2lsbCBlZmZlY3RpdmVseSBkaXNhYmxlIGh3IGNvbnRyb2wuXFxuIFxcbitIYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uXFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK1NvbWUgaGFyZHdhcmUgY2FuIGF1dG9ub21vdXNseSBhY3RpdmF0ZS9kZWFjdGl2YXRlIGhhcmR3YXJlIGNvbnRyb2wuIEFmdGVyIHRoYXQsXFxuK3RoZSBMRUQgaGFyZHdhcmUgbm90aWZpZXMgdGhlIExFRCBkcml2ZXIuXFxuK1xcbitJZiB0aGUgZHJpdmVyIGNhbiBkZXRlY3Qgc3VjaCB0cmFuc2l0aW9ucyBhbmQgdGh1cyB3YW50cyB0byBub3RpZnkgdGhlIExFRCBjb3JlXFxuK3RvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIHRoZW4gdGhlIGBMRURfVFJJR19IV19DSEFOR0VEYCBmbGFnIG11c3QgYmUgc2V0IGluXFxuK2ZsYWdzIGJlZm9yZSByZWdpc3RlcmluZy4gVG8gdXBkYXRlIHRoZSBjdXJyZW50IHRyaWdnZXIgYWNjb3JkaW5nbHksIGNhbGxcXG4rYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIG9uIHRoZSBMRUQgY2xhc3NkZXYuXFxuK1xcbitUaGlzIGNhcGFiaWxpdHkgaXMgcmVzdHJpY3RlZCB0byB0aGUgTEVEIGRldmljZSdzIHByaXZhdGUgdHJpZ2dlci4gVGhlIHByaXZhdGVcXG4rdHJpZ2dlciBtdXN0IGhhdmUgYmVlbiBwcm9wZXJseSByZWdpc3RlcmVkIChzZWUgYWJvdmUpIGFuZCBuYW1lZCBhZnRlclxcbitgaHdfY29udHJvbF90cmlnZ2VyYC5cXG4rXFxuK09ubHkgdHdvIHRyYW5zaXRpb25zIGFyZSBkZWZpbmVkOlxcbitcXG4rLSBcXFwibm9uZVxcXCIgPVxcdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyOlxcbisgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2xcXG4rICAgICAgICBhbmQgd2hlbiBcXFwibm9uZVxcXCIgKGkuZS4sIG5vIHRyaWdnZXIpIGlzIGN1cnJlbnRseSBhY3RpdmUuIElmIHRoZSBwcml2YXRlXFxuKyAgICAgICAgdHJpZ2dlciBpcyBhbHJlYWR5IGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5XFxuKyAgICAgICAgYSBuby1vcC5cXG4rXFxuKyAgICAgICAgVGhlIGFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhc1xcbisgICAgICAgIG5vcm1hbC5cXG4rXFxuKyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGVcXG4rICAgICAgICBhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIGN1cnJlbnRseSBpbiBoYXJkd2FyZVxcbisgICAgICAgIGNvbnRyb2wuXFxuK1xcbisgICAgICAgIElmIGVycm9yIG9jY3VycyBpbiB0aGUgYWN0aXZhdGlvbiBzZXF1ZW5jZSwgdGhlIExFRCBUcmlnZ2VyIGNvcmUgcmV2ZXJ0c1xcbisgICAgICAgIHRoZSBlZmZlY3RpdmUgdHJpZ2dlciB0byBcXFwibm9uZVxcXCIuXFxuK1xcbistIHByaXZhdGUgdHJpZ2dlciA9XFx1MDAzZSBcXFwibm9uZVxcXCJcXG4rICAgICAgICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaGFyZHdhcmUgYXV0b25vbW91c2x5IGRlYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2xcXG4rICAgICAgICBhbmQgd2hlbiB0aGUgcHJpdmF0ZSB0cmlnZ2VyIGlzIGN1cnJlbnRseSBhY3RpdmUuIElmIFxcXCJub25lXFxcIiAoaS5lLiwgbm9cXG4rICAgICAgICB0cmlnZ2VyKSBpcyBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseSBhXFxuKyAgICAgICAgbm8tb3AuXFxuK1xcbisgICAgICAgIFRoZSBkZWFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhc1xcbisgICAgICAgIG5vcm1hbCwgZXhjZXB0IHRoYXQgdGhlIGN1cnJlbnQgTEVEIGJyaWdodG5lc3MgaXMgcmV0YWluZWQuIFRoZSByZWFzb25cXG4rICAgICAgICBmb3Iga2VlcGluZyB0aGUgYnJpZ2h0bmVzcyB1bmNoYW5nZWQgaXMgdGhhdCBzb21lIGhhcmR3YXJlIG1heSBjaG9vc2UgYVxcbisgICAgICAgIHNwZWNpZmljIGJyaWdodG5lc3MgaW5zdGVhZCBvZiBzaW1wbHkgdHVybmluZyBvZmYgdGhlIExFRCBhZnRlclxcbisgICAgICAgIGF1dG9ub21vdXNseSBkZWFjdGl2YXRpbmcgaGFyZHdhcmUgY29udHJvbC5cXG4rXFxuKyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGVcXG4rICAgICAgICBkZWFjdGl2YXRpb24gc2VxdWVuY2UgZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXMgbm90IGN1cnJlbnRseSBpbiBoYXJkd2FyZVxcbisgICAgICAgIGNvbnRyb2wuXFxuK1xcbitJZiB0aGUgY3VycmVudCB0cmlnZ2VyIGlzIG5laXRoZXIgdGhlIHByaXZhdGUgdHJpZ2dlciBub3IgXFxcIm5vbmVcXFwiLCBubyB0cmFuc2l0aW9uXFxuK3dpbGwgYmUgbWFkZS5cXG4rXFxuIEtub3duIElzc3Vlc1xcbiA9PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuY1xcbmluZGV4IGE1MWIwZWQ1Mzg4NjQ0Li4yNDYwZmNmMGM0NjkwYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcXG4rKysgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcXG5AQCAtMjcsMTYgKzI3LDYgQEAgc3RhdGljIExJU1RfSEVBRChsZWRzX2xvb2t1cF9saXN0KTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGVkc193cTtcXG4gXFxuLXN0YXRpYyBib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuLXtcXG4tI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXFxuLVxcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrKTtcXG4tXFx0cmV0dXJuIGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyIFxcdTAwMjZcXHUwMDI2IGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyLVxcdTAwM2V0cmlnZ2VyX3R5cGU7XFxuLSNlbHNlXFxuLVxcdHJldHVybiBmYWxzZTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuIHtcXG5AQCAtNzQsNiArNjQsOSBAQCBzdGF0aWMgc3NpemVfdCBicmlnaHRuZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFxuIFxcdGlmIChzdGF0ZSA9PSBMRURfT0ZGKVxcbiBcXHRcXHRsZWRfdHJpZ2dlcl9yZW1vdmUobGVkX2NkZXYpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKGxlZF9jZGV2KTtcXG4rXFxuIFxcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2Rldiwgc3RhdGUpO1xcbiBcXG4gXFx0cmV0ID0gc2l6ZTtcXG5AQCAtMTAzLDggKzk2LDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqY29uc3QgbGVkX3RyaWdnZXJfYmluX2F0dHJzW10gPSB7XFxuIFxcdFxcdTAwMjZiaW5fYXR0cl90cmlnZ2VyLFxcbiBcXHROVUxMLFxcbiB9O1xcbitcXG4rc3RhdGljIERFVklDRV9BVFRSX1JPKHRyaWdnZXJfbWF5X29mZmxvYWQpO1xcbitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbGVkX3RyaWdnZXJfYXR0cnNbXSA9IHtcXG4rXFx0XFx1MDAyNmRldl9hdHRyX3RyaWdnZXJfbWF5X29mZmxvYWQuYXR0cixcXG4rXFx0TlVMTFxcbit9O1xcbitcXG4rc3RhdGljIHVtb2RlX3QgbGVkX3RyaWdnZXJfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcXG4rXFx0XFx0XFx0XFx0ICAgICAgaW50IGlkeClcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBrb2JqX3RvX2Rldihrb2JqKTtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4rXFxuK1xcdGlmIChhdHRyID09IFxcdTAwMjZkZXZfYXR0cl90cmlnZ2VyX21heV9vZmZsb2FkLmF0dHIpXFxuK1xcdFxcdHJldHVybiBsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID8gYXR0ci1cXHUwMDNlbW9kZSA6IDA7XFxuK1xcbitcXHRyZXR1cm4gYXR0ci1cXHUwMDNlbW9kZTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbGVkX3RyaWdnZXJfZ3JvdXAgPSB7XFxuIFxcdC5iaW5fYXR0cnMgPSBsZWRfdHJpZ2dlcl9iaW5fYXR0cnMsXFxuK1xcdC5hdHRycyA9IGxlZF90cmlnZ2VyX2F0dHJzLFxcbitcXHQuaXNfdmlzaWJsZSA9IGxlZF90cmlnZ2VyX2lzX3Zpc2libGUsXFxuIH07XFxuICNlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jIGIvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jXFxuaW5kZXggYjEyMjMyMThiZGExMTMuLjZhZTI4Y2JkMWM3NzgzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xcbkBAIC03LDkgKzcsMTIgQEBcXG4gICogQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSBcXHUwMDNjcnB1cmRpZUBvcGVuZWRoYW5kLmNvbVxcdTAwM2VcXG4gICovXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbG9ja2RlcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZXIuaFxcdTAwM2VcXG5AQCAtMzMsNiArMzYsMzMgQEAgdHJpZ2dlcl9yZWxldmFudChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxcbiBcXHRyZXR1cm4gIXRyaWctXFx1MDAzZXRyaWdnZXJfdHlwZSB8fCB0cmlnLVxcdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfdHlwZTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX2xvY2spO1xcbitcXG4rXFx0aWYgKCFsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKCFsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyIHx8XFxuK1xcdCAgICBzdHJjbXAobGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciwgbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXItXFx1MDAzZW5hbWUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAobGVkX2NkZXYtXFx1MDAzZXRyaWdnZXItXFx1MDAzZW9mZmxvYWRlZClcXG4rXFx0XFx0cmV0dXJuIGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyLVxcdTAwM2VvZmZsb2FkZWQobGVkX2NkZXYpO1xcbitcXG4rXFx0ZGV2X3dhcm5fb25jZShsZWRfY2Rldi1cXHUwMDNlZGV2LCBcXFwiaHcgY29udHJvbCB0cmlnZ2VyICVzIGRvZXNuJ3QgaW1wbGVtZW50IG9mZmxvYWRlZCgpXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICBsZWRfY2Rldi1cXHUwMDNldHJpZ2dlci1cXHUwMDNlbmFtZSk7XFxuK1xcbitcXHRyZXR1cm4gbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXItXFx1MDAzZXRyaWdnZXJfdHlwZTtcXG4rfVxcbitcXG4rYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrKTtcXG4rXFx0cmV0dXJuIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZCk7XFxuK1xcbiBzc2l6ZV90IGxlZF90cmlnZ2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZixcXG4gXFx0XFx0XFx0ICBsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpXFxuQEAgLTE2Myw3ICsxOTMsOCBAQCBzc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZWFkKTtcXG4gXFxuIC8qIENhbGxlciBtdXN0IGVuc3VyZSBsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrIGhlbGQgKi9cXG4taW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxcbitzdGF0aWMgaW50IF9fbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcsXFxuK1xcdFxcdFxcdCAgICAgYm9vbCBod190cmlnZ2VyZWQpXFxuIHtcXG4gXFx0Y2hhciAqZXZlbnQgPSBOVUxMO1xcbiBcXHRjaGFyICplbnZwWzJdO1xcbkBAIC0xOTQsNyArMjI1LDIxIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcXG4gXFx0XFx0bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfZGF0YSA9IE5VTEw7XFxuIFxcdFxcdGxlZF9jZGV2LVxcdTAwM2VhY3RpdmF0ZWQgPSBmYWxzZTtcXG4gXFx0XFx0bGVkX2NkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5MRURfSU5JVF9ERUZBVUxUX1RSSUdHRVI7XFxuLVxcdFxcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2RldiwgTEVEX09GRik7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBIYXJkd2FyZSBtYXkgaGF2ZSBzZWxlY3RlZCBhIG5ldyBicmlnaHRuZXNzIGxldmVsIGR1cmluZyBpdHNcXG4rXFx0XFx0ICogaGFyZHdhcmUgY29udHJvbCB0cmFuc2l0aW9uLCBzbyBvbmx5IHJlc2V0IGJyaWdodG5lc3MgaWYgd2VcXG4rXFx0XFx0ICogYXJlIHN3aXRjaGluZyB0byBhbm90aGVyIHRyaWdnZXIgb3IgaWYgdGhlIHN3aXRjaGluZyBpcyBub3RcXG4rXFx0XFx0ICogaGFyZHdhcmUgdHJpZ2dlcmVkLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgZXJyb3IgcGF0aCwgYXMgcnVubmluZ1xcbitcXHRcXHQgKiBpbnRvIHRoZSBlcnJvciBwYXRoIGltcGxpZXMgYSBub25lID1cXHUwMDNlIHByaXZhdGUgdHJpZ2dlclxcbitcXHRcXHQgKiB0cmFuc2l0aW9uLiBUaGlzIGhpbnRzIHRoYXQgdGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlXFxuK1xcdFxcdCAqIHRyaWdnZXIgbXVzdCBoYXZlIHNvbWUgZnVuZGFtZW50YWwgYnVncywgc28gZG9uJ3QgYm90aGVyXFxuK1xcdFxcdCAqIGxlYXZpbmcgdGhlIExFRCBpbiBhbiB1bmRlZmluZWQgc3RhdGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodHJpZyB8fCAhaHdfdHJpZ2dlcmVkKVxcbitcXHRcXHRcXHRsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIExFRF9PRkYpO1xcbiBcXHR9XFxuIFxcdGlmICh0cmlnKSB7XFxuIFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dHJpZy1cXHUwMDNlbGVkZGV2X2xpc3RfbG9jayk7XFxuQEAgLTI1OCw2ICszMDMsMTEgQEAgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbitcXG4raW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxcbit7XFxuK1xcdHJldHVybiBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgdHJpZywgZmFsc2UpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldCk7XFxuIFxcbiB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG5AQCAtMjY4LDYgKzMxOCwxNSBAQCB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZW1vdmUpO1xcbiBcXG4rdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRndWFyZChyd3NlbV93cml0ZSkoXFx1MDAyNmxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX2xvY2spO1xcbitcXG4rXFx0aWYgKF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2RldikpXFxuK1xcdFxcdGxlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgTlVMTCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wpO1xcbitcXG4gc3RhdGljIGJvb2wgbGVkX21hdGNoX2RlZmF1bHRfdHJpZ2dlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxcbiB7XFxuQEAgLTMxMyw2ICszNzIsMzIgQEAgdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdCk7XFxuIFxcbitzc2l6ZV90IHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbit7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcdHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZztcXG4rXFx0Ym9vbCBoaXQsIG9mZmxvYWRlZDtcXG4rXFx0aW50IGxlbjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZWxlZF9hY2Nlc3MpO1xcbitcXHRndWFyZChyd3NlbV9yZWFkKShcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfbG9jayk7XFxuK1xcbitcXHR0cmlnID0gbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXI7XFxuK1xcbitcXHRvZmZsb2FkZWQgPSBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpO1xcbitcXHRoaXQgPSBvZmZsb2FkZWQgfHwgKHRyaWcgXFx1MDAyNlxcdTAwMjYgIXN0cmNtcChsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLCB0cmlnLVxcdTAwM2VuYW1lKSk7XFxuK1xcbitcXHQvKiBbb2ZmbG9hZGVkXSBcXHUwMDNjYWN0aXZlX2J1dF9ub3Rfb2ZmbG9hZGVkXFx1MDAzZSBpbmFjdGl2ZSAqL1xcbitcXHRsZW4gPSBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVzJXMlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0IG9mZmxvYWRlZCA/IFxcXCJbXFxcIiA6IChoaXQgPyBcXFwiXFx1MDAzY1xcXCIgOiBcXFwiXFxcIiksXFxuK1xcdFxcdFxcdCBsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLFxcbitcXHRcXHRcXHQgb2ZmbG9hZGVkID8gXFxcIl1cXFwiIDogKGhpdCA/IFxcXCJcXHUwMDNlXFxcIiA6IFxcXCJcXFwiKSk7XFxuK1xcbitcXHRyZXR1cm4gbGVuO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyk7XFxuK1xcbiAvKiBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi9cXG4gXFxuIGludCBsZWRfdHJpZ2dlcl9yZWdpc3RlcihzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXFxuQEAgLTQwMyw2ICs0ODgsNjMgQEAgaW50IGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIpO1xcbiBcXG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcXG4rc3RhdGljIHZvaWQgbGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxlZF90cmlnZ2VyICpoY190cmlnKVxcbit7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCFsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcikge1xcbitcXHRcXHQvKiBcXFwibm9uZVxcXCIgPVxcdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyLiAqL1xcbitcXHRcXHRpZiAoYWN0aXZhdGUpXFxuK1xcdFxcdFxcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBoY190cmlnLCB0cnVlKTtcXG4rXFx0fSBlbHNlIGlmIChsZWRfY2Rldi1cXHUwMDNldHJpZ2dlciA9PSBoY190cmlnKSB7XFxuK1xcdFxcdC8qIHByaXZhdGUgdHJpZ2dlciA9XFx1MDAzZSBcXFwibm9uZVxcXCIuICovXFxuK1xcdFxcdGlmICghYWN0aXZhdGUpXFxuK1xcdFxcdFxcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMLCB0cnVlKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogT3RoZXIgdHJpZ2dlciBpcyBhY3RpdmUuICovXFxuK1xcdFxcdGRldl9kYmcobGVkX2NkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIklnbm9yaW5nIGh3IGNvbnRyb2wgdHJhbnNpdGlvbiAoJXMgJXMpIHdoaWxlICVzIGlzIGFjdGl2ZVxcXCIsXFxuK1xcdFxcdFxcdGFjdGl2YXRlID8gXFxcImFjdGl2YXRlXFxcIiA6IFxcXCJkZWFjdGl2YXRlXFxcIiwgaGNfdHJpZy1cXHUwMDNlbmFtZSxcXG4rXFx0XFx0XFx0bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXItXFx1MDAzZW5hbWUpO1xcbitcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRkZXZfd2FybihsZWRfY2Rldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvICVzICVzIGluIGh3IGNvbnRyb2wgdHJhbnNpdGlvbjogJWRcXFwiLFxcbitcXHRcXHRcXHQgYWN0aXZhdGUgPyBcXFwiYWN0aXZhdGVcXFwiIDogXFxcImRlYWN0aXZhdGVcXFwiLCBoY190cmlnLVxcdTAwM2VuYW1lLCBlcnIpO1xcbit9XFxuK1xcbit2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpXFxuK3tcXG4rXFx0c3RydWN0IGxlZF90cmlnZ2VyICp0cmlnO1xcbitcXG4rXFx0LyogUmVzdHJpY3RlZCB0byBwcml2YXRlIHRyaWdnZXJzLiAqL1xcbitcXHRpZiAoV0FSTl9PTighKGxlZF9jZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IExFRF9UUklHX0hXX0NIQU5HRUQpIHx8XFxuK1xcdFxcdCAgICAhbGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciB8fCAhbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfdHlwZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChyd3NlbV9yZWFkLCBcXHUwMDI2dHJpZ2dlcnNfbGlzdF9sb2NrKSB7XFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodHJpZywgXFx1MDAyNnRyaWdnZXJfbGlzdCwgbmV4dF90cmlnKSB7XFxuK1xcdFxcdFxcdGlmICh0cmlnLVxcdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfdHlwZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIXN0cmNtcCh0cmlnLVxcdTAwM2VuYW1lLCBsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyKSkge1xcbitcXHRcXHRcXHRcXHRndWFyZChyd3NlbV93cml0ZSkoXFx1MDAyNmxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX2xvY2spO1xcbitcXG4rXFx0XFx0XFx0XFx0bGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKGxlZF9jZGV2LCBhY3RpdmF0ZSwgdHJpZyk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGRldl9lcnIobGVkX2NkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFxcIiVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXFxcXG5cXFwiLFxcbitcXHRcXHRfX2Z1bmNfXywgbGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7XFxuKyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXFxuK1xcbiAvKiBTaW1wbGUgTEVEIFRyaWdnZXIgSW50ZXJmYWNlICovXFxuIFxcbiB2b2lkIGxlZF90cmlnZ2VyX2V2ZW50KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jIGIvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jXFxuaW5kZXggMTg0NGQwY2Q1ZjUyODQuLjZkYjgzZDAxNTI3NzVmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xcbkBAIC04NSwxMiArODUsMTggQEAgc3RhdGljIGludCBjcm9zX2VjX2xlZF90cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbiBcXHRyZXR1cm4gY3Jvc19lY19sZWRfc2VuZF9jbWQocHJpdi1cXHUwMDNlY3Jvc19lYywgXFx1MDAyNmFyZyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGNyb3NfZWNfbGVkX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgY3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlO1xcbiBcXG4gc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBjcm9zX2VjX2xlZF90cmlnZ2VyID0ge1xcbiBcXHQubmFtZSA9IFxcXCJjaHJvbWVvcy1hdXRvXFxcIixcXG4gXFx0LnRyaWdnZXJfdHlwZSA9IFxcdTAwMjZjcm9zX2VjX2xlZF90cmlnZ2VyX3R5cGUsXFxuIFxcdC5hY3RpdmF0ZSA9IGNyb3NfZWNfbGVkX3RyaWdnZXJfYWN0aXZhdGUsXFxuK1xcdC5vZmZsb2FkZWQgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZCxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcXG5pbmRleCBlZDZhNDdiYmI0NGY5Yy4uMzJkNDBkMTc2ZDNmMTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcXG4rKysgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xcbkBAIC0xOTUsMTAgKzE5NSwxNiBAQCBzdGF0aWMgdm9pZCBvbW5pYV9od3RyaWdfZGVhY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KVxcbiBcXHRcXHRcXHRlcnIpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgb21uaWFfaHdfdHJpZ2dlciA9IHtcXG4gXFx0Lm5hbWVcXHRcXHQ9IFxcXCJvbW5pYS1tY3VcXFwiLFxcbiBcXHQuYWN0aXZhdGVcXHQ9IG9tbmlhX2h3dHJpZ19hY3RpdmF0ZSxcXG4gXFx0LmRlYWN0aXZhdGVcXHQ9IG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlLFxcbitcXHQub2ZmbG9hZGVkXFx0PSBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkLFxcbiBcXHQudHJpZ2dlcl90eXBlXFx0PSBcXHUwMDI2b21uaWFfaHdfdHJpZ2dlcl90eXBlLFxcbiB9O1xcbiBcXG5AQCAtMjUxLDYgKzI1Nyw3IEBAIHN0YXRpYyBpbnQgb21uaWFfbGVkX3JlZ2lzdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBvbW5pYV9sZWQgKmxlZCxcXG4gXFx0ICogYnkgTEVEIGNsYXNzIGZyb20gdGhlIGxpbnV4LGRlZmF1bHQtdHJpZ2dlciBwcm9wZXJ0eS5cXG4gXFx0ICovXFxuIFxcdGNkZXYtXFx1MDAzZWRlZmF1bHRfdHJpZ2dlciA9IG9tbmlhX2h3X3RyaWdnZXIubmFtZTtcXG4rXFx0Y2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lO1xcbiBcXG4gXFx0LyogUHV0IHRoZSBMRUQgaW50byBzb2Z0d2FyZSBtb2RlICovXFxuIFxcdHJldCA9IG9tbmlhX2NtZF93cml0ZV91OChjbGllbnQsIE9NTklBX0NNRF9MRURfTU9ERSwgT01OSUFfQ01EX0xFRF9NT0RFX0xFRChsZWQtXFx1MDAzZXJlZykgfFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy5oIGIvZHJpdmVycy9sZWRzL2xlZHMuaFxcbmluZGV4IGJlZTQ2NjUxZTA2OGY3Li5iMDhhMjg5Mzk3ZTQ2MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy5oXFxuKysrIGIvZHJpdmVycy9sZWRzL2xlZHMuaFxcbkBAIC0yNyw2ICsyNyw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXFxuIHNzaXplX3QgbGVkX3RyaWdnZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiBcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZixcXG4gXFx0XFx0XFx0bG9mZl90IHBvcywgc2l6ZV90IGNvdW50KTtcXG4rc3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7XFxuIFxcbiBleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBsZWRzX2xpc3RfbG9jaztcXG4gZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbGVkc19saXN0O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1xcbmluZGV4IGMxMTI4MmE3NGI1YWMzLi43OTgxMjIxNTQwNDliNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1xcbkBAIC05LDYgKzksMTUgQEAgbWVudWNvbmZpZyBMRURTX1RSSUdHRVJTXFxuIFxcbiBpZiBMRURTX1RSSUdHRVJTXFxuIFxcbitjb25maWcgTEVEU19UUklHR0VSU19IV19DSEFOR0VEXFxuK1xcdGJvb2wgXFxcIkxFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnRcXFwiXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGhhcmR3YXJlIGluaXRpYXRlZCBoYXJkd2FyZSBjb250cm9sXFxuK1xcdCAgdHJhbnNpdGlvbnMsIHdoZXJlIHRoZSBMRUQgaGFyZHdhcmUgYXV0b25vbW91c2x5IHN3aXRjaGVzIGJldHdlZW5cXG4rXFx0ICBcXFwibm9uZVxcXCIgKGkuZS4sIG5vIHRyaWdnZXIpIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyLlxcbitcXG4rXFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0IGZvciBkZXRhaWxzLlxcbitcXG4gY29uZmlnIExFRFNfVFJJR0dFUl9USU1FUlxcbiBcXHR0cmlzdGF0ZSBcXFwiTEVEIFRpbWVyIFRyaWdnZXJcXFwiXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcXG5pbmRleCA2NGMwNzhlOTk3ZjI4YS4uYTI2MTA5Y2E0YjFjOWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuY1xcbisrKyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcXG5AQCAtNzU0LDEwICs3NTQsMTggQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3RyaWdfZGVhY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4gXFx0a2ZyZWUodHJpZ2dlcl9kYXRhKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBsZWRfbmV0ZGV2X2RhdGEgKnRyaWdnZXJfZGF0YSA9IGxlZF9nZXRfdHJpZ2dlcl9kYXRhKGxlZF9jZGV2KTtcXG4rXFxuK1xcdHJldHVybiB0cmlnZ2VyX2RhdGEtXFx1MDAzZWh3X2NvbnRyb2w7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgbmV0ZGV2X2xlZF90cmlnZ2VyID0ge1xcbiBcXHQubmFtZSA9IFxcXCJuZXRkZXZcXFwiLFxcbiBcXHQuYWN0aXZhdGUgPSBuZXRkZXZfdHJpZ19hY3RpdmF0ZSxcXG4gXFx0LmRlYWN0aXZhdGUgPSBuZXRkZXZfdHJpZ19kZWFjdGl2YXRlLFxcbitcXHQub2ZmbG9hZGVkID0gbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkLFxcbiBcXHQuZ3JvdXBzID0gbmV0ZGV2X3RyaWdfZ3JvdXBzLFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xcbmluZGV4IDQ0NDNmNDBlZjhhYTdlLi5lOTJiMWU5MDA3OTUxMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnXFxuQEAgLTE2LDYgKzE2LDcgQEAgY29uZmlnIElERUFQQURfTEFQVE9QXFxuIFxcdHNlbGVjdCBJTlBVVF9TUEFSU0VLTUFQXFxuIFxcdHNlbGVjdCBORVdfTEVEU1xcbiBcXHRzZWxlY3QgTEVEU19DTEFTU1xcbitcXHRzZWxlY3QgTEVEU19UUklHR0VSU1xcbiBcXHRoZWxwXFxuIFxcdCAgVGhpcyBpcyBhIGRyaXZlciBmb3IgTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MgY29udGFpbnMgZHJpdmVycyBmb3JcXG4gXFx0ICByZmtpbGwgc3dpdGNoLCBob3RrZXksIGZhbiBjb250cm9sIGFuZCBiYWNrbGlnaHQgY29udHJvbC5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xcbmluZGV4IDRmYmM5MDRmMWZjMzkwLi4yNTNkMjk2MmI5Mjc2MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xcbisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXFxuQEAgLTksNiArOSw3IEBAXFxuICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXFxcIjogXFxcIiBmbXRcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hY3BpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdG9taWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JhY2tsaWdodC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG9wcy5oXFx1MDAzZVxcbkBAIC0yNSw3ICsyNiw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaWZmaWVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlZHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xvY2tkZXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fcHJvZmlsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcG93ZXJfc3VwcGx5LmhcXHUwMDNlXFxuQEAgLTEzNCwxMCArMTM3LDMxIEBAIGVudW0ge1xcbiB9O1xcbiBcXG4gLypcXG4tICogVGhlc2UgY29ycmVzcG9uZCB0byB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBzdGF0ZXMgLSAxXFxuLSAqIEZ1dHVyZSBrZXlib2FyZCB0eXBlcyBtYXkgbmVlZCBhIG5ldyBzeXN0ZW0sIGlmIHRoZXJlJ3MgYSBjb2xsaXNpb25cXG4tICogS0JEX0JMX1RSSVNUQVRFX0FVVE8gaGFzIG5vIHdheSB0byByZXBvcnQgb3Igc2V0IHRoZSBhdXRvIHN0YXRlXFxuLSAqIHNvIGl0IGVmZmVjdGl2ZWx5IGhhcyAzIHN0YXRlcywgYnV0IG5lZWRzIHRvIGhhbmRsZSA0XFxuKyAqIFRoZSBlbnVtZXJhdGlvbiBoYXMgdHdvIHB1cnBvc2VzOlxcbisgKiAgIC0gYXMgYW4gaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYWxsIGtub3duIHR5cGVzIG9mIGtleWJvYXJkIGJhY2tsaWdodFxcbisgKiAgIC0gYXMgYSBtYW5kYXRvcnkgcGFyYW1ldGVyIG9mIHRoZSBLQkxDIGNvbW1hbmRcXG4rICpcXG4rICogRm9yIGVhY2ggdHlwZSwgdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgdmFsdWVzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXFxuKyAqIHwgICAgICBIYXJkd2FyZSBicmlnaHRuZXNzIHwgICAgICAgIDAgfCAgIDEgfCAgICAyIHwgICAgMyB8XFxuKyAqIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICB8XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXFxuKyAqIHwgS0JEX0JMX1NUQU5EQVJEICAgICAgICAgIHwgICAgICBvZmYgfCAgb24gfCAgTi9BIHwgIE4vQSB8XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXFxuKyAqIHwgS0JEX0JMX1RSSVNUQVRFICAgICAgICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgIE4vQSB8XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXFxuKyAqIHwgS0JEX0JMX1RSSVNUQVRFX0FVVE8gICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgYXV0byB8XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXFxuKyAqXFxuKyAqIFdlIG1hcCBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyBmb3IgS0JEX0JMX1RSSVNUQVRFX0FVVE8gYXMgZm9sbG93czpcXG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tK1xcbisgKiB8ICBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8XFxuKyAqIHwgT3BlcmF0aW9uICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHxcXG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tK1xcbisgKiB8IFJlYWQgICAgICAgICAgICAgICAgICAgICB8IG9mZi9hdXRvIHwgbG93IHwgaGlnaCB8XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLStcXG4rICogfCBXcml0ZSAgICAgICAgICAgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfFxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rXFxuICAqL1xcbiBlbnVtIHtcXG4gXFx0S0JEX0JMX1NUQU5EQVJEICAgICAgPSAxLFxcbkBAIC0xNDUsNiArMTY5LDggQEAgZW51bSB7XFxuIFxcdEtCRF9CTF9UUklTVEFURV9BVVRPID0gMyxcXG4gfTtcXG4gXFxuKyNkZWZpbmUgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTXFx0M1xcbitcXG4gI2RlZmluZSBLQkRfQkxfUVVFUllfVFlQRVxcdFxcdDB4MVxcbiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9UWVBFXFx0XFx0MHg1XFxuICNkZWZpbmUgS0JEX0JMX1RSSVNUQVRFX0FVVE9fVFlQRVxcdDB4N1xcbkBAIC0yMDMsNyArMjI5LDkgQEAgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSB7XFxuIFxcdFxcdGJvb2wgaW5pdGlhbGl6ZWQ7XFxuIFxcdFxcdGludCB0eXBlO1xcbiBcXHRcXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZDtcXG4tXFx0XFx0dW5zaWduZWQgaW50IGxhc3RfYnJpZ2h0bmVzcztcXG4rXFx0XFx0YXRvbWljX3QgbGFzdF9od19icmlnaHRuZXNzO1xcbitcXG4rXFx0XFx0c3RydWN0IG11dGV4IG5vdGlmX211dGV4OyAvKiBwcm90ZWN0cyBub3RpZmljYXRpb25zICovXFxuIFxcdH0ga2JkX2JsO1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRib29sIGluaXRpYWxpemVkO1xcbkBAIC0xNTkyLDcgKzE2MjAsMjQgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZShpbnQgdHlwZSlcXG4gXFx0cmV0dXJuICh0eXBlID09IEtCRF9CTF9UUklTVEFURSkgfHwgKHR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8pO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCBpbnQgaHdfYnJpZ2h0bmVzcylcXG4re1xcbitcXHQvKiBPZmYsIGxvdyBvciBoaWdoICovXFxuK1xcdGlmIChod19icmlnaHRuZXNzIFxcdTAwM2M9IHByaXYtXFx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXFxuK1xcdFxcdHJldHVybiBod19icmlnaHRuZXNzO1xcbitcXG4rXFx0LyogQXV0byAoY29udHJvbGxlZCBieSBFQyBhY2NvcmRpbmcgdG8gQUxTKSwgcmVwb3J0IGFzIG9mZiAqL1xcbitcXHRpZiAocHJpdi1cXHUwMDNla2JkX2JsLnR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGh3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFVua25vd24gdmFsdWUgKi9cXG4rXFx0ZGV2X3dhcm4oXFx1MDAyNnByaXYtXFx1MDAzZXBsYXRmb3JtX2RldmljZS1cXHUwMDNlZGV2LFxcbitcXHRcXHQgXFxcIlVua25vd24ga2V5Ym9hcmQgYmFja2xpZ2h0IHZhbHVlOiAlZFxcXCIsIGh3X2JyaWdodG5lc3MpO1xcbitcXHRyZXR1cm4gLUVJTlZBTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmFsdWU7XFxuIFxcdGludCBlcnI7XFxuQEAgLTE2MDYsMjEgKzE2NTEsNyBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRcXHQvKiBDb252ZXJ0IHJldHVybmVkIHZhbHVlIHRvIGJyaWdodG5lc3MgbGV2ZWwgKi9cXG4tXFx0XFx0dmFsdWUgPSBGSUVMRF9HRVQoS0JEX0JMX0dFVF9CUklHSFRORVNTLCB2YWx1ZSk7XFxuLVxcbi1cXHRcXHQvKiBPZmYsIGxvdyBvciBoaWdoICovXFxuLVxcdFxcdGlmICh2YWx1ZSBcXHUwMDNjPSBwcml2LVxcdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxcbi1cXHRcXHRcXHRyZXR1cm4gdmFsdWU7XFxuLVxcbi1cXHRcXHQvKiBBdXRvLCByZXBvcnQgYXMgb2ZmICovXFxuLVxcdFxcdGlmICh2YWx1ZSA9PSBwcml2LVxcdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzICsgMSlcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRcXHQvKiBVbmtub3duIHZhbHVlICovXFxuLVxcdFxcdGRldl93YXJuKFxcdTAwMjZwcml2LVxcdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0IFxcXCJVbmtub3duIGtleWJvYXJkIGJhY2tsaWdodCB2YWx1ZTogJWx1XFxcIiwgdmFsdWUpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0cmV0dXJuIEZJRUxEX0dFVChLQkRfQkxfR0VUX0JSSUdIVE5FU1MsIHZhbHVlKTtcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gZXZhbF9oYWxzKHByaXYtXFx1MDAzZWFkZXYtXFx1MDAzZWhhbmRsZSwgXFx1MDAyNnZhbHVlKTtcXG5AQCAtMTYzMCw2ICsxNjYxLDE2IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcXG4gXFx0cmV0dXJuICEhdGVzdF9iaXQoSEFMU19LQkRfQkxfU1RBVEVfQklULCBcXHUwMDI2dmFsdWUpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXFxuK3tcXG4rXFx0aW50IGh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTtcXG4rXFxuK1xcdGlmIChod19icmlnaHRuZXNzIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XFxuK1xcbitcXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTtcXG4rfVxcbitcXG4gc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XFxuQEAgLTE2MzcsNjIgKzE2NzgsMTIzIEBAIHN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBsZWRfY2xhXFxuIFxcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCB1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzcylcXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCBpbnQgaHdfYnJpZ2h0bmVzcylcXG4ge1xcbi1cXHRpbnQgZXJyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHZhbHVlO1xcbiBcXHRpbnQgdHlwZSA9IHByaXYtXFx1MDAzZWtiZF9ibC50eXBlO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7XFxuLVxcdFxcdGlmIChicmlnaHRuZXNzIFxcdTAwM2UgcHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbi1cXHRcXHR2YWx1ZSA9IEZJRUxEX1BSRVAoS0JEX0JMX1NFVF9CUklHSFRORVNTLCBicmlnaHRuZXNzKSB8XFxuK1xcdFxcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGh3X2JyaWdodG5lc3MpIHxcXG4gXFx0XFx0XFx0RklFTERfUFJFUChLQkRfQkxfQ09NTUFORF9UWVBFLCB0eXBlKSB8XFxuIFxcdFxcdFxcdEtCRF9CTF9DT01NQU5EX1NFVDtcXG4gXFx0XFx0ZXJyID0gZXhlY19rYmxjKHByaXYtXFx1MDAzZWFkZXYtXFx1MDAzZWhhbmRsZSwgdmFsdWUpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRlcnIgPSBleGVjX3NhbHMocHJpdi1cXHUwMDNlYWRldi1cXHUwMDNlaGFuZGxlLCBicmlnaHRuZXNzID8gU0FMU19LQkRfQkxfT04gOiBTQUxTX0tCRF9CTF9PRkYpO1xcbitcXHRcXHR2YWx1ZSA9IGh3X2JyaWdodG5lc3MgPyBTQUxTX0tCRF9CTF9PTiA6IFNBTFNfS0JEX0JMX09GRjtcXG4rXFx0XFx0ZXJyID0gZXhlY19zYWxzKHByaXYtXFx1MDAzZWFkZXYtXFx1MDAzZWhhbmRsZSwgdmFsdWUpO1xcbiBcXHR9XFxuLVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnByaXYtXFx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MsIGh3X2JyaWdodG5lc3MpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgaW50IGJyaWdodG5lc3MpXFxuK3tcXG4rXFx0aWYgKGJyaWdodG5lc3MgXFx1MDAzZSBwcml2LVxcdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBicmlnaHRuZXNzKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXFxuIHtcXG4gXFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBXaGVuIGRlaW5pdGlhbGl6aW5nOiBJdCBtdXN0IGJlIHRoZSBzaWRlIGVmZmVjdCBvZiBsZWRfY2RldlxcbitcXHQgKiB1bnJlZ2lzdHJhdGlvbiB3aGVuIG91ciBwcml2YXRlIHRyaWdnZXIgaXMgYWN0aXZlLiBXZSd2ZSBzZXRcXG4rXFx0ICogTEVEX1JFVEFJTl9BVF9TSFVURE9XTiB0byByZXRhaW4gbGVkX2NkZXYgYnJpZ2h0bmVzcyBsZXZlbC5cXG4rXFx0ICogVG8gZG8gdGhlIHNhbWUgZm9yIGF1dG8gbW9kZSwgZ2F0ZSBjaGFuZ2VzIGFuZCByZXR1cm4gZWFybHkuXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkoIXByaXYtXFx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xcbitcXG4rXFx0cmV0dXJuIGF0b21pY19yZWFkKFxcdTAwMjZwcml2LVxcdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzKSA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xcbitcXG4rXFx0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUyk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbGVkX2h3X3RyaWdnZXJfdHlwZSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyID0ge1xcbitcXHQubmFtZSA9IFxcXCJpZGVhcGFkLWF1dG9cXFwiLFxcbitcXHQudHJpZ2dlcl90eXBlID0gXFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl90eXBlLFxcbitcXHQuYWN0aXZhdGUgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfYWN0aXZhdGUsXFxuK1xcdC5vZmZsb2FkZWQgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkLFxcbit9O1xcbitcXG4rc3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQ7XFxuK1xcbitzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGludCBod19icmlnaHRuZXNzLCBpbnQgbGFzdF9od19icmlnaHRuZXNzKVxcbit7XFxuK1xcdGJvb2wgaHdfY29udHJvbCwgbGFzdF9od19jb250cm9sO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWtiZF9ibC50eXBlICE9IEtCRF9CTF9UUklTVEFURV9BVVRPKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRod19jb250cm9sID0gaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XFxuK1xcdGxhc3RfaHdfY29udHJvbCA9IGxhc3RfaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XFxuK1xcbitcXHRpZiAoaHdfY29udHJvbCAhPSBsYXN0X2h3X2NvbnRyb2wpXFxuK1xcdFxcdGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoXFx1MDAyNnByaXYtXFx1MDAzZWtiZF9ibC5sZWQsIGh3X2NvbnRyb2wpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnkoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcXG4ge1xcbi1cXHRpbnQgYnJpZ2h0bmVzcztcXG4rXFx0aW50IGh3X2JyaWdodG5lc3MsIGJyaWdodG5lc3MsIGxhc3RfaHdfYnJpZ2h0bmVzcztcXG4gXFxuIFxcdGlmICghcHJpdi1cXHUwMDNla2JkX2JsLmluaXRpYWxpemVkKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRicmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQocHJpdik7XFxuLVxcdGlmIChicmlnaHRuZXNzIFxcdTAwM2MgMClcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZwcml2LVxcdTAwM2VrYmRfYmwubm90aWZfbXV0ZXgpO1xcbitcXG4rXFx0aHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xcbitcXHRpZiAoaHdfYnJpZ2h0bmVzcyBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmIChicmlnaHRuZXNzID09IHByaXYtXFx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MpXFxuK1xcdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpO1xcbitcXHRpZiAoYnJpZ2h0bmVzcyBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybjsgLyogUmVqZWN0IGluc2FuZSB2YWx1ZXMgZWFybHkuICovXFxuK1xcbitcXHRsYXN0X2h3X2JyaWdodG5lc3MgPSBhdG9taWNfeGNoZyhcXHUwMDI2cHJpdi1cXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcywgaHdfYnJpZ2h0bmVzcyk7XFxuK1xcdGlmIChod19icmlnaHRuZXNzID09IGxhc3RfaHdfYnJpZ2h0bmVzcylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7XFxuK1xcdGlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sKHByaXYsIGh3X2JyaWdodG5lc3MsIGxhc3RfaHdfYnJpZ2h0bmVzcyk7XFxuIFxcbiBcXHRsZWRfY2xhc3NkZXZfbm90aWZ5X2JyaWdodG5lc3NfaHdfY2hhbmdlZChcXHUwMDI2cHJpdi1cXHUwMDNla2JkX2JsLmxlZCwgYnJpZ2h0bmVzcyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaW5pdChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxcbiB7XFxuLVxcdGludCBicmlnaHRuZXNzLCBlcnI7XFxuK1xcdGludCBod19icmlnaHRuZXNzLCBlcnI7XFxuIFxcbiBcXHRpZiAoIXByaXYtXFx1MDAzZWZlYXR1cmVzLmtiZF9ibClcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuQEAgLTE3MDAsMjggKzE4MDIsNjggQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9pbml0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXFxuIFxcdGlmIChXQVJOX09OKHByaXYtXFx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCkpXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXG4tXFx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHByaXYtXFx1MDAzZWtiZF9ibC50eXBlKSlcXG4tXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7XFxuK1xcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVxcdTAwM2VkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VrYmRfYmwubm90aWZfbXV0ZXgpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xcbi1cXHRpZiAoYnJpZ2h0bmVzcyBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiBicmlnaHRuZXNzO1xcbitcXHRod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7XFxuK1xcdGlmIChod19icmlnaHRuZXNzIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XFxuK1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZwcml2LVxcdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKTtcXG4gXFxuLVxcdHByaXYtXFx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzO1xcbiBcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLm5hbWUgICAgICAgICAgICAgICAgICAgID0gXFxcInBsYXRmb3JtOjpcXFwiIExFRF9GVU5DVElPTl9LQkRfQkFDS0xJR0hUO1xcbiBcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLmJyaWdodG5lc3NfZ2V0ICAgICAgICAgID0gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQ7XFxuIFxcdHByaXYtXFx1MDAzZWtiZF9ibC5sZWQuYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX3NldDtcXG4gXFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5mbGFncyAgICAgICAgICAgICAgICAgICA9IExFRF9CUklHSFRfSFdfQ0hBTkdFRCB8IExFRF9SRVRBSU5fQVRfU0hVVERPV047XFxuIFxcbi1cXHRlcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoXFx1MDAyNnByaXYtXFx1MDAzZXBsYXRmb3JtX2RldmljZS1cXHUwMDNlZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNla2JkX2JsLmxlZCk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdHN3aXRjaCAocHJpdi1cXHUwMDNla2JkX2JsLnR5cGUpIHtcXG4rXFx0Y2FzZSBLQkRfQkxfVFJJU1RBVEVfQVVUTzpcXG4rXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XFxuIFxcbitcXHRcXHRpZiAoIWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKSB7XFxuK1xcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwcml2LVxcdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0IFxcXCJDb3VsZCBub3QgcHJvdmlkZSBMRUQgdHJpZ2dlciAlcyBmb3Iga2V5Ym9hcmQgYmFja2xpZ2h0XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5mbGFncyAgICAgICAgICAgICB8PSBMRURfVFJJR19IV19DSEFOR0VEO1xcbitcXHRcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLmh3X2NvbnRyb2xfdHJpZ2dlciA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lO1xcbitcXHRcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLnRyaWdnZXJfdHlwZSAgICAgICA9IFxcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTtcXG4rXFxuK1xcdFxcdC8qIEhhcmR3YXJlIHJlbWVtYmVycyB0aGUgbGFzdCBicmlnaHRuZXNzIGxldmVsLCBpbmNsdWRpbmcgYXV0byBtb2RlLiAqL1xcbitcXHRcXHRpZiAoaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZWtiZF9ibC5sZWQuZGVmYXVsdF90cmlnZ2VyID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWU7XFxuK1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBLQkRfQkxfVFJJU1RBVEU6XFxuK1xcdFxcdHByaXYtXFx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBLQkRfQkxfU1RBTkRBUkQ6XFxuK1xcdFxcdHByaXYtXFx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAxO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0LyogVGhpcyBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBieSBpZGVhcGFkX2NoZWNrX2ZlYXR1cmVzKCkuICovXFxuK1xcdFxcdHVucmVhY2hhYmxlKCk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFF1ZXVlIG5vdGlmaWNhdGlvbnMsIGFzIGtiZF9ibC5pbml0aWFsaXplZCBpcyBhYm91dCB0byBiZSBzZXQuICovXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cHJpdi1cXHUwMDNla2JkX2JsLm5vdGlmX211dGV4KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNldHRpbmcga2JkX2JsLmluaXRpYWxpemVkIGFmdGVyIGxlZF9jbGFzc2Rldl9yZWdpc3RlcigpIGNvdWxkIGxlYWRcXG4rXFx0ICogdG8gcmFjZSBjb25kaXRpb25zIGluIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0KCkgd2hlcmVcXG4rXFx0ICoga2JkX2JsLmluaXRpYWxpemVkIGlzIGNoZWNrZWQsIHNvIHNldCBpdCBub3cuIEl0IGNhbiBiZSByZXZlcnRlZCBiYWNrXFxuK1xcdCAqIGlmIHRoZSBMRUQgY2xhc3NkZXYgZmFpbGVkIHRvIHJlZ2lzdGVyLlxcbitcXHQgKi9cXG4gXFx0cHJpdi1cXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gdHJ1ZTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRlcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoXFx1MDAyNnByaXYtXFx1MDAzZXBsYXRmb3JtX2RldmljZS1cXHUwMDNlZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNla2JkX2JsLmxlZCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHByaXYtXFx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfZXhpdChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxcbkBAIC0yNTQ4LDE3ICsyNjkwLDMwIEBAIHN0YXRpYyBpbnQgX19pbml0IGlkZWFwYWRfbGFwdG9wX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0ZXJyID0gbGVkX3RyaWdnZXJfcmVnaXN0ZXIoXFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIExFRCB0cmlnZ2VyICVzOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUsIGVycik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gXFx0ZXJyID0gaWRlYXBhZF93bWlfZHJpdmVyX3JlZ2lzdGVyKCk7XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gZXJyX2xlZHRyaWc7XFxuIFxcbiBcXHRlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdGlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7XFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfd21pO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfd21pOlxcbitcXHRpZGVhcGFkX3dtaV9kcml2ZXJfdW5yZWdpc3RlcigpO1xcbitlcnJfbGVkdHJpZzpcXG4rXFx0aWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKVxcbitcXHRcXHRsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKFxcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIG1vZHVsZV9pbml0KGlkZWFwYWRfbGFwdG9wX2luaXQpXFxuIFxcbkBAIC0yNTY2LDYgKzI3MjEsOSBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgaWRlYXBhZF9sYXB0b3BfZXhpdCh2b2lkKVxcbiB7XFxuIFxcdGlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7XFxuIFxcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZpZGVhcGFkX2FjcGlfZHJpdmVyKTtcXG4rXFxuK1xcdGlmIChpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZClcXG4rXFx0XFx0bGVkX3RyaWdnZXJfdW5yZWdpc3RlcihcXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTtcXG4gfVxcbiBtb2R1bGVfZXhpdChpZGVhcGFkX2xhcHRvcF9leGl0KVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMuaFxcbmluZGV4IGIxNmI4MDNjYzFhYzUxLi4xNjc1OTg5NjJiNzNlYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xlZHMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbGVkcy5oXFxuQEAgLTEwOSw2ICsxMDksNyBAQCBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHtcXG4gI2RlZmluZSBMRURfSU5JVF9ERUZBVUxUX1RSSUdHRVIgQklUKDIzKVxcbiAjZGVmaW5lIExFRF9SRUpFQ1RfTkFNRV9DT05GTElDVCBCSVQoMjQpXFxuICNkZWZpbmUgTEVEX01VTFRJX0NPTE9SXFx0XFx0QklUKDI1KVxcbisjZGVmaW5lIExFRF9UUklHX0hXX0NIQU5HRURcXHRCSVQoMjYpXFxuIFxcbiBcXHQvKiBzZXRfYnJpZ2h0bmVzc193b3JrIC8gYmxpbmtfdGltZXIgZmxhZ3MsIGF0b21pYywgcHJpdmF0ZS4gKi9cXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHdvcmtfZmxhZ3M7XFxuQEAgLTQ4NSw2ICs0ODYsNyBAQCBzdHJ1Y3QgbGVkX3RyaWdnZXIge1xcbiBcXHRjb25zdCBjaGFyXFx0ICpuYW1lO1xcbiBcXHRpbnRcXHRcXHQoKmFjdGl2YXRlKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuIFxcdHZvaWRcXHRcXHQoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG4rXFx0Ym9vbFxcdFxcdCgqb2ZmbG9hZGVkKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuIFxcbiBcXHQvKiBCcmlnaHRuZXNzIHNldCBieSBsZWRfdHJpZ2dlcl9ldmVudCAqL1xcbiBcXHRlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3M7XFxuQEAgLTUzMyw2ICs1MzUsOSBAQCB2b2lkIGxlZF90cmlnZ2VyX2JsaW5rX29uZXNob3Qoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyLFxcbiB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG4gaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKTtcXG4gdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xcbit2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG4rXFxuK2Jvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdHZvaWQgKnRyaWdnZXJfZGF0YSlcXG5AQCAtNTg0LDYgKzU4OSwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGxlZF9zZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgKmxlZF9nZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbiB7XFxuQEAgLTU5OCw2ICs2MTAsMTMgQEAgbGVkX3RyaWdnZXJfZ2V0X2JyaWdodG5lc3MoY29uc3Qgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKVxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTICovXFxuIFxcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxcbit2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGJvb2wgYWN0aXZhdGUpIHt9XFxuKyNlbmRpZlxcbitcXG4gLyogVHJpZ2dlciBzcGVjaWZpYyBlbnVtICovXFxuIGVudW0gbGVkX3RyaWdnZXJfbmV0ZGV2X21vZGVzIHtcXG4gXFx0VFJJR0dFUl9ORVRERVZfTElOSyA9IDAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjUzOjU0LjMwODE0NDI2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU5ODIxNDg5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTEVEU19UUklHR0VSU19IV19DSEFOR0VEXCIsXG4gICAgXCJMRURTX1RSSUdHRVJfTkVUREVWXCIsXG4gICAgXCJJREVBUEFEX0xBUFRPUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZFwiLFxuICAgIFwibGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZFwiLFxuICAgIFwibGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xcIixcbiAgICBcInRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd1wiLFxuICAgIFwibGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uXCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkXCIsXG4gICAgXCJfX2xlZF90cmlnZ2VyX3NldFwiLFxuICAgIFwibmV0ZGV2X3RyaWdfb2ZmbG9hZGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgTEVEIHRyaWdnZXIgc3Vic3lzdGVtLCBhZGRpbmcgc3VwcG9ydCBmb3IgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbnMgYW5kIG9mZmxvYWQgc3RhdGUgcmVwb3J0aW5nLiBUaGVzZSBuZXcgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhdHRyaWJ1dGVzIChgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAsIGBicmlnaHRuZXNzYCwgYHRyaWdnZXJgKSBhbmQgZHJpdmVyIG5vdGlmaWNhdGlvbnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgc3RhdGUgdHJhbnNpdGlvbiBsb2dpYyBhbmQgb2ZmbG9hZCBxdWVyaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRkZThmMGIzYjMyOTM1NDI2MWExNTU0ZDY5NGVkM2JiMTE1NzgxNGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxOCAxNzo1Mzo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWRcbmluZGV4IGQ0YzkxOGNjMTFhMTI3Li43ZGM5NWY3YTM1MDVjZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZFxuQEAgLTc4LDYgKzc4LDMxIEBAIERlc2NyaXB0aW9uOlxuIFx0XHQod2hpY2ggd291bGQgb2Z0ZW4gYmUgY29uZmlndXJlZCBpbiB0aGUgZGV2aWNlIHRyZWUgZm9yIHRoZVxuIFx0XHRoYXJkd2FyZSkuXG4gXG4rV2hhdDpcdFx0L3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS90cmlnZ2VyX21heV9vZmZsb2FkXG4rRGF0ZTpcdFx0SnVseSAyMDI2XG4rS2VybmVsVmVyc2lvbjpcdDcuM1xuK0NvbnRhY3Q6XHRsaW51eC1sZWRzQHZnZXIua2VybmVsLm9yZ1xuK0Rlc2NyaXB0aW9uOlxuK1x0XHROYW1lcyBhbmQgc3RhdGVzIG9mIHRyaWdnZXJzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCB0byBoYXJkd2FyZS5cbitcdFx0U3VjaCB0cmlnZ2VycyBhcmUgYWxzbyBjYWxsZWQgXCJoYXJkd2FyZSBjb250cm9sIHRyaWdnZXJcIiBpbiBzb21lXG4rXHRcdGNvbnRleHQuXG4rXG4rXHRcdE9ubHkgZXhpc3RzIHdoZW4gdGhlIExFRCBzdXBwb3J0cyB0cmlnZ2VyIG9mZmxvYWQuXG4rXG4rXHRcdFJlYWRpbmcgdGhpcyBmaWxlIHJldHVybnMgYSBsaXN0IG9mIHRyaWdnZXJzIHRoYXQgYXJlIGNhcGFibGUgdG9cbitcdFx0YmUgb2ZmbG9hZGVkLiBUaGUgb3B0aW9uYWwgYnJhY2tldHMgYXJvdW5kIHRoZSB0cmlnZ2VyIG5hbWVcbitcdFx0aW5kaWNhdGUgdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IHRyaWdnZXI6XG4rXG4rXHRcdC0gYGZvb190cmlnZ2VyYDogdGhlIHRyaWdnZXIgaXMgbm90IHNlbGVjdGVkLlxuK1x0XHQtIGBcdTAwM2Nmb29fdHJpZ2dlclx1MDAzZWA6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkLCBidXQgZmFsbHMgYmFjayB0b1xuK1x0XHQgIHNvZnR3YXJlIGJsaW5rIGZvciBzb21lIHJlYXNvbiAoZS5nLiwgaW5jb21wYXRpYmxlIHRyaWdnZXJcbitcdFx0ICBwYXJhbWV0ZXJzKVxuK1x0XHQtIGBbZm9vX3RyaWdnZXJdYDogdGhlIHRyaWdnZXIgaXMgc2VsZWN0ZWQgYW5kIG9mZmxvYWRlZCB0b1xuK1x0XHQgIGhhcmR3YXJlLlxuK1xuK1x0XHRUaGUgXCJuZXRkZXZcIiB0cmlnZ2VyIGFsc28gcHJvdmlkZXMgYSBjdXN0b20gYXR0cmlidXRlIHRvXG4rXHRcdGluZGljYXRlIGl0cyBzdGF0ZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL29mZmxvYWRlZGAuXG4rXG4gV2hhdDpcdFx0L3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS9pbnZlcnRlZFxuIERhdGU6XHRcdEphbnVhcnkgMjAxMVxuIEtlcm5lbFZlcnNpb246XHQyLjYuMzhcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2XG5pbmRleCBlZDQ2YjM3YWI4YTI4NC4uYTUxNDZlYTFlM2U2MWMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldlxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcbkBAIC03NSw2ICs3NSw5IEBAIERlc2NyaXB0aW9uOlxuIFx0XHRJZiAxLCB0aGUgTEVEIGJsaW5raW5nIGluIHJlcXVlc3RlZCBtb2RlIGlzIG9mZmxvYWRlZCB0b1xuIFx0XHRoYXJkd2FyZS5cbiBcbitcdFx0TEVEIHRyaWdnZXIgY29yZSBhbHNvIHByb3ZpZGVzIGEgZ2VuZXJpYyBhdHRyaWJ1dGUgZm9yIHRoaXNcbitcdFx0cHVycG9zZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRgLlxuK1xuIFdoYXQ6XHRcdC9zeXMvY2xhc3MvbGVkcy9cdTAwM2NsZWRcdTAwM2UvbGlua18xMFxuIERhdGU6XHRcdEp1biAyMDIzXG4gS2VybmVsVmVyc2lvbjpcdDYuNVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxuaW5kZXggMzkxMzk2NmNmZGFjMDQuLmFkYmM1N2I5ZjQ5YzMzIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcbkBAIC0yNDIsNiArMjQyLDkgQEAgb3BzIGFuZCBuZWVkcyB0byBkZWNsYXJlIHNwZWNpZmljIHN1cHBvcnQgZm9yIHRoZSBzdXBwb3J0ZWQgdHJpZ2dlcnMuXG4gXG4gV2l0aCBodyBjb250cm9sIHdlIHJlZmVyIHRvIHRoZSBMRUQgZHJpdmVuIGJ5IGhhcmR3YXJlLlxuIFxuK0Egc3lzZnMgYXR0cmlidXRlIGB0cmlnZ2VyX21heV9vZmZsb2FkYCBpcyBwcm92aWRlZCBmb3IgdXNlcnNwYWNlIHRvXG4rcXVlcnkgc3VwcG9ydGVkIHRyaWdnZXJzIGFuZCB0aGVpciBzdGF0ZXMuXG4rXG4gTEVEIGRyaXZlciBtdXN0IGRlZmluZSB0aGUgZm9sbG93aW5nIHZhbHVlIHRvIHN1cHBvcnQgaHcgY29udHJvbDpcbiBcbiAgICAgLSBod19jb250cm9sX3RyaWdnZXI6XG5AQCAtMjk4LDYgKzMwMSwxNSBAQCBMRUQgZHJpdmVyIG11c3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgQVBJIHRvIHN1cHBvcnQgaHcgY29udHJvbDpcbiAgICAgICAgICAgICAgICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZGV2aWNlIG9yIE5VTEwgaWYgbm90aGluZ1xuICAgICAgICAgICAgICAgICBpcyBjdXJyZW50bHkgYXR0YWNoZWQuXG4gXG4rTEVEIHRyaWdnZXIgc2hvdWxkIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEFQSSB0byBpbmRpY2F0ZSBodyBjb250cm9sOlxuKyAgICAtIG9mZmxvYWRlZDpcbisgICAgICAgICAgICAgICAgcmV0dXJuIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB0cmlnZ2VyIGlzIGN1cnJlbnRseVxuKyAgICAgICAgICAgICAgICBvZmZsb2FkZWQgdG8gaGFyZHdhcmUuXG4rXG4rICAgICAgICAgICAgICAgIElmIGEgdHJpZ2dlciBkb2Vzbid0IGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLCB0aGUgZGVmYXVsdFxuKyAgICAgICAgICAgICAgICB2YWx1ZSB3aWxsIGJlIHRydWUgZm9yIHByaXZhdGUgdHJpZ2dlcnMgYW5kIGZhbHNlIGZvciBnZW5lcmljXG4rICAgICAgICAgICAgICAgIG9uZXMuXG4rXG4gTEVEIGRyaXZlciBjYW4gYWN0aXZhdGUgYWRkaXRpb25hbCBtb2RlcyBieSBkZWZhdWx0IHRvIHdvcmthcm91bmQgdGhlXG4gaW1wb3NzaWJpbGl0eSBvZiBzdXBwb3J0aW5nIGVhY2ggZGlmZmVyZW50IG1vZGUgb24gdGhlIHN1cHBvcnRlZCB0cmlnZ2VyLlxuIEV4YW1wbGVzIGFyZSBoYXJkY29kaW5nIHRoZSBibGluayBzcGVlZCB0byBhIHNldCBpbnRlcnZhbCwgZW5hYmxlIHNwZWNpYWxcbkBAIC0zMTEsOSArMzIzLDY5IEBAIHRoZSBlbmQgdXNlIGh3X2NvbnRyb2xfc2V0IHRvIGFjdGl2YXRlIGh3IGNvbnRyb2wuXG4gQSB0cmlnZ2VyIGNhbiB1c2UgaHdfY29udHJvbF9nZXQgdG8gY2hlY2sgaWYgYSBMRUQgaXMgYWxyZWFkeSBpbiBodyBjb250cm9sXG4gYW5kIGluaXQgdGhlaXIgZmxhZ3MuXG4gXG4rQWx0ZXJuYXRpdmVseSwgYSBwcml2YXRlIHRyaWdnZXIgY2FuIGJlIGltcGxlbWVudGVkIGFsb25nIHdpdGggdGhlIExFRCBkcml2ZXIgaWZcbit0aGUgTEVEJ3MgaGFyZHdhcmUgY29udHJvbCBkb2Vzbid0IGZpdCBhbnkgZ2VuZXJpYyB0cmlnZ2VyLiBUbyBhc3NvY2lhdGUgdGhlXG4rcHJpdmF0ZSB0cmlnZ2VyIHdpdGggdGhlIExFRCBjbGFzc2RldiwgdGhlaXIgYHRyaWdnZXJfdHlwZWAgbXVzdCBiZSB0aGUgc2FtZS4gVG9cbitkZWNsYXJlIHRoYXQgdGhlIHByaXZhdGUgdHJpZ2dlciBwcm92aWRlcyBoYXJkd2FyZSBjb250cm9sIGZvciB0aGUgYXNzb2NpYXRlZFxuK0xFRCBjbGFzc2Rldiwgc2V0IHRoZSBgaHdfY29udHJvbF90cmlnZ2VyYCBzdHJpbmcgdG8gdGhlIHRyaWdnZXIncyBuYW1lLiBTaW5jZVxuK2JvdGggdGhlIExFRCBjbGFzc2RldiBhbmQgdGhlIHByaXZhdGUgdHJpZ2dlciBhcmUgaW4gdGhlIHNhbWUgTEVEIGRyaXZlciwgaXQnc1xuK25vdCBuZWNlc3NhcnkgZm9yIHRoZW0gdG8gY29vcmRpbmF0ZSB2aWEgYGh3X2NvbnRyb2xfKmAgY2FsbGJhY2tzLlxuK1xuIFdoZW4gdGhlIExFRCBpcyBpbiBodyBjb250cm9sLCBubyBzb2Z0d2FyZSBibGluayBpcyBwb3NzaWJsZSBhbmQgZG9pbmcgc29cbiB3aWxsIGVmZmVjdGl2ZWx5IGRpc2FibGUgaHcgY29udHJvbC5cbiBcbitIYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK1NvbWUgaGFyZHdhcmUgY2FuIGF1dG9ub21vdXNseSBhY3RpdmF0ZS9kZWFjdGl2YXRlIGhhcmR3YXJlIGNvbnRyb2wuIEFmdGVyIHRoYXQsXG4rdGhlIExFRCBoYXJkd2FyZSBub3RpZmllcyB0aGUgTEVEIGRyaXZlci5cbitcbitJZiB0aGUgZHJpdmVyIGNhbiBkZXRlY3Qgc3VjaCB0cmFuc2l0aW9ucyBhbmQgdGh1cyB3YW50cyB0byBub3RpZnkgdGhlIExFRCBjb3JlXG4rdG8gdXBkYXRlIHRoZSBjdXJyZW50IHRyaWdnZXIgdGhlbiB0aGUgYExFRF9UUklHX0hXX0NIQU5HRURgIGZsYWcgbXVzdCBiZSBzZXQgaW5cbitmbGFncyBiZWZvcmUgcmVnaXN0ZXJpbmcuIFRvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIGFjY29yZGluZ2x5LCBjYWxsXG4rYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIG9uIHRoZSBMRUQgY2xhc3NkZXYuXG4rXG4rVGhpcyBjYXBhYmlsaXR5IGlzIHJlc3RyaWN0ZWQgdG8gdGhlIExFRCBkZXZpY2UncyBwcml2YXRlIHRyaWdnZXIuIFRoZSBwcml2YXRlXG4rdHJpZ2dlciBtdXN0IGhhdmUgYmVlbiBwcm9wZXJseSByZWdpc3RlcmVkIChzZWUgYWJvdmUpIGFuZCBuYW1lZCBhZnRlclxuK2Bod19jb250cm9sX3RyaWdnZXJgLlxuK1xuK09ubHkgdHdvIHRyYW5zaXRpb25zIGFyZSBkZWZpbmVkOlxuK1xuKy0gXCJub25lXCIgPVx1MDAzZSBwcml2YXRlIHRyaWdnZXI6XG4rICAgICAgICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaGFyZHdhcmUgYXV0b25vbW91c2x5IGFjdGl2YXRlcyBoYXJkd2FyZSBjb250cm9sXG4rICAgICAgICBhbmQgd2hlbiBcIm5vbmVcIiAoaS5lLiwgbm8gdHJpZ2dlcikgaXMgY3VycmVudGx5IGFjdGl2ZS4gSWYgdGhlIHByaXZhdGVcbisgICAgICAgIHRyaWdnZXIgaXMgYWxyZWFkeSBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseVxuKyAgICAgICAgYSBuby1vcC5cbitcbisgICAgICAgIFRoZSBhY3RpdmF0aW9uIHNlcXVlbmNlIGZvciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHdpbGwgYmUgZXhlY3V0ZWQgYXNcbisgICAgICAgIG5vcm1hbC5cbitcbisgICAgICAgIFRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgdGhlXG4rICAgICAgICBhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIGN1cnJlbnRseSBpbiBoYXJkd2FyZVxuKyAgICAgICAgY29udHJvbC5cbitcbisgICAgICAgIElmIGVycm9yIG9jY3VycyBpbiB0aGUgYWN0aXZhdGlvbiBzZXF1ZW5jZSwgdGhlIExFRCBUcmlnZ2VyIGNvcmUgcmV2ZXJ0c1xuKyAgICAgICAgdGhlIGVmZmVjdGl2ZSB0cmlnZ2VyIHRvIFwibm9uZVwiLlxuK1xuKy0gcHJpdmF0ZSB0cmlnZ2VyID1cdTAwM2UgXCJub25lXCJcbisgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0ZXMgaGFyZHdhcmUgY29udHJvbFxuKyAgICAgICAgYW5kIHdoZW4gdGhlIHByaXZhdGUgdHJpZ2dlciBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiBcIm5vbmVcIiAoaS5lLiwgbm9cbisgICAgICAgIHRyaWdnZXIpIGlzIGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5IGFcbisgICAgICAgIG5vLW9wLlxuK1xuKyAgICAgICAgVGhlIGRlYWN0aXZhdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIHByaXZhdGUgdHJpZ2dlciB3aWxsIGJlIGV4ZWN1dGVkIGFzXG4rICAgICAgICBub3JtYWwsIGV4Y2VwdCB0aGF0IHRoZSBjdXJyZW50IExFRCBicmlnaHRuZXNzIGlzIHJldGFpbmVkLiBUaGUgcmVhc29uXG4rICAgICAgICBmb3Iga2VlcGluZyB0aGUgYnJpZ2h0bmVzcyB1bmNoYW5nZWQgaXMgdGhhdCBzb21lIGhhcmR3YXJlIG1heSBjaG9vc2UgYVxuKyAgICAgICAgc3BlY2lmaWMgYnJpZ2h0bmVzcyBpbnN0ZWFkIG9mIHNpbXBseSB0dXJuaW5nIG9mZiB0aGUgTEVEIGFmdGVyXG4rICAgICAgICBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0aW5nIGhhcmR3YXJlIGNvbnRyb2wuXG4rXG4rICAgICAgICBUaGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlciBtdXN0IGJlIGFibGUgdG8gaGFuZGxlIHRoZVxuKyAgICAgICAgZGVhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIG5vdCBjdXJyZW50bHkgaW4gaGFyZHdhcmVcbisgICAgICAgIGNvbnRyb2wuXG4rXG4rSWYgdGhlIGN1cnJlbnQgdHJpZ2dlciBpcyBuZWl0aGVyIHRoZSBwcml2YXRlIHRyaWdnZXIgbm9yIFwibm9uZVwiLCBubyB0cmFuc2l0aW9uXG4rd2lsbCBiZSBtYWRlLlxuK1xuIEtub3duIElzc3Vlc1xuID09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuY1xuaW5kZXggYTUxYjBlZDUzODg2NDQuLjI0NjBmY2YwYzQ2OTBhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jXG4rKysgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcbkBAIC0yNywxNiArMjcsNiBAQCBzdGF0aWMgTElTVF9IRUFEKGxlZHNfbG9va3VwX2xpc3QpO1xuIFxuIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGVkc193cTtcbiBcbi1zdGF0aWMgYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuLXtcbi0jaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbi1cdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4tXHRyZXR1cm4gbGVkX2NkZXYtXHUwMDNldHJpZ2dlciBcdTAwMjZcdTAwMjYgbGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2V0cmlnZ2VyX3R5cGU7XG4tI2Vsc2Vcbi1cdHJldHVybiBmYWxzZTtcbi0jZW5kaWZcbi19XG4tXG4gc3RhdGljIHNzaXplX3QgYnJpZ2h0bmVzc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiB7XG5AQCAtNzQsNiArNjQsOSBAQCBzdGF0aWMgc3NpemVfdCBicmlnaHRuZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcbiBcdGlmIChzdGF0ZSA9PSBMRURfT0ZGKVxuIFx0XHRsZWRfdHJpZ2dlcl9yZW1vdmUobGVkX2NkZXYpO1xuK1x0ZWxzZVxuK1x0XHRsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChsZWRfY2Rldik7XG4rXG4gXHRsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIHN0YXRlKTtcbiBcbiBcdHJldCA9IHNpemU7XG5AQCAtMTAzLDggKzk2LDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqY29uc3QgbGVkX3RyaWdnZXJfYmluX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZiaW5fYXR0cl90cmlnZ2VyLFxuIFx0TlVMTCxcbiB9O1xuK1xuK3N0YXRpYyBERVZJQ0VfQVRUUl9STyh0cmlnZ2VyX21heV9vZmZsb2FkKTtcbitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbGVkX3RyaWdnZXJfYXR0cnNbXSA9IHtcbitcdFx1MDAyNmRldl9hdHRyX3RyaWdnZXJfbWF5X29mZmxvYWQuYXR0cixcbitcdE5VTExcbit9O1xuK1xuK3N0YXRpYyB1bW9kZV90IGxlZF90cmlnZ2VyX2lzX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuK1x0XHRcdFx0ICAgICAgaW50IGlkeClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBrb2JqX3RvX2Rldihrb2JqKTtcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4rXG4rXHRpZiAoYXR0ciA9PSBcdTAwMjZkZXZfYXR0cl90cmlnZ2VyX21heV9vZmZsb2FkLmF0dHIpXG4rXHRcdHJldHVybiBsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPyBhdHRyLVx1MDAzZW1vZGUgOiAwO1xuK1xuK1x0cmV0dXJuIGF0dHItXHUwMDNlbW9kZTtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbGVkX3RyaWdnZXJfZ3JvdXAgPSB7XG4gXHQuYmluX2F0dHJzID0gbGVkX3RyaWdnZXJfYmluX2F0dHJzLFxuK1x0LmF0dHJzID0gbGVkX3RyaWdnZXJfYXR0cnMsXG4rXHQuaXNfdmlzaWJsZSA9IGxlZF90cmlnZ2VyX2lzX3Zpc2libGUsXG4gfTtcbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmNcbmluZGV4IGIxMjIzMjE4YmRhMTEzLi42YWUyOGNiZDFjNzc4MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xuKysrIGIvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jXG5AQCAtNyw5ICs3LDEyIEBAXG4gICogQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSBcdTAwM2NycHVyZGllQG9wZW5lZGhhbmQuY29tXHUwMDNlXG4gICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbG9ja2RlcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuQEAgLTMzLDYgKzM2LDMzIEBAIHRyaWdnZXJfcmVsZXZhbnQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiBcdHJldHVybiAhdHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgfHwgdHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuK1xuK1x0aWYgKCFsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIWxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciB8fFxuK1x0ICAgIHN0cmNtcChsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIsIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlbmFtZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW9mZmxvYWRlZClcbitcdFx0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlb2ZmbG9hZGVkKGxlZF9jZGV2KTtcbitcbitcdGRldl93YXJuX29uY2UobGVkX2NkZXYtXHUwMDNlZGV2LCBcImh3IGNvbnRyb2wgdHJpZ2dlciAlcyBkb2Vzbid0IGltcGxlbWVudCBvZmZsb2FkZWQoKVxcblwiLFxuK1x0XHQgICAgICBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW5hbWUpO1xuK1xuK1x0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNldHJpZ2dlcl90eXBlO1xuK31cbitcbitib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbitcdHJldHVybiBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKTtcbitcbiBzc2l6ZV90IGxlZF90cmlnZ2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLFxuIFx0XHRcdCAgbG9mZl90IHBvcywgc2l6ZV90IGNvdW50KVxuQEAgLTE2Myw3ICsxOTMsOCBAQCBzc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlYWQpO1xuIFxuIC8qIENhbGxlciBtdXN0IGVuc3VyZSBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2sgaGVsZCAqL1xuLWludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbitzdGF0aWMgaW50IF9fbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcsXG4rXHRcdFx0ICAgICBib29sIGh3X3RyaWdnZXJlZClcbiB7XG4gXHRjaGFyICpldmVudCA9IE5VTEw7XG4gXHRjaGFyICplbnZwWzJdO1xuQEAgLTE5NCw3ICsyMjUsMjEgQEAgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuIFx0XHRsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2RhdGEgPSBOVUxMO1xuIFx0XHRsZWRfY2Rldi1cdTAwM2VhY3RpdmF0ZWQgPSBmYWxzZTtcbiBcdFx0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+TEVEX0lOSVRfREVGQVVMVF9UUklHR0VSO1xuLVx0XHRsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIExFRF9PRkYpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBIYXJkd2FyZSBtYXkgaGF2ZSBzZWxlY3RlZCBhIG5ldyBicmlnaHRuZXNzIGxldmVsIGR1cmluZyBpdHNcbitcdFx0ICogaGFyZHdhcmUgY29udHJvbCB0cmFuc2l0aW9uLCBzbyBvbmx5IHJlc2V0IGJyaWdodG5lc3MgaWYgd2VcbitcdFx0ICogYXJlIHN3aXRjaGluZyB0byBhbm90aGVyIHRyaWdnZXIgb3IgaWYgdGhlIHN3aXRjaGluZyBpcyBub3RcbitcdFx0ICogaGFyZHdhcmUgdHJpZ2dlcmVkLlxuK1x0XHQgKlxuK1x0XHQgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgZXJyb3IgcGF0aCwgYXMgcnVubmluZ1xuK1x0XHQgKiBpbnRvIHRoZSBlcnJvciBwYXRoIGltcGxpZXMgYSBub25lID1cdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyXG4rXHRcdCAqIHRyYW5zaXRpb24uIFRoaXMgaGludHMgdGhhdCB0aGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGVcbitcdFx0ICogdHJpZ2dlciBtdXN0IGhhdmUgc29tZSBmdW5kYW1lbnRhbCBidWdzLCBzbyBkb24ndCBib3RoZXJcbitcdFx0ICogbGVhdmluZyB0aGUgTEVEIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS5cbitcdFx0ICovXG4rXHRcdGlmICh0cmlnIHx8ICFod190cmlnZ2VyZWQpXG4rXHRcdFx0bGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBMRURfT0ZGKTtcbiBcdH1cbiBcdGlmICh0cmlnKSB7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZ0cmlnLVx1MDAzZWxlZGRldl9saXN0X2xvY2spO1xuQEAgLTI1OCw2ICszMDMsMTEgQEAgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4rXG4raW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuK3tcbitcdHJldHVybiBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgdHJpZywgZmFsc2UpO1xuK31cbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9zZXQpO1xuIFxuIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuQEAgLTI2OCw2ICszMTgsMTUgQEAgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZSk7XG4gXG4rdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbitcbitcdGlmIChfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKVxuK1x0XHRsZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIE5VTEwpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbCk7XG4rXG4gc3RhdGljIGJvb2wgbGVkX21hdGNoX2RlZmF1bHRfdHJpZ2dlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiB7XG5AQCAtMzEzLDYgKzM3MiwzMiBAQCB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdCk7XG4gXG4rc3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuK1x0XHRcdFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4re1xuK1x0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcdHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZztcbitcdGJvb2wgaGl0LCBvZmZsb2FkZWQ7XG4rXHRpbnQgbGVuO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZWxlZF9hY2Nlc3MpO1xuK1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbitcbitcdHRyaWcgPSBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyO1xuK1xuK1x0b2ZmbG9hZGVkID0gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcbitcdGhpdCA9IG9mZmxvYWRlZCB8fCAodHJpZyBcdTAwMjZcdTAwMjYgIXN0cmNtcChsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIsIHRyaWctXHUwMDNlbmFtZSkpO1xuK1xuK1x0LyogW29mZmxvYWRlZF0gXHUwMDNjYWN0aXZlX2J1dF9ub3Rfb2ZmbG9hZGVkXHUwMDNlIGluYWN0aXZlICovXG4rXHRsZW4gPSBzeXNmc19lbWl0KGJ1ZiwgXCIlcyVzJXNcXG5cIixcbitcdFx0XHQgb2ZmbG9hZGVkID8gXCJbXCIgOiAoaGl0ID8gXCJcdTAwM2NcIiA6IFwiXCIpLFxuK1x0XHRcdCBsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIsXG4rXHRcdFx0IG9mZmxvYWRlZCA/IFwiXVwiIDogKGhpdCA/IFwiXHUwMDNlXCIgOiBcIlwiKSk7XG4rXG4rXHRyZXR1cm4gbGVuO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTCh0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3cpO1xuK1xuIC8qIExFRCBUcmlnZ2VyIEludGVyZmFjZSAqL1xuIFxuIGludCBsZWRfdHJpZ2dlcl9yZWdpc3RlcihzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG5AQCAtNDAzLDYgKzQ4OCw2MyBAQCBpbnQgZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIpO1xuIFxuKyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXG4rc3RhdGljIHZvaWQgbGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlLFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKmhjX3RyaWcpXG4re1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoIWxlZF9jZGV2LVx1MDAzZXRyaWdnZXIpIHtcbitcdFx0LyogXCJub25lXCIgPVx1MDAzZSBwcml2YXRlIHRyaWdnZXIuICovXG4rXHRcdGlmIChhY3RpdmF0ZSlcbitcdFx0XHRlcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgaGNfdHJpZywgdHJ1ZSk7XG4rXHR9IGVsc2UgaWYgKGxlZF9jZGV2LVx1MDAzZXRyaWdnZXIgPT0gaGNfdHJpZykge1xuK1x0XHQvKiBwcml2YXRlIHRyaWdnZXIgPVx1MDAzZSBcIm5vbmVcIi4gKi9cbitcdFx0aWYgKCFhY3RpdmF0ZSlcbitcdFx0XHRlcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgTlVMTCwgdHJ1ZSk7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBPdGhlciB0cmlnZ2VyIGlzIGFjdGl2ZS4gKi9cbitcdFx0ZGV2X2RiZyhsZWRfY2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJJZ25vcmluZyBodyBjb250cm9sIHRyYW5zaXRpb24gKCVzICVzKSB3aGlsZSAlcyBpcyBhY3RpdmVcIixcbitcdFx0XHRhY3RpdmF0ZSA/IFwiYWN0aXZhdGVcIiA6IFwiZGVhY3RpdmF0ZVwiLCBoY190cmlnLVx1MDAzZW5hbWUsXG4rXHRcdFx0bGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2VuYW1lKTtcbitcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKGVycilcbitcdFx0ZGV2X3dhcm4obGVkX2NkZXYtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byAlcyAlcyBpbiBodyBjb250cm9sIHRyYW5zaXRpb246ICVkXCIsXG4rXHRcdFx0IGFjdGl2YXRlID8gXCJhY3RpdmF0ZVwiIDogXCJkZWFjdGl2YXRlXCIsIGhjX3RyaWctXHUwMDNlbmFtZSwgZXJyKTtcbit9XG4rXG4rdm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKVxuK3tcbitcdHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZztcbitcbitcdC8qIFJlc3RyaWN0ZWQgdG8gcHJpdmF0ZSB0cmlnZ2Vycy4gKi9cbitcdGlmIChXQVJOX09OKCEobGVkX2NkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IExFRF9UUklHX0hXX0NIQU5HRUQpIHx8XG4rXHRcdCAgICAhbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyIHx8ICFsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX3R5cGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzY29wZWRfZ3VhcmQocndzZW1fcmVhZCwgXHUwMDI2dHJpZ2dlcnNfbGlzdF9sb2NrKSB7XG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkodHJpZywgXHUwMDI2dHJpZ2dlcl9saXN0LCBuZXh0X3RyaWcpIHtcbitcdFx0XHRpZiAodHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAhc3RyY21wKHRyaWctXHUwMDNlbmFtZSwgbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyKSkge1xuK1x0XHRcdFx0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4rXG4rXHRcdFx0XHRsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24obGVkX2NkZXYsIGFjdGl2YXRlLCB0cmlnKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdGRldl9lcnIobGVkX2NkZXYtXHUwMDNlZGV2LFxuK1x0XHRcIiVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXFxuXCIsXG4rXHRcdF9fZnVuY19fLCBsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKTtcbisjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuK1xuIC8qIFNpbXBsZSBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi9cbiBcbiB2b2lkIGxlZF90cmlnZ2VyX2V2ZW50KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcbmluZGV4IDE4NDRkMGNkNWY1Mjg0Li42ZGI4M2QwMTUyNzc1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xuKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jXG5AQCAtODUsMTIgKzg1LDE4IEBAIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiBcdHJldHVybiBjcm9zX2VjX2xlZF9zZW5kX2NtZChwcml2LVx1MDAzZWNyb3NfZWMsIFx1MDAyNmFyZyk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGNyb3NfZWNfbGVkX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgY3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgY3Jvc19lY19sZWRfdHJpZ2dlciA9IHtcbiBcdC5uYW1lID0gXCJjaHJvbWVvcy1hdXRvXCIsXG4gXHQudHJpZ2dlcl90eXBlID0gXHUwMDI2Y3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlLFxuIFx0LmFjdGl2YXRlID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZSxcbitcdC5vZmZsb2FkZWQgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xuaW5kZXggZWQ2YTQ3YmJiNDRmOWMuLjMyZDQwZDE3NmQzZjExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jXG5AQCAtMTk1LDEwICsxOTUsMTYgQEAgc3RhdGljIHZvaWQgb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldilcbiBcdFx0XHRlcnIpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgb21uaWFfaHdfdHJpZ2dlciA9IHtcbiBcdC5uYW1lXHRcdD0gXCJvbW5pYS1tY3VcIixcbiBcdC5hY3RpdmF0ZVx0PSBvbW5pYV9od3RyaWdfYWN0aXZhdGUsXG4gXHQuZGVhY3RpdmF0ZVx0PSBvbW5pYV9od3RyaWdfZGVhY3RpdmF0ZSxcbitcdC5vZmZsb2FkZWRcdD0gb21uaWFfaHd0cmlnX29mZmxvYWRlZCxcbiBcdC50cmlnZ2VyX3R5cGVcdD0gXHUwMDI2b21uaWFfaHdfdHJpZ2dlcl90eXBlLFxuIH07XG4gXG5AQCAtMjUxLDYgKzI1Nyw3IEBAIHN0YXRpYyBpbnQgb21uaWFfbGVkX3JlZ2lzdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBvbW5pYV9sZWQgKmxlZCxcbiBcdCAqIGJ5IExFRCBjbGFzcyBmcm9tIHRoZSBsaW51eCxkZWZhdWx0LXRyaWdnZXIgcHJvcGVydHkuXG4gXHQgKi9cbiBcdGNkZXYtXHUwMDNlZGVmYXVsdF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lO1xuK1x0Y2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBvbW5pYV9od190cmlnZ2VyLm5hbWU7XG4gXG4gXHQvKiBQdXQgdGhlIExFRCBpbnRvIHNvZnR3YXJlIG1vZGUgKi9cbiBcdHJldCA9IG9tbmlhX2NtZF93cml0ZV91OChjbGllbnQsIE9NTklBX0NNRF9MRURfTU9ERSwgT01OSUFfQ01EX0xFRF9NT0RFX0xFRChsZWQtXHUwMDNlcmVnKSB8XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMuaCBiL2RyaXZlcnMvbGVkcy9sZWRzLmhcbmluZGV4IGJlZTQ2NjUxZTA2OGY3Li5iMDhhMjg5Mzk3ZTQ2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLmhcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLmhcbkBAIC0yNyw2ICsyNyw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsXG4gXHRcdFx0bG9mZl90IHBvcywgc2l6ZV90IGNvdW50KTtcbitzc2l6ZV90IHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7XG4gXG4gZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbGVkc19saXN0X2xvY2s7XG4gZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbGVkc19saXN0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnXG5pbmRleCBjMTEyODJhNzRiNWFjMy4uNzk4MTIyMTU0MDQ5YjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnXG4rKysgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnXG5AQCAtOSw2ICs5LDE1IEBAIG1lbnVjb25maWcgTEVEU19UUklHR0VSU1xuIFxuIGlmIExFRFNfVFJJR0dFUlNcbiBcbitjb25maWcgTEVEU19UUklHR0VSU19IV19DSEFOR0VEXG4rXHRib29sIFwiTEVEIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb24gc3VwcG9ydFwiXG4rXHRoZWxwXG4rXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgaGFyZHdhcmUgaW5pdGlhdGVkIGhhcmR3YXJlIGNvbnRyb2xcbitcdCAgdHJhbnNpdGlvbnMsIHdoZXJlIHRoZSBMRUQgaGFyZHdhcmUgYXV0b25vbW91c2x5IHN3aXRjaGVzIGJldHdlZW5cbitcdCAgXCJub25lXCIgKGkuZS4sIG5vIHRyaWdnZXIpIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyLlxuK1xuK1x0ICBTZWUgRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0IGZvciBkZXRhaWxzLlxuK1xuIGNvbmZpZyBMRURTX1RSSUdHRVJfVElNRVJcbiBcdHRyaXN0YXRlIFwiTEVEIFRpbWVyIFRyaWdnZXJcIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG5pbmRleCA2NGMwNzhlOTk3ZjI4YS4uYTI2MTA5Y2E0YjFjOWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG4rKysgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG5AQCAtNzU0LDEwICs3NTQsMTggQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3RyaWdfZGVhY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiBcdGtmcmVlKHRyaWdnZXJfZGF0YSk7XG4gfVxuIFxuK3N0YXRpYyBib29sIG5ldGRldl90cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRzdHJ1Y3QgbGVkX25ldGRldl9kYXRhICp0cmlnZ2VyX2RhdGEgPSBsZWRfZ2V0X3RyaWdnZXJfZGF0YShsZWRfY2Rldik7XG4rXG4rXHRyZXR1cm4gdHJpZ2dlcl9kYXRhLVx1MDAzZWh3X2NvbnRyb2w7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgbmV0ZGV2X2xlZF90cmlnZ2VyID0ge1xuIFx0Lm5hbWUgPSBcIm5ldGRldlwiLFxuIFx0LmFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfYWN0aXZhdGUsXG4gXHQuZGVhY3RpdmF0ZSA9IG5ldGRldl90cmlnX2RlYWN0aXZhdGUsXG4rXHQub2ZmbG9hZGVkID0gbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkLFxuIFx0Lmdyb3VwcyA9IG5ldGRldl90cmlnX2dyb3VwcyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdcbmluZGV4IDQ0NDNmNDBlZjhhYTdlLi5lOTJiMWU5MDA3OTUxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnXG4rKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xuQEAgLTE2LDYgKzE2LDcgQEAgY29uZmlnIElERUFQQURfTEFQVE9QXG4gXHRzZWxlY3QgSU5QVVRfU1BBUlNFS01BUFxuIFx0c2VsZWN0IE5FV19MRURTXG4gXHRzZWxlY3QgTEVEU19DTEFTU1xuK1x0c2VsZWN0IExFRFNfVFJJR0dFUlNcbiBcdGhlbHBcbiBcdCAgVGhpcyBpcyBhIGRyaXZlciBmb3IgTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MgY29udGFpbnMgZHJpdmVycyBmb3JcbiBcdCAgcmZraWxsIHN3aXRjaCwgaG90a2V5LCBmYW4gY29udHJvbCBhbmQgYmFja2xpZ2h0IGNvbnRyb2wuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xuaW5kZXggNGZiYzkwNGYxZmMzOTAuLjI1M2QyOTYyYjkyNzYyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmNcbisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXG5AQCAtOSw2ICs5LDcgQEBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwiOiBcIiBmbXRcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tsaWdodC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG5AQCAtMjUsNyArMjYsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ppZmZpZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbG9ja2RlcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9wcm9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wb3dlcl9zdXBwbHkuaFx1MDAzZVxuQEAgLTEzNCwxMCArMTM3LDMxIEBAIGVudW0ge1xuIH07XG4gXG4gLypcbi0gKiBUaGVzZSBjb3JyZXNwb25kIHRvIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIHN0YXRlcyAtIDFcbi0gKiBGdXR1cmUga2V5Ym9hcmQgdHlwZXMgbWF5IG5lZWQgYSBuZXcgc3lzdGVtLCBpZiB0aGVyZSdzIGEgY29sbGlzaW9uXG4tICogS0JEX0JMX1RSSVNUQVRFX0FVVE8gaGFzIG5vIHdheSB0byByZXBvcnQgb3Igc2V0IHRoZSBhdXRvIHN0YXRlXG4tICogc28gaXQgZWZmZWN0aXZlbHkgaGFzIDMgc3RhdGVzLCBidXQgbmVlZHMgdG8gaGFuZGxlIDRcbisgKiBUaGUgZW51bWVyYXRpb24gaGFzIHR3byBwdXJwb3NlczpcbisgKiAgIC0gYXMgYW4gaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYWxsIGtub3duIHR5cGVzIG9mIGtleWJvYXJkIGJhY2tsaWdodFxuKyAqICAgLSBhcyBhIG1hbmRhdG9yeSBwYXJhbWV0ZXIgb2YgdGhlIEtCTEMgY29tbWFuZFxuKyAqXG4rICogRm9yIGVhY2ggdHlwZSwgdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgdmFsdWVzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLStcbisgKiB8ICAgICAgSGFyZHdhcmUgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8ICAgIDMgfFxuKyAqIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLStcbisgKiB8IEtCRF9CTF9TVEFOREFSRCAgICAgICAgICB8ICAgICAgb2ZmIHwgIG9uIHwgIE4vQSB8ICBOL0EgfFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXG4rICogfCBLQkRfQkxfVFJJU1RBVEUgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfCAgTi9BIHxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xuKyAqIHwgS0JEX0JMX1RSSVNUQVRFX0FVVE8gICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgYXV0byB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLStcbisgKlxuKyAqIFdlIG1hcCBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyBmb3IgS0JEX0JMX1RSSVNUQVRFX0FVVE8gYXMgZm9sbG93czpcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rXG4rICogfCAgTEVEIGNsYXNzZGV2IGJyaWdodG5lc3MgfCAgICAgICAgMCB8ICAgMSB8ICAgIDIgfFxuKyAqIHwgT3BlcmF0aW9uICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rXG4rICogfCBSZWFkICAgICAgICAgICAgICAgICAgICAgfCBvZmYvYXV0byB8IGxvdyB8IGhpZ2ggfFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLStcbisgKiB8IFdyaXRlICAgICAgICAgICAgICAgICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tK1xuICAqL1xuIGVudW0ge1xuIFx0S0JEX0JMX1NUQU5EQVJEICAgICAgPSAxLFxuQEAgLTE0NSw2ICsxNjksOCBAQCBlbnVtIHtcbiBcdEtCRF9CTF9UUklTVEFURV9BVVRPID0gMyxcbiB9O1xuIFxuKyNkZWZpbmUgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTXHQzXG4rXG4gI2RlZmluZSBLQkRfQkxfUVVFUllfVFlQRVx0XHQweDFcbiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9UWVBFXHRcdDB4NVxuICNkZWZpbmUgS0JEX0JMX1RSSVNUQVRFX0FVVE9fVFlQRVx0MHg3XG5AQCAtMjAzLDcgKzIyOSw5IEBAIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUge1xuIFx0XHRib29sIGluaXRpYWxpemVkO1xuIFx0XHRpbnQgdHlwZTtcbiBcdFx0c3RydWN0IGxlZF9jbGFzc2RldiBsZWQ7XG4tXHRcdHVuc2lnbmVkIGludCBsYXN0X2JyaWdodG5lc3M7XG4rXHRcdGF0b21pY190IGxhc3RfaHdfYnJpZ2h0bmVzcztcbitcbitcdFx0c3RydWN0IG11dGV4IG5vdGlmX211dGV4OyAvKiBwcm90ZWN0cyBub3RpZmljYXRpb25zICovXG4gXHR9IGtiZF9ibDtcbiBcdHN0cnVjdCB7XG4gXHRcdGJvb2wgaW5pdGlhbGl6ZWQ7XG5AQCAtMTU5Miw3ICsxNjIwLDI0IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUoaW50IHR5cGUpXG4gXHRyZXR1cm4gKHR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFKSB8fCAodHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2Uoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgaW50IGh3X2JyaWdodG5lc3MpXG4re1xuK1x0LyogT2ZmLCBsb3cgb3IgaGlnaCAqL1xuK1x0aWYgKGh3X2JyaWdodG5lc3MgXHUwMDNjPSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4rXHRcdHJldHVybiBod19icmlnaHRuZXNzO1xuK1xuK1x0LyogQXV0byAoY29udHJvbGxlZCBieSBFQyBhY2NvcmRpbmcgdG8gQUxTKSwgcmVwb3J0IGFzIG9mZiAqL1xuK1x0aWYgKHByaXYtXHUwMDNla2JkX2JsLnR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8gXHUwMDI2XHUwMDI2XG4rXHQgICAgaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogVW5rbm93biB2YWx1ZSAqL1xuK1x0ZGV2X3dhcm4oXHUwMDI2cHJpdi1cdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXHUwMDNlZGV2LFxuK1x0XHQgXCJVbmtub3duIGtleWJvYXJkIGJhY2tsaWdodCB2YWx1ZTogJWRcIiwgaHdfYnJpZ2h0bmVzcyk7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsdWU7XG4gXHRpbnQgZXJyO1xuQEAgLTE2MDYsMjEgKzE2NTEsNyBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcbi1cdFx0LyogQ29udmVydCByZXR1cm5lZCB2YWx1ZSB0byBicmlnaHRuZXNzIGxldmVsICovXG4tXHRcdHZhbHVlID0gRklFTERfR0VUKEtCRF9CTF9HRVRfQlJJR0hUTkVTUywgdmFsdWUpO1xuLVxuLVx0XHQvKiBPZmYsIGxvdyBvciBoaWdoICovXG4tXHRcdGlmICh2YWx1ZSBcdTAwM2M9IHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcbi1cdFx0XHRyZXR1cm4gdmFsdWU7XG4tXG4tXHRcdC8qIEF1dG8sIHJlcG9ydCBhcyBvZmYgKi9cbi1cdFx0aWYgKHZhbHVlID09IHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyArIDEpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXG4tXHRcdC8qIFVua25vd24gdmFsdWUgKi9cbi1cdFx0ZGV2X3dhcm4oXHUwMDI2cHJpdi1cdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXHUwMDNlZGV2LFxuLVx0XHRcdCBcIlVua25vd24ga2V5Ym9hcmQgYmFja2xpZ2h0IHZhbHVlOiAlbHVcIiwgdmFsdWUpO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0cmV0dXJuIEZJRUxEX0dFVChLQkRfQkxfR0VUX0JSSUdIVE5FU1MsIHZhbHVlKTtcbiBcdH1cbiBcbiBcdGVyciA9IGV2YWxfaGFscyhwcml2LVx1MDAzZWFkZXYtXHUwMDNlaGFuZGxlLCBcdTAwMjZ2YWx1ZSk7XG5AQCAtMTYzMCw2ICsxNjYxLDE2IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiBcdHJldHVybiAhIXRlc3RfYml0KEhBTFNfS0JEX0JMX1NUQVRFX0JJVCwgXHUwMDI2dmFsdWUpO1xuIH1cbiBcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4re1xuK1x0aW50IGh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTtcbitcbitcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gaHdfYnJpZ2h0bmVzcztcbitcbitcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpO1xuK31cbitcbiBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB7XG4gXHRzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTtcbkBAIC0xNjM3LDYyICsxNjc4LDEyMyBAQCBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldChzdHJ1Y3QgbGVkX2NsYVxuIFx0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBicmlnaHRuZXNzKVxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgaW50IGh3X2JyaWdodG5lc3MpXG4ge1xuLVx0aW50IGVycjtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsdWU7XG4gXHRpbnQgdHlwZSA9IHByaXYtXHUwMDNla2JkX2JsLnR5cGU7XG4rXHRpbnQgZXJyO1xuIFxuIFx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7XG4tXHRcdGlmIChicmlnaHRuZXNzIFx1MDAzZSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGJyaWdodG5lc3MpIHxcbitcdFx0dmFsdWUgPSBGSUVMRF9QUkVQKEtCRF9CTF9TRVRfQlJJR0hUTkVTUywgaHdfYnJpZ2h0bmVzcykgfFxuIFx0XHRcdEZJRUxEX1BSRVAoS0JEX0JMX0NPTU1BTkRfVFlQRSwgdHlwZSkgfFxuIFx0XHRcdEtCRF9CTF9DT01NQU5EX1NFVDtcbiBcdFx0ZXJyID0gZXhlY19rYmxjKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIHZhbHVlKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGVyciA9IGV4ZWNfc2Fscyhwcml2LVx1MDAzZWFkZXYtXHUwMDNlaGFuZGxlLCBicmlnaHRuZXNzID8gU0FMU19LQkRfQkxfT04gOiBTQUxTX0tCRF9CTF9PRkYpO1xuK1x0XHR2YWx1ZSA9IGh3X2JyaWdodG5lc3MgPyBTQUxTX0tCRF9CTF9PTiA6IFNBTFNfS0JEX0JMX09GRjtcbitcdFx0ZXJyID0gZXhlY19zYWxzKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIHZhbHVlKTtcbiBcdH1cbi1cbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzO1xuK1x0YXRvbWljX3NldChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MsIGh3X2JyaWdodG5lc3MpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgaW50IGJyaWdodG5lc3MpXG4re1xuK1x0aWYgKGJyaWdodG5lc3MgXHUwMDNlIHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19zZXQocHJpdiwgYnJpZ2h0bmVzcyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4gXHRcdFx0XHRcdFx0ICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4ge1xuIFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG4gXG4rXHQvKlxuK1x0ICogV2hlbiBkZWluaXRpYWxpemluZzogSXQgbXVzdCBiZSB0aGUgc2lkZSBlZmZlY3Qgb2YgbGVkX2NkZXZcbitcdCAqIHVucmVnaXN0cmF0aW9uIHdoZW4gb3VyIHByaXZhdGUgdHJpZ2dlciBpcyBhY3RpdmUuIFdlJ3ZlIHNldFxuK1x0ICogTEVEX1JFVEFJTl9BVF9TSFVURE9XTiB0byByZXRhaW4gbGVkX2NkZXYgYnJpZ2h0bmVzcyBsZXZlbC5cbitcdCAqIFRvIGRvIHRoZSBzYW1lIGZvciBhdXRvIG1vZGUsIGdhdGUgY2hhbmdlcyBhbmQgcmV0dXJuIGVhcmx5LlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkoIXByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQocHJpdiwgYnJpZ2h0bmVzcyk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG4rXG4rXHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzKSA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuK1xuK1x0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUyk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbGVkX2h3X3RyaWdnZXJfdHlwZSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTtcbitcbitzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlciA9IHtcbitcdC5uYW1lID0gXCJpZGVhcGFkLWF1dG9cIixcbitcdC50cmlnZ2VyX3R5cGUgPSBcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZSxcbitcdC5hY3RpdmF0ZSA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZSxcbitcdC5vZmZsb2FkZWQgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkLFxuK307XG4rXG4rc3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQ7XG4rXG4rc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2woc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdixcbitcdFx0XHRcdFx0ICAgICBpbnQgaHdfYnJpZ2h0bmVzcywgaW50IGxhc3RfaHdfYnJpZ2h0bmVzcylcbit7XG4rXHRib29sIGh3X2NvbnRyb2wsIGxhc3RfaHdfY29udHJvbDtcbitcbitcdGlmIChwcml2LVx1MDAzZWtiZF9ibC50eXBlICE9IEtCRF9CTF9UUklTVEFURV9BVVRPKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRod19jb250cm9sID0gaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XG4rXHRsYXN0X2h3X2NvbnRyb2wgPSBsYXN0X2h3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTO1xuK1xuK1x0aWYgKGh3X2NvbnRyb2wgIT0gbGFzdF9od19jb250cm9sKVxuK1x0XHRsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLmxlZCwgaHdfY29udHJvbCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX25vdGlmeShzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIHtcbi1cdGludCBicmlnaHRuZXNzO1xuK1x0aW50IGh3X2JyaWdodG5lc3MsIGJyaWdodG5lc3MsIGxhc3RfaHdfYnJpZ2h0bmVzcztcbiBcbiBcdGlmICghcHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQpXG4gXHRcdHJldHVybjtcbiBcbi1cdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcbi1cdGlmIChicmlnaHRuZXNzIFx1MDAzYyAwKVxuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLm5vdGlmX211dGV4KTtcbitcbitcdGh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTtcbitcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoYnJpZ2h0bmVzcyA9PSBwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MpXG4rXHRicmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTtcbitcdGlmIChicmlnaHRuZXNzIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47IC8qIFJlamVjdCBpbnNhbmUgdmFsdWVzIGVhcmx5LiAqL1xuK1xuK1x0bGFzdF9od19icmlnaHRuZXNzID0gYXRvbWljX3hjaGcoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKTtcbitcdGlmIChod19icmlnaHRuZXNzID09IGxhc3RfaHdfYnJpZ2h0bmVzcylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzcztcbitcdGlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sKHByaXYsIGh3X2JyaWdodG5lc3MsIGxhc3RfaHdfYnJpZ2h0bmVzcyk7XG4gXG4gXHRsZWRfY2xhc3NkZXZfbm90aWZ5X2JyaWdodG5lc3NfaHdfY2hhbmdlZChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQsIGJyaWdodG5lc3MpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2luaXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiB7XG4tXHRpbnQgYnJpZ2h0bmVzcywgZXJyO1xuK1x0aW50IGh3X2JyaWdodG5lc3MsIGVycjtcbiBcbiBcdGlmICghcHJpdi1cdTAwM2VmZWF0dXJlcy5rYmRfYmwpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuQEAgLTE3MDAsMjggKzE4MDIsNjggQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9pbml0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4gXHRpZiAoV0FSTl9PTihwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCkpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuLVx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHByaXYtXHUwMDNla2JkX2JsLnR5cGUpKVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyO1xuLVx0ZWxzZVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAxO1xuK1x0ZXJyID0gZGV2bV9tdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldiwgXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubm90aWZfbXV0ZXgpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcbi1cdGlmIChicmlnaHRuZXNzIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gYnJpZ2h0bmVzcztcbitcdGh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTtcbitcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gaHdfYnJpZ2h0bmVzcztcbitcbitcdGF0b21pY19zZXQoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKTtcbiBcbi1cdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7XG4gXHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubmFtZSAgICAgICAgICAgICAgICAgICAgPSBcInBsYXRmb3JtOjpcIiBMRURfRlVOQ1RJT05fS0JEX0JBQ0tMSUdIVDtcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5icmlnaHRuZXNzX2dldCAgICAgICAgICA9IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0O1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQ7XG4gXHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuZmxhZ3MgICAgICAgICAgICAgICAgICAgPSBMRURfQlJJR0hUX0hXX0NIQU5HRUQgfCBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuIFxuLVx0ZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldiwgXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGVkKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4rXHRzd2l0Y2ggKHByaXYtXHUwMDNla2JkX2JsLnR5cGUpIHtcbitcdGNhc2UgS0JEX0JMX1RSSVNUQVRFX0FVVE86XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XG4gXG4rXHRcdGlmICghaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpIHtcbitcdFx0XHRkZXZfd2FybihcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgXCJDb3VsZCBub3QgcHJvdmlkZSBMRUQgdHJpZ2dlciAlcyBmb3Iga2V5Ym9hcmQgYmFja2xpZ2h0XFxuXCIsXG4rXHRcdFx0XHQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5mbGFncyAgICAgICAgICAgICB8PSBMRURfVFJJR19IV19DSEFOR0VEO1xuK1x0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuaHdfY29udHJvbF90cmlnZ2VyID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWU7XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC50cmlnZ2VyX3R5cGUgICAgICAgPSBcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTtcbitcbitcdFx0LyogSGFyZHdhcmUgcmVtZW1iZXJzIHRoZSBsYXN0IGJyaWdodG5lc3MgbGV2ZWwsIGluY2x1ZGluZyBhdXRvIG1vZGUuICovXG4rXHRcdGlmIChod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUylcbitcdFx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuZGVmYXVsdF90cmlnZ2VyID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWU7XG4rXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBLQkRfQkxfVFJJU1RBVEU6XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBLQkRfQkxfU1RBTkRBUkQ6XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0LyogVGhpcyBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBieSBpZGVhcGFkX2NoZWNrX2ZlYXR1cmVzKCkuICovXG4rXHRcdHVucmVhY2hhYmxlKCk7XG4rXHR9XG4rXG4rXHQvKiBRdWV1ZSBub3RpZmljYXRpb25zLCBhcyBrYmRfYmwuaW5pdGlhbGl6ZWQgaXMgYWJvdXQgdG8gYmUgc2V0LiAqL1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLm5vdGlmX211dGV4KTtcbitcbitcdC8qXG4rXHQgKiBTZXR0aW5nIGtiZF9ibC5pbml0aWFsaXplZCBhZnRlciBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoKSBjb3VsZCBsZWFkXG4rXHQgKiB0byByYWNlIGNvbmRpdGlvbnMgaW4gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQoKSB3aGVyZVxuK1x0ICoga2JkX2JsLmluaXRpYWxpemVkIGlzIGNoZWNrZWQsIHNvIHNldCBpdCBub3cuIEl0IGNhbiBiZSByZXZlcnRlZCBiYWNrXG4rXHQgKiBpZiB0aGUgTEVEIGNsYXNzZGV2IGZhaWxlZCB0byByZWdpc3Rlci5cbitcdCAqL1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRlcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoXHUwMDI2cHJpdi1cdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXHUwMDNlZGV2LCBcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQpO1xuK1x0aWYgKGVycilcbitcdFx0cHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX2V4aXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbkBAIC0yNTQ4LDE3ICsyNjkwLDMwIEBAIHN0YXRpYyBpbnQgX19pbml0IGlkZWFwYWRfbGFwdG9wX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuK1x0ZXJyID0gbGVkX3RyaWdnZXJfcmVnaXN0ZXIoXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTtcbitcdGlmIChlcnIpIHtcbitcdFx0cHJfd2FybihcIkZhaWxlZCB0byByZWdpc3RlciBMRUQgdHJpZ2dlciAlczogJWRcXG5cIixcbitcdFx0XHRpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZSwgZXJyKTtcbitcdH0gZWxzZSB7XG4rXHRcdGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkID0gdHJ1ZTtcbitcdH1cbitcbiBcdGVyciA9IGlkZWFwYWRfd21pX2RyaXZlcl9yZWdpc3RlcigpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBlcnJfbGVkdHJpZztcbiBcbiBcdGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2FjcGlfZHJpdmVyKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX3dtaTtcbiBcbiBcdHJldHVybiAwO1xuK1xuK2Vycl93bWk6XG4rXHRpZGVhcGFkX3dtaV9kcml2ZXJfdW5yZWdpc3RlcigpO1xuK2Vycl9sZWR0cmlnOlxuK1x0aWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKVxuK1x0XHRsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBtb2R1bGVfaW5pdChpZGVhcGFkX2xhcHRvcF9pbml0KVxuIFxuQEAgLTI1NjYsNiArMjcyMSw5IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBpZGVhcGFkX2xhcHRvcF9leGl0KHZvaWQpXG4ge1xuIFx0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbiBcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xuK1xuK1x0aWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKVxuK1x0XHRsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7XG4gfVxuIG1vZHVsZV9leGl0KGlkZWFwYWRfbGFwdG9wX2V4aXQpXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMuaFxuaW5kZXggYjE2YjgwM2NjMWFjNTEuLjE2NzU5ODk2MmI3M2VjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sZWRzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbGVkcy5oXG5AQCAtMTA5LDYgKzEwOSw3IEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYge1xuICNkZWZpbmUgTEVEX0lOSVRfREVGQVVMVF9UUklHR0VSIEJJVCgyMylcbiAjZGVmaW5lIExFRF9SRUpFQ1RfTkFNRV9DT05GTElDVCBCSVQoMjQpXG4gI2RlZmluZSBMRURfTVVMVElfQ09MT1JcdFx0QklUKDI1KVxuKyNkZWZpbmUgTEVEX1RSSUdfSFdfQ0hBTkdFRFx0QklUKDI2KVxuIFxuIFx0Lyogc2V0X2JyaWdodG5lc3Nfd29yayAvIGJsaW5rX3RpbWVyIGZsYWdzLCBhdG9taWMsIHByaXZhdGUuICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdHdvcmtfZmxhZ3M7XG5AQCAtNDg1LDYgKzQ4Niw3IEBAIHN0cnVjdCBsZWRfdHJpZ2dlciB7XG4gXHRjb25zdCBjaGFyXHQgKm5hbWU7XG4gXHRpbnRcdFx0KCphY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuIFx0dm9pZFx0XHQoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbitcdGJvb2xcdFx0KCpvZmZsb2FkZWQpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiBcbiBcdC8qIEJyaWdodG5lc3Mgc2V0IGJ5IGxlZF90cmlnZ2VyX2V2ZW50ICovXG4gXHRlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3M7XG5AQCAtNTMzLDYgKzUzNSw5IEBAIHZvaWQgbGVkX3RyaWdnZXJfYmxpbmtfb25lc2hvdChzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIsXG4gdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4gaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKTtcbiB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4rdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4rXG4rYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4gXHRcdFx0XHRcdHZvaWQgKnRyaWdnZXJfZGF0YSlcbkBAIC01ODQsNiArNTg5LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XG4rXG4rc3RhdGljIGlubGluZSBib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkICpsZWRfZ2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB7XG5AQCAtNTk4LDYgKzYxMCwxMyBAQCBsZWRfdHJpZ2dlcl9nZXRfYnJpZ2h0bmVzcyhjb25zdCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpXG4gXG4gI2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTICovXG4gXG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbit2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHRcdFx0XHQgYm9vbCBhY3RpdmF0ZSkge31cbisjZW5kaWZcbitcbiAvKiBUcmlnZ2VyIHNwZWNpZmljIGVudW0gKi9cbiBlbnVtIGxlZF90cmlnZ2VyX25ldGRldl9tb2RlcyB7XG4gXHRUUklHR0VSX05FVERFVl9MSU5LID0gMCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjUzOjU0LjMwODE0NTUyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMzU4NTE4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpcyBmb3IgTEVEIEhhcmR3YXJlIFRyaWdnZXIgVHJhbnNpdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSB0aGF0IGFpbXMgdG8gaW50cm9kdWNlIHN1cHBvcnQgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIGluIHRoZSBMRUQgc3Vic3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSXMgdGhpcyB3b3J0aCBmdXp6aW5nP1wiIExldCdzIGJyZWFrIGl0IGRvd24uIEl0IHRvdWNoZXMgYSBkZWNlbnQgbnVtYmVyIG9mIGZpbGVzLCBpbmNsdWRpbmcgdGhlIGNvcmUgTEVEIGNsYXNzZXMgKGBsZWQtY2xhc3MuY2AsIGBsZWQtdHJpZ2dlcnMuY2ApLCBzb21lIHNwZWNpZmljIHBsYXRmb3JtIGRyaXZlcnMgKGBsZWRzLWNyb3NfZWMuY2AsIGBsZWRzLXR1cnJpcy1vbW5pYS5jYCwgYGlkZWFwYWQtbGFwdG9wLmNgKSwgYW5kIGEgbmV0d29yayBkZXZpY2UgdHJpZ2dlciAoYGxlZHRyaWctbmV0ZGV2LmNgKS4gVGhhdCdzIGEgcmVhc29uYWJsZSBmb290cHJpbnQsIHdoaWNoIGdpdmVzIHVzIGEgc29saWQgYXR0YWNrIHN1cmZhY2UgdG8gdGhpbmsgYWJvdXQuXG5cblRoZSBjaGFuZ2VzIGludm9sdmUgYWRkaW5nIG5ldyBmdW5jdGlvbnMgdG8gdGhlIGNvcmUgdHJpZ2dlciBsb2dpYzogYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgLCBgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAsIGFuZCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgLiBBbHNvLCBgaWRlYXBhZC1sYXB0b3AuY2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWN0dWFsbHkgKnVzZSogdGhpcyBuZXcgZmVhdHVyZS4gUmlnaHQsIHNvIHRoaXMgY29yZSBMRUQgdHJpZ2dlciBsb2dpYyBpcyBkZWZpbml0ZWx5IGFjY2Vzc2libGUgdGhyb3VnaCBzeXNmcy4gVGhhdCdzIGEgbWFqb3IgcGx1cy4gVGhlIHBsYXRmb3JtIGRyaXZlciBpcyBhIGJpdCBvZiBhIHF1ZXN0aW9uIG1hcmsgLSBtaWdodCBiZSB0cmlja3kgdG8gdGVzdCB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlLCBidXQgdGhlIGNvcmUgc3R1ZmYgaXMgZmFpciBnYW1lLlxuXG5IYW5nIG9uLi4uIENhbiB3ZSBhY3R1YWxseSByZWFjaCBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2U/IEhtbSwgbm8sIGxvb2tzIGxpa2UgZHJpdmVycyBjYWxsIGl0IHdoZW4gaGFyZHdhcmUgc3RhdGUgY2hhbmdlcy4gQnV0IHdlICpjYW4qIGdldCB0byBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YCB2aWEgc3lzZnMsIGFuZCBgbGVkX3RyaWdnZXJfc2V0YCB2aWEgdGhlIGB0cmlnZ2VyYCBhdHRyaWJ1dGUuIE5vdywgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYC4uLnRoYXQncyBjYWxsZWQgZnJvbSBgYnJpZ2h0bmVzc19zdG9yZWAgd2hlbiB0aGUgTEVEIHN0YXRlIGlzbid0IGBMRURfT0ZGYC4gSW50ZXJlc3RpbmcuXG5cbkxldCdzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIFdoZXJlIGVsc2UgaXMgYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIGNhbGxlZD8gTG9va3MgbGlrZSBgaWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2xgIGluIGBpZGVhcGFkLWxhcHRvcC5jYC4gTGV0J3MgY29uZmlybSB3aXRoIGEgcXVpY2sgYGdyZXBgIGp1c3QgdG8gYmUgc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY2FsbCBzaXRlcywgYW5kIHdlIGNhbiBjb25maXJtIHRoYXQgd2UgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDU2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTQ6MDEuNTQ0MDAxMjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzODAwMTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdD0zNDU9ZmxhZ3MgYmVmb3JlIHJlZ2lzdGVyaW5nLiBUbyB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciBhY2NvcmRpbmdseSwgY2FsbFxcbkRvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdDozNDY6YGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIG9uIHRoZSBMRUQgY2xhc3NkZXYuXFxuRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0LTM0Ny1cXG4tLVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz00OTI9c3RhdGljIHZvaWQgbGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlLFxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTUxOS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6NTIwOnZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSlcXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNTIxLXtcXG4tLVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy01NDQtfVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzo1NDU6RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7XFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTU0Ni0jZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmM9MTc1ND1zdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMtMTc2NS1cXHRpZiAoaHdfY29udHJvbCAhPSBsYXN0X2h3X2NvbnRyb2wpXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmM6MTc2NjpcXHRcXHRsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKFxcdTAwMjZwcml2LVxcdTAwM2VrYmRfYmwubGVkLCBod19jb250cm9sKTtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYy0xNzY3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVkcy5oPTYwNj1sZWRfdHJpZ2dlcl9nZXRfYnJpZ2h0bmVzcyhjb25zdCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlZHMuaC02MTMtI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcXG5pbmNsdWRlL2xpbnV4L2xlZHMuaDo2MTQ6dm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKTtcXG5pbmNsdWRlL2xpbnV4L2xlZHMuaC02MTUtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2xlZHMuaDo2MTY6c3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuaW5jbHVkZS9saW51eC9sZWRzLmgtNjE3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBib29sIGFjdGl2YXRlKSB7fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzo1NDowNS44ODIwMDc5M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTk2NzY5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTEVEIFRyaWdnZXIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIG1hbmFnaW5nIHRob3NlIExFRCB0cmlnZ2VycyBzaG91bGQgYmUgYWNjZXNzaWJsZSB2aWEgc3lzZnMuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3Qga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIHRvIGVuYWJsZSBhbmQgdXRpbGl6ZSB0aGVtIGVmZmVjdGl2ZWx5LiBMZXQncyBzZWUuLi4gSSdsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzOiBgQ09ORklHX0xFRFNfVFJJR0dFUlNgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCBubyBkb3VidC4gVGhlbiwgSSBzdXNwZWN0IHdlJ2xsIG5lZWQgYENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgIGZvciBzcGVjaWZpYyBoYXJkd2FyZS1yZWxhdGVkIGNoYW5nZXMgYXMgdGhlIG5hbWUgaW1wbGllcywgYW5kIG9mIGNvdXJzZSwgYENPTkZJR19MRURTX0NMQVNTYCBpcyBwcm9iYWJseSBhbHNvIGNyaXRpY2FsIGZvciB0aGUgZGV2aWNlIGNsYXNzIHN1cHBvcnQuXG5cblRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyIG9uIHRoZSBgSFdfQ0hBTkdFRGAgdHJpZ2dlcidzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgSSdsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIHRoZSBgZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZGV0YWlscyBmb3IgdGhhdCBwYXJ0aWN1bGFyIHRyaWdnZXIgc2hvdWxkIHJlc2lkZS4gVGhpcyBpcyB0aGUgZmFzdGVzdCByb3V0ZSB0byBjb25maXJtIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBhbnkgbnVhbmNlcyBpbiBpdHMgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDEyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTQ6MDkuOTgxNjg3NTE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjM3MTU0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnPTEwPWlmIExFRFNfVFJJR0dFUlNcXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTExLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTI6Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTMtXFx0Ym9vbCBcXFwiTEVEIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTQ6MTIuMzA1NDA3MjQ2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1NzE1MTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMRUQgVHJpZ2dlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBpcyB0aGlzIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgIHNldHRpbmcgZW5hYmxlZCBieSBkZWZhdWx0PyBObywgaXQncyBhIGJvb2wsIHNvIHRoYXQgYW5zd2VycyB0aGF0IHF1ZXN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZ2V0cyBhZGRlZCB0byBvdXIgRW5hYmxlQ29uZmlncy4gVGhhdCdzIGEga2V5IHJlcXVpcmVtZW50LlxuXG5Ob3csIHdoYXQgYWJvdXQgdGhlIGBpZGVhcGFkLWxhcHRvcC5jYCBkcml2ZXI/IEFoLCB0aGF0IHJlbGllcyBvbiBgQ09ORklHX0lERUFQQURfTEFQVE9QYC4gVGhhdCdzIGFuIHg4NiBwbGF0Zm9ybSBkcml2ZXIsIHRpZWQgdG8gQUNQSSBhbmQgc3BlY2lmaWMgaGFyZHdhcmUsIHNvIGZ1enppbmcgaXQgZGlyZWN0bHkgY291bGQgYmUgdHJpY2t5LiBJdCdzIG5vdCBnb2luZyB0byBiZSB0aGUgKmVhc2llc3QqIHRhcmdldCwgdGhhdCdzIGZvciBzdXJlLiBJIGFtIG5vdCBzZWVpbmcgYSBkaXJlY3QgcGF0aCBmb3IgZWFzaWVyIGZ1enppbmcgb2YgdGhpcyBkcml2ZXIuXG5cbkhvd2V2ZXIsIHRoZSBjb3JlIExFRCB0cmlnZ2VyIGxvZ2ljLCB0aGF0J3Mgc3RpbGwgcG90ZW50aWFsbHkgcmVhY2hhYmxlLiBXZSBtaWdodCBzdGlsbCBoYXZlIGEgc2hvdCwgZXZlbiBpZiBpdCBpcyBub3QgdGhlIGVhc2llc3QuIExldCBtZSBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIGBkcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgbGlrZWx5IGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDQ3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU0OjE2Ljk2MjU2MTI2NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ2NjA4MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM9MzQ9dHJpZ2dlcl9yZWxldmFudChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTM4LVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzozOTpzdGF0aWMgYm9vbCBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTQwLXtcXG4tLVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz01OT1ib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNjEtXFx0Z3VhcmQocndzZW1fcmVhZCkoXFx1MDAyNmxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX2xvY2spO1xcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzo2MjpcXHRyZXR1cm4gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNjMtfVxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jPTMyMT12b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTMyNC1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6MzI1OlxcdGlmIChfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy0zMjYtXFx0XFx0bGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz0zNzU9c3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTM4Ny1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6Mzg4OlxcdG9mZmxvYWRlZCA9IF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7XFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTM4OS1cXHRoaXQgPSBvZmZsb2FkZWQgfHwgKHRyaWcgXFx1MDAyNlxcdTAwMjYgIXN0cmNtcChsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLCB0cmlnLVxcdTAwM2VuYW1lKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU0OjE5LjIwOTE3NDQ4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDMzMTA3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSGFyZHdhcmUgTEVEIFRyaWdnZXIgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTEVEIHRyaWdnZXIgY29kZSwgYW5kIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMuIExldCdzIHNlZS4uLiB0aGUgb25lcyBJIG5lZWQgdG8gemVybyBpbiBvbiBhcmU6IGBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRgLCBgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAsIGBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbGAsIGB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dgLCBgbGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uYCwgYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgLCBhbmQgYF9fbGVkX3RyaWdnZXJfc2V0YC5cblxuUmlnaHQsIHRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgY29yZSBzZXQgdG8gc3RhcnQgd2l0aC4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gaGFyZHdhcmUgY29udHJvbCBhbmQgdGhlIHNvZnR3YXJlIHRyaWdnZXJzIGlzIGltcG9ydGFudC4gSSB0aGluayB0aGF0IGBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb25gIGlzIHByb2JhYmx5IHRoZSBtb3N0IGNyaXRpY2FsIHBsYWNlIHRvIGJlZ2luIHVuZGVyc3RhbmRpbmcgdGhlIHN0YXRlIHRyYW5zaXRpb25zLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMzMCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzo1NDoyMi43NTI0ODg5MzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDYzNDc3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz00ODk9RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7XFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNDkxLSNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jOjQ5MjpzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24oc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUsXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTQ5My1cXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxlZF90cmlnZ2VyICpoY190cmlnKVxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jPTUyMD12b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNTM0LVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzo1MzU6XFx0XFx0XFx0XFx0bGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKGxlZF9jZGV2LCBhY3RpdmF0ZSwgdHJpZyk7XFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTUzNi1cXHRcXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU0OjI1LjA5ODg0NjAxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzA2MDg2NTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4cGxvcmluZyBMRUQgVHJpZ2dlciBDb250cm9sKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIG1hbmlwdWxhdGUgYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIGZyb20gdXNlcnNwYWNlLCBzcGVjaWZpY2FsbHkgdG8gdHJpZ2dlciBzb21lIGludGVyZXN0aW5nIGJlaGF2aW9yLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgbm8sIGJlY2F1c2UgaXQgYXBwZWFycyB0byBiZSBwcmltYXJpbHkgY2FsbGVkIGJ5IGRyaXZlcnMuIEJ1dCB0aGVuLi4uIGhvbGQgb24sIGl0ICppcyogZXhwb3J0ZWQhIFRoYXQgb3BlbnMgYSB0aW55IHdpbmRvdy4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSBmaW5kIGEgdnVsbmVyYWJsZSBkcml2ZXIgdGhhdCBwcm92aWRlcyBhIGJhY2tkb29yP1xuXG5NeSBuZXh0IGF2ZW51ZSBvZiBhdHRhY2sgaXMgdG8gZmluZCBhIGZ1enphYmxlIGRyaXZlciB0aGF0ICptaWdodCogYmUgcmVhY2hhYmxlLiBgaWRlYXBhZC1sYXB0b3AuY2AgaXMgdGVtcHRpbmcuIEl0J3MgYW4gQUNQSSBkcml2ZXIsIGFuZCBBQ1BJIGludGVyZmFjZXMgY2FuLCBpbiB0aGVvcnksIGJlIGZ1enogdGVzdGVkLiBJdCdzIG5vdCBhIGRpcmVjdCByb3V0ZSwgSSBrbm93LCBBQ1BJIGZ1enppbmcgY2FuIGJlIGEgcGFpbiBpbiB0aGUuLi4gd2VsbCwgeW91IGdldCB0aGUgaWRlYS4gSXQncyBub3QgdGhlIGVhc2llc3QgcGF0aC5cblxuVGhlbiBJIHNoaWZ0ZWQgbXkgcGVyc3BlY3RpdmUsIHdoYXQgYWJvdXQgYSBzaW1pbGFyIGZ1bmN0aW9uIGBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbGA/IFdoZXJlIGlzIHRoYXQgY2FsbGVkPyBJIGZpbmQgaXQgaW4gYGJyaWdodG5lc3Nfc3RvcmVgIHdpdGhpbiBgbGVkLWNsYXNzLmNgLiBBaCwgdGhhdOKAmXMgaW50ZXJlc3RpbmcsIGBicmlnaHRuZXNzX3N0b3JlYCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMuIFRoYXQncyBhIGRpcmVjdCByb3V0ZSBpbnRvIHRoZSBrZXJuZWwgZnJvbSB1c2Vyc3BhY2UuIEkndmUgZ290IGEgbXVjaCBtb3JlIGFjY2Vzc2libGUgaW50ZXJmYWNlIHRoZXJlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MjUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTQ6MjkuNDA0OTM1OTAzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyMDI5OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYz00Nz1zdGF0aWMgc3NpemVfdCBicmlnaHRuZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy02Ny1cXHRlbHNlXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jOjY4OlxcdFxcdGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKGxlZF9jZGV2KTtcXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNjktXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM9MzE5PUVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZSk7XFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTMyMC1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6MzIxOnZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTMyMi17XFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMzI3LX1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6MzI4OkVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKTtcXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMzI5LVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWRzLmg9NTM3PXZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG5pbmNsdWRlL2xpbnV4L2xlZHMuaDo1Mzg6dm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuaW5jbHVkZS9saW51eC9sZWRzLmgtNTM5LVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWRzLmg9NTkxPXN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XFxuaW5jbHVkZS9saW51eC9sZWRzLmg6NTkyOnN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cXG5pbmNsdWRlL2xpbnV4L2xlZHMuaC01OTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU0OjMxLjc5Njk2OTcxOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDExMDMwNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBMRUQgVHJpZ2dlciBDb250cm9sIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBtYXAgb3V0IHRoZSBjb250cm9sIGZsb3cgZm9yIHRoZXNlIExFRCB0cmlnZ2Vycy4gSXQgc2VlbXMgdGhhdCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBHb29kLCB0aGF0J3MgYSBrZXkgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZC4gVGhlbiwgdGhlIGB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dgIGZ1bmN0aW9uLCB3aGljaCBkZWFscyB3aXRoIHRoZSBzeXNmcyBpbnRlcmZhY2UgdGhyb3VnaCBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAsIGlzIGFsc28gZGVmaW5pdGVseSByZWFjaGFibGUuIE5vdywgdGhhdCdzIGludGVyZXN0aW5nIGJlY2F1c2UgYF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAgaGFzIHR3byBkaWZmZXJlbnQgcGF0aHMgdG8gaXQsIHRocm91Z2ggdGhlIGNhbGxzIHRvIGB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dgIGFuZCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgLiBUaGF0J3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCwgYW5kIHRoZSBjb25uZWN0aW9uIG1ha2VzIHNlbnNlLiAgQW5kIHRoZW4gZmluYWxseSwgdGhlcmUncyBgX19sZWRfdHJpZ2dlcl9zZXRgLCB0aGF0J3MgcmVhY2hhYmxlIHRocm91Z2ggYGxlZF90cmlnZ2VyX3NldGAuIFRoaXMgbGFzdCBvbmUgaXMgdWx0aW1hdGVseSBjYWxsZWQgZnJvbSBgbGVkX3RyaWdnZXJfd3JpdGVgLCB3aGljaCBpdHNlbGYgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzeXNmcyBgdHJpZ2dlcmAgYXR0cmlidXRlLiBTbywgaWYgYSB1c2VyIHdyaXRlcyB0byB0aGF0IHN5c2ZzIGVudHJ5LCB3ZSdyZSB1bHRpbWF0ZWx5IGhpdHRpbmcgYF9fbGVkX3RyaWdnZXJfc2V0YC5cblxuQWxyaWdodCwgSSB0aGluayBJJ3ZlIGdvdCBhIGRlY2VudCBncmFzcCBvbiB0aGlzLiBOb3cgbGV0J3MgZGlnIGludG8gYGxlZF90cmlnZ2VyX3dyaXRlYC4gVGhhdCdzIHdoZXJlIHRoZSBtYWdpYyByZWFsbHkgc2VlbXMgdG8gYmUgaGFwcGVuaW5nIHdpdGggdGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODE5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU0OjM1LjgwODAwMjA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTA0OTI2MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxlZF90cmlnZ2VyX3dyaXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYz05MT1zdGF0aWMgREVWSUNFX0FUVFJfUk8obWF4X2JyaWdodG5lc3MpO1xcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTkzLSNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo5NDpzdGF0aWMgY29uc3QgQklOX0FUVFIodHJpZ2dlciwgMDY0NCwgbGVkX3RyaWdnZXJfcmVhZCwgbGVkX3RyaWdnZXJfd3JpdGUsIDApO1xcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy05NS1zdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGxlZF90cmlnZ2VyX2Jpbl9hdHRyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jPTY0PUVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQpO1xcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy02NS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6NjY6c3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTY3LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMTEwLX1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6MTExOkVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3dyaXRlKTtcXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMTEyLVxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZHMuaD0yND1zc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZHMuaC0yNi1cXHRcXHRcXHRsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpO1xcbmRyaXZlcnMvbGVkcy9sZWRzLmg6Mjc6c3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXFxuZHJpdmVycy9sZWRzL2xlZHMuaC0yOC1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTQ6MzcuOTEyOTMyNjQ1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2OTQ2NjUyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTEVEIFRyaWdnZXIgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbnBvaW50ZWQgdGhlIGNvcmUgTEVEIHRyaWdnZXIgbG9naWMgYXMgYSBwcm9taXNpbmcgdGFyZ2V0IGZvciBmdXp6aW5nLiBEZWZpbml0ZWx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGluLiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgYXJlIGBMRURTX0NMQVNTYCwgYExFRFNfVFJJR0dFUlNgLCBhbmQgYExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAuIFRoYXQgbGFzdCBvbmUgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGFzIGl0IGhhbmRsZXMgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbnMuXG5cbldhaXQsIEkgc2VlIHRoYXQgYGlkZWFwYWQtbGFwdG9wLmNgIGlzIGFsc28gbW9kaWZpZWQsIHdoaWNoIG1ha2VzIG1lIHdvbmRlciBpZiB0aGF0IGRyaXZlciBpcyBhbHNvIHdvcnRoIGZ1enppbmcuIEl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHRob3VnaCwgYW5kIFN5emthbGxlciBpc24ndCB0eXBpY2FsbHkgZ3JlYXQgYXQgZnV6emluZyBBQ1BJIHBsYXRmb3JtIGRyaXZlcnMgdW5sZXNzIHRoZXJlJ3Mgc3BlY2lmaWMgc3VwcG9ydC4gQnV0IHRoYXQgY29yZSBMRUQgdHJpZ2dlciBsb2dpYyBpcyBtb3JlIGdlbmVyaWMsIHNvIEknbGwgcHJpb3JpdGl6ZSB0aGF0IGZvciBub3cuIEknbGwgZm9jdXMgb24gYExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAgdG8gZW5zdXJlIGhhcmR3YXJlLWluaXRpYXRlZCB0cmFuc2l0aW9uIHN1cHBvcnQuXG5cbk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUgbW9zdCBpbXBvcnRhbnQgdG8gZm9jdXMgb24/IExldCdzIHNlZTogYF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAsIGBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYCwgYF9fbGVkX3RyaWdnZXJfc2V0YCwgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCwgYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AsIGBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb25gLCBhbmQgYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgLiBUaGVzZSBsb29rIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnRzIGFuZCBjb250cm9sIGZsb3cgZnVuY3Rpb25zLlxuXG5Pa2F5LCBJIG5lZWQgdG8ga25vdyBpZiBgbGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uYCBpcyByZWFjaGFibGUgd2l0aG91dCBgaWRlYXBhZC1sYXB0b3AuY2AuIEl0J3Mgb25seSBjYWxsZWQgYnkgYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgLCB3aGljaCBpcyBvbmx5IGNhbGxlZCBieSBgaWRlYXBhZC1sYXB0b3AuY2AuIEhtbSwgc28gaWYgSSB3YW50IHRvIGZ1enogYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgLCBJIG5lZWQgYGlkZWFwYWQtbGFwdG9wLmNgIG9yIGFub3RoZXIgZHJpdmVyIHRoYXQgY2FsbHMgaXQuIFNpbmNlIFN5emthbGxlciBjYW4ndCBlYXNpbHkgcmVhY2ggYGlkZWFwYWQtbGFwdG9wLmNgIGR1ZSB0byBpdHMgQUNQSSBoYXJkd2FyZSBkZXBlbmRlbmN5LCBtYXliZSBJIHNob3VsZCB0cnkgZW5hYmxpbmcgYElERUFQQURfTEFQVE9QYCBpbiB0aGUgY29uZmlncyBqdXN0IGluIGNhc2UuIEl0IG1pZ2h0IGJlIHdvcnRoIGluY2x1ZGluZywgcmlnaHQ/IExldCBtZSBjaGVjayBgZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdgIHRvIHNlZSBob3cgaXQncyBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTcwOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzo1NDo0NS42MDc1OTk5NjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDgyOTQ1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElERUFQQURfTEFQVE9QXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnLTUtXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWc6Njpjb25maWcgSURFQVBBRF9MQVBUT1BcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJMZW5vdm8gSWRlYVBhZCBMYXB0b3AgRXh0cmFzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzo1NDo0Ny45MTU5MDMwN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjE2MzY4NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEltbWVkaWF0ZSBQbGFuKipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGNvbnRpbmdlbnQgb24gYEFDUElgIGFuZCB0aGUgdW5kZXJseWluZyBgWDg2YCBhcmNoaXRlY3R1cmUuIFRoYXQncyB0aGUgZm91bmRhdGlvbiB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgSURFQVBBRF9MQVBUT1BgIGlzIGluY2x1ZGVkIHdpdGhpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgdG8gcHJvcGVybHkgZW5hYmxlIHRoZSBzeXN0ZW0uXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBgbGVkcy1jcm9zX2VjLmNgIGZpbGUuIEknbSBnb2luZyB0byBzdGFydCB0aGVyZSB0byBzZWUgaG93IHRoZSBFQyBoYW5kbGVzIHRoZSBMRURzLCBhbmQgaG9wZWZ1bGx5LCBJIGNhbiB0cmFjZSB0aGUgY29udHJvbCBmbG93IGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzIwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTQ6NTAuNTMyMjczOTkxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc0MDU1Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMRURTX0NST1NfRUNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9sZWRzL0tjb25maWc9MTg5PWNvbmZpZyBMRURTX0NSMDAxNDExNFxcbi0tXFxuZHJpdmVycy9sZWRzL0tjb25maWctMjAxLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnOjIwMjpjb25maWcgTEVEU19DUk9TX0VDXFxuZHJpdmVycy9sZWRzL0tjb25maWctMjAzLVxcdHRyaXN0YXRlIFxcXCJMRUQgU3VwcG9ydCBmb3IgQ2hyb21lT1MgRUNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU0OjUzLjIwNjMzNDc4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQyOTY3MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhIG1vZGVyYXRlbHkgZXhwZXJpZW5jZWQgZGV2ZWxvcGVyIGZhbWlsaWFyIHdpdGggZW1iZWRkZWQgc3lzdGVtczpcblxuKipDb25zaWRlcmluZyBgbGVkcy10dXJyaXMtb21uaWEuY2AqKlxuXG5SaWdodCwgc28gdGhhdCB0aG91Z2h0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGRyaXZlciBpbXBsZW1lbnRhdGlvbnMuIEknbSBsaWtlbHkgaW4gdGhlIGNvbnRleHQgb2Ygc29tZSBsb3ctbGV2ZWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24sIHByb2JhYmx5IHdpdGhpbiB0aGUgTGludXgga2VybmVsIG9yIHNvbWV0aGluZyB2ZXJ5IGNsb3NlbHkgcmVsYXRlZC4gXCJsZWRzXCIgb2J2aW91c2x5IHBvaW50cyB0byBMRUQgY29udHJvbCwgYW5kIHRoZSBcInR1cnJpcy1vbW5pYVwiIHBhcnQgaXMgdGhlIHNwZWNpZmljIHRhcmdldCBwbGF0Zm9ybSDigJMgYSBUdXJyaXMgT21uaWEgcm91dGVyLCBJIGJlbGlldmUuIFNvIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyB0aGUgTEVEcyBvbiB0aGF0IHBhcnRpY3VsYXIgZGV2aWNlLiBJJ20gcHJvYmFibHkgdGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIExFRHMgYXJlIG1hcHBlZCB0byBzcGVjaWZpYyBoYXJkd2FyZSBwaW5zLCB0aGUgY29udHJvbCByZWdpc3RlcnMgaW52b2x2ZWQsIGFuZCBob3cgdGhlIGRyaXZlciBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGludGVyZmFjZXMgZm9yIGhpZ2hlci1sZXZlbCBhcHBsaWNhdGlvbnMgKGxpa2UgdGhlIHVzZXIgaW50ZXJmYWNlKSB0byBpbnRlcmFjdCB3aXRoIHRoZW0uIEknbGwgbGlrZWx5IGJlIGdvaW5nIHRocm91Z2ggdGhlIGNvZGUgbG9va2luZyBhdCB0aGUgZnVuY3Rpb25zIGZvciBzZXR0aW5nIExFRCBzdGF0ZXMgKG9uL29mZiwgYmxpbmtpbmcsIGJyaWdodG5lc3MpLCBpbnRlcnJ1cHQgaGFuZGxpbmcgKGlmIGFueSksIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGRldmljZSdzIGhhcmR3YXJlLiBJIG1pZ2h0IGJlIGNvbnNpZGVyaW5nIG1vZGlmaWNhdGlvbnMgb3IgZGVidWdnaW5nIGEgcHJvYmxlbSB3aXRoIHRoZSBkcml2ZXIuIEknbGwgbGlrZWx5IGJlIGNoZWNraW5nIGZvciBjb3JyZWN0IGludGVycnVwdCBoYW5kbGluZywgRE1BLCBjb25jdXJyZW5jeSwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBIb3BlZnVsbHksIHRoZSBjb2RlIGlzIHdlbGwtc3RydWN0dXJlZCBhbmQgZm9sbG93cyBnb29kIGNvZGluZyBwcmFjdGljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDA3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTQ6NTcuNDQ5MzA0NTk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODIxNzU5MjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMRURTX1RVUlJJU19PTU5JQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2xlZHMvS2NvbmZpZz0yMTc9Y29uZmlnIExFRFNfRUwxNTIwMzAwMFxcbi0tXFxuZHJpdmVycy9sZWRzL0tjb25maWctMjI5LVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnOjIzMDpjb25maWcgTEVEU19UVVJSSVNfT01OSUFcXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yMzEtXFx0dHJpc3RhdGUgXFxcIkxFRCBzdXBwb3J0IGZvciBDWi5OSUMncyBUdXJyaXMgT21uaWFcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU1OjAxLjI3MTA2ODY1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc4NDE5ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGU6IGBsZWR0cmlnLW5ldGRldi5jYCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSB3aGF0J3Mgd2hhdC4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgYGxlZHRyaWctbmV0ZGV2LmNgIGZpbGUgYWdhaW4uIFNlZW1zIGxpa2UgYSBjcml0aWNhbCBwaWVjZSwgZG9lc24ndCBpdD8gSXQncyB3aGVyZSB0aGUgbmV0d29yayBkZXZpY2UgTEVEIHRyaWdnZXJpbmcgbG9naWMgcmVzaWRlcywgb2J2aW91c2x5LiBUaGUgXCJsZWR0cmlnXCIgcHJlZml4IGdpdmVzIGl0IGF3YXkuIEknbSBpbWFnaW5pbmcgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCdzIG5ldHdvcmsgc3RhY2suIE15IGV4cGVyaWVuY2UgaGFzIGJlZW4gSSBoYXZlIHNlZW4gc2ltaWxhciBjb25zdHJ1Y3RzIGhhbmRsaW5nIGludGVyZmFjZSBjaGFuZ2VzLCBwYWNrZXQgZHJvcHMsIG9yIGxpbmsgc3RhdHVzIGNoYW5nZXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1pbmQgb24gdGhlIGdlbmVyYWwgTEVEIHRyaWdnZXJpbmcgZnJhbWV3b3JrLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBoZXJlPyBIb3cgYXJlIHRoZSBuZXR3b3JrIGV2ZW50cyBob29rZWQgaW50byB0aGUgTEVEIGRyaXZlciBjYWxscz8gSSBiZXQgdGhlcmUncyBzb21lIGRldmljZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIGdvaW5nIG9uLCBkZWFsaW5nIHdpdGggTmV0bGluayBldmVudHMsIHByb2JhYmx5IHNvbWUgd29ya3F1ZXVlcyB0byBhdm9pZCBibG9ja2luZy4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgbmV0ZGV2IGV2ZW50cywgaW50ZXJmYWNlIHVwLCBpbnRlcmZhY2UgZG93biwgdHJhbnNtaXQgb3IgcmVjZWl2ZSB0cmFmZmljIGV2ZW50cyBhcmUgZmVkIGludG8gdGhpcyBhbmQgdWx0aW1hdGVseSBob3cgdGhleSBjaGFuZ2UgYW4gTEVEIHN0YXR1cy4gSSBhbnRpY2lwYXRlIHNlZWluZyBzb21lIGNsZXZlciB0cmlja3MgdG8ga2VlcCB0aGUgb3ZlcmhlYWQgbG93LCBlc3BlY2lhbGx5IGluIGhpZ2gtYmFuZHdpZHRoIHNjZW5hcmlvcy4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhlIGludGVycnVwdCBjb250ZXh0IHZlcnN1cyB0YXNrIGNvbnRleHQuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgaW50ZXJydXB0IHBhdGggZmlyc3Q7IGdldCB0aGUgbW9zdCBjcml0aWNhbCBwYXJ0IG9mIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDIzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTU6MDQuOTQ5NDkxMDgxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUzMzU2MjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMRURTX1RSSUdHRVJfTkVUREVWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc9MTI1PWNvbmZpZyBMRURTX1RSSUdHRVJfUEFOSUNcXG4tLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTMzLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTM0OmNvbmZpZyBMRURTX1RSSUdHRVJfTkVUREVWXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xMzUtXFx0dHJpc3RhdGUgXFxcIkxFRCBOZXRkZXYgVHJpZ2dlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTU6MDcuMzAyODU0NTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4MzAwNjY3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgTEVEIEhhcmR3YXJlIENvbnRyb2wgYW5kIE9mZmxvYWQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBhZGQgYExFRFNfVFJJR0dFUl9ORVRERVZgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEl0J3MgYSBmYWlybHkgZ2VuZXJpYyB0cmlnZ2VyIHRoYXQgaW1wbGVtZW50cyBgb2ZmbG9hZGVkYCwgYW5kIHRoYXQgbWFrZXMgaXQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0ZXN0aW5nIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIEknbSBhbHNvIGdvaW5nIHRvIHRocm93IGluIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgIGJlY2F1c2UgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzLiBJJ2xsIGtlZXAgYElERUFQQURfTEFQVE9QYCBhcyB3ZWxsLCBzaW5jZSB0aGF0J3MgYW5vdGhlciBpbXBvcnRhbnQgb25lLlxuXG5JIGJyaWVmbHkgY29uc2lkZXJlZCBhZGRpbmcgYExFRFNfQ0xBU1NgLCBgTEVEU19UUklHR0VSU2AsIGBMRURTX0NST1NfRUNgIGFuZCBgTEVEU19UVVJSSVNfT01OSUFgIGFzIHdlbGwsIGJ1dCBgTEVEU19DTEFTU2AgYW5kIGBMRURTX1RSSUdHRVJTYCBhcmUgcHJvYmFibHkgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQuIGBMRURTX0NST1NfRUNgIGRlcGVuZHMgb24gYENST1NfRUNgLCBhbmQgYExFRFNfVFVSUklTX09NTklBYCBoYXMgbW9yZSBkZXBlbmRlbmNpZXMsIHNvIGBMRURTX1RSSUdHRVJfTkVUREVWYCBhbG9uZyB3aXRoIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgIHNlZW1zIGxpa2UgYSBnb29kIGJhbGFuY2UgZm9yIHRoZSBtb21lbnQuIExldCdzIHNlZSBpZiB0aGF0J3MgZW5vdWdoIHRvIGdldCBhdCB0aGUgY29yZSBpc3N1ZS5cblxuVGhlbiB0aGVyZSdzIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBJJ3ZlIGdvbmUgdGhyb3VnaCBhbmQgY29uZmlybWVkIHRoYXQgc3RhdGljIGZ1bmN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHN5emthbGxlci4gSSdsbCBuZWVkIHRvIGluY2x1ZGU6XG5cbiogICBgX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYFxuKiAgIGBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYFxuKiAgIGBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbGBcbiogICBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YFxuKiAgIGBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb25gXG4qICAgYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgXG4qICAgYF9fbGVkX3RyaWdnZXJfc2V0YFxuKiAgIGBuZXRkZXZfdHJpZ19vZmZsb2FkZWRgXG5cbkkgbG9va2VkIGF0IHRoZSBjb2RlIHRvIHNlZSB3aGVyZSB0aGVzZSBnZXQgdXNlZC4gYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCBpcyBjYWxsZWQgd2hlbiB3cml0aW5nIHRvIGAvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL2JyaWdodG5lc3NgIHdoZW4gdGhlIHN0YXRlIGlzbid0IExFRF9PRkYsIHdoaWNoIG1lYW5zIHRoZSBmdXp6aW5nIHdpbGwgdHJpZ2dlciB0aGUgY29kZSBwYXRoLiBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YCBpcyBjYWxsZWQgb24gcmVhZGluZyBgL3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS90cmlnZ2VyX21heV9vZmZsb2FkYCwgd2hpY2ggaXMgYW5vdGhlciBpbXBvcnRhbnQgc3lzZnMgaW50ZXJhY3Rpb24uIGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCBpcyBjYWxsZWQgYnkgZHJpdmVycyBhbmQgdHJpZ2dlcnMgYSBzdGF0ZSB0cmFuc2l0aW9uLCBpbXBvcnRhbnQgZm9yIHJlYWNoaW5nIHRoZSBjaGFuZ2VkIGxvZ2ljLlxuXG5VbHRpbWF0ZWx5LCB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbGl0eSB0byB0aGUgTEVEIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIGFuZCBvZmZsb2FkIHN0YXRlIHJlcG9ydGluZy4gVGhleSdyZSBhY2Nlc3NpYmxlIHZpYSBzeXNmcyBpbnRlcmFjdGlvbnMgYW5kIGRyaXZlciBub3RpZmljYXRpb25zLlxuXG5JJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAgYmVjYXVzZSB0aGlzIHBhdGNoIGludHJvZHVjZXMgc2lnbmlmaWNhbnQgbmV3IGNvZGUgcGF0aHMgcmVsYXRlZCB0byBoYXJkd2FyZSBjb250cm9sIGFuZCBvZmZsb2FkLCB3aGljaCBhcmUgbGlrZWx5IHRvIGhhdmUgc2VjdXJpdHkgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg0NywiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU1OjIwLjEzMjkyMzM2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzM2NTU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTEVEU19UUklHR0VSU19IV19DSEFOR0VEXCIsXG4gICAgXCJMRURTX1RSSUdHRVJfTkVUREVWXCIsXG4gICAgXCJJREVBUEFEX0xBUFRPUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZFwiLFxuICAgIFwibGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZFwiLFxuICAgIFwibGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xcIixcbiAgICBcInRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd1wiLFxuICAgIFwibGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uXCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkXCIsXG4gICAgXCJfX2xlZF90cmlnZ2VyX3NldFwiLFxuICAgIFwibmV0ZGV2X3RyaWdfb2ZmbG9hZGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgTEVEIHRyaWdnZXIgc3Vic3lzdGVtLCBhZGRpbmcgc3VwcG9ydCBmb3IgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbnMgYW5kIG9mZmxvYWQgc3RhdGUgcmVwb3J0aW5nLiBUaGVzZSBuZXcgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhdHRyaWJ1dGVzIChgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAsIGBicmlnaHRuZXNzYCwgYHRyaWdnZXJgKSBhbmQgZHJpdmVyIG5vdGlmaWNhdGlvbnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgc3RhdGUgdHJhbnNpdGlvbiBsb2dpYyBhbmQgb2ZmbG9hZCBxdWVyaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFwiLFxuICAgIFwiTEVEU19UUklHR0VSX05FVERFVlwiLFxuICAgIFwiSURFQVBBRF9MQVBUT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRcIixcbiAgICBcImxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRcIixcbiAgICBcImxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sXCIsXG4gICAgXCJ0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dcIixcbiAgICBcImxlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvblwiLFxuICAgIFwibGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZFwiLFxuICAgIFwiX19sZWRfdHJpZ2dlcl9zZXRcIixcbiAgICBcIm5ldGRldl90cmlnX29mZmxvYWRlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIExFRCB0cmlnZ2VyIHN1YnN5c3RlbSwgYWRkaW5nIHN1cHBvcnQgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIGFuZCBvZmZsb2FkIHN0YXRlIHJlcG9ydGluZy4gVGhlc2UgbmV3IGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYXR0cmlidXRlcyAoYHRyaWdnZXJfbWF5X29mZmxvYWRgLCBgYnJpZ2h0bmVzc2AsIGB0cmlnZ2VyYCkgYW5kIGRyaXZlciBub3RpZmljYXRpb25zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IHN0YXRlIHRyYW5zaXRpb24gbG9naWMgYW5kIG9mZmxvYWQgcXVlcmllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow52qcf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-18 17:26:28 +0000 UTC FinishedAt: 2026-07-18 17:55:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LEDS_TRIGGERS_HW_CHANGED", "LEDS_TRIGGER_NETDEV", "IDEAPAD_LAPTOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LEDS_TRIGGERS_HW_CHANGED", "LEDS_TRIGGER_NETDEV", "IDEAPAD_LAPTOP" ], "series_id": "ec597fb5-87fc-4e6d-a794-d030803ce037" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__led_trigger_is_hw_controlled", "led_trigger_is_hw_controlled", "led_trigger_remove_hw_control", "trigger_may_offload_show", "led_trigger_do_hw_control_transition", "led_trigger_notify_hw_control_changed", "__led_trigger_set", "netdev_trig_offloaded" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCYjMzQ7LAogICAgJiMzNDtMRURTX1RSSUdHRVJfTkVUREVWJiMzNDssCiAgICAmIzM0O0lERUFQQURfTEFQVE9QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQmIzM0OywKICAgICYjMzQ7bGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wmIzM0OywKICAgICYjMzQ7dHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93JiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbiYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDssCiAgICAmIzM0O19fbGVkX3RyaWdnZXJfc2V0JiMzNDssCiAgICAmIzM0O25ldGRldl90cmlnX29mZmxvYWRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBMRUQgdHJpZ2dlciBzdWJzeXN0ZW0sIGFkZGluZyBzdXBwb3J0IGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyBhbmQgb2ZmbG9hZCBzdGF0ZSByZXBvcnRpbmcuIFRoZXNlIG5ldyBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGF0dHJpYnV0ZXMgKGB0cmlnZ2VyX21heV9vZmZsb2FkYCwgYGJyaWdodG5lc3NgLCBgdHJpZ2dlcmApIGFuZCBkcml2ZXIgbm90aWZpY2F0aW9ucy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGxvZ2ljIGFuZCBvZmZsb2FkIHF1ZXJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZGU4ZjBiM2IzMjkzNTQyNjFhMTU1NGQ2OTRlZDNiYjExNTc4MTRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMTc6NTM6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZFxuaW5kZXggZDRjOTE4Y2MxMWExMjcuLjdkYzk1ZjdhMzUwNWNlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWRcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkXG5AQCAtNzgsNiAmIzQzOzc4LDMxIEBAIERlc2NyaXB0aW9uOlxuIFx0XHQod2hpY2ggd291bGQgb2Z0ZW4gYmUgY29uZmlndXJlZCBpbiB0aGUgZGV2aWNlIHRyZWUgZm9yIHRoZVxuIFx0XHRoYXJkd2FyZSkuXG4gXG4mIzQzO1doYXQ6XHRcdC9zeXMvY2xhc3MvbGVkcy9cdTAwM2NsZWRcdTAwM2UvdHJpZ2dlcl9tYXlfb2ZmbG9hZFxuJiM0MztEYXRlOlx0XHRKdWx5IDIwMjZcbiYjNDM7S2VybmVsVmVyc2lvbjpcdDcuM1xuJiM0MztDb250YWN0Olx0bGludXgtbGVkc0B2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7RGVzY3JpcHRpb246XG4mIzQzO1x0XHROYW1lcyBhbmQgc3RhdGVzIG9mIHRyaWdnZXJzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCB0byBoYXJkd2FyZS5cbiYjNDM7XHRcdFN1Y2ggdHJpZ2dlcnMgYXJlIGFsc28gY2FsbGVkIFwmIzM0O2hhcmR3YXJlIGNvbnRyb2wgdHJpZ2dlclwmIzM0OyBpbiBzb21lXG4mIzQzO1x0XHRjb250ZXh0LlxuJiM0MztcbiYjNDM7XHRcdE9ubHkgZXhpc3RzIHdoZW4gdGhlIExFRCBzdXBwb3J0cyB0cmlnZ2VyIG9mZmxvYWQuXG4mIzQzO1xuJiM0MztcdFx0UmVhZGluZyB0aGlzIGZpbGUgcmV0dXJucyBhIGxpc3Qgb2YgdHJpZ2dlcnMgdGhhdCBhcmUgY2FwYWJsZSB0b1xuJiM0MztcdFx0YmUgb2ZmbG9hZGVkLiBUaGUgb3B0aW9uYWwgYnJhY2tldHMgYXJvdW5kIHRoZSB0cmlnZ2VyIG5hbWVcbiYjNDM7XHRcdGluZGljYXRlIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCB0cmlnZ2VyOlxuJiM0MztcbiYjNDM7XHRcdC0gYGZvb190cmlnZ2VyYDogdGhlIHRyaWdnZXIgaXMgbm90IHNlbGVjdGVkLlxuJiM0MztcdFx0LSBgXHUwMDNjZm9vX3RyaWdnZXJcdTAwM2VgOiB0aGUgdHJpZ2dlciBpcyBzZWxlY3RlZCwgYnV0IGZhbGxzIGJhY2sgdG9cbiYjNDM7XHRcdCAgc29mdHdhcmUgYmxpbmsgZm9yIHNvbWUgcmVhc29uIChlLmcuLCBpbmNvbXBhdGlibGUgdHJpZ2dlclxuJiM0MztcdFx0ICBwYXJhbWV0ZXJzKVxuJiM0MztcdFx0LSBgW2Zvb190cmlnZ2VyXWA6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkIGFuZCBvZmZsb2FkZWQgdG9cbiYjNDM7XHRcdCAgaGFyZHdhcmUuXG4mIzQzO1xuJiM0MztcdFx0VGhlIFwmIzM0O25ldGRldlwmIzM0OyB0cmlnZ2VyIGFsc28gcHJvdmlkZXMgYSBjdXN0b20gYXR0cmlidXRlIHRvXG4mIzQzO1x0XHRpbmRpY2F0ZSBpdHMgc3RhdGUsIHNlZSBgL3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS9vZmZsb2FkZWRgLlxuJiM0MztcbiBXaGF0Olx0XHQvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL2ludmVydGVkXG4gRGF0ZTpcdFx0SmFudWFyeSAyMDExXG4gS2VybmVsVmVyc2lvbjpcdDIuNi4zOFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcbmluZGV4IGVkNDZiMzdhYjhhMjg0Li5hNTE0NmVhMWUzZTYxYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldlxuQEAgLTc1LDYgJiM0Mzs3NSw5IEBAIERlc2NyaXB0aW9uOlxuIFx0XHRJZiAxLCB0aGUgTEVEIGJsaW5raW5nIGluIHJlcXVlc3RlZCBtb2RlIGlzIG9mZmxvYWRlZCB0b1xuIFx0XHRoYXJkd2FyZS5cbiBcbiYjNDM7XHRcdExFRCB0cmlnZ2VyIGNvcmUgYWxzbyBwcm92aWRlcyBhIGdlbmVyaWMgYXR0cmlidXRlIGZvciB0aGlzXG4mIzQzO1x0XHRwdXJwb3NlLCBzZWUgYC9zeXMvY2xhc3MvbGVkcy9cdTAwM2NsZWRcdTAwM2UvdHJpZ2dlcl9tYXlfb2ZmbG9hZGAuXG4mIzQzO1xuIFdoYXQ6XHRcdC9zeXMvY2xhc3MvbGVkcy9cdTAwM2NsZWRcdTAwM2UvbGlua18xMFxuIERhdGU6XHRcdEp1biAyMDIzXG4gS2VybmVsVmVyc2lvbjpcdDYuNVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxuaW5kZXggMzkxMzk2NmNmZGFjMDQuLmFkYmM1N2I5ZjQ5YzMzIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcbkBAIC0yNDIsNiAmIzQzOzI0Miw5IEBAIG9wcyBhbmQgbmVlZHMgdG8gZGVjbGFyZSBzcGVjaWZpYyBzdXBwb3J0IGZvciB0aGUgc3VwcG9ydGVkIHRyaWdnZXJzLlxuIFxuIFdpdGggaHcgY29udHJvbCB3ZSByZWZlciB0byB0aGUgTEVEIGRyaXZlbiBieSBoYXJkd2FyZS5cbiBcbiYjNDM7QSBzeXNmcyBhdHRyaWJ1dGUgYHRyaWdnZXJfbWF5X29mZmxvYWRgIGlzIHByb3ZpZGVkIGZvciB1c2Vyc3BhY2UgdG9cbiYjNDM7cXVlcnkgc3VwcG9ydGVkIHRyaWdnZXJzIGFuZCB0aGVpciBzdGF0ZXMuXG4mIzQzO1xuIExFRCBkcml2ZXIgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YWx1ZSB0byBzdXBwb3J0IGh3IGNvbnRyb2w6XG4gXG4gICAgIC0gaHdfY29udHJvbF90cmlnZ2VyOlxuQEAgLTI5OCw2ICYjNDM7MzAxLDE1IEBAIExFRCBkcml2ZXIgbXVzdCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gc3VwcG9ydCBodyBjb250cm9sOlxuICAgICAgICAgICAgICAgICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0cnVjdCBkZXZpY2Ugb3IgTlVMTCBpZiBub3RoaW5nXG4gICAgICAgICAgICAgICAgIGlzIGN1cnJlbnRseSBhdHRhY2hlZC5cbiBcbiYjNDM7TEVEIHRyaWdnZXIgc2hvdWxkIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEFQSSB0byBpbmRpY2F0ZSBodyBjb250cm9sOlxuJiM0MzsgICAgLSBvZmZsb2FkZWQ6XG4mIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHRyaWdnZXIgaXMgY3VycmVudGx5XG4mIzQzOyAgICAgICAgICAgICAgICBvZmZsb2FkZWQgdG8gaGFyZHdhcmUuXG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgSWYgYSB0cmlnZ2VyIGRvZXNuJiMzOTt0IGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLCB0aGUgZGVmYXVsdFxuJiM0MzsgICAgICAgICAgICAgICAgdmFsdWUgd2lsbCBiZSB0cnVlIGZvciBwcml2YXRlIHRyaWdnZXJzIGFuZCBmYWxzZSBmb3IgZ2VuZXJpY1xuJiM0MzsgICAgICAgICAgICAgICAgb25lcy5cbiYjNDM7XG4gTEVEIGRyaXZlciBjYW4gYWN0aXZhdGUgYWRkaXRpb25hbCBtb2RlcyBieSBkZWZhdWx0IHRvIHdvcmthcm91bmQgdGhlXG4gaW1wb3NzaWJpbGl0eSBvZiBzdXBwb3J0aW5nIGVhY2ggZGlmZmVyZW50IG1vZGUgb24gdGhlIHN1cHBvcnRlZCB0cmlnZ2VyLlxuIEV4YW1wbGVzIGFyZSBoYXJkY29kaW5nIHRoZSBibGluayBzcGVlZCB0byBhIHNldCBpbnRlcnZhbCwgZW5hYmxlIHNwZWNpYWxcbkBAIC0zMTEsOSAmIzQzOzMyMyw2OSBAQCB0aGUgZW5kIHVzZSBod19jb250cm9sX3NldCB0byBhY3RpdmF0ZSBodyBjb250cm9sLlxuIEEgdHJpZ2dlciBjYW4gdXNlIGh3X2NvbnRyb2xfZ2V0IHRvIGNoZWNrIGlmIGEgTEVEIGlzIGFscmVhZHkgaW4gaHcgY29udHJvbFxuIGFuZCBpbml0IHRoZWlyIGZsYWdzLlxuIFxuJiM0MztBbHRlcm5hdGl2ZWx5LCBhIHByaXZhdGUgdHJpZ2dlciBjYW4gYmUgaW1wbGVtZW50ZWQgYWxvbmcgd2l0aCB0aGUgTEVEIGRyaXZlciBpZlxuJiM0Mzt0aGUgTEVEJiMzOTtzIGhhcmR3YXJlIGNvbnRyb2wgZG9lc24mIzM5O3QgZml0IGFueSBnZW5lcmljIHRyaWdnZXIuIFRvIGFzc29jaWF0ZSB0aGVcbiYjNDM7cHJpdmF0ZSB0cmlnZ2VyIHdpdGggdGhlIExFRCBjbGFzc2RldiwgdGhlaXIgYHRyaWdnZXJfdHlwZWAgbXVzdCBiZSB0aGUgc2FtZS4gVG9cbiYjNDM7ZGVjbGFyZSB0aGF0IHRoZSBwcml2YXRlIHRyaWdnZXIgcHJvdmlkZXMgaGFyZHdhcmUgY29udHJvbCBmb3IgdGhlIGFzc29jaWF0ZWRcbiYjNDM7TEVEIGNsYXNzZGV2LCBzZXQgdGhlIGBod19jb250cm9sX3RyaWdnZXJgIHN0cmluZyB0byB0aGUgdHJpZ2dlciYjMzk7cyBuYW1lLiBTaW5jZVxuJiM0Mztib3RoIHRoZSBMRUQgY2xhc3NkZXYgYW5kIHRoZSBwcml2YXRlIHRyaWdnZXIgYXJlIGluIHRoZSBzYW1lIExFRCBkcml2ZXIsIGl0JiMzOTtzXG4mIzQzO25vdCBuZWNlc3NhcnkgZm9yIHRoZW0gdG8gY29vcmRpbmF0ZSB2aWEgYGh3X2NvbnRyb2xfKmAgY2FsbGJhY2tzLlxuJiM0MztcbiBXaGVuIHRoZSBMRUQgaXMgaW4gaHcgY29udHJvbCwgbm8gc29mdHdhcmUgYmxpbmsgaXMgcG9zc2libGUgYW5kIGRvaW5nIHNvXG4gd2lsbCBlZmZlY3RpdmVseSBkaXNhYmxlIGh3IGNvbnRyb2wuXG4gXG4mIzQzO0hhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25cbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7U29tZSBoYXJkd2FyZSBjYW4gYXV0b25vbW91c2x5IGFjdGl2YXRlL2RlYWN0aXZhdGUgaGFyZHdhcmUgY29udHJvbC4gQWZ0ZXIgdGhhdCxcbiYjNDM7dGhlIExFRCBoYXJkd2FyZSBub3RpZmllcyB0aGUgTEVEIGRyaXZlci5cbiYjNDM7XG4mIzQzO0lmIHRoZSBkcml2ZXIgY2FuIGRldGVjdCBzdWNoIHRyYW5zaXRpb25zIGFuZCB0aHVzIHdhbnRzIHRvIG5vdGlmeSB0aGUgTEVEIGNvcmVcbiYjNDM7dG8gdXBkYXRlIHRoZSBjdXJyZW50IHRyaWdnZXIgdGhlbiB0aGUgYExFRF9UUklHX0hXX0NIQU5HRURgIGZsYWcgbXVzdCBiZSBzZXQgaW5cbiYjNDM7ZmxhZ3MgYmVmb3JlIHJlZ2lzdGVyaW5nLiBUbyB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciBhY2NvcmRpbmdseSwgY2FsbFxuJiM0MztgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAgb24gdGhlIExFRCBjbGFzc2Rldi5cbiYjNDM7XG4mIzQzO1RoaXMgY2FwYWJpbGl0eSBpcyByZXN0cmljdGVkIHRvIHRoZSBMRUQgZGV2aWNlJiMzOTtzIHByaXZhdGUgdHJpZ2dlci4gVGhlIHByaXZhdGVcbiYjNDM7dHJpZ2dlciBtdXN0IGhhdmUgYmVlbiBwcm9wZXJseSByZWdpc3RlcmVkIChzZWUgYWJvdmUpIGFuZCBuYW1lZCBhZnRlclxuJiM0MztgaHdfY29udHJvbF90cmlnZ2VyYC5cbiYjNDM7XG4mIzQzO09ubHkgdHdvIHRyYW5zaXRpb25zIGFyZSBkZWZpbmVkOlxuJiM0MztcbiYjNDM7LSBcJiMzNDtub25lXCYjMzQ7ID1cdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyOlxuJiM0MzsgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2xcbiYjNDM7ICAgICAgICBhbmQgd2hlbiBcJiMzNDtub25lXCYjMzQ7IChpLmUuLCBubyB0cmlnZ2VyKSBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiB0aGUgcHJpdmF0ZVxuJiM0MzsgICAgICAgIHRyaWdnZXIgaXMgYWxyZWFkeSBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseVxuJiM0MzsgICAgICAgIGEgbm8tb3AuXG4mIzQzO1xuJiM0MzsgICAgICAgIFRoZSBhY3RpdmF0aW9uIHNlcXVlbmNlIGZvciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHdpbGwgYmUgZXhlY3V0ZWQgYXNcbiYjNDM7ICAgICAgICBub3JtYWwuXG4mIzQzO1xuJiM0MzsgICAgICAgIFRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgdGhlXG4mIzQzOyAgICAgICAgYWN0aXZhdGlvbiBzZXF1ZW5jZSBldmVuIGlmIHRoZSBoYXJkd2FyZSBpcyBjdXJyZW50bHkgaW4gaGFyZHdhcmVcbiYjNDM7ICAgICAgICBjb250cm9sLlxuJiM0MztcbiYjNDM7ICAgICAgICBJZiBlcnJvciBvY2N1cnMgaW4gdGhlIGFjdGl2YXRpb24gc2VxdWVuY2UsIHRoZSBMRUQgVHJpZ2dlciBjb3JlIHJldmVydHNcbiYjNDM7ICAgICAgICB0aGUgZWZmZWN0aXZlIHRyaWdnZXIgdG8gXCYjMzQ7bm9uZVwmIzM0Oy5cbiYjNDM7XG4mIzQzOy0gcHJpdmF0ZSB0cmlnZ2VyID1cdTAwM2UgXCYjMzQ7bm9uZVwmIzM0O1xuJiM0MzsgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0ZXMgaGFyZHdhcmUgY29udHJvbFxuJiM0MzsgICAgICAgIGFuZCB3aGVuIHRoZSBwcml2YXRlIHRyaWdnZXIgaXMgY3VycmVudGx5IGFjdGl2ZS4gSWYgXCYjMzQ7bm9uZVwmIzM0OyAoaS5lLiwgbm9cbiYjNDM7ICAgICAgICB0cmlnZ2VyKSBpcyBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseSBhXG4mIzQzOyAgICAgICAgbm8tb3AuXG4mIzQzO1xuJiM0MzsgICAgICAgIFRoZSBkZWFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhc1xuJiM0MzsgICAgICAgIG5vcm1hbCwgZXhjZXB0IHRoYXQgdGhlIGN1cnJlbnQgTEVEIGJyaWdodG5lc3MgaXMgcmV0YWluZWQuIFRoZSByZWFzb25cbiYjNDM7ICAgICAgICBmb3Iga2VlcGluZyB0aGUgYnJpZ2h0bmVzcyB1bmNoYW5nZWQgaXMgdGhhdCBzb21lIGhhcmR3YXJlIG1heSBjaG9vc2UgYVxuJiM0MzsgICAgICAgIHNwZWNpZmljIGJyaWdodG5lc3MgaW5zdGVhZCBvZiBzaW1wbHkgdHVybmluZyBvZmYgdGhlIExFRCBhZnRlclxuJiM0MzsgICAgICAgIGF1dG9ub21vdXNseSBkZWFjdGl2YXRpbmcgaGFyZHdhcmUgY29udHJvbC5cbiYjNDM7XG4mIzQzOyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGVcbiYjNDM7ICAgICAgICBkZWFjdGl2YXRpb24gc2VxdWVuY2UgZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXMgbm90IGN1cnJlbnRseSBpbiBoYXJkd2FyZVxuJiM0MzsgICAgICAgIGNvbnRyb2wuXG4mIzQzO1xuJiM0MztJZiB0aGUgY3VycmVudCB0cmlnZ2VyIGlzIG5laXRoZXIgdGhlIHByaXZhdGUgdHJpZ2dlciBub3IgXCYjMzQ7bm9uZVwmIzM0Oywgbm8gdHJhbnNpdGlvblxuJiM0Mzt3aWxsIGJlIG1hZGUuXG4mIzQzO1xuIEtub3duIElzc3Vlc1xuID09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuY1xuaW5kZXggYTUxYjBlZDUzODg2NDQuLjI0NjBmY2YwYzQ2OTBhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcbkBAIC0yNywxNiAmIzQzOzI3LDYgQEAgc3RhdGljIExJU1RfSEVBRChsZWRzX2xvb2t1cF9saXN0KTtcbiBcbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmxlZHNfd3E7XG4gXG4tc3RhdGljIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbi17XG4tI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG4tXHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuLVx0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXIgXHUwMDI2XHUwMDI2IGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNldHJpZ2dlcl90eXBlO1xuLSNlbHNlXG4tXHRyZXR1cm4gZmFsc2U7XG4tI2VuZGlmXG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuQEAgLTc0LDYgJiM0Mzs2NCw5IEBAIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIFxuIFx0aWYgKHN0YXRlID09IExFRF9PRkYpXG4gXHRcdGxlZF90cmlnZ2VyX3JlbW92ZShsZWRfY2Rldik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wobGVkX2NkZXYpO1xuJiM0MztcbiBcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2Rldiwgc3RhdGUpO1xuIFxuIFx0cmV0ID0gc2l6ZTtcbkBAIC0xMDMsOCAmIzQzOzk2LDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqY29uc3QgbGVkX3RyaWdnZXJfYmluX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZiaW5fYXR0cl90cmlnZ2VyLFxuIFx0TlVMTCxcbiB9O1xuJiM0MztcbiYjNDM7c3RhdGljIERFVklDRV9BVFRSX1JPKHRyaWdnZXJfbWF5X29mZmxvYWQpO1xuJiM0MztzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbGVkX3RyaWdnZXJfYXR0cnNbXSA9IHtcbiYjNDM7XHRcdTAwMjZkZXZfYXR0cl90cmlnZ2VyX21heV9vZmZsb2FkLmF0dHIsXG4mIzQzO1x0TlVMTFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHVtb2RlX3QgbGVkX3RyaWdnZXJfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuJiM0MztcdFx0XHRcdCAgICAgIGludCBpZHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBrb2JqX3RvX2Rldihrb2JqKTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoYXR0ciA9PSBcdTAwMjZkZXZfYXR0cl90cmlnZ2VyX21heV9vZmZsb2FkLmF0dHIpXG4mIzQzO1x0XHRyZXR1cm4gbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID8gYXR0ci1cdTAwM2Vtb2RlIDogMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGF0dHItXHUwMDNlbW9kZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsZWRfdHJpZ2dlcl9ncm91cCA9IHtcbiBcdC5iaW5fYXR0cnMgPSBsZWRfdHJpZ2dlcl9iaW5fYXR0cnMsXG4mIzQzO1x0LmF0dHJzID0gbGVkX3RyaWdnZXJfYXR0cnMsXG4mIzQzO1x0LmlzX3Zpc2libGUgPSBsZWRfdHJpZ2dlcl9pc192aXNpYmxlLFxuIH07XG4gI2VuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jIGIvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jXG5pbmRleCBiMTIyMzIxOGJkYTExMy4uNmFlMjhjYmQxYzc3ODMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xuQEAgLTcsOSAmIzQzOzcsMTIgQEBcbiAgKiBBdXRob3I6IFJpY2hhcmQgUHVyZGllIFx1MDAzY3JwdXJkaWVAb3BlbmVkaGFuZC5jb21cdTAwM2VcbiAgKi9cbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2NrZGVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lci5oXHUwMDNlXG5AQCAtMzMsNiAmIzQzOzM2LDMzIEBAIHRyaWdnZXJfcmVsZXZhbnQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiBcdHJldHVybiAhdHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgfHwgdHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoIWxlZF9jZGV2LVx1MDAzZXRyaWdnZXIpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyIHx8XG4mIzQzO1x0ICAgIHN0cmNtcChsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIsIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlbmFtZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW9mZmxvYWRlZClcbiYjNDM7XHRcdHJldHVybiBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW9mZmxvYWRlZChsZWRfY2Rldik7XG4mIzQzO1xuJiM0MztcdGRldl93YXJuX29uY2UobGVkX2NkZXYtXHUwMDNlZGV2LCBcJiMzNDtodyBjb250cm9sIHRyaWdnZXIgJXMgZG9lc24mIzM5O3QgaW1wbGVtZW50IG9mZmxvYWRlZCgpXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgbGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2VuYW1lKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNldHJpZ2dlcl90eXBlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuJiM0MztcdHJldHVybiBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQpO1xuJiM0MztcbiBzc2l6ZV90IGxlZF90cmlnZ2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLFxuIFx0XHRcdCAgbG9mZl90IHBvcywgc2l6ZV90IGNvdW50KVxuQEAgLTE2Myw3ICYjNDM7MTkzLDggQEAgc3NpemVfdCBsZWRfdHJpZ2dlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZWFkKTtcbiBcbiAvKiBDYWxsZXIgbXVzdCBlbnN1cmUgbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrIGhlbGQgKi9cbi1pbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4mIzQzO3N0YXRpYyBpbnQgX19sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcbiYjNDM7XHRcdFx0ICAgICBib29sIGh3X3RyaWdnZXJlZClcbiB7XG4gXHRjaGFyICpldmVudCA9IE5VTEw7XG4gXHRjaGFyICplbnZwWzJdO1xuQEAgLTE5NCw3ICYjNDM7MjI1LDIxIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiBcdFx0bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9kYXRhID0gTlVMTDtcbiBcdFx0bGVkX2NkZXYtXHUwMDNlYWN0aXZhdGVkID0gZmFsc2U7XG4gXHRcdGxlZF9jZGV2LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkxFRF9JTklUX0RFRkFVTFRfVFJJR0dFUjtcbi1cdFx0bGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBMRURfT0ZGKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSGFyZHdhcmUgbWF5IGhhdmUgc2VsZWN0ZWQgYSBuZXcgYnJpZ2h0bmVzcyBsZXZlbCBkdXJpbmcgaXRzXG4mIzQzO1x0XHQgKiBoYXJkd2FyZSBjb250cm9sIHRyYW5zaXRpb24sIHNvIG9ubHkgcmVzZXQgYnJpZ2h0bmVzcyBpZiB3ZVxuJiM0MztcdFx0ICogYXJlIHN3aXRjaGluZyB0byBhbm90aGVyIHRyaWdnZXIgb3IgaWYgdGhlIHN3aXRjaGluZyBpcyBub3RcbiYjNDM7XHRcdCAqIGhhcmR3YXJlIHRyaWdnZXJlZC5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgZXJyb3IgcGF0aCwgYXMgcnVubmluZ1xuJiM0MztcdFx0ICogaW50byB0aGUgZXJyb3IgcGF0aCBpbXBsaWVzIGEgbm9uZSA9XHUwMDNlIHByaXZhdGUgdHJpZ2dlclxuJiM0MztcdFx0ICogdHJhbnNpdGlvbi4gVGhpcyBoaW50cyB0aGF0IHRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZVxuJiM0MztcdFx0ICogdHJpZ2dlciBtdXN0IGhhdmUgc29tZSBmdW5kYW1lbnRhbCBidWdzLCBzbyBkb24mIzM5O3QgYm90aGVyXG4mIzQzO1x0XHQgKiBsZWF2aW5nIHRoZSBMRUQgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodHJpZyB8fCAhaHdfdHJpZ2dlcmVkKVxuJiM0MztcdFx0XHRsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIExFRF9PRkYpO1xuIFx0fVxuIFx0aWYgKHRyaWcpIHtcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnRyaWctXHUwMDNlbGVkZGV2X2xpc3RfbG9jayk7XG5AQCAtMjU4LDYgJiM0MzszMDMsMTEgQEAgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzO1xuJiM0MztpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19sZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIHRyaWcsIGZhbHNlKTtcbiYjNDM7fVxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldCk7XG4gXG4gdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG5AQCAtMjY4LDYgJiM0MzszMTgsMTUgQEAgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZSk7XG4gXG4mIzQzO3ZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2RldikpXG4mIzQzO1x0XHRsZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKTtcbiYjNDM7XG4gc3RhdGljIGJvb2wgbGVkX21hdGNoX2RlZmF1bHRfdHJpZ2dlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiB7XG5AQCAtMzEzLDYgJiM0MzszNzIsMzIgQEAgdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQpO1xuIFxuJiM0Mztzc2l6ZV90IHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcdHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZztcbiYjNDM7XHRib29sIGhpdCwgb2ZmbG9hZGVkO1xuJiM0MztcdGludCBsZW47XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZsZWRfY2Rldi1cdTAwM2VsZWRfYWNjZXNzKTtcbiYjNDM7XHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuJiM0MztcbiYjNDM7XHR0cmlnID0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcjtcbiYjNDM7XG4mIzQzO1x0b2ZmbG9hZGVkID0gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRoaXQgPSBvZmZsb2FkZWQgfHwgKHRyaWcgXHUwMDI2XHUwMDI2ICFzdHJjbXAobGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLCB0cmlnLVx1MDAzZW5hbWUpKTtcbiYjNDM7XG4mIzQzO1x0LyogW29mZmxvYWRlZF0gXHUwMDNjYWN0aXZlX2J1dF9ub3Rfb2ZmbG9hZGVkXHUwMDNlIGluYWN0aXZlICovXG4mIzQzO1x0bGVuID0gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVzJXMlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0IG9mZmxvYWRlZCA/IFwmIzM0O1tcJiMzNDsgOiAoaGl0ID8gXCYjMzQ7XHUwMDNjXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KSxcbiYjNDM7XHRcdFx0IGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcixcbiYjNDM7XHRcdFx0IG9mZmxvYWRlZCA/IFwmIzM0O11cJiMzNDsgOiAoaGl0ID8gXCYjMzQ7XHUwMDNlXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBsZW47XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KTtcbiYjNDM7XG4gLyogTEVEIFRyaWdnZXIgSW50ZXJmYWNlICovXG4gXG4gaW50IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbkBAIC00MDMsNiAmIzQzOzQ4OCw2MyBAQCBpbnQgZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIpO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuJiM0MztzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24oc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKmhjX3RyaWcpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyKSB7XG4mIzQzO1x0XHQvKiBcJiMzNDtub25lXCYjMzQ7ID1cdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyLiAqL1xuJiM0MztcdFx0aWYgKGFjdGl2YXRlKVxuJiM0MztcdFx0XHRlcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgaGNfdHJpZywgdHJ1ZSk7XG4mIzQzO1x0fSBlbHNlIGlmIChsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyID09IGhjX3RyaWcpIHtcbiYjNDM7XHRcdC8qIHByaXZhdGUgdHJpZ2dlciA9XHUwMDNlIFwmIzM0O25vbmVcJiMzNDsuICovXG4mIzQzO1x0XHRpZiAoIWFjdGl2YXRlKVxuJiM0MztcdFx0XHRlcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgTlVMTCwgdHJ1ZSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIE90aGVyIHRyaWdnZXIgaXMgYWN0aXZlLiAqL1xuJiM0MztcdFx0ZGV2X2RiZyhsZWRfY2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O0lnbm9yaW5nIGh3IGNvbnRyb2wgdHJhbnNpdGlvbiAoJXMgJXMpIHdoaWxlICVzIGlzIGFjdGl2ZVwmIzM0OyxcbiYjNDM7XHRcdFx0YWN0aXZhdGUgPyBcJiMzNDthY3RpdmF0ZVwmIzM0OyA6IFwmIzM0O2RlYWN0aXZhdGVcJiMzNDssIGhjX3RyaWctXHUwMDNlbmFtZSxcbiYjNDM7XHRcdFx0bGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2VuYW1lKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0ZGV2X3dhcm4obGVkX2NkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gJXMgJXMgaW4gaHcgY29udHJvbCB0cmFuc2l0aW9uOiAlZFwmIzM0OyxcbiYjNDM7XHRcdFx0IGFjdGl2YXRlID8gXCYjMzQ7YWN0aXZhdGVcJiMzNDsgOiBcJiMzNDtkZWFjdGl2YXRlXCYjMzQ7LCBoY190cmlnLVx1MDAzZW5hbWUsIGVycik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZztcbiYjNDM7XG4mIzQzO1x0LyogUmVzdHJpY3RlZCB0byBwcml2YXRlIHRyaWdnZXJzLiAqL1xuJiM0MztcdGlmIChXQVJOX09OKCEobGVkX2NkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IExFRF9UUklHX0hXX0NIQU5HRUQpIHx8XG4mIzQzO1x0XHQgICAgIWxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciB8fCAhbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsIFx1MDAyNnRyaWdnZXJzX2xpc3RfbG9jaykge1xuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0cmlnLCBcdTAwMjZ0cmlnZ2VyX2xpc3QsIG5leHRfdHJpZykge1xuJiM0MztcdFx0XHRpZiAodHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIXN0cmNtcCh0cmlnLVx1MDAzZW5hbWUsIGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcikpIHtcbiYjNDM7XHRcdFx0XHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0bGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKGxlZF9jZGV2LCBhY3RpdmF0ZSwgdHJpZyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZfZXJyKGxlZF9jZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFwmIzM0OyVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0X19mdW5jX18sIGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcik7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXG4mIzQzO1xuIC8qIFNpbXBsZSBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi9cbiBcbiB2b2lkIGxlZF90cmlnZ2VyX2V2ZW50KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcbmluZGV4IDE4NDRkMGNkNWY1Mjg0Li42ZGI4M2QwMTUyNzc1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jXG5AQCAtODUsMTIgJiM0Mzs4NSwxOCBAQCBzdGF0aWMgaW50IGNyb3NfZWNfbGVkX3RyaWdnZXJfYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gXHRyZXR1cm4gY3Jvc19lY19sZWRfc2VuZF9jbWQocHJpdi1cdTAwM2Vjcm9zX2VjLCBcdTAwMjZhcmcpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgY3Jvc19lY19sZWRfdHJpZ2dlcl9vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgY3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgY3Jvc19lY19sZWRfdHJpZ2dlciA9IHtcbiBcdC5uYW1lID0gXCYjMzQ7Y2hyb21lb3MtYXV0b1wmIzM0OyxcbiBcdC50cmlnZ2VyX3R5cGUgPSBcdTAwMjZjcm9zX2VjX2xlZF90cmlnZ2VyX3R5cGUsXG4gXHQuYWN0aXZhdGUgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX2FjdGl2YXRlLFxuJiM0MztcdC5vZmZsb2FkZWQgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xuaW5kZXggZWQ2YTQ3YmJiNDRmOWMuLjMyZDQwZDE3NmQzZjExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jXG5AQCAtMTk1LDEwICYjNDM7MTk1LDE2IEBAIHN0YXRpYyB2b2lkIG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpXG4gXHRcdFx0ZXJyKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIG9tbmlhX2h3dHJpZ19vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgb21uaWFfaHdfdHJpZ2dlciA9IHtcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7b21uaWEtbWN1XCYjMzQ7LFxuIFx0LmFjdGl2YXRlXHQ9IG9tbmlhX2h3dHJpZ19hY3RpdmF0ZSxcbiBcdC5kZWFjdGl2YXRlXHQ9IG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlLFxuJiM0MztcdC5vZmZsb2FkZWRcdD0gb21uaWFfaHd0cmlnX29mZmxvYWRlZCxcbiBcdC50cmlnZ2VyX3R5cGVcdD0gXHUwMDI2b21uaWFfaHdfdHJpZ2dlcl90eXBlLFxuIH07XG4gXG5AQCAtMjUxLDYgJiM0MzsyNTcsNyBAQCBzdGF0aWMgaW50IG9tbmlhX2xlZF9yZWdpc3RlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3Qgb21uaWFfbGVkICpsZWQsXG4gXHQgKiBieSBMRUQgY2xhc3MgZnJvbSB0aGUgbGludXgsZGVmYXVsdC10cmlnZ2VyIHByb3BlcnR5LlxuIFx0ICovXG4gXHRjZGV2LVx1MDAzZWRlZmF1bHRfdHJpZ2dlciA9IG9tbmlhX2h3X3RyaWdnZXIubmFtZTtcbiYjNDM7XHRjZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IG9tbmlhX2h3X3RyaWdnZXIubmFtZTtcbiBcbiBcdC8qIFB1dCB0aGUgTEVEIGludG8gc29mdHdhcmUgbW9kZSAqL1xuIFx0cmV0ID0gb21uaWFfY21kX3dyaXRlX3U4KGNsaWVudCwgT01OSUFfQ01EX0xFRF9NT0RFLCBPTU5JQV9DTURfTEVEX01PREVfTEVEKGxlZC1cdTAwM2VyZWcpIHxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy5oIGIvZHJpdmVycy9sZWRzL2xlZHMuaFxuaW5kZXggYmVlNDY2NTFlMDY4ZjcuLmIwOGEyODkzOTdlNDYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZHMuaFxuQEAgLTI3LDYgJiM0MzsyNyw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsXG4gXHRcdFx0bG9mZl90IHBvcywgc2l6ZV90IGNvdW50KTtcbiYjNDM7c3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTtcbiBcbiBleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBsZWRzX2xpc3RfbG9jaztcbiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBsZWRzX2xpc3Q7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdcbmluZGV4IGMxMTI4MmE3NGI1YWMzLi43OTgxMjIxNTQwNDliNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdcbkBAIC05LDYgJiM0Mzs5LDE1IEBAIG1lbnVjb25maWcgTEVEU19UUklHR0VSU1xuIFxuIGlmIExFRFNfVFJJR0dFUlNcbiBcbiYjNDM7Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuJiM0MztcdGJvb2wgXCYjMzQ7TEVEIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb24gc3VwcG9ydFwmIzM0O1xuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgaGFyZHdhcmUgaW5pdGlhdGVkIGhhcmR3YXJlIGNvbnRyb2xcbiYjNDM7XHQgIHRyYW5zaXRpb25zLCB3aGVyZSB0aGUgTEVEIGhhcmR3YXJlIGF1dG9ub21vdXNseSBzd2l0Y2hlcyBiZXR3ZWVuXG4mIzQzO1x0ICBcJiMzNDtub25lXCYjMzQ7IChpLmUuLCBubyB0cmlnZ2VyKSBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlci5cbiYjNDM7XG4mIzQzO1x0ICBTZWUgRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0IGZvciBkZXRhaWxzLlxuJiM0MztcbiBjb25maWcgTEVEU19UUklHR0VSX1RJTUVSXG4gXHR0cmlzdGF0ZSBcJiMzNDtMRUQgVGltZXIgVHJpZ2dlclwmIzM0O1xuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG5pbmRleCA2NGMwNzhlOTk3ZjI4YS4uYTI2MTA5Y2E0YjFjOWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG5AQCAtNzU0LDEwICYjNDM7NzU0LDE4IEBAIHN0YXRpYyB2b2lkIG5ldGRldl90cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gXHRrZnJlZSh0cmlnZ2VyX2RhdGEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxlZF9uZXRkZXZfZGF0YSAqdHJpZ2dlcl9kYXRhID0gbGVkX2dldF90cmlnZ2VyX2RhdGEobGVkX2NkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJpZ2dlcl9kYXRhLVx1MDAzZWh3X2NvbnRyb2w7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBuZXRkZXZfbGVkX3RyaWdnZXIgPSB7XG4gXHQubmFtZSA9IFwmIzM0O25ldGRldlwmIzM0OyxcbiBcdC5hY3RpdmF0ZSA9IG5ldGRldl90cmlnX2FjdGl2YXRlLFxuIFx0LmRlYWN0aXZhdGUgPSBuZXRkZXZfdHJpZ19kZWFjdGl2YXRlLFxuJiM0MztcdC5vZmZsb2FkZWQgPSBuZXRkZXZfdHJpZ19vZmZsb2FkZWQsXG4gXHQuZ3JvdXBzID0gbmV0ZGV2X3RyaWdfZ3JvdXBzLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xuaW5kZXggNDQ0M2Y0MGVmOGFhN2UuLmU5MmIxZTkwMDc5NTEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnXG5AQCAtMTYsNiAmIzQzOzE2LDcgQEAgY29uZmlnIElERUFQQURfTEFQVE9QXG4gXHRzZWxlY3QgSU5QVVRfU1BBUlNFS01BUFxuIFx0c2VsZWN0IE5FV19MRURTXG4gXHRzZWxlY3QgTEVEU19DTEFTU1xuJiM0MztcdHNlbGVjdCBMRURTX1RSSUdHRVJTXG4gXHRoZWxwXG4gXHQgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIExlbm92byBJZGVhUGFkIG5ldGJvb2tzIGNvbnRhaW5zIGRyaXZlcnMgZm9yXG4gXHQgIHJma2lsbCBzd2l0Y2gsIGhvdGtleSwgZmFuIGNvbnRyb2wgYW5kIGJhY2tsaWdodCBjb250cm9sLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmNcbmluZGV4IDRmYmM5MDRmMWZjMzkwLi4yNTNkMjk2MmI5Mjc2MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xuQEAgLTksNiAmIzQzOzksNyBAQFxuICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10XG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2xpZ2h0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbkBAIC0yNSw3ICYjNDM7MjYsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ppZmZpZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvY2tkZXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX3Byb2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bvd2VyX3N1cHBseS5oXHUwMDNlXG5AQCAtMTM0LDEwICYjNDM7MTM3LDMxIEBAIGVudW0ge1xuIH07XG4gXG4gLypcbi0gKiBUaGVzZSBjb3JyZXNwb25kIHRvIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIHN0YXRlcyAtIDFcbi0gKiBGdXR1cmUga2V5Ym9hcmQgdHlwZXMgbWF5IG5lZWQgYSBuZXcgc3lzdGVtLCBpZiB0aGVyZSYjMzk7cyBhIGNvbGxpc2lvblxuLSAqIEtCRF9CTF9UUklTVEFURV9BVVRPIGhhcyBubyB3YXkgdG8gcmVwb3J0IG9yIHNldCB0aGUgYXV0byBzdGF0ZVxuLSAqIHNvIGl0IGVmZmVjdGl2ZWx5IGhhcyAzIHN0YXRlcywgYnV0IG5lZWRzIHRvIGhhbmRsZSA0XG4mIzQzOyAqIFRoZSBlbnVtZXJhdGlvbiBoYXMgdHdvIHB1cnBvc2VzOlxuJiM0MzsgKiAgIC0gYXMgYW4gaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYWxsIGtub3duIHR5cGVzIG9mIGtleWJvYXJkIGJhY2tsaWdodFxuJiM0MzsgKiAgIC0gYXMgYSBtYW5kYXRvcnkgcGFyYW1ldGVyIG9mIHRoZSBLQkxDIGNvbW1hbmRcbiYjNDM7ICpcbiYjNDM7ICogRm9yIGVhY2ggdHlwZSwgdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgdmFsdWVzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgICAgICBIYXJkd2FyZSBicmlnaHRuZXNzIHwgICAgICAgIDAgfCAgIDEgfCAgICAyIHwgICAgMyB8XG4mIzQzOyAqIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgS0JEX0JMX1NUQU5EQVJEICAgICAgICAgIHwgICAgICBvZmYgfCAgb24gfCAgTi9BIHwgIE4vQSB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgS0JEX0JMX1RSSVNUQVRFICAgICAgICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgIE4vQSB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgS0JEX0JMX1RSSVNUQVRFX0FVVE8gICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgYXV0byB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqXG4mIzQzOyAqIFdlIG1hcCBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyBmb3IgS0JEX0JMX1RSSVNUQVRFX0FVVE8gYXMgZm9sbG93czpcbiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgIExFRCBjbGFzc2RldiBicmlnaHRuZXNzIHwgICAgICAgIDAgfCAgIDEgfCAgICAyIHxcbiYjNDM7ICogfCBPcGVyYXRpb24gICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8ICAgICAgfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MztcbiYjNDM7ICogfCBSZWFkICAgICAgICAgICAgICAgICAgICAgfCBvZmYvYXV0byB8IGxvdyB8IGhpZ2ggfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MztcbiYjNDM7ICogfCBXcml0ZSAgICAgICAgICAgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MztcbiAgKi9cbiBlbnVtIHtcbiBcdEtCRF9CTF9TVEFOREFSRCAgICAgID0gMSxcbkBAIC0xNDUsNiAmIzQzOzE2OSw4IEBAIGVudW0ge1xuIFx0S0JEX0JMX1RSSVNUQVRFX0FVVE8gPSAzLFxuIH07XG4gXG4mIzQzOyNkZWZpbmUgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTXHQzXG4mIzQzO1xuICNkZWZpbmUgS0JEX0JMX1FVRVJZX1RZUEVcdFx0MHgxXG4gI2RlZmluZSBLQkRfQkxfVFJJU1RBVEVfVFlQRVx0XHQweDVcbiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9BVVRPX1RZUEVcdDB4N1xuQEAgLTIwMyw3ICYjNDM7MjI5LDkgQEAgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSB7XG4gXHRcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRcdGludCB0eXBlO1xuIFx0XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZDtcbi1cdFx0dW5zaWduZWQgaW50IGxhc3RfYnJpZ2h0bmVzcztcbiYjNDM7XHRcdGF0b21pY190IGxhc3RfaHdfYnJpZ2h0bmVzcztcbiYjNDM7XG4mIzQzO1x0XHRzdHJ1Y3QgbXV0ZXggbm90aWZfbXV0ZXg7IC8qIHByb3RlY3RzIG5vdGlmaWNhdGlvbnMgKi9cbiBcdH0ga2JkX2JsO1xuIFx0c3RydWN0IHtcbiBcdFx0Ym9vbCBpbml0aWFsaXplZDtcbkBAIC0xNTkyLDcgJiM0MzsxNjIwLDI0IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUoaW50IHR5cGUpXG4gXHRyZXR1cm4gKHR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFKSB8fCAodHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIGludCBod19icmlnaHRuZXNzKVxuJiM0Mzt7XG4mIzQzO1x0LyogT2ZmLCBsb3cgb3IgaGlnaCAqL1xuJiM0MztcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYz0gcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxuJiM0MztcdFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XG4mIzQzO1xuJiM0MztcdC8qIEF1dG8gKGNvbnRyb2xsZWQgYnkgRUMgYWNjb3JkaW5nIHRvIEFMUyksIHJlcG9ydCBhcyBvZmYgKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VrYmRfYmwudHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogVW5rbm93biB2YWx1ZSAqL1xuJiM0MztcdGRldl93YXJuKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldixcbiYjNDM7XHRcdCBcJiMzNDtVbmtub3duIGtleWJvYXJkIGJhY2tsaWdodCB2YWx1ZTogJWRcJiMzNDssIGh3X2JyaWdodG5lc3MpO1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB2YWx1ZTtcbiBcdGludCBlcnI7XG5AQCAtMTYwNiwyMSAmIzQzOzE2NTEsNyBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcbi1cdFx0LyogQ29udmVydCByZXR1cm5lZCB2YWx1ZSB0byBicmlnaHRuZXNzIGxldmVsICovXG4tXHRcdHZhbHVlID0gRklFTERfR0VUKEtCRF9CTF9HRVRfQlJJR0hUTkVTUywgdmFsdWUpO1xuLVxuLVx0XHQvKiBPZmYsIGxvdyBvciBoaWdoICovXG4tXHRcdGlmICh2YWx1ZSBcdTAwM2M9IHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcbi1cdFx0XHRyZXR1cm4gdmFsdWU7XG4tXG4tXHRcdC8qIEF1dG8sIHJlcG9ydCBhcyBvZmYgKi9cbi1cdFx0aWYgKHZhbHVlID09IHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyAmIzQzOyAxKVxuLVx0XHRcdHJldHVybiAwO1xuLVxuLVx0XHQvKiBVbmtub3duIHZhbHVlICovXG4tXHRcdGRldl93YXJuKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldixcbi1cdFx0XHQgXCYjMzQ7VW5rbm93biBrZXlib2FyZCBiYWNrbGlnaHQgdmFsdWU6ICVsdVwmIzM0OywgdmFsdWUpO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdHJldHVybiBGSUVMRF9HRVQoS0JEX0JMX0dFVF9CUklHSFRORVNTLCB2YWx1ZSk7XG4gXHR9XG4gXG4gXHRlcnIgPSBldmFsX2hhbHMocHJpdi1cdTAwM2VhZGV2LVx1MDAzZWhhbmRsZSwgXHUwMDI2dmFsdWUpO1xuQEAgLTE2MzAsNiAmIzQzOzE2NjEsMTYgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIFx0cmV0dXJuICEhdGVzdF9iaXQoSEFMU19LQkRfQkxfU1RBVEVfQklULCBcdTAwMjZ2YWx1ZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoaHdfYnJpZ2h0bmVzcyBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBod19icmlnaHRuZXNzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB7XG4gXHRzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTtcbkBAIC0xNjM3LDYyICYjNDM7MTY3OCwxMjMgQEAgc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGxlZF9jbGFcbiBcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcbiB9XG4gXG4tc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCB1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzcylcbiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCBpbnQgaHdfYnJpZ2h0bmVzcylcbiB7XG4tXHRpbnQgZXJyO1xuIFx0dW5zaWduZWQgbG9uZyB2YWx1ZTtcbiBcdGludCB0eXBlID0gcHJpdi1cdTAwM2VrYmRfYmwudHlwZTtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7XG4tXHRcdGlmIChicmlnaHRuZXNzIFx1MDAzZSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGJyaWdodG5lc3MpIHxcbiYjNDM7XHRcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGh3X2JyaWdodG5lc3MpIHxcbiBcdFx0XHRGSUVMRF9QUkVQKEtCRF9CTF9DT01NQU5EX1RZUEUsIHR5cGUpIHxcbiBcdFx0XHRLQkRfQkxfQ09NTUFORF9TRVQ7XG4gXHRcdGVyciA9IGV4ZWNfa2JsYyhwcml2LVx1MDAzZWFkZXYtXHUwMDNlaGFuZGxlLCB2YWx1ZSk7XG4gXHR9IGVsc2Uge1xuLVx0XHRlcnIgPSBleGVjX3NhbHMocHJpdi1cdTAwM2VhZGV2LVx1MDAzZWhhbmRsZSwgYnJpZ2h0bmVzcyA/IFNBTFNfS0JEX0JMX09OIDogU0FMU19LQkRfQkxfT0ZGKTtcbiYjNDM7XHRcdHZhbHVlID0gaHdfYnJpZ2h0bmVzcyA/IFNBTFNfS0JEX0JMX09OIDogU0FMU19LQkRfQkxfT0ZGO1xuJiM0MztcdFx0ZXJyID0gZXhlY19zYWxzKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIHZhbHVlKTtcbiBcdH1cbi1cbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCBpbnQgYnJpZ2h0bmVzcylcbiYjNDM7e1xuJiM0MztcdGlmIChicmlnaHRuZXNzIFx1MDAzZSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4gXHRcdFx0XHRcdFx0ICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4ge1xuIFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIGRlaW5pdGlhbGl6aW5nOiBJdCBtdXN0IGJlIHRoZSBzaWRlIGVmZmVjdCBvZiBsZWRfY2RldlxuJiM0MztcdCAqIHVucmVnaXN0cmF0aW9uIHdoZW4gb3VyIHByaXZhdGUgdHJpZ2dlciBpcyBhY3RpdmUuIFdlJiMzOTt2ZSBzZXRcbiYjNDM7XHQgKiBMRURfUkVUQUlOX0FUX1NIVVRET1dOIHRvIHJldGFpbiBsZWRfY2RldiBicmlnaHRuZXNzIGxldmVsLlxuJiM0MztcdCAqIFRvIGRvIHRoZSBzYW1lIGZvciBhdXRvIG1vZGUsIGdhdGUgY2hhbmdlcyBhbmQgcmV0dXJuIGVhcmx5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseSghcHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzKSA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlciA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O2lkZWFwYWQtYXV0b1wmIzM0OyxcbiYjNDM7XHQudHJpZ2dlcl90eXBlID0gXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGUsXG4mIzQzO1x0LmFjdGl2YXRlID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlLFxuJiM0MztcdC5vZmZsb2FkZWQgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBpbnQgaHdfYnJpZ2h0bmVzcywgaW50IGxhc3RfaHdfYnJpZ2h0bmVzcylcbiYjNDM7e1xuJiM0MztcdGJvb2wgaHdfY29udHJvbCwgbGFzdF9od19jb250cm9sO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VrYmRfYmwudHlwZSAhPSBLQkRfQkxfVFJJU1RBVEVfQVVUTylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aHdfY29udHJvbCA9IGh3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTO1xuJiM0MztcdGxhc3RfaHdfY29udHJvbCA9IGxhc3RfaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XG4mIzQzO1xuJiM0MztcdGlmIChod19jb250cm9sICE9IGxhc3RfaHdfY29udHJvbClcbiYjNDM7XHRcdGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGVkLCBod19jb250cm9sKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnkoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiB7XG4tXHRpbnQgYnJpZ2h0bmVzcztcbiYjNDM7XHRpbnQgaHdfYnJpZ2h0bmVzcywgYnJpZ2h0bmVzcywgbGFzdF9od19icmlnaHRuZXNzO1xuIFxuIFx0aWYgKCFwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuLVx0aWYgKGJyaWdodG5lc3MgXHUwMDNjIDApXG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLm5vdGlmX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0aHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuJiM0MztcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoYnJpZ2h0bmVzcyA9PSBwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MpXG4mIzQzO1x0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XG4mIzQzO1x0aWYgKGJyaWdodG5lc3MgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47IC8qIFJlamVjdCBpbnNhbmUgdmFsdWVzIGVhcmx5LiAqL1xuJiM0MztcbiYjNDM7XHRsYXN0X2h3X2JyaWdodG5lc3MgPSBhdG9taWNfeGNoZyhcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MsIGh3X2JyaWdodG5lc3MpO1xuJiM0MztcdGlmIChod19icmlnaHRuZXNzID09IGxhc3RfaHdfYnJpZ2h0bmVzcylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzcztcbiYjNDM7XHRpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChwcml2LCBod19icmlnaHRuZXNzLCBsYXN0X2h3X2JyaWdodG5lc3MpO1xuIFxuIFx0bGVkX2NsYXNzZGV2X25vdGlmeV9icmlnaHRuZXNzX2h3X2NoYW5nZWQoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGVkLCBicmlnaHRuZXNzKTtcbiB9XG4gXG4gc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9pbml0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4ge1xuLVx0aW50IGJyaWdodG5lc3MsIGVycjtcbiYjNDM7XHRpbnQgaHdfYnJpZ2h0bmVzcywgZXJyO1xuIFxuIFx0aWYgKCFwcml2LVx1MDAzZWZlYXR1cmVzLmtiZF9ibClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG5AQCAtMTcwMCwyOCAmIzQzOzE4MDIsNjggQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9pbml0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4gXHRpZiAoV0FSTl9PTihwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCkpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuLVx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHByaXYtXHUwMDNla2JkX2JsLnR5cGUpKVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyO1xuLVx0ZWxzZVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAxO1xuJiM0MztcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsIFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLm5vdGlmX211dGV4KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcbi1cdGlmIChicmlnaHRuZXNzIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gYnJpZ2h0bmVzcztcbiYjNDM7XHRod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7XG4mIzQzO1x0aWYgKGh3X2JyaWdodG5lc3MgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gaHdfYnJpZ2h0bmVzcztcbiYjNDM7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MsIGh3X2JyaWdodG5lc3MpO1xuIFxuLVx0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzcztcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5uYW1lICAgICAgICAgICAgICAgICAgICA9IFwmIzM0O3BsYXRmb3JtOjpcJiMzNDsgTEVEX0ZVTkNUSU9OX0tCRF9CQUNLTElHSFQ7XG4gXHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuYnJpZ2h0bmVzc19nZXQgICAgICAgICAgPSBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldDtcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5icmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0O1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmZsYWdzICAgICAgICAgICAgICAgICAgID0gTEVEX0JSSUdIVF9IV19DSEFOR0VEIHwgTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcbiBcbi1cdGVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsIFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLmxlZCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdHN3aXRjaCAocHJpdi1cdTAwM2VrYmRfYmwudHlwZSkge1xuJiM0MztcdGNhc2UgS0JEX0JMX1RSSVNUQVRFX0FVVE86XG4mIzQzO1x0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyO1xuIFxuJiM0MztcdFx0aWYgKCFpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCkge1xuJiM0MztcdFx0XHRkZXZfd2FybihcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O0NvdWxkIG5vdCBwcm92aWRlIExFRCB0cmlnZ2VyICVzIGZvciBrZXlib2FyZCBiYWNrbGlnaHRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmZsYWdzICAgICAgICAgICAgIHw9IExFRF9UUklHX0hXX0NIQU5HRUQ7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuaHdfY29udHJvbF90cmlnZ2VyID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWU7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQudHJpZ2dlcl90eXBlICAgICAgID0gXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7XG4mIzQzO1xuJiM0MztcdFx0LyogSGFyZHdhcmUgcmVtZW1iZXJzIHRoZSBsYXN0IGJyaWdodG5lc3MgbGV2ZWwsIGluY2x1ZGluZyBhdXRvIG1vZGUuICovXG4mIzQzO1x0XHRpZiAoaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpXG4mIzQzO1x0XHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5kZWZhdWx0X3RyaWdnZXIgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZTtcbiYjNDM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEtCRF9CTF9UUklTVEFURTpcbiYjNDM7XHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEtCRF9CTF9TVEFOREFSRDpcbiYjNDM7XHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0LyogVGhpcyBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBieSBpZGVhcGFkX2NoZWNrX2ZlYXR1cmVzKCkuICovXG4mIzQzO1x0XHR1bnJlYWNoYWJsZSgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUXVldWUgbm90aWZpY2F0aW9ucywgYXMga2JkX2JsLmluaXRpYWxpemVkIGlzIGFib3V0IHRvIGJlIHNldC4gKi9cbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubm90aWZfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHRpbmcga2JkX2JsLmluaXRpYWxpemVkIGFmdGVyIGxlZF9jbGFzc2Rldl9yZWdpc3RlcigpIGNvdWxkIGxlYWRcbiYjNDM7XHQgKiB0byByYWNlIGNvbmRpdGlvbnMgaW4gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQoKSB3aGVyZVxuJiM0MztcdCAqIGtiZF9ibC5pbml0aWFsaXplZCBpcyBjaGVja2VkLCBzbyBzZXQgaXQgbm93LiBJdCBjYW4gYmUgcmV2ZXJ0ZWQgYmFja1xuJiM0MztcdCAqIGlmIHRoZSBMRUQgY2xhc3NkZXYgZmFpbGVkIHRvIHJlZ2lzdGVyLlxuJiM0MztcdCAqL1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0ZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldiwgXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGVkKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfZXhpdChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuQEAgLTI1NDgsMTcgJiM0MzsyNjkwLDMwIEBAIHN0YXRpYyBpbnQgX19pbml0IGlkZWFwYWRfbGFwdG9wX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGVyciA9IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgTEVEIHRyaWdnZXIgJXM6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZSwgZXJyKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBpZGVhcGFkX3dtaV9kcml2ZXJfcmVnaXN0ZXIoKTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRnb3RvIGVycl9sZWR0cmlnO1xuIFxuIFx0ZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xuLVx0aWYgKGVycikge1xuLVx0XHRpZGVhcGFkX3dtaV9kcml2ZXJfdW5yZWdpc3RlcigpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl93bWk7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl93bWk6XG4mIzQzO1x0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbiYjNDM7ZXJyX2xlZHRyaWc6XG4mIzQzO1x0aWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKVxuJiM0MztcdFx0bGVkX3RyaWdnZXJfdW5yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIG1vZHVsZV9pbml0KGlkZWFwYWRfbGFwdG9wX2luaXQpXG4gXG5AQCAtMjU2Niw2ICYjNDM7MjcyMSw5IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBpZGVhcGFkX2xhcHRvcF9leGl0KHZvaWQpXG4ge1xuIFx0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbiBcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xuJiM0MztcbiYjNDM7XHRpZiAoaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpXG4mIzQzO1x0XHRsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7XG4gfVxuIG1vZHVsZV9leGl0KGlkZWFwYWRfbGFwdG9wX2V4aXQpXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMuaFxuaW5kZXggYjE2YjgwM2NjMWFjNTEuLjE2NzU5ODk2MmI3M2VjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sZWRzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbGVkcy5oXG5AQCAtMTA5LDYgJiM0MzsxMDksNyBAQCBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHtcbiAjZGVmaW5lIExFRF9JTklUX0RFRkFVTFRfVFJJR0dFUiBCSVQoMjMpXG4gI2RlZmluZSBMRURfUkVKRUNUX05BTUVfQ09ORkxJQ1QgQklUKDI0KVxuICNkZWZpbmUgTEVEX01VTFRJX0NPTE9SXHRcdEJJVCgyNSlcbiYjNDM7I2RlZmluZSBMRURfVFJJR19IV19DSEFOR0VEXHRCSVQoMjYpXG4gXG4gXHQvKiBzZXRfYnJpZ2h0bmVzc193b3JrIC8gYmxpbmtfdGltZXIgZmxhZ3MsIGF0b21pYywgcHJpdmF0ZS4gKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0d29ya19mbGFncztcbkBAIC00ODUsNiAmIzQzOzQ4Niw3IEBAIHN0cnVjdCBsZWRfdHJpZ2dlciB7XG4gXHRjb25zdCBjaGFyXHQgKm5hbWU7XG4gXHRpbnRcdFx0KCphY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuIFx0dm9pZFx0XHQoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiYjNDM7XHRib29sXHRcdCgqb2ZmbG9hZGVkKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4gXG4gXHQvKiBCcmlnaHRuZXNzIHNldCBieSBsZWRfdHJpZ2dlcl9ldmVudCAqL1xuIFx0ZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzO1xuQEAgLTUzMyw2ICYjNDM7NTM1LDkgQEAgdm9pZCBsZWRfdHJpZ2dlcl9ibGlua19vbmVzaG90KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcixcbiB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpO1xuIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4mIzQzO1xuJiM0Mztib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfc2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiBcdFx0XHRcdFx0dm9pZCAqdHJpZ2dlcl9kYXRhKVxuQEAgLTU4NCw2ICYjNDM7NTg5LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGxlZF9zZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCAqbGVkX2dldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4ge1xuQEAgLTU5OCw2ICYjNDM7NjEwLDEzIEBAIGxlZF90cmlnZ2VyX2dldF9icmlnaHRuZXNzKGNvbnN0IHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcilcbiBcbiAjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlMgKi9cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IGJvb2wgYWN0aXZhdGUpIHt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKiBUcmlnZ2VyIHNwZWNpZmljIGVudW0gKi9cbiBlbnVtIGxlZF90cmlnZ2VyX25ldGRldl9tb2RlcyB7XG4gXHRUUklHR0VSX05FVERFVl9MSU5LID0gMCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSX05FVERFViYjMzQ7LAogICAgJiMzNDtJREVBUEFEX0xBUFRPUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZCYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sJiMzNDssCiAgICAmIzM0O3RyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24mIzM0OywKICAgICYjMzQ7bGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCYjMzQ7LAogICAgJiMzNDtfX2xlZF90cmlnZ2VyX3NldCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfdHJpZ19vZmZsb2FkZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgTEVEIHRyaWdnZXIgc3Vic3lzdGVtLCBhZGRpbmcgc3VwcG9ydCBmb3IgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbnMgYW5kIG9mZmxvYWQgc3RhdGUgcmVwb3J0aW5nLiBUaGVzZSBuZXcgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhdHRyaWJ1dGVzIChgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAsIGBicmlnaHRuZXNzYCwgYHRyaWdnZXJgKSBhbmQgZHJpdmVyIG5vdGlmaWNhdGlvbnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgc3RhdGUgdHJhbnNpdGlvbiBsb2dpYyBhbmQgb2ZmbG9hZCBxdWVyaWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZGU4ZjBiM2IzMjkzNTQyNjFhMTU1NGQ2OTRlZDNiYjExNTc4MTRiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTggMTc6NTM6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkCmluZGV4IGQ0YzkxOGNjMTFhMTI3Li43ZGM5NWY3YTM1MDVjZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQKQEAgLTc4LDYgJiM0Mzs3OCwzMSBAQCBEZXNjcmlwdGlvbjoKIAkJKHdoaWNoIHdvdWxkIG9mdGVuIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIGRldmljZSB0cmVlIGZvciB0aGUKIAkJaGFyZHdhcmUpLgogCiYjNDM7V2hhdDoJCS9zeXMvY2xhc3MvbGVkcy8mbHQ7bGVkJmd0Oy90cmlnZ2VyX21heV9vZmZsb2FkCiYjNDM7RGF0ZToJCUp1bHkgMjAyNgomIzQzO0tlcm5lbFZlcnNpb246CTcuMwomIzQzO0NvbnRhY3Q6CWxpbnV4LWxlZHNAdmdlci5rZXJuZWwub3JnCiYjNDM7RGVzY3JpcHRpb246CiYjNDM7CQlOYW1lcyBhbmQgc3RhdGVzIG9mIHRyaWdnZXJzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCB0byBoYXJkd2FyZS4KJiM0MzsJCVN1Y2ggdHJpZ2dlcnMgYXJlIGFsc28gY2FsbGVkICYjMzQ7aGFyZHdhcmUgY29udHJvbCB0cmlnZ2VyJiMzNDsgaW4gc29tZQomIzQzOwkJY29udGV4dC4KJiM0MzsKJiM0MzsJCU9ubHkgZXhpc3RzIHdoZW4gdGhlIExFRCBzdXBwb3J0cyB0cmlnZ2VyIG9mZmxvYWQuCiYjNDM7CiYjNDM7CQlSZWFkaW5nIHRoaXMgZmlsZSByZXR1cm5zIGEgbGlzdCBvZiB0cmlnZ2VycyB0aGF0IGFyZSBjYXBhYmxlIHRvCiYjNDM7CQliZSBvZmZsb2FkZWQuIFRoZSBvcHRpb25hbCBicmFja2V0cyBhcm91bmQgdGhlIHRyaWdnZXIgbmFtZQomIzQzOwkJaW5kaWNhdGUgdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IHRyaWdnZXI6CiYjNDM7CiYjNDM7CQktIGBmb29fdHJpZ2dlcmA6IHRoZSB0cmlnZ2VyIGlzIG5vdCBzZWxlY3RlZC4KJiM0MzsJCS0gYCZsdDtmb29fdHJpZ2dlciZndDtgOiB0aGUgdHJpZ2dlciBpcyBzZWxlY3RlZCwgYnV0IGZhbGxzIGJhY2sgdG8KJiM0MzsJCSAgc29mdHdhcmUgYmxpbmsgZm9yIHNvbWUgcmVhc29uIChlLmcuLCBpbmNvbXBhdGlibGUgdHJpZ2dlcgomIzQzOwkJICBwYXJhbWV0ZXJzKQomIzQzOwkJLSBgW2Zvb190cmlnZ2VyXWA6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkIGFuZCBvZmZsb2FkZWQgdG8KJiM0MzsJCSAgaGFyZHdhcmUuCiYjNDM7CiYjNDM7CQlUaGUgJiMzNDtuZXRkZXYmIzM0OyB0cmlnZ2VyIGFsc28gcHJvdmlkZXMgYSBjdXN0b20gYXR0cmlidXRlIHRvCiYjNDM7CQlpbmRpY2F0ZSBpdHMgc3RhdGUsIHNlZSBgL3N5cy9jbGFzcy9sZWRzLyZsdDtsZWQmZ3Q7L29mZmxvYWRlZGAuCiYjNDM7CiBXaGF0OgkJL3N5cy9jbGFzcy9sZWRzLyZsdDtsZWQmZ3Q7L2ludmVydGVkCiBEYXRlOgkJSmFudWFyeSAyMDExCiBLZXJuZWxWZXJzaW9uOgkyLjYuMzgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXYKaW5kZXggZWQ0NmIzN2FiOGEyODQuLmE1MTQ2ZWExZTNlNjFjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldgpAQCAtNzUsNiAmIzQzOzc1LDkgQEAgRGVzY3JpcHRpb246CiAJCUlmIDEsIHRoZSBMRUQgYmxpbmtpbmcgaW4gcmVxdWVzdGVkIG1vZGUgaXMgb2ZmbG9hZGVkIHRvCiAJCWhhcmR3YXJlLgogCiYjNDM7CQlMRUQgdHJpZ2dlciBjb3JlIGFsc28gcHJvdmlkZXMgYSBnZW5lcmljIGF0dHJpYnV0ZSBmb3IgdGhpcwomIzQzOwkJcHVycG9zZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvJmx0O2xlZCZndDsvdHJpZ2dlcl9tYXlfb2ZmbG9hZGAuCiYjNDM7CiBXaGF0OgkJL3N5cy9jbGFzcy9sZWRzLyZsdDtsZWQmZ3Q7L2xpbmtfMTAKIERhdGU6CQlKdW4gMjAyMwogS2VybmVsVmVyc2lvbjoJNi41CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QKaW5kZXggMzkxMzk2NmNmZGFjMDQuLmFkYmM1N2I5ZjQ5YzMzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0CkBAIC0yNDIsNiAmIzQzOzI0Miw5IEBAIG9wcyBhbmQgbmVlZHMgdG8gZGVjbGFyZSBzcGVjaWZpYyBzdXBwb3J0IGZvciB0aGUgc3VwcG9ydGVkIHRyaWdnZXJzLgogCiBXaXRoIGh3IGNvbnRyb2wgd2UgcmVmZXIgdG8gdGhlIExFRCBkcml2ZW4gYnkgaGFyZHdhcmUuCiAKJiM0MztBIHN5c2ZzIGF0dHJpYnV0ZSBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAgaXMgcHJvdmlkZWQgZm9yIHVzZXJzcGFjZSB0bwomIzQzO3F1ZXJ5IHN1cHBvcnRlZCB0cmlnZ2VycyBhbmQgdGhlaXIgc3RhdGVzLgomIzQzOwogTEVEIGRyaXZlciBtdXN0IGRlZmluZSB0aGUgZm9sbG93aW5nIHZhbHVlIHRvIHN1cHBvcnQgaHcgY29udHJvbDoKIAogICAgIC0gaHdfY29udHJvbF90cmlnZ2VyOgpAQCAtMjk4LDYgJiM0MzszMDEsMTUgQEAgTEVEIGRyaXZlciBtdXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEFQSSB0byBzdXBwb3J0IGh3IGNvbnRyb2w6CiAgICAgICAgICAgICAgICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZGV2aWNlIG9yIE5VTEwgaWYgbm90aGluZwogICAgICAgICAgICAgICAgIGlzIGN1cnJlbnRseSBhdHRhY2hlZC4KIAomIzQzO0xFRCB0cmlnZ2VyIHNob3VsZCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gaW5kaWNhdGUgaHcgY29udHJvbDoKJiM0MzsgICAgLSBvZmZsb2FkZWQ6CiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdHJpZ2dlciBpcyBjdXJyZW50bHkKJiM0MzsgICAgICAgICAgICAgICAgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlLgomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBJZiBhIHRyaWdnZXIgZG9lc24mIzM5O3QgaW1wbGVtZW50IHRoaXMgY2FsbGJhY2ssIHRoZSBkZWZhdWx0CiYjNDM7ICAgICAgICAgICAgICAgIHZhbHVlIHdpbGwgYmUgdHJ1ZSBmb3IgcHJpdmF0ZSB0cmlnZ2VycyBhbmQgZmFsc2UgZm9yIGdlbmVyaWMKJiM0MzsgICAgICAgICAgICAgICAgb25lcy4KJiM0MzsKIExFRCBkcml2ZXIgY2FuIGFjdGl2YXRlIGFkZGl0aW9uYWwgbW9kZXMgYnkgZGVmYXVsdCB0byB3b3JrYXJvdW5kIHRoZQogaW1wb3NzaWJpbGl0eSBvZiBzdXBwb3J0aW5nIGVhY2ggZGlmZmVyZW50IG1vZGUgb24gdGhlIHN1cHBvcnRlZCB0cmlnZ2VyLgogRXhhbXBsZXMgYXJlIGhhcmRjb2RpbmcgdGhlIGJsaW5rIHNwZWVkIHRvIGEgc2V0IGludGVydmFsLCBlbmFibGUgc3BlY2lhbApAQCAtMzExLDkgJiM0MzszMjMsNjkgQEAgdGhlIGVuZCB1c2UgaHdfY29udHJvbF9zZXQgdG8gYWN0aXZhdGUgaHcgY29udHJvbC4KIEEgdHJpZ2dlciBjYW4gdXNlIGh3X2NvbnRyb2xfZ2V0IHRvIGNoZWNrIGlmIGEgTEVEIGlzIGFscmVhZHkgaW4gaHcgY29udHJvbAogYW5kIGluaXQgdGhlaXIgZmxhZ3MuCiAKJiM0MztBbHRlcm5hdGl2ZWx5LCBhIHByaXZhdGUgdHJpZ2dlciBjYW4gYmUgaW1wbGVtZW50ZWQgYWxvbmcgd2l0aCB0aGUgTEVEIGRyaXZlciBpZgomIzQzO3RoZSBMRUQmIzM5O3MgaGFyZHdhcmUgY29udHJvbCBkb2VzbiYjMzk7dCBmaXQgYW55IGdlbmVyaWMgdHJpZ2dlci4gVG8gYXNzb2NpYXRlIHRoZQomIzQzO3ByaXZhdGUgdHJpZ2dlciB3aXRoIHRoZSBMRUQgY2xhc3NkZXYsIHRoZWlyIGB0cmlnZ2VyX3R5cGVgIG11c3QgYmUgdGhlIHNhbWUuIFRvCiYjNDM7ZGVjbGFyZSB0aGF0IHRoZSBwcml2YXRlIHRyaWdnZXIgcHJvdmlkZXMgaGFyZHdhcmUgY29udHJvbCBmb3IgdGhlIGFzc29jaWF0ZWQKJiM0MztMRUQgY2xhc3NkZXYsIHNldCB0aGUgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgc3RyaW5nIHRvIHRoZSB0cmlnZ2VyJiMzOTtzIG5hbWUuIFNpbmNlCiYjNDM7Ym90aCB0aGUgTEVEIGNsYXNzZGV2IGFuZCB0aGUgcHJpdmF0ZSB0cmlnZ2VyIGFyZSBpbiB0aGUgc2FtZSBMRUQgZHJpdmVyLCBpdCYjMzk7cwomIzQzO25vdCBuZWNlc3NhcnkgZm9yIHRoZW0gdG8gY29vcmRpbmF0ZSB2aWEgYGh3X2NvbnRyb2xfKmAgY2FsbGJhY2tzLgomIzQzOwogV2hlbiB0aGUgTEVEIGlzIGluIGh3IGNvbnRyb2wsIG5vIHNvZnR3YXJlIGJsaW5rIGlzIHBvc3NpYmxlIGFuZCBkb2luZyBzbwogd2lsbCBlZmZlY3RpdmVseSBkaXNhYmxlIGh3IGNvbnRyb2wuCiAKJiM0MztIYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uCiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO1NvbWUgaGFyZHdhcmUgY2FuIGF1dG9ub21vdXNseSBhY3RpdmF0ZS9kZWFjdGl2YXRlIGhhcmR3YXJlIGNvbnRyb2wuIEFmdGVyIHRoYXQsCiYjNDM7dGhlIExFRCBoYXJkd2FyZSBub3RpZmllcyB0aGUgTEVEIGRyaXZlci4KJiM0MzsKJiM0MztJZiB0aGUgZHJpdmVyIGNhbiBkZXRlY3Qgc3VjaCB0cmFuc2l0aW9ucyBhbmQgdGh1cyB3YW50cyB0byBub3RpZnkgdGhlIExFRCBjb3JlCiYjNDM7dG8gdXBkYXRlIHRoZSBjdXJyZW50IHRyaWdnZXIgdGhlbiB0aGUgYExFRF9UUklHX0hXX0NIQU5HRURgIGZsYWcgbXVzdCBiZSBzZXQgaW4KJiM0MztmbGFncyBiZWZvcmUgcmVnaXN0ZXJpbmcuIFRvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIGFjY29yZGluZ2x5LCBjYWxsCiYjNDM7YGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIG9uIHRoZSBMRUQgY2xhc3NkZXYuCiYjNDM7CiYjNDM7VGhpcyBjYXBhYmlsaXR5IGlzIHJlc3RyaWN0ZWQgdG8gdGhlIExFRCBkZXZpY2UmIzM5O3MgcHJpdmF0ZSB0cmlnZ2VyLiBUaGUgcHJpdmF0ZQomIzQzO3RyaWdnZXIgbXVzdCBoYXZlIGJlZW4gcHJvcGVybHkgcmVnaXN0ZXJlZCAoc2VlIGFib3ZlKSBhbmQgbmFtZWQgYWZ0ZXIKJiM0MztgaHdfY29udHJvbF90cmlnZ2VyYC4KJiM0MzsKJiM0MztPbmx5IHR3byB0cmFuc2l0aW9ucyBhcmUgZGVmaW5lZDoKJiM0MzsKJiM0MzstICYjMzQ7bm9uZSYjMzQ7ID0mZ3Q7IHByaXZhdGUgdHJpZ2dlcjoKJiM0MzsgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2wKJiM0MzsgICAgICAgIGFuZCB3aGVuICYjMzQ7bm9uZSYjMzQ7IChpLmUuLCBubyB0cmlnZ2VyKSBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiB0aGUgcHJpdmF0ZQomIzQzOyAgICAgICAgdHJpZ2dlciBpcyBhbHJlYWR5IGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5CiYjNDM7ICAgICAgICBhIG5vLW9wLgomIzQzOwomIzQzOyAgICAgICAgVGhlIGFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhcwomIzQzOyAgICAgICAgbm9ybWFsLgomIzQzOwomIzQzOyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGUKJiM0MzsgICAgICAgIGFjdGl2YXRpb24gc2VxdWVuY2UgZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXMgY3VycmVudGx5IGluIGhhcmR3YXJlCiYjNDM7ICAgICAgICBjb250cm9sLgomIzQzOwomIzQzOyAgICAgICAgSWYgZXJyb3Igb2NjdXJzIGluIHRoZSBhY3RpdmF0aW9uIHNlcXVlbmNlLCB0aGUgTEVEIFRyaWdnZXIgY29yZSByZXZlcnRzCiYjNDM7ICAgICAgICB0aGUgZWZmZWN0aXZlIHRyaWdnZXIgdG8gJiMzNDtub25lJiMzNDsuCiYjNDM7CiYjNDM7LSBwcml2YXRlIHRyaWdnZXIgPSZndDsgJiMzNDtub25lJiMzNDsKJiM0MzsgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0ZXMgaGFyZHdhcmUgY29udHJvbAomIzQzOyAgICAgICAgYW5kIHdoZW4gdGhlIHByaXZhdGUgdHJpZ2dlciBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiAmIzM0O25vbmUmIzM0OyAoaS5lLiwgbm8KJiM0MzsgICAgICAgIHRyaWdnZXIpIGlzIGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5IGEKJiM0MzsgICAgICAgIG5vLW9wLgomIzQzOwomIzQzOyAgICAgICAgVGhlIGRlYWN0aXZhdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIHByaXZhdGUgdHJpZ2dlciB3aWxsIGJlIGV4ZWN1dGVkIGFzCiYjNDM7ICAgICAgICBub3JtYWwsIGV4Y2VwdCB0aGF0IHRoZSBjdXJyZW50IExFRCBicmlnaHRuZXNzIGlzIHJldGFpbmVkLiBUaGUgcmVhc29uCiYjNDM7ICAgICAgICBmb3Iga2VlcGluZyB0aGUgYnJpZ2h0bmVzcyB1bmNoYW5nZWQgaXMgdGhhdCBzb21lIGhhcmR3YXJlIG1heSBjaG9vc2UgYQomIzQzOyAgICAgICAgc3BlY2lmaWMgYnJpZ2h0bmVzcyBpbnN0ZWFkIG9mIHNpbXBseSB0dXJuaW5nIG9mZiB0aGUgTEVEIGFmdGVyCiYjNDM7ICAgICAgICBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0aW5nIGhhcmR3YXJlIGNvbnRyb2wuCiYjNDM7CiYjNDM7ICAgICAgICBUaGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlciBtdXN0IGJlIGFibGUgdG8gaGFuZGxlIHRoZQomIzQzOyAgICAgICAgZGVhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIG5vdCBjdXJyZW50bHkgaW4gaGFyZHdhcmUKJiM0MzsgICAgICAgIGNvbnRyb2wuCiYjNDM7CiYjNDM7SWYgdGhlIGN1cnJlbnQgdHJpZ2dlciBpcyBuZWl0aGVyIHRoZSBwcml2YXRlIHRyaWdnZXIgbm9yICYjMzQ7bm9uZSYjMzQ7LCBubyB0cmFuc2l0aW9uCiYjNDM7d2lsbCBiZSBtYWRlLgomIzQzOwogS25vd24gSXNzdWVzCiA9PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jIGIvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCmluZGV4IGE1MWIwZWQ1Mzg4NjQ0Li4yNDYwZmNmMGM0NjkwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYwpAQCAtMjcsMTYgJiM0MzsyNyw2IEBAIHN0YXRpYyBMSVNUX0hFQUQobGVkc19sb29rdXBfbGlzdCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGVkc193cTsKIAotc3RhdGljIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKLXsKLSNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwotCWd1YXJkKHJ3c2VtX3JlYWQpKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJfbG9jayk7Ci0JcmV0dXJuIGxlZF9jZGV2LSZndDt0cmlnZ2VyICZhbXA7JmFtcDsgbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O3RyaWdnZXJfdHlwZTsKLSNlbHNlCi0JcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC03NCw2ICYjNDM7NjQsOSBAQCBzdGF0aWMgc3NpemVfdCBicmlnaHRuZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAogCWlmIChzdGF0ZSA9PSBMRURfT0ZGKQogCQlsZWRfdHJpZ2dlcl9yZW1vdmUobGVkX2NkZXYpOwomIzQzOwllbHNlCiYjNDM7CQlsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChsZWRfY2Rldik7CiYjNDM7CiAJbGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBzdGF0ZSk7CiAKIAlyZXQgPSBzaXplOwpAQCAtMTAzLDggJiM0Mzs5NiwzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGxlZF90cmlnZ2VyX2Jpbl9hdHRyc1tdID0gewogCSZhbXA7YmluX2F0dHJfdHJpZ2dlciwKIAlOVUxMLAogfTsKJiM0MzsKJiM0MztzdGF0aWMgREVWSUNFX0FUVFJfUk8odHJpZ2dlcl9tYXlfb2ZmbG9hZCk7CiYjNDM7c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxlZF90cmlnZ2VyX2F0dHJzW10gPSB7CiYjNDM7CSZhbXA7ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyLAomIzQzOwlOVUxMCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdW1vZGVfdCBsZWRfdHJpZ2dlcl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAomIzQzOwkJCQkgICAgICBpbnQgaWR4KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0ga29ial90b19kZXYoa29iaik7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CiYjNDM7CWlmIChhdHRyID09ICZhbXA7ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyKQomIzQzOwkJcmV0dXJuIGxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgPyBhdHRyLSZndDttb2RlIDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGF0dHItJmd0O21vZGU7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbGVkX3RyaWdnZXJfZ3JvdXAgPSB7CiAJLmJpbl9hdHRycyA9IGxlZF90cmlnZ2VyX2Jpbl9hdHRycywKJiM0MzsJLmF0dHJzID0gbGVkX3RyaWdnZXJfYXR0cnMsCiYjNDM7CS5pc192aXNpYmxlID0gbGVkX3RyaWdnZXJfaXNfdmlzaWJsZSwKIH07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jIGIvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jCmluZGV4IGIxMjIzMjE4YmRhMTEzLi42YWUyOGNiZDFjNzc4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYwpAQCAtNyw5ICYjNDM7NywxMiBAQAogICogQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSAmbHQ7cnB1cmRpZUBvcGVuZWRoYW5kLmNvbSZndDsKICAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sb2NrZGVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aW1lci5oJmd0OwpAQCAtMzMsNiAmIzQzOzM2LDMzIEBAIHRyaWdnZXJfcmVsZXZhbnQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKIAlyZXR1cm4gIXRyaWctJmd0O3RyaWdnZXJfdHlwZSB8fCB0cmlnLSZndDt0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtJmd0O3RyaWdnZXJfdHlwZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKCFsZWRfY2Rldi0mZ3Q7dHJpZ2dlcikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCFsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyIHx8CiYjNDM7CSAgICBzdHJjbXAobGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciwgbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O25hbWUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAobGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O29mZmxvYWRlZCkKJiM0MzsJCXJldHVybiBsZWRfY2Rldi0mZ3Q7dHJpZ2dlci0mZ3Q7b2ZmbG9hZGVkKGxlZF9jZGV2KTsKJiM0MzsKJiM0MzsJZGV2X3dhcm5fb25jZShsZWRfY2Rldi0mZ3Q7ZGV2LCAmIzM0O2h3IGNvbnRyb2wgdHJpZ2dlciAlcyBkb2VzbiYjMzk7dCBpbXBsZW1lbnQgb2ZmbG9hZGVkKClcbiYjMzQ7LAomIzQzOwkJICAgICAgbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O25hbWUpOwomIzQzOwomIzQzOwlyZXR1cm4gbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O3RyaWdnZXJfdHlwZTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJZ3VhcmQocndzZW1fcmVhZCkoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrKTsKJiM0MzsJcmV0dXJuIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQpOwomIzQzOwogc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLAogCQkJICBsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpCkBAIC0xNjMsNyAmIzQzOzE5Myw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZWFkKTsKIAogLyogQ2FsbGVyIG11c3QgZW5zdXJlIGxlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2sgaGVsZCAqLwotaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQomIzQzO3N0YXRpYyBpbnQgX19sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZywKJiM0MzsJCQkgICAgIGJvb2wgaHdfdHJpZ2dlcmVkKQogewogCWNoYXIgKmV2ZW50ID0gTlVMTDsKIAljaGFyICplbnZwWzJdOwpAQCAtMTk0LDcgJiM0MzsyMjUsMjEgQEAgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQogCQlsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9kYXRhID0gTlVMTDsKIAkJbGVkX2NkZXYtJmd0O2FjdGl2YXRlZCA9IGZhbHNlOwogCQlsZWRfY2Rldi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5MRURfSU5JVF9ERUZBVUxUX1RSSUdHRVI7Ci0JCWxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2RldiwgTEVEX09GRik7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogSGFyZHdhcmUgbWF5IGhhdmUgc2VsZWN0ZWQgYSBuZXcgYnJpZ2h0bmVzcyBsZXZlbCBkdXJpbmcgaXRzCiYjNDM7CQkgKiBoYXJkd2FyZSBjb250cm9sIHRyYW5zaXRpb24sIHNvIG9ubHkgcmVzZXQgYnJpZ2h0bmVzcyBpZiB3ZQomIzQzOwkJICogYXJlIHN3aXRjaGluZyB0byBhbm90aGVyIHRyaWdnZXIgb3IgaWYgdGhlIHN3aXRjaGluZyBpcyBub3QKJiM0MzsJCSAqIGhhcmR3YXJlIHRyaWdnZXJlZC4KJiM0MzsJCSAqCiYjNDM7CQkgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgZXJyb3IgcGF0aCwgYXMgcnVubmluZwomIzQzOwkJICogaW50byB0aGUgZXJyb3IgcGF0aCBpbXBsaWVzIGEgbm9uZSA9Jmd0OyBwcml2YXRlIHRyaWdnZXIKJiM0MzsJCSAqIHRyYW5zaXRpb24uIFRoaXMgaGludHMgdGhhdCB0aGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGUKJiM0MzsJCSAqIHRyaWdnZXIgbXVzdCBoYXZlIHNvbWUgZnVuZGFtZW50YWwgYnVncywgc28gZG9uJiMzOTt0IGJvdGhlcgomIzQzOwkJICogbGVhdmluZyB0aGUgTEVEIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHRyaWcgfHwgIWh3X3RyaWdnZXJlZCkKJiM0MzsJCQlsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIExFRF9PRkYpOwogCX0KIAlpZiAodHJpZykgewogCQlzcGluX2xvY2soJmFtcDt0cmlnLSZndDtsZWRkZXZfbGlzdF9sb2NrKTsKQEAgLTI1OCw2ICYjNDM7MzAzLDExIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKIAogCXJldHVybiByZXQ7CiB9CiYjNDM7CiYjNDM7aW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCB0cmlnLCBmYWxzZSk7CiYjNDM7fQogRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0KTsKIAogdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCkBAIC0yNjgsNiAmIzQzOzMxOCwxNSBAQCB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZSk7CiAKJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJZ3VhcmQocndzZW1fd3JpdGUpKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKQomIzQzOwkJbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wpOwomIzQzOwogc3RhdGljIGJvb2wgbGVkX21hdGNoX2RlZmF1bHRfdHJpZ2dlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQkgICAgICBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpCiB7CkBAIC0zMTMsNiAmIzQzOzM3MiwzMiBAQCB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQpOwogCiYjNDM7c3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CXN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZzsKJiM0MzsJYm9vbCBoaXQsIG9mZmxvYWRlZDsKJiM0MzsJaW50IGxlbjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7bGVkX2NkZXYtJmd0O2xlZF9hY2Nlc3MpOwomIzQzOwlndWFyZChyd3NlbV9yZWFkKSgmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2spOwomIzQzOwomIzQzOwl0cmlnID0gbGVkX2NkZXYtJmd0O3RyaWdnZXI7CiYjNDM7CiYjNDM7CW9mZmxvYWRlZCA9IF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7CiYjNDM7CWhpdCA9IG9mZmxvYWRlZCB8fCAodHJpZyAmYW1wOyZhbXA7ICFzdHJjbXAobGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciwgdHJpZy0mZ3Q7bmFtZSkpOwomIzQzOwomIzQzOwkvKiBbb2ZmbG9hZGVkXSAmbHQ7YWN0aXZlX2J1dF9ub3Rfb2ZmbG9hZGVkJmd0OyBpbmFjdGl2ZSAqLwomIzQzOwlsZW4gPSBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcyVzJXNcbiYjMzQ7LAomIzQzOwkJCSBvZmZsb2FkZWQgPyAmIzM0O1smIzM0OyA6IChoaXQgPyAmIzM0OyZsdDsmIzM0OyA6ICYjMzQ7JiMzNDspLAomIzQzOwkJCSBsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyLAomIzQzOwkJCSBvZmZsb2FkZWQgPyAmIzM0O10mIzM0OyA6IChoaXQgPyAmIzM0OyZndDsmIzM0OyA6ICYjMzQ7JiMzNDspKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGxlbjsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KTsKJiM0MzsKIC8qIExFRCBUcmlnZ2VyIEludGVyZmFjZSAqLwogCiBpbnQgbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQpAQCAtNDAzLDYgJiM0Mzs0ODgsNjMgQEAgaW50IGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRAomIzQzO3N0YXRpYyB2b2lkIGxlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSwKJiM0MzsJCQkJCQkgc3RydWN0IGxlZF90cmlnZ2VyICpoY190cmlnKQomIzQzO3sKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmICghbGVkX2NkZXYtJmd0O3RyaWdnZXIpIHsKJiM0MzsJCS8qICYjMzQ7bm9uZSYjMzQ7ID0mZ3Q7IHByaXZhdGUgdHJpZ2dlci4gKi8KJiM0MzsJCWlmIChhY3RpdmF0ZSkKJiM0MzsJCQllcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgaGNfdHJpZywgdHJ1ZSk7CiYjNDM7CX0gZWxzZSBpZiAobGVkX2NkZXYtJmd0O3RyaWdnZXIgPT0gaGNfdHJpZykgewomIzQzOwkJLyogcHJpdmF0ZSB0cmlnZ2VyID0mZ3Q7ICYjMzQ7bm9uZSYjMzQ7LiAqLwomIzQzOwkJaWYgKCFhY3RpdmF0ZSkKJiM0MzsJCQllcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgTlVMTCwgdHJ1ZSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBPdGhlciB0cmlnZ2VyIGlzIGFjdGl2ZS4gKi8KJiM0MzsJCWRldl9kYmcobGVkX2NkZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O0lnbm9yaW5nIGh3IGNvbnRyb2wgdHJhbnNpdGlvbiAoJXMgJXMpIHdoaWxlICVzIGlzIGFjdGl2ZSYjMzQ7LAomIzQzOwkJCWFjdGl2YXRlID8gJiMzNDthY3RpdmF0ZSYjMzQ7IDogJiMzNDtkZWFjdGl2YXRlJiMzNDssIGhjX3RyaWctJmd0O25hbWUsCiYjNDM7CQkJbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O25hbWUpOwomIzQzOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlkZXZfd2FybihsZWRfY2Rldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byAlcyAlcyBpbiBodyBjb250cm9sIHRyYW5zaXRpb246ICVkJiMzNDssCiYjNDM7CQkJIGFjdGl2YXRlID8gJiMzNDthY3RpdmF0ZSYjMzQ7IDogJiMzNDtkZWFjdGl2YXRlJiMzNDssIGhjX3RyaWctJmd0O25hbWUsIGVycik7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZzsKJiM0MzsKJiM0MzsJLyogUmVzdHJpY3RlZCB0byBwcml2YXRlIHRyaWdnZXJzLiAqLwomIzQzOwlpZiAoV0FSTl9PTighKGxlZF9jZGV2LSZndDtmbGFncyAmYW1wOyBMRURfVFJJR19IV19DSEFOR0VEKSB8fAomIzQzOwkJICAgICFsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyIHx8ICFsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl90eXBlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsICZhbXA7dHJpZ2dlcnNfbGlzdF9sb2NrKSB7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyaWcsICZhbXA7dHJpZ2dlcl9saXN0LCBuZXh0X3RyaWcpIHsKJiM0MzsJCQlpZiAodHJpZy0mZ3Q7dHJpZ2dlcl90eXBlID09IGxlZF9jZGV2LSZndDt0cmlnZ2VyX3R5cGUgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAhc3RyY21wKHRyaWctJmd0O25hbWUsIGxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIpKSB7CiYjNDM7CQkJCWd1YXJkKHJ3c2VtX3dyaXRlKSgmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2spOwomIzQzOwomIzQzOwkJCQlsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24obGVkX2NkZXYsIGFjdGl2YXRlLCB0cmlnKTsKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlkZXZfZXJyKGxlZF9jZGV2LSZndDtkZXYsCiYjNDM7CQkmIzM0OyVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXG4mIzM0OywKJiM0MzsJCV9fZnVuY19fLCBsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQgKi8KJiM0MzsKIC8qIFNpbXBsZSBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi8KIAogdm9pZCBsZWRfdHJpZ2dlcl9ldmVudChzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMKaW5kZXggMTg0NGQwY2Q1ZjUyODQuLjZkYjgzZDAxNTI3NzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jCkBAIC04NSwxMiAmIzQzOzg1LDE4IEBAIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKIAlyZXR1cm4gY3Jvc19lY19sZWRfc2VuZF9jbWQocHJpdi0mZ3Q7Y3Jvc19lYywgJmFtcDthcmcpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgY3Jvc19lY19sZWRfdHJpZ2dlcl9vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgY3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlOwogCiBzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIGNyb3NfZWNfbGVkX3RyaWdnZXIgPSB7CiAJLm5hbWUgPSAmIzM0O2Nocm9tZW9zLWF1dG8mIzM0OywKIAkudHJpZ2dlcl90eXBlID0gJmFtcDtjcm9zX2VjX2xlZF90cmlnZ2VyX3R5cGUsCiAJLmFjdGl2YXRlID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZSwKJiM0MzsJLm9mZmxvYWRlZCA9IGNyb3NfZWNfbGVkX3RyaWdnZXJfb2ZmbG9hZGVkLAogfTsKIAogc3RhdGljIGludCBjcm9zX2VjX2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmMKaW5kZXggZWQ2YTQ3YmJiNDRmOWMuLjMyZDQwZDE3NmQzZjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuYwpAQCAtMTk1LDEwICYjNDM7MTk1LDE2IEBAIHN0YXRpYyB2b2lkIG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpCiAJCQllcnIpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgb21uaWFfaHd0cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBvbW5pYV9od190cmlnZ2VyID0gewogCS5uYW1lCQk9ICYjMzQ7b21uaWEtbWN1JiMzNDssCiAJLmFjdGl2YXRlCT0gb21uaWFfaHd0cmlnX2FjdGl2YXRlLAogCS5kZWFjdGl2YXRlCT0gb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUsCiYjNDM7CS5vZmZsb2FkZWQJPSBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkLAogCS50cmlnZ2VyX3R5cGUJPSAmYW1wO29tbmlhX2h3X3RyaWdnZXJfdHlwZSwKIH07CiAKQEAgLTI1MSw2ICYjNDM7MjU3LDcgQEAgc3RhdGljIGludCBvbW5pYV9sZWRfcmVnaXN0ZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IG9tbmlhX2xlZCAqbGVkLAogCSAqIGJ5IExFRCBjbGFzcyBmcm9tIHRoZSBsaW51eCxkZWZhdWx0LXRyaWdnZXIgcHJvcGVydHkuCiAJICovCiAJY2Rldi0mZ3Q7ZGVmYXVsdF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lOwomIzQzOwljZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgPSBvbW5pYV9od190cmlnZ2VyLm5hbWU7CiAKIAkvKiBQdXQgdGhlIExFRCBpbnRvIHNvZnR3YXJlIG1vZGUgKi8KIAlyZXQgPSBvbW5pYV9jbWRfd3JpdGVfdTgoY2xpZW50LCBPTU5JQV9DTURfTEVEX01PREUsIE9NTklBX0NNRF9MRURfTU9ERV9MRUQobGVkLSZndDtyZWcpIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLmggYi9kcml2ZXJzL2xlZHMvbGVkcy5oCmluZGV4IGJlZTQ2NjUxZTA2OGY3Li5iMDhhMjg5Mzk3ZTQ2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkcy5oCkBAIC0yNyw2ICYjNDM7MjcsOCBAQCBzc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAogc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQljb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZiwKIAkJCWxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCk7CiYjNDM7c3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CiAKIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIGxlZHNfbGlzdF9sb2NrOwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbGVkc19saXN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWcKaW5kZXggYzExMjgyYTc0YjVhYzMuLjc5ODEyMjE1NDA0OWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWcKQEAgLTksNiAmIzQzOzksMTUgQEAgbWVudWNvbmZpZyBMRURTX1RSSUdHRVJTCiAKIGlmIExFRFNfVFJJR0dFUlMKIAomIzQzO2NvbmZpZyBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQKJiM0MzsJYm9vbCAmIzM0O0xFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnQmIzM0OwomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBoYXJkd2FyZSBpbml0aWF0ZWQgaGFyZHdhcmUgY29udHJvbAomIzQzOwkgIHRyYW5zaXRpb25zLCB3aGVyZSB0aGUgTEVEIGhhcmR3YXJlIGF1dG9ub21vdXNseSBzd2l0Y2hlcyBiZXR3ZWVuCiYjNDM7CSAgJiMzNDtub25lJiMzNDsgKGkuZS4sIG5vIHRyaWdnZXIpIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyLgomIzQzOwomIzQzOwkgIFNlZSBEb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgZm9yIGRldGFpbHMuCiYjNDM7CiBjb25maWcgTEVEU19UUklHR0VSX1RJTUVSCiAJdHJpc3RhdGUgJiMzNDtMRUQgVGltZXIgVHJpZ2dlciYjMzQ7CiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMKaW5kZXggNjRjMDc4ZTk5N2YyOGEuLmEyNjEwOWNhNGIxYzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMKQEAgLTc1NCwxMCAmIzQzOzc1NCwxOCBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfdHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogCWtmcmVlKHRyaWdnZXJfZGF0YSk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBuZXRkZXZfdHJpZ19vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGVkX25ldGRldl9kYXRhICp0cmlnZ2VyX2RhdGEgPSBsZWRfZ2V0X3RyaWdnZXJfZGF0YShsZWRfY2Rldik7CiYjNDM7CiYjNDM7CXJldHVybiB0cmlnZ2VyX2RhdGEtJmd0O2h3X2NvbnRyb2w7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBuZXRkZXZfbGVkX3RyaWdnZXIgPSB7CiAJLm5hbWUgPSAmIzM0O25ldGRldiYjMzQ7LAogCS5hY3RpdmF0ZSA9IG5ldGRldl90cmlnX2FjdGl2YXRlLAogCS5kZWFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfZGVhY3RpdmF0ZSwKJiM0MzsJLm9mZmxvYWRlZCA9IG5ldGRldl90cmlnX29mZmxvYWRlZCwKIAkuZ3JvdXBzID0gbmV0ZGV2X3RyaWdfZ3JvdXBzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZwppbmRleCA0NDQzZjQwZWY4YWE3ZS4uZTkyYjFlOTAwNzk1MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnCkBAIC0xNiw2ICYjNDM7MTYsNyBAQCBjb25maWcgSURFQVBBRF9MQVBUT1AKIAlzZWxlY3QgSU5QVVRfU1BBUlNFS01BUAogCXNlbGVjdCBORVdfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTCiYjNDM7CXNlbGVjdCBMRURTX1RSSUdHRVJTCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MgY29udGFpbnMgZHJpdmVycyBmb3IKIAkgIHJma2lsbCBzd2l0Y2gsIGhvdGtleSwgZmFuIGNvbnRyb2wgYW5kIGJhY2tsaWdodCBjb250cm9sLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYwppbmRleCA0ZmJjOTA0ZjFmYzM5MC4uMjUzZDI5NjJiOTI3NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jCkBAIC05LDYgJiM0Mzs5LDcgQEAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgJiMzNDs6ICYjMzQ7IGZtdAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYWNwaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hdG9taWMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iYWNrbGlnaHQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG9wcy5oJmd0OwpAQCAtMjUsNyAmIzQzOzI2LDkgQEAKICNpbmNsdWRlICZsdDtsaW51eC9qaWZmaWVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGVkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sb2NrZGVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fcHJvZmlsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Bvd2VyX3N1cHBseS5oJmd0OwpAQCAtMTM0LDEwICYjNDM7MTM3LDMxIEBAIGVudW0gewogfTsKIAogLyoKLSAqIFRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgc3RhdGVzIC0gMQotICogRnV0dXJlIGtleWJvYXJkIHR5cGVzIG1heSBuZWVkIGEgbmV3IHN5c3RlbSwgaWYgdGhlcmUmIzM5O3MgYSBjb2xsaXNpb24KLSAqIEtCRF9CTF9UUklTVEFURV9BVVRPIGhhcyBubyB3YXkgdG8gcmVwb3J0IG9yIHNldCB0aGUgYXV0byBzdGF0ZQotICogc28gaXQgZWZmZWN0aXZlbHkgaGFzIDMgc3RhdGVzLCBidXQgbmVlZHMgdG8gaGFuZGxlIDQKJiM0MzsgKiBUaGUgZW51bWVyYXRpb24gaGFzIHR3byBwdXJwb3NlczoKJiM0MzsgKiAgIC0gYXMgYW4gaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYWxsIGtub3duIHR5cGVzIG9mIGtleWJvYXJkIGJhY2tsaWdodAomIzQzOyAqICAgLSBhcyBhIG1hbmRhdG9yeSBwYXJhbWV0ZXIgb2YgdGhlIEtCTEMgY29tbWFuZAomIzQzOyAqCiYjNDM7ICogRm9yIGVhY2ggdHlwZSwgdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgdmFsdWVzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8ICAgICAgSGFyZHdhcmUgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8ICAgIDMgfAomIzQzOyAqIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8IEtCRF9CTF9TVEFOREFSRCAgICAgICAgICB8ICAgICAgb2ZmIHwgIG9uIHwgIE4vQSB8ICBOL0EgfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7CiYjNDM7ICogfCBLQkRfQkxfVFJJU1RBVEUgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfCAgTi9BIHwKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0mIzQzOwomIzQzOyAqIHwgS0JEX0JMX1RSSVNUQVRFX0FVVE8gICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgYXV0byB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKgomIzQzOyAqIFdlIG1hcCBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyBmb3IgS0JEX0JMX1RSSVNUQVRFX0FVVE8gYXMgZm9sbG93czoKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8ICBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8CiYjNDM7ICogfCBPcGVyYXRpb24gICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8ICAgICAgfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOwomIzQzOyAqIHwgUmVhZCAgICAgICAgICAgICAgICAgICAgIHwgb2ZmL2F1dG8gfCBsb3cgfCBoaWdoIHwKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8IFdyaXRlICAgICAgICAgICAgICAgICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7CiAgKi8KIGVudW0gewogCUtCRF9CTF9TVEFOREFSRCAgICAgID0gMSwKQEAgLTE0NSw2ICYjNDM7MTY5LDggQEAgZW51bSB7CiAJS0JEX0JMX1RSSVNUQVRFX0FVVE8gPSAzLAogfTsKIAomIzQzOyNkZWZpbmUgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTCTMKJiM0MzsKICNkZWZpbmUgS0JEX0JMX1FVRVJZX1RZUEUJCTB4MQogI2RlZmluZSBLQkRfQkxfVFJJU1RBVEVfVFlQRQkJMHg1CiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9BVVRPX1RZUEUJMHg3CkBAIC0yMDMsNyAmIzQzOzIyOSw5IEBAIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgewogCQlib29sIGluaXRpYWxpemVkOwogCQlpbnQgdHlwZTsKIAkJc3RydWN0IGxlZF9jbGFzc2RldiBsZWQ7Ci0JCXVuc2lnbmVkIGludCBsYXN0X2JyaWdodG5lc3M7CiYjNDM7CQlhdG9taWNfdCBsYXN0X2h3X2JyaWdodG5lc3M7CiYjNDM7CiYjNDM7CQlzdHJ1Y3QgbXV0ZXggbm90aWZfbXV0ZXg7IC8qIHByb3RlY3RzIG5vdGlmaWNhdGlvbnMgKi8KIAl9IGtiZF9ibDsKIAlzdHJ1Y3QgewogCQlib29sIGluaXRpYWxpemVkOwpAQCAtMTU5Miw3ICYjNDM7MTYyMCwyNCBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKGludCB0eXBlKQogCXJldHVybiAodHlwZSA9PSBLQkRfQkxfVFJJU1RBVEUpIHx8ICh0eXBlID09IEtCRF9CTF9UUklTVEFURV9BVVRPKTsKIH0KIAotc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCBpbnQgaHdfYnJpZ2h0bmVzcykKJiM0Mzt7CiYjNDM7CS8qIE9mZiwgbG93IG9yIGhpZ2ggKi8KJiM0MzsJaWYgKGh3X2JyaWdodG5lc3MgJmx0Oz0gcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcykKJiM0MzsJCXJldHVybiBod19icmlnaHRuZXNzOwomIzQzOwomIzQzOwkvKiBBdXRvIChjb250cm9sbGVkIGJ5IEVDIGFjY29yZGluZyB0byBBTFMpLCByZXBvcnQgYXMgb2ZmICovCiYjNDM7CWlmIChwcml2LSZndDtrYmRfYmwudHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyAmYW1wOyZhbXA7CiYjNDM7CSAgICBod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBVbmtub3duIHZhbHVlICovCiYjNDM7CWRldl93YXJuKCZhbXA7cHJpdi0mZ3Q7cGxhdGZvcm1fZGV2aWNlLSZndDtkZXYsCiYjNDM7CQkgJiMzNDtVbmtub3duIGtleWJvYXJkIGJhY2tsaWdodCB2YWx1ZTogJWQmIzM0OywgaHdfYnJpZ2h0bmVzcyk7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAlpbnQgZXJyOwpAQCAtMTYwNiwyMSAmIzQzOzE2NTEsNyBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCS8qIENvbnZlcnQgcmV0dXJuZWQgdmFsdWUgdG8gYnJpZ2h0bmVzcyBsZXZlbCAqLwotCQl2YWx1ZSA9IEZJRUxEX0dFVChLQkRfQkxfR0VUX0JSSUdIVE5FU1MsIHZhbHVlKTsKLQotCQkvKiBPZmYsIGxvdyBvciBoaWdoICovCi0JCWlmICh2YWx1ZSAmbHQ7PSBwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKQotCQkJcmV0dXJuIHZhbHVlOwotCi0JCS8qIEF1dG8sIHJlcG9ydCBhcyBvZmYgKi8KLQkJaWYgKHZhbHVlID09IHByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgJiM0MzsgMSkKLQkJCXJldHVybiAwOwotCi0JCS8qIFVua25vd24gdmFsdWUgKi8KLQkJZGV2X3dhcm4oJmFtcDtwcml2LSZndDtwbGF0Zm9ybV9kZXZpY2UtJmd0O2RldiwKLQkJCSAmIzM0O1Vua25vd24ga2V5Ym9hcmQgYmFja2xpZ2h0IHZhbHVlOiAlbHUmIzM0OywgdmFsdWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldHVybiBGSUVMRF9HRVQoS0JEX0JMX0dFVF9CUklHSFRORVNTLCB2YWx1ZSk7CiAJfQogCiAJZXJyID0gZXZhbF9oYWxzKHByaXYtJmd0O2FkZXYtJmd0O2hhbmRsZSwgJmFtcDt2YWx1ZSk7CkBAIC0xNjMwLDYgJiM0MzsxNjYxLDE2IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKIAlyZXR1cm4gISF0ZXN0X2JpdChIQUxTX0tCRF9CTF9TVEFURV9CSVQsICZhbXA7dmFsdWUpOwogfQogCiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQomIzQzO3sKJiM0MzsJaW50IGh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTsKJiM0MzsKJiM0MzsJaWYgKGh3X2JyaWdodG5lc3MgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGh3X2JyaWdodG5lc3M7CiYjNDM7CiYjNDM7CXJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogewogCXN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpOwpAQCAtMTYzNyw2MiAmIzQzOzE2NzgsMTIzIEBAIHN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBsZWRfY2xhCiAJcmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpOwogfQogCi1zdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBicmlnaHRuZXNzKQomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgaW50IGh3X2JyaWdodG5lc3MpCiB7Ci0JaW50IGVycjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWludCB0eXBlID0gcHJpdi0mZ3Q7a2JkX2JsLnR5cGU7CiYjNDM7CWludCBlcnI7CiAKIAlpZiAoaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUodHlwZSkpIHsKLQkJaWYgKGJyaWdodG5lc3MgJmd0OyBwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJdmFsdWUgPSBGSUVMRF9QUkVQKEtCRF9CTF9TRVRfQlJJR0hUTkVTUywgYnJpZ2h0bmVzcykgfAomIzQzOwkJdmFsdWUgPSBGSUVMRF9QUkVQKEtCRF9CTF9TRVRfQlJJR0hUTkVTUywgaHdfYnJpZ2h0bmVzcykgfAogCQkJRklFTERfUFJFUChLQkRfQkxfQ09NTUFORF9UWVBFLCB0eXBlKSB8CiAJCQlLQkRfQkxfQ09NTUFORF9TRVQ7CiAJCWVyciA9IGV4ZWNfa2JsYyhwcml2LSZndDthZGV2LSZndDtoYW5kbGUsIHZhbHVlKTsKIAl9IGVsc2UgewotCQllcnIgPSBleGVjX3NhbHMocHJpdi0mZ3Q7YWRldi0mZ3Q7aGFuZGxlLCBicmlnaHRuZXNzID8gU0FMU19LQkRfQkxfT04gOiBTQUxTX0tCRF9CTF9PRkYpOwomIzQzOwkJdmFsdWUgPSBod19icmlnaHRuZXNzID8gU0FMU19LQkRfQkxfT04gOiBTQUxTX0tCRF9CTF9PRkY7CiYjNDM7CQllcnIgPSBleGVjX3NhbHMocHJpdi0mZ3Q7YWRldi0mZ3Q7aGFuZGxlLCB2YWx1ZSk7CiAJfQotCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXByaXYtJmd0O2tiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cHJpdi0mZ3Q7a2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcywgaHdfYnJpZ2h0bmVzcyk7CiAKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgaW50IGJyaWdodG5lc3MpCiYjNDM7ewomIzQzOwlpZiAoYnJpZ2h0bmVzcyAmZ3Q7IHByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiAJCQkJCQkgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKIHsKIAlzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTsKIAomIzQzOwkvKgomIzQzOwkgKiBXaGVuIGRlaW5pdGlhbGl6aW5nOiBJdCBtdXN0IGJlIHRoZSBzaWRlIGVmZmVjdCBvZiBsZWRfY2RldgomIzQzOwkgKiB1bnJlZ2lzdHJhdGlvbiB3aGVuIG91ciBwcml2YXRlIHRyaWdnZXIgaXMgYWN0aXZlLiBXZSYjMzk7dmUgc2V0CiYjNDM7CSAqIExFRF9SRVRBSU5fQVRfU0hVVERPV04gdG8gcmV0YWluIGxlZF9jZGV2IGJyaWdodG5lc3MgbGV2ZWwuCiYjNDM7CSAqIFRvIGRvIHRoZSBzYW1lIGZvciBhdXRvIG1vZGUsIGdhdGUgY2hhbmdlcyBhbmQgcmV0dXJuIGVhcmx5LgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KCFwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJcmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpOwomIzQzOwomIzQzOwlyZXR1cm4gYXRvbWljX3JlYWQoJmFtcDtwcml2LSZndDtrYmRfYmwubGFzdF9od19icmlnaHRuZXNzKSA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7CiYjNDM7CiYjNDM7CXJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtpZGVhcGFkLWF1dG8mIzM0OywKJiM0MzsJLnRyaWdnZXJfdHlwZSA9ICZhbXA7aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGUsCiYjNDM7CS5hY3RpdmF0ZSA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZSwKJiM0MzsJLm9mZmxvYWRlZCA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9vZmZsb2FkZWQsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZDsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LAomIzQzOwkJCQkJICAgICBpbnQgaHdfYnJpZ2h0bmVzcywgaW50IGxhc3RfaHdfYnJpZ2h0bmVzcykKJiM0Mzt7CiYjNDM7CWJvb2wgaHdfY29udHJvbCwgbGFzdF9od19jb250cm9sOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7a2JkX2JsLnR5cGUgIT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWh3X2NvbnRyb2wgPSBod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUzsKJiM0MzsJbGFzdF9od19jb250cm9sID0gbGFzdF9od19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUzsKJiM0MzsKJiM0MzsJaWYgKGh3X2NvbnRyb2wgIT0gbGFzdF9od19jb250cm9sKQomIzQzOwkJbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCgmYW1wO3ByaXYtJmd0O2tiZF9ibC5sZWQsIGh3X2NvbnRyb2wpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX25vdGlmeShzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQogewotCWludCBicmlnaHRuZXNzOwomIzQzOwlpbnQgaHdfYnJpZ2h0bmVzcywgYnJpZ2h0bmVzcywgbGFzdF9od19icmlnaHRuZXNzOwogCiAJaWYgKCFwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQpCiAJCXJldHVybjsKIAotCWJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTsKLQlpZiAoYnJpZ2h0bmVzcyAmbHQ7IDApCiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3ByaXYtJmd0O2tiZF9ibC5ub3RpZl9tdXRleCk7CiYjNDM7CiYjNDM7CWh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTsKJiM0MzsJaWYgKGh3X2JyaWdodG5lc3MgJmx0OyAwKQogCQlyZXR1cm47CiAKLQlpZiAoYnJpZ2h0bmVzcyA9PSBwcml2LSZndDtrYmRfYmwubGFzdF9icmlnaHRuZXNzKQomIzQzOwlicmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTsKJiM0MzsJaWYgKGJyaWdodG5lc3MgJmx0OyAwKQomIzQzOwkJcmV0dXJuOyAvKiBSZWplY3QgaW5zYW5lIHZhbHVlcyBlYXJseS4gKi8KJiM0MzsKJiM0MzsJbGFzdF9od19icmlnaHRuZXNzID0gYXRvbWljX3hjaGcoJmFtcDtwcml2LSZndDtrYmRfYmwubGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKTsKJiM0MzsJaWYgKGh3X2JyaWdodG5lc3MgPT0gbGFzdF9od19icmlnaHRuZXNzKQogCQlyZXR1cm47CiAKLQlwcml2LSZndDtrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKJiM0MzsJaWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2wocHJpdiwgaHdfYnJpZ2h0bmVzcywgbGFzdF9od19icmlnaHRuZXNzKTsKIAogCWxlZF9jbGFzc2Rldl9ub3RpZnlfYnJpZ2h0bmVzc19od19jaGFuZ2VkKCZhbXA7cHJpdi0mZ3Q7a2JkX2JsLmxlZCwgYnJpZ2h0bmVzcyk7CiB9CiAKIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaW5pdChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQogewotCWludCBicmlnaHRuZXNzLCBlcnI7CiYjNDM7CWludCBod19icmlnaHRuZXNzLCBlcnI7CiAKIAlpZiAoIXByaXYtJmd0O2ZlYXR1cmVzLmtiZF9ibCkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xNzAwLDI4ICYjNDM7MTgwMiw2OCBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2luaXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKIAlpZiAoV0FSTl9PTihwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQpKQogCQlyZXR1cm4gLUVFWElTVDsKIAotCWlmIChpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZShwcml2LSZndDtrYmRfYmwudHlwZSkpCi0JCXByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyOwotCWVsc2UKLQkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7CiYjNDM7CWVyciA9IGRldm1fbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O3BsYXRmb3JtX2RldmljZS0mZ3Q7ZGV2LCAmYW1wO3ByaXYtJmd0O2tiZF9ibC5ub3RpZl9tdXRleCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwogCi0JYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpOwotCWlmIChicmlnaHRuZXNzICZsdDsgMCkKLQkJcmV0dXJuIGJyaWdodG5lc3M7CiYjNDM7CWh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTsKJiM0MzsJaWYgKGh3X2JyaWdodG5lc3MgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGh3X2JyaWdodG5lc3M7CiYjNDM7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtwcml2LSZndDtrYmRfYmwubGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKTsKIAotCXByaXYtJmd0O2tiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzOwogCXByaXYtJmd0O2tiZF9ibC5sZWQubmFtZSAgICAgICAgICAgICAgICAgICAgPSAmIzM0O3BsYXRmb3JtOjomIzM0OyBMRURfRlVOQ1RJT05fS0JEX0JBQ0tMSUdIVDsKIAlwcml2LSZndDtrYmRfYmwubGVkLmJyaWdodG5lc3NfZ2V0ICAgICAgICAgID0gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQ7CiAJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5icmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0OwogCXByaXYtJmd0O2tiZF9ibC5sZWQuZmxhZ3MgICAgICAgICAgICAgICAgICAgPSBMRURfQlJJR0hUX0hXX0NIQU5HRUQgfCBMRURfUkVUQUlOX0FUX1NIVVRET1dOOwogCi0JZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZhbXA7cHJpdi0mZ3Q7cGxhdGZvcm1fZGV2aWNlLSZndDtkZXYsICZhbXA7cHJpdi0mZ3Q7a2JkX2JsLmxlZCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJc3dpdGNoIChwcml2LSZndDtrYmRfYmwudHlwZSkgewomIzQzOwljYXNlIEtCRF9CTF9UUklTVEFURV9BVVRPOgomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7CiAKJiM0MzsJCWlmICghaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpIHsKJiM0MzsJCQlkZXZfd2FybigmYW1wO3ByaXYtJmd0O3BsYXRmb3JtX2RldmljZS0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtDb3VsZCBub3QgcHJvdmlkZSBMRUQgdHJpZ2dlciAlcyBmb3Iga2V5Ym9hcmQgYmFja2xpZ2h0XG4mIzM0OywKJiM0MzsJCQkJIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXByaXYtJmd0O2tiZF9ibC5sZWQuZmxhZ3MgICAgICAgICAgICAgfD0gTEVEX1RSSUdfSFdfQ0hBTkdFRDsKJiM0MzsJCXByaXYtJmd0O2tiZF9ibC5sZWQuaHdfY29udHJvbF90cmlnZ2VyID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWU7CiYjNDM7CQlwcml2LSZndDtrYmRfYmwubGVkLnRyaWdnZXJfdHlwZSAgICAgICA9ICZhbXA7aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7CiYjNDM7CiYjNDM7CQkvKiBIYXJkd2FyZSByZW1lbWJlcnMgdGhlIGxhc3QgYnJpZ2h0bmVzcyBsZXZlbCwgaW5jbHVkaW5nIGF1dG8gbW9kZS4gKi8KJiM0MzsJCWlmIChod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUykKJiM0MzsJCQlwcml2LSZndDtrYmRfYmwubGVkLmRlZmF1bHRfdHJpZ2dlciA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lOwomIzQzOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgS0JEX0JMX1RSSVNUQVRFOgomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBLQkRfQkxfU1RBTkRBUkQ6CiYjNDM7CQlwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJLyogVGhpcyBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBieSBpZGVhcGFkX2NoZWNrX2ZlYXR1cmVzKCkuICovCiYjNDM7CQl1bnJlYWNoYWJsZSgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFF1ZXVlIG5vdGlmaWNhdGlvbnMsIGFzIGtiZF9ibC5pbml0aWFsaXplZCBpcyBhYm91dCB0byBiZSBzZXQuICovCiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3ByaXYtJmd0O2tiZF9ibC5ub3RpZl9tdXRleCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNldHRpbmcga2JkX2JsLmluaXRpYWxpemVkIGFmdGVyIGxlZF9jbGFzc2Rldl9yZWdpc3RlcigpIGNvdWxkIGxlYWQKJiM0MzsJICogdG8gcmFjZSBjb25kaXRpb25zIGluIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0KCkgd2hlcmUKJiM0MzsJICoga2JkX2JsLmluaXRpYWxpemVkIGlzIGNoZWNrZWQsIHNvIHNldCBpdCBub3cuIEl0IGNhbiBiZSByZXZlcnRlZCBiYWNrCiYjNDM7CSAqIGlmIHRoZSBMRUQgY2xhc3NkZXYgZmFpbGVkIHRvIHJlZ2lzdGVyLgomIzQzOwkgKi8KIAlwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgPSB0cnVlOwogCi0JcmV0dXJuIDA7CiYjNDM7CWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmYW1wO3ByaXYtJmd0O3BsYXRmb3JtX2RldmljZS0mZ3Q7ZGV2LCAmYW1wO3ByaXYtJmd0O2tiZF9ibC5sZWQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmluaXRpYWxpemVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX2V4aXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKQEAgLTI1NDgsMTcgJiM0MzsyNjkwLDMwIEBAIHN0YXRpYyBpbnQgX19pbml0IGlkZWFwYWRfbGFwdG9wX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCiYjNDM7CWVyciA9IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKCZhbXA7aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJcHJfd2FybigmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBMRUQgdHJpZ2dlciAlczogJWRcbiYjMzQ7LAomIzQzOwkJCWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lLCBlcnIpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJZXJyID0gaWRlYXBhZF93bWlfZHJpdmVyX3JlZ2lzdGVyKCk7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gZXJyX2xlZHRyaWc7CiAKIAllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFtcDtpZGVhcGFkX2FjcGlfZHJpdmVyKTsKLQlpZiAoZXJyKSB7Ci0JCWlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7Ci0JCXJldHVybiBlcnI7Ci0JfQomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfd21pOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3dtaToKJiM0MzsJaWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTsKJiM0MztlcnJfbGVkdHJpZzoKJiM0MzsJaWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKQomIzQzOwkJbGVkX3RyaWdnZXJfdW5yZWdpc3RlcigmYW1wO2lkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7CiYjNDM7CXJldHVybiBlcnI7CiB9CiBtb2R1bGVfaW5pdChpZGVhcGFkX2xhcHRvcF9pbml0KQogCkBAIC0yNTY2LDYgJiM0MzsyNzIxLDkgQEAgc3RhdGljIHZvaWQgX19leGl0IGlkZWFwYWRfbGFwdG9wX2V4aXQodm9pZCkKIHsKIAlpZGVhcGFkX3dtaV9kcml2ZXJfdW5yZWdpc3RlcigpOwogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhbXA7aWRlYXBhZF9hY3BpX2RyaXZlcik7CiYjNDM7CiYjNDM7CWlmIChpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCkKJiM0MzsJCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoJmFtcDtpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpOwogfQogbW9kdWxlX2V4aXQoaWRlYXBhZF9sYXB0b3BfZXhpdCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMuaAppbmRleCBiMTZiODAzY2MxYWM1MS4uMTY3NTk4OTYyYjczZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGVkcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbGVkcy5oCkBAIC0xMDksNiAmIzQzOzEwOSw3IEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYgewogI2RlZmluZSBMRURfSU5JVF9ERUZBVUxUX1RSSUdHRVIgQklUKDIzKQogI2RlZmluZSBMRURfUkVKRUNUX05BTUVfQ09ORkxJQ1QgQklUKDI0KQogI2RlZmluZSBMRURfTVVMVElfQ09MT1IJCUJJVCgyNSkKJiM0MzsjZGVmaW5lIExFRF9UUklHX0hXX0NIQU5HRUQJQklUKDI2KQogCiAJLyogc2V0X2JyaWdodG5lc3Nfd29yayAvIGJsaW5rX3RpbWVyIGZsYWdzLCBhdG9taWMsIHByaXZhdGUuICovCiAJdW5zaWduZWQgbG9uZwkJd29ya19mbGFnczsKQEAgLTQ4NSw2ICYjNDM7NDg2LDcgQEAgc3RydWN0IGxlZF90cmlnZ2VyIHsKIAljb25zdCBjaGFyCSAqbmFtZTsKIAlpbnQJCSgqYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIAl2b2lkCQkoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKJiM0MzsJYm9vbAkJKCpvZmZsb2FkZWQpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIAogCS8qIEJyaWdodG5lc3Mgc2V0IGJ5IGxlZF90cmlnZ2VyX2V2ZW50ICovCiAJZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzOwpAQCAtNTMzLDYgJiM0Mzs1MzUsOSBAQCB2b2lkIGxlZF90cmlnZ2VyX2JsaW5rX29uZXNob3Qoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyLAogdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpOwogdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwomIzQzO3ZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwomIzQzOwomIzQzO2Jvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfc2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQkJdm9pZCAqdHJpZ2dlcl9kYXRhKQpAQCAtNTg0LDYgJiM0Mzs1ODksMTMgQEAgc3RhdGljIGlubGluZSBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgKmxlZF9nZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogewpAQCAtNTk4LDYgJiM0Mzs2MTAsMTMgQEAgbGVkX3RyaWdnZXJfZ2V0X2JyaWdodG5lc3MoY29uc3Qgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKQogCiAjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlMgKi8KIAomIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VECiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAomIzQzOwkJCQkJCQkgYm9vbCBhY3RpdmF0ZSkge30KJiM0MzsjZW5kaWYKJiM0MzsKIC8qIFRyaWdnZXIgc3BlY2lmaWMgZW51bSAqLwogZW51bSBsZWRfdHJpZ2dlcl9uZXRkZXZfbW9kZXMgewogCVRSSUdHRVJfTkVUREVWX0xJTksgPSAwLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ1NgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciBMRUQgSGFyZHdhcmUgVHJpZ2dlciBUcmFuc2l0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUgdGhhdCBhaW1zIHRvIGludHJvZHVjZSBzdXBwb3J0IGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyBpbiB0aGUgTEVEIHN1YnN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgd29ydGggZnV6emluZz8mIzM0OyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gSXQgdG91Y2hlcyBhIGRlY2VudCBudW1iZXIgb2YgZmlsZXMsIGluY2x1ZGluZyB0aGUgY29yZSBMRUQgY2xhc3NlcyAoYGxlZC1jbGFzcy5jYCwgYGxlZC10cmlnZ2Vycy5jYCksIHNvbWUgc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVycyAoYGxlZHMtY3Jvc19lYy5jYCwgYGxlZHMtdHVycmlzLW9tbmlhLmNgLCBgaWRlYXBhZC1sYXB0b3AuY2ApLCBhbmQgYSBuZXR3b3JrIGRldmljZSB0cmlnZ2VyIChgbGVkdHJpZy1uZXRkZXYuY2ApLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBmb290cHJpbnQsIHdoaWNoIGdpdmVzIHVzIGEgc29saWQgYXR0YWNrIHN1cmZhY2UgdG8gdGhpbmsgYWJvdXQuCgpUaGUgY2hhbmdlcyBpbnZvbHZlIGFkZGluZyBuZXcgZnVuY3Rpb25zIHRvIHRoZSBjb3JlIHRyaWdnZXIgbG9naWM6IGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCwgYGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRgLCBhbmQgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYC4gQWxzbywgYGlkZWFwYWQtbGFwdG9wLmNgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGFjdHVhbGx5ICp1c2UqIHRoaXMgbmV3IGZlYXR1cmUuIFJpZ2h0LCBzbyB0aGlzIGNvcmUgTEVEIHRyaWdnZXIgbG9naWMgaXMgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMuIFRoYXQmIzM5O3MgYSBtYWpvciBwbHVzLiBUaGUgcGxhdGZvcm0gZHJpdmVyIGlzIGEgYml0IG9mIGEgcXVlc3Rpb24gbWFyayAtIG1pZ2h0IGJlIHRyaWNreSB0byB0ZXN0IHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUsIGJ1dCB0aGUgY29yZSBzdHVmZiBpcyBmYWlyIGdhbWUuCgpIYW5nIG9uLi4uIENhbiB3ZSBhY3R1YWxseSByZWFjaCBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2U/IEhtbSwgbm8sIGxvb2tzIGxpa2UgZHJpdmVycyBjYWxsIGl0IHdoZW4gaGFyZHdhcmUgc3RhdGUgY2hhbmdlcy4gQnV0IHdlICpjYW4qIGdldCB0byBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YCB2aWEgc3lzZnMsIGFuZCBgbGVkX3RyaWdnZXJfc2V0YCB2aWEgdGhlIGB0cmlnZ2VyYCBhdHRyaWJ1dGUuIE5vdywgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYC4uLnRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYGJyaWdodG5lc3Nfc3RvcmVgIHdoZW4gdGhlIExFRCBzdGF0ZSBpc24mIzM5O3QgYExFRF9PRkZgLiBJbnRlcmVzdGluZy4KCkxldCYjMzk7cyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBXaGVyZSBlbHNlIGlzIGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCBjYWxsZWQ/IExvb2tzIGxpa2UgYGlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sYCBpbiBgaWRlYXBhZC1sYXB0b3AuY2AuIExldCYjMzk7cyBjb25maXJtIHdpdGggYSBxdWljayBgZ3JlcGAganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjYWxsIHNpdGVzLCBhbmQgd2UgY2FuIGNvbmZpcm0gdGhhdCB3ZSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBhdHRhY2sgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdD0zNDU9ZmxhZ3MgYmVmb3JlIHJlZ2lzdGVyaW5nLiBUbyB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciBhY2NvcmRpbmdseSwgY2FsbFxuRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0OjM0NjpgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAgb24gdGhlIExFRCBjbGFzc2Rldi5cbkRvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdC0zNDctXG4tLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jPTQ5Mj1zdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24oc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUsXG4tLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTUxOS1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzo1MjA6dm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTUyMS17XG4tLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTU0NC19XG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6NTQ1OkVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQpO1xuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTU0Ni0jZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jPTE3NTQ9c3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2woc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYy0xNzY1LVx0aWYgKGh3X2NvbnRyb2wgIT0gbGFzdF9od19jb250cm9sKVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmM6MTc2NjpcdFx0bGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQsIGh3X2NvbnRyb2wpO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMtMTc2Ny19XG4tLVxuaW5jbHVkZS9saW51eC9sZWRzLmg9NjA2PWxlZF90cmlnZ2VyX2dldF9icmlnaHRuZXNzKGNvbnN0IHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcilcbi0tXG5pbmNsdWRlL2xpbnV4L2xlZHMuaC02MTMtI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbmluY2x1ZGUvbGludXgvbGVkcy5oOjYxNDp2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpO1xuaW5jbHVkZS9saW51eC9sZWRzLmgtNjE1LSNlbHNlXG5pbmNsdWRlL2xpbnV4L2xlZHMuaDo2MTY6c3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG5pbmNsdWRlL2xpbnV4L2xlZHMuaC02MTctXHRcdFx0XHRcdFx0XHQgYm9vbCBhY3RpdmF0ZSkge31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAxMgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTEVEIFRyaWdnZXIgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiBtYW5hZ2luZyB0aG9zZSBMRUQgdHJpZ2dlcnMgc2hvdWxkIGJlIGFjY2Vzc2libGUgdmlhIHN5c2ZzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGtlcm5lbCBjb25maWd1cmF0aW9ucyByZXF1aXJlZCB0byBlbmFibGUgYW5kIHV0aWxpemUgdGhlbSBlZmZlY3RpdmVseS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzOiBgQ09ORklHX0xFRFNfVFJJR0dFUlNgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgbm8gZG91YnQuIFRoZW4sIEkgc3VzcGVjdCB3ZSYjMzk7bGwgbmVlZCBgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAgZm9yIHNwZWNpZmljIGhhcmR3YXJlLXJlbGF0ZWQgY2hhbmdlcyBhcyB0aGUgbmFtZSBpbXBsaWVzLCBhbmQgb2YgY291cnNlLCBgQ09ORklHX0xFRFNfQ0xBU1NgIGlzIHByb2JhYmx5IGFsc28gY3JpdGljYWwgZm9yIHRoZSBkZXZpY2UgY2xhc3Mgc3VwcG9ydC4KClRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyIG9uIHRoZSBgSFdfQ0hBTkdFRGAgdHJpZ2dlciYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGBkcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgZGV0YWlscyBmb3IgdGhhdCBwYXJ0aWN1bGFyIHRyaWdnZXIgc2hvdWxkIHJlc2lkZS4gVGhpcyBpcyB0aGUgZmFzdGVzdCByb3V0ZSB0byBjb25maXJtIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBhbnkgbnVhbmNlcyBpbiBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnPTEwPWlmIExFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTEtXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnOjEyOmNvbmZpZyBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTMtXHRib29sIFwmIzM0O0xFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ0NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMRUQgVHJpZ2dlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXMgdGhpcyBgTEVEU19UUklHR0VSU19IV19DSEFOR0VEYCBzZXR0aW5nIGVuYWJsZWQgYnkgZGVmYXVsdD8gTm8sIGl0JiMzOTtzIGEgYm9vbCwgc28gdGhhdCBhbnN3ZXJzIHRoYXQgcXVlc3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBnZXRzIGFkZGVkIHRvIG91ciBFbmFibGVDb25maWdzLiBUaGF0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LgoKTm93LCB3aGF0IGFib3V0IHRoZSBgaWRlYXBhZC1sYXB0b3AuY2AgZHJpdmVyPyBBaCwgdGhhdCByZWxpZXMgb24gYENPTkZJR19JREVBUEFEX0xBUFRPUGAuIFRoYXQmIzM5O3MgYW4geDg2IHBsYXRmb3JtIGRyaXZlciwgdGllZCB0byBBQ1BJIGFuZCBzcGVjaWZpYyBoYXJkd2FyZSwgc28gZnV6emluZyBpdCBkaXJlY3RseSBjb3VsZCBiZSB0cmlja3kuIEl0JiMzOTtzIG5vdCBnb2luZyB0byBiZSB0aGUgKmVhc2llc3QqIHRhcmdldCwgdGhhdCYjMzk7cyBmb3Igc3VyZS4gSSBhbSBub3Qgc2VlaW5nIGEgZGlyZWN0IHBhdGggZm9yIGVhc2llciBmdXp6aW5nIG9mIHRoaXMgZHJpdmVyLgoKSG93ZXZlciwgdGhlIGNvcmUgTEVEIHRyaWdnZXIgbG9naWMsIHRoYXQmIzM5O3Mgc3RpbGwgcG90ZW50aWFsbHkgcmVhY2hhYmxlLiBXZSBtaWdodCBzdGlsbCBoYXZlIGEgc2hvdCwgZXZlbiBpZiBpdCBpcyBub3QgdGhlIGVhc2llc3QuIExldCBtZSBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiBgZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBsaWtlbHkgbGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jPTM0PXRyaWdnZXJfcmVsZXZhbnQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMzgtXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6Mzk6c3RhdGljIGJvb2wgX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTQwLXtcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM9NTk9Ym9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuLS1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy02MS1cdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6NjI6XHRyZXR1cm4gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy02My19XG4tLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jPTMyMT12b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuLS1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy0zMjQtXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6MzI1Olx0aWYgKF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2RldikpXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMzI2LVx0XHRsZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIE5VTEwpO1xuLS1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz0zNzU9c3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy0zODctXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6Mzg4Olx0b2ZmbG9hZGVkID0gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy0zODktXHRoaXQgPSBvZmZsb2FkZWQgfHwgKHRyaWcgXHUwMDI2XHUwMDI2ICFzdHJjbXAobGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLCB0cmlnLVx1MDAzZW5hbWUpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMzMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBIYXJkd2FyZSBMRUQgVHJpZ2dlciBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIExFRCB0cmlnZ2VyIGNvZGUsIGFuZCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBvbmVzIEkgbmVlZCB0byB6ZXJvIGluIG9uIGFyZTogYF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAsIGBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYCwgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCwgYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AsIGBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb25gLCBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAsIGFuZCBgX19sZWRfdHJpZ2dlcl9zZXRgLgoKUmlnaHQsIHRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgY29yZSBzZXQgdG8gc3RhcnQgd2l0aC4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gaGFyZHdhcmUgY29udHJvbCBhbmQgdGhlIHNvZnR3YXJlIHRyaWdnZXJzIGlzIGltcG9ydGFudC4gSSB0aGluayB0aGF0IGBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb25gIGlzIHByb2JhYmx5IHRoZSBtb3N0IGNyaXRpY2FsIHBsYWNlIHRvIGJlZ2luIHVuZGVyc3RhbmRpbmcgdGhlIHN0YXRlIHRyYW5zaXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz00ODk9RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7XG4tLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTQ5MS0jaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jOjQ5MjpzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24oc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUsXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNDkzLVx0XHRcdFx0XHRcdCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKmhjX3RyaWcpXG4tLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jPTUyMD12b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpXG4tLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTUzNC1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzo1MzU6XHRcdFx0XHRsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24obGVkX2NkZXYsIGFjdGl2YXRlLCB0cmlnKTtcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy01MzYtXHRcdFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTI1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4cGxvcmluZyBMRUQgVHJpZ2dlciBDb250cm9sKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgSSBjYW4gbWFuaXB1bGF0ZSBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAgZnJvbSB1c2Vyc3BhY2UsIHNwZWNpZmljYWxseSB0byB0cmlnZ2VyIHNvbWUgaW50ZXJlc3RpbmcgYmVoYXZpb3IuIE15IGluaXRpYWwgdGhvdWdodCBpcyBubywgYmVjYXVzZSBpdCBhcHBlYXJzIHRvIGJlIHByaW1hcmlseSBjYWxsZWQgYnkgZHJpdmVycy4gQnV0IHRoZW4uLi4gaG9sZCBvbiwgaXQgKmlzKiBleHBvcnRlZCEgVGhhdCBvcGVucyBhIHRpbnkgd2luZG93LiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIGZpbmQgYSB2dWxuZXJhYmxlIGRyaXZlciB0aGF0IHByb3ZpZGVzIGEgYmFja2Rvb3I/CgpNeSBuZXh0IGF2ZW51ZSBvZiBhdHRhY2sgaXMgdG8gZmluZCBhIGZ1enphYmxlIGRyaXZlciB0aGF0ICptaWdodCogYmUgcmVhY2hhYmxlLiBgaWRlYXBhZC1sYXB0b3AuY2AgaXMgdGVtcHRpbmcuIEl0JiMzOTtzIGFuIEFDUEkgZHJpdmVyLCBhbmQgQUNQSSBpbnRlcmZhY2VzIGNhbiwgaW4gdGhlb3J5LCBiZSBmdXp6IHRlc3RlZC4gSXQmIzM5O3Mgbm90IGEgZGlyZWN0IHJvdXRlLCBJIGtub3csIEFDUEkgZnV6emluZyBjYW4gYmUgYSBwYWluIGluIHRoZS4uLiB3ZWxsLCB5b3UgZ2V0IHRoZSBpZGVhLiBJdCYjMzk7cyBub3QgdGhlIGVhc2llc3QgcGF0aC4KClRoZW4gSSBzaGlmdGVkIG15IHBlcnNwZWN0aXZlLCB3aGF0IGFib3V0IGEgc2ltaWxhciBmdW5jdGlvbiBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgPyBXaGVyZSBpcyB0aGF0IGNhbGxlZD8gSSBmaW5kIGl0IGluIGBicmlnaHRuZXNzX3N0b3JlYCB3aXRoaW4gYGxlZC1jbGFzcy5jYC4gQWgsIHRoYXTigJlzIGludGVyZXN0aW5nLCBgYnJpZ2h0bmVzc19zdG9yZWAgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2ZzLiBUaGF0JiMzOTtzIGEgZGlyZWN0IHJvdXRlIGludG8gdGhlIGtlcm5lbCBmcm9tIHVzZXJzcGFjZS4gSSYjMzk7dmUgZ290IGEgbXVjaCBtb3JlIGFjY2Vzc2libGUgaW50ZXJmYWNlIHRoZXJlIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jPTQ3PXN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy02Ny1cdGVsc2VcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo2ODpcdFx0bGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wobGVkX2NkZXYpO1xuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTY5LVxuLS1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz0zMTk9RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVtb3ZlKTtcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy0zMjAtXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6MzIxOnZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMzIyLXtcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMzI3LX1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzozMjg6RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wpO1xuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTMyOS1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlZHMuaD01Mzc9dm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuaW5jbHVkZS9saW51eC9sZWRzLmg6NTM4OnZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuaW5jbHVkZS9saW51eC9sZWRzLmgtNTM5LVxuLS1cbmluY2x1ZGUvbGludXgvbGVkcy5oPTU5MT1zdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fVxuaW5jbHVkZS9saW51eC9sZWRzLmg6NTkyOnN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cbmluY2x1ZGUvbGludXgvbGVkcy5oLTU5My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIExFRCBUcmlnZ2VyIENvbnRyb2wgRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gbWFwIG91dCB0aGUgY29udHJvbCBmbG93IGZvciB0aGVzZSBMRUQgdHJpZ2dlcnMuIEl0IHNlZW1zIHRoYXQgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gR29vZCwgdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kLiBUaGVuLCB0aGUgYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AgZnVuY3Rpb24sIHdoaWNoIGRlYWxzIHdpdGggdGhlIHN5c2ZzIGludGVyZmFjZSB0aHJvdWdoIGB0cmlnZ2VyX21heV9vZmZsb2FkYCwgaXMgYWxzbyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gTm93LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nIGJlY2F1c2UgYF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAgaGFzIHR3byBkaWZmZXJlbnQgcGF0aHMgdG8gaXQsIHRocm91Z2ggdGhlIGNhbGxzIHRvIGB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dgIGFuZCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIGFuZCB0aGUgY29ubmVjdGlvbiBtYWtlcyBzZW5zZS4gIEFuZCB0aGVuIGZpbmFsbHksIHRoZXJlJiMzOTtzIGBfX2xlZF90cmlnZ2VyX3NldGAsIHRoYXQmIzM5O3MgcmVhY2hhYmxlIHRocm91Z2ggYGxlZF90cmlnZ2VyX3NldGAuIFRoaXMgbGFzdCBvbmUgaXMgdWx0aW1hdGVseSBjYWxsZWQgZnJvbSBgbGVkX3RyaWdnZXJfd3JpdGVgLCB3aGljaCBpdHNlbGYgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzeXNmcyBgdHJpZ2dlcmAgYXR0cmlidXRlLiBTbywgaWYgYSB1c2VyIHdyaXRlcyB0byB0aGF0IHN5c2ZzIGVudHJ5LCB3ZSYjMzk7cmUgdWx0aW1hdGVseSBoaXR0aW5nIGBfX2xlZF90cmlnZ2VyX3NldGAuCgpBbHJpZ2h0LCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBhIGRlY2VudCBncmFzcCBvbiB0aGlzLiBOb3cgbGV0JiMzOTtzIGRpZyBpbnRvIGBsZWRfdHJpZ2dlcl93cml0ZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIHJlYWxseSBzZWVtcyB0byBiZSBoYXBwZW5pbmcgd2l0aCB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGVkX3RyaWdnZXJfd3JpdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jPTkxPXN0YXRpYyBERVZJQ0VfQVRUUl9STyhtYXhfYnJpZ2h0bmVzcyk7XG4tLVxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTkzLSNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jOjk0OnN0YXRpYyBjb25zdCBCSU5fQVRUUih0cmlnZ2VyLCAwNjQ0LCBsZWRfdHJpZ2dlcl9yZWFkLCBsZWRfdHJpZ2dlcl93cml0ZSwgMCk7XG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtOTUtc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpjb25zdCBsZWRfdHJpZ2dlcl9iaW5fYXR0cnNbXSA9IHtcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM9NjQ9RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZCk7XG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNjUtXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6NjY6c3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNjctXHRcdFx0ICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMTEwLX1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzoxMTE6RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfd3JpdGUpO1xuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTExMi1cbi0tXG5kcml2ZXJzL2xlZHMvbGVkcy5oPTI0PXNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxuZHJpdmVycy9sZWRzL2xlZHMuaC0yNi1cdFx0XHRsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpO1xuZHJpdmVycy9sZWRzL2xlZHMuaDoyNzpzc2l6ZV90IGxlZF90cmlnZ2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbmRyaXZlcnMvbGVkcy9sZWRzLmgtMjgtXHRcdFx0Y29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzA5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIExFRCBUcmlnZ2VyIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O3ZlIHBpbnBvaW50ZWQgdGhlIGNvcmUgTEVEIHRyaWdnZXIgbG9naWMgYXMgYSBwcm9taXNpbmcgdGFyZ2V0IGZvciBmdXp6aW5nLiBEZWZpbml0ZWx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGluLiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgYXJlIGBMRURTX0NMQVNTYCwgYExFRFNfVFJJR0dFUlNgLCBhbmQgYExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAuIFRoYXQgbGFzdCBvbmUgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGFzIGl0IGhhbmRsZXMgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbnMuCgpXYWl0LCBJIHNlZSB0aGF0IGBpZGVhcGFkLWxhcHRvcC5jYCBpcyBhbHNvIG1vZGlmaWVkLCB3aGljaCBtYWtlcyBtZSB3b25kZXIgaWYgdGhhdCBkcml2ZXIgaXMgYWxzbyB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciwgdGhvdWdoLCBhbmQgU3l6a2FsbGVyIGlzbiYjMzk7dCB0eXBpY2FsbHkgZ3JlYXQgYXQgZnV6emluZyBBQ1BJIHBsYXRmb3JtIGRyaXZlcnMgdW5sZXNzIHRoZXJlJiMzOTtzIHNwZWNpZmljIHN1cHBvcnQuIEJ1dCB0aGF0IGNvcmUgTEVEIHRyaWdnZXIgbG9naWMgaXMgbW9yZSBnZW5lcmljLCBzbyBJJiMzOTtsbCBwcmlvcml0aXplIHRoYXQgZm9yIG5vdy4gSSYjMzk7bGwgZm9jdXMgb24gYExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAgdG8gZW5zdXJlIGhhcmR3YXJlLWluaXRpYXRlZCB0cmFuc2l0aW9uIHN1cHBvcnQuCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50IHRvIGZvY3VzIG9uPyBMZXQmIzM5O3Mgc2VlOiBgX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYCwgYGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRgLCBgX19sZWRfdHJpZ2dlcl9zZXRgLCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgLCBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YCwgYGxlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbmAsIGFuZCBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAuIFRoZXNlIGxvb2sgbGlrZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYW5kIGNvbnRyb2wgZmxvdyBmdW5jdGlvbnMuCgpPa2F5LCBJIG5lZWQgdG8ga25vdyBpZiBgbGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uYCBpcyByZWFjaGFibGUgd2l0aG91dCBgaWRlYXBhZC1sYXB0b3AuY2AuIEl0JiMzOTtzIG9ubHkgY2FsbGVkIGJ5IGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCwgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgYGlkZWFwYWQtbGFwdG9wLmNgLiBIbW0sIHNvIGlmIEkgd2FudCB0byBmdXp6IGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCwgSSBuZWVkIGBpZGVhcGFkLWxhcHRvcC5jYCBvciBhbm90aGVyIGRyaXZlciB0aGF0IGNhbGxzIGl0LiBTaW5jZSBTeXprYWxsZXIgY2FuJiMzOTt0IGVhc2lseSByZWFjaCBgaWRlYXBhZC1sYXB0b3AuY2AgZHVlIHRvIGl0cyBBQ1BJIGhhcmR3YXJlIGRlcGVuZGVuY3ksIG1heWJlIEkgc2hvdWxkIHRyeSBlbmFibGluZyBgSURFQVBBRF9MQVBUT1BgIGluIHRoZSBjb25maWdzIGp1c3QgaW4gY2FzZS4gSXQgbWlnaHQgYmUgd29ydGggaW5jbHVkaW5nLCByaWdodD8gTGV0IG1lIGNoZWNrIGBkcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSURFQVBBRF9MQVBUT1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWctNS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnOjY6Y29uZmlnIElERUFQQURfTEFQVE9QXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7TGVub3ZvIElkZWFQYWQgTGFwdG9wIEV4dHJhc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcyMAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEltbWVkaWF0ZSBQbGFuKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBjb250aW5nZW50IG9uIGBBQ1BJYCBhbmQgdGhlIHVuZGVybHlpbmcgYFg4NmAgYXJjaGl0ZWN0dXJlLiBUaGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgSURFQVBBRF9MQVBUT1BgIGlzIGluY2x1ZGVkIHdpdGhpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgdG8gcHJvcGVybHkgZW5hYmxlIHRoZSBzeXN0ZW0uCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgYGxlZHMtY3Jvc19lYy5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIHRvIHNlZSBob3cgdGhlIEVDIGhhbmRsZXMgdGhlIExFRHMsIGFuZCBob3BlZnVsbHksIEkgY2FuIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExFRFNfQ1JPU19FQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2xlZHMvS2NvbmZpZz0xODk9Y29uZmlnIExFRFNfQ1IwMDE0MTE0XG4tLVxuZHJpdmVycy9sZWRzL0tjb25maWctMjAxLVxuZHJpdmVycy9sZWRzL0tjb25maWc6MjAyOmNvbmZpZyBMRURTX0NST1NfRUNcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTIwMy1cdHRyaXN0YXRlIFwmIzM0O0xFRCBTdXBwb3J0IGZvciBDaHJvbWVPUyBFQ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTAwNwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGEgbW9kZXJhdGVseSBleHBlcmllbmNlZCBkZXZlbG9wZXIgZmFtaWxpYXIgd2l0aCBlbWJlZGRlZCBzeXN0ZW1zOgoKKipDb25zaWRlcmluZyBgbGVkcy10dXJyaXMtb21uaWEuY2AqKgoKUmlnaHQsIHNvIHRoYXQgdGhvdWdodCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBkcml2ZXIgaW1wbGVtZW50YXRpb25zLiBJJiMzOTttIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiBzb21lIGxvdy1sZXZlbCBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgcHJvYmFibHkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgb3Igc29tZXRoaW5nIHZlcnkgY2xvc2VseSByZWxhdGVkLiAmIzM0O2xlZHMmIzM0OyBvYnZpb3VzbHkgcG9pbnRzIHRvIExFRCBjb250cm9sLCBhbmQgdGhlICYjMzQ7dHVycmlzLW9tbmlhJiMzNDsgcGFydCBpcyB0aGUgc3BlY2lmaWMgdGFyZ2V0IHBsYXRmb3JtIOKAkyBhIFR1cnJpcyBPbW5pYSByb3V0ZXIsIEkgYmVsaWV2ZS4gU28gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyB0aGUgTEVEcyBvbiB0aGF0IHBhcnRpY3VsYXIgZGV2aWNlLiBJJiMzOTttIHByb2JhYmx5IHRoaW5raW5nIGFib3V0IGhvdyB0aGVzZSBMRURzIGFyZSBtYXBwZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUgcGlucywgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzIGludm9sdmVkLCBhbmQgaG93IHRoZSBkcml2ZXIgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBpbnRlcmZhY2VzIGZvciBoaWdoZXItbGV2ZWwgYXBwbGljYXRpb25zIChsaWtlIHRoZSB1c2VyIGludGVyZmFjZSkgdG8gaW50ZXJhY3Qgd2l0aCB0aGVtLiBJJiMzOTtsbCBsaWtlbHkgYmUgZ29pbmcgdGhyb3VnaCB0aGUgY29kZSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgZm9yIHNldHRpbmcgTEVEIHN0YXRlcyAob24vb2ZmLCBibGlua2luZywgYnJpZ2h0bmVzcyksIGludGVycnVwdCBoYW5kbGluZyAoaWYgYW55KSwgYW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgZGV2aWNlJiMzOTtzIGhhcmR3YXJlLiBJIG1pZ2h0IGJlIGNvbnNpZGVyaW5nIG1vZGlmaWNhdGlvbnMgb3IgZGVidWdnaW5nIGEgcHJvYmxlbSB3aXRoIHRoZSBkcml2ZXIuIEkmIzM5O2xsIGxpa2VseSBiZSBjaGVja2luZyBmb3IgY29ycmVjdCBpbnRlcnJ1cHQgaGFuZGxpbmcsIERNQSwgY29uY3VycmVuY3ksIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gSG9wZWZ1bGx5LCB0aGUgY29kZSBpcyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGZvbGxvd3MgZ29vZCBjb2RpbmcgcHJhY3RpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTEVEU19UVVJSSVNfT01OSUEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzL0tjb25maWc9MjE3PWNvbmZpZyBMRURTX0VMMTUyMDMwMDBcbi0tXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yMjktXG5kcml2ZXJzL2xlZHMvS2NvbmZpZzoyMzA6Y29uZmlnIExFRFNfVFVSUklTX09NTklBXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yMzEtXHR0cmlzdGF0ZSBcJiMzNDtMRUQgc3VwcG9ydCBmb3IgQ1ouTklDJiMzOTtzIFR1cnJpcyBPbW5pYVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQyMwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byB0aGUgQ29kZTogYGxlZHRyaWctbmV0ZGV2LmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoYXQgYGxlZHRyaWctbmV0ZGV2LmNgIGZpbGUgYWdhaW4uIFNlZW1zIGxpa2UgYSBjcml0aWNhbCBwaWVjZSwgZG9lc24mIzM5O3QgaXQ/IEl0JiMzOTtzIHdoZXJlIHRoZSBuZXR3b3JrIGRldmljZSBMRUQgdHJpZ2dlcmluZyBsb2dpYyByZXNpZGVzLCBvYnZpb3VzbHkuIFRoZSAmIzM0O2xlZHRyaWcmIzM0OyBwcmVmaXggZ2l2ZXMgaXQgYXdheS4gSSYjMzk7bSBpbWFnaW5pbmcgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLiBNeSBleHBlcmllbmNlIGhhcyBiZWVuIEkgaGF2ZSBzZWVuIHNpbWlsYXIgY29uc3RydWN0cyBoYW5kbGluZyBpbnRlcmZhY2UgY2hhbmdlcywgcGFja2V0IGRyb3BzLCBvciBsaW5rIHN0YXR1cyBjaGFuZ2VzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtaW5kIG9uIHRoZSBnZW5lcmFsIExFRCB0cmlnZ2VyaW5nIGZyYW1ld29yay4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaGVyZT8gSG93IGFyZSB0aGUgbmV0d29yayBldmVudHMgaG9va2VkIGludG8gdGhlIExFRCBkcml2ZXIgY2FsbHM/IEkgYmV0IHRoZXJlJiMzOTtzIHNvbWUgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gZ29pbmcgb24sIGRlYWxpbmcgd2l0aCBOZXRsaW5rIGV2ZW50cywgcHJvYmFibHkgc29tZSB3b3JrcXVldWVzIHRvIGF2b2lkIGJsb2NraW5nLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGRhdGEgZmxvdyBhbmQgaG93IHRoZSBuZXRkZXYgZXZlbnRzLCBpbnRlcmZhY2UgdXAsIGludGVyZmFjZSBkb3duLCB0cmFuc21pdCBvciByZWNlaXZlIHRyYWZmaWMgZXZlbnRzIGFyZSBmZWQgaW50byB0aGlzIGFuZCB1bHRpbWF0ZWx5IGhvdyB0aGV5IGNoYW5nZSBhbiBMRUQgc3RhdHVzLiBJIGFudGljaXBhdGUgc2VlaW5nIHNvbWUgY2xldmVyIHRyaWNrcyB0byBrZWVwIHRoZSBvdmVyaGVhZCBsb3csIGVzcGVjaWFsbHkgaW4gaGlnaC1iYW5kd2lkdGggc2NlbmFyaW9zLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0aGUgaW50ZXJydXB0IGNvbnRleHQgdmVyc3VzIHRhc2sgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgaW50ZXJydXB0IHBhdGggZmlyc3Q7IGdldCB0aGUgbW9zdCBjcml0aWNhbCBwYXJ0IG9mIHRoZSBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDE3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMRURTX1RSSUdHRVJfTkVUREVWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc9MTI1PWNvbmZpZyBMRURTX1RSSUdHRVJfUEFOSUNcbi0tXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTEzMy1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTM0OmNvbmZpZyBMRURTX1RSSUdHRVJfTkVUREVWXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTEzNS1cdHRyaXN0YXRlIFwmIzM0O0xFRCBOZXRkZXYgVHJpZ2dlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg0NwoJCQkJCQkJb3V0cHV0OiAyMjcKCQkJCQkJCXRob3VnaHRzOiAxMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIExFRCBIYXJkd2FyZSBDb250cm9sIGFuZCBPZmZsb2FkKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBhZGQgYExFRFNfVFJJR0dFUl9ORVRERVZgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEl0JiMzOTtzIGEgZmFpcmx5IGdlbmVyaWMgdHJpZ2dlciB0aGF0IGltcGxlbWVudHMgYG9mZmxvYWRlZGAsIGFuZCB0aGF0IG1ha2VzIGl0IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGVzdGluZyB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGFsc28gZ29pbmcgdG8gdGhyb3cgaW4gYExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAgYmVjYXVzZSB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzLiBJJiMzOTtsbCBrZWVwIGBJREVBUEFEX0xBUFRPUGAgYXMgd2VsbCwgc2luY2UgdGhhdCYjMzk7cyBhbm90aGVyIGltcG9ydGFudCBvbmUuCgpJIGJyaWVmbHkgY29uc2lkZXJlZCBhZGRpbmcgYExFRFNfQ0xBU1NgLCBgTEVEU19UUklHR0VSU2AsIGBMRURTX0NST1NfRUNgIGFuZCBgTEVEU19UVVJSSVNfT01OSUFgIGFzIHdlbGwsIGJ1dCBgTEVEU19DTEFTU2AgYW5kIGBMRURTX1RSSUdHRVJTYCBhcmUgcHJvYmFibHkgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQuIGBMRURTX0NST1NfRUNgIGRlcGVuZHMgb24gYENST1NfRUNgLCBhbmQgYExFRFNfVFVSUklTX09NTklBYCBoYXMgbW9yZSBkZXBlbmRlbmNpZXMsIHNvIGBMRURTX1RSSUdHRVJfTkVUREVWYCBhbG9uZyB3aXRoIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgIHNlZW1zIGxpa2UgYSBnb29kIGJhbGFuY2UgZm9yIHRoZSBtb21lbnQuIExldCYjMzk7cyBzZWUgaWYgdGhhdCYjMzk7cyBlbm91Z2ggdG8gZ2V0IGF0IHRoZSBjb3JlIGlzc3VlLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIGFuZCBjb25maXJtZWQgdGhhdCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBzdXBwb3J0ZWQgYnkgc3l6a2FsbGVyLiBJJiMzOTtsbCBuZWVkIHRvIGluY2x1ZGU6CgoqICAgYF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAKKiAgIGBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYAoqICAgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYAoqICAgYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AKKiAgIGBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb25gCiogICBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAKKiAgIGBfX2xlZF90cmlnZ2VyX3NldGAKKiAgIGBuZXRkZXZfdHJpZ19vZmZsb2FkZWRgCgpJIGxvb2tlZCBhdCB0aGUgY29kZSB0byBzZWUgd2hlcmUgdGhlc2UgZ2V0IHVzZWQuIGBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbGAgaXMgY2FsbGVkIHdoZW4gd3JpdGluZyB0byBgL3N5cy9jbGFzcy9sZWRzLyZsdDtsZWQmZ3Q7L2JyaWdodG5lc3NgIHdoZW4gdGhlIHN0YXRlIGlzbiYjMzk7dCBMRURfT0ZGLCB3aGljaCBtZWFucyB0aGUgZnV6emluZyB3aWxsIHRyaWdnZXIgdGhlIGNvZGUgcGF0aC4gYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AgaXMgY2FsbGVkIG9uIHJlYWRpbmcgYC9zeXMvY2xhc3MvbGVkcy8mbHQ7bGVkJmd0Oy90cmlnZ2VyX21heV9vZmZsb2FkYCwgd2hpY2ggaXMgYW5vdGhlciBpbXBvcnRhbnQgc3lzZnMgaW50ZXJhY3Rpb24uIGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCBpcyBjYWxsZWQgYnkgZHJpdmVycyBhbmQgdHJpZ2dlcnMgYSBzdGF0ZSB0cmFuc2l0aW9uLCBpbXBvcnRhbnQgZm9yIHJlYWNoaW5nIHRoZSBjaGFuZ2VkIGxvZ2ljLgoKVWx0aW1hdGVseSwgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gdGhlIExFRCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyBhbmQgb2ZmbG9hZCBzdGF0ZSByZXBvcnRpbmcuIFRoZXkmIzM5O3JlIGFjY2Vzc2libGUgdmlhIHN5c2ZzIGludGVyYWN0aW9ucyBhbmQgZHJpdmVyIG5vdGlmaWNhdGlvbnMuCgpJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIGJlY2F1c2UgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNpZ25pZmljYW50IG5ldyBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gaGFyZHdhcmUgY29udHJvbCBhbmQgb2ZmbG9hZCwgd2hpY2ggYXJlIGxpa2VseSB0byBoYXZlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCYjMzQ7LAogICAgJiMzNDtMRURTX1RSSUdHRVJfTkVUREVWJiMzNDssCiAgICAmIzM0O0lERUFQQURfTEFQVE9QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQmIzM0OywKICAgICYjMzQ7bGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wmIzM0OywKICAgICYjMzQ7dHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93JiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbiYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDssCiAgICAmIzM0O19fbGVkX3RyaWdnZXJfc2V0JiMzNDssCiAgICAmIzM0O25ldGRldl90cmlnX29mZmxvYWRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBMRUQgdHJpZ2dlciBzdWJzeXN0ZW0sIGFkZGluZyBzdXBwb3J0IGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyBhbmQgb2ZmbG9hZCBzdGF0ZSByZXBvcnRpbmcuIFRoZXNlIG5ldyBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGF0dHJpYnV0ZXMgKGB0cmlnZ2VyX21heV9vZmZsb2FkYCwgYGJyaWdodG5lc3NgLCBgdHJpZ2dlcmApIGFuZCBkcml2ZXIgbm90aWZpY2F0aW9ucy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGxvZ2ljIGFuZCBvZmZsb2FkIHF1ZXJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCYjMzQ7LAogICAgJiMzNDtMRURTX1RSSUdHRVJfTkVUREVWJiMzNDssCiAgICAmIzM0O0lERUFQQURfTEFQVE9QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQmIzM0OywKICAgICYjMzQ7bGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wmIzM0OywKICAgICYjMzQ7dHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93JiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbiYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDssCiAgICAmIzM0O19fbGVkX3RyaWdnZXJfc2V0JiMzNDssCiAgICAmIzM0O25ldGRldl90cmlnX29mZmxvYWRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBMRUQgdHJpZ2dlciBzdWJzeXN0ZW0sIGFkZGluZyBzdXBwb3J0IGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyBhbmQgb2ZmbG9hZCBzdGF0ZSByZXBvcnRpbmcuIFRoZXNlIG5ldyBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGF0dHJpYnV0ZXMgKGB0cmlnZ2VyX21heV9vZmZsb2FkYCwgYGJyaWdodG5lc3NgLCBgdHJpZ2dlcmApIGFuZCBkcml2ZXIgbm90aWZpY2F0aW9ucy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGxvZ2ljIGFuZCBvZmZsb2FkIHF1ZXJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzo1Mzo1My41OTgyMzMzOTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjY5MjA2ODk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcIixcbiAgICBcIkxFRFNfVFJJR0dFUl9ORVRERVZcIixcbiAgICBcIklERUFQQURfTEFQVE9QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkXCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkXCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbFwiLFxuICAgIFwidHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93XCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb25cIixcbiAgICBcImxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRcIixcbiAgICBcIl9fbGVkX3RyaWdnZXJfc2V0XCIsXG4gICAgXCJuZXRkZXZfdHJpZ19vZmZsb2FkZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBMRUQgdHJpZ2dlciBzdWJzeXN0ZW0sIGFkZGluZyBzdXBwb3J0IGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyBhbmQgb2ZmbG9hZCBzdGF0ZSByZXBvcnRpbmcuIFRoZXNlIG5ldyBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIGF0dHJpYnV0ZXMgKGB0cmlnZ2VyX21heV9vZmZsb2FkYCwgYGJyaWdodG5lc3NgLCBgdHJpZ2dlcmApIGFuZCBkcml2ZXIgbm90aWZpY2F0aW9ucy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGxvZ2ljIGFuZCBvZmZsb2FkIHF1ZXJpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjUzOjUzLjU5ODIzOTE5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA5MTY4MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGRlOGYwYjNiMzI5MzU0MjYxYTE1NTRkNjk0ZWQzYmIxMTU3ODE0YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxOCAxNzo1Mzo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkXFxuaW5kZXggZDRjOTE4Y2MxMWExMjcuLjdkYzk1ZjdhMzUwNWNlIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWRcXG5AQCAtNzgsNiArNzgsMzEgQEAgRGVzY3JpcHRpb246XFxuIFxcdFxcdCh3aGljaCB3b3VsZCBvZnRlbiBiZSBjb25maWd1cmVkIGluIHRoZSBkZXZpY2UgdHJlZSBmb3IgdGhlXFxuIFxcdFxcdGhhcmR3YXJlKS5cXG4gXFxuK1doYXQ6XFx0XFx0L3N5cy9jbGFzcy9sZWRzL1xcdTAwM2NsZWRcXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRcXG4rRGF0ZTpcXHRcXHRKdWx5IDIwMjZcXG4rS2VybmVsVmVyc2lvbjpcXHQ3LjNcXG4rQ29udGFjdDpcXHRsaW51eC1sZWRzQHZnZXIua2VybmVsLm9yZ1xcbitEZXNjcmlwdGlvbjpcXG4rXFx0XFx0TmFtZXMgYW5kIHN0YXRlcyBvZiB0cmlnZ2VycyB0aGF0IG1heSBiZSBvZmZsb2FkZWQgdG8gaGFyZHdhcmUuXFxuK1xcdFxcdFN1Y2ggdHJpZ2dlcnMgYXJlIGFsc28gY2FsbGVkIFxcXCJoYXJkd2FyZSBjb250cm9sIHRyaWdnZXJcXFwiIGluIHNvbWVcXG4rXFx0XFx0Y29udGV4dC5cXG4rXFxuK1xcdFxcdE9ubHkgZXhpc3RzIHdoZW4gdGhlIExFRCBzdXBwb3J0cyB0cmlnZ2VyIG9mZmxvYWQuXFxuK1xcbitcXHRcXHRSZWFkaW5nIHRoaXMgZmlsZSByZXR1cm5zIGEgbGlzdCBvZiB0cmlnZ2VycyB0aGF0IGFyZSBjYXBhYmxlIHRvXFxuK1xcdFxcdGJlIG9mZmxvYWRlZC4gVGhlIG9wdGlvbmFsIGJyYWNrZXRzIGFyb3VuZCB0aGUgdHJpZ2dlciBuYW1lXFxuK1xcdFxcdGluZGljYXRlIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCB0cmlnZ2VyOlxcbitcXG4rXFx0XFx0LSBgZm9vX3RyaWdnZXJgOiB0aGUgdHJpZ2dlciBpcyBub3Qgc2VsZWN0ZWQuXFxuK1xcdFxcdC0gYFxcdTAwM2Nmb29fdHJpZ2dlclxcdTAwM2VgOiB0aGUgdHJpZ2dlciBpcyBzZWxlY3RlZCwgYnV0IGZhbGxzIGJhY2sgdG9cXG4rXFx0XFx0ICBzb2Z0d2FyZSBibGluayBmb3Igc29tZSByZWFzb24gKGUuZy4sIGluY29tcGF0aWJsZSB0cmlnZ2VyXFxuK1xcdFxcdCAgcGFyYW1ldGVycylcXG4rXFx0XFx0LSBgW2Zvb190cmlnZ2VyXWA6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkIGFuZCBvZmZsb2FkZWQgdG9cXG4rXFx0XFx0ICBoYXJkd2FyZS5cXG4rXFxuK1xcdFxcdFRoZSBcXFwibmV0ZGV2XFxcIiB0cmlnZ2VyIGFsc28gcHJvdmlkZXMgYSBjdXN0b20gYXR0cmlidXRlIHRvXFxuK1xcdFxcdGluZGljYXRlIGl0cyBzdGF0ZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvXFx1MDAzY2xlZFxcdTAwM2Uvb2ZmbG9hZGVkYC5cXG4rXFxuIFdoYXQ6XFx0XFx0L3N5cy9jbGFzcy9sZWRzL1xcdTAwM2NsZWRcXHUwMDNlL2ludmVydGVkXFxuIERhdGU6XFx0XFx0SmFudWFyeSAyMDExXFxuIEtlcm5lbFZlcnNpb246XFx0Mi42LjM4XFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcXG5pbmRleCBlZDQ2YjM3YWI4YTI4NC4uYTUxNDZlYTFlM2U2MWMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldlxcbkBAIC03NSw2ICs3NSw5IEBAIERlc2NyaXB0aW9uOlxcbiBcXHRcXHRJZiAxLCB0aGUgTEVEIGJsaW5raW5nIGluIHJlcXVlc3RlZCBtb2RlIGlzIG9mZmxvYWRlZCB0b1xcbiBcXHRcXHRoYXJkd2FyZS5cXG4gXFxuK1xcdFxcdExFRCB0cmlnZ2VyIGNvcmUgYWxzbyBwcm92aWRlcyBhIGdlbmVyaWMgYXR0cmlidXRlIGZvciB0aGlzXFxuK1xcdFxcdHB1cnBvc2UsIHNlZSBgL3N5cy9jbGFzcy9sZWRzL1xcdTAwM2NsZWRcXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRgLlxcbitcXG4gV2hhdDpcXHRcXHQvc3lzL2NsYXNzL2xlZHMvXFx1MDAzY2xlZFxcdTAwM2UvbGlua18xMFxcbiBEYXRlOlxcdFxcdEp1biAyMDIzXFxuIEtlcm5lbFZlcnNpb246XFx0Ni41XFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxcbmluZGV4IDM5MTM5NjZjZmRhYzA0Li5hZGJjNTdiOWY0OWMzMyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcXG5AQCAtMjQyLDYgKzI0Miw5IEBAIG9wcyBhbmQgbmVlZHMgdG8gZGVjbGFyZSBzcGVjaWZpYyBzdXBwb3J0IGZvciB0aGUgc3VwcG9ydGVkIHRyaWdnZXJzLlxcbiBcXG4gV2l0aCBodyBjb250cm9sIHdlIHJlZmVyIHRvIHRoZSBMRUQgZHJpdmVuIGJ5IGhhcmR3YXJlLlxcbiBcXG4rQSBzeXNmcyBhdHRyaWJ1dGUgYHRyaWdnZXJfbWF5X29mZmxvYWRgIGlzIHByb3ZpZGVkIGZvciB1c2Vyc3BhY2UgdG9cXG4rcXVlcnkgc3VwcG9ydGVkIHRyaWdnZXJzIGFuZCB0aGVpciBzdGF0ZXMuXFxuK1xcbiBMRUQgZHJpdmVyIG11c3QgZGVmaW5lIHRoZSBmb2xsb3dpbmcgdmFsdWUgdG8gc3VwcG9ydCBodyBjb250cm9sOlxcbiBcXG4gICAgIC0gaHdfY29udHJvbF90cmlnZ2VyOlxcbkBAIC0yOTgsNiArMzAxLDE1IEBAIExFRCBkcml2ZXIgbXVzdCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gc3VwcG9ydCBodyBjb250cm9sOlxcbiAgICAgICAgICAgICAgICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZGV2aWNlIG9yIE5VTEwgaWYgbm90aGluZ1xcbiAgICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IGF0dGFjaGVkLlxcbiBcXG4rTEVEIHRyaWdnZXIgc2hvdWxkIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEFQSSB0byBpbmRpY2F0ZSBodyBjb250cm9sOlxcbisgICAgLSBvZmZsb2FkZWQ6XFxuKyAgICAgICAgICAgICAgICByZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHRyaWdnZXIgaXMgY3VycmVudGx5XFxuKyAgICAgICAgICAgICAgICBvZmZsb2FkZWQgdG8gaGFyZHdhcmUuXFxuK1xcbisgICAgICAgICAgICAgICAgSWYgYSB0cmlnZ2VyIGRvZXNuJ3QgaW1wbGVtZW50IHRoaXMgY2FsbGJhY2ssIHRoZSBkZWZhdWx0XFxuKyAgICAgICAgICAgICAgICB2YWx1ZSB3aWxsIGJlIHRydWUgZm9yIHByaXZhdGUgdHJpZ2dlcnMgYW5kIGZhbHNlIGZvciBnZW5lcmljXFxuKyAgICAgICAgICAgICAgICBvbmVzLlxcbitcXG4gTEVEIGRyaXZlciBjYW4gYWN0aXZhdGUgYWRkaXRpb25hbCBtb2RlcyBieSBkZWZhdWx0IHRvIHdvcmthcm91bmQgdGhlXFxuIGltcG9zc2liaWxpdHkgb2Ygc3VwcG9ydGluZyBlYWNoIGRpZmZlcmVudCBtb2RlIG9uIHRoZSBzdXBwb3J0ZWQgdHJpZ2dlci5cXG4gRXhhbXBsZXMgYXJlIGhhcmRjb2RpbmcgdGhlIGJsaW5rIHNwZWVkIHRvIGEgc2V0IGludGVydmFsLCBlbmFibGUgc3BlY2lhbFxcbkBAIC0zMTEsOSArMzIzLDY5IEBAIHRoZSBlbmQgdXNlIGh3X2NvbnRyb2xfc2V0IHRvIGFjdGl2YXRlIGh3IGNvbnRyb2wuXFxuIEEgdHJpZ2dlciBjYW4gdXNlIGh3X2NvbnRyb2xfZ2V0IHRvIGNoZWNrIGlmIGEgTEVEIGlzIGFscmVhZHkgaW4gaHcgY29udHJvbFxcbiBhbmQgaW5pdCB0aGVpciBmbGFncy5cXG4gXFxuK0FsdGVybmF0aXZlbHksIGEgcHJpdmF0ZSB0cmlnZ2VyIGNhbiBiZSBpbXBsZW1lbnRlZCBhbG9uZyB3aXRoIHRoZSBMRUQgZHJpdmVyIGlmXFxuK3RoZSBMRUQncyBoYXJkd2FyZSBjb250cm9sIGRvZXNuJ3QgZml0IGFueSBnZW5lcmljIHRyaWdnZXIuIFRvIGFzc29jaWF0ZSB0aGVcXG4rcHJpdmF0ZSB0cmlnZ2VyIHdpdGggdGhlIExFRCBjbGFzc2RldiwgdGhlaXIgYHRyaWdnZXJfdHlwZWAgbXVzdCBiZSB0aGUgc2FtZS4gVG9cXG4rZGVjbGFyZSB0aGF0IHRoZSBwcml2YXRlIHRyaWdnZXIgcHJvdmlkZXMgaGFyZHdhcmUgY29udHJvbCBmb3IgdGhlIGFzc29jaWF0ZWRcXG4rTEVEIGNsYXNzZGV2LCBzZXQgdGhlIGBod19jb250cm9sX3RyaWdnZXJgIHN0cmluZyB0byB0aGUgdHJpZ2dlcidzIG5hbWUuIFNpbmNlXFxuK2JvdGggdGhlIExFRCBjbGFzc2RldiBhbmQgdGhlIHByaXZhdGUgdHJpZ2dlciBhcmUgaW4gdGhlIHNhbWUgTEVEIGRyaXZlciwgaXQnc1xcbitub3QgbmVjZXNzYXJ5IGZvciB0aGVtIHRvIGNvb3JkaW5hdGUgdmlhIGBod19jb250cm9sXypgIGNhbGxiYWNrcy5cXG4rXFxuIFdoZW4gdGhlIExFRCBpcyBpbiBodyBjb250cm9sLCBubyBzb2Z0d2FyZSBibGluayBpcyBwb3NzaWJsZSBhbmQgZG9pbmcgc29cXG4gd2lsbCBlZmZlY3RpdmVseSBkaXNhYmxlIGh3IGNvbnRyb2wuXFxuIFxcbitIYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uXFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK1NvbWUgaGFyZHdhcmUgY2FuIGF1dG9ub21vdXNseSBhY3RpdmF0ZS9kZWFjdGl2YXRlIGhhcmR3YXJlIGNvbnRyb2wuIEFmdGVyIHRoYXQsXFxuK3RoZSBMRUQgaGFyZHdhcmUgbm90aWZpZXMgdGhlIExFRCBkcml2ZXIuXFxuK1xcbitJZiB0aGUgZHJpdmVyIGNhbiBkZXRlY3Qgc3VjaCB0cmFuc2l0aW9ucyBhbmQgdGh1cyB3YW50cyB0byBub3RpZnkgdGhlIExFRCBjb3JlXFxuK3RvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIHRoZW4gdGhlIGBMRURfVFJJR19IV19DSEFOR0VEYCBmbGFnIG11c3QgYmUgc2V0IGluXFxuK2ZsYWdzIGJlZm9yZSByZWdpc3RlcmluZy4gVG8gdXBkYXRlIHRoZSBjdXJyZW50IHRyaWdnZXIgYWNjb3JkaW5nbHksIGNhbGxcXG4rYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIG9uIHRoZSBMRUQgY2xhc3NkZXYuXFxuK1xcbitUaGlzIGNhcGFiaWxpdHkgaXMgcmVzdHJpY3RlZCB0byB0aGUgTEVEIGRldmljZSdzIHByaXZhdGUgdHJpZ2dlci4gVGhlIHByaXZhdGVcXG4rdHJpZ2dlciBtdXN0IGhhdmUgYmVlbiBwcm9wZXJseSByZWdpc3RlcmVkIChzZWUgYWJvdmUpIGFuZCBuYW1lZCBhZnRlclxcbitgaHdfY29udHJvbF90cmlnZ2VyYC5cXG4rXFxuK09ubHkgdHdvIHRyYW5zaXRpb25zIGFyZSBkZWZpbmVkOlxcbitcXG4rLSBcXFwibm9uZVxcXCIgPVxcdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyOlxcbisgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2xcXG4rICAgICAgICBhbmQgd2hlbiBcXFwibm9uZVxcXCIgKGkuZS4sIG5vIHRyaWdnZXIpIGlzIGN1cnJlbnRseSBhY3RpdmUuIElmIHRoZSBwcml2YXRlXFxuKyAgICAgICAgdHJpZ2dlciBpcyBhbHJlYWR5IGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5XFxuKyAgICAgICAgYSBuby1vcC5cXG4rXFxuKyAgICAgICAgVGhlIGFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhc1xcbisgICAgICAgIG5vcm1hbC5cXG4rXFxuKyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGVcXG4rICAgICAgICBhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIGN1cnJlbnRseSBpbiBoYXJkd2FyZVxcbisgICAgICAgIGNvbnRyb2wuXFxuK1xcbisgICAgICAgIElmIGVycm9yIG9jY3VycyBpbiB0aGUgYWN0aXZhdGlvbiBzZXF1ZW5jZSwgdGhlIExFRCBUcmlnZ2VyIGNvcmUgcmV2ZXJ0c1xcbisgICAgICAgIHRoZSBlZmZlY3RpdmUgdHJpZ2dlciB0byBcXFwibm9uZVxcXCIuXFxuK1xcbistIHByaXZhdGUgdHJpZ2dlciA9XFx1MDAzZSBcXFwibm9uZVxcXCJcXG4rICAgICAgICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaGFyZHdhcmUgYXV0b25vbW91c2x5IGRlYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2xcXG4rICAgICAgICBhbmQgd2hlbiB0aGUgcHJpdmF0ZSB0cmlnZ2VyIGlzIGN1cnJlbnRseSBhY3RpdmUuIElmIFxcXCJub25lXFxcIiAoaS5lLiwgbm9cXG4rICAgICAgICB0cmlnZ2VyKSBpcyBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseSBhXFxuKyAgICAgICAgbm8tb3AuXFxuK1xcbisgICAgICAgIFRoZSBkZWFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhc1xcbisgICAgICAgIG5vcm1hbCwgZXhjZXB0IHRoYXQgdGhlIGN1cnJlbnQgTEVEIGJyaWdodG5lc3MgaXMgcmV0YWluZWQuIFRoZSByZWFzb25cXG4rICAgICAgICBmb3Iga2VlcGluZyB0aGUgYnJpZ2h0bmVzcyB1bmNoYW5nZWQgaXMgdGhhdCBzb21lIGhhcmR3YXJlIG1heSBjaG9vc2UgYVxcbisgICAgICAgIHNwZWNpZmljIGJyaWdodG5lc3MgaW5zdGVhZCBvZiBzaW1wbHkgdHVybmluZyBvZmYgdGhlIExFRCBhZnRlclxcbisgICAgICAgIGF1dG9ub21vdXNseSBkZWFjdGl2YXRpbmcgaGFyZHdhcmUgY29udHJvbC5cXG4rXFxuKyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGVcXG4rICAgICAgICBkZWFjdGl2YXRpb24gc2VxdWVuY2UgZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXMgbm90IGN1cnJlbnRseSBpbiBoYXJkd2FyZVxcbisgICAgICAgIGNvbnRyb2wuXFxuK1xcbitJZiB0aGUgY3VycmVudCB0cmlnZ2VyIGlzIG5laXRoZXIgdGhlIHByaXZhdGUgdHJpZ2dlciBub3IgXFxcIm5vbmVcXFwiLCBubyB0cmFuc2l0aW9uXFxuK3dpbGwgYmUgbWFkZS5cXG4rXFxuIEtub3duIElzc3Vlc1xcbiA9PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuY1xcbmluZGV4IGE1MWIwZWQ1Mzg4NjQ0Li4yNDYwZmNmMGM0NjkwYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcXG4rKysgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcXG5AQCAtMjcsMTYgKzI3LDYgQEAgc3RhdGljIExJU1RfSEVBRChsZWRzX2xvb2t1cF9saXN0KTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGVkc193cTtcXG4gXFxuLXN0YXRpYyBib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuLXtcXG4tI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXFxuLVxcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrKTtcXG4tXFx0cmV0dXJuIGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyIFxcdTAwMjZcXHUwMDI2IGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyLVxcdTAwM2V0cmlnZ2VyX3R5cGU7XFxuLSNlbHNlXFxuLVxcdHJldHVybiBmYWxzZTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuIHtcXG5AQCAtNzQsNiArNjQsOSBAQCBzdGF0aWMgc3NpemVfdCBicmlnaHRuZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFxuIFxcdGlmIChzdGF0ZSA9PSBMRURfT0ZGKVxcbiBcXHRcXHRsZWRfdHJpZ2dlcl9yZW1vdmUobGVkX2NkZXYpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKGxlZF9jZGV2KTtcXG4rXFxuIFxcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2Rldiwgc3RhdGUpO1xcbiBcXG4gXFx0cmV0ID0gc2l6ZTtcXG5AQCAtMTAzLDggKzk2LDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqY29uc3QgbGVkX3RyaWdnZXJfYmluX2F0dHJzW10gPSB7XFxuIFxcdFxcdTAwMjZiaW5fYXR0cl90cmlnZ2VyLFxcbiBcXHROVUxMLFxcbiB9O1xcbitcXG4rc3RhdGljIERFVklDRV9BVFRSX1JPKHRyaWdnZXJfbWF5X29mZmxvYWQpO1xcbitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbGVkX3RyaWdnZXJfYXR0cnNbXSA9IHtcXG4rXFx0XFx1MDAyNmRldl9hdHRyX3RyaWdnZXJfbWF5X29mZmxvYWQuYXR0cixcXG4rXFx0TlVMTFxcbit9O1xcbitcXG4rc3RhdGljIHVtb2RlX3QgbGVkX3RyaWdnZXJfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcXG4rXFx0XFx0XFx0XFx0ICAgICAgaW50IGlkeClcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBrb2JqX3RvX2Rldihrb2JqKTtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4rXFxuK1xcdGlmIChhdHRyID09IFxcdTAwMjZkZXZfYXR0cl90cmlnZ2VyX21heV9vZmZsb2FkLmF0dHIpXFxuK1xcdFxcdHJldHVybiBsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID8gYXR0ci1cXHUwMDNlbW9kZSA6IDA7XFxuK1xcbitcXHRyZXR1cm4gYXR0ci1cXHUwMDNlbW9kZTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbGVkX3RyaWdnZXJfZ3JvdXAgPSB7XFxuIFxcdC5iaW5fYXR0cnMgPSBsZWRfdHJpZ2dlcl9iaW5fYXR0cnMsXFxuK1xcdC5hdHRycyA9IGxlZF90cmlnZ2VyX2F0dHJzLFxcbitcXHQuaXNfdmlzaWJsZSA9IGxlZF90cmlnZ2VyX2lzX3Zpc2libGUsXFxuIH07XFxuICNlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jIGIvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jXFxuaW5kZXggYjEyMjMyMThiZGExMTMuLjZhZTI4Y2JkMWM3NzgzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xcbkBAIC03LDkgKzcsMTIgQEBcXG4gICogQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSBcXHUwMDNjcnB1cmRpZUBvcGVuZWRoYW5kLmNvbVxcdTAwM2VcXG4gICovXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbG9ja2RlcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZXIuaFxcdTAwM2VcXG5AQCAtMzMsNiArMzYsMzMgQEAgdHJpZ2dlcl9yZWxldmFudChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxcbiBcXHRyZXR1cm4gIXRyaWctXFx1MDAzZXRyaWdnZXJfdHlwZSB8fCB0cmlnLVxcdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfdHlwZTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX2xvY2spO1xcbitcXG4rXFx0aWYgKCFsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKCFsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyIHx8XFxuK1xcdCAgICBzdHJjbXAobGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciwgbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXItXFx1MDAzZW5hbWUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAobGVkX2NkZXYtXFx1MDAzZXRyaWdnZXItXFx1MDAzZW9mZmxvYWRlZClcXG4rXFx0XFx0cmV0dXJuIGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyLVxcdTAwM2VvZmZsb2FkZWQobGVkX2NkZXYpO1xcbitcXG4rXFx0ZGV2X3dhcm5fb25jZShsZWRfY2Rldi1cXHUwMDNlZGV2LCBcXFwiaHcgY29udHJvbCB0cmlnZ2VyICVzIGRvZXNuJ3QgaW1wbGVtZW50IG9mZmxvYWRlZCgpXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICBsZWRfY2Rldi1cXHUwMDNldHJpZ2dlci1cXHUwMDNlbmFtZSk7XFxuK1xcbitcXHRyZXR1cm4gbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXItXFx1MDAzZXRyaWdnZXJfdHlwZTtcXG4rfVxcbitcXG4rYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrKTtcXG4rXFx0cmV0dXJuIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZCk7XFxuK1xcbiBzc2l6ZV90IGxlZF90cmlnZ2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZixcXG4gXFx0XFx0XFx0ICBsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpXFxuQEAgLTE2Myw3ICsxOTMsOCBAQCBzc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZWFkKTtcXG4gXFxuIC8qIENhbGxlciBtdXN0IGVuc3VyZSBsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrIGhlbGQgKi9cXG4taW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxcbitzdGF0aWMgaW50IF9fbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcsXFxuK1xcdFxcdFxcdCAgICAgYm9vbCBod190cmlnZ2VyZWQpXFxuIHtcXG4gXFx0Y2hhciAqZXZlbnQgPSBOVUxMO1xcbiBcXHRjaGFyICplbnZwWzJdO1xcbkBAIC0xOTQsNyArMjI1LDIxIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcXG4gXFx0XFx0bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfZGF0YSA9IE5VTEw7XFxuIFxcdFxcdGxlZF9jZGV2LVxcdTAwM2VhY3RpdmF0ZWQgPSBmYWxzZTtcXG4gXFx0XFx0bGVkX2NkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5MRURfSU5JVF9ERUZBVUxUX1RSSUdHRVI7XFxuLVxcdFxcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2RldiwgTEVEX09GRik7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBIYXJkd2FyZSBtYXkgaGF2ZSBzZWxlY3RlZCBhIG5ldyBicmlnaHRuZXNzIGxldmVsIGR1cmluZyBpdHNcXG4rXFx0XFx0ICogaGFyZHdhcmUgY29udHJvbCB0cmFuc2l0aW9uLCBzbyBvbmx5IHJlc2V0IGJyaWdodG5lc3MgaWYgd2VcXG4rXFx0XFx0ICogYXJlIHN3aXRjaGluZyB0byBhbm90aGVyIHRyaWdnZXIgb3IgaWYgdGhlIHN3aXRjaGluZyBpcyBub3RcXG4rXFx0XFx0ICogaGFyZHdhcmUgdHJpZ2dlcmVkLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgZXJyb3IgcGF0aCwgYXMgcnVubmluZ1xcbitcXHRcXHQgKiBpbnRvIHRoZSBlcnJvciBwYXRoIGltcGxpZXMgYSBub25lID1cXHUwMDNlIHByaXZhdGUgdHJpZ2dlclxcbitcXHRcXHQgKiB0cmFuc2l0aW9uLiBUaGlzIGhpbnRzIHRoYXQgdGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlXFxuK1xcdFxcdCAqIHRyaWdnZXIgbXVzdCBoYXZlIHNvbWUgZnVuZGFtZW50YWwgYnVncywgc28gZG9uJ3QgYm90aGVyXFxuK1xcdFxcdCAqIGxlYXZpbmcgdGhlIExFRCBpbiBhbiB1bmRlZmluZWQgc3RhdGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodHJpZyB8fCAhaHdfdHJpZ2dlcmVkKVxcbitcXHRcXHRcXHRsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIExFRF9PRkYpO1xcbiBcXHR9XFxuIFxcdGlmICh0cmlnKSB7XFxuIFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dHJpZy1cXHUwMDNlbGVkZGV2X2xpc3RfbG9jayk7XFxuQEAgLTI1OCw2ICszMDMsMTEgQEAgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbitcXG4raW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxcbit7XFxuK1xcdHJldHVybiBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgdHJpZywgZmFsc2UpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldCk7XFxuIFxcbiB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG5AQCAtMjY4LDYgKzMxOCwxNSBAQCB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZW1vdmUpO1xcbiBcXG4rdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRndWFyZChyd3NlbV93cml0ZSkoXFx1MDAyNmxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX2xvY2spO1xcbitcXG4rXFx0aWYgKF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2RldikpXFxuK1xcdFxcdGxlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgTlVMTCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wpO1xcbitcXG4gc3RhdGljIGJvb2wgbGVkX21hdGNoX2RlZmF1bHRfdHJpZ2dlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxcbiB7XFxuQEAgLTMxMyw2ICszNzIsMzIgQEAgdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdCk7XFxuIFxcbitzc2l6ZV90IHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbit7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcdHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZztcXG4rXFx0Ym9vbCBoaXQsIG9mZmxvYWRlZDtcXG4rXFx0aW50IGxlbjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZWxlZF9hY2Nlc3MpO1xcbitcXHRndWFyZChyd3NlbV9yZWFkKShcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfbG9jayk7XFxuK1xcbitcXHR0cmlnID0gbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXI7XFxuK1xcbitcXHRvZmZsb2FkZWQgPSBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpO1xcbitcXHRoaXQgPSBvZmZsb2FkZWQgfHwgKHRyaWcgXFx1MDAyNlxcdTAwMjYgIXN0cmNtcChsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLCB0cmlnLVxcdTAwM2VuYW1lKSk7XFxuK1xcbitcXHQvKiBbb2ZmbG9hZGVkXSBcXHUwMDNjYWN0aXZlX2J1dF9ub3Rfb2ZmbG9hZGVkXFx1MDAzZSBpbmFjdGl2ZSAqL1xcbitcXHRsZW4gPSBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVzJXMlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0IG9mZmxvYWRlZCA/IFxcXCJbXFxcIiA6IChoaXQgPyBcXFwiXFx1MDAzY1xcXCIgOiBcXFwiXFxcIiksXFxuK1xcdFxcdFxcdCBsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLFxcbitcXHRcXHRcXHQgb2ZmbG9hZGVkID8gXFxcIl1cXFwiIDogKGhpdCA/IFxcXCJcXHUwMDNlXFxcIiA6IFxcXCJcXFwiKSk7XFxuK1xcbitcXHRyZXR1cm4gbGVuO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyk7XFxuK1xcbiAvKiBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi9cXG4gXFxuIGludCBsZWRfdHJpZ2dlcl9yZWdpc3RlcihzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXFxuQEAgLTQwMyw2ICs0ODgsNjMgQEAgaW50IGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIpO1xcbiBcXG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcXG4rc3RhdGljIHZvaWQgbGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxlZF90cmlnZ2VyICpoY190cmlnKVxcbit7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCFsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcikge1xcbitcXHRcXHQvKiBcXFwibm9uZVxcXCIgPVxcdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyLiAqL1xcbitcXHRcXHRpZiAoYWN0aXZhdGUpXFxuK1xcdFxcdFxcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBoY190cmlnLCB0cnVlKTtcXG4rXFx0fSBlbHNlIGlmIChsZWRfY2Rldi1cXHUwMDNldHJpZ2dlciA9PSBoY190cmlnKSB7XFxuK1xcdFxcdC8qIHByaXZhdGUgdHJpZ2dlciA9XFx1MDAzZSBcXFwibm9uZVxcXCIuICovXFxuK1xcdFxcdGlmICghYWN0aXZhdGUpXFxuK1xcdFxcdFxcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMLCB0cnVlKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogT3RoZXIgdHJpZ2dlciBpcyBhY3RpdmUuICovXFxuK1xcdFxcdGRldl9kYmcobGVkX2NkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIklnbm9yaW5nIGh3IGNvbnRyb2wgdHJhbnNpdGlvbiAoJXMgJXMpIHdoaWxlICVzIGlzIGFjdGl2ZVxcXCIsXFxuK1xcdFxcdFxcdGFjdGl2YXRlID8gXFxcImFjdGl2YXRlXFxcIiA6IFxcXCJkZWFjdGl2YXRlXFxcIiwgaGNfdHJpZy1cXHUwMDNlbmFtZSxcXG4rXFx0XFx0XFx0bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXItXFx1MDAzZW5hbWUpO1xcbitcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRkZXZfd2FybihsZWRfY2Rldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvICVzICVzIGluIGh3IGNvbnRyb2wgdHJhbnNpdGlvbjogJWRcXFwiLFxcbitcXHRcXHRcXHQgYWN0aXZhdGUgPyBcXFwiYWN0aXZhdGVcXFwiIDogXFxcImRlYWN0aXZhdGVcXFwiLCBoY190cmlnLVxcdTAwM2VuYW1lLCBlcnIpO1xcbit9XFxuK1xcbit2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpXFxuK3tcXG4rXFx0c3RydWN0IGxlZF90cmlnZ2VyICp0cmlnO1xcbitcXG4rXFx0LyogUmVzdHJpY3RlZCB0byBwcml2YXRlIHRyaWdnZXJzLiAqL1xcbitcXHRpZiAoV0FSTl9PTighKGxlZF9jZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IExFRF9UUklHX0hXX0NIQU5HRUQpIHx8XFxuK1xcdFxcdCAgICAhbGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciB8fCAhbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfdHlwZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChyd3NlbV9yZWFkLCBcXHUwMDI2dHJpZ2dlcnNfbGlzdF9sb2NrKSB7XFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodHJpZywgXFx1MDAyNnRyaWdnZXJfbGlzdCwgbmV4dF90cmlnKSB7XFxuK1xcdFxcdFxcdGlmICh0cmlnLVxcdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfdHlwZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIXN0cmNtcCh0cmlnLVxcdTAwM2VuYW1lLCBsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyKSkge1xcbitcXHRcXHRcXHRcXHRndWFyZChyd3NlbV93cml0ZSkoXFx1MDAyNmxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX2xvY2spO1xcbitcXG4rXFx0XFx0XFx0XFx0bGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKGxlZF9jZGV2LCBhY3RpdmF0ZSwgdHJpZyk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGRldl9lcnIobGVkX2NkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFxcIiVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXFxcXG5cXFwiLFxcbitcXHRcXHRfX2Z1bmNfXywgbGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7XFxuKyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXFxuK1xcbiAvKiBTaW1wbGUgTEVEIFRyaWdnZXIgSW50ZXJmYWNlICovXFxuIFxcbiB2b2lkIGxlZF90cmlnZ2VyX2V2ZW50KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jIGIvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jXFxuaW5kZXggMTg0NGQwY2Q1ZjUyODQuLjZkYjgzZDAxNTI3NzVmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xcbkBAIC04NSwxMiArODUsMTggQEAgc3RhdGljIGludCBjcm9zX2VjX2xlZF90cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbiBcXHRyZXR1cm4gY3Jvc19lY19sZWRfc2VuZF9jbWQocHJpdi1cXHUwMDNlY3Jvc19lYywgXFx1MDAyNmFyZyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGNyb3NfZWNfbGVkX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgY3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlO1xcbiBcXG4gc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBjcm9zX2VjX2xlZF90cmlnZ2VyID0ge1xcbiBcXHQubmFtZSA9IFxcXCJjaHJvbWVvcy1hdXRvXFxcIixcXG4gXFx0LnRyaWdnZXJfdHlwZSA9IFxcdTAwMjZjcm9zX2VjX2xlZF90cmlnZ2VyX3R5cGUsXFxuIFxcdC5hY3RpdmF0ZSA9IGNyb3NfZWNfbGVkX3RyaWdnZXJfYWN0aXZhdGUsXFxuK1xcdC5vZmZsb2FkZWQgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZCxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcXG5pbmRleCBlZDZhNDdiYmI0NGY5Yy4uMzJkNDBkMTc2ZDNmMTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcXG4rKysgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xcbkBAIC0xOTUsMTAgKzE5NSwxNiBAQCBzdGF0aWMgdm9pZCBvbW5pYV9od3RyaWdfZGVhY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KVxcbiBcXHRcXHRcXHRlcnIpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgb21uaWFfaHdfdHJpZ2dlciA9IHtcXG4gXFx0Lm5hbWVcXHRcXHQ9IFxcXCJvbW5pYS1tY3VcXFwiLFxcbiBcXHQuYWN0aXZhdGVcXHQ9IG9tbmlhX2h3dHJpZ19hY3RpdmF0ZSxcXG4gXFx0LmRlYWN0aXZhdGVcXHQ9IG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlLFxcbitcXHQub2ZmbG9hZGVkXFx0PSBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkLFxcbiBcXHQudHJpZ2dlcl90eXBlXFx0PSBcXHUwMDI2b21uaWFfaHdfdHJpZ2dlcl90eXBlLFxcbiB9O1xcbiBcXG5AQCAtMjUxLDYgKzI1Nyw3IEBAIHN0YXRpYyBpbnQgb21uaWFfbGVkX3JlZ2lzdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBvbW5pYV9sZWQgKmxlZCxcXG4gXFx0ICogYnkgTEVEIGNsYXNzIGZyb20gdGhlIGxpbnV4LGRlZmF1bHQtdHJpZ2dlciBwcm9wZXJ0eS5cXG4gXFx0ICovXFxuIFxcdGNkZXYtXFx1MDAzZWRlZmF1bHRfdHJpZ2dlciA9IG9tbmlhX2h3X3RyaWdnZXIubmFtZTtcXG4rXFx0Y2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lO1xcbiBcXG4gXFx0LyogUHV0IHRoZSBMRUQgaW50byBzb2Z0d2FyZSBtb2RlICovXFxuIFxcdHJldCA9IG9tbmlhX2NtZF93cml0ZV91OChjbGllbnQsIE9NTklBX0NNRF9MRURfTU9ERSwgT01OSUFfQ01EX0xFRF9NT0RFX0xFRChsZWQtXFx1MDAzZXJlZykgfFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy5oIGIvZHJpdmVycy9sZWRzL2xlZHMuaFxcbmluZGV4IGJlZTQ2NjUxZTA2OGY3Li5iMDhhMjg5Mzk3ZTQ2MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy5oXFxuKysrIGIvZHJpdmVycy9sZWRzL2xlZHMuaFxcbkBAIC0yNyw2ICsyNyw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXFxuIHNzaXplX3QgbGVkX3RyaWdnZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiBcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZixcXG4gXFx0XFx0XFx0bG9mZl90IHBvcywgc2l6ZV90IGNvdW50KTtcXG4rc3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7XFxuIFxcbiBleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBsZWRzX2xpc3RfbG9jaztcXG4gZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbGVkc19saXN0O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1xcbmluZGV4IGMxMTI4MmE3NGI1YWMzLi43OTgxMjIxNTQwNDliNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1xcbkBAIC05LDYgKzksMTUgQEAgbWVudWNvbmZpZyBMRURTX1RSSUdHRVJTXFxuIFxcbiBpZiBMRURTX1RSSUdHRVJTXFxuIFxcbitjb25maWcgTEVEU19UUklHR0VSU19IV19DSEFOR0VEXFxuK1xcdGJvb2wgXFxcIkxFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnRcXFwiXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGhhcmR3YXJlIGluaXRpYXRlZCBoYXJkd2FyZSBjb250cm9sXFxuK1xcdCAgdHJhbnNpdGlvbnMsIHdoZXJlIHRoZSBMRUQgaGFyZHdhcmUgYXV0b25vbW91c2x5IHN3aXRjaGVzIGJldHdlZW5cXG4rXFx0ICBcXFwibm9uZVxcXCIgKGkuZS4sIG5vIHRyaWdnZXIpIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyLlxcbitcXG4rXFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0IGZvciBkZXRhaWxzLlxcbitcXG4gY29uZmlnIExFRFNfVFJJR0dFUl9USU1FUlxcbiBcXHR0cmlzdGF0ZSBcXFwiTEVEIFRpbWVyIFRyaWdnZXJcXFwiXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcXG5pbmRleCA2NGMwNzhlOTk3ZjI4YS4uYTI2MTA5Y2E0YjFjOWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuY1xcbisrKyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcXG5AQCAtNzU0LDEwICs3NTQsMTggQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3RyaWdfZGVhY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4gXFx0a2ZyZWUodHJpZ2dlcl9kYXRhKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBsZWRfbmV0ZGV2X2RhdGEgKnRyaWdnZXJfZGF0YSA9IGxlZF9nZXRfdHJpZ2dlcl9kYXRhKGxlZF9jZGV2KTtcXG4rXFxuK1xcdHJldHVybiB0cmlnZ2VyX2RhdGEtXFx1MDAzZWh3X2NvbnRyb2w7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgbmV0ZGV2X2xlZF90cmlnZ2VyID0ge1xcbiBcXHQubmFtZSA9IFxcXCJuZXRkZXZcXFwiLFxcbiBcXHQuYWN0aXZhdGUgPSBuZXRkZXZfdHJpZ19hY3RpdmF0ZSxcXG4gXFx0LmRlYWN0aXZhdGUgPSBuZXRkZXZfdHJpZ19kZWFjdGl2YXRlLFxcbitcXHQub2ZmbG9hZGVkID0gbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkLFxcbiBcXHQuZ3JvdXBzID0gbmV0ZGV2X3RyaWdfZ3JvdXBzLFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xcbmluZGV4IDQ0NDNmNDBlZjhhYTdlLi5lOTJiMWU5MDA3OTUxMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnXFxuQEAgLTE2LDYgKzE2LDcgQEAgY29uZmlnIElERUFQQURfTEFQVE9QXFxuIFxcdHNlbGVjdCBJTlBVVF9TUEFSU0VLTUFQXFxuIFxcdHNlbGVjdCBORVdfTEVEU1xcbiBcXHRzZWxlY3QgTEVEU19DTEFTU1xcbitcXHRzZWxlY3QgTEVEU19UUklHR0VSU1xcbiBcXHRoZWxwXFxuIFxcdCAgVGhpcyBpcyBhIGRyaXZlciBmb3IgTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MgY29udGFpbnMgZHJpdmVycyBmb3JcXG4gXFx0ICByZmtpbGwgc3dpdGNoLCBob3RrZXksIGZhbiBjb250cm9sIGFuZCBiYWNrbGlnaHQgY29udHJvbC5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xcbmluZGV4IDRmYmM5MDRmMWZjMzkwLi4yNTNkMjk2MmI5Mjc2MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xcbisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXFxuQEAgLTksNiArOSw3IEBAXFxuICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXFxcIjogXFxcIiBmbXRcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hY3BpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdG9taWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JhY2tsaWdodC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG9wcy5oXFx1MDAzZVxcbkBAIC0yNSw3ICsyNiw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaWZmaWVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlZHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xvY2tkZXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fcHJvZmlsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcG93ZXJfc3VwcGx5LmhcXHUwMDNlXFxuQEAgLTEzNCwxMCArMTM3LDMxIEBAIGVudW0ge1xcbiB9O1xcbiBcXG4gLypcXG4tICogVGhlc2UgY29ycmVzcG9uZCB0byB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBzdGF0ZXMgLSAxXFxuLSAqIEZ1dHVyZSBrZXlib2FyZCB0eXBlcyBtYXkgbmVlZCBhIG5ldyBzeXN0ZW0sIGlmIHRoZXJlJ3MgYSBjb2xsaXNpb25cXG4tICogS0JEX0JMX1RSSVNUQVRFX0FVVE8gaGFzIG5vIHdheSB0byByZXBvcnQgb3Igc2V0IHRoZSBhdXRvIHN0YXRlXFxuLSAqIHNvIGl0IGVmZmVjdGl2ZWx5IGhhcyAzIHN0YXRlcywgYnV0IG5lZWRzIHRvIGhhbmRsZSA0XFxuKyAqIFRoZSBlbnVtZXJhdGlvbiBoYXMgdHdvIHB1cnBvc2VzOlxcbisgKiAgIC0gYXMgYW4gaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYWxsIGtub3duIHR5cGVzIG9mIGtleWJvYXJkIGJhY2tsaWdodFxcbisgKiAgIC0gYXMgYSBtYW5kYXRvcnkgcGFyYW1ldGVyIG9mIHRoZSBLQkxDIGNvbW1hbmRcXG4rICpcXG4rICogRm9yIGVhY2ggdHlwZSwgdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgdmFsdWVzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXFxuKyAqIHwgICAgICBIYXJkd2FyZSBicmlnaHRuZXNzIHwgICAgICAgIDAgfCAgIDEgfCAgICAyIHwgICAgMyB8XFxuKyAqIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICB8XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXFxuKyAqIHwgS0JEX0JMX1NUQU5EQVJEICAgICAgICAgIHwgICAgICBvZmYgfCAgb24gfCAgTi9BIHwgIE4vQSB8XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXFxuKyAqIHwgS0JEX0JMX1RSSVNUQVRFICAgICAgICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgIE4vQSB8XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXFxuKyAqIHwgS0JEX0JMX1RSSVNUQVRFX0FVVE8gICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgYXV0byB8XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXFxuKyAqXFxuKyAqIFdlIG1hcCBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyBmb3IgS0JEX0JMX1RSSVNUQVRFX0FVVE8gYXMgZm9sbG93czpcXG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tK1xcbisgKiB8ICBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8XFxuKyAqIHwgT3BlcmF0aW9uICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHxcXG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tK1xcbisgKiB8IFJlYWQgICAgICAgICAgICAgICAgICAgICB8IG9mZi9hdXRvIHwgbG93IHwgaGlnaCB8XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLStcXG4rICogfCBXcml0ZSAgICAgICAgICAgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfFxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rXFxuICAqL1xcbiBlbnVtIHtcXG4gXFx0S0JEX0JMX1NUQU5EQVJEICAgICAgPSAxLFxcbkBAIC0xNDUsNiArMTY5LDggQEAgZW51bSB7XFxuIFxcdEtCRF9CTF9UUklTVEFURV9BVVRPID0gMyxcXG4gfTtcXG4gXFxuKyNkZWZpbmUgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTXFx0M1xcbitcXG4gI2RlZmluZSBLQkRfQkxfUVVFUllfVFlQRVxcdFxcdDB4MVxcbiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9UWVBFXFx0XFx0MHg1XFxuICNkZWZpbmUgS0JEX0JMX1RSSVNUQVRFX0FVVE9fVFlQRVxcdDB4N1xcbkBAIC0yMDMsNyArMjI5LDkgQEAgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSB7XFxuIFxcdFxcdGJvb2wgaW5pdGlhbGl6ZWQ7XFxuIFxcdFxcdGludCB0eXBlO1xcbiBcXHRcXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZDtcXG4tXFx0XFx0dW5zaWduZWQgaW50IGxhc3RfYnJpZ2h0bmVzcztcXG4rXFx0XFx0YXRvbWljX3QgbGFzdF9od19icmlnaHRuZXNzO1xcbitcXG4rXFx0XFx0c3RydWN0IG11dGV4IG5vdGlmX211dGV4OyAvKiBwcm90ZWN0cyBub3RpZmljYXRpb25zICovXFxuIFxcdH0ga2JkX2JsO1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRib29sIGluaXRpYWxpemVkO1xcbkBAIC0xNTkyLDcgKzE2MjAsMjQgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZShpbnQgdHlwZSlcXG4gXFx0cmV0dXJuICh0eXBlID09IEtCRF9CTF9UUklTVEFURSkgfHwgKHR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8pO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCBpbnQgaHdfYnJpZ2h0bmVzcylcXG4re1xcbitcXHQvKiBPZmYsIGxvdyBvciBoaWdoICovXFxuK1xcdGlmIChod19icmlnaHRuZXNzIFxcdTAwM2M9IHByaXYtXFx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXFxuK1xcdFxcdHJldHVybiBod19icmlnaHRuZXNzO1xcbitcXG4rXFx0LyogQXV0byAoY29udHJvbGxlZCBieSBFQyBhY2NvcmRpbmcgdG8gQUxTKSwgcmVwb3J0IGFzIG9mZiAqL1xcbitcXHRpZiAocHJpdi1cXHUwMDNla2JkX2JsLnR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGh3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFVua25vd24gdmFsdWUgKi9cXG4rXFx0ZGV2X3dhcm4oXFx1MDAyNnByaXYtXFx1MDAzZXBsYXRmb3JtX2RldmljZS1cXHUwMDNlZGV2LFxcbitcXHRcXHQgXFxcIlVua25vd24ga2V5Ym9hcmQgYmFja2xpZ2h0IHZhbHVlOiAlZFxcXCIsIGh3X2JyaWdodG5lc3MpO1xcbitcXHRyZXR1cm4gLUVJTlZBTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmFsdWU7XFxuIFxcdGludCBlcnI7XFxuQEAgLTE2MDYsMjEgKzE2NTEsNyBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRcXHQvKiBDb252ZXJ0IHJldHVybmVkIHZhbHVlIHRvIGJyaWdodG5lc3MgbGV2ZWwgKi9cXG4tXFx0XFx0dmFsdWUgPSBGSUVMRF9HRVQoS0JEX0JMX0dFVF9CUklHSFRORVNTLCB2YWx1ZSk7XFxuLVxcbi1cXHRcXHQvKiBPZmYsIGxvdyBvciBoaWdoICovXFxuLVxcdFxcdGlmICh2YWx1ZSBcXHUwMDNjPSBwcml2LVxcdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxcbi1cXHRcXHRcXHRyZXR1cm4gdmFsdWU7XFxuLVxcbi1cXHRcXHQvKiBBdXRvLCByZXBvcnQgYXMgb2ZmICovXFxuLVxcdFxcdGlmICh2YWx1ZSA9PSBwcml2LVxcdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzICsgMSlcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRcXHQvKiBVbmtub3duIHZhbHVlICovXFxuLVxcdFxcdGRldl93YXJuKFxcdTAwMjZwcml2LVxcdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0IFxcXCJVbmtub3duIGtleWJvYXJkIGJhY2tsaWdodCB2YWx1ZTogJWx1XFxcIiwgdmFsdWUpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0cmV0dXJuIEZJRUxEX0dFVChLQkRfQkxfR0VUX0JSSUdIVE5FU1MsIHZhbHVlKTtcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gZXZhbF9oYWxzKHByaXYtXFx1MDAzZWFkZXYtXFx1MDAzZWhhbmRsZSwgXFx1MDAyNnZhbHVlKTtcXG5AQCAtMTYzMCw2ICsxNjYxLDE2IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcXG4gXFx0cmV0dXJuICEhdGVzdF9iaXQoSEFMU19LQkRfQkxfU1RBVEVfQklULCBcXHUwMDI2dmFsdWUpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXFxuK3tcXG4rXFx0aW50IGh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTtcXG4rXFxuK1xcdGlmIChod19icmlnaHRuZXNzIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XFxuK1xcbitcXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTtcXG4rfVxcbitcXG4gc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XFxuQEAgLTE2MzcsNjIgKzE2NzgsMTIzIEBAIHN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBsZWRfY2xhXFxuIFxcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCB1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzcylcXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCBpbnQgaHdfYnJpZ2h0bmVzcylcXG4ge1xcbi1cXHRpbnQgZXJyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHZhbHVlO1xcbiBcXHRpbnQgdHlwZSA9IHByaXYtXFx1MDAzZWtiZF9ibC50eXBlO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7XFxuLVxcdFxcdGlmIChicmlnaHRuZXNzIFxcdTAwM2UgcHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbi1cXHRcXHR2YWx1ZSA9IEZJRUxEX1BSRVAoS0JEX0JMX1NFVF9CUklHSFRORVNTLCBicmlnaHRuZXNzKSB8XFxuK1xcdFxcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGh3X2JyaWdodG5lc3MpIHxcXG4gXFx0XFx0XFx0RklFTERfUFJFUChLQkRfQkxfQ09NTUFORF9UWVBFLCB0eXBlKSB8XFxuIFxcdFxcdFxcdEtCRF9CTF9DT01NQU5EX1NFVDtcXG4gXFx0XFx0ZXJyID0gZXhlY19rYmxjKHByaXYtXFx1MDAzZWFkZXYtXFx1MDAzZWhhbmRsZSwgdmFsdWUpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRlcnIgPSBleGVjX3NhbHMocHJpdi1cXHUwMDNlYWRldi1cXHUwMDNlaGFuZGxlLCBicmlnaHRuZXNzID8gU0FMU19LQkRfQkxfT04gOiBTQUxTX0tCRF9CTF9PRkYpO1xcbitcXHRcXHR2YWx1ZSA9IGh3X2JyaWdodG5lc3MgPyBTQUxTX0tCRF9CTF9PTiA6IFNBTFNfS0JEX0JMX09GRjtcXG4rXFx0XFx0ZXJyID0gZXhlY19zYWxzKHByaXYtXFx1MDAzZWFkZXYtXFx1MDAzZWhhbmRsZSwgdmFsdWUpO1xcbiBcXHR9XFxuLVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnByaXYtXFx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MsIGh3X2JyaWdodG5lc3MpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgaW50IGJyaWdodG5lc3MpXFxuK3tcXG4rXFx0aWYgKGJyaWdodG5lc3MgXFx1MDAzZSBwcml2LVxcdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBicmlnaHRuZXNzKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXFxuIHtcXG4gXFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBXaGVuIGRlaW5pdGlhbGl6aW5nOiBJdCBtdXN0IGJlIHRoZSBzaWRlIGVmZmVjdCBvZiBsZWRfY2RldlxcbitcXHQgKiB1bnJlZ2lzdHJhdGlvbiB3aGVuIG91ciBwcml2YXRlIHRyaWdnZXIgaXMgYWN0aXZlLiBXZSd2ZSBzZXRcXG4rXFx0ICogTEVEX1JFVEFJTl9BVF9TSFVURE9XTiB0byByZXRhaW4gbGVkX2NkZXYgYnJpZ2h0bmVzcyBsZXZlbC5cXG4rXFx0ICogVG8gZG8gdGhlIHNhbWUgZm9yIGF1dG8gbW9kZSwgZ2F0ZSBjaGFuZ2VzIGFuZCByZXR1cm4gZWFybHkuXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkoIXByaXYtXFx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xcbitcXG4rXFx0cmV0dXJuIGF0b21pY19yZWFkKFxcdTAwMjZwcml2LVxcdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzKSA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xcbitcXG4rXFx0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUyk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbGVkX2h3X3RyaWdnZXJfdHlwZSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyID0ge1xcbitcXHQubmFtZSA9IFxcXCJpZGVhcGFkLWF1dG9cXFwiLFxcbitcXHQudHJpZ2dlcl90eXBlID0gXFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl90eXBlLFxcbitcXHQuYWN0aXZhdGUgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfYWN0aXZhdGUsXFxuK1xcdC5vZmZsb2FkZWQgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkLFxcbit9O1xcbitcXG4rc3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQ7XFxuK1xcbitzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGludCBod19icmlnaHRuZXNzLCBpbnQgbGFzdF9od19icmlnaHRuZXNzKVxcbit7XFxuK1xcdGJvb2wgaHdfY29udHJvbCwgbGFzdF9od19jb250cm9sO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWtiZF9ibC50eXBlICE9IEtCRF9CTF9UUklTVEFURV9BVVRPKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRod19jb250cm9sID0gaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XFxuK1xcdGxhc3RfaHdfY29udHJvbCA9IGxhc3RfaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XFxuK1xcbitcXHRpZiAoaHdfY29udHJvbCAhPSBsYXN0X2h3X2NvbnRyb2wpXFxuK1xcdFxcdGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoXFx1MDAyNnByaXYtXFx1MDAzZWtiZF9ibC5sZWQsIGh3X2NvbnRyb2wpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnkoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcXG4ge1xcbi1cXHRpbnQgYnJpZ2h0bmVzcztcXG4rXFx0aW50IGh3X2JyaWdodG5lc3MsIGJyaWdodG5lc3MsIGxhc3RfaHdfYnJpZ2h0bmVzcztcXG4gXFxuIFxcdGlmICghcHJpdi1cXHUwMDNla2JkX2JsLmluaXRpYWxpemVkKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRicmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQocHJpdik7XFxuLVxcdGlmIChicmlnaHRuZXNzIFxcdTAwM2MgMClcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZwcml2LVxcdTAwM2VrYmRfYmwubm90aWZfbXV0ZXgpO1xcbitcXG4rXFx0aHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xcbitcXHRpZiAoaHdfYnJpZ2h0bmVzcyBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmIChicmlnaHRuZXNzID09IHByaXYtXFx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MpXFxuK1xcdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpO1xcbitcXHRpZiAoYnJpZ2h0bmVzcyBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybjsgLyogUmVqZWN0IGluc2FuZSB2YWx1ZXMgZWFybHkuICovXFxuK1xcbitcXHRsYXN0X2h3X2JyaWdodG5lc3MgPSBhdG9taWNfeGNoZyhcXHUwMDI2cHJpdi1cXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcywgaHdfYnJpZ2h0bmVzcyk7XFxuK1xcdGlmIChod19icmlnaHRuZXNzID09IGxhc3RfaHdfYnJpZ2h0bmVzcylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7XFxuK1xcdGlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sKHByaXYsIGh3X2JyaWdodG5lc3MsIGxhc3RfaHdfYnJpZ2h0bmVzcyk7XFxuIFxcbiBcXHRsZWRfY2xhc3NkZXZfbm90aWZ5X2JyaWdodG5lc3NfaHdfY2hhbmdlZChcXHUwMDI2cHJpdi1cXHUwMDNla2JkX2JsLmxlZCwgYnJpZ2h0bmVzcyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaW5pdChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxcbiB7XFxuLVxcdGludCBicmlnaHRuZXNzLCBlcnI7XFxuK1xcdGludCBod19icmlnaHRuZXNzLCBlcnI7XFxuIFxcbiBcXHRpZiAoIXByaXYtXFx1MDAzZWZlYXR1cmVzLmtiZF9ibClcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuQEAgLTE3MDAsMjggKzE4MDIsNjggQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9pbml0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXFxuIFxcdGlmIChXQVJOX09OKHByaXYtXFx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCkpXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXG4tXFx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHByaXYtXFx1MDAzZWtiZF9ibC50eXBlKSlcXG4tXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7XFxuK1xcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVxcdTAwM2VkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VrYmRfYmwubm90aWZfbXV0ZXgpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xcbi1cXHRpZiAoYnJpZ2h0bmVzcyBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiBicmlnaHRuZXNzO1xcbitcXHRod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7XFxuK1xcdGlmIChod19icmlnaHRuZXNzIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XFxuK1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZwcml2LVxcdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKTtcXG4gXFxuLVxcdHByaXYtXFx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzO1xcbiBcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLm5hbWUgICAgICAgICAgICAgICAgICAgID0gXFxcInBsYXRmb3JtOjpcXFwiIExFRF9GVU5DVElPTl9LQkRfQkFDS0xJR0hUO1xcbiBcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLmJyaWdodG5lc3NfZ2V0ICAgICAgICAgID0gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQ7XFxuIFxcdHByaXYtXFx1MDAzZWtiZF9ibC5sZWQuYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX3NldDtcXG4gXFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5mbGFncyAgICAgICAgICAgICAgICAgICA9IExFRF9CUklHSFRfSFdfQ0hBTkdFRCB8IExFRF9SRVRBSU5fQVRfU0hVVERPV047XFxuIFxcbi1cXHRlcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoXFx1MDAyNnByaXYtXFx1MDAzZXBsYXRmb3JtX2RldmljZS1cXHUwMDNlZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNla2JkX2JsLmxlZCk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdHN3aXRjaCAocHJpdi1cXHUwMDNla2JkX2JsLnR5cGUpIHtcXG4rXFx0Y2FzZSBLQkRfQkxfVFJJU1RBVEVfQVVUTzpcXG4rXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XFxuIFxcbitcXHRcXHRpZiAoIWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKSB7XFxuK1xcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwcml2LVxcdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0IFxcXCJDb3VsZCBub3QgcHJvdmlkZSBMRUQgdHJpZ2dlciAlcyBmb3Iga2V5Ym9hcmQgYmFja2xpZ2h0XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5mbGFncyAgICAgICAgICAgICB8PSBMRURfVFJJR19IV19DSEFOR0VEO1xcbitcXHRcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLmh3X2NvbnRyb2xfdHJpZ2dlciA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lO1xcbitcXHRcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLnRyaWdnZXJfdHlwZSAgICAgICA9IFxcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTtcXG4rXFxuK1xcdFxcdC8qIEhhcmR3YXJlIHJlbWVtYmVycyB0aGUgbGFzdCBicmlnaHRuZXNzIGxldmVsLCBpbmNsdWRpbmcgYXV0byBtb2RlLiAqL1xcbitcXHRcXHRpZiAoaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZWtiZF9ibC5sZWQuZGVmYXVsdF90cmlnZ2VyID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWU7XFxuK1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBLQkRfQkxfVFJJU1RBVEU6XFxuK1xcdFxcdHByaXYtXFx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBLQkRfQkxfU1RBTkRBUkQ6XFxuK1xcdFxcdHByaXYtXFx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAxO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0LyogVGhpcyBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBieSBpZGVhcGFkX2NoZWNrX2ZlYXR1cmVzKCkuICovXFxuK1xcdFxcdHVucmVhY2hhYmxlKCk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFF1ZXVlIG5vdGlmaWNhdGlvbnMsIGFzIGtiZF9ibC5pbml0aWFsaXplZCBpcyBhYm91dCB0byBiZSBzZXQuICovXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cHJpdi1cXHUwMDNla2JkX2JsLm5vdGlmX211dGV4KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNldHRpbmcga2JkX2JsLmluaXRpYWxpemVkIGFmdGVyIGxlZF9jbGFzc2Rldl9yZWdpc3RlcigpIGNvdWxkIGxlYWRcXG4rXFx0ICogdG8gcmFjZSBjb25kaXRpb25zIGluIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0KCkgd2hlcmVcXG4rXFx0ICoga2JkX2JsLmluaXRpYWxpemVkIGlzIGNoZWNrZWQsIHNvIHNldCBpdCBub3cuIEl0IGNhbiBiZSByZXZlcnRlZCBiYWNrXFxuK1xcdCAqIGlmIHRoZSBMRUQgY2xhc3NkZXYgZmFpbGVkIHRvIHJlZ2lzdGVyLlxcbitcXHQgKi9cXG4gXFx0cHJpdi1cXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gdHJ1ZTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRlcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoXFx1MDAyNnByaXYtXFx1MDAzZXBsYXRmb3JtX2RldmljZS1cXHUwMDNlZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNla2JkX2JsLmxlZCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHByaXYtXFx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfZXhpdChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxcbkBAIC0yNTQ4LDE3ICsyNjkwLDMwIEBAIHN0YXRpYyBpbnQgX19pbml0IGlkZWFwYWRfbGFwdG9wX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0ZXJyID0gbGVkX3RyaWdnZXJfcmVnaXN0ZXIoXFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIExFRCB0cmlnZ2VyICVzOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUsIGVycik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gXFx0ZXJyID0gaWRlYXBhZF93bWlfZHJpdmVyX3JlZ2lzdGVyKCk7XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gZXJyX2xlZHRyaWc7XFxuIFxcbiBcXHRlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdGlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7XFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfd21pO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfd21pOlxcbitcXHRpZGVhcGFkX3dtaV9kcml2ZXJfdW5yZWdpc3RlcigpO1xcbitlcnJfbGVkdHJpZzpcXG4rXFx0aWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKVxcbitcXHRcXHRsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKFxcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIG1vZHVsZV9pbml0KGlkZWFwYWRfbGFwdG9wX2luaXQpXFxuIFxcbkBAIC0yNTY2LDYgKzI3MjEsOSBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgaWRlYXBhZF9sYXB0b3BfZXhpdCh2b2lkKVxcbiB7XFxuIFxcdGlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7XFxuIFxcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZpZGVhcGFkX2FjcGlfZHJpdmVyKTtcXG4rXFxuK1xcdGlmIChpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZClcXG4rXFx0XFx0bGVkX3RyaWdnZXJfdW5yZWdpc3RlcihcXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTtcXG4gfVxcbiBtb2R1bGVfZXhpdChpZGVhcGFkX2xhcHRvcF9leGl0KVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMuaFxcbmluZGV4IGIxNmI4MDNjYzFhYzUxLi4xNjc1OTg5NjJiNzNlYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xlZHMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbGVkcy5oXFxuQEAgLTEwOSw2ICsxMDksNyBAQCBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHtcXG4gI2RlZmluZSBMRURfSU5JVF9ERUZBVUxUX1RSSUdHRVIgQklUKDIzKVxcbiAjZGVmaW5lIExFRF9SRUpFQ1RfTkFNRV9DT05GTElDVCBCSVQoMjQpXFxuICNkZWZpbmUgTEVEX01VTFRJX0NPTE9SXFx0XFx0QklUKDI1KVxcbisjZGVmaW5lIExFRF9UUklHX0hXX0NIQU5HRURcXHRCSVQoMjYpXFxuIFxcbiBcXHQvKiBzZXRfYnJpZ2h0bmVzc193b3JrIC8gYmxpbmtfdGltZXIgZmxhZ3MsIGF0b21pYywgcHJpdmF0ZS4gKi9cXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHdvcmtfZmxhZ3M7XFxuQEAgLTQ4NSw2ICs0ODYsNyBAQCBzdHJ1Y3QgbGVkX3RyaWdnZXIge1xcbiBcXHRjb25zdCBjaGFyXFx0ICpuYW1lO1xcbiBcXHRpbnRcXHRcXHQoKmFjdGl2YXRlKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuIFxcdHZvaWRcXHRcXHQoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG4rXFx0Ym9vbFxcdFxcdCgqb2ZmbG9hZGVkKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuIFxcbiBcXHQvKiBCcmlnaHRuZXNzIHNldCBieSBsZWRfdHJpZ2dlcl9ldmVudCAqL1xcbiBcXHRlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3M7XFxuQEAgLTUzMyw2ICs1MzUsOSBAQCB2b2lkIGxlZF90cmlnZ2VyX2JsaW5rX29uZXNob3Qoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyLFxcbiB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG4gaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKTtcXG4gdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xcbit2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG4rXFxuK2Jvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdHZvaWQgKnRyaWdnZXJfZGF0YSlcXG5AQCAtNTg0LDYgKzU4OSwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGxlZF9zZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgKmxlZF9nZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbiB7XFxuQEAgLTU5OCw2ICs2MTAsMTMgQEAgbGVkX3RyaWdnZXJfZ2V0X2JyaWdodG5lc3MoY29uc3Qgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKVxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTICovXFxuIFxcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxcbit2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGJvb2wgYWN0aXZhdGUpIHt9XFxuKyNlbmRpZlxcbitcXG4gLyogVHJpZ2dlciBzcGVjaWZpYyBlbnVtICovXFxuIGVudW0gbGVkX3RyaWdnZXJfbmV0ZGV2X21vZGVzIHtcXG4gXFx0VFJJR0dFUl9ORVRERVZfTElOSyA9IDAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjUzOjU0LjMwODE0NDI2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU5ODIxNDg5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTEVEU19UUklHR0VSU19IV19DSEFOR0VEXCIsXG4gICAgXCJMRURTX1RSSUdHRVJfTkVUREVWXCIsXG4gICAgXCJJREVBUEFEX0xBUFRPUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZFwiLFxuICAgIFwibGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZFwiLFxuICAgIFwibGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xcIixcbiAgICBcInRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd1wiLFxuICAgIFwibGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uXCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkXCIsXG4gICAgXCJfX2xlZF90cmlnZ2VyX3NldFwiLFxuICAgIFwibmV0ZGV2X3RyaWdfb2ZmbG9hZGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgTEVEIHRyaWdnZXIgc3Vic3lzdGVtLCBhZGRpbmcgc3VwcG9ydCBmb3IgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbnMgYW5kIG9mZmxvYWQgc3RhdGUgcmVwb3J0aW5nLiBUaGVzZSBuZXcgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhdHRyaWJ1dGVzIChgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAsIGBicmlnaHRuZXNzYCwgYHRyaWdnZXJgKSBhbmQgZHJpdmVyIG5vdGlmaWNhdGlvbnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgc3RhdGUgdHJhbnNpdGlvbiBsb2dpYyBhbmQgb2ZmbG9hZCBxdWVyaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRkZThmMGIzYjMyOTM1NDI2MWExNTU0ZDY5NGVkM2JiMTE1NzgxNGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxOCAxNzo1Mzo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWRcbmluZGV4IGQ0YzkxOGNjMTFhMTI3Li43ZGM5NWY3YTM1MDVjZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZFxuQEAgLTc4LDYgKzc4LDMxIEBAIERlc2NyaXB0aW9uOlxuIFx0XHQod2hpY2ggd291bGQgb2Z0ZW4gYmUgY29uZmlndXJlZCBpbiB0aGUgZGV2aWNlIHRyZWUgZm9yIHRoZVxuIFx0XHRoYXJkd2FyZSkuXG4gXG4rV2hhdDpcdFx0L3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS90cmlnZ2VyX21heV9vZmZsb2FkXG4rRGF0ZTpcdFx0SnVseSAyMDI2XG4rS2VybmVsVmVyc2lvbjpcdDcuM1xuK0NvbnRhY3Q6XHRsaW51eC1sZWRzQHZnZXIua2VybmVsLm9yZ1xuK0Rlc2NyaXB0aW9uOlxuK1x0XHROYW1lcyBhbmQgc3RhdGVzIG9mIHRyaWdnZXJzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCB0byBoYXJkd2FyZS5cbitcdFx0U3VjaCB0cmlnZ2VycyBhcmUgYWxzbyBjYWxsZWQgXCJoYXJkd2FyZSBjb250cm9sIHRyaWdnZXJcIiBpbiBzb21lXG4rXHRcdGNvbnRleHQuXG4rXG4rXHRcdE9ubHkgZXhpc3RzIHdoZW4gdGhlIExFRCBzdXBwb3J0cyB0cmlnZ2VyIG9mZmxvYWQuXG4rXG4rXHRcdFJlYWRpbmcgdGhpcyBmaWxlIHJldHVybnMgYSBsaXN0IG9mIHRyaWdnZXJzIHRoYXQgYXJlIGNhcGFibGUgdG9cbitcdFx0YmUgb2ZmbG9hZGVkLiBUaGUgb3B0aW9uYWwgYnJhY2tldHMgYXJvdW5kIHRoZSB0cmlnZ2VyIG5hbWVcbitcdFx0aW5kaWNhdGUgdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IHRyaWdnZXI6XG4rXG4rXHRcdC0gYGZvb190cmlnZ2VyYDogdGhlIHRyaWdnZXIgaXMgbm90IHNlbGVjdGVkLlxuK1x0XHQtIGBcdTAwM2Nmb29fdHJpZ2dlclx1MDAzZWA6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkLCBidXQgZmFsbHMgYmFjayB0b1xuK1x0XHQgIHNvZnR3YXJlIGJsaW5rIGZvciBzb21lIHJlYXNvbiAoZS5nLiwgaW5jb21wYXRpYmxlIHRyaWdnZXJcbitcdFx0ICBwYXJhbWV0ZXJzKVxuK1x0XHQtIGBbZm9vX3RyaWdnZXJdYDogdGhlIHRyaWdnZXIgaXMgc2VsZWN0ZWQgYW5kIG9mZmxvYWRlZCB0b1xuK1x0XHQgIGhhcmR3YXJlLlxuK1xuK1x0XHRUaGUgXCJuZXRkZXZcIiB0cmlnZ2VyIGFsc28gcHJvdmlkZXMgYSBjdXN0b20gYXR0cmlidXRlIHRvXG4rXHRcdGluZGljYXRlIGl0cyBzdGF0ZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL29mZmxvYWRlZGAuXG4rXG4gV2hhdDpcdFx0L3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS9pbnZlcnRlZFxuIERhdGU6XHRcdEphbnVhcnkgMjAxMVxuIEtlcm5lbFZlcnNpb246XHQyLjYuMzhcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2XG5pbmRleCBlZDQ2YjM3YWI4YTI4NC4uYTUxNDZlYTFlM2U2MWMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldlxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcbkBAIC03NSw2ICs3NSw5IEBAIERlc2NyaXB0aW9uOlxuIFx0XHRJZiAxLCB0aGUgTEVEIGJsaW5raW5nIGluIHJlcXVlc3RlZCBtb2RlIGlzIG9mZmxvYWRlZCB0b1xuIFx0XHRoYXJkd2FyZS5cbiBcbitcdFx0TEVEIHRyaWdnZXIgY29yZSBhbHNvIHByb3ZpZGVzIGEgZ2VuZXJpYyBhdHRyaWJ1dGUgZm9yIHRoaXNcbitcdFx0cHVycG9zZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRgLlxuK1xuIFdoYXQ6XHRcdC9zeXMvY2xhc3MvbGVkcy9cdTAwM2NsZWRcdTAwM2UvbGlua18xMFxuIERhdGU6XHRcdEp1biAyMDIzXG4gS2VybmVsVmVyc2lvbjpcdDYuNVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxuaW5kZXggMzkxMzk2NmNmZGFjMDQuLmFkYmM1N2I5ZjQ5YzMzIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcbkBAIC0yNDIsNiArMjQyLDkgQEAgb3BzIGFuZCBuZWVkcyB0byBkZWNsYXJlIHNwZWNpZmljIHN1cHBvcnQgZm9yIHRoZSBzdXBwb3J0ZWQgdHJpZ2dlcnMuXG4gXG4gV2l0aCBodyBjb250cm9sIHdlIHJlZmVyIHRvIHRoZSBMRUQgZHJpdmVuIGJ5IGhhcmR3YXJlLlxuIFxuK0Egc3lzZnMgYXR0cmlidXRlIGB0cmlnZ2VyX21heV9vZmZsb2FkYCBpcyBwcm92aWRlZCBmb3IgdXNlcnNwYWNlIHRvXG4rcXVlcnkgc3VwcG9ydGVkIHRyaWdnZXJzIGFuZCB0aGVpciBzdGF0ZXMuXG4rXG4gTEVEIGRyaXZlciBtdXN0IGRlZmluZSB0aGUgZm9sbG93aW5nIHZhbHVlIHRvIHN1cHBvcnQgaHcgY29udHJvbDpcbiBcbiAgICAgLSBod19jb250cm9sX3RyaWdnZXI6XG5AQCAtMjk4LDYgKzMwMSwxNSBAQCBMRUQgZHJpdmVyIG11c3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgQVBJIHRvIHN1cHBvcnQgaHcgY29udHJvbDpcbiAgICAgICAgICAgICAgICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZGV2aWNlIG9yIE5VTEwgaWYgbm90aGluZ1xuICAgICAgICAgICAgICAgICBpcyBjdXJyZW50bHkgYXR0YWNoZWQuXG4gXG4rTEVEIHRyaWdnZXIgc2hvdWxkIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEFQSSB0byBpbmRpY2F0ZSBodyBjb250cm9sOlxuKyAgICAtIG9mZmxvYWRlZDpcbisgICAgICAgICAgICAgICAgcmV0dXJuIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB0cmlnZ2VyIGlzIGN1cnJlbnRseVxuKyAgICAgICAgICAgICAgICBvZmZsb2FkZWQgdG8gaGFyZHdhcmUuXG4rXG4rICAgICAgICAgICAgICAgIElmIGEgdHJpZ2dlciBkb2Vzbid0IGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLCB0aGUgZGVmYXVsdFxuKyAgICAgICAgICAgICAgICB2YWx1ZSB3aWxsIGJlIHRydWUgZm9yIHByaXZhdGUgdHJpZ2dlcnMgYW5kIGZhbHNlIGZvciBnZW5lcmljXG4rICAgICAgICAgICAgICAgIG9uZXMuXG4rXG4gTEVEIGRyaXZlciBjYW4gYWN0aXZhdGUgYWRkaXRpb25hbCBtb2RlcyBieSBkZWZhdWx0IHRvIHdvcmthcm91bmQgdGhlXG4gaW1wb3NzaWJpbGl0eSBvZiBzdXBwb3J0aW5nIGVhY2ggZGlmZmVyZW50IG1vZGUgb24gdGhlIHN1cHBvcnRlZCB0cmlnZ2VyLlxuIEV4YW1wbGVzIGFyZSBoYXJkY29kaW5nIHRoZSBibGluayBzcGVlZCB0byBhIHNldCBpbnRlcnZhbCwgZW5hYmxlIHNwZWNpYWxcbkBAIC0zMTEsOSArMzIzLDY5IEBAIHRoZSBlbmQgdXNlIGh3X2NvbnRyb2xfc2V0IHRvIGFjdGl2YXRlIGh3IGNvbnRyb2wuXG4gQSB0cmlnZ2VyIGNhbiB1c2UgaHdfY29udHJvbF9nZXQgdG8gY2hlY2sgaWYgYSBMRUQgaXMgYWxyZWFkeSBpbiBodyBjb250cm9sXG4gYW5kIGluaXQgdGhlaXIgZmxhZ3MuXG4gXG4rQWx0ZXJuYXRpdmVseSwgYSBwcml2YXRlIHRyaWdnZXIgY2FuIGJlIGltcGxlbWVudGVkIGFsb25nIHdpdGggdGhlIExFRCBkcml2ZXIgaWZcbit0aGUgTEVEJ3MgaGFyZHdhcmUgY29udHJvbCBkb2Vzbid0IGZpdCBhbnkgZ2VuZXJpYyB0cmlnZ2VyLiBUbyBhc3NvY2lhdGUgdGhlXG4rcHJpdmF0ZSB0cmlnZ2VyIHdpdGggdGhlIExFRCBjbGFzc2RldiwgdGhlaXIgYHRyaWdnZXJfdHlwZWAgbXVzdCBiZSB0aGUgc2FtZS4gVG9cbitkZWNsYXJlIHRoYXQgdGhlIHByaXZhdGUgdHJpZ2dlciBwcm92aWRlcyBoYXJkd2FyZSBjb250cm9sIGZvciB0aGUgYXNzb2NpYXRlZFxuK0xFRCBjbGFzc2Rldiwgc2V0IHRoZSBgaHdfY29udHJvbF90cmlnZ2VyYCBzdHJpbmcgdG8gdGhlIHRyaWdnZXIncyBuYW1lLiBTaW5jZVxuK2JvdGggdGhlIExFRCBjbGFzc2RldiBhbmQgdGhlIHByaXZhdGUgdHJpZ2dlciBhcmUgaW4gdGhlIHNhbWUgTEVEIGRyaXZlciwgaXQnc1xuK25vdCBuZWNlc3NhcnkgZm9yIHRoZW0gdG8gY29vcmRpbmF0ZSB2aWEgYGh3X2NvbnRyb2xfKmAgY2FsbGJhY2tzLlxuK1xuIFdoZW4gdGhlIExFRCBpcyBpbiBodyBjb250cm9sLCBubyBzb2Z0d2FyZSBibGluayBpcyBwb3NzaWJsZSBhbmQgZG9pbmcgc29cbiB3aWxsIGVmZmVjdGl2ZWx5IGRpc2FibGUgaHcgY29udHJvbC5cbiBcbitIYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK1NvbWUgaGFyZHdhcmUgY2FuIGF1dG9ub21vdXNseSBhY3RpdmF0ZS9kZWFjdGl2YXRlIGhhcmR3YXJlIGNvbnRyb2wuIEFmdGVyIHRoYXQsXG4rdGhlIExFRCBoYXJkd2FyZSBub3RpZmllcyB0aGUgTEVEIGRyaXZlci5cbitcbitJZiB0aGUgZHJpdmVyIGNhbiBkZXRlY3Qgc3VjaCB0cmFuc2l0aW9ucyBhbmQgdGh1cyB3YW50cyB0byBub3RpZnkgdGhlIExFRCBjb3JlXG4rdG8gdXBkYXRlIHRoZSBjdXJyZW50IHRyaWdnZXIgdGhlbiB0aGUgYExFRF9UUklHX0hXX0NIQU5HRURgIGZsYWcgbXVzdCBiZSBzZXQgaW5cbitmbGFncyBiZWZvcmUgcmVnaXN0ZXJpbmcuIFRvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIGFjY29yZGluZ2x5LCBjYWxsXG4rYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIG9uIHRoZSBMRUQgY2xhc3NkZXYuXG4rXG4rVGhpcyBjYXBhYmlsaXR5IGlzIHJlc3RyaWN0ZWQgdG8gdGhlIExFRCBkZXZpY2UncyBwcml2YXRlIHRyaWdnZXIuIFRoZSBwcml2YXRlXG4rdHJpZ2dlciBtdXN0IGhhdmUgYmVlbiBwcm9wZXJseSByZWdpc3RlcmVkIChzZWUgYWJvdmUpIGFuZCBuYW1lZCBhZnRlclxuK2Bod19jb250cm9sX3RyaWdnZXJgLlxuK1xuK09ubHkgdHdvIHRyYW5zaXRpb25zIGFyZSBkZWZpbmVkOlxuK1xuKy0gXCJub25lXCIgPVx1MDAzZSBwcml2YXRlIHRyaWdnZXI6XG4rICAgICAgICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaGFyZHdhcmUgYXV0b25vbW91c2x5IGFjdGl2YXRlcyBoYXJkd2FyZSBjb250cm9sXG4rICAgICAgICBhbmQgd2hlbiBcIm5vbmVcIiAoaS5lLiwgbm8gdHJpZ2dlcikgaXMgY3VycmVudGx5IGFjdGl2ZS4gSWYgdGhlIHByaXZhdGVcbisgICAgICAgIHRyaWdnZXIgaXMgYWxyZWFkeSBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseVxuKyAgICAgICAgYSBuby1vcC5cbitcbisgICAgICAgIFRoZSBhY3RpdmF0aW9uIHNlcXVlbmNlIGZvciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHdpbGwgYmUgZXhlY3V0ZWQgYXNcbisgICAgICAgIG5vcm1hbC5cbitcbisgICAgICAgIFRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgdGhlXG4rICAgICAgICBhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIGN1cnJlbnRseSBpbiBoYXJkd2FyZVxuKyAgICAgICAgY29udHJvbC5cbitcbisgICAgICAgIElmIGVycm9yIG9jY3VycyBpbiB0aGUgYWN0aXZhdGlvbiBzZXF1ZW5jZSwgdGhlIExFRCBUcmlnZ2VyIGNvcmUgcmV2ZXJ0c1xuKyAgICAgICAgdGhlIGVmZmVjdGl2ZSB0cmlnZ2VyIHRvIFwibm9uZVwiLlxuK1xuKy0gcHJpdmF0ZSB0cmlnZ2VyID1cdTAwM2UgXCJub25lXCJcbisgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0ZXMgaGFyZHdhcmUgY29udHJvbFxuKyAgICAgICAgYW5kIHdoZW4gdGhlIHByaXZhdGUgdHJpZ2dlciBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiBcIm5vbmVcIiAoaS5lLiwgbm9cbisgICAgICAgIHRyaWdnZXIpIGlzIGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5IGFcbisgICAgICAgIG5vLW9wLlxuK1xuKyAgICAgICAgVGhlIGRlYWN0aXZhdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIHByaXZhdGUgdHJpZ2dlciB3aWxsIGJlIGV4ZWN1dGVkIGFzXG4rICAgICAgICBub3JtYWwsIGV4Y2VwdCB0aGF0IHRoZSBjdXJyZW50IExFRCBicmlnaHRuZXNzIGlzIHJldGFpbmVkLiBUaGUgcmVhc29uXG4rICAgICAgICBmb3Iga2VlcGluZyB0aGUgYnJpZ2h0bmVzcyB1bmNoYW5nZWQgaXMgdGhhdCBzb21lIGhhcmR3YXJlIG1heSBjaG9vc2UgYVxuKyAgICAgICAgc3BlY2lmaWMgYnJpZ2h0bmVzcyBpbnN0ZWFkIG9mIHNpbXBseSB0dXJuaW5nIG9mZiB0aGUgTEVEIGFmdGVyXG4rICAgICAgICBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0aW5nIGhhcmR3YXJlIGNvbnRyb2wuXG4rXG4rICAgICAgICBUaGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlciBtdXN0IGJlIGFibGUgdG8gaGFuZGxlIHRoZVxuKyAgICAgICAgZGVhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIG5vdCBjdXJyZW50bHkgaW4gaGFyZHdhcmVcbisgICAgICAgIGNvbnRyb2wuXG4rXG4rSWYgdGhlIGN1cnJlbnQgdHJpZ2dlciBpcyBuZWl0aGVyIHRoZSBwcml2YXRlIHRyaWdnZXIgbm9yIFwibm9uZVwiLCBubyB0cmFuc2l0aW9uXG4rd2lsbCBiZSBtYWRlLlxuK1xuIEtub3duIElzc3Vlc1xuID09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuY1xuaW5kZXggYTUxYjBlZDUzODg2NDQuLjI0NjBmY2YwYzQ2OTBhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jXG4rKysgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcbkBAIC0yNywxNiArMjcsNiBAQCBzdGF0aWMgTElTVF9IRUFEKGxlZHNfbG9va3VwX2xpc3QpO1xuIFxuIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGVkc193cTtcbiBcbi1zdGF0aWMgYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuLXtcbi0jaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbi1cdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4tXHRyZXR1cm4gbGVkX2NkZXYtXHUwMDNldHJpZ2dlciBcdTAwMjZcdTAwMjYgbGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2V0cmlnZ2VyX3R5cGU7XG4tI2Vsc2Vcbi1cdHJldHVybiBmYWxzZTtcbi0jZW5kaWZcbi19XG4tXG4gc3RhdGljIHNzaXplX3QgYnJpZ2h0bmVzc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiB7XG5AQCAtNzQsNiArNjQsOSBAQCBzdGF0aWMgc3NpemVfdCBicmlnaHRuZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcbiBcdGlmIChzdGF0ZSA9PSBMRURfT0ZGKVxuIFx0XHRsZWRfdHJpZ2dlcl9yZW1vdmUobGVkX2NkZXYpO1xuK1x0ZWxzZVxuK1x0XHRsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChsZWRfY2Rldik7XG4rXG4gXHRsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIHN0YXRlKTtcbiBcbiBcdHJldCA9IHNpemU7XG5AQCAtMTAzLDggKzk2LDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqY29uc3QgbGVkX3RyaWdnZXJfYmluX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZiaW5fYXR0cl90cmlnZ2VyLFxuIFx0TlVMTCxcbiB9O1xuK1xuK3N0YXRpYyBERVZJQ0VfQVRUUl9STyh0cmlnZ2VyX21heV9vZmZsb2FkKTtcbitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbGVkX3RyaWdnZXJfYXR0cnNbXSA9IHtcbitcdFx1MDAyNmRldl9hdHRyX3RyaWdnZXJfbWF5X29mZmxvYWQuYXR0cixcbitcdE5VTExcbit9O1xuK1xuK3N0YXRpYyB1bW9kZV90IGxlZF90cmlnZ2VyX2lzX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuK1x0XHRcdFx0ICAgICAgaW50IGlkeClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBrb2JqX3RvX2Rldihrb2JqKTtcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4rXG4rXHRpZiAoYXR0ciA9PSBcdTAwMjZkZXZfYXR0cl90cmlnZ2VyX21heV9vZmZsb2FkLmF0dHIpXG4rXHRcdHJldHVybiBsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPyBhdHRyLVx1MDAzZW1vZGUgOiAwO1xuK1xuK1x0cmV0dXJuIGF0dHItXHUwMDNlbW9kZTtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbGVkX3RyaWdnZXJfZ3JvdXAgPSB7XG4gXHQuYmluX2F0dHJzID0gbGVkX3RyaWdnZXJfYmluX2F0dHJzLFxuK1x0LmF0dHJzID0gbGVkX3RyaWdnZXJfYXR0cnMsXG4rXHQuaXNfdmlzaWJsZSA9IGxlZF90cmlnZ2VyX2lzX3Zpc2libGUsXG4gfTtcbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmNcbmluZGV4IGIxMjIzMjE4YmRhMTEzLi42YWUyOGNiZDFjNzc4MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xuKysrIGIvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jXG5AQCAtNyw5ICs3LDEyIEBAXG4gICogQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSBcdTAwM2NycHVyZGllQG9wZW5lZGhhbmQuY29tXHUwMDNlXG4gICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbG9ja2RlcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuQEAgLTMzLDYgKzM2LDMzIEBAIHRyaWdnZXJfcmVsZXZhbnQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiBcdHJldHVybiAhdHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgfHwgdHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuK1xuK1x0aWYgKCFsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIWxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciB8fFxuK1x0ICAgIHN0cmNtcChsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIsIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlbmFtZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW9mZmxvYWRlZClcbitcdFx0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlb2ZmbG9hZGVkKGxlZF9jZGV2KTtcbitcbitcdGRldl93YXJuX29uY2UobGVkX2NkZXYtXHUwMDNlZGV2LCBcImh3IGNvbnRyb2wgdHJpZ2dlciAlcyBkb2Vzbid0IGltcGxlbWVudCBvZmZsb2FkZWQoKVxcblwiLFxuK1x0XHQgICAgICBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW5hbWUpO1xuK1xuK1x0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNldHJpZ2dlcl90eXBlO1xuK31cbitcbitib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbitcdHJldHVybiBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKTtcbitcbiBzc2l6ZV90IGxlZF90cmlnZ2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLFxuIFx0XHRcdCAgbG9mZl90IHBvcywgc2l6ZV90IGNvdW50KVxuQEAgLTE2Myw3ICsxOTMsOCBAQCBzc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlYWQpO1xuIFxuIC8qIENhbGxlciBtdXN0IGVuc3VyZSBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2sgaGVsZCAqL1xuLWludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbitzdGF0aWMgaW50IF9fbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcsXG4rXHRcdFx0ICAgICBib29sIGh3X3RyaWdnZXJlZClcbiB7XG4gXHRjaGFyICpldmVudCA9IE5VTEw7XG4gXHRjaGFyICplbnZwWzJdO1xuQEAgLTE5NCw3ICsyMjUsMjEgQEAgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuIFx0XHRsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2RhdGEgPSBOVUxMO1xuIFx0XHRsZWRfY2Rldi1cdTAwM2VhY3RpdmF0ZWQgPSBmYWxzZTtcbiBcdFx0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+TEVEX0lOSVRfREVGQVVMVF9UUklHR0VSO1xuLVx0XHRsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIExFRF9PRkYpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBIYXJkd2FyZSBtYXkgaGF2ZSBzZWxlY3RlZCBhIG5ldyBicmlnaHRuZXNzIGxldmVsIGR1cmluZyBpdHNcbitcdFx0ICogaGFyZHdhcmUgY29udHJvbCB0cmFuc2l0aW9uLCBzbyBvbmx5IHJlc2V0IGJyaWdodG5lc3MgaWYgd2VcbitcdFx0ICogYXJlIHN3aXRjaGluZyB0byBhbm90aGVyIHRyaWdnZXIgb3IgaWYgdGhlIHN3aXRjaGluZyBpcyBub3RcbitcdFx0ICogaGFyZHdhcmUgdHJpZ2dlcmVkLlxuK1x0XHQgKlxuK1x0XHQgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgZXJyb3IgcGF0aCwgYXMgcnVubmluZ1xuK1x0XHQgKiBpbnRvIHRoZSBlcnJvciBwYXRoIGltcGxpZXMgYSBub25lID1cdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyXG4rXHRcdCAqIHRyYW5zaXRpb24uIFRoaXMgaGludHMgdGhhdCB0aGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGVcbitcdFx0ICogdHJpZ2dlciBtdXN0IGhhdmUgc29tZSBmdW5kYW1lbnRhbCBidWdzLCBzbyBkb24ndCBib3RoZXJcbitcdFx0ICogbGVhdmluZyB0aGUgTEVEIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS5cbitcdFx0ICovXG4rXHRcdGlmICh0cmlnIHx8ICFod190cmlnZ2VyZWQpXG4rXHRcdFx0bGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBMRURfT0ZGKTtcbiBcdH1cbiBcdGlmICh0cmlnKSB7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZ0cmlnLVx1MDAzZWxlZGRldl9saXN0X2xvY2spO1xuQEAgLTI1OCw2ICszMDMsMTEgQEAgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4rXG4raW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuK3tcbitcdHJldHVybiBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgdHJpZywgZmFsc2UpO1xuK31cbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9zZXQpO1xuIFxuIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuQEAgLTI2OCw2ICszMTgsMTUgQEAgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZSk7XG4gXG4rdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbitcbitcdGlmIChfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKVxuK1x0XHRsZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIE5VTEwpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbCk7XG4rXG4gc3RhdGljIGJvb2wgbGVkX21hdGNoX2RlZmF1bHRfdHJpZ2dlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiB7XG5AQCAtMzEzLDYgKzM3MiwzMiBAQCB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdCk7XG4gXG4rc3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuK1x0XHRcdFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4re1xuK1x0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcdHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZztcbitcdGJvb2wgaGl0LCBvZmZsb2FkZWQ7XG4rXHRpbnQgbGVuO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZWxlZF9hY2Nlc3MpO1xuK1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbitcbitcdHRyaWcgPSBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyO1xuK1xuK1x0b2ZmbG9hZGVkID0gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcbitcdGhpdCA9IG9mZmxvYWRlZCB8fCAodHJpZyBcdTAwMjZcdTAwMjYgIXN0cmNtcChsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIsIHRyaWctXHUwMDNlbmFtZSkpO1xuK1xuK1x0LyogW29mZmxvYWRlZF0gXHUwMDNjYWN0aXZlX2J1dF9ub3Rfb2ZmbG9hZGVkXHUwMDNlIGluYWN0aXZlICovXG4rXHRsZW4gPSBzeXNmc19lbWl0KGJ1ZiwgXCIlcyVzJXNcXG5cIixcbitcdFx0XHQgb2ZmbG9hZGVkID8gXCJbXCIgOiAoaGl0ID8gXCJcdTAwM2NcIiA6IFwiXCIpLFxuK1x0XHRcdCBsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIsXG4rXHRcdFx0IG9mZmxvYWRlZCA/IFwiXVwiIDogKGhpdCA/IFwiXHUwMDNlXCIgOiBcIlwiKSk7XG4rXG4rXHRyZXR1cm4gbGVuO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTCh0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3cpO1xuK1xuIC8qIExFRCBUcmlnZ2VyIEludGVyZmFjZSAqL1xuIFxuIGludCBsZWRfdHJpZ2dlcl9yZWdpc3RlcihzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG5AQCAtNDAzLDYgKzQ4OCw2MyBAQCBpbnQgZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIpO1xuIFxuKyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXG4rc3RhdGljIHZvaWQgbGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlLFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKmhjX3RyaWcpXG4re1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoIWxlZF9jZGV2LVx1MDAzZXRyaWdnZXIpIHtcbitcdFx0LyogXCJub25lXCIgPVx1MDAzZSBwcml2YXRlIHRyaWdnZXIuICovXG4rXHRcdGlmIChhY3RpdmF0ZSlcbitcdFx0XHRlcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgaGNfdHJpZywgdHJ1ZSk7XG4rXHR9IGVsc2UgaWYgKGxlZF9jZGV2LVx1MDAzZXRyaWdnZXIgPT0gaGNfdHJpZykge1xuK1x0XHQvKiBwcml2YXRlIHRyaWdnZXIgPVx1MDAzZSBcIm5vbmVcIi4gKi9cbitcdFx0aWYgKCFhY3RpdmF0ZSlcbitcdFx0XHRlcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgTlVMTCwgdHJ1ZSk7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBPdGhlciB0cmlnZ2VyIGlzIGFjdGl2ZS4gKi9cbitcdFx0ZGV2X2RiZyhsZWRfY2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJJZ25vcmluZyBodyBjb250cm9sIHRyYW5zaXRpb24gKCVzICVzKSB3aGlsZSAlcyBpcyBhY3RpdmVcIixcbitcdFx0XHRhY3RpdmF0ZSA/IFwiYWN0aXZhdGVcIiA6IFwiZGVhY3RpdmF0ZVwiLCBoY190cmlnLVx1MDAzZW5hbWUsXG4rXHRcdFx0bGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2VuYW1lKTtcbitcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKGVycilcbitcdFx0ZGV2X3dhcm4obGVkX2NkZXYtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byAlcyAlcyBpbiBodyBjb250cm9sIHRyYW5zaXRpb246ICVkXCIsXG4rXHRcdFx0IGFjdGl2YXRlID8gXCJhY3RpdmF0ZVwiIDogXCJkZWFjdGl2YXRlXCIsIGhjX3RyaWctXHUwMDNlbmFtZSwgZXJyKTtcbit9XG4rXG4rdm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKVxuK3tcbitcdHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZztcbitcbitcdC8qIFJlc3RyaWN0ZWQgdG8gcHJpdmF0ZSB0cmlnZ2Vycy4gKi9cbitcdGlmIChXQVJOX09OKCEobGVkX2NkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IExFRF9UUklHX0hXX0NIQU5HRUQpIHx8XG4rXHRcdCAgICAhbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyIHx8ICFsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX3R5cGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzY29wZWRfZ3VhcmQocndzZW1fcmVhZCwgXHUwMDI2dHJpZ2dlcnNfbGlzdF9sb2NrKSB7XG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkodHJpZywgXHUwMDI2dHJpZ2dlcl9saXN0LCBuZXh0X3RyaWcpIHtcbitcdFx0XHRpZiAodHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAhc3RyY21wKHRyaWctXHUwMDNlbmFtZSwgbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyKSkge1xuK1x0XHRcdFx0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4rXG4rXHRcdFx0XHRsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24obGVkX2NkZXYsIGFjdGl2YXRlLCB0cmlnKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdGRldl9lcnIobGVkX2NkZXYtXHUwMDNlZGV2LFxuK1x0XHRcIiVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXFxuXCIsXG4rXHRcdF9fZnVuY19fLCBsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKTtcbisjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuK1xuIC8qIFNpbXBsZSBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi9cbiBcbiB2b2lkIGxlZF90cmlnZ2VyX2V2ZW50KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcbmluZGV4IDE4NDRkMGNkNWY1Mjg0Li42ZGI4M2QwMTUyNzc1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xuKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jXG5AQCAtODUsMTIgKzg1LDE4IEBAIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiBcdHJldHVybiBjcm9zX2VjX2xlZF9zZW5kX2NtZChwcml2LVx1MDAzZWNyb3NfZWMsIFx1MDAyNmFyZyk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGNyb3NfZWNfbGVkX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgY3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgY3Jvc19lY19sZWRfdHJpZ2dlciA9IHtcbiBcdC5uYW1lID0gXCJjaHJvbWVvcy1hdXRvXCIsXG4gXHQudHJpZ2dlcl90eXBlID0gXHUwMDI2Y3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlLFxuIFx0LmFjdGl2YXRlID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZSxcbitcdC5vZmZsb2FkZWQgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xuaW5kZXggZWQ2YTQ3YmJiNDRmOWMuLjMyZDQwZDE3NmQzZjExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jXG5AQCAtMTk1LDEwICsxOTUsMTYgQEAgc3RhdGljIHZvaWQgb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldilcbiBcdFx0XHRlcnIpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgb21uaWFfaHdfdHJpZ2dlciA9IHtcbiBcdC5uYW1lXHRcdD0gXCJvbW5pYS1tY3VcIixcbiBcdC5hY3RpdmF0ZVx0PSBvbW5pYV9od3RyaWdfYWN0aXZhdGUsXG4gXHQuZGVhY3RpdmF0ZVx0PSBvbW5pYV9od3RyaWdfZGVhY3RpdmF0ZSxcbitcdC5vZmZsb2FkZWRcdD0gb21uaWFfaHd0cmlnX29mZmxvYWRlZCxcbiBcdC50cmlnZ2VyX3R5cGVcdD0gXHUwMDI2b21uaWFfaHdfdHJpZ2dlcl90eXBlLFxuIH07XG4gXG5AQCAtMjUxLDYgKzI1Nyw3IEBAIHN0YXRpYyBpbnQgb21uaWFfbGVkX3JlZ2lzdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBvbW5pYV9sZWQgKmxlZCxcbiBcdCAqIGJ5IExFRCBjbGFzcyBmcm9tIHRoZSBsaW51eCxkZWZhdWx0LXRyaWdnZXIgcHJvcGVydHkuXG4gXHQgKi9cbiBcdGNkZXYtXHUwMDNlZGVmYXVsdF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lO1xuK1x0Y2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBvbW5pYV9od190cmlnZ2VyLm5hbWU7XG4gXG4gXHQvKiBQdXQgdGhlIExFRCBpbnRvIHNvZnR3YXJlIG1vZGUgKi9cbiBcdHJldCA9IG9tbmlhX2NtZF93cml0ZV91OChjbGllbnQsIE9NTklBX0NNRF9MRURfTU9ERSwgT01OSUFfQ01EX0xFRF9NT0RFX0xFRChsZWQtXHUwMDNlcmVnKSB8XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMuaCBiL2RyaXZlcnMvbGVkcy9sZWRzLmhcbmluZGV4IGJlZTQ2NjUxZTA2OGY3Li5iMDhhMjg5Mzk3ZTQ2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLmhcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLmhcbkBAIC0yNyw2ICsyNyw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsXG4gXHRcdFx0bG9mZl90IHBvcywgc2l6ZV90IGNvdW50KTtcbitzc2l6ZV90IHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7XG4gXG4gZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbGVkc19saXN0X2xvY2s7XG4gZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbGVkc19saXN0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnXG5pbmRleCBjMTEyODJhNzRiNWFjMy4uNzk4MTIyMTU0MDQ5YjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnXG4rKysgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnXG5AQCAtOSw2ICs5LDE1IEBAIG1lbnVjb25maWcgTEVEU19UUklHR0VSU1xuIFxuIGlmIExFRFNfVFJJR0dFUlNcbiBcbitjb25maWcgTEVEU19UUklHR0VSU19IV19DSEFOR0VEXG4rXHRib29sIFwiTEVEIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb24gc3VwcG9ydFwiXG4rXHRoZWxwXG4rXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgaGFyZHdhcmUgaW5pdGlhdGVkIGhhcmR3YXJlIGNvbnRyb2xcbitcdCAgdHJhbnNpdGlvbnMsIHdoZXJlIHRoZSBMRUQgaGFyZHdhcmUgYXV0b25vbW91c2x5IHN3aXRjaGVzIGJldHdlZW5cbitcdCAgXCJub25lXCIgKGkuZS4sIG5vIHRyaWdnZXIpIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyLlxuK1xuK1x0ICBTZWUgRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0IGZvciBkZXRhaWxzLlxuK1xuIGNvbmZpZyBMRURTX1RSSUdHRVJfVElNRVJcbiBcdHRyaXN0YXRlIFwiTEVEIFRpbWVyIFRyaWdnZXJcIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG5pbmRleCA2NGMwNzhlOTk3ZjI4YS4uYTI2MTA5Y2E0YjFjOWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG4rKysgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG5AQCAtNzU0LDEwICs3NTQsMTggQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3RyaWdfZGVhY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiBcdGtmcmVlKHRyaWdnZXJfZGF0YSk7XG4gfVxuIFxuK3N0YXRpYyBib29sIG5ldGRldl90cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRzdHJ1Y3QgbGVkX25ldGRldl9kYXRhICp0cmlnZ2VyX2RhdGEgPSBsZWRfZ2V0X3RyaWdnZXJfZGF0YShsZWRfY2Rldik7XG4rXG4rXHRyZXR1cm4gdHJpZ2dlcl9kYXRhLVx1MDAzZWh3X2NvbnRyb2w7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgbmV0ZGV2X2xlZF90cmlnZ2VyID0ge1xuIFx0Lm5hbWUgPSBcIm5ldGRldlwiLFxuIFx0LmFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfYWN0aXZhdGUsXG4gXHQuZGVhY3RpdmF0ZSA9IG5ldGRldl90cmlnX2RlYWN0aXZhdGUsXG4rXHQub2ZmbG9hZGVkID0gbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkLFxuIFx0Lmdyb3VwcyA9IG5ldGRldl90cmlnX2dyb3VwcyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdcbmluZGV4IDQ0NDNmNDBlZjhhYTdlLi5lOTJiMWU5MDA3OTUxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnXG4rKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xuQEAgLTE2LDYgKzE2LDcgQEAgY29uZmlnIElERUFQQURfTEFQVE9QXG4gXHRzZWxlY3QgSU5QVVRfU1BBUlNFS01BUFxuIFx0c2VsZWN0IE5FV19MRURTXG4gXHRzZWxlY3QgTEVEU19DTEFTU1xuK1x0c2VsZWN0IExFRFNfVFJJR0dFUlNcbiBcdGhlbHBcbiBcdCAgVGhpcyBpcyBhIGRyaXZlciBmb3IgTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MgY29udGFpbnMgZHJpdmVycyBmb3JcbiBcdCAgcmZraWxsIHN3aXRjaCwgaG90a2V5LCBmYW4gY29udHJvbCBhbmQgYmFja2xpZ2h0IGNvbnRyb2wuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xuaW5kZXggNGZiYzkwNGYxZmMzOTAuLjI1M2QyOTYyYjkyNzYyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmNcbisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXG5AQCAtOSw2ICs5LDcgQEBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwiOiBcIiBmbXRcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tsaWdodC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG5AQCAtMjUsNyArMjYsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ppZmZpZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbG9ja2RlcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9wcm9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wb3dlcl9zdXBwbHkuaFx1MDAzZVxuQEAgLTEzNCwxMCArMTM3LDMxIEBAIGVudW0ge1xuIH07XG4gXG4gLypcbi0gKiBUaGVzZSBjb3JyZXNwb25kIHRvIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIHN0YXRlcyAtIDFcbi0gKiBGdXR1cmUga2V5Ym9hcmQgdHlwZXMgbWF5IG5lZWQgYSBuZXcgc3lzdGVtLCBpZiB0aGVyZSdzIGEgY29sbGlzaW9uXG4tICogS0JEX0JMX1RSSVNUQVRFX0FVVE8gaGFzIG5vIHdheSB0byByZXBvcnQgb3Igc2V0IHRoZSBhdXRvIHN0YXRlXG4tICogc28gaXQgZWZmZWN0aXZlbHkgaGFzIDMgc3RhdGVzLCBidXQgbmVlZHMgdG8gaGFuZGxlIDRcbisgKiBUaGUgZW51bWVyYXRpb24gaGFzIHR3byBwdXJwb3NlczpcbisgKiAgIC0gYXMgYW4gaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYWxsIGtub3duIHR5cGVzIG9mIGtleWJvYXJkIGJhY2tsaWdodFxuKyAqICAgLSBhcyBhIG1hbmRhdG9yeSBwYXJhbWV0ZXIgb2YgdGhlIEtCTEMgY29tbWFuZFxuKyAqXG4rICogRm9yIGVhY2ggdHlwZSwgdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgdmFsdWVzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLStcbisgKiB8ICAgICAgSGFyZHdhcmUgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8ICAgIDMgfFxuKyAqIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLStcbisgKiB8IEtCRF9CTF9TVEFOREFSRCAgICAgICAgICB8ICAgICAgb2ZmIHwgIG9uIHwgIE4vQSB8ICBOL0EgfFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXG4rICogfCBLQkRfQkxfVFJJU1RBVEUgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfCAgTi9BIHxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xuKyAqIHwgS0JEX0JMX1RSSVNUQVRFX0FVVE8gICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgYXV0byB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLStcbisgKlxuKyAqIFdlIG1hcCBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyBmb3IgS0JEX0JMX1RSSVNUQVRFX0FVVE8gYXMgZm9sbG93czpcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rXG4rICogfCAgTEVEIGNsYXNzZGV2IGJyaWdodG5lc3MgfCAgICAgICAgMCB8ICAgMSB8ICAgIDIgfFxuKyAqIHwgT3BlcmF0aW9uICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rXG4rICogfCBSZWFkICAgICAgICAgICAgICAgICAgICAgfCBvZmYvYXV0byB8IGxvdyB8IGhpZ2ggfFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLStcbisgKiB8IFdyaXRlICAgICAgICAgICAgICAgICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tK1xuICAqL1xuIGVudW0ge1xuIFx0S0JEX0JMX1NUQU5EQVJEICAgICAgPSAxLFxuQEAgLTE0NSw2ICsxNjksOCBAQCBlbnVtIHtcbiBcdEtCRF9CTF9UUklTVEFURV9BVVRPID0gMyxcbiB9O1xuIFxuKyNkZWZpbmUgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTXHQzXG4rXG4gI2RlZmluZSBLQkRfQkxfUVVFUllfVFlQRVx0XHQweDFcbiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9UWVBFXHRcdDB4NVxuICNkZWZpbmUgS0JEX0JMX1RSSVNUQVRFX0FVVE9fVFlQRVx0MHg3XG5AQCAtMjAzLDcgKzIyOSw5IEBAIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUge1xuIFx0XHRib29sIGluaXRpYWxpemVkO1xuIFx0XHRpbnQgdHlwZTtcbiBcdFx0c3RydWN0IGxlZF9jbGFzc2RldiBsZWQ7XG4tXHRcdHVuc2lnbmVkIGludCBsYXN0X2JyaWdodG5lc3M7XG4rXHRcdGF0b21pY190IGxhc3RfaHdfYnJpZ2h0bmVzcztcbitcbitcdFx0c3RydWN0IG11dGV4IG5vdGlmX211dGV4OyAvKiBwcm90ZWN0cyBub3RpZmljYXRpb25zICovXG4gXHR9IGtiZF9ibDtcbiBcdHN0cnVjdCB7XG4gXHRcdGJvb2wgaW5pdGlhbGl6ZWQ7XG5AQCAtMTU5Miw3ICsxNjIwLDI0IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUoaW50IHR5cGUpXG4gXHRyZXR1cm4gKHR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFKSB8fCAodHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2Uoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgaW50IGh3X2JyaWdodG5lc3MpXG4re1xuK1x0LyogT2ZmLCBsb3cgb3IgaGlnaCAqL1xuK1x0aWYgKGh3X2JyaWdodG5lc3MgXHUwMDNjPSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4rXHRcdHJldHVybiBod19icmlnaHRuZXNzO1xuK1xuK1x0LyogQXV0byAoY29udHJvbGxlZCBieSBFQyBhY2NvcmRpbmcgdG8gQUxTKSwgcmVwb3J0IGFzIG9mZiAqL1xuK1x0aWYgKHByaXYtXHUwMDNla2JkX2JsLnR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8gXHUwMDI2XHUwMDI2XG4rXHQgICAgaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogVW5rbm93biB2YWx1ZSAqL1xuK1x0ZGV2X3dhcm4oXHUwMDI2cHJpdi1cdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXHUwMDNlZGV2LFxuK1x0XHQgXCJVbmtub3duIGtleWJvYXJkIGJhY2tsaWdodCB2YWx1ZTogJWRcIiwgaHdfYnJpZ2h0bmVzcyk7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsdWU7XG4gXHRpbnQgZXJyO1xuQEAgLTE2MDYsMjEgKzE2NTEsNyBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcbi1cdFx0LyogQ29udmVydCByZXR1cm5lZCB2YWx1ZSB0byBicmlnaHRuZXNzIGxldmVsICovXG4tXHRcdHZhbHVlID0gRklFTERfR0VUKEtCRF9CTF9HRVRfQlJJR0hUTkVTUywgdmFsdWUpO1xuLVxuLVx0XHQvKiBPZmYsIGxvdyBvciBoaWdoICovXG4tXHRcdGlmICh2YWx1ZSBcdTAwM2M9IHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcbi1cdFx0XHRyZXR1cm4gdmFsdWU7XG4tXG4tXHRcdC8qIEF1dG8sIHJlcG9ydCBhcyBvZmYgKi9cbi1cdFx0aWYgKHZhbHVlID09IHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyArIDEpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXG4tXHRcdC8qIFVua25vd24gdmFsdWUgKi9cbi1cdFx0ZGV2X3dhcm4oXHUwMDI2cHJpdi1cdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXHUwMDNlZGV2LFxuLVx0XHRcdCBcIlVua25vd24ga2V5Ym9hcmQgYmFja2xpZ2h0IHZhbHVlOiAlbHVcIiwgdmFsdWUpO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0cmV0dXJuIEZJRUxEX0dFVChLQkRfQkxfR0VUX0JSSUdIVE5FU1MsIHZhbHVlKTtcbiBcdH1cbiBcbiBcdGVyciA9IGV2YWxfaGFscyhwcml2LVx1MDAzZWFkZXYtXHUwMDNlaGFuZGxlLCBcdTAwMjZ2YWx1ZSk7XG5AQCAtMTYzMCw2ICsxNjYxLDE2IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiBcdHJldHVybiAhIXRlc3RfYml0KEhBTFNfS0JEX0JMX1NUQVRFX0JJVCwgXHUwMDI2dmFsdWUpO1xuIH1cbiBcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4re1xuK1x0aW50IGh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTtcbitcbitcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gaHdfYnJpZ2h0bmVzcztcbitcbitcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpO1xuK31cbitcbiBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB7XG4gXHRzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTtcbkBAIC0xNjM3LDYyICsxNjc4LDEyMyBAQCBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldChzdHJ1Y3QgbGVkX2NsYVxuIFx0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBicmlnaHRuZXNzKVxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgaW50IGh3X2JyaWdodG5lc3MpXG4ge1xuLVx0aW50IGVycjtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsdWU7XG4gXHRpbnQgdHlwZSA9IHByaXYtXHUwMDNla2JkX2JsLnR5cGU7XG4rXHRpbnQgZXJyO1xuIFxuIFx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7XG4tXHRcdGlmIChicmlnaHRuZXNzIFx1MDAzZSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGJyaWdodG5lc3MpIHxcbitcdFx0dmFsdWUgPSBGSUVMRF9QUkVQKEtCRF9CTF9TRVRfQlJJR0hUTkVTUywgaHdfYnJpZ2h0bmVzcykgfFxuIFx0XHRcdEZJRUxEX1BSRVAoS0JEX0JMX0NPTU1BTkRfVFlQRSwgdHlwZSkgfFxuIFx0XHRcdEtCRF9CTF9DT01NQU5EX1NFVDtcbiBcdFx0ZXJyID0gZXhlY19rYmxjKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIHZhbHVlKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGVyciA9IGV4ZWNfc2Fscyhwcml2LVx1MDAzZWFkZXYtXHUwMDNlaGFuZGxlLCBicmlnaHRuZXNzID8gU0FMU19LQkRfQkxfT04gOiBTQUxTX0tCRF9CTF9PRkYpO1xuK1x0XHR2YWx1ZSA9IGh3X2JyaWdodG5lc3MgPyBTQUxTX0tCRF9CTF9PTiA6IFNBTFNfS0JEX0JMX09GRjtcbitcdFx0ZXJyID0gZXhlY19zYWxzKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIHZhbHVlKTtcbiBcdH1cbi1cbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzO1xuK1x0YXRvbWljX3NldChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MsIGh3X2JyaWdodG5lc3MpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgaW50IGJyaWdodG5lc3MpXG4re1xuK1x0aWYgKGJyaWdodG5lc3MgXHUwMDNlIHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19zZXQocHJpdiwgYnJpZ2h0bmVzcyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4gXHRcdFx0XHRcdFx0ICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4ge1xuIFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG4gXG4rXHQvKlxuK1x0ICogV2hlbiBkZWluaXRpYWxpemluZzogSXQgbXVzdCBiZSB0aGUgc2lkZSBlZmZlY3Qgb2YgbGVkX2NkZXZcbitcdCAqIHVucmVnaXN0cmF0aW9uIHdoZW4gb3VyIHByaXZhdGUgdHJpZ2dlciBpcyBhY3RpdmUuIFdlJ3ZlIHNldFxuK1x0ICogTEVEX1JFVEFJTl9BVF9TSFVURE9XTiB0byByZXRhaW4gbGVkX2NkZXYgYnJpZ2h0bmVzcyBsZXZlbC5cbitcdCAqIFRvIGRvIHRoZSBzYW1lIGZvciBhdXRvIG1vZGUsIGdhdGUgY2hhbmdlcyBhbmQgcmV0dXJuIGVhcmx5LlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkoIXByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQocHJpdiwgYnJpZ2h0bmVzcyk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG4rXG4rXHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzKSA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuK1xuK1x0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUyk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbGVkX2h3X3RyaWdnZXJfdHlwZSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTtcbitcbitzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlciA9IHtcbitcdC5uYW1lID0gXCJpZGVhcGFkLWF1dG9cIixcbitcdC50cmlnZ2VyX3R5cGUgPSBcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZSxcbitcdC5hY3RpdmF0ZSA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZSxcbitcdC5vZmZsb2FkZWQgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkLFxuK307XG4rXG4rc3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQ7XG4rXG4rc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2woc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdixcbitcdFx0XHRcdFx0ICAgICBpbnQgaHdfYnJpZ2h0bmVzcywgaW50IGxhc3RfaHdfYnJpZ2h0bmVzcylcbit7XG4rXHRib29sIGh3X2NvbnRyb2wsIGxhc3RfaHdfY29udHJvbDtcbitcbitcdGlmIChwcml2LVx1MDAzZWtiZF9ibC50eXBlICE9IEtCRF9CTF9UUklTVEFURV9BVVRPKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRod19jb250cm9sID0gaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XG4rXHRsYXN0X2h3X2NvbnRyb2wgPSBsYXN0X2h3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTO1xuK1xuK1x0aWYgKGh3X2NvbnRyb2wgIT0gbGFzdF9od19jb250cm9sKVxuK1x0XHRsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLmxlZCwgaHdfY29udHJvbCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX25vdGlmeShzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIHtcbi1cdGludCBicmlnaHRuZXNzO1xuK1x0aW50IGh3X2JyaWdodG5lc3MsIGJyaWdodG5lc3MsIGxhc3RfaHdfYnJpZ2h0bmVzcztcbiBcbiBcdGlmICghcHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQpXG4gXHRcdHJldHVybjtcbiBcbi1cdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcbi1cdGlmIChicmlnaHRuZXNzIFx1MDAzYyAwKVxuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLm5vdGlmX211dGV4KTtcbitcbitcdGh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTtcbitcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoYnJpZ2h0bmVzcyA9PSBwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MpXG4rXHRicmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTtcbitcdGlmIChicmlnaHRuZXNzIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47IC8qIFJlamVjdCBpbnNhbmUgdmFsdWVzIGVhcmx5LiAqL1xuK1xuK1x0bGFzdF9od19icmlnaHRuZXNzID0gYXRvbWljX3hjaGcoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKTtcbitcdGlmIChod19icmlnaHRuZXNzID09IGxhc3RfaHdfYnJpZ2h0bmVzcylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzcztcbitcdGlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sKHByaXYsIGh3X2JyaWdodG5lc3MsIGxhc3RfaHdfYnJpZ2h0bmVzcyk7XG4gXG4gXHRsZWRfY2xhc3NkZXZfbm90aWZ5X2JyaWdodG5lc3NfaHdfY2hhbmdlZChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQsIGJyaWdodG5lc3MpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2luaXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiB7XG4tXHRpbnQgYnJpZ2h0bmVzcywgZXJyO1xuK1x0aW50IGh3X2JyaWdodG5lc3MsIGVycjtcbiBcbiBcdGlmICghcHJpdi1cdTAwM2VmZWF0dXJlcy5rYmRfYmwpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuQEAgLTE3MDAsMjggKzE4MDIsNjggQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9pbml0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4gXHRpZiAoV0FSTl9PTihwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCkpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuLVx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHByaXYtXHUwMDNla2JkX2JsLnR5cGUpKVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyO1xuLVx0ZWxzZVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAxO1xuK1x0ZXJyID0gZGV2bV9tdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldiwgXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubm90aWZfbXV0ZXgpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcbi1cdGlmIChicmlnaHRuZXNzIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gYnJpZ2h0bmVzcztcbitcdGh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTtcbitcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gaHdfYnJpZ2h0bmVzcztcbitcbitcdGF0b21pY19zZXQoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKTtcbiBcbi1cdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7XG4gXHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubmFtZSAgICAgICAgICAgICAgICAgICAgPSBcInBsYXRmb3JtOjpcIiBMRURfRlVOQ1RJT05fS0JEX0JBQ0tMSUdIVDtcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5icmlnaHRuZXNzX2dldCAgICAgICAgICA9IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0O1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQ7XG4gXHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuZmxhZ3MgICAgICAgICAgICAgICAgICAgPSBMRURfQlJJR0hUX0hXX0NIQU5HRUQgfCBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuIFxuLVx0ZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldiwgXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGVkKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4rXHRzd2l0Y2ggKHByaXYtXHUwMDNla2JkX2JsLnR5cGUpIHtcbitcdGNhc2UgS0JEX0JMX1RSSVNUQVRFX0FVVE86XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XG4gXG4rXHRcdGlmICghaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpIHtcbitcdFx0XHRkZXZfd2FybihcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgXCJDb3VsZCBub3QgcHJvdmlkZSBMRUQgdHJpZ2dlciAlcyBmb3Iga2V5Ym9hcmQgYmFja2xpZ2h0XFxuXCIsXG4rXHRcdFx0XHQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5mbGFncyAgICAgICAgICAgICB8PSBMRURfVFJJR19IV19DSEFOR0VEO1xuK1x0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuaHdfY29udHJvbF90cmlnZ2VyID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWU7XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC50cmlnZ2VyX3R5cGUgICAgICAgPSBcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTtcbitcbitcdFx0LyogSGFyZHdhcmUgcmVtZW1iZXJzIHRoZSBsYXN0IGJyaWdodG5lc3MgbGV2ZWwsIGluY2x1ZGluZyBhdXRvIG1vZGUuICovXG4rXHRcdGlmIChod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUylcbitcdFx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuZGVmYXVsdF90cmlnZ2VyID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWU7XG4rXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBLQkRfQkxfVFJJU1RBVEU6XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBLQkRfQkxfU1RBTkRBUkQ6XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0LyogVGhpcyBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBieSBpZGVhcGFkX2NoZWNrX2ZlYXR1cmVzKCkuICovXG4rXHRcdHVucmVhY2hhYmxlKCk7XG4rXHR9XG4rXG4rXHQvKiBRdWV1ZSBub3RpZmljYXRpb25zLCBhcyBrYmRfYmwuaW5pdGlhbGl6ZWQgaXMgYWJvdXQgdG8gYmUgc2V0LiAqL1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLm5vdGlmX211dGV4KTtcbitcbitcdC8qXG4rXHQgKiBTZXR0aW5nIGtiZF9ibC5pbml0aWFsaXplZCBhZnRlciBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoKSBjb3VsZCBsZWFkXG4rXHQgKiB0byByYWNlIGNvbmRpdGlvbnMgaW4gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQoKSB3aGVyZVxuK1x0ICoga2JkX2JsLmluaXRpYWxpemVkIGlzIGNoZWNrZWQsIHNvIHNldCBpdCBub3cuIEl0IGNhbiBiZSByZXZlcnRlZCBiYWNrXG4rXHQgKiBpZiB0aGUgTEVEIGNsYXNzZGV2IGZhaWxlZCB0byByZWdpc3Rlci5cbitcdCAqL1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRlcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoXHUwMDI2cHJpdi1cdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXHUwMDNlZGV2LCBcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQpO1xuK1x0aWYgKGVycilcbitcdFx0cHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX2V4aXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbkBAIC0yNTQ4LDE3ICsyNjkwLDMwIEBAIHN0YXRpYyBpbnQgX19pbml0IGlkZWFwYWRfbGFwdG9wX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuK1x0ZXJyID0gbGVkX3RyaWdnZXJfcmVnaXN0ZXIoXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTtcbitcdGlmIChlcnIpIHtcbitcdFx0cHJfd2FybihcIkZhaWxlZCB0byByZWdpc3RlciBMRUQgdHJpZ2dlciAlczogJWRcXG5cIixcbitcdFx0XHRpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZSwgZXJyKTtcbitcdH0gZWxzZSB7XG4rXHRcdGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkID0gdHJ1ZTtcbitcdH1cbitcbiBcdGVyciA9IGlkZWFwYWRfd21pX2RyaXZlcl9yZWdpc3RlcigpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBlcnJfbGVkdHJpZztcbiBcbiBcdGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2FjcGlfZHJpdmVyKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX3dtaTtcbiBcbiBcdHJldHVybiAwO1xuK1xuK2Vycl93bWk6XG4rXHRpZGVhcGFkX3dtaV9kcml2ZXJfdW5yZWdpc3RlcigpO1xuK2Vycl9sZWR0cmlnOlxuK1x0aWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKVxuK1x0XHRsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBtb2R1bGVfaW5pdChpZGVhcGFkX2xhcHRvcF9pbml0KVxuIFxuQEAgLTI1NjYsNiArMjcyMSw5IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBpZGVhcGFkX2xhcHRvcF9leGl0KHZvaWQpXG4ge1xuIFx0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbiBcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xuK1xuK1x0aWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKVxuK1x0XHRsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7XG4gfVxuIG1vZHVsZV9leGl0KGlkZWFwYWRfbGFwdG9wX2V4aXQpXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMuaFxuaW5kZXggYjE2YjgwM2NjMWFjNTEuLjE2NzU5ODk2MmI3M2VjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sZWRzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbGVkcy5oXG5AQCAtMTA5LDYgKzEwOSw3IEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYge1xuICNkZWZpbmUgTEVEX0lOSVRfREVGQVVMVF9UUklHR0VSIEJJVCgyMylcbiAjZGVmaW5lIExFRF9SRUpFQ1RfTkFNRV9DT05GTElDVCBCSVQoMjQpXG4gI2RlZmluZSBMRURfTVVMVElfQ09MT1JcdFx0QklUKDI1KVxuKyNkZWZpbmUgTEVEX1RSSUdfSFdfQ0hBTkdFRFx0QklUKDI2KVxuIFxuIFx0Lyogc2V0X2JyaWdodG5lc3Nfd29yayAvIGJsaW5rX3RpbWVyIGZsYWdzLCBhdG9taWMsIHByaXZhdGUuICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdHdvcmtfZmxhZ3M7XG5AQCAtNDg1LDYgKzQ4Niw3IEBAIHN0cnVjdCBsZWRfdHJpZ2dlciB7XG4gXHRjb25zdCBjaGFyXHQgKm5hbWU7XG4gXHRpbnRcdFx0KCphY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuIFx0dm9pZFx0XHQoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbitcdGJvb2xcdFx0KCpvZmZsb2FkZWQpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiBcbiBcdC8qIEJyaWdodG5lc3Mgc2V0IGJ5IGxlZF90cmlnZ2VyX2V2ZW50ICovXG4gXHRlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3M7XG5AQCAtNTMzLDYgKzUzNSw5IEBAIHZvaWQgbGVkX3RyaWdnZXJfYmxpbmtfb25lc2hvdChzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIsXG4gdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4gaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKTtcbiB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4rdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4rXG4rYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4gXHRcdFx0XHRcdHZvaWQgKnRyaWdnZXJfZGF0YSlcbkBAIC01ODQsNiArNTg5LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XG4rXG4rc3RhdGljIGlubGluZSBib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkICpsZWRfZ2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB7XG5AQCAtNTk4LDYgKzYxMCwxMyBAQCBsZWRfdHJpZ2dlcl9nZXRfYnJpZ2h0bmVzcyhjb25zdCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpXG4gXG4gI2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTICovXG4gXG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbit2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHRcdFx0XHQgYm9vbCBhY3RpdmF0ZSkge31cbisjZW5kaWZcbitcbiAvKiBUcmlnZ2VyIHNwZWNpZmljIGVudW0gKi9cbiBlbnVtIGxlZF90cmlnZ2VyX25ldGRldl9tb2RlcyB7XG4gXHRUUklHR0VSX05FVERFVl9MSU5LID0gMCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjUzOjU0LjMwODE0NTUyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMzU4NTE4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpcyBmb3IgTEVEIEhhcmR3YXJlIFRyaWdnZXIgVHJhbnNpdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSB0aGF0IGFpbXMgdG8gaW50cm9kdWNlIHN1cHBvcnQgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIGluIHRoZSBMRUQgc3Vic3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSXMgdGhpcyB3b3J0aCBmdXp6aW5nP1wiIExldCdzIGJyZWFrIGl0IGRvd24uIEl0IHRvdWNoZXMgYSBkZWNlbnQgbnVtYmVyIG9mIGZpbGVzLCBpbmNsdWRpbmcgdGhlIGNvcmUgTEVEIGNsYXNzZXMgKGBsZWQtY2xhc3MuY2AsIGBsZWQtdHJpZ2dlcnMuY2ApLCBzb21lIHNwZWNpZmljIHBsYXRmb3JtIGRyaXZlcnMgKGBsZWRzLWNyb3NfZWMuY2AsIGBsZWRzLXR1cnJpcy1vbW5pYS5jYCwgYGlkZWFwYWQtbGFwdG9wLmNgKSwgYW5kIGEgbmV0d29yayBkZXZpY2UgdHJpZ2dlciAoYGxlZHRyaWctbmV0ZGV2LmNgKS4gVGhhdCdzIGEgcmVhc29uYWJsZSBmb290cHJpbnQsIHdoaWNoIGdpdmVzIHVzIGEgc29saWQgYXR0YWNrIHN1cmZhY2UgdG8gdGhpbmsgYWJvdXQuXG5cblRoZSBjaGFuZ2VzIGludm9sdmUgYWRkaW5nIG5ldyBmdW5jdGlvbnMgdG8gdGhlIGNvcmUgdHJpZ2dlciBsb2dpYzogYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgLCBgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAsIGFuZCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgLiBBbHNvLCBgaWRlYXBhZC1sYXB0b3AuY2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWN0dWFsbHkgKnVzZSogdGhpcyBuZXcgZmVhdHVyZS4gUmlnaHQsIHNvIHRoaXMgY29yZSBMRUQgdHJpZ2dlciBsb2dpYyBpcyBkZWZpbml0ZWx5IGFjY2Vzc2libGUgdGhyb3VnaCBzeXNmcy4gVGhhdCdzIGEgbWFqb3IgcGx1cy4gVGhlIHBsYXRmb3JtIGRyaXZlciBpcyBhIGJpdCBvZiBhIHF1ZXN0aW9uIG1hcmsgLSBtaWdodCBiZSB0cmlja3kgdG8gdGVzdCB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlLCBidXQgdGhlIGNvcmUgc3R1ZmYgaXMgZmFpciBnYW1lLlxuXG5IYW5nIG9uLi4uIENhbiB3ZSBhY3R1YWxseSByZWFjaCBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2U/IEhtbSwgbm8sIGxvb2tzIGxpa2UgZHJpdmVycyBjYWxsIGl0IHdoZW4gaGFyZHdhcmUgc3RhdGUgY2hhbmdlcy4gQnV0IHdlICpjYW4qIGdldCB0byBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YCB2aWEgc3lzZnMsIGFuZCBgbGVkX3RyaWdnZXJfc2V0YCB2aWEgdGhlIGB0cmlnZ2VyYCBhdHRyaWJ1dGUuIE5vdywgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYC4uLnRoYXQncyBjYWxsZWQgZnJvbSBgYnJpZ2h0bmVzc19zdG9yZWAgd2hlbiB0aGUgTEVEIHN0YXRlIGlzbid0IGBMRURfT0ZGYC4gSW50ZXJlc3RpbmcuXG5cbkxldCdzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIFdoZXJlIGVsc2UgaXMgYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIGNhbGxlZD8gTG9va3MgbGlrZSBgaWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2xgIGluIGBpZGVhcGFkLWxhcHRvcC5jYC4gTGV0J3MgY29uZmlybSB3aXRoIGEgcXVpY2sgYGdyZXBgIGp1c3QgdG8gYmUgc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY2FsbCBzaXRlcywgYW5kIHdlIGNhbiBjb25maXJtIHRoYXQgd2UgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDU2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTQ6MDEuNTQ0MDAxMjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzODAwMTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdD0zNDU9ZmxhZ3MgYmVmb3JlIHJlZ2lzdGVyaW5nLiBUbyB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciBhY2NvcmRpbmdseSwgY2FsbFxcbkRvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdDozNDY6YGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIG9uIHRoZSBMRUQgY2xhc3NkZXYuXFxuRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0LTM0Ny1cXG4tLVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz00OTI9c3RhdGljIHZvaWQgbGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlLFxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTUxOS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6NTIwOnZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSlcXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNTIxLXtcXG4tLVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy01NDQtfVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzo1NDU6RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7XFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTU0Ni0jZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmM9MTc1ND1zdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMtMTc2NS1cXHRpZiAoaHdfY29udHJvbCAhPSBsYXN0X2h3X2NvbnRyb2wpXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmM6MTc2NjpcXHRcXHRsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKFxcdTAwMjZwcml2LVxcdTAwM2VrYmRfYmwubGVkLCBod19jb250cm9sKTtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYy0xNzY3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVkcy5oPTYwNj1sZWRfdHJpZ2dlcl9nZXRfYnJpZ2h0bmVzcyhjb25zdCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlZHMuaC02MTMtI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcXG5pbmNsdWRlL2xpbnV4L2xlZHMuaDo2MTQ6dm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKTtcXG5pbmNsdWRlL2xpbnV4L2xlZHMuaC02MTUtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2xlZHMuaDo2MTY6c3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuaW5jbHVkZS9saW51eC9sZWRzLmgtNjE3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBib29sIGFjdGl2YXRlKSB7fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzo1NDowNS44ODIwMDc5M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTk2NzY5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTEVEIFRyaWdnZXIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIG1hbmFnaW5nIHRob3NlIExFRCB0cmlnZ2VycyBzaG91bGQgYmUgYWNjZXNzaWJsZSB2aWEgc3lzZnMuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3Qga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIHRvIGVuYWJsZSBhbmQgdXRpbGl6ZSB0aGVtIGVmZmVjdGl2ZWx5LiBMZXQncyBzZWUuLi4gSSdsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzOiBgQ09ORklHX0xFRFNfVFJJR0dFUlNgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCBubyBkb3VidC4gVGhlbiwgSSBzdXNwZWN0IHdlJ2xsIG5lZWQgYENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgIGZvciBzcGVjaWZpYyBoYXJkd2FyZS1yZWxhdGVkIGNoYW5nZXMgYXMgdGhlIG5hbWUgaW1wbGllcywgYW5kIG9mIGNvdXJzZSwgYENPTkZJR19MRURTX0NMQVNTYCBpcyBwcm9iYWJseSBhbHNvIGNyaXRpY2FsIGZvciB0aGUgZGV2aWNlIGNsYXNzIHN1cHBvcnQuXG5cblRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyIG9uIHRoZSBgSFdfQ0hBTkdFRGAgdHJpZ2dlcidzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgSSdsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIHRoZSBgZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZGV0YWlscyBmb3IgdGhhdCBwYXJ0aWN1bGFyIHRyaWdnZXIgc2hvdWxkIHJlc2lkZS4gVGhpcyBpcyB0aGUgZmFzdGVzdCByb3V0ZSB0byBjb25maXJtIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBhbnkgbnVhbmNlcyBpbiBpdHMgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDEyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTQ6MDkuOTgxNjg3NTE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjM3MTU0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnPTEwPWlmIExFRFNfVFJJR0dFUlNcXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTExLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTI6Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTMtXFx0Ym9vbCBcXFwiTEVEIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTQ6MTIuMzA1NDA3MjQ2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1NzE1MTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMRUQgVHJpZ2dlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBpcyB0aGlzIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgIHNldHRpbmcgZW5hYmxlZCBieSBkZWZhdWx0PyBObywgaXQncyBhIGJvb2wsIHNvIHRoYXQgYW5zd2VycyB0aGF0IHF1ZXN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZ2V0cyBhZGRlZCB0byBvdXIgRW5hYmxlQ29uZmlncy4gVGhhdCdzIGEga2V5IHJlcXVpcmVtZW50LlxuXG5Ob3csIHdoYXQgYWJvdXQgdGhlIGBpZGVhcGFkLWxhcHRvcC5jYCBkcml2ZXI/IEFoLCB0aGF0IHJlbGllcyBvbiBgQ09ORklHX0lERUFQQURfTEFQVE9QYC4gVGhhdCdzIGFuIHg4NiBwbGF0Zm9ybSBkcml2ZXIsIHRpZWQgdG8gQUNQSSBhbmQgc3BlY2lmaWMgaGFyZHdhcmUsIHNvIGZ1enppbmcgaXQgZGlyZWN0bHkgY291bGQgYmUgdHJpY2t5LiBJdCdzIG5vdCBnb2luZyB0byBiZSB0aGUgKmVhc2llc3QqIHRhcmdldCwgdGhhdCdzIGZvciBzdXJlLiBJIGFtIG5vdCBzZWVpbmcgYSBkaXJlY3QgcGF0aCBmb3IgZWFzaWVyIGZ1enppbmcgb2YgdGhpcyBkcml2ZXIuXG5cbkhvd2V2ZXIsIHRoZSBjb3JlIExFRCB0cmlnZ2VyIGxvZ2ljLCB0aGF0J3Mgc3RpbGwgcG90ZW50aWFsbHkgcmVhY2hhYmxlLiBXZSBtaWdodCBzdGlsbCBoYXZlIGEgc2hvdCwgZXZlbiBpZiBpdCBpcyBub3QgdGhlIGVhc2llc3QuIExldCBtZSBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIGBkcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgbGlrZWx5IGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDQ3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU0OjE2Ljk2MjU2MTI2NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ2NjA4MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM9MzQ9dHJpZ2dlcl9yZWxldmFudChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTM4LVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzozOTpzdGF0aWMgYm9vbCBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTQwLXtcXG4tLVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz01OT1ib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNjEtXFx0Z3VhcmQocndzZW1fcmVhZCkoXFx1MDAyNmxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX2xvY2spO1xcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzo2MjpcXHRyZXR1cm4gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNjMtfVxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jPTMyMT12b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTMyNC1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6MzI1OlxcdGlmIChfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy0zMjYtXFx0XFx0bGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz0zNzU9c3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTM4Ny1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6Mzg4OlxcdG9mZmxvYWRlZCA9IF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7XFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTM4OS1cXHRoaXQgPSBvZmZsb2FkZWQgfHwgKHRyaWcgXFx1MDAyNlxcdTAwMjYgIXN0cmNtcChsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLCB0cmlnLVxcdTAwM2VuYW1lKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU0OjE5LjIwOTE3NDQ4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDMzMTA3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSGFyZHdhcmUgTEVEIFRyaWdnZXIgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTEVEIHRyaWdnZXIgY29kZSwgYW5kIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMuIExldCdzIHNlZS4uLiB0aGUgb25lcyBJIG5lZWQgdG8gemVybyBpbiBvbiBhcmU6IGBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRgLCBgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAsIGBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbGAsIGB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dgLCBgbGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uYCwgYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgLCBhbmQgYF9fbGVkX3RyaWdnZXJfc2V0YC5cblxuUmlnaHQsIHRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgY29yZSBzZXQgdG8gc3RhcnQgd2l0aC4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gaGFyZHdhcmUgY29udHJvbCBhbmQgdGhlIHNvZnR3YXJlIHRyaWdnZXJzIGlzIGltcG9ydGFudC4gSSB0aGluayB0aGF0IGBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb25gIGlzIHByb2JhYmx5IHRoZSBtb3N0IGNyaXRpY2FsIHBsYWNlIHRvIGJlZ2luIHVuZGVyc3RhbmRpbmcgdGhlIHN0YXRlIHRyYW5zaXRpb25zLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMzMCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzo1NDoyMi43NTI0ODg5MzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDYzNDc3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz00ODk9RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7XFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNDkxLSNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jOjQ5MjpzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24oc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUsXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTQ5My1cXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxlZF90cmlnZ2VyICpoY190cmlnKVxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jPTUyMD12b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNTM0LVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzo1MzU6XFx0XFx0XFx0XFx0bGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKGxlZF9jZGV2LCBhY3RpdmF0ZSwgdHJpZyk7XFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTUzNi1cXHRcXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU0OjI1LjA5ODg0NjAxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzA2MDg2NTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4cGxvcmluZyBMRUQgVHJpZ2dlciBDb250cm9sKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIG1hbmlwdWxhdGUgYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIGZyb20gdXNlcnNwYWNlLCBzcGVjaWZpY2FsbHkgdG8gdHJpZ2dlciBzb21lIGludGVyZXN0aW5nIGJlaGF2aW9yLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgbm8sIGJlY2F1c2UgaXQgYXBwZWFycyB0byBiZSBwcmltYXJpbHkgY2FsbGVkIGJ5IGRyaXZlcnMuIEJ1dCB0aGVuLi4uIGhvbGQgb24sIGl0ICppcyogZXhwb3J0ZWQhIFRoYXQgb3BlbnMgYSB0aW55IHdpbmRvdy4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSBmaW5kIGEgdnVsbmVyYWJsZSBkcml2ZXIgdGhhdCBwcm92aWRlcyBhIGJhY2tkb29yP1xuXG5NeSBuZXh0IGF2ZW51ZSBvZiBhdHRhY2sgaXMgdG8gZmluZCBhIGZ1enphYmxlIGRyaXZlciB0aGF0ICptaWdodCogYmUgcmVhY2hhYmxlLiBgaWRlYXBhZC1sYXB0b3AuY2AgaXMgdGVtcHRpbmcuIEl0J3MgYW4gQUNQSSBkcml2ZXIsIGFuZCBBQ1BJIGludGVyZmFjZXMgY2FuLCBpbiB0aGVvcnksIGJlIGZ1enogdGVzdGVkLiBJdCdzIG5vdCBhIGRpcmVjdCByb3V0ZSwgSSBrbm93LCBBQ1BJIGZ1enppbmcgY2FuIGJlIGEgcGFpbiBpbiB0aGUuLi4gd2VsbCwgeW91IGdldCB0aGUgaWRlYS4gSXQncyBub3QgdGhlIGVhc2llc3QgcGF0aC5cblxuVGhlbiBJIHNoaWZ0ZWQgbXkgcGVyc3BlY3RpdmUsIHdoYXQgYWJvdXQgYSBzaW1pbGFyIGZ1bmN0aW9uIGBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbGA/IFdoZXJlIGlzIHRoYXQgY2FsbGVkPyBJIGZpbmQgaXQgaW4gYGJyaWdodG5lc3Nfc3RvcmVgIHdpdGhpbiBgbGVkLWNsYXNzLmNgLiBBaCwgdGhhdOKAmXMgaW50ZXJlc3RpbmcsIGBicmlnaHRuZXNzX3N0b3JlYCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMuIFRoYXQncyBhIGRpcmVjdCByb3V0ZSBpbnRvIHRoZSBrZXJuZWwgZnJvbSB1c2Vyc3BhY2UuIEkndmUgZ290IGEgbXVjaCBtb3JlIGFjY2Vzc2libGUgaW50ZXJmYWNlIHRoZXJlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MjUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTQ6MjkuNDA0OTM1OTAzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyMDI5OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYz00Nz1zdGF0aWMgc3NpemVfdCBicmlnaHRuZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy02Ny1cXHRlbHNlXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jOjY4OlxcdFxcdGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKGxlZF9jZGV2KTtcXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNjktXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM9MzE5PUVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZSk7XFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTMyMC1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6MzIxOnZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTMyMi17XFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMzI3LX1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6MzI4OkVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKTtcXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMzI5LVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWRzLmg9NTM3PXZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG5pbmNsdWRlL2xpbnV4L2xlZHMuaDo1Mzg6dm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuaW5jbHVkZS9saW51eC9sZWRzLmgtNTM5LVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWRzLmg9NTkxPXN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XFxuaW5jbHVkZS9saW51eC9sZWRzLmg6NTkyOnN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cXG5pbmNsdWRlL2xpbnV4L2xlZHMuaC01OTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU0OjMxLjc5Njk2OTcxOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDExMDMwNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBMRUQgVHJpZ2dlciBDb250cm9sIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBtYXAgb3V0IHRoZSBjb250cm9sIGZsb3cgZm9yIHRoZXNlIExFRCB0cmlnZ2Vycy4gSXQgc2VlbXMgdGhhdCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBHb29kLCB0aGF0J3MgYSBrZXkgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZC4gVGhlbiwgdGhlIGB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dgIGZ1bmN0aW9uLCB3aGljaCBkZWFscyB3aXRoIHRoZSBzeXNmcyBpbnRlcmZhY2UgdGhyb3VnaCBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAsIGlzIGFsc28gZGVmaW5pdGVseSByZWFjaGFibGUuIE5vdywgdGhhdCdzIGludGVyZXN0aW5nIGJlY2F1c2UgYF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAgaGFzIHR3byBkaWZmZXJlbnQgcGF0aHMgdG8gaXQsIHRocm91Z2ggdGhlIGNhbGxzIHRvIGB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dgIGFuZCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgLiBUaGF0J3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCwgYW5kIHRoZSBjb25uZWN0aW9uIG1ha2VzIHNlbnNlLiAgQW5kIHRoZW4gZmluYWxseSwgdGhlcmUncyBgX19sZWRfdHJpZ2dlcl9zZXRgLCB0aGF0J3MgcmVhY2hhYmxlIHRocm91Z2ggYGxlZF90cmlnZ2VyX3NldGAuIFRoaXMgbGFzdCBvbmUgaXMgdWx0aW1hdGVseSBjYWxsZWQgZnJvbSBgbGVkX3RyaWdnZXJfd3JpdGVgLCB3aGljaCBpdHNlbGYgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzeXNmcyBgdHJpZ2dlcmAgYXR0cmlidXRlLiBTbywgaWYgYSB1c2VyIHdyaXRlcyB0byB0aGF0IHN5c2ZzIGVudHJ5LCB3ZSdyZSB1bHRpbWF0ZWx5IGhpdHRpbmcgYF9fbGVkX3RyaWdnZXJfc2V0YC5cblxuQWxyaWdodCwgSSB0aGluayBJJ3ZlIGdvdCBhIGRlY2VudCBncmFzcCBvbiB0aGlzLiBOb3cgbGV0J3MgZGlnIGludG8gYGxlZF90cmlnZ2VyX3dyaXRlYC4gVGhhdCdzIHdoZXJlIHRoZSBtYWdpYyByZWFsbHkgc2VlbXMgdG8gYmUgaGFwcGVuaW5nIHdpdGggdGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODE5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU0OjM1LjgwODAwMjA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTA0OTI2MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxlZF90cmlnZ2VyX3dyaXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYz05MT1zdGF0aWMgREVWSUNFX0FUVFJfUk8obWF4X2JyaWdodG5lc3MpO1xcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTkzLSNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo5NDpzdGF0aWMgY29uc3QgQklOX0FUVFIodHJpZ2dlciwgMDY0NCwgbGVkX3RyaWdnZXJfcmVhZCwgbGVkX3RyaWdnZXJfd3JpdGUsIDApO1xcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy05NS1zdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGxlZF90cmlnZ2VyX2Jpbl9hdHRyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jPTY0PUVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQpO1xcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYy02NS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6NjY6c3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTY3LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMTEwLX1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6MTExOkVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3dyaXRlKTtcXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtMTEyLVxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZHMuaD0yND1zc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZHMuaC0yNi1cXHRcXHRcXHRsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpO1xcbmRyaXZlcnMvbGVkcy9sZWRzLmg6Mjc6c3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXFxuZHJpdmVycy9sZWRzL2xlZHMuaC0yOC1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTQ6MzcuOTEyOTMyNjQ1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2OTQ2NjUyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTEVEIFRyaWdnZXIgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbnBvaW50ZWQgdGhlIGNvcmUgTEVEIHRyaWdnZXIgbG9naWMgYXMgYSBwcm9taXNpbmcgdGFyZ2V0IGZvciBmdXp6aW5nLiBEZWZpbml0ZWx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGluLiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgYXJlIGBMRURTX0NMQVNTYCwgYExFRFNfVFJJR0dFUlNgLCBhbmQgYExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAuIFRoYXQgbGFzdCBvbmUgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGFzIGl0IGhhbmRsZXMgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbnMuXG5cbldhaXQsIEkgc2VlIHRoYXQgYGlkZWFwYWQtbGFwdG9wLmNgIGlzIGFsc28gbW9kaWZpZWQsIHdoaWNoIG1ha2VzIG1lIHdvbmRlciBpZiB0aGF0IGRyaXZlciBpcyBhbHNvIHdvcnRoIGZ1enppbmcuIEl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHRob3VnaCwgYW5kIFN5emthbGxlciBpc24ndCB0eXBpY2FsbHkgZ3JlYXQgYXQgZnV6emluZyBBQ1BJIHBsYXRmb3JtIGRyaXZlcnMgdW5sZXNzIHRoZXJlJ3Mgc3BlY2lmaWMgc3VwcG9ydC4gQnV0IHRoYXQgY29yZSBMRUQgdHJpZ2dlciBsb2dpYyBpcyBtb3JlIGdlbmVyaWMsIHNvIEknbGwgcHJpb3JpdGl6ZSB0aGF0IGZvciBub3cuIEknbGwgZm9jdXMgb24gYExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAgdG8gZW5zdXJlIGhhcmR3YXJlLWluaXRpYXRlZCB0cmFuc2l0aW9uIHN1cHBvcnQuXG5cbk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUgbW9zdCBpbXBvcnRhbnQgdG8gZm9jdXMgb24/IExldCdzIHNlZTogYF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAsIGBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYCwgYF9fbGVkX3RyaWdnZXJfc2V0YCwgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCwgYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AsIGBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb25gLCBhbmQgYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgLiBUaGVzZSBsb29rIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnRzIGFuZCBjb250cm9sIGZsb3cgZnVuY3Rpb25zLlxuXG5Pa2F5LCBJIG5lZWQgdG8ga25vdyBpZiBgbGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uYCBpcyByZWFjaGFibGUgd2l0aG91dCBgaWRlYXBhZC1sYXB0b3AuY2AuIEl0J3Mgb25seSBjYWxsZWQgYnkgYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgLCB3aGljaCBpcyBvbmx5IGNhbGxlZCBieSBgaWRlYXBhZC1sYXB0b3AuY2AuIEhtbSwgc28gaWYgSSB3YW50IHRvIGZ1enogYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgLCBJIG5lZWQgYGlkZWFwYWQtbGFwdG9wLmNgIG9yIGFub3RoZXIgZHJpdmVyIHRoYXQgY2FsbHMgaXQuIFNpbmNlIFN5emthbGxlciBjYW4ndCBlYXNpbHkgcmVhY2ggYGlkZWFwYWQtbGFwdG9wLmNgIGR1ZSB0byBpdHMgQUNQSSBoYXJkd2FyZSBkZXBlbmRlbmN5LCBtYXliZSBJIHNob3VsZCB0cnkgZW5hYmxpbmcgYElERUFQQURfTEFQVE9QYCBpbiB0aGUgY29uZmlncyBqdXN0IGluIGNhc2UuIEl0IG1pZ2h0IGJlIHdvcnRoIGluY2x1ZGluZywgcmlnaHQ/IExldCBtZSBjaGVjayBgZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdgIHRvIHNlZSBob3cgaXQncyBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTcwOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzo1NDo0NS42MDc1OTk5NjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDgyOTQ1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElERUFQQURfTEFQVE9QXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnLTUtXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWc6Njpjb25maWcgSURFQVBBRF9MQVBUT1BcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJMZW5vdm8gSWRlYVBhZCBMYXB0b3AgRXh0cmFzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxNzo1NDo0Ny45MTU5MDMwN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjE2MzY4NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEltbWVkaWF0ZSBQbGFuKipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGNvbnRpbmdlbnQgb24gYEFDUElgIGFuZCB0aGUgdW5kZXJseWluZyBgWDg2YCBhcmNoaXRlY3R1cmUuIFRoYXQncyB0aGUgZm91bmRhdGlvbiB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgSURFQVBBRF9MQVBUT1BgIGlzIGluY2x1ZGVkIHdpdGhpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgdG8gcHJvcGVybHkgZW5hYmxlIHRoZSBzeXN0ZW0uXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBgbGVkcy1jcm9zX2VjLmNgIGZpbGUuIEknbSBnb2luZyB0byBzdGFydCB0aGVyZSB0byBzZWUgaG93IHRoZSBFQyBoYW5kbGVzIHRoZSBMRURzLCBhbmQgaG9wZWZ1bGx5LCBJIGNhbiB0cmFjZSB0aGUgY29udHJvbCBmbG93IGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzIwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTQ6NTAuNTMyMjczOTkxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc0MDU1Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMRURTX0NST1NfRUNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9sZWRzL0tjb25maWc9MTg5PWNvbmZpZyBMRURTX0NSMDAxNDExNFxcbi0tXFxuZHJpdmVycy9sZWRzL0tjb25maWctMjAxLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnOjIwMjpjb25maWcgTEVEU19DUk9TX0VDXFxuZHJpdmVycy9sZWRzL0tjb25maWctMjAzLVxcdHRyaXN0YXRlIFxcXCJMRUQgU3VwcG9ydCBmb3IgQ2hyb21lT1MgRUNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU0OjUzLjIwNjMzNDc4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQyOTY3MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhIG1vZGVyYXRlbHkgZXhwZXJpZW5jZWQgZGV2ZWxvcGVyIGZhbWlsaWFyIHdpdGggZW1iZWRkZWQgc3lzdGVtczpcblxuKipDb25zaWRlcmluZyBgbGVkcy10dXJyaXMtb21uaWEuY2AqKlxuXG5SaWdodCwgc28gdGhhdCB0aG91Z2h0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGRyaXZlciBpbXBsZW1lbnRhdGlvbnMuIEknbSBsaWtlbHkgaW4gdGhlIGNvbnRleHQgb2Ygc29tZSBsb3ctbGV2ZWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24sIHByb2JhYmx5IHdpdGhpbiB0aGUgTGludXgga2VybmVsIG9yIHNvbWV0aGluZyB2ZXJ5IGNsb3NlbHkgcmVsYXRlZC4gXCJsZWRzXCIgb2J2aW91c2x5IHBvaW50cyB0byBMRUQgY29udHJvbCwgYW5kIHRoZSBcInR1cnJpcy1vbW5pYVwiIHBhcnQgaXMgdGhlIHNwZWNpZmljIHRhcmdldCBwbGF0Zm9ybSDigJMgYSBUdXJyaXMgT21uaWEgcm91dGVyLCBJIGJlbGlldmUuIFNvIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyB0aGUgTEVEcyBvbiB0aGF0IHBhcnRpY3VsYXIgZGV2aWNlLiBJJ20gcHJvYmFibHkgdGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIExFRHMgYXJlIG1hcHBlZCB0byBzcGVjaWZpYyBoYXJkd2FyZSBwaW5zLCB0aGUgY29udHJvbCByZWdpc3RlcnMgaW52b2x2ZWQsIGFuZCBob3cgdGhlIGRyaXZlciBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGludGVyZmFjZXMgZm9yIGhpZ2hlci1sZXZlbCBhcHBsaWNhdGlvbnMgKGxpa2UgdGhlIHVzZXIgaW50ZXJmYWNlKSB0byBpbnRlcmFjdCB3aXRoIHRoZW0uIEknbGwgbGlrZWx5IGJlIGdvaW5nIHRocm91Z2ggdGhlIGNvZGUgbG9va2luZyBhdCB0aGUgZnVuY3Rpb25zIGZvciBzZXR0aW5nIExFRCBzdGF0ZXMgKG9uL29mZiwgYmxpbmtpbmcsIGJyaWdodG5lc3MpLCBpbnRlcnJ1cHQgaGFuZGxpbmcgKGlmIGFueSksIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGRldmljZSdzIGhhcmR3YXJlLiBJIG1pZ2h0IGJlIGNvbnNpZGVyaW5nIG1vZGlmaWNhdGlvbnMgb3IgZGVidWdnaW5nIGEgcHJvYmxlbSB3aXRoIHRoZSBkcml2ZXIuIEknbGwgbGlrZWx5IGJlIGNoZWNraW5nIGZvciBjb3JyZWN0IGludGVycnVwdCBoYW5kbGluZywgRE1BLCBjb25jdXJyZW5jeSwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBIb3BlZnVsbHksIHRoZSBjb2RlIGlzIHdlbGwtc3RydWN0dXJlZCBhbmQgZm9sbG93cyBnb29kIGNvZGluZyBwcmFjdGljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDA3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTQ6NTcuNDQ5MzA0NTk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODIxNzU5MjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMRURTX1RVUlJJU19PTU5JQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2xlZHMvS2NvbmZpZz0yMTc9Y29uZmlnIExFRFNfRUwxNTIwMzAwMFxcbi0tXFxuZHJpdmVycy9sZWRzL0tjb25maWctMjI5LVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnOjIzMDpjb25maWcgTEVEU19UVVJSSVNfT01OSUFcXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yMzEtXFx0dHJpc3RhdGUgXFxcIkxFRCBzdXBwb3J0IGZvciBDWi5OSUMncyBUdXJyaXMgT21uaWFcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU1OjAxLjI3MTA2ODY1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc4NDE5ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGU6IGBsZWR0cmlnLW5ldGRldi5jYCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSB3aGF0J3Mgd2hhdC4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgYGxlZHRyaWctbmV0ZGV2LmNgIGZpbGUgYWdhaW4uIFNlZW1zIGxpa2UgYSBjcml0aWNhbCBwaWVjZSwgZG9lc24ndCBpdD8gSXQncyB3aGVyZSB0aGUgbmV0d29yayBkZXZpY2UgTEVEIHRyaWdnZXJpbmcgbG9naWMgcmVzaWRlcywgb2J2aW91c2x5LiBUaGUgXCJsZWR0cmlnXCIgcHJlZml4IGdpdmVzIGl0IGF3YXkuIEknbSBpbWFnaW5pbmcgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCdzIG5ldHdvcmsgc3RhY2suIE15IGV4cGVyaWVuY2UgaGFzIGJlZW4gSSBoYXZlIHNlZW4gc2ltaWxhciBjb25zdHJ1Y3RzIGhhbmRsaW5nIGludGVyZmFjZSBjaGFuZ2VzLCBwYWNrZXQgZHJvcHMsIG9yIGxpbmsgc3RhdHVzIGNoYW5nZXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1pbmQgb24gdGhlIGdlbmVyYWwgTEVEIHRyaWdnZXJpbmcgZnJhbWV3b3JrLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBoZXJlPyBIb3cgYXJlIHRoZSBuZXR3b3JrIGV2ZW50cyBob29rZWQgaW50byB0aGUgTEVEIGRyaXZlciBjYWxscz8gSSBiZXQgdGhlcmUncyBzb21lIGRldmljZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIGdvaW5nIG9uLCBkZWFsaW5nIHdpdGggTmV0bGluayBldmVudHMsIHByb2JhYmx5IHNvbWUgd29ya3F1ZXVlcyB0byBhdm9pZCBibG9ja2luZy4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgbmV0ZGV2IGV2ZW50cywgaW50ZXJmYWNlIHVwLCBpbnRlcmZhY2UgZG93biwgdHJhbnNtaXQgb3IgcmVjZWl2ZSB0cmFmZmljIGV2ZW50cyBhcmUgZmVkIGludG8gdGhpcyBhbmQgdWx0aW1hdGVseSBob3cgdGhleSBjaGFuZ2UgYW4gTEVEIHN0YXR1cy4gSSBhbnRpY2lwYXRlIHNlZWluZyBzb21lIGNsZXZlciB0cmlja3MgdG8ga2VlcCB0aGUgb3ZlcmhlYWQgbG93LCBlc3BlY2lhbGx5IGluIGhpZ2gtYmFuZHdpZHRoIHNjZW5hcmlvcy4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhlIGludGVycnVwdCBjb250ZXh0IHZlcnN1cyB0YXNrIGNvbnRleHQuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgaW50ZXJydXB0IHBhdGggZmlyc3Q7IGdldCB0aGUgbW9zdCBjcml0aWNhbCBwYXJ0IG9mIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDIzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTU6MDQuOTQ5NDkxMDgxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUzMzU2MjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMRURTX1RSSUdHRVJfTkVUREVWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc9MTI1PWNvbmZpZyBMRURTX1RSSUdHRVJfUEFOSUNcXG4tLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTMzLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTM0OmNvbmZpZyBMRURTX1RSSUdHRVJfTkVUREVWXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xMzUtXFx0dHJpc3RhdGUgXFxcIkxFRCBOZXRkZXYgVHJpZ2dlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTc6NTU6MDcuMzAyODU0NTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4MzAwNjY3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgTEVEIEhhcmR3YXJlIENvbnRyb2wgYW5kIE9mZmxvYWQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBhZGQgYExFRFNfVFJJR0dFUl9ORVRERVZgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEl0J3MgYSBmYWlybHkgZ2VuZXJpYyB0cmlnZ2VyIHRoYXQgaW1wbGVtZW50cyBgb2ZmbG9hZGVkYCwgYW5kIHRoYXQgbWFrZXMgaXQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0ZXN0aW5nIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIEknbSBhbHNvIGdvaW5nIHRvIHRocm93IGluIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgIGJlY2F1c2UgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzLiBJJ2xsIGtlZXAgYElERUFQQURfTEFQVE9QYCBhcyB3ZWxsLCBzaW5jZSB0aGF0J3MgYW5vdGhlciBpbXBvcnRhbnQgb25lLlxuXG5JIGJyaWVmbHkgY29uc2lkZXJlZCBhZGRpbmcgYExFRFNfQ0xBU1NgLCBgTEVEU19UUklHR0VSU2AsIGBMRURTX0NST1NfRUNgIGFuZCBgTEVEU19UVVJSSVNfT01OSUFgIGFzIHdlbGwsIGJ1dCBgTEVEU19DTEFTU2AgYW5kIGBMRURTX1RSSUdHRVJTYCBhcmUgcHJvYmFibHkgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQuIGBMRURTX0NST1NfRUNgIGRlcGVuZHMgb24gYENST1NfRUNgLCBhbmQgYExFRFNfVFVSUklTX09NTklBYCBoYXMgbW9yZSBkZXBlbmRlbmNpZXMsIHNvIGBMRURTX1RSSUdHRVJfTkVUREVWYCBhbG9uZyB3aXRoIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgIHNlZW1zIGxpa2UgYSBnb29kIGJhbGFuY2UgZm9yIHRoZSBtb21lbnQuIExldCdzIHNlZSBpZiB0aGF0J3MgZW5vdWdoIHRvIGdldCBhdCB0aGUgY29yZSBpc3N1ZS5cblxuVGhlbiB0aGVyZSdzIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBJJ3ZlIGdvbmUgdGhyb3VnaCBhbmQgY29uZmlybWVkIHRoYXQgc3RhdGljIGZ1bmN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHN5emthbGxlci4gSSdsbCBuZWVkIHRvIGluY2x1ZGU6XG5cbiogICBgX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYFxuKiAgIGBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYFxuKiAgIGBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbGBcbiogICBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YFxuKiAgIGBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb25gXG4qICAgYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgXG4qICAgYF9fbGVkX3RyaWdnZXJfc2V0YFxuKiAgIGBuZXRkZXZfdHJpZ19vZmZsb2FkZWRgXG5cbkkgbG9va2VkIGF0IHRoZSBjb2RlIHRvIHNlZSB3aGVyZSB0aGVzZSBnZXQgdXNlZC4gYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCBpcyBjYWxsZWQgd2hlbiB3cml0aW5nIHRvIGAvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL2JyaWdodG5lc3NgIHdoZW4gdGhlIHN0YXRlIGlzbid0IExFRF9PRkYsIHdoaWNoIG1lYW5zIHRoZSBmdXp6aW5nIHdpbGwgdHJpZ2dlciB0aGUgY29kZSBwYXRoLiBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YCBpcyBjYWxsZWQgb24gcmVhZGluZyBgL3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS90cmlnZ2VyX21heV9vZmZsb2FkYCwgd2hpY2ggaXMgYW5vdGhlciBpbXBvcnRhbnQgc3lzZnMgaW50ZXJhY3Rpb24uIGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCBpcyBjYWxsZWQgYnkgZHJpdmVycyBhbmQgdHJpZ2dlcnMgYSBzdGF0ZSB0cmFuc2l0aW9uLCBpbXBvcnRhbnQgZm9yIHJlYWNoaW5nIHRoZSBjaGFuZ2VkIGxvZ2ljLlxuXG5VbHRpbWF0ZWx5LCB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbGl0eSB0byB0aGUgTEVEIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIGFuZCBvZmZsb2FkIHN0YXRlIHJlcG9ydGluZy4gVGhleSdyZSBhY2Nlc3NpYmxlIHZpYSBzeXNmcyBpbnRlcmFjdGlvbnMgYW5kIGRyaXZlciBub3RpZmljYXRpb25zLlxuXG5JJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAgYmVjYXVzZSB0aGlzIHBhdGNoIGludHJvZHVjZXMgc2lnbmlmaWNhbnQgbmV3IGNvZGUgcGF0aHMgcmVsYXRlZCB0byBoYXJkd2FyZSBjb250cm9sIGFuZCBvZmZsb2FkLCB3aGljaCBhcmUgbGlrZWx5IHRvIGhhdmUgc2VjdXJpdHkgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg0NywiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDE3OjU1OjIwLjEzMjkyMzM2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzM2NTU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTEVEU19UUklHR0VSU19IV19DSEFOR0VEXCIsXG4gICAgXCJMRURTX1RSSUdHRVJfTkVUREVWXCIsXG4gICAgXCJJREVBUEFEX0xBUFRPUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZFwiLFxuICAgIFwibGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZFwiLFxuICAgIFwibGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xcIixcbiAgICBcInRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd1wiLFxuICAgIFwibGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uXCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkXCIsXG4gICAgXCJfX2xlZF90cmlnZ2VyX3NldFwiLFxuICAgIFwibmV0ZGV2X3RyaWdfb2ZmbG9hZGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgTEVEIHRyaWdnZXIgc3Vic3lzdGVtLCBhZGRpbmcgc3VwcG9ydCBmb3IgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbnMgYW5kIG9mZmxvYWQgc3RhdGUgcmVwb3J0aW5nLiBUaGVzZSBuZXcgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBhdHRyaWJ1dGVzIChgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAsIGBicmlnaHRuZXNzYCwgYHRyaWdnZXJgKSBhbmQgZHJpdmVyIG5vdGlmaWNhdGlvbnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgc3RhdGUgdHJhbnNpdGlvbiBsb2dpYyBhbmQgb2ZmbG9hZCBxdWVyaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFwiLFxuICAgIFwiTEVEU19UUklHR0VSX05FVERFVlwiLFxuICAgIFwiSURFQVBBRF9MQVBUT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRcIixcbiAgICBcImxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRcIixcbiAgICBcImxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sXCIsXG4gICAgXCJ0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dcIixcbiAgICBcImxlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvblwiLFxuICAgIFwibGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZFwiLFxuICAgIFwiX19sZWRfdHJpZ2dlcl9zZXRcIixcbiAgICBcIm5ldGRldl90cmlnX29mZmxvYWRlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIExFRCB0cmlnZ2VyIHN1YnN5c3RlbSwgYWRkaW5nIHN1cHBvcnQgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIGFuZCBvZmZsb2FkIHN0YXRlIHJlcG9ydGluZy4gVGhlc2UgbmV3IGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgYXR0cmlidXRlcyAoYHRyaWdnZXJfbWF5X29mZmxvYWRgLCBgYnJpZ2h0bmVzc2AsIGB0cmlnZ2VyYCkgYW5kIGRyaXZlciBub3RpZmljYXRpb25zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IHN0YXRlIHRyYW5zaXRpb24gbG9naWMgYW5kIG9mZmxvYWQgcXVlcmllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow52qcf[1] Phase: Succeeded StartedAt: 2026-07-18 17:55:32 +0000 UTC FinishedAt: 2026-07-18 17:55:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-18 17:55:32 +0000 UTC FinishedAt: 2026-07-18 17:55:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2] Phase: Succeeded StartedAt: 2026-07-18 17:55:32 +0000 UTC FinishedAt: 2026-07-18 22:25:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-18 17:55:32 +0000 UTC FinishedAt: 2026-07-18 22:25:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-18 17:55:32 +0000 UTC FinishedAt: 2026-07-18 17:55:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-18 17:55:32 +0000 UTC FinishedAt: 2026-07-18 17:55:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow52qcf/series-workflow52qcf-convert-artifact-102728729/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-18 17:55:53 +0000 UTC FinishedAt: 2026-07-18 18:44:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-18 17:55:53 +0000 UTC FinishedAt: 2026-07-18 18:44:28 +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:*e544f953-9f5a-4dc4-aed2-bb63afc96116,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-workflow52qcf/series-workflow52qcf-convert-artifact-102728729/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": "49719121-e4b7-4d0f-9bf8-a086d08c4729", "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-workflow52qcf/series-workflow52qcf-build-action-4279805879/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-18 17:55:53 +0000 UTC FinishedAt: 2026-07-18 18:44:18 +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:*e544f953-9f5a-4dc4-aed2-bb63afc96116,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-workflow52qcf/series-workflow52qcf-convert-artifact-102728729/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": "49719121-e4b7-4d0f-9bf8-a086d08c4729", "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-workflow52qcf/series-workflow52qcf-build-action-4279805879/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-18 18:44:28 +0000 UTC FinishedAt: 2026-07-18 18:44:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-18 18:44:28 +0000 UTC FinishedAt: 2026-07-18 18:44:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-18 18:44:28 +0000 UTC FinishedAt: 2026-07-18 18:44:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-18 18:44:28 +0000 UTC FinishedAt: 2026-07-18 18:44:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow52qcf/series-workflow52qcf-convert-artifact-3293684204/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-18 18:44:49 +0000 UTC FinishedAt: 2026-07-18 18:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-18 18:44:49 +0000 UTC FinishedAt: 2026-07-18 18:46:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49719121-e4b7-4d0f-9bf8-a086d08c4729,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-workflow52qcf/series-workflow52qcf-build-action-4279805879/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-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-18 18:47:05 +0000 UTC FinishedAt: 2026-07-18 18:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-18 18:47:05 +0000 UTC FinishedAt: 2026-07-18 18:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-18 18:47:05 +0000 UTC FinishedAt: 2026-07-18 19:19:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-18 18:47:05 +0000 UTC FinishedAt: 2026-07-18 19:19:17 +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:*e544f953-9f5a-4dc4-aed2-bb63afc96116,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-workflow52qcf/series-workflow52qcf-convert-artifact-3293684204/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": "407acfcc-9478-41fa-a8e9-db5abd7b2cc1", "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-workflow52qcf/series-workflow52qcf-build-action-3537401992/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-18 18:47:05 +0000 UTC FinishedAt: 2026-07-18 19:19:07 +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:*e544f953-9f5a-4dc4-aed2-bb63afc96116,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-workflow52qcf/series-workflow52qcf-convert-artifact-3293684204/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": "407acfcc-9478-41fa-a8e9-db5abd7b2cc1", "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-workflow52qcf/series-workflow52qcf-build-action-3537401992/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-18 19:19:17 +0000 UTC FinishedAt: 2026-07-18 19:19:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-18 19:19:17 +0000 UTC FinishedAt: 2026-07-18 19:19:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-18 19:19:17 +0000 UTC FinishedAt: 2026-07-18 19:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-18 19:19:17 +0000 UTC FinishedAt: 2026-07-18 19:21:05 +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:*407acfcc-9478-41fa-a8e9-db5abd7b2cc1,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-workflow52qcf/series-workflow52qcf-build-action-3537401992/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-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-18 19:21:15 +0000 UTC FinishedAt: 2026-07-18 22:25:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-18 19:21:15 +0000 UTC FinishedAt: 2026-07-18 22:25:48 +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":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"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:*49719121-e4b7-4d0f-9bf8-a086d08c4729,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*407acfcc-9478-41fa-a8e9-db5abd7b2cc1,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-workflow52qcf/series-workflow52qcf-build-action-4279805879/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-workflow52qcf/series-workflow52qcf-build-action-3537401992/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-18 19:21:15 +0000 UTC FinishedAt: 2026-07-18 19:23:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-18 19:21:15 +0000 UTC FinishedAt: 2026-07-18 19:22:22 +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":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"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-workflow52qcf/series-workflow52qcf-convert-artifact-1391289301/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-18 19:21:15 +0000 UTC FinishedAt: 2026-07-18 19:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-18 19:21:15 +0000 UTC FinishedAt: 2026-07-18 19:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-18 19:21:15 +0000 UTC FinishedAt: 2026-07-18 19:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-18 19:23:25 +0000 UTC FinishedAt: 2026-07-18 22:25:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52qcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__led_trigger_is_hw_controlled","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","trigger_may_offload_show","led_trigger_do_hw_control_transition","led_trigger_notify_hw_control_changed","__led_trigger_set","netdev_trig_offloaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1229e2e57a5c2980ccd457b9b53ea0eed5a22ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","IDEAPAD_LAPTOP"],"series_id":"ec597fb5-87fc-4e6d-a794-d030803ce037","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-18 19:23:25 +0000 UTC FinishedAt: 2026-07-18 22:25:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49719121-e4b7-4d0f-9bf8-a086d08c4729,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*407acfcc-9478-41fa-a8e9-db5abd7b2cc1,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-workflow52qcf/series-workflow52qcf-build-action-4279805879/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-workflow52qcf/series-workflow52qcf-build-action-3537401992/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-workflow52qcf/series-workflow52qcf-convert-artifact-1391289301/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,}