Name: series-workflowsvd7p Phase: Succeeded StartedAt: 2026-07-08 15:35:29 +0000 UTC FinishedAt: 2026-07-08 16:42:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvd7p[0] Phase: Succeeded StartedAt: 2026-07-08 15:35:29 +0000 UTC FinishedAt: 2026-07-08 16:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvd7p[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 15:35:29 +0000 UTC FinishedAt: 2026-07-08 16:09:48 +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": "5cb5575308bce9d63178fe943bf89c520a348808", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRCMFMAC", "BRCMFMAC_USB", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "5cb5575308bce9d63178fe943bf89c520a348808", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRCMFMAC", "BRCMFMAC_USB", "CFG80211" ], "series_id": "4bce7538-ef98-4ac6-9cc5-1a5f7f73f03a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "brcmf_set_key_mgmt", "brcmf_cfg80211_connect", "brcmf_configure_wpaie", "brcmf_p2p_is_pub_action", "brcmf_p2p_is_dpp_pub_action", "brcmf_p2p_is_p2p_action", "brcmf_p2p_abort_action_frame", "brcmf_p2p_send_action_frame" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyY21mX3NldF9rZXlfbWdtdCYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9jb25uZWN0JiMzNDssCiAgICAmIzM0O2JyY21mX2NvbmZpZ3VyZV93cGFpZSYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfaXNfcHViX2FjdGlvbiYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24mIzM0OywKICAgICYjMzQ7YnJjbWZfcDJwX2lzX3AycF9hY3Rpb24mIzM0OywKICAgICYjMzQ7YnJjbWZfcDJwX2Fib3J0X2FjdGlvbl9mcmFtZSYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEUFAgYXV0aGVudGljYXRpb24gYW5kIG1vZGlmaWVzIHRoZSBmaXJtd2FyZSBzdXBwbGljYW50IGxvZ2ljIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChicmNtZm1hYykuIEl0IGFsc28gdXBkYXRlcyBQMlAgYWN0aW9uIGZyYW1lIGhhbmRsaW5nIHRvIHN1cHBvcnQgRFBQIHB1YmxpYyBhY3Rpb24gZnJhbWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBkcml2ZXImIzM5O3MgY2ZnODAyMTEgY2FsbGJhY2tzIGFuZCBQMlAgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNjowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY2Y2JiNzdmMjg5ZjVkNmY3Njg1ZjE1MTM3YmY2YWI2MmVkMzlhZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDE2OjA3OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbmluZGV4IDRiNzA4NDVlMWEyNjQzLi5kNjFjM2UwM2ExMDZhNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2NmZzgwMjExLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5AQCAtMjE1NCw2ICYjNDM7MjE1NSw5IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXG4gXHRcdFx0dmFsID0gV1BBMl9BVVRIX1BTSyB8IFdQQTJfQVVUSF9GVDtcbiBcdFx0XHRwcm9maWxlLVx1MDAzZWlzX2Z0ID0gdHJ1ZTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfV0ZBX0RQUDpcbiYjNDM7XHRcdFx0dmFsID0gV0ZBX0FVVEhfRFBQO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDtpbnZhbGlkIGFrbSBzdWl0ZSAoJWQpXFxuXCYjMzQ7LFxuIFx0XHRcdFx0IHNtZS1cdTAwM2VjcnlwdG8uYWttX3N1aXRlc1swXSk7XG5AQCAtMjQ2Niw0MyAmIzQzOzI0NzAsNTAgQEAgYnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdFx0Z290byBkb25lO1xuIFx0fVxuIFxuLVx0aWYgKHNtZS1cdTAwM2VjcnlwdG8ucHNrIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfU0FFKSB7XG4tXHRcdGlmIChXQVJOX09OKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkpIHtcbi1cdFx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0XHRcdGdvdG8gZG9uZTtcbi1cdFx0fVxuLVx0XHRicmNtZl9kYmcoSU5GTywgXCYjMzQ7dXNpbmcgUFNLIG9mZmxvYWRcXG5cJiMzNDspO1xuLVx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLO1xuLVx0fVxuLVxuLVx0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkge1xuLVx0XHQvKiBlbmFibGUgZmlybXdhcmUgc3VwcGxpY2FudCBmb3IgdGhpcyBpbnRlcmZhY2UgKi9cbi1cdFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2ludF9zZXQoaWZwLCBcJiMzNDtzdXBfd3BhXCYjMzQ7LCAxKTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLVx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgZncgc3VwcGxpY2FudFxcblwmIzM0Oyk7XG4tXHRcdFx0Z290byBkb25lO1xuJiM0MztcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX0ZXU1VQKSkge1xuJiM0MztcdFx0dTMyIGFrbSA9IHNtZS1cdTAwM2VjcnlwdG8ubl9ha21fc3VpdGVzID8gc21lLVx1MDAzZWNyeXB0by5ha21fc3VpdGVzWzBdIDogMDtcbiYjNDM7XHRcdGJvb2wgaXNfc2FlX2FrbSA9IGFrbSA9PSBXTEFOX0FLTV9TVUlURV9TQUUgfHxcbiYjNDM7XHRcdFx0YWttID09IFdMQU5fQUtNX1NVSVRFX0ZUX09WRVJfU0FFO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzbWUtXHUwMDNlY3J5cHRvLnBzayBcdTAwMjZcdTAwMjYgIWlzX3NhZV9ha20gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcbiYjNDM7XHRcdFx0aWYgKFdBUk5fT04ocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT1cbiYjNDM7XHRcdFx0XHQgICAgQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSkge1xuJiM0MztcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0Z290byBkb25lO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGJyY21mX2RiZyhJTkZPLCBcJiMzNDt1c2luZyBQU0sgb2ZmbG9hZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4gXHRcdH1cbi1cdH1cbi1cbi1cdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSylcbi1cdFx0ZXJyID0gYnJjbWZfc2V0X3BtayhpZnAsIHNtZS1cdTAwM2VjcnlwdG8ucHNrLFxuLVx0XHRcdFx0ICAgIEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pO1xuLVx0ZWxzZSBpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcbi1cdFx0LyogY2xlYW4gdXAgdXNlci1zcGFjZSBSU05FICovXG4tXHRcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O3dwYWllXCYjMzQ7LCBOVUxMLCAwKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2ZhaWxlZCB0byBjbGVhbiB1cCB1c2VyLXNwYWNlIFJTTkVcXG5cJiMzNDspO1xuLVx0XHRcdGdvdG8gZG9uZTtcbiYjNDM7XHRcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpIHtcbiYjNDM7XHRcdFx0LyogZW5hYmxlIGZpcm13YXJlIHN1cHBsaWNhbnQgZm9yIHRoaXMgaW50ZXJmYWNlICovXG4mIzQzO1x0XHRcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9pbnRfc2V0KGlmcCwgXCYjMzQ7c3VwX3dwYVwmIzM0OywgMSk7XG4mIzQzO1x0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGZ3IHN1cHBsaWNhbnRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdGdvdG8gZG9uZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2ludF9zZXQoaWZwLCBcJiMzNDtzdXBfd3BhXCYjMzQ7LCAwKTtcbiBcdFx0fVxuLVx0XHRlcnIgPSBicmNtZl9md3ZpZF9zZXRfc2FlX3Bhc3N3b3JkKGlmcCwgXHUwMDI2c21lLVx1MDAzZWNyeXB0byk7XG4tXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBzbWUtXHUwMDNlY3J5cHRvLnBzaylcbiYjNDM7XHRcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSylcbiBcdFx0XHRlcnIgPSBicmNtZl9zZXRfcG1rKGlmcCwgc21lLVx1MDAzZWNyeXB0by5wc2ssXG4gXHRcdFx0XHRcdCAgICBCUkNNRl9XU0VDX01BWF9QU0tfTEVOKTtcbiYjNDM7XHRcdGVsc2UgaWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfU0FFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgc21lLVx1MDAzZWNyeXB0by5zYWVfcHdkIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9TQUUpKSB7XG4mIzQzO1x0XHRcdC8qIGNsZWFuIHVwIHVzZXItc3BhY2UgUlNORSAqL1xuJiM0MztcdFx0XHRpZiAoYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7d3BhaWVcJiMzNDssIE5VTEwsIDApKSB7XG4mIzQzO1x0XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7ZmFpbGVkIHRvIGNsZWFuIHVwIHVzZXItc3BhY2UgUlNORVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0Z290byBkb25lO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGVyciA9IGJyY21mX2Z3dmlkX3NldF9zYWVfcGFzc3dvcmQoaWZwLCBcdTAwMjZzbWUtXHUwMDNlY3J5cHRvKTtcbiYjNDM7XHRcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHNtZS1cdTAwM2VjcnlwdG8ucHNrKVxuJiM0MztcdFx0XHRcdGVyciA9IGJyY21mX3NldF9wbWsoaWZwLCBzbWUtXHUwMDNlY3J5cHRvLnBzayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBkb25lO1xuIFx0fVxuLVx0aWYgKGVycilcbi1cdFx0Z290byBkb25lO1xuLVxuIFx0LyogSm9pbiB3aXRoIHNwZWNpZmljIEJTU0lEIGFuZCBjYWNoZWQgU1NJRFxuIFx0ICogSWYgU1NJRCBpcyB6ZXJvIGpvaW4gYmFzZWQgb24gQlNTSUQgb25seVxuIFx0ICovXG5AQCAtNDUxOSw2ICYjNDM7NDUzMCwxMSBAQCBzdGF0aWMgYm9vbCBicmNtZl92YWxpZF93cGFfb3VpKHU4ICpvdWksIGJvb2wgaXNfcnNuX2llKVxuIFx0cmV0dXJuIChtZW1jbXAob3VpLCBXUEFfT1VJLCBUTFZfT1VJX0xFTikgPT0gMCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBicmNtZl92YWxpZF9kcHBfc3VpdGUodTggKm91aSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBnZXRfdW5hbGlnbmVkX2JlMzIob3VpKSA9PSBXTEFOX0FLTV9TVUlURV9XRkFfRFBQO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzMzJcbiBicmNtZl9jb25maWd1cmVfd3BhaWUoc3RydWN0IGJyY21mX2lmICppZnAsXG4gXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicmNtZl92c190bHYgKndwYV9pZSxcbkBAIC00NjMyLDQyICYjNDM7NDY0OCw0NyBAQCBicmNtZl9jb25maWd1cmVfd3BhaWUoc3RydWN0IGJyY21mX2lmICppZnAsXG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoIWJyY21mX3ZhbGlkX3dwYV9vdWkoXHUwMDI2ZGF0YVtvZmZzZXRdLCBpc19yc25faWUpKSB7XG4mIzQzO1x0XHRpZiAoYnJjbWZfdmFsaWRfZHBwX3N1aXRlKFx1MDAyNmRhdGFbb2Zmc2V0XSkpIHtcbiYjNDM7XHRcdFx0d3BhX2F1dGggfD0gV0ZBX0FVVEhfRFBQO1xuJiM0MztcdFx0XHRvZmZzZXQgJiM0Mzs9IFRMVl9PVUlfTEVOO1xuJiM0MztcdFx0fSBlbHNlIGlmIChicmNtZl92YWxpZF93cGFfb3VpKFx1MDAyNmRhdGFbb2Zmc2V0XSwgaXNfcnNuX2llKSkge1xuJiM0MztcdFx0XHRvZmZzZXQgJiM0Mzs9IFRMVl9PVUlfTEVOO1xuJiM0MztcdFx0XHRzd2l0Y2ggKGRhdGFbb2Zmc2V0XSkge1xuJiM0MztcdFx0XHRjYXNlIFJTTl9BS01fTk9ORTpcbiYjNDM7XHRcdFx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O1JTTl9BS01fTk9ORVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0d3BhX2F1dGggfD0gV1BBX0FVVEhfTk9ORTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0Y2FzZSBSU05fQUtNX1VOU1BFQ0lGSUVEOlxuJiM0MztcdFx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7UlNOX0FLTV9VTlNQRUNJRklFRFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0aXNfcnNuX2llID9cbiYjNDM7XHRcdFx0XHRcdCh3cGFfYXV0aCB8PSBXUEEyX0FVVEhfVU5TUEVDSUZJRUQpIDpcbiYjNDM7XHRcdFx0XHRcdCh3cGFfYXV0aCB8PSBXUEFfQVVUSF9VTlNQRUNJRklFRCk7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGNhc2UgUlNOX0FLTV9QU0s6XG4mIzQzO1x0XHRcdFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtSU05fQUtNX1BTS1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0aXNfcnNuX2llID8gKHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0spIDpcbiYjNDM7XHRcdFx0XHRcdCAgICAod3BhX2F1dGggfD0gV1BBX0FVVEhfUFNLKTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0Y2FzZSBSU05fQUtNX1NIQTI1Nl9QU0s6XG4mIzQzO1x0XHRcdFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtSU05fQUtNX01GUF9QU0tcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0tfU0hBMjU2O1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRjYXNlIFJTTl9BS01fU0hBMjU2XzFYOlxuJiM0MztcdFx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7UlNOX0FLTV9NRlBfMVhcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHdwYV9hdXRoIHw9IFdQQTJfQVVUSF8xWF9TSEEyNTY7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGNhc2UgUlNOX0FLTV9TQUU6XG4mIzQzO1x0XHRcdFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtSU05fQUtNX1NBRVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0d3BhX2F1dGggfD0gV1BBM19BVVRIX1NBRV9QU0s7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7SW52YWxpZCBrZXkgbWdtdCBpbmZvXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiBcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2ludmFsaWQgT1VJXFxuXCYjMzQ7KTtcbiBcdFx0XHRnb3RvIGV4aXQ7XG4gXHRcdH1cbi1cdFx0b2Zmc2V0ICYjNDM7PSBUTFZfT1VJX0xFTjtcbi1cdFx0c3dpdGNoIChkYXRhW29mZnNldF0pIHtcbi1cdFx0Y2FzZSBSU05fQUtNX05PTkU6XG4tXHRcdFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtSU05fQUtNX05PTkVcXG5cJiMzNDspO1xuLVx0XHRcdHdwYV9hdXRoIHw9IFdQQV9BVVRIX05PTkU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgUlNOX0FLTV9VTlNQRUNJRklFRDpcbi1cdFx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O1JTTl9BS01fVU5TUEVDSUZJRURcXG5cJiMzNDspO1xuLVx0XHRcdGlzX3Jzbl9pZSA/ICh3cGFfYXV0aCB8PSBXUEEyX0FVVEhfVU5TUEVDSUZJRUQpIDpcbi1cdFx0XHRcdCAgICAod3BhX2F1dGggfD0gV1BBX0FVVEhfVU5TUEVDSUZJRUQpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJTTl9BS01fUFNLOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7UlNOX0FLTV9QU0tcXG5cJiMzNDspO1xuLVx0XHRcdGlzX3Jzbl9pZSA/ICh3cGFfYXV0aCB8PSBXUEEyX0FVVEhfUFNLKSA6XG4tXHRcdFx0XHQgICAgKHdwYV9hdXRoIHw9IFdQQV9BVVRIX1BTSyk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgUlNOX0FLTV9TSEEyNTZfUFNLOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7UlNOX0FLTV9NRlBfUFNLXFxuXCYjMzQ7KTtcbi1cdFx0XHR3cGFfYXV0aCB8PSBXUEEyX0FVVEhfUFNLX1NIQTI1Njtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBSU05fQUtNX1NIQTI1Nl8xWDpcbi1cdFx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O1JTTl9BS01fTUZQXzFYXFxuXCYjMzQ7KTtcbi1cdFx0XHR3cGFfYXV0aCB8PSBXUEEyX0FVVEhfMVhfU0hBMjU2O1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJTTl9BS01fU0FFOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7UlNOX0FLTV9TQUVcXG5cJiMzNDspO1xuLVx0XHRcdHdwYV9hdXRoIHw9IFdQQTNfQVVUSF9TQUVfUFNLO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O0ludmFsaWQga2V5IG1nbXQgaW5mb1xcblwmIzM0Oyk7XG4tXHRcdH1cbiBcdFx0b2Zmc2V0JiM0MzsmIzQzOztcbiBcdH1cbiBcbkBAIC00Njg3LDEwICYjNDM7NDcwOCwxMiBAQCBicmNtZl9jb25maWd1cmVfd3BhaWUoc3RydWN0IGJyY21mX2lmICppZnAsXG4gXHRcdFx0XHQgKi9cbiBcdFx0XHRcdGlmICghKHdwYV9hdXRoIFx1MDAyNiAoV1BBMl9BVVRIX1BTS19TSEEyNTYgfFxuIFx0XHRcdFx0XHRcdCAgV1BBMl9BVVRIXzFYX1NIQTI1NiB8XG4mIzQzO1x0XHRcdFx0XHRcdCAgV0ZBX0FVVEhfRFBQIHxcbiBcdFx0XHRcdFx0XHQgIFdQQTNfQVVUSF9TQUVfUFNLKSkpIHtcbiBcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0XHRcdFx0Z290byBleGl0O1xuIFx0XHRcdFx0fVxuJiM0MztcbiBcdFx0XHRcdC8qIEZpcm13YXJlIGhhcyByZXF1aXJlbWVudCB0aGF0IFdQQTJfQVVUSF9QU0svXG4gXHRcdFx0XHQgKiBXUEEyX0FVVEhfVU5TUEVDSUZJRUQgYmUgc2V0LCBpZiBTSEEyNTYgT1VJXG4gXHRcdFx0XHQgKiBpcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgcnNuIGllLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuY1xuaW5kZXggNmUwYzkwZjQ3MThiNTguLjJjMWY1MmVkNTEzODAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmNcbkBAIC02LDYgJiM0Mzs2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9jZmc4MDIxMS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYnJjbXVfd2lmaS5oXHUwMDNlXG5AQCAtNDQsOSAmIzQzOzQ1LDYgQEBcbiBcbiAjZGVmaW5lIEJSQ01GX1NDQl9USU1FT1VUX1ZBTFVFXHQyMFxuIFxuLSNkZWZpbmUgUDJQX1ZFUlx0XHRcdDlcdC8qIFAyUCB2ZXJzaW9uOiA5PVdpRmkgUDJQIHYxLjAgKi9cbi0jZGVmaW5lIFAyUF9QVUJfQUZfQ0FURUdPUllcdDB4MDRcbi0jZGVmaW5lIFAyUF9QVUJfQUZfQUNUSU9OXHQweDA5XG4gI2RlZmluZSBQMlBfQUZfQ0FURUdPUllcdFx0MHg3ZlxuICNkZWZpbmUgUDJQX09VSVx0XHRcdFwmIzM0O1xceDUwXFx4NkZcXHg5QVwmIzM0O1x0LyogUDJQIE9VSSAqL1xuICNkZWZpbmUgUDJQX09VSV9MRU5cdFx0M1x0XHQvKiBQMlAgT1VJIGxlbmd0aCAqL1xuQEAgLTE0MywxMCAmIzQzOzE0MSwxMCBAQCBzdHJ1Y3QgYnJjbWZfcDJwX3NjYW5fbGUge1xuIC8qKlxuICAqIHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSAtIFdpRmkgUDJQIFB1YmxpYyBBY3Rpb24gRnJhbWVcbiAgKlxuLSAqIEBjYXRlZ29yeTogUDJQX1BVQl9BRl9DQVRFR09SWVxuLSAqIEBhY3Rpb246IFAyUF9QVUJfQUZfQUNUSU9OXG4mIzQzOyAqIEBjYXRlZ29yeTogV0xBTl9DQVRFR09SWV9QVUJMSUNcbiYjNDM7ICogQGFjdGlvbjogV0xBTl9QVUJfQUNUSU9OX1ZFTkRPUl9TUEVDSUZJQ1xuICAqIEBvdWk6IFAyUF9PVUlcbi0gKiBAb3VpX3R5cGU6IE9VSSB0eXBlIC0gUDJQX1ZFUlxuJiM0MzsgKiBAb3VpX3R5cGU6IE9VSSB0eXBlIC0gV0xBTl9PVUlfVFlQRV9XRkFfUDJQXG4gICogQHN1YnR5cGU6IE9VSSBzdWJ0eXBlIC0gUDJQX1RZUEVfKlxuICAqIEBkaWFsb2dfdG9rZW46IG5vbnplcm8sIGlkZW50aWZpZXMgcmVxL3JzcCB0cmFuc2FjdGlvblxuICAqIEBlbHRzOiBWYXJpYWJsZSBsZW5ndGggaW5mb3JtYXRpb24gZWxlbWVudHMuXG5AQCAtMTY2LDcgJiM0MzsxNjQsNyBAQCBzdHJ1Y3QgYnJjbWZfcDJwX3B1Yl9hY3RfZnJhbWUge1xuICAqXG4gICogQGNhdGVnb3J5OiBQMlBfQUZfQ0FURUdPUllcbiAgKiBAb3VpOiBPVUkgLSBQMlBfT1VJXG4tICogQHR5cGU6IE9VSSBUeXBlIC0gUDJQX1ZFUlxuJiM0MzsgKiBAdHlwZTogT1VJIFR5cGUgLSBXTEFOX09VSV9UWVBFX1dGQV9QMlBcbiAgKiBAc3VidHlwZTogT1VJIFN1YnR5cGUgLSBQMlBfQUZfKlxuICAqIEBkaWFsb2dfdG9rZW46IG5vbnplcm8sIGlkZW50aWZpZXMgcmVxL3Jlc3AgdHJhbmFjdGlvblxuICAqIEBlbHRzOiBWYXJpYWJsZSBsZW5ndGggaW5mb3JtYXRpb24gZWxlbWVudHMuXG5AQCAtMjI4LDEwICYjNDM7MjI2LDM4IEBAIHN0YXRpYyBib29sIGJyY21mX3AycF9pc19wdWJfYWN0aW9uKHZvaWQgKmZyYW1lLCB1MzIgZnJhbWVfbGVuKVxuIFx0aWYgKGZyYW1lX2xlbiBcdTAwM2Mgc2l6ZW9mKCpwYWN0X2ZybSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChwYWN0X2ZybS1cdTAwM2VjYXRlZ29yeSA9PSBQMlBfUFVCX0FGX0NBVEVHT1JZIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHBhY3RfZnJtLVx1MDAzZWFjdGlvbiA9PSBQMlBfUFVCX0FGX0FDVElPTiBcdTAwMjZcdTAwMjZcbi1cdCAgICBwYWN0X2ZybS1cdTAwM2VvdWlfdHlwZSA9PSBQMlBfVkVSIFx1MDAyNlx1MDAyNlxuLVx0ICAgIG1lbWNtcChwYWN0X2ZybS1cdTAwM2VvdWksIFAyUF9PVUksIFAyUF9PVUlfTEVOKSA9PSAwKVxuJiM0MztcdGlmIChwYWN0X2ZybS1cdTAwM2VjYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGFjdF9mcm0tXHUwMDNlYWN0aW9uID09IFdMQU5fUFVCX0FDVElPTl9WRU5ET1JfU1BFQ0lGSUMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBhY3RfZnJtLVx1MDAzZW91aV90eXBlID09IFdMQU5fT1VJX1RZUEVfV0ZBX1AyUCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgZ2V0X3VuYWxpZ25lZF9iZTI0KHBhY3RfZnJtLVx1MDAzZW91aSkgPT0gV0xBTl9PVUlfV0ZBKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvbigpIC0gdHJ1ZSBpZiBkcHAgcHVibGljIHR5cGUgZnJhbWUuXG4mIzQzOyAqXG4mIzQzOyAqIEBmcmFtZTogYWN0aW9uIGZyYW1lIGRhdGEuXG4mIzQzOyAqIEBmcmFtZV9sZW46IGxlbmd0aCBvZiBhY3Rpb24gZnJhbWUgZGF0YS5cbiYjNDM7ICpcbiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFjdGlvbiBmcmFtZSBpcyBkcHAgcHVibGljIGFjdGlvbiB0eXBlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24odm9pZCAqZnJhbWUsIHUzMiBmcmFtZV9sZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnJjbWZfcDJwX3B1Yl9hY3RfZnJhbWUgKnBhY3RfZnJtO1xuJiM0MztcbiYjNDM7XHRpZiAoIWZyYW1lKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRwYWN0X2ZybSA9IChzdHJ1Y3QgYnJjbWZfcDJwX3B1Yl9hY3RfZnJhbWUgKilmcmFtZTtcbiYjNDM7XHRpZiAoZnJhbWVfbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IGJyY21mX3AycF9wdWJfYWN0X2ZyYW1lKSAtIDEpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChwYWN0X2ZybS1cdTAwM2VjYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGFjdF9mcm0tXHUwMDNlYWN0aW9uID09IFdMQU5fUFVCX0FDVElPTl9WRU5ET1JfU1BFQ0lGSUMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBhY3RfZnJtLVx1MDAzZW91aV90eXBlID09IFdMQU5fT1VJX1RZUEVfV0ZBX0RQUCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgZ2V0X3VuYWxpZ25lZF9iZTI0KHBhY3RfZnJtLVx1MDAzZW91aSkgPT0gV0xBTl9PVUlfV0ZBKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdHJldHVybiBmYWxzZTtcbkBAIC0yNTcsNyAmIzQzOzI4Myw3IEBAIHN0YXRpYyBib29sIGJyY21mX3AycF9pc19wMnBfYWN0aW9uKHZvaWQgKmZyYW1lLCB1MzIgZnJhbWVfbGVuKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoYWN0X2ZybS1cdTAwM2VjYXRlZ29yeSA9PSBQMlBfQUZfQ0FURUdPUlkgXHUwMDI2XHUwMDI2XG4tXHQgICAgYWN0X2ZybS1cdTAwM2V0eXBlICA9PSBQMlBfVkVSIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBhY3RfZnJtLVx1MDAzZXR5cGUgID09IFdMQU5fT1VJX1RZUEVfV0ZBX1AyUCBcdTAwMjZcdTAwMjZcbiBcdCAgICBtZW1jbXAoYWN0X2ZybS1cdTAwM2VvdWksIFAyUF9PVUksIFAyUF9PVUlfTEVOKSA9PSAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbkBAIC0xMjgxLDYgJiM0MzsxMzA3LDkgQEAgc3RhdGljIHMzMiBicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcpXG4gXHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O0VudGVyXFxuXCYjMzQ7KTtcbiBcbiBcdHZpZiA9IHAycC1cdTAwM2Vic3NfaWR4W1AyUEFQSV9CU1NDRkdfREVWSUNFXS52aWY7XG4mIzQzO1x0aWYgKCF2aWYpXG4mIzQzO1x0XHR2aWYgPSBwMnAtXHUwMDNlYnNzX2lkeFtQMlBBUElfQlNTQ0ZHX1BSSU1BUlldLnZpZjtcbiYjNDM7XG4gXHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2RhdGFfc2V0KHZpZi1cdTAwM2VpZnAsIFwmIzM0O2FjdGZyYW1lX2Fib3J0XCYjMzQ7LCBcdTAwMjZpbnRfdmFsLFxuIFx0XHRcdFx0XHRzaXplb2YoczMyKSk7XG4gXHRpZiAoZXJyKVxuQEAgLTE3ODksNyAmIzQzOzE4MTgsOSBAQCBib29sIGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmIChicmNtZl9wMnBfaXNfcDJwX2FjdGlvbihhY3Rpb25fZnJhbWUtXHUwMDNlZGF0YSxcbi1cdFx0XHRcdFx0ICAgYWN0aW9uX2ZyYW1lX2xlbikpIHtcbiYjNDM7XHRcdFx0XHRcdCAgIGFjdGlvbl9mcmFtZV9sZW4pIHx8XG4mIzQzO1x0XHQgICBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24oYWN0aW9uX2ZyYW1lLVx1MDAzZWRhdGEsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgYWN0aW9uX2ZyYW1lX2xlbikpIHtcbiBcdFx0LyogZG8gbm90IGNvbmZpZ3VyZSBhbnl0aGluZy4gaXQgd2lsbCBiZSAqL1xuIFx0XHQvKiBzZW50IHdpdGggYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gICAgICovXG4gXHR9IGVsc2Uge1xuQEAgLTE4MjYsNiAmIzQzOzE4NTcsNyBAQCBib29sIGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0LyogdmFsaWRhdGUgY2hhbm5lbCBhbmQgcDJwIGllcyAqL1xuIFx0aWYgKGNvbmZpZ19hZl9wYXJhbXMuc2VhcmNoX2NoYW5uZWwgXHUwMDI2XHUwMDI2XG4gXHQgICAgSVNfUDJQX1NPQ0lBTF9DSEFOTkVMKGxlMzJfdG9fY3B1KGFmX3BhcmFtcy1cdTAwM2VjaGFubmVsKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHAycC1cdTAwM2Vic3NfaWR4W1AyUEFQSV9CU1NDRkdfREVWSUNFXS52aWYgXHUwMDI2XHUwMDI2XG4gXHQgICAgcDJwLVx1MDAzZWJzc19pZHhbUDJQQVBJX0JTU0NGR19ERVZJQ0VdLnZpZi1cdTAwM2VzYXZlZF9pZS5wcm9iZV9yZXFfaWVfbGVuKSB7XG4gXHRcdGFmeF9oZGwgPSBcdTAwMjZwMnAtXHUwMDNlYWZ4X2hkbDtcbiBcdFx0YWZ4X2hkbC1cdTAwM2VwZWVyX2xpc3Rlbl9jaGFuID0gbGUzMl90b19jcHUoYWZfcGFyYW1zLVx1MDAzZWNoYW5uZWwpO1xuQEAgLTI1NDMsNCAmIzQzOzI1NzUsMyBAQCB2b2lkIGJyY21mX3AycF9kZXRhY2goc3RydWN0IGJyY21mX3AycF9pbmZvICpwMnApXG4gXHQvKiBqdXN0IHNldCBpdCBhbGwgdG8gemVybyAqL1xuIFx0bWVtc2V0KHAycCwgMCwgc2l6ZW9mKCpwMnApKTtcbiB9XG4tXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oXG5pbmRleCA3NTUyYmRiOTE5OTFjZS4uYzQ2NTIwOGM0MzMxODIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvaW5jbHVkZS9icmNtdV93aWZpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9pbmNsdWRlL2JyY211X3dpZmkuaFxuQEAgLTIzMyw2ICYjNDM7MjMzLDggQEAgc3RhdGljIGlubGluZSBib29sIGFjX2JpdG1hcF90c3QodTggYml0bWFwLCBpbnQgcHJlYylcbiBcbiAjZGVmaW5lIFdQQTNfQVVUSF9TQUVfUFNLXHQweDQwMDAwXHQvKiBTQUUgd2l0aCA0LXdheSBoYW5kc2hha2UgKi9cbiBcbiYjNDM7I2RlZmluZSBXRkFfQVVUSF9EUFBcdFx0MHgyMDAwMDAgLyogV0ZBIERQUCBBVVRIICovXG4mIzQzO1xuICNkZWZpbmUgRE9UMTFfREVGQVVMVF9SVFNfTEVOXHRcdDIzNDdcbiAjZGVmaW5lIERPVDExX0RFRkFVTFRfRlJBR19MRU5cdFx0MjM0NlxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyY21mX3NldF9rZXlfbWdtdCYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9jb25uZWN0JiMzNDssCiAgICAmIzM0O2JyY21mX2NvbmZpZ3VyZV93cGFpZSYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfaXNfcHViX2FjdGlvbiYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24mIzM0OywKICAgICYjMzQ7YnJjbWZfcDJwX2lzX3AycF9hY3Rpb24mIzM0OywKICAgICYjMzQ7YnJjbWZfcDJwX2Fib3J0X2FjdGlvbl9mcmFtZSYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEUFAgYXV0aGVudGljYXRpb24gYW5kIG1vZGlmaWVzIHRoZSBmaXJtd2FyZSBzdXBwbGljYW50IGxvZ2ljIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChicmNtZm1hYykuIEl0IGFsc28gdXBkYXRlcyBQMlAgYWN0aW9uIGZyYW1lIGhhbmRsaW5nIHRvIHN1cHBvcnQgRFBQIHB1YmxpYyBhY3Rpb24gZnJhbWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBkcml2ZXImIzM5O3MgY2ZnODAyMTEgY2FsbGJhY2tzIGFuZCBQMlAgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjZjYmI3N2YyODlmNWQ2Zjc2ODVmMTUxMzdiZjZhYjYyZWQzOWFlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDggMTY6MDc6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jCmluZGV4IDRiNzA4NDVlMWEyNjQzLi5kNjFjM2UwM2ExMDZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aGVyZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvY2ZnODAyMTEuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0bGluay5oJmd0OwpAQCAtMjE1NCw2ICYjNDM7MjE1NSw5IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpCiAJCQl2YWwgPSBXUEEyX0FVVEhfUFNLIHwgV1BBMl9BVVRIX0ZUOwogCQkJcHJvZmlsZS0mZ3Q7aXNfZnQgPSB0cnVlOwogCQkJYnJlYWs7CiYjNDM7CQljYXNlIFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA6CiYjNDM7CQkJdmFsID0gV0ZBX0FVVEhfRFBQOwomIzQzOwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnBoeV9lcnIoZHJ2ciwgJiMzNDtpbnZhbGlkIGFrbSBzdWl0ZSAoJWQpXG4mIzM0OywKIAkJCQkgc21lLSZndDtjcnlwdG8uYWttX3N1aXRlc1swXSk7CkBAIC0yNDY2LDQzICYjNDM7MjQ3MCw1MCBAQCBicmNtZl9jZmc4MDIxMV9jb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKHNtZS0mZ3Q7Y3J5cHRvLnBzayAmYW1wOyZhbXA7Ci0JICAgIHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSkgewotCQlpZiAoV0FSTl9PTihwcm9maWxlLSZndDt1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSkgewotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCQlicmNtZl9kYmcoSU5GTywgJiMzNDt1c2luZyBQU0sgb2ZmbG9hZFxuJiMzNDspOwotCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSzsKLQl9Ci0KLQlpZiAocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkgewotCQkvKiBlbmFibGUgZmlybXdhcmUgc3VwcGxpY2FudCBmb3IgdGhpcyBpbnRlcmZhY2UgKi8KLQkJZXJyID0gYnJjbWZfZmlsX2lvdmFyX2ludF9zZXQoaWZwLCAmIzM0O3N1cF93cGEmIzM0OywgMSk7Ci0JCWlmIChlcnIgJmx0OyAwKSB7Ci0JCQlicGh5X2VycihkcnZyLCAmIzM0O2ZhaWxlZCB0byBlbmFibGUgZncgc3VwcGxpY2FudFxuJiMzNDspOwotCQkJZ290byBkb25lOwomIzQzOwlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GV1NVUCkpIHsKJiM0MzsJCXUzMiBha20gPSBzbWUtJmd0O2NyeXB0by5uX2FrbV9zdWl0ZXMgPyBzbWUtJmd0O2NyeXB0by5ha21fc3VpdGVzWzBdIDogMDsKJiM0MzsJCWJvb2wgaXNfc2FlX2FrbSA9IGFrbSA9PSBXTEFOX0FLTV9TVUlURV9TQUUgfHwKJiM0MzsJCQlha20gPT0gV0xBTl9BS01fU1VJVEVfRlRfT1ZFUl9TQUU7CiYjNDM7CiYjNDM7CQlpZiAoc21lLSZndDtjcnlwdG8ucHNrICZhbXA7JmFtcDsgIWlzX3NhZV9ha20gJmFtcDsmYW1wOwomIzQzOwkJICAgIHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSkgewomIzQzOwkJCWlmIChXQVJOX09OKHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPQomIzQzOwkJCQkgICAgQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSkgewomIzQzOwkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCQlnb3RvIGRvbmU7CiYjNDM7CQkJfQomIzQzOwkJCWJyY21mX2RiZyhJTkZPLCAmIzM0O3VzaW5nIFBTSyBvZmZsb2FkXG4mIzM0Oyk7CiYjNDM7CQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7CiAJCX0KLQl9Ci0KLQlpZiAocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLKQotCQllcnIgPSBicmNtZl9zZXRfcG1rKGlmcCwgc21lLSZndDtjcnlwdG8ucHNrLAotCQkJCSAgICBCUkNNRl9XU0VDX01BWF9QU0tfTEVOKTsKLQllbHNlIGlmIChwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHsKLQkJLyogY2xlYW4gdXAgdXNlci1zcGFjZSBSU05FICovCi0JCWVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsICYjMzQ7d3BhaWUmIzM0OywgTlVMTCwgMCk7Ci0JCWlmIChlcnIpIHsKLQkJCWJwaHlfZXJyKGRydnIsICYjMzQ7ZmFpbGVkIHRvIGNsZWFuIHVwIHVzZXItc3BhY2UgUlNORVxuJiMzNDspOwotCQkJZ290byBkb25lOwomIzQzOwkJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpIHsKJiM0MzsJCQkvKiBlbmFibGUgZmlybXdhcmUgc3VwcGxpY2FudCBmb3IgdGhpcyBpbnRlcmZhY2UgKi8KJiM0MzsJCQllcnIgPSBicmNtZl9maWxfaW92YXJfaW50X3NldChpZnAsICYjMzQ7c3VwX3dwYSYjMzQ7LCAxKTsKJiM0MzsJCQlpZiAoZXJyICZsdDsgMCkgewomIzQzOwkJCQlicGh5X2VycihkcnZyLCAmIzM0O2ZhaWxlZCB0byBlbmFibGUgZncgc3VwcGxpY2FudFxuJiMzNDspOwomIzQzOwkJCQlnb3RvIGRvbmU7CiYjNDM7CQkJfQomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQllcnIgPSBicmNtZl9maWxfaW92YXJfaW50X3NldChpZnAsICYjMzQ7c3VwX3dwYSYjMzQ7LCAwKTsKIAkJfQotCQllcnIgPSBicmNtZl9md3ZpZF9zZXRfc2FlX3Bhc3N3b3JkKGlmcCwgJmFtcDtzbWUtJmd0O2NyeXB0byk7Ci0JCWlmICghZXJyICZhbXA7JmFtcDsgc21lLSZndDtjcnlwdG8ucHNrKQomIzQzOwkJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSykKIAkJCWVyciA9IGJyY21mX3NldF9wbWsoaWZwLCBzbWUtJmd0O2NyeXB0by5wc2ssCiAJCQkJCSAgICBCUkNNRl9XU0VDX01BWF9QU0tfTEVOKTsKJiM0MzsJCWVsc2UgaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSAmYW1wOyZhbXA7CiYjNDM7CQkJIHNtZS0mZ3Q7Y3J5cHRvLnNhZV9wd2QgJmFtcDsmYW1wOwomIzQzOwkJCSBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1NBRSkpIHsKJiM0MzsJCQkvKiBjbGVhbiB1cCB1c2VyLXNwYWNlIFJTTkUgKi8KJiM0MzsJCQlpZiAoYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgJiMzNDt3cGFpZSYjMzQ7LCBOVUxMLCAwKSkgewomIzQzOwkJCQlicGh5X2VycihkcnZyLCAmIzM0O2ZhaWxlZCB0byBjbGVhbiB1cCB1c2VyLXNwYWNlIFJTTkVcbiYjMzQ7KTsKJiM0MzsJCQkJZ290byBkb25lOwomIzQzOwkJCX0KJiM0MzsJCQllcnIgPSBicmNtZl9md3ZpZF9zZXRfc2FlX3Bhc3N3b3JkKGlmcCwgJmFtcDtzbWUtJmd0O2NyeXB0byk7CiYjNDM7CQkJaWYgKCFlcnIgJmFtcDsmYW1wOyBzbWUtJmd0O2NyeXB0by5wc2spCiYjNDM7CQkJCWVyciA9IGJyY21mX3NldF9wbWsoaWZwLCBzbWUtJmd0O2NyeXB0by5wc2ssCiYjNDM7CQkJCQkJICAgIEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pOwomIzQzOwkJfQomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGRvbmU7CiAJfQotCWlmIChlcnIpCi0JCWdvdG8gZG9uZTsKLQogCS8qIEpvaW4gd2l0aCBzcGVjaWZpYyBCU1NJRCBhbmQgY2FjaGVkIFNTSUQKIAkgKiBJZiBTU0lEIGlzIHplcm8gam9pbiBiYXNlZCBvbiBCU1NJRCBvbmx5CiAJICovCkBAIC00NTE5LDYgJiM0Mzs0NTMwLDExIEBAIHN0YXRpYyBib29sIGJyY21mX3ZhbGlkX3dwYV9vdWkodTggKm91aSwgYm9vbCBpc19yc25faWUpCiAJcmV0dXJuIChtZW1jbXAob3VpLCBXUEFfT1VJLCBUTFZfT1VJX0xFTikgPT0gMCk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBicmNtZl92YWxpZF9kcHBfc3VpdGUodTggKm91aSkKJiM0Mzt7CiYjNDM7CXJldHVybiBnZXRfdW5hbGlnbmVkX2JlMzIob3VpKSA9PSBXTEFOX0FLTV9TVUlURV9XRkFfRFBQOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzMzIKIGJyY21mX2NvbmZpZ3VyZV93cGFpZShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwKIAkJICAgICAgY29uc3Qgc3RydWN0IGJyY21mX3ZzX3RsdiAqd3BhX2llLApAQCAtNDYzMiw0MiAmIzQzOzQ2NDgsNDcgQEAgYnJjbWZfY29uZmlndXJlX3dwYWllKHN0cnVjdCBicmNtZl9pZiAqaWZwLAogCQlnb3RvIGV4aXQ7CiAJfQogCWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKCFicmNtZl92YWxpZF93cGFfb3VpKCZhbXA7ZGF0YVtvZmZzZXRdLCBpc19yc25faWUpKSB7CiYjNDM7CQlpZiAoYnJjbWZfdmFsaWRfZHBwX3N1aXRlKCZhbXA7ZGF0YVtvZmZzZXRdKSkgewomIzQzOwkJCXdwYV9hdXRoIHw9IFdGQV9BVVRIX0RQUDsKJiM0MzsJCQlvZmZzZXQgJiM0Mzs9IFRMVl9PVUlfTEVOOwomIzQzOwkJfSBlbHNlIGlmIChicmNtZl92YWxpZF93cGFfb3VpKCZhbXA7ZGF0YVtvZmZzZXRdLCBpc19yc25faWUpKSB7CiYjNDM7CQkJb2Zmc2V0ICYjNDM7PSBUTFZfT1VJX0xFTjsKJiM0MzsJCQlzd2l0Y2ggKGRhdGFbb2Zmc2V0XSkgewomIzQzOwkJCWNhc2UgUlNOX0FLTV9OT05FOgomIzQzOwkJCQlicmNtZl9kYmcoVFJBQ0UsICYjMzQ7UlNOX0FLTV9OT05FXG4mIzM0Oyk7CiYjNDM7CQkJCXdwYV9hdXRoIHw9IFdQQV9BVVRIX05PTkU7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWNhc2UgUlNOX0FLTV9VTlNQRUNJRklFRDoKJiM0MzsJCQkJYnJjbWZfZGJnKFRSQUNFLCAmIzM0O1JTTl9BS01fVU5TUEVDSUZJRURcbiYjMzQ7KTsKJiM0MzsJCQkJaXNfcnNuX2llID8KJiM0MzsJCQkJCSh3cGFfYXV0aCB8PSBXUEEyX0FVVEhfVU5TUEVDSUZJRUQpIDoKJiM0MzsJCQkJCSh3cGFfYXV0aCB8PSBXUEFfQVVUSF9VTlNQRUNJRklFRCk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWNhc2UgUlNOX0FLTV9QU0s6CiYjNDM7CQkJCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtSU05fQUtNX1BTS1xuJiMzNDspOwomIzQzOwkJCQlpc19yc25faWUgPyAod3BhX2F1dGggfD0gV1BBMl9BVVRIX1BTSykgOgomIzQzOwkJCQkJICAgICh3cGFfYXV0aCB8PSBXUEFfQVVUSF9QU0spOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQljYXNlIFJTTl9BS01fU0hBMjU2X1BTSzoKJiM0MzsJCQkJYnJjbWZfZGJnKFRSQUNFLCAmIzM0O1JTTl9BS01fTUZQX1BTS1xuJiMzNDspOwomIzQzOwkJCQl3cGFfYXV0aCB8PSBXUEEyX0FVVEhfUFNLX1NIQTI1NjsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJY2FzZSBSU05fQUtNX1NIQTI1Nl8xWDoKJiM0MzsJCQkJYnJjbWZfZGJnKFRSQUNFLCAmIzM0O1JTTl9BS01fTUZQXzFYXG4mIzM0Oyk7CiYjNDM7CQkJCXdwYV9hdXRoIHw9IFdQQTJfQVVUSF8xWF9TSEEyNTY7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWNhc2UgUlNOX0FLTV9TQUU6CiYjNDM7CQkJCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtSU05fQUtNX1NBRVxuJiMzNDspOwomIzQzOwkJCQl3cGFfYXV0aCB8PSBXUEEzX0FVVEhfU0FFX1BTSzsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJZGVmYXVsdDoKJiM0MzsJCQkJYnBoeV9lcnIoZHJ2ciwgJiMzNDtJbnZhbGlkIGtleSBtZ210IGluZm9cbiYjMzQ7KTsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgewogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWJwaHlfZXJyKGRydnIsICYjMzQ7aW52YWxpZCBPVUlcbiYjMzQ7KTsKIAkJCWdvdG8gZXhpdDsKIAkJfQotCQlvZmZzZXQgJiM0Mzs9IFRMVl9PVUlfTEVOOwotCQlzd2l0Y2ggKGRhdGFbb2Zmc2V0XSkgewotCQljYXNlIFJTTl9BS01fTk9ORToKLQkJCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtSU05fQUtNX05PTkVcbiYjMzQ7KTsKLQkJCXdwYV9hdXRoIHw9IFdQQV9BVVRIX05PTkU7Ci0JCQlicmVhazsKLQkJY2FzZSBSU05fQUtNX1VOU1BFQ0lGSUVEOgotCQkJYnJjbWZfZGJnKFRSQUNFLCAmIzM0O1JTTl9BS01fVU5TUEVDSUZJRURcbiYjMzQ7KTsKLQkJCWlzX3Jzbl9pZSA/ICh3cGFfYXV0aCB8PSBXUEEyX0FVVEhfVU5TUEVDSUZJRUQpIDoKLQkJCQkgICAgKHdwYV9hdXRoIHw9IFdQQV9BVVRIX1VOU1BFQ0lGSUVEKTsKLQkJCWJyZWFrOwotCQljYXNlIFJTTl9BS01fUFNLOgotCQkJYnJjbWZfZGJnKFRSQUNFLCAmIzM0O1JTTl9BS01fUFNLXG4mIzM0Oyk7Ci0JCQlpc19yc25faWUgPyAod3BhX2F1dGggfD0gV1BBMl9BVVRIX1BTSykgOgotCQkJCSAgICAod3BhX2F1dGggfD0gV1BBX0FVVEhfUFNLKTsKLQkJCWJyZWFrOwotCQljYXNlIFJTTl9BS01fU0hBMjU2X1BTSzoKLQkJCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtSU05fQUtNX01GUF9QU0tcbiYjMzQ7KTsKLQkJCXdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0tfU0hBMjU2OwotCQkJYnJlYWs7Ci0JCWNhc2UgUlNOX0FLTV9TSEEyNTZfMVg6Ci0JCQlicmNtZl9kYmcoVFJBQ0UsICYjMzQ7UlNOX0FLTV9NRlBfMVhcbiYjMzQ7KTsKLQkJCXdwYV9hdXRoIHw9IFdQQTJfQVVUSF8xWF9TSEEyNTY7Ci0JCQlicmVhazsKLQkJY2FzZSBSU05fQUtNX1NBRToKLQkJCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtSU05fQUtNX1NBRVxuJiMzNDspOwotCQkJd3BhX2F1dGggfD0gV1BBM19BVVRIX1NBRV9QU0s7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJwaHlfZXJyKGRydnIsICYjMzQ7SW52YWxpZCBrZXkgbWdtdCBpbmZvXG4mIzM0Oyk7Ci0JCX0KIAkJb2Zmc2V0JiM0MzsmIzQzOzsKIAl9CiAKQEAgLTQ2ODcsMTAgJiM0Mzs0NzA4LDEyIEBAIGJyY21mX2NvbmZpZ3VyZV93cGFpZShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwKIAkJCQkgKi8KIAkJCQlpZiAoISh3cGFfYXV0aCAmYW1wOyAoV1BBMl9BVVRIX1BTS19TSEEyNTYgfAogCQkJCQkJICBXUEEyX0FVVEhfMVhfU0hBMjU2IHwKJiM0MzsJCQkJCQkgIFdGQV9BVVRIX0RQUCB8CiAJCQkJCQkgIFdQQTNfQVVUSF9TQUVfUFNLKSkpIHsKIAkJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQkJZ290byBleGl0OwogCQkJCX0KJiM0MzsKIAkJCQkvKiBGaXJtd2FyZSBoYXMgcmVxdWlyZW1lbnQgdGhhdCBXUEEyX0FVVEhfUFNLLwogCQkJCSAqIFdQQTJfQVVUSF9VTlNQRUNJRklFRCBiZSBzZXQsIGlmIFNIQTI1NiBPVUkKIAkJCQkgKiBpcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgcnNuIGllLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jCmluZGV4IDZlMGM5MGY0NzE4YjU4Li4yYzFmNTJlZDUxMzgwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYwpAQCAtNiw2ICYjNDM7Niw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2NmZzgwMjExLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDticmNtdV93aWZpLmgmZ3Q7CkBAIC00NCw5ICYjNDM7NDUsNiBAQAogCiAjZGVmaW5lIEJSQ01GX1NDQl9USU1FT1VUX1ZBTFVFCTIwCiAKLSNkZWZpbmUgUDJQX1ZFUgkJCTkJLyogUDJQIHZlcnNpb246IDk9V2lGaSBQMlAgdjEuMCAqLwotI2RlZmluZSBQMlBfUFVCX0FGX0NBVEVHT1JZCTB4MDQKLSNkZWZpbmUgUDJQX1BVQl9BRl9BQ1RJT04JMHgwOQogI2RlZmluZSBQMlBfQUZfQ0FURUdPUlkJCTB4N2YKICNkZWZpbmUgUDJQX09VSQkJCSYjMzQ7XHg1MFx4NkZceDlBJiMzNDsJLyogUDJQIE9VSSAqLwogI2RlZmluZSBQMlBfT1VJX0xFTgkJMwkJLyogUDJQIE9VSSBsZW5ndGggKi8KQEAgLTE0MywxMCAmIzQzOzE0MSwxMCBAQCBzdHJ1Y3QgYnJjbWZfcDJwX3NjYW5fbGUgewogLyoqCiAgKiBzdHJ1Y3QgYnJjbWZfcDJwX3B1Yl9hY3RfZnJhbWUgLSBXaUZpIFAyUCBQdWJsaWMgQWN0aW9uIEZyYW1lCiAgKgotICogQGNhdGVnb3J5OiBQMlBfUFVCX0FGX0NBVEVHT1JZCi0gKiBAYWN0aW9uOiBQMlBfUFVCX0FGX0FDVElPTgomIzQzOyAqIEBjYXRlZ29yeTogV0xBTl9DQVRFR09SWV9QVUJMSUMKJiM0MzsgKiBAYWN0aW9uOiBXTEFOX1BVQl9BQ1RJT05fVkVORE9SX1NQRUNJRklDCiAgKiBAb3VpOiBQMlBfT1VJCi0gKiBAb3VpX3R5cGU6IE9VSSB0eXBlIC0gUDJQX1ZFUgomIzQzOyAqIEBvdWlfdHlwZTogT1VJIHR5cGUgLSBXTEFOX09VSV9UWVBFX1dGQV9QMlAKICAqIEBzdWJ0eXBlOiBPVUkgc3VidHlwZSAtIFAyUF9UWVBFXyoKICAqIEBkaWFsb2dfdG9rZW46IG5vbnplcm8sIGlkZW50aWZpZXMgcmVxL3JzcCB0cmFuc2FjdGlvbgogICogQGVsdHM6IFZhcmlhYmxlIGxlbmd0aCBpbmZvcm1hdGlvbiBlbGVtZW50cy4KQEAgLTE2Niw3ICYjNDM7MTY0LDcgQEAgc3RydWN0IGJyY21mX3AycF9wdWJfYWN0X2ZyYW1lIHsKICAqCiAgKiBAY2F0ZWdvcnk6IFAyUF9BRl9DQVRFR09SWQogICogQG91aTogT1VJIC0gUDJQX09VSQotICogQHR5cGU6IE9VSSBUeXBlIC0gUDJQX1ZFUgomIzQzOyAqIEB0eXBlOiBPVUkgVHlwZSAtIFdMQU5fT1VJX1RZUEVfV0ZBX1AyUAogICogQHN1YnR5cGU6IE9VSSBTdWJ0eXBlIC0gUDJQX0FGXyoKICAqIEBkaWFsb2dfdG9rZW46IG5vbnplcm8sIGlkZW50aWZpZXMgcmVxL3Jlc3AgdHJhbmFjdGlvbgogICogQGVsdHM6IFZhcmlhYmxlIGxlbmd0aCBpbmZvcm1hdGlvbiBlbGVtZW50cy4KQEAgLTIyOCwxMCAmIzQzOzIyNiwzOCBAQCBzdGF0aWMgYm9vbCBicmNtZl9wMnBfaXNfcHViX2FjdGlvbih2b2lkICpmcmFtZSwgdTMyIGZyYW1lX2xlbikKIAlpZiAoZnJhbWVfbGVuICZsdDsgc2l6ZW9mKCpwYWN0X2ZybSkpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChwYWN0X2ZybS0mZ3Q7Y2F0ZWdvcnkgPT0gUDJQX1BVQl9BRl9DQVRFR09SWSAmYW1wOyZhbXA7Ci0JICAgIHBhY3RfZnJtLSZndDthY3Rpb24gPT0gUDJQX1BVQl9BRl9BQ1RJT04gJmFtcDsmYW1wOwotCSAgICBwYWN0X2ZybS0mZ3Q7b3VpX3R5cGUgPT0gUDJQX1ZFUiAmYW1wOyZhbXA7Ci0JICAgIG1lbWNtcChwYWN0X2ZybS0mZ3Q7b3VpLCBQMlBfT1VJLCBQMlBfT1VJX0xFTikgPT0gMCkKJiM0MzsJaWYgKHBhY3RfZnJtLSZndDtjYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBwYWN0X2ZybS0mZ3Q7YWN0aW9uID09IFdMQU5fUFVCX0FDVElPTl9WRU5ET1JfU1BFQ0lGSUMgJmFtcDsmYW1wOwomIzQzOwkgICAgcGFjdF9mcm0tJmd0O291aV90eXBlID09IFdMQU5fT1VJX1RZUEVfV0ZBX1AyUCAmYW1wOyZhbXA7CiYjNDM7CSAgICBnZXRfdW5hbGlnbmVkX2JlMjQocGFjdF9mcm0tJmd0O291aSkgPT0gV0xBTl9PVUlfV0ZBKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnJjbWZfcDJwX2lzX2RwcF9wdWJfYWN0aW9uKCkgLSB0cnVlIGlmIGRwcCBwdWJsaWMgdHlwZSBmcmFtZS4KJiM0MzsgKgomIzQzOyAqIEBmcmFtZTogYWN0aW9uIGZyYW1lIGRhdGEuCiYjNDM7ICogQGZyYW1lX2xlbjogbGVuZ3RoIG9mIGFjdGlvbiBmcmFtZSBkYXRhLgomIzQzOyAqCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFjdGlvbiBmcmFtZSBpcyBkcHAgcHVibGljIGFjdGlvbiB0eXBlCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgYnJjbWZfcDJwX2lzX2RwcF9wdWJfYWN0aW9uKHZvaWQgKmZyYW1lLCB1MzIgZnJhbWVfbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IGJyY21mX3AycF9wdWJfYWN0X2ZyYW1lICpwYWN0X2ZybTsKJiM0MzsKJiM0MzsJaWYgKCFmcmFtZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcGFjdF9mcm0gPSAoc3RydWN0IGJyY21mX3AycF9wdWJfYWN0X2ZyYW1lICopZnJhbWU7CiYjNDM7CWlmIChmcmFtZV9sZW4gJmx0OyBzaXplb2Yoc3RydWN0IGJyY21mX3AycF9wdWJfYWN0X2ZyYW1lKSAtIDEpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChwYWN0X2ZybS0mZ3Q7Y2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9QVUJMSUMgJmFtcDsmYW1wOwomIzQzOwkgICAgcGFjdF9mcm0tJmd0O2FjdGlvbiA9PSBXTEFOX1BVQl9BQ1RJT05fVkVORE9SX1NQRUNJRklDICZhbXA7JmFtcDsKJiM0MzsJICAgIHBhY3RfZnJtLSZndDtvdWlfdHlwZSA9PSBXTEFOX09VSV9UWVBFX1dGQV9EUFAgJmFtcDsmYW1wOwomIzQzOwkgICAgZ2V0X3VuYWxpZ25lZF9iZTI0KHBhY3RfZnJtLSZndDtvdWkpID09IFdMQU5fT1VJX1dGQSkKIAkJcmV0dXJuIHRydWU7CiAKIAlyZXR1cm4gZmFsc2U7CkBAIC0yNTcsNyAmIzQzOzI4Myw3IEBAIHN0YXRpYyBib29sIGJyY21mX3AycF9pc19wMnBfYWN0aW9uKHZvaWQgKmZyYW1lLCB1MzIgZnJhbWVfbGVuKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoYWN0X2ZybS0mZ3Q7Y2F0ZWdvcnkgPT0gUDJQX0FGX0NBVEVHT1JZICZhbXA7JmFtcDsKLQkgICAgYWN0X2ZybS0mZ3Q7dHlwZSAgPT0gUDJQX1ZFUiAmYW1wOyZhbXA7CiYjNDM7CSAgICBhY3RfZnJtLSZndDt0eXBlICA9PSBXTEFOX09VSV9UWVBFX1dGQV9QMlAgJmFtcDsmYW1wOwogCSAgICBtZW1jbXAoYWN0X2ZybS0mZ3Q7b3VpLCBQMlBfT1VJLCBQMlBfT1VJX0xFTikgPT0gMCkKIAkJcmV0dXJuIHRydWU7CiAKQEAgLTEyODEsNiAmIzQzOzEzMDcsOSBAQCBzdGF0aWMgczMyIGJyY21mX3AycF9hYm9ydF9hY3Rpb25fZnJhbWUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZykKIAlicmNtZl9kYmcoVFJBQ0UsICYjMzQ7RW50ZXJcbiYjMzQ7KTsKIAogCXZpZiA9IHAycC0mZ3Q7YnNzX2lkeFtQMlBBUElfQlNTQ0ZHX0RFVklDRV0udmlmOwomIzQzOwlpZiAoIXZpZikKJiM0MzsJCXZpZiA9IHAycC0mZ3Q7YnNzX2lkeFtQMlBBUElfQlNTQ0ZHX1BSSU1BUlldLnZpZjsKJiM0MzsKIAllcnIgPSBicmNtZl9maWxfYnNzY2ZnX2RhdGFfc2V0KHZpZi0mZ3Q7aWZwLCAmIzM0O2FjdGZyYW1lX2Fib3J0JiMzNDssICZhbXA7aW50X3ZhbCwKIAkJCQkJc2l6ZW9mKHMzMikpOwogCWlmIChlcnIpCkBAIC0xNzg5LDcgJiM0MzsxODE4LDkgQEAgYm9vbCBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywKIAkJCWdvdG8gZXhpdDsKIAkJfQogCX0gZWxzZSBpZiAoYnJjbWZfcDJwX2lzX3AycF9hY3Rpb24oYWN0aW9uX2ZyYW1lLSZndDtkYXRhLAotCQkJCQkgICBhY3Rpb25fZnJhbWVfbGVuKSkgewomIzQzOwkJCQkJICAgYWN0aW9uX2ZyYW1lX2xlbikgfHwKJiM0MzsJCSAgIGJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvbihhY3Rpb25fZnJhbWUtJmd0O2RhdGEsCiYjNDM7CQkJCQkgICAgICAgYWN0aW9uX2ZyYW1lX2xlbikpIHsKIAkJLyogZG8gbm90IGNvbmZpZ3VyZSBhbnl0aGluZy4gaXQgd2lsbCBiZSAqLwogCQkvKiBzZW50IHdpdGggYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gICAgICovCiAJfSBlbHNlIHsKQEAgLTE4MjYsNiAmIzQzOzE4NTcsNyBAQCBib29sIGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLAogCS8qIHZhbGlkYXRlIGNoYW5uZWwgYW5kIHAycCBpZXMgKi8KIAlpZiAoY29uZmlnX2FmX3BhcmFtcy5zZWFyY2hfY2hhbm5lbCAmYW1wOyZhbXA7CiAJICAgIElTX1AyUF9TT0NJQUxfQ0hBTk5FTChsZTMyX3RvX2NwdShhZl9wYXJhbXMtJmd0O2NoYW5uZWwpKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwMnAtJmd0O2Jzc19pZHhbUDJQQVBJX0JTU0NGR19ERVZJQ0VdLnZpZiAmYW1wOyZhbXA7CiAJICAgIHAycC0mZ3Q7YnNzX2lkeFtQMlBBUElfQlNTQ0ZHX0RFVklDRV0udmlmLSZndDtzYXZlZF9pZS5wcm9iZV9yZXFfaWVfbGVuKSB7CiAJCWFmeF9oZGwgPSAmYW1wO3AycC0mZ3Q7YWZ4X2hkbDsKIAkJYWZ4X2hkbC0mZ3Q7cGVlcl9saXN0ZW5fY2hhbiA9IGxlMzJfdG9fY3B1KGFmX3BhcmFtcy0mZ3Q7Y2hhbm5lbCk7CkBAIC0yNTQzLDQgJiM0MzsyNTc1LDMgQEAgdm9pZCBicmNtZl9wMnBfZGV0YWNoKHN0cnVjdCBicmNtZl9wMnBfaW5mbyAqcDJwKQogCS8qIGp1c3Qgc2V0IGl0IGFsbCB0byB6ZXJvICovCiAJbWVtc2V0KHAycCwgMCwgc2l6ZW9mKCpwMnApKTsKIH0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oCmluZGV4IDc1NTJiZGI5MTk5MWNlLi5jNDY1MjA4YzQzMzE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9pbmNsdWRlL2JyY211X3dpZmkuaApAQCAtMjMzLDYgJiM0MzsyMzMsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWNfYml0bWFwX3RzdCh1OCBiaXRtYXAsIGludCBwcmVjKQogCiAjZGVmaW5lIFdQQTNfQVVUSF9TQUVfUFNLCTB4NDAwMDAJLyogU0FFIHdpdGggNC13YXkgaGFuZHNoYWtlICovCiAKJiM0MzsjZGVmaW5lIFdGQV9BVVRIX0RQUAkJMHgyMDAwMDAgLyogV0ZBIERQUCBBVVRIICovCiYjNDM7CiAjZGVmaW5lIERPVDExX0RFRkFVTFRfUlRTX0xFTgkJMjM0NwogI2RlZmluZSBET1QxMV9ERUZBVUxUX0ZSQUdfTEVOCQkyMzQ2CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM2OQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDY3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBhbmQgVGVzdGluZyBEUFAgU3VwcG9ydCBpbiBicmNtZm1hYyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgaXQmIzM5O3MgdHdlYWtpbmcgYGJyY21mbWFjYCB0byBzdXBwb3J0IERQUCBhdXRoZW50aWNhdGlvbiAoYFdMQU5fQUtNX1NVSVRFX1dGQV9EUFBgKSBhbmQgcmVsYXRlZCBPVUkgdHlwZXMuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyBgY2ZnODAyMTEuY2AgYW5kIGBwMnAuY2AuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzLCBjYW4gd2UgYWN0dWFsbHkgcmVhY2ggdGhpcyBmdW5jdGlvbmFsaXR5IGFuZCB0ZXN0IGl0IHByb3Blcmx5PwoKVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBgYnJjbWZtYWNgLCB0aGUgQnJvYWRjb20gV2lGaSBkcml2ZXIuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBpbiB0aGUgYGNmZzgwMjExYCBpbnRlcmZhY2UgYW5kIFAyUCBhY3Rpb24gZnJhbWUgaGFuZGxpbmcsIG1lYW5pbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBpbnRlcmFjdGlvbnMgdGhhdCAqc2hvdWxkKiBiZSBhY2Nlc3NpYmxlIHRocm91Z2ggbmV0bGluayBhbmQgbmV0d29yayBpbnRlcmZhY2VzLgoKTm93LCB0aGUgcmVhbCBjaGFsbGVuZ2UuIENhbiB3ZSBldmVuIGZ1enogdGhpcyBlZmZlY3RpdmVseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcuIGBicmNtZm1hY2AgaXMgYSBoYXJkd2FyZSBkcml2ZXIsIG1lYW5pbmcgaXQgZWl0aGVyIG5lZWRzIHJlYWwgaGFyZHdhcmUgb3IsIGlkZWFsbHksIHNvbWUgc29ydCBvZiBzaW11bGF0aW9uIGxheWVyLiBJIHF1aWNrbHkgY29uc2lkZXIgd2hldGhlciB0aGVyZeKAmXMgYSBzaW11bGF0b3IuIEkga25vdyB0aGF0IGBtYWM4MDIxMWAgaGFzIGBtYWM4MDIxMV9od3NpbWAsIGJ1dCB0aGlzIGlzIGEgZnVsbG1hYyBkcml2ZXIuCgpUaGVuLCBJIHJlbWVtYmVyIHN5emthbGxlci4gU3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcyBhcmUgaW50cmlndWluZy4gVGhleSBoYXZlIHNvbWUgc3VwcG9ydCBmb3IgVVNCIGZ1enppbmcgKGR1bW15IEhDRCkgYW5kIFBDSSBmdXp6aW5nLCB3aGljaCAqY291bGQqIGdldCB1cyBwYXN0IHRoZSBpbml0aWFsIHByb2JlLCBhbmQgbWF5YmUgZXZlbiBmdXJ0aGVyIGlmIHRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZC4gQW5kIGBicmNtZm1hY2AgaGFzIFVTQiwgU0RJTywgYW5kIFBDSWUgaW50ZXJmYWNlcy4gQmluZ28hIFVTQiBmdXp6aW5nIGlzIHRoZSBtb3N0IHByb21pc2luZyByb3V0ZS4gSXQmIzM5O3MgbGlrZWx5IHdlIGNhbiByZWFjaCB0aGUgVVNCIHByb2JlLCByZWdpc3RlciBhIHdpcGh5LCBhbmQgdGhlbiBleHBvc2UgdGhvc2UgY2ZnODAyMTEgb3BlcmF0aW9ucyB0byB1c2VyIHNwYWNlLgoKU28sIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCBmdW5jdGlvbnMgd2UgbmVlZCB0byBoaXQ6IGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCBhbmQgYGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZWAuIElmIFVTQiBmdXp6aW5nIHdvcmtzLCB0aGUgZHJpdmVyIHByb2JlcywgYSB3aXBoeSBnZXRzIHJlZ2lzdGVyZWQsIGFuZCBuZXRsaW5rIGNvbW1hbmRzIGNhbiB0cmlnZ2VyIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YC4gVGhhdCYjMzk7cyBhIGRpcmVjdCBwYXRoLgoKVGltZSB0byBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucy4gTGV0IG1lIG1ha2Ugc3VyZSBgYnJjbWZtYWNgIGlzIGNvbXBpbGVkIHdpdGggVVNCIHN1cHBvcnQuIE5lZWQgdG8gY2hlY2s6IGBDT05GSUdfQlJDTUZNQUNgLCBgQ09ORklHX0JSQ01GTUFDX1VTQmAsIGBDT05GSUdfQlJDTUZNQUNfUENJRWAsIGFuZCBgQ09ORklHX0JSQ01GTUFDX1NESU9gLgoKQWxyaWdodCwgYSBxdWljayByZXZpZXcgb2YgdGhlIGNvZGUgY29uZmlybXMgdGhlIGNvbm5lY3Rpb24uIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCBpcyBhIGBjZmc4MDIxMWAgY2FsbGJhY2sgc3BlY2lmaWNhbGx5IGZvciB0aGUgJiMzNDtjb25uZWN0JiMzNDsgb3BlcmF0aW9uLiBgYnJjbWZfcDJwX3NlbmRfYWN0aW9uX2ZyYW1lYCBpcyBjYWxsZWQgZnJvbSBgYnJjbWZfY2ZnODAyMTFfbWdtdF90eGAsIHdoaWNoIGlzIHRoZSBgbWdtdF90eGAgY2FsbGJhY2suCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhvc2UgY29uZmlnIG9wdGlvbnMgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIHBsYWNlIGZvciBhIHByb3BlciB0ZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUkNNRk1BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE6Y29uZmlnIEJSQ01GTUFDXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTE6Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEyLVx0Ym9vbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNDpjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNS1cdGJvb2xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTc6Y29uZmlnIEJSQ01GTUFDX1NESU9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjI5OmNvbmZpZyBCUkNNRk1BQ19VU0JcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtVU0IgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTM5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6NDA6Y29uZmlnIEJSQ01GTUFDX1BDSUVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzUwCgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnJvYWRjb20gV2lGaSBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYEJSQ01GTUFDYCBhbmQgYEJSQ01GTUFDX1VTQmAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gYXNzZXNzIHRoZWlyIHJlbGV2YW5jZSB0byBmdXp6aW5nLiBJIHJlbWVtYmVyIGBCUkNNRk1BQ2AgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ0ZHODAyMTFgLCB3aGljaCBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBkcml2ZXIgd29ydGggdGhlIGVmZm9ydD8KCldlbGwsIHllcywgdGhlIHBvdGVudGlhbCBpcyBkZWZpbml0ZWx5IHRoZXJlLiBUaGUgZHJpdmVyIG1vZGlmaWVzIGZ1bmN0aW9uYWwgbG9naWMsIHdoaWNoIGlzIGEga2V5IGluZGljYXRvci4gUGx1cywgSSBjYW4gaW5zdGFudGlhdGUgdGhlIGBCUkNNRk1BQ2AgdmlhIFVTQiBmdXp6aW5nLCB3aGljaCBpcyBncmVhdCBiZWNhdXNlIFN5emthbGxlciBoYXMgYSBkZWNlbnQgVVNCIGZ1enplci4gVGhhdCBzdHJlYW1saW5lcyB0aGUgZnV6emluZyBwcm9jZXNzIHNpZ25pZmljYW50bHkuCgpOb3csIGEgY3JpdGljYWwgcG9pbnQgSSBuZWVkIHRvIHZlcmlmeTogZG9lcyBgYnJjbWZtYWNgIG5lZWQgYW55IGZpcm13YXJlIGZvciBpbml0aWFsaXphdGlvbj8gVGhpcyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyBhbnkgZmFsc2UgcG9zaXRpdmVzLiBUbyBtYWtlIHN1cmUsIEkgc2hvdWxkIGNoZWNrIHRoZSBgYnJjbWZfdXNiX3Byb2JlYCBmdW5jdGlvbiBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIGRldGVybWluZSBpZiBmaXJtd2FyZSBpcyByZXF1aXJlZCBhbmQgaG93IHRoZSBVU0IgaW50ZXJmYWNlIGludGVyYWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl91c2JfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNTc9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9idXNfb3BzIGJyY21mX3VzYl9idXNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMTY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjExNjg6c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE2OS1cdFx0XHRcdCAgIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTIxNj1icmNtZl91c2JfcHJlcGFyZV9md19yZXF1ZXN0KHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTIzNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMjM2OnN0YXRpYyBpbnQgYnJjbWZfdXNiX3Byb2JlX2NiKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjM3LVx0XHRcdCAgICAgIGVudW0gYnJjbWZfZnd2ZW5kb3IgZnd2aWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyOTktXHQvKiByZXF1ZXN0IGZpcm13YXJlIGhlcmUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzAwOlx0cmV0ID0gYnJjbWZfZndfZ2V0X2Zpcm13YXJlcyhkZXYsIGZ3cmVxLCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzAxLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMzMzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzM0OmJyY21mX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzMzUte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDM0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE0MzU6XHRyZXQgPSBicmNtZl91c2JfcHJvYmVfY2IoZGV2aW5mbywgaWQtXHUwMDNlZHJpdmVyX2luZm8pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE0MzYtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTAzPXN0YXRpYyBpbnQgYnJjbWZfdXNiX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUxNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTE2Olx0cmV0ID0gYnJjbWZfZndfZ2V0X2Zpcm13YXJlcyhcdTAwMjZ1c2ItXHUwMDNlZGV2LCBmd3JlcSwgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUxNy1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTE1NTc9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJyY21mX3VzYmRydnIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTU1OC1cdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTU1OTpcdC5wcm9iZSA9IGJyY21mX3VzYl9wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTYwLVx0LmRpc2Nvbm5lY3QgPSBicmNtZl91c2JfZGlzY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk0MQoJCQkJCQkJb3V0cHV0OiA2MgoJCQkJCQkJdGhvdWdodHM6IDM3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBicmNtZm1hYyBEcml2ZXIgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGJyY21mbWFjYCBkcml2ZXIsIGFuZCB0aGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgZmlybXdhcmUgYXZhaWxhYmlsaXR5LiBUaGUgY29kZSBjYWxscyBgYnJjbWZfZndfZ2V0X2Zpcm13YXJlc2AsIGFuZCBpZiB0aGUgZmlybXdhcmUmIzM5O3MgbWlzc2luZywgdGhlIHByb2JlIGNvdWxkIGZhaWwgcmlnaHQgdGhlcmUuIFN5emthbGxlciB0aHJvd3Mgc29tZSBkdW1teSBmaXJtd2FyZSBpbWFnZXMgaW50byB0aGUgbWl4LCBidXQgaXQmIzM5O3Mgbm90IGEgZ3VhcmFudGVlIHRoYXQgdGhlIGBicmNtZm1hY2AgZHJpdmVyIHdpbGwgaW5pdGlhbGl6ZSBwcm9wZXJseS4gSXQgY291bGQgYmUgdHJ5aW5nIHRvIHBhcnNlIHRoZSBmaXJtd2FyZSBvciB0YWxrIHRvIHRoZSBkZXZpY2UsIHNvIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhvc2UgcG9zc2liaWxpdGllcy4KCldhaXQsIFN5emthbGxlciBoYXMgcHJldHR5IGV4dGVuc2l2ZSBjb3ZlcmFnZSBmb3IgYGJyY21mbWFjYCwgZG9lc24mIzM5O3QgaXQ/IExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBpZiBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIHZpYSB0aGUgZnV6emluZy4KCkJ1dCwgaGFuZyBvbiwgaXQgZG9lc24mIzM5O3QgbmVlZCB0byBiZSAqcGVyZmVjdGx5KiByZWFjaGFibGUsIHJpZ2h0PyBJdCYjMzk7cyByZWFsbHkgYWJvdXQgd2hldGhlciB0aGVyZSBhcmUgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgaW4gdGhlIGRyaXZlciwgYW5kLCBldmVuIGlmIHRoZSBjb3ZlcmFnZSBpc24mIzM5O3QgcGVyZmVjdCwgaWYgaXQmIzM5O3MgcmVhY2hhYmxlICppbiB0aGVvcnkqIChlLmcuLCB0aHJvdWdoIFVTQiBmdXp6aW5nIG9yIG5ldGxpbmsgaWYgdGhlIGRldmljZSBpcyBhcm91bmQpLCBJIHNob3VsZCBqdXN0IG1hcmsgaXQgYXMgYFdvcnRoRnV6emluZz10cnVlYC4KClRoZSBpbnN0cnVjdGlvbnMgc3RhdGUsIGV4cGxpY2l0bHksIHRoYXQgaWYgYSBjaGFuZ2UgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGNvZGUgKmNhbiogYmUgZXhlY3V0ZWQgd2l0aCBteSBjb2RlIHNlYXJjaCB0b29scywgYW5kIHRoZW4gbWFyayBpdCBgV29ydGhGdXp6aW5nPXRydWVgLiBJdCYjMzk7cyBzcGVjaWZpY2FsbHkgYSBwcm9ibGVtIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBlc3BlY2lhbGx5IHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuCgpTbywgaXMgYGJyY21mbWFjYCBpbXBvc3NpYmxlIHRvIHJlYWNoPyBBYnNvbHV0ZWx5IG5vdC4KCldpdGggVVNCIGZ1enppbmcsIHdoaWNoIGNhbiBiZSBkb25lIHdpdGggYSBkdW1teSBIQ0QsIHdlIGNhbiBlbXVsYXRlIHRoZSBVU0IgZGV2aWNlLiBUaGUgZHJpdmVyIHdpbGwgcHJvYmUsIGl0ICptaWdodCogYXNrIGZvciBmaXJtd2FyZS4gVGhhdCYjMzk7cyB3aGVyZSBTeXprYWxsZXImIzM5O3MgZmF1bHQgaW5qZWN0aW9uIGFuZCB0aGUgZHVtbXkgZmlsZXMgY29tZSBpbiBoYW5keS4gSWYgdGhlIGRyaXZlciBhY3R1YWxseSBwYXJzZXMgdGhlIGZpcm13YXJlIGFuZCBpbml0aWFsaXplcyB0aGUgZGV2aWNlLCBpdCBtaWdodCByZWdpc3RlciB0aGUgd2lwaHkuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBpZiBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAgaXMgdGhlIGJlc3QgZnVuY3Rpb24gdG8gZm9jdXMgb24gaW4gdGhpcyBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2NmZzgwMjExX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz0yMzYzPXN0YXRpYyBzMzJcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjIzNjQ6YnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTIzNjUtXHRcdCAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz01OTU3PXN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfb3BzIGJyY21mX2NmZzgwMjExX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01OTc0LVx0LnNldF9wb3dlcl9tZ210ID0gYnJjbWZfY2ZnODAyMTFfc2V0X3Bvd2VyX21nbXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo1OTc1Olx0LmNvbm5lY3QgPSBicmNtZl9jZmc4MDIxMV9jb25uZWN0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTk3Ni1cdC5kaXNjb25uZWN0ID0gYnJjbWZfY2ZnODAyMTFfZGlzY29ubmVjdCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz02MTQ2PXN0YXRpYyB2b2lkIGJyY21mX2NsZWFyX2Fzc29jX2llcyhzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjE0Ny17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo2MTQ4Olx0c3RydWN0IGJyY21mX2NmZzgwMjExX2Nvbm5lY3RfaW5mbyAqY29ubl9pbmZvID0gY2ZnX3RvX2Nvbm4oY2ZnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTYxNDktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjI5Nj1zdGF0aWMgczMyIGJyY21mX2dldF9hc3NvY19pZXMoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MzAwLVx0c3RydWN0IGJyY21mX2NmZzgwMjExX2Fzc29jX2llbGVuX2xlICphc3NvY19pbmZvO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjMwMTpcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MzAyLVx0c3RydWN0IGJyY21mX2NmZzgwMjExX2VkY2ZfYWNwYXJhbSBlZGNmX2FjcGFyYW1faW5mb1tFRENGX0FDX0NPVU5UXTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz02Mzc4PWJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MzgzLVx0c3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUgKnByb2ZpbGUgPSBcdTAwMjZpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo2Mzg0Olx0c3RydWN0IGJyY21mX2NmZzgwMjExX2Nvbm5lY3RfaW5mbyAqY29ubl9pbmZvID0gY2ZnX3RvX2Nvbm4oY2ZnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTYzODUtXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gY2ZnX3RvX3dpcGh5KGNmZyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjQ1MT1icmNtZl9ic3NfY29ubmVjdF9kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjQ1Ni1cdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlICpwcm9maWxlID0gXHUwMDI2aWZwLVx1MDAzZXZpZi1cdTAwM2Vwcm9maWxlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjQ1NzpcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NDU4LVx0c3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcmVzcF9wYXJhbXMgY29ubl9wYXJhbXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMzYKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA0MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24gYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBhZmZlY3Rpbmcgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAsIGBicmNtZl9jb25maWd1cmVfd3BhaWVgLCBgYnJjbWZfcDJwX2lzX2RwcF9wdWJfYWN0aW9uYCwgYW5kIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBtb2RpZmljYXRpb25zLCBzbyBJJiMzOTttIGRlZmluaXRlbHkgZ29pbmcgdG8gZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBwdWxsIG91dCB0aGUgc3BlY2lmaWMgc3ltYm9scyB0byBmb2N1cyBvbi4gTG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290OiBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAsIGBicmNtZl9jb25maWd1cmVfd3BhaWVgLCBgYnJjbWZfcDJwX3NlbmRfYWN0aW9uX2ZyYW1lYCwgYGJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvbmAuIEFkZGl0aW9uYWxseSwgdGhlcmUgYXJlIGEgZmV3IG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBub3RlOiBgYnJjbWZfcDJwX2lzX3B1Yl9hY3Rpb25gLCBgYnJjbWZfcDJwX2lzX3AycF9hY3Rpb25gLCBhbmQgYGJyY21mX3AycF9hYm9ydF9hY3Rpb25fZnJhbWVgLgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBgQlJDTUZNQUNgLCBgQlJDTUZNQUNfVVNCYCwgYEJSQ01GTUFDX1BDSUVgLCBhbmQgYEJSQ01GTUFDX1NESU9gLiBEbyBJIG5lZWQgYWxsIG9mIHRoZW0/IE5vLCB0aGF0JiMzOTtzIGluZWZmaWNpZW50LiBgQlJDTUZNQUNfVVNCYCBpcyB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIsIHNvIGxldCYjMzk7cyBqdXN0IHN0aWNrIHdpdGggYEJSQ01GTUFDYCBhbmQgYEJSQ01GTUFDX1VTQmAgZm9yIG5vdy4KCkp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIHNlZSBhYm91dCBgV0xBTl9BS01fU1VJVEVfV0ZBX0RQUGAuIE5vcGUsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGUsIHNvIHRoYXQmIzM5O3MgZ29vZC4gQWxyaWdodCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBgYnJjbWZtYWMvS2NvbmZpZ2AgZmlsZSBvbmUgbW9yZSB0aW1lLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUkNNRk1BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE6Y29uZmlnIEJSQ01GTUFDXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTE6Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEyLVx0Ym9vbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNDpjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNS1cdGJvb2xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTc6Y29uZmlnIEJSQ01GTUFDX1NESU9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjI5OmNvbmZpZyBCUkNNRk1BQ19VU0JcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtVU0IgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTM5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6NDA6Y29uZmlnIEJSQ01GTUFDX1BDSUVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MzcKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBQMlAgSW1wbGVtZW50YXRpb24gd2l0aGluIEJSQ01GTUFDKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBtYWtlIHN1cmUgdGhhdCBJJiMzOTttIGNvdmVyaW5nIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBQMlAgd2l0aGluIHRoZSBCUkNNRk1BQyBmcmFtZXdvcmssIGFuZCB0aGF0IGluY2x1ZGVzIGJvdGggYEJSQ01GTUFDYCBhbmQgYEJSQ01GTUFDX1VTQmAgYnVpbGRzLiBJIGtub3cgdGhvc2UgYXJlIGtleSBjb21wb25lbnRzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBmdW5jdGlvbiBjYWxscy4gSSB3YW50IHRvIHNwZWNpZmljYWxseSBleGFtaW5lIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgIGFuZCBgYnJjbWZfcDJwX2Fib3J0X2FjdGlvbl9mcmFtZWAuIFRoZXkmIzM5O3JlIGxpa2VseSBpbiBgcDJwLmNgLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGVpciBpbXBsZW1lbnRhdGlvbiBhbmQgaW50ZXJhY3Rpb25zLgoKTm93LCBhIGNyaXRpY2FsIHBvaW50OiBpcyB0aGVyZSBhIHNwZWNpZmljLCBkZWRpY2F0ZWQgY29uZmlndXJhdGlvbiBmbGFnIG9yIHNldHRpbmcgd2l0aGluIGJyY21mbWFjIHRoYXQgZ292ZXJucyBQMlAgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUmIzM5O3MgYSBkaXN0aW5jdCBlbmFibGUvZGlzYWJsZSBzd2l0Y2gsIG9yIG1heWJlIGEgc2V0IG9mIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSBiZWhhdmlvci4gVG8gY2xhcmlmeSB0aGUgYnVpbGQgYW5kIGl0cyBzZXR0aW5ncywgbGV0JiMzOTtzIGRvIGEgcXVpY2sgYGdyZXBgIGZvciBgcDJwLmNgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZWAgZmlsZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGNvbXBvbmVudCBpcyBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGFueSBwb3RlbnRpYWwgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cDJwXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGU9MTM9YnJjbWZtYWMtb2JqcyAmIzQzOz0gXFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtMTctXHRcdGZ3ZWgubyBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlOjE4Olx0XHRwMnAubyBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTE5LVx0XHRwcm90by5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzU4CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDY1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIERyaXZlciBDaGFuZ2VzKioKCk9rYXksIHNvIHRoZSBgQlJDTUZNQUNgIGRyaXZlciBoYXMgYmVlbiB1cGRhdGVkLCBhbmQgdGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkIG9uIGFkZGluZyBzdXBwb3J0IGZvciBEUFAgYXV0aGVudGljYXRpb24uIFRoaXMgaXMgZ29pbmcgdG8gaW52b2x2ZSBjaGFuZ2VzIHRvIHRoZSBmaXJtd2FyZSBzdXBwbGljYW50IGxvZ2ljIHdpdGhpbiB0aGUgZHJpdmVyLiBTaW5jZSBgQlJDTUZNQUNgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBtb3N0IGxpa2VseSB0byBiZSBpbXBhY3RlZCBhbmQsIHRoZXJlZm9yZSwgcG90ZW50aWFsIHRhcmdldHMgZm9yIGZ1enppbmcuCgpNeSBpbml0aWFsIHJldmlldyBzdWdnZXN0cyBhIGZldyBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsOiBgYnJjbWZfc2V0X2tleV9tZ210YCwgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLCBgYnJjbWZfY29uZmlndXJlX3dwYWllYCwgYGJyY21mX3AycF9pc19wdWJfYWN0aW9uYCwgYGJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvbmAsIGBicmNtZl9wMnBfaXNfcDJwX2FjdGlvbmAsIGBicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lYCwgYW5kIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgLiBJJiMzOTtsbCBza2ltIG92ZXIgYGJyY21mX3ZhbGlkX2RwcF9zdWl0ZWAgc2luY2UgaXQmIzM5O3MgcHJvYmFibHkgc2ltcGxlLCBidXQgdGhlIG90aGVycyBsb29rIHByb21pc2luZy4gYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgIGFuZCBgYnJjbWZfY29uZmlndXJlX3dwYWllYCBzdGFuZCBvdXQgYXMgaW1wb3J0YW50LiBgYnJjbWZfcDJwX3NlbmRfYWN0aW9uX2ZyYW1lYCBpcyBhbHNvIGNyaXRpY2FsLgoKSSYjMzk7bGwgZG91YmxlLWNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEFoLCBgQ0ZHODAyMTFgIGlzIHJlcXVpcmVkIGZvciBgQlJDTUZNQUNgLCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIGluY2x1ZGUgdGhhdCBpbiBteSBjb25maWd1cmF0aW9uLiBBIHF1aWNrIGNoZWNrIG9mIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCBpbiBgY2ZnODAyMTEuY2AgcmV2ZWFscyBpdCYjMzk7cyBhIGNhbGxiYWNrIGZvciB0aGUgYGNmZzgwMjExX29wcy5jb25uZWN0YCBmdW5jdGlvbiwgYW5kIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgIGdldHMgY2FsbGVkIGZyb20gYGJyY21mX2NmZzgwMjExX21nbXRfdHhgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCB3aGljaCBtZWFucyBJIGNhbiBkaXJlY3RseSB0YXJnZXQgdGhlbSB3aXRoIGZ1enppbmcuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTt2ZSBjb21waWxlZCB0aGUgZm9sbG93aW5nIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLCBhbmQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9uYWxpdHkgYXJvdW5kIERQUCBhbmQgbW9kaWZpZXMgZXhpc3RpbmcgUDJQIGxvZ2ljIGluIGEgZHJpdmVyIHRoYXQmIzM5O3MgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBhbmQgVVNCLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4KCkhlcmUgaXMgdGhlIGRhdGE6CgpgV29ydGhGdXp6aW5nOiB0cnVlYAoKYEZvY3VzU3ltYm9sczpgCi0gYGJyY21mX3NldF9rZXlfbWdtdGAKLSBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAKLSBgYnJjbWZfY29uZmlndXJlX3dwYWllYAotIGBicmNtZl9wMnBfaXNfcHViX2FjdGlvbmAKLSBgYnJjbWZfcDJwX2lzX2RwcF9wdWJfYWN0aW9uYAotIGBicmNtZl9wMnBfaXNfcDJwX2FjdGlvbmAKLSBgYnJjbWZfcDJwX2Fib3J0X2FjdGlvbl9mcmFtZWAKLSBgYnJjbWZfcDJwX3NlbmRfYWN0aW9uX2ZyYW1lYAoKYEVuYWJsZUNvbmZpZ3M6YAotIGBCUkNNRk1BQ2AKLSBgQlJDTUZNQUNfVVNCYAotIGBDRkc4MDIxMWAKCmBSZWFzb25pbmc6YCBUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEUFAgYXV0aGVudGljYXRpb24gYW5kIG1vZGlmaWVzIHRoZSBmaXJtd2FyZSBzdXBwbGljYW50IGxvZ2ljIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChicmNtZm1hYykuIEl0IGFsc28gdXBkYXRlcyBQMlAgYWN0aW9uIGZyYW1lIGhhbmRsaW5nIHRvIHN1cHBvcnQgRFBQIHB1YmxpYyBhY3Rpb24gZnJhbWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBkcml2ZXImIzM5O3MgY2ZnODAyMTEgY2FsbGJhY2tzIGFuZCBQMlAgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBVU0IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyY21mX3NldF9rZXlfbWdtdCYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9jb25uZWN0JiMzNDssCiAgICAmIzM0O2JyY21mX2NvbmZpZ3VyZV93cGFpZSYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfaXNfcHViX2FjdGlvbiYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24mIzM0OywKICAgICYjMzQ7YnJjbWZfcDJwX2lzX3AycF9hY3Rpb24mIzM0OywKICAgICYjMzQ7YnJjbWZfcDJwX2Fib3J0X2FjdGlvbl9mcmFtZSYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEUFAgYXV0aGVudGljYXRpb24gYW5kIG1vZGlmaWVzIHRoZSBmaXJtd2FyZSBzdXBwbGljYW50IGxvZ2ljIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChicmNtZm1hYykuIEl0IGFsc28gdXBkYXRlcyBQMlAgYWN0aW9uIGZyYW1lIGhhbmRsaW5nIHRvIHN1cHBvcnQgRFBQIHB1YmxpYyBhY3Rpb24gZnJhbWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBkcml2ZXImIzM5O3MgY2ZnODAyMTEgY2FsbGJhY2tzIGFuZCBQMlAgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJDTUZNQUMmIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfVVNCJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJjbWZfc2V0X2tleV9tZ210JiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnJjbWZfY29uZmlndXJlX3dwYWllJiMzNDssCiAgICAmIzM0O2JyY21mX3AycF9pc19wdWJfYWN0aW9uJiMzNDssCiAgICAmIzM0O2JyY21mX3AycF9pc19kcHBfcHViX2FjdGlvbiYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfaXNfcDJwX2FjdGlvbiYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lJiMzNDssCiAgICAmIzM0O2JyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIERQUCBhdXRoZW50aWNhdGlvbiBhbmQgbW9kaWZpZXMgdGhlIGZpcm13YXJlIHN1cHBsaWNhbnQgbG9naWMgaW4gdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKS4gSXQgYWxzbyB1cGRhdGVzIFAyUCBhY3Rpb24gZnJhbWUgaGFuZGxpbmcgdG8gc3VwcG9ydCBEUFAgcHVibGljIGFjdGlvbiBmcmFtZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGRyaXZlciYjMzk7cyBjZmc4MDIxMSBjYWxsYmFja3MgYW5kIFAyUCBsb2dpYywgd2hpY2ggY2FuIGJlIHJlYWNoZWQgdmlhIG5ldGxpbmsgY29tbWFuZHMgYW5kIFVTQiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MDAuNDcyMTE1NTYxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0NjgzNjYwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicmNtZl9zZXRfa2V5X21nbXRcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2Nvbm5lY3RcIixcbiAgICBcImJyY21mX2NvbmZpZ3VyZV93cGFpZVwiLFxuICAgIFwiYnJjbWZfcDJwX2lzX3B1Yl9hY3Rpb25cIixcbiAgICBcImJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvblwiLFxuICAgIFwiYnJjbWZfcDJwX2lzX3AycF9hY3Rpb25cIixcbiAgICBcImJyY21mX3AycF9hYm9ydF9hY3Rpb25fZnJhbWVcIixcbiAgICBcImJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRFBQIGF1dGhlbnRpY2F0aW9uIGFuZCBtb2RpZmllcyB0aGUgZmlybXdhcmUgc3VwcGxpY2FudCBsb2dpYyBpbiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlciAoYnJjbWZtYWMpLiBJdCBhbHNvIHVwZGF0ZXMgUDJQIGFjdGlvbiBmcmFtZSBoYW5kbGluZyB0byBzdXBwb3J0IERQUCBwdWJsaWMgYWN0aW9uIGZyYW1lcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZHJpdmVyJ3MgY2ZnODAyMTEgY2FsbGJhY2tzIGFuZCBQMlAgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBVU0IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MDAuNDcyMTIzMDkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTkxMjExNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2NmNiYjc3ZjI4OWY1ZDZmNzY4NWYxNTEzN2JmNmFiNjJlZDM5YWUyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDggMTY6MDc6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xcbmluZGV4IDRiNzA4NDVlMWEyNjQzLi5kNjFjM2UwM2ExMDZhNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXFxuQEAgLTgsNiArOCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2NmZzgwMjExLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbkBAIC0yMTU0LDYgKzIxNTUsOSBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxcbiBcXHRcXHRcXHR2YWwgPSBXUEEyX0FVVEhfUFNLIHwgV1BBMl9BVVRIX0ZUO1xcbiBcXHRcXHRcXHRwcm9maWxlLVxcdTAwM2Vpc19mdCA9IHRydWU7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA6XFxuK1xcdFxcdFxcdHZhbCA9IFdGQV9BVVRIX0RQUDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJpbnZhbGlkIGFrbSBzdWl0ZSAoJWQpXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgc21lLVxcdTAwM2VjcnlwdG8uYWttX3N1aXRlc1swXSk7XFxuQEAgLTI0NjYsNDMgKzI0NzAsNTAgQEAgYnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4gXFx0XFx0Z290byBkb25lO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc21lLVxcdTAwM2VjcnlwdG8ucHNrIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcXG4tXFx0XFx0aWYgKFdBUk5fT04ocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkpIHtcXG4tXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0Z290byBkb25lO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGJyY21mX2RiZyhJTkZPLCBcXFwidXNpbmcgUFNLIG9mZmxvYWRcXFxcblxcXCIpO1xcbi1cXHRcXHRwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSztcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpIHtcXG4tXFx0XFx0LyogZW5hYmxlIGZpcm13YXJlIHN1cHBsaWNhbnQgZm9yIHRoaXMgaW50ZXJmYWNlICovXFxuLVxcdFxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9pbnRfc2V0KGlmcCwgXFxcInN1cF93cGFcXFwiLCAxKTtcXG4tXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImZhaWxlZCB0byBlbmFibGUgZncgc3VwcGxpY2FudFxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdGdvdG8gZG9uZTtcXG4rXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfRldTVVApKSB7XFxuK1xcdFxcdHUzMiBha20gPSBzbWUtXFx1MDAzZWNyeXB0by5uX2FrbV9zdWl0ZXMgPyBzbWUtXFx1MDAzZWNyeXB0by5ha21fc3VpdGVzWzBdIDogMDtcXG4rXFx0XFx0Ym9vbCBpc19zYWVfYWttID0gYWttID09IFdMQU5fQUtNX1NVSVRFX1NBRSB8fFxcbitcXHRcXHRcXHRha20gPT0gV0xBTl9BS01fU1VJVEVfRlRfT1ZFUl9TQUU7XFxuK1xcbitcXHRcXHRpZiAoc21lLVxcdTAwM2VjcnlwdG8ucHNrIFxcdTAwMjZcXHUwMDI2ICFpc19zYWVfYWttIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcXG4rXFx0XFx0XFx0aWYgKFdBUk5fT04ocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwICE9XFxuK1xcdFxcdFxcdFxcdCAgICBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpKSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRicmNtZl9kYmcoSU5GTywgXFxcInVzaW5nIFBTSyBvZmZsb2FkXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XFxuIFxcdFxcdH1cXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSylcXG4tXFx0XFx0ZXJyID0gYnJjbWZfc2V0X3BtayhpZnAsIHNtZS1cXHUwMDNlY3J5cHRvLnBzayxcXG4tXFx0XFx0XFx0XFx0ICAgIEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pO1xcbi1cXHRlbHNlIGlmIChwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcXG4tXFx0XFx0LyogY2xlYW4gdXAgdXNlci1zcGFjZSBSU05FICovXFxuLVxcdFxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJ3cGFpZVxcXCIsIE5VTEwsIDApO1xcbi1cXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJmYWlsZWQgdG8gY2xlYW4gdXAgdXNlci1zcGFjZSBSU05FXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0Z290byBkb25lO1xcbitcXHRcXHRpZiAocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkge1xcbitcXHRcXHRcXHQvKiBlbmFibGUgZmlybXdhcmUgc3VwcGxpY2FudCBmb3IgdGhpcyBpbnRlcmZhY2UgKi9cXG4rXFx0XFx0XFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2ludF9zZXQoaWZwLCBcXFwic3VwX3dwYVxcXCIsIDEpO1xcbitcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiZmFpbGVkIHRvIGVuYWJsZSBmdyBzdXBwbGljYW50XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0Z290byBkb25lO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9pbnRfc2V0KGlmcCwgXFxcInN1cF93cGFcXFwiLCAwKTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRlcnIgPSBicmNtZl9md3ZpZF9zZXRfc2FlX3Bhc3N3b3JkKGlmcCwgXFx1MDAyNnNtZS1cXHUwMDNlY3J5cHRvKTtcXG4tXFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgc21lLVxcdTAwM2VjcnlwdG8ucHNrKVxcbitcXHRcXHRpZiAocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLKVxcbiBcXHRcXHRcXHRlcnIgPSBicmNtZl9zZXRfcG1rKGlmcCwgc21lLVxcdTAwM2VjcnlwdG8ucHNrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgQlJDTUZfV1NFQ19NQVhfUFNLX0xFTik7XFxuK1xcdFxcdGVsc2UgaWYgKHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgc21lLVxcdTAwM2VjcnlwdG8uc2FlX3B3ZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9TQUUpKSB7XFxuK1xcdFxcdFxcdC8qIGNsZWFuIHVwIHVzZXItc3BhY2UgUlNORSAqL1xcbitcXHRcXHRcXHRpZiAoYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcIndwYWllXFxcIiwgTlVMTCwgMCkpIHtcXG4rXFx0XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImZhaWxlZCB0byBjbGVhbiB1cCB1c2VyLXNwYWNlIFJTTkVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0ZXJyID0gYnJjbWZfZnd2aWRfc2V0X3NhZV9wYXNzd29yZChpZnAsIFxcdTAwMjZzbWUtXFx1MDAzZWNyeXB0byk7XFxuK1xcdFxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHNtZS1cXHUwMDNlY3J5cHRvLnBzaylcXG4rXFx0XFx0XFx0XFx0ZXJyID0gYnJjbWZfc2V0X3BtayhpZnAsIHNtZS1cXHUwMDNlY3J5cHRvLnBzayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZG9uZTtcXG4gXFx0fVxcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIGRvbmU7XFxuLVxcbiBcXHQvKiBKb2luIHdpdGggc3BlY2lmaWMgQlNTSUQgYW5kIGNhY2hlZCBTU0lEXFxuIFxcdCAqIElmIFNTSUQgaXMgemVybyBqb2luIGJhc2VkIG9uIEJTU0lEIG9ubHlcXG4gXFx0ICovXFxuQEAgLTQ1MTksNiArNDUzMCwxMSBAQCBzdGF0aWMgYm9vbCBicmNtZl92YWxpZF93cGFfb3VpKHU4ICpvdWksIGJvb2wgaXNfcnNuX2llKVxcbiBcXHRyZXR1cm4gKG1lbWNtcChvdWksIFdQQV9PVUksIFRMVl9PVUlfTEVOKSA9PSAwKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgYnJjbWZfdmFsaWRfZHBwX3N1aXRlKHU4ICpvdWkpXFxuK3tcXG4rXFx0cmV0dXJuIGdldF91bmFsaWduZWRfYmUzMihvdWkpID09IFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA7XFxuK31cXG4rXFxuIHN0YXRpYyBzMzJcXG4gYnJjbWZfY29uZmlndXJlX3dwYWllKHN0cnVjdCBicmNtZl9pZiAqaWZwLFxcbiBcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnJjbWZfdnNfdGx2ICp3cGFfaWUsXFxuQEAgLTQ2MzIsNDIgKzQ2NDgsNDcgQEAgYnJjbWZfY29uZmlndXJlX3dwYWllKHN0cnVjdCBicmNtZl9pZiAqaWZwLFxcbiBcXHRcXHRnb3RvIGV4aXQ7XFxuIFxcdH1cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4tXFx0XFx0aWYgKCFicmNtZl92YWxpZF93cGFfb3VpKFxcdTAwMjZkYXRhW29mZnNldF0sIGlzX3Jzbl9pZSkpIHtcXG4rXFx0XFx0aWYgKGJyY21mX3ZhbGlkX2RwcF9zdWl0ZShcXHUwMDI2ZGF0YVtvZmZzZXRdKSkge1xcbitcXHRcXHRcXHR3cGFfYXV0aCB8PSBXRkFfQVVUSF9EUFA7XFxuK1xcdFxcdFxcdG9mZnNldCArPSBUTFZfT1VJX0xFTjtcXG4rXFx0XFx0fSBlbHNlIGlmIChicmNtZl92YWxpZF93cGFfb3VpKFxcdTAwMjZkYXRhW29mZnNldF0sIGlzX3Jzbl9pZSkpIHtcXG4rXFx0XFx0XFx0b2Zmc2V0ICs9IFRMVl9PVUlfTEVOO1xcbitcXHRcXHRcXHRzd2l0Y2ggKGRhdGFbb2Zmc2V0XSkge1xcbitcXHRcXHRcXHRjYXNlIFJTTl9BS01fTk9ORTpcXG4rXFx0XFx0XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiUlNOX0FLTV9OT05FXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0d3BhX2F1dGggfD0gV1BBX0FVVEhfTk9ORTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGNhc2UgUlNOX0FLTV9VTlNQRUNJRklFRDpcXG4rXFx0XFx0XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiUlNOX0FLTV9VTlNQRUNJRklFRFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdGlzX3Jzbl9pZSA/XFxuK1xcdFxcdFxcdFxcdFxcdCh3cGFfYXV0aCB8PSBXUEEyX0FVVEhfVU5TUEVDSUZJRUQpIDpcXG4rXFx0XFx0XFx0XFx0XFx0KHdwYV9hdXRoIHw9IFdQQV9BVVRIX1VOU1BFQ0lGSUVEKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGNhc2UgUlNOX0FLTV9QU0s6XFxuK1xcdFxcdFxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcIlJTTl9BS01fUFNLXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0aXNfcnNuX2llID8gKHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0spIDpcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICh3cGFfYXV0aCB8PSBXUEFfQVVUSF9QU0spO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0Y2FzZSBSU05fQUtNX1NIQTI1Nl9QU0s6XFxuK1xcdFxcdFxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcIlJTTl9BS01fTUZQX1BTS1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0tfU0hBMjU2O1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0Y2FzZSBSU05fQUtNX1NIQTI1Nl8xWDpcXG4rXFx0XFx0XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiUlNOX0FLTV9NRlBfMVhcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHR3cGFfYXV0aCB8PSBXUEEyX0FVVEhfMVhfU0hBMjU2O1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0Y2FzZSBSU05fQUtNX1NBRTpcXG4rXFx0XFx0XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiUlNOX0FLTV9TQUVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHR3cGFfYXV0aCB8PSBXUEEzX0FVVEhfU0FFX1BTSztcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJJbnZhbGlkIGtleSBtZ210IGluZm9cXFxcblxcXCIpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIFxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJpbnZhbGlkIE9VSVxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRvZmZzZXQgKz0gVExWX09VSV9MRU47XFxuLVxcdFxcdHN3aXRjaCAoZGF0YVtvZmZzZXRdKSB7XFxuLVxcdFxcdGNhc2UgUlNOX0FLTV9OT05FOlxcbi1cXHRcXHRcXHRicmNtZl9kYmcoVFJBQ0UsIFxcXCJSU05fQUtNX05PTkVcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHR3cGFfYXV0aCB8PSBXUEFfQVVUSF9OT05FO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBSU05fQUtNX1VOU1BFQ0lGSUVEOlxcbi1cXHRcXHRcXHRicmNtZl9kYmcoVFJBQ0UsIFxcXCJSU05fQUtNX1VOU1BFQ0lGSUVEXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0aXNfcnNuX2llID8gKHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9VTlNQRUNJRklFRCkgOlxcbi1cXHRcXHRcXHRcXHQgICAgKHdwYV9hdXRoIHw9IFdQQV9BVVRIX1VOU1BFQ0lGSUVEKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgUlNOX0FLTV9QU0s6XFxuLVxcdFxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcIlJTTl9BS01fUFNLXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0aXNfcnNuX2llID8gKHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0spIDpcXG4tXFx0XFx0XFx0XFx0ICAgICh3cGFfYXV0aCB8PSBXUEFfQVVUSF9QU0spO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBSU05fQUtNX1NIQTI1Nl9QU0s6XFxuLVxcdFxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcIlJTTl9BS01fTUZQX1BTS1xcXFxuXFxcIik7XFxuLVxcdFxcdFxcdHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0tfU0hBMjU2O1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBSU05fQUtNX1NIQTI1Nl8xWDpcXG4tXFx0XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiUlNOX0FLTV9NRlBfMVhcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHR3cGFfYXV0aCB8PSBXUEEyX0FVVEhfMVhfU0hBMjU2O1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBSU05fQUtNX1NBRTpcXG4tXFx0XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiUlNOX0FLTV9TQUVcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHR3cGFfYXV0aCB8PSBXUEEzX0FVVEhfU0FFX1BTSztcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJJbnZhbGlkIGtleSBtZ210IGluZm9cXFxcblxcXCIpO1xcbi1cXHRcXHR9XFxuIFxcdFxcdG9mZnNldCsrO1xcbiBcXHR9XFxuIFxcbkBAIC00Njg3LDEwICs0NzA4LDEyIEBAIGJyY21mX2NvbmZpZ3VyZV93cGFpZShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcXG4gXFx0XFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdFxcdGlmICghKHdwYV9hdXRoIFxcdTAwMjYgKFdQQTJfQVVUSF9QU0tfU0hBMjU2IHxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBXUEEyX0FVVEhfMVhfU0hBMjU2IHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBXRkFfQVVUSF9EUFAgfFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIFdQQTNfQVVUSF9TQUVfUFNLKSkpIHtcXG4gXFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBleGl0O1xcbiBcXHRcXHRcXHRcXHR9XFxuK1xcbiBcXHRcXHRcXHRcXHQvKiBGaXJtd2FyZSBoYXMgcmVxdWlyZW1lbnQgdGhhdCBXUEEyX0FVVEhfUFNLL1xcbiBcXHRcXHRcXHRcXHQgKiBXUEEyX0FVVEhfVU5TUEVDSUZJRUQgYmUgc2V0LCBpZiBTSEEyNTYgT1VJXFxuIFxcdFxcdFxcdFxcdCAqIGlzIHRvIGJlIGluY2x1ZGVkIGluIHRoZSByc24gaWUuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuY1xcbmluZGV4IDZlMGM5MGY0NzE4YjU4Li4yYzFmNTJlZDUxMzgwMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvY2ZnODAyMTEuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NicmNtdV93aWZpLmhcXHUwMDNlXFxuQEAgLTQ0LDkgKzQ1LDYgQEBcXG4gXFxuICNkZWZpbmUgQlJDTUZfU0NCX1RJTUVPVVRfVkFMVUVcXHQyMFxcbiBcXG4tI2RlZmluZSBQMlBfVkVSXFx0XFx0XFx0OVxcdC8qIFAyUCB2ZXJzaW9uOiA5PVdpRmkgUDJQIHYxLjAgKi9cXG4tI2RlZmluZSBQMlBfUFVCX0FGX0NBVEVHT1JZXFx0MHgwNFxcbi0jZGVmaW5lIFAyUF9QVUJfQUZfQUNUSU9OXFx0MHgwOVxcbiAjZGVmaW5lIFAyUF9BRl9DQVRFR09SWVxcdFxcdDB4N2ZcXG4gI2RlZmluZSBQMlBfT1VJXFx0XFx0XFx0XFxcIlxcXFx4NTBcXFxceDZGXFxcXHg5QVxcXCJcXHQvKiBQMlAgT1VJICovXFxuICNkZWZpbmUgUDJQX09VSV9MRU5cXHRcXHQzXFx0XFx0LyogUDJQIE9VSSBsZW5ndGggKi9cXG5AQCAtMTQzLDEwICsxNDEsMTAgQEAgc3RydWN0IGJyY21mX3AycF9zY2FuX2xlIHtcXG4gLyoqXFxuICAqIHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSAtIFdpRmkgUDJQIFB1YmxpYyBBY3Rpb24gRnJhbWVcXG4gICpcXG4tICogQGNhdGVnb3J5OiBQMlBfUFVCX0FGX0NBVEVHT1JZXFxuLSAqIEBhY3Rpb246IFAyUF9QVUJfQUZfQUNUSU9OXFxuKyAqIEBjYXRlZ29yeTogV0xBTl9DQVRFR09SWV9QVUJMSUNcXG4rICogQGFjdGlvbjogV0xBTl9QVUJfQUNUSU9OX1ZFTkRPUl9TUEVDSUZJQ1xcbiAgKiBAb3VpOiBQMlBfT1VJXFxuLSAqIEBvdWlfdHlwZTogT1VJIHR5cGUgLSBQMlBfVkVSXFxuKyAqIEBvdWlfdHlwZTogT1VJIHR5cGUgLSBXTEFOX09VSV9UWVBFX1dGQV9QMlBcXG4gICogQHN1YnR5cGU6IE9VSSBzdWJ0eXBlIC0gUDJQX1RZUEVfKlxcbiAgKiBAZGlhbG9nX3Rva2VuOiBub256ZXJvLCBpZGVudGlmaWVzIHJlcS9yc3AgdHJhbnNhY3Rpb25cXG4gICogQGVsdHM6IFZhcmlhYmxlIGxlbmd0aCBpbmZvcm1hdGlvbiBlbGVtZW50cy5cXG5AQCAtMTY2LDcgKzE2NCw3IEBAIHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSB7XFxuICAqXFxuICAqIEBjYXRlZ29yeTogUDJQX0FGX0NBVEVHT1JZXFxuICAqIEBvdWk6IE9VSSAtIFAyUF9PVUlcXG4tICogQHR5cGU6IE9VSSBUeXBlIC0gUDJQX1ZFUlxcbisgKiBAdHlwZTogT1VJIFR5cGUgLSBXTEFOX09VSV9UWVBFX1dGQV9QMlBcXG4gICogQHN1YnR5cGU6IE9VSSBTdWJ0eXBlIC0gUDJQX0FGXypcXG4gICogQGRpYWxvZ190b2tlbjogbm9uemVybywgaWRlbnRpZmllcyByZXEvcmVzcCB0cmFuYWN0aW9uXFxuICAqIEBlbHRzOiBWYXJpYWJsZSBsZW5ndGggaW5mb3JtYXRpb24gZWxlbWVudHMuXFxuQEAgLTIyOCwxMCArMjI2LDM4IEBAIHN0YXRpYyBib29sIGJyY21mX3AycF9pc19wdWJfYWN0aW9uKHZvaWQgKmZyYW1lLCB1MzIgZnJhbWVfbGVuKVxcbiBcXHRpZiAoZnJhbWVfbGVuIFxcdTAwM2Mgc2l6ZW9mKCpwYWN0X2ZybSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGlmIChwYWN0X2ZybS1cXHUwMDNlY2F0ZWdvcnkgPT0gUDJQX1BVQl9BRl9DQVRFR09SWSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgcGFjdF9mcm0tXFx1MDAzZWFjdGlvbiA9PSBQMlBfUFVCX0FGX0FDVElPTiBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgcGFjdF9mcm0tXFx1MDAzZW91aV90eXBlID09IFAyUF9WRVIgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIG1lbWNtcChwYWN0X2ZybS1cXHUwMDNlb3VpLCBQMlBfT1VJLCBQMlBfT1VJX0xFTikgPT0gMClcXG4rXFx0aWYgKHBhY3RfZnJtLVxcdTAwM2VjYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcGFjdF9mcm0tXFx1MDAzZWFjdGlvbiA9PSBXTEFOX1BVQl9BQ1RJT05fVkVORE9SX1NQRUNJRklDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwYWN0X2ZybS1cXHUwMDNlb3VpX3R5cGUgPT0gV0xBTl9PVUlfVFlQRV9XRkFfUDJQIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBnZXRfdW5hbGlnbmVkX2JlMjQocGFjdF9mcm0tXFx1MDAzZW91aSkgPT0gV0xBTl9PVUlfV0ZBKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvbigpIC0gdHJ1ZSBpZiBkcHAgcHVibGljIHR5cGUgZnJhbWUuXFxuKyAqXFxuKyAqIEBmcmFtZTogYWN0aW9uIGZyYW1lIGRhdGEuXFxuKyAqIEBmcmFtZV9sZW46IGxlbmd0aCBvZiBhY3Rpb24gZnJhbWUgZGF0YS5cXG4rICpcXG4rICogRGV0ZXJtaW5lIGlmIGFjdGlvbiBmcmFtZSBpcyBkcHAgcHVibGljIGFjdGlvbiB0eXBlXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24odm9pZCAqZnJhbWUsIHUzMiBmcmFtZV9sZW4pXFxuK3tcXG4rXFx0c3RydWN0IGJyY21mX3AycF9wdWJfYWN0X2ZyYW1lICpwYWN0X2ZybTtcXG4rXFxuK1xcdGlmICghZnJhbWUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHBhY3RfZnJtID0gKHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSAqKWZyYW1lO1xcbitcXHRpZiAoZnJhbWVfbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSkgLSAxKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocGFjdF9mcm0tXFx1MDAzZWNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfUFVCTElDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwYWN0X2ZybS1cXHUwMDNlYWN0aW9uID09IFdMQU5fUFVCX0FDVElPTl9WRU5ET1JfU1BFQ0lGSUMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHBhY3RfZnJtLVxcdTAwM2VvdWlfdHlwZSA9PSBXTEFOX09VSV9UWVBFX1dGQV9EUFAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGdldF91bmFsaWduZWRfYmUyNChwYWN0X2ZybS1cXHUwMDNlb3VpKSA9PSBXTEFOX09VSV9XRkEpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbkBAIC0yNTcsNyArMjgzLDcgQEAgc3RhdGljIGJvb2wgYnJjbWZfcDJwX2lzX3AycF9hY3Rpb24odm9pZCAqZnJhbWUsIHUzMiBmcmFtZV9sZW4pXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGlmIChhY3RfZnJtLVxcdTAwM2VjYXRlZ29yeSA9PSBQMlBfQUZfQ0FURUdPUlkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGFjdF9mcm0tXFx1MDAzZXR5cGUgID09IFAyUF9WRVIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGFjdF9mcm0tXFx1MDAzZXR5cGUgID09IFdMQU5fT1VJX1RZUEVfV0ZBX1AyUCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbWVtY21wKGFjdF9mcm0tXFx1MDAzZW91aSwgUDJQX09VSSwgUDJQX09VSV9MRU4pID09IDApXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG5AQCAtMTI4MSw2ICsxMzA3LDkgQEAgc3RhdGljIHMzMiBicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcpXFxuIFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcIkVudGVyXFxcXG5cXFwiKTtcXG4gXFxuIFxcdHZpZiA9IHAycC1cXHUwMDNlYnNzX2lkeFtQMlBBUElfQlNTQ0ZHX0RFVklDRV0udmlmO1xcbitcXHRpZiAoIXZpZilcXG4rXFx0XFx0dmlmID0gcDJwLVxcdTAwM2Vic3NfaWR4W1AyUEFQSV9CU1NDRkdfUFJJTUFSWV0udmlmO1xcbitcXG4gXFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19kYXRhX3NldCh2aWYtXFx1MDAzZWlmcCwgXFxcImFjdGZyYW1lX2Fib3J0XFxcIiwgXFx1MDAyNmludF92YWwsXFxuIFxcdFxcdFxcdFxcdFxcdHNpemVvZihzMzIpKTtcXG4gXFx0aWYgKGVycilcXG5AQCAtMTc4OSw3ICsxODE4LDkgQEAgYm9vbCBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcXG4gXFx0XFx0XFx0Z290byBleGl0O1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSBpZiAoYnJjbWZfcDJwX2lzX3AycF9hY3Rpb24oYWN0aW9uX2ZyYW1lLVxcdTAwM2VkYXRhLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBhY3Rpb25fZnJhbWVfbGVuKSkge1xcbitcXHRcXHRcXHRcXHRcXHQgICBhY3Rpb25fZnJhbWVfbGVuKSB8fFxcbitcXHRcXHQgICBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24oYWN0aW9uX2ZyYW1lLVxcdTAwM2VkYXRhLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgYWN0aW9uX2ZyYW1lX2xlbikpIHtcXG4gXFx0XFx0LyogZG8gbm90IGNvbmZpZ3VyZSBhbnl0aGluZy4gaXQgd2lsbCBiZSAqL1xcbiBcXHRcXHQvKiBzZW50IHdpdGggYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gICAgICovXFxuIFxcdH0gZWxzZSB7XFxuQEAgLTE4MjYsNiArMTg1Nyw3IEBAIGJvb2wgYnJjbWZfcDJwX3NlbmRfYWN0aW9uX2ZyYW1lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXFxuIFxcdC8qIHZhbGlkYXRlIGNoYW5uZWwgYW5kIHAycCBpZXMgKi9cXG4gXFx0aWYgKGNvbmZpZ19hZl9wYXJhbXMuc2VhcmNoX2NoYW5uZWwgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIElTX1AyUF9TT0NJQUxfQ0hBTk5FTChsZTMyX3RvX2NwdShhZl9wYXJhbXMtXFx1MDAzZWNoYW5uZWwpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcDJwLVxcdTAwM2Vic3NfaWR4W1AyUEFQSV9CU1NDRkdfREVWSUNFXS52aWYgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHAycC1cXHUwMDNlYnNzX2lkeFtQMlBBUElfQlNTQ0ZHX0RFVklDRV0udmlmLVxcdTAwM2VzYXZlZF9pZS5wcm9iZV9yZXFfaWVfbGVuKSB7XFxuIFxcdFxcdGFmeF9oZGwgPSBcXHUwMDI2cDJwLVxcdTAwM2VhZnhfaGRsO1xcbiBcXHRcXHRhZnhfaGRsLVxcdTAwM2VwZWVyX2xpc3Rlbl9jaGFuID0gbGUzMl90b19jcHUoYWZfcGFyYW1zLVxcdTAwM2VjaGFubmVsKTtcXG5AQCAtMjU0Myw0ICsyNTc1LDMgQEAgdm9pZCBicmNtZl9wMnBfZGV0YWNoKHN0cnVjdCBicmNtZl9wMnBfaW5mbyAqcDJwKVxcbiBcXHQvKiBqdXN0IHNldCBpdCBhbGwgdG8gemVybyAqL1xcbiBcXHRtZW1zZXQocDJwLCAwLCBzaXplb2YoKnAycCkpO1xcbiB9XFxuLVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvaW5jbHVkZS9icmNtdV93aWZpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvaW5jbHVkZS9icmNtdV93aWZpLmhcXG5pbmRleCA3NTUyYmRiOTE5OTFjZS4uYzQ2NTIwOGM0MzMxODIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oXFxuQEAgLTIzMyw2ICsyMzMsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWNfYml0bWFwX3RzdCh1OCBiaXRtYXAsIGludCBwcmVjKVxcbiBcXG4gI2RlZmluZSBXUEEzX0FVVEhfU0FFX1BTS1xcdDB4NDAwMDBcXHQvKiBTQUUgd2l0aCA0LXdheSBoYW5kc2hha2UgKi9cXG4gXFxuKyNkZWZpbmUgV0ZBX0FVVEhfRFBQXFx0XFx0MHgyMDAwMDAgLyogV0ZBIERQUCBBVVRIICovXFxuK1xcbiAjZGVmaW5lIERPVDExX0RFRkFVTFRfUlRTX0xFTlxcdFxcdDIzNDdcXG4gI2RlZmluZSBET1QxMV9ERUZBVUxUX0ZSQUdfTEVOXFx0XFx0MjM0NlxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MDEuMDcyMTk1NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODY4MjY4NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19VU0JcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJjbWZfc2V0X2tleV9tZ210XCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9jb25uZWN0XCIsXG4gICAgXCJicmNtZl9jb25maWd1cmVfd3BhaWVcIixcbiAgICBcImJyY21mX3AycF9pc19wdWJfYWN0aW9uXCIsXG4gICAgXCJicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb25cIixcbiAgICBcImJyY21mX3AycF9pc19wMnBfYWN0aW9uXCIsXG4gICAgXCJicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lXCIsXG4gICAgXCJicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIERQUCBhdXRoZW50aWNhdGlvbiBhbmQgbW9kaWZpZXMgdGhlIGZpcm13YXJlIHN1cHBsaWNhbnQgbG9naWMgaW4gdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKS4gSXQgYWxzbyB1cGRhdGVzIFAyUCBhY3Rpb24gZnJhbWUgaGFuZGxpbmcgdG8gc3VwcG9ydCBEUFAgcHVibGljIGFjdGlvbiBmcmFtZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGRyaXZlcidzIGNmZzgwMjExIGNhbGxiYWNrcyBhbmQgUDJQIGxvZ2ljLCB3aGljaCBjYW4gYmUgcmVhY2hlZCB2aWEgbmV0bGluayBjb21tYW5kcyBhbmQgVVNCIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjZjYmI3N2YyODlmNWQ2Zjc2ODVmMTUxMzdiZjZhYjYyZWQzOWFlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMTY6MDc6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG5pbmRleCA0YjcwODQ1ZTFhMjY0My4uZDYxYzNlMDNhMTA2YTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvY2ZnODAyMTEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2VcbkBAIC0yMTU0LDYgKzIxNTUsOSBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxuIFx0XHRcdHZhbCA9IFdQQTJfQVVUSF9QU0sgfCBXUEEyX0FVVEhfRlQ7XG4gXHRcdFx0cHJvZmlsZS1cdTAwM2Vpc19mdCA9IHRydWU7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfV0ZBX0RQUDpcbitcdFx0XHR2YWwgPSBXRkFfQVVUSF9EUFA7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCJpbnZhbGlkIGFrbSBzdWl0ZSAoJWQpXFxuXCIsXG4gXHRcdFx0XHQgc21lLVx1MDAzZWNyeXB0by5ha21fc3VpdGVzWzBdKTtcbkBAIC0yNDY2LDQzICsyNDcwLDUwIEBAIGJyY21mX2NmZzgwMjExX2Nvbm5lY3Qoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdGdvdG8gZG9uZTtcbiBcdH1cbiBcbi1cdGlmIChzbWUtXHUwMDNlY3J5cHRvLnBzayBcdTAwMjZcdTAwMjZcbi1cdCAgICBwcm9maWxlLVx1MDAzZXVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSkge1xuLVx0XHRpZiAoV0FSTl9PTihwcm9maWxlLVx1MDAzZXVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpKSB7XG4tXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIGRvbmU7XG4tXHRcdH1cbi1cdFx0YnJjbWZfZGJnKElORk8sIFwidXNpbmcgUFNLIG9mZmxvYWRcXG5cIik7XG4tXHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4tXHR9XG4tXG4tXHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSB7XG4tXHRcdC8qIGVuYWJsZSBmaXJtd2FyZSBzdXBwbGljYW50IGZvciB0aGlzIGludGVyZmFjZSAqL1xuLVx0XHRlcnIgPSBicmNtZl9maWxfaW92YXJfaW50X3NldChpZnAsIFwic3VwX3dwYVwiLCAxKTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLVx0XHRcdGJwaHlfZXJyKGRydnIsIFwiZmFpbGVkIHRvIGVuYWJsZSBmdyBzdXBwbGljYW50XFxuXCIpO1xuLVx0XHRcdGdvdG8gZG9uZTtcbitcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX0ZXU1VQKSkge1xuK1x0XHR1MzIgYWttID0gc21lLVx1MDAzZWNyeXB0by5uX2FrbV9zdWl0ZXMgPyBzbWUtXHUwMDNlY3J5cHRvLmFrbV9zdWl0ZXNbMF0gOiAwO1xuK1x0XHRib29sIGlzX3NhZV9ha20gPSBha20gPT0gV0xBTl9BS01fU1VJVEVfU0FFIHx8XG4rXHRcdFx0YWttID09IFdMQU5fQUtNX1NVSVRFX0ZUX09WRVJfU0FFO1xuK1xuK1x0XHRpZiAoc21lLVx1MDAzZWNyeXB0by5wc2sgXHUwMDI2XHUwMDI2ICFpc19zYWVfYWttIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcbitcdFx0XHRpZiAoV0FSTl9PTihwcm9maWxlLVx1MDAzZXVzZV9md3N1cCAhPVxuK1x0XHRcdFx0ICAgIEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkpIHtcbitcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0XHRnb3RvIGRvbmU7XG4rXHRcdFx0fVxuK1x0XHRcdGJyY21mX2RiZyhJTkZPLCBcInVzaW5nIFBTSyBvZmZsb2FkXFxuXCIpO1xuK1x0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4gXHRcdH1cbi1cdH1cbi1cbi1cdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSylcbi1cdFx0ZXJyID0gYnJjbWZfc2V0X3BtayhpZnAsIHNtZS1cdTAwM2VjcnlwdG8ucHNrLFxuLVx0XHRcdFx0ICAgIEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pO1xuLVx0ZWxzZSBpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcbi1cdFx0LyogY2xlYW4gdXAgdXNlci1zcGFjZSBSU05FICovXG4tXHRcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwid3BhaWVcIiwgTlVMTCwgMCk7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRicGh5X2VycihkcnZyLCBcImZhaWxlZCB0byBjbGVhbiB1cCB1c2VyLXNwYWNlIFJTTkVcXG5cIik7XG4tXHRcdFx0Z290byBkb25lO1xuK1x0XHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSB7XG4rXHRcdFx0LyogZW5hYmxlIGZpcm13YXJlIHN1cHBsaWNhbnQgZm9yIHRoaXMgaW50ZXJmYWNlICovXG4rXHRcdFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2ludF9zZXQoaWZwLCBcInN1cF93cGFcIiwgMSk7XG4rXHRcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuK1x0XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCJmYWlsZWQgdG8gZW5hYmxlIGZ3IHN1cHBsaWNhbnRcXG5cIik7XG4rXHRcdFx0XHRnb3RvIGRvbmU7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9pbnRfc2V0KGlmcCwgXCJzdXBfd3BhXCIsIDApO1xuIFx0XHR9XG4tXHRcdGVyciA9IGJyY21mX2Z3dmlkX3NldF9zYWVfcGFzc3dvcmQoaWZwLCBcdTAwMjZzbWUtXHUwMDNlY3J5cHRvKTtcbi1cdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHNtZS1cdTAwM2VjcnlwdG8ucHNrKVxuK1x0XHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0spXG4gXHRcdFx0ZXJyID0gYnJjbWZfc2V0X3BtayhpZnAsIHNtZS1cdTAwM2VjcnlwdG8ucHNrLFxuIFx0XHRcdFx0XHQgICAgQlJDTUZfV1NFQ19NQVhfUFNLX0xFTik7XG4rXHRcdGVsc2UgaWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfU0FFIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBzbWUtXHUwMDNlY3J5cHRvLnNhZV9wd2QgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfU0FFKSkge1xuK1x0XHRcdC8qIGNsZWFuIHVwIHVzZXItc3BhY2UgUlNORSAqL1xuK1x0XHRcdGlmIChicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcIndwYWllXCIsIE5VTEwsIDApKSB7XG4rXHRcdFx0XHRicGh5X2VycihkcnZyLCBcImZhaWxlZCB0byBjbGVhbiB1cCB1c2VyLXNwYWNlIFJTTkVcXG5cIik7XG4rXHRcdFx0XHRnb3RvIGRvbmU7XG4rXHRcdFx0fVxuK1x0XHRcdGVyciA9IGJyY21mX2Z3dmlkX3NldF9zYWVfcGFzc3dvcmQoaWZwLCBcdTAwMjZzbWUtXHUwMDNlY3J5cHRvKTtcbitcdFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgc21lLVx1MDAzZWNyeXB0by5wc2spXG4rXHRcdFx0XHRlcnIgPSBicmNtZl9zZXRfcG1rKGlmcCwgc21lLVx1MDAzZWNyeXB0by5wc2ssXG4rXHRcdFx0XHRcdFx0ICAgIEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pO1xuK1x0XHR9XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBkb25lO1xuIFx0fVxuLVx0aWYgKGVycilcbi1cdFx0Z290byBkb25lO1xuLVxuIFx0LyogSm9pbiB3aXRoIHNwZWNpZmljIEJTU0lEIGFuZCBjYWNoZWQgU1NJRFxuIFx0ICogSWYgU1NJRCBpcyB6ZXJvIGpvaW4gYmFzZWQgb24gQlNTSUQgb25seVxuIFx0ICovXG5AQCAtNDUxOSw2ICs0NTMwLDExIEBAIHN0YXRpYyBib29sIGJyY21mX3ZhbGlkX3dwYV9vdWkodTggKm91aSwgYm9vbCBpc19yc25faWUpXG4gXHRyZXR1cm4gKG1lbWNtcChvdWksIFdQQV9PVUksIFRMVl9PVUlfTEVOKSA9PSAwKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgYnJjbWZfdmFsaWRfZHBwX3N1aXRlKHU4ICpvdWkpXG4re1xuK1x0cmV0dXJuIGdldF91bmFsaWduZWRfYmUzMihvdWkpID09IFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA7XG4rfVxuK1xuIHN0YXRpYyBzMzJcbiBicmNtZl9jb25maWd1cmVfd3BhaWUoc3RydWN0IGJyY21mX2lmICppZnAsXG4gXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicmNtZl92c190bHYgKndwYV9pZSxcbkBAIC00NjMyLDQyICs0NjQ4LDQ3IEBAIGJyY21mX2NvbmZpZ3VyZV93cGFpZShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcbiBcdFx0Z290byBleGl0O1xuIFx0fVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkrKykge1xuLVx0XHRpZiAoIWJyY21mX3ZhbGlkX3dwYV9vdWkoXHUwMDI2ZGF0YVtvZmZzZXRdLCBpc19yc25faWUpKSB7XG4rXHRcdGlmIChicmNtZl92YWxpZF9kcHBfc3VpdGUoXHUwMDI2ZGF0YVtvZmZzZXRdKSkge1xuK1x0XHRcdHdwYV9hdXRoIHw9IFdGQV9BVVRIX0RQUDtcbitcdFx0XHRvZmZzZXQgKz0gVExWX09VSV9MRU47XG4rXHRcdH0gZWxzZSBpZiAoYnJjbWZfdmFsaWRfd3BhX291aShcdTAwMjZkYXRhW29mZnNldF0sIGlzX3Jzbl9pZSkpIHtcbitcdFx0XHRvZmZzZXQgKz0gVExWX09VSV9MRU47XG4rXHRcdFx0c3dpdGNoIChkYXRhW29mZnNldF0pIHtcbitcdFx0XHRjYXNlIFJTTl9BS01fTk9ORTpcbitcdFx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCJSU05fQUtNX05PTkVcXG5cIik7XG4rXHRcdFx0XHR3cGFfYXV0aCB8PSBXUEFfQVVUSF9OT05FO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0Y2FzZSBSU05fQUtNX1VOU1BFQ0lGSUVEOlxuK1x0XHRcdFx0YnJjbWZfZGJnKFRSQUNFLCBcIlJTTl9BS01fVU5TUEVDSUZJRURcXG5cIik7XG4rXHRcdFx0XHRpc19yc25faWUgP1xuK1x0XHRcdFx0XHQod3BhX2F1dGggfD0gV1BBMl9BVVRIX1VOU1BFQ0lGSUVEKSA6XG4rXHRcdFx0XHRcdCh3cGFfYXV0aCB8PSBXUEFfQVVUSF9VTlNQRUNJRklFRCk7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRjYXNlIFJTTl9BS01fUFNLOlxuK1x0XHRcdFx0YnJjbWZfZGJnKFRSQUNFLCBcIlJTTl9BS01fUFNLXFxuXCIpO1xuK1x0XHRcdFx0aXNfcnNuX2llID8gKHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0spIDpcbitcdFx0XHRcdFx0ICAgICh3cGFfYXV0aCB8PSBXUEFfQVVUSF9QU0spO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0Y2FzZSBSU05fQUtNX1NIQTI1Nl9QU0s6XG4rXHRcdFx0XHRicmNtZl9kYmcoVFJBQ0UsIFwiUlNOX0FLTV9NRlBfUFNLXFxuXCIpO1xuK1x0XHRcdFx0d3BhX2F1dGggfD0gV1BBMl9BVVRIX1BTS19TSEEyNTY7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRjYXNlIFJTTl9BS01fU0hBMjU2XzFYOlxuK1x0XHRcdFx0YnJjbWZfZGJnKFRSQUNFLCBcIlJTTl9BS01fTUZQXzFYXFxuXCIpO1xuK1x0XHRcdFx0d3BhX2F1dGggfD0gV1BBMl9BVVRIXzFYX1NIQTI1NjtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGNhc2UgUlNOX0FLTV9TQUU6XG4rXHRcdFx0XHRicmNtZl9kYmcoVFJBQ0UsIFwiUlNOX0FLTV9TQUVcXG5cIik7XG4rXHRcdFx0XHR3cGFfYXV0aCB8PSBXUEEzX0FVVEhfU0FFX1BTSztcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGRlZmF1bHQ6XG4rXHRcdFx0XHRicGh5X2VycihkcnZyLCBcIkludmFsaWQga2V5IG1nbXQgaW5mb1xcblwiKTtcbitcdFx0XHR9XG4rXHRcdH0gZWxzZSB7XG4gXHRcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0XHRicGh5X2VycihkcnZyLCBcImludmFsaWQgT1VJXFxuXCIpO1xuIFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fVxuLVx0XHRvZmZzZXQgKz0gVExWX09VSV9MRU47XG4tXHRcdHN3aXRjaCAoZGF0YVtvZmZzZXRdKSB7XG4tXHRcdGNhc2UgUlNOX0FLTV9OT05FOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCJSU05fQUtNX05PTkVcXG5cIik7XG4tXHRcdFx0d3BhX2F1dGggfD0gV1BBX0FVVEhfTk9ORTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBSU05fQUtNX1VOU1BFQ0lGSUVEOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCJSU05fQUtNX1VOU1BFQ0lGSUVEXFxuXCIpO1xuLVx0XHRcdGlzX3Jzbl9pZSA/ICh3cGFfYXV0aCB8PSBXUEEyX0FVVEhfVU5TUEVDSUZJRUQpIDpcbi1cdFx0XHRcdCAgICAod3BhX2F1dGggfD0gV1BBX0FVVEhfVU5TUEVDSUZJRUQpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJTTl9BS01fUFNLOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCJSU05fQUtNX1BTS1xcblwiKTtcbi1cdFx0XHRpc19yc25faWUgPyAod3BhX2F1dGggfD0gV1BBMl9BVVRIX1BTSykgOlxuLVx0XHRcdFx0ICAgICh3cGFfYXV0aCB8PSBXUEFfQVVUSF9QU0spO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJTTl9BS01fU0hBMjU2X1BTSzpcbi1cdFx0XHRicmNtZl9kYmcoVFJBQ0UsIFwiUlNOX0FLTV9NRlBfUFNLXFxuXCIpO1xuLVx0XHRcdHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0tfU0hBMjU2O1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJTTl9BS01fU0hBMjU2XzFYOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCJSU05fQUtNX01GUF8xWFxcblwiKTtcbi1cdFx0XHR3cGFfYXV0aCB8PSBXUEEyX0FVVEhfMVhfU0hBMjU2O1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJTTl9BS01fU0FFOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCJSU05fQUtNX1NBRVxcblwiKTtcbi1cdFx0XHR3cGFfYXV0aCB8PSBXUEEzX0FVVEhfU0FFX1BTSztcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRicGh5X2VycihkcnZyLCBcIkludmFsaWQga2V5IG1nbXQgaW5mb1xcblwiKTtcbi1cdFx0fVxuIFx0XHRvZmZzZXQrKztcbiBcdH1cbiBcbkBAIC00Njg3LDEwICs0NzA4LDEyIEBAIGJyY21mX2NvbmZpZ3VyZV93cGFpZShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcbiBcdFx0XHRcdCAqL1xuIFx0XHRcdFx0aWYgKCEod3BhX2F1dGggXHUwMDI2IChXUEEyX0FVVEhfUFNLX1NIQTI1NiB8XG4gXHRcdFx0XHRcdFx0ICBXUEEyX0FVVEhfMVhfU0hBMjU2IHxcbitcdFx0XHRcdFx0XHQgIFdGQV9BVVRIX0RQUCB8XG4gXHRcdFx0XHRcdFx0ICBXUEEzX0FVVEhfU0FFX1BTSykpKSB7XG4gXHRcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0XHRcdH1cbitcbiBcdFx0XHRcdC8qIEZpcm13YXJlIGhhcyByZXF1aXJlbWVudCB0aGF0IFdQQTJfQVVUSF9QU0svXG4gXHRcdFx0XHQgKiBXUEEyX0FVVEhfVU5TUEVDSUZJRUQgYmUgc2V0LCBpZiBTSEEyNTYgT1VJXG4gXHRcdFx0XHQgKiBpcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgcnNuIGllLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuY1xuaW5kZXggNmUwYzkwZjQ3MThiNTguLjJjMWY1MmVkNTEzODAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmNcbkBAIC02LDYgKzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvY2ZnODAyMTEuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2JyY211X3dpZmkuaFx1MDAzZVxuQEAgLTQ0LDkgKzQ1LDYgQEBcbiBcbiAjZGVmaW5lIEJSQ01GX1NDQl9USU1FT1VUX1ZBTFVFXHQyMFxuIFxuLSNkZWZpbmUgUDJQX1ZFUlx0XHRcdDlcdC8qIFAyUCB2ZXJzaW9uOiA5PVdpRmkgUDJQIHYxLjAgKi9cbi0jZGVmaW5lIFAyUF9QVUJfQUZfQ0FURUdPUllcdDB4MDRcbi0jZGVmaW5lIFAyUF9QVUJfQUZfQUNUSU9OXHQweDA5XG4gI2RlZmluZSBQMlBfQUZfQ0FURUdPUllcdFx0MHg3ZlxuICNkZWZpbmUgUDJQX09VSVx0XHRcdFwiXFx4NTBcXHg2RlxceDlBXCJcdC8qIFAyUCBPVUkgKi9cbiAjZGVmaW5lIFAyUF9PVUlfTEVOXHRcdDNcdFx0LyogUDJQIE9VSSBsZW5ndGggKi9cbkBAIC0xNDMsMTAgKzE0MSwxMCBAQCBzdHJ1Y3QgYnJjbWZfcDJwX3NjYW5fbGUge1xuIC8qKlxuICAqIHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSAtIFdpRmkgUDJQIFB1YmxpYyBBY3Rpb24gRnJhbWVcbiAgKlxuLSAqIEBjYXRlZ29yeTogUDJQX1BVQl9BRl9DQVRFR09SWVxuLSAqIEBhY3Rpb246IFAyUF9QVUJfQUZfQUNUSU9OXG4rICogQGNhdGVnb3J5OiBXTEFOX0NBVEVHT1JZX1BVQkxJQ1xuKyAqIEBhY3Rpb246IFdMQU5fUFVCX0FDVElPTl9WRU5ET1JfU1BFQ0lGSUNcbiAgKiBAb3VpOiBQMlBfT1VJXG4tICogQG91aV90eXBlOiBPVUkgdHlwZSAtIFAyUF9WRVJcbisgKiBAb3VpX3R5cGU6IE9VSSB0eXBlIC0gV0xBTl9PVUlfVFlQRV9XRkFfUDJQXG4gICogQHN1YnR5cGU6IE9VSSBzdWJ0eXBlIC0gUDJQX1RZUEVfKlxuICAqIEBkaWFsb2dfdG9rZW46IG5vbnplcm8sIGlkZW50aWZpZXMgcmVxL3JzcCB0cmFuc2FjdGlvblxuICAqIEBlbHRzOiBWYXJpYWJsZSBsZW5ndGggaW5mb3JtYXRpb24gZWxlbWVudHMuXG5AQCAtMTY2LDcgKzE2NCw3IEBAIHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSB7XG4gICpcbiAgKiBAY2F0ZWdvcnk6IFAyUF9BRl9DQVRFR09SWVxuICAqIEBvdWk6IE9VSSAtIFAyUF9PVUlcbi0gKiBAdHlwZTogT1VJIFR5cGUgLSBQMlBfVkVSXG4rICogQHR5cGU6IE9VSSBUeXBlIC0gV0xBTl9PVUlfVFlQRV9XRkFfUDJQXG4gICogQHN1YnR5cGU6IE9VSSBTdWJ0eXBlIC0gUDJQX0FGXypcbiAgKiBAZGlhbG9nX3Rva2VuOiBub256ZXJvLCBpZGVudGlmaWVzIHJlcS9yZXNwIHRyYW5hY3Rpb25cbiAgKiBAZWx0czogVmFyaWFibGUgbGVuZ3RoIGluZm9ybWF0aW9uIGVsZW1lbnRzLlxuQEAgLTIyOCwxMCArMjI2LDM4IEBAIHN0YXRpYyBib29sIGJyY21mX3AycF9pc19wdWJfYWN0aW9uKHZvaWQgKmZyYW1lLCB1MzIgZnJhbWVfbGVuKVxuIFx0aWYgKGZyYW1lX2xlbiBcdTAwM2Mgc2l6ZW9mKCpwYWN0X2ZybSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChwYWN0X2ZybS1cdTAwM2VjYXRlZ29yeSA9PSBQMlBfUFVCX0FGX0NBVEVHT1JZIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHBhY3RfZnJtLVx1MDAzZWFjdGlvbiA9PSBQMlBfUFVCX0FGX0FDVElPTiBcdTAwMjZcdTAwMjZcbi1cdCAgICBwYWN0X2ZybS1cdTAwM2VvdWlfdHlwZSA9PSBQMlBfVkVSIFx1MDAyNlx1MDAyNlxuLVx0ICAgIG1lbWNtcChwYWN0X2ZybS1cdTAwM2VvdWksIFAyUF9PVUksIFAyUF9PVUlfTEVOKSA9PSAwKVxuK1x0aWYgKHBhY3RfZnJtLVx1MDAzZWNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfUFVCTElDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBhY3RfZnJtLVx1MDAzZWFjdGlvbiA9PSBXTEFOX1BVQl9BQ1RJT05fVkVORE9SX1NQRUNJRklDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBhY3RfZnJtLVx1MDAzZW91aV90eXBlID09IFdMQU5fT1VJX1RZUEVfV0ZBX1AyUCBcdTAwMjZcdTAwMjZcbitcdCAgICBnZXRfdW5hbGlnbmVkX2JlMjQocGFjdF9mcm0tXHUwMDNlb3VpKSA9PSBXTEFOX09VSV9XRkEpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbisvKipcbisgKiBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24oKSAtIHRydWUgaWYgZHBwIHB1YmxpYyB0eXBlIGZyYW1lLlxuKyAqXG4rICogQGZyYW1lOiBhY3Rpb24gZnJhbWUgZGF0YS5cbisgKiBAZnJhbWVfbGVuOiBsZW5ndGggb2YgYWN0aW9uIGZyYW1lIGRhdGEuXG4rICpcbisgKiBEZXRlcm1pbmUgaWYgYWN0aW9uIGZyYW1lIGlzIGRwcCBwdWJsaWMgYWN0aW9uIHR5cGVcbisgKi9cbitzdGF0aWMgYm9vbCBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24odm9pZCAqZnJhbWUsIHUzMiBmcmFtZV9sZW4pXG4re1xuK1x0c3RydWN0IGJyY21mX3AycF9wdWJfYWN0X2ZyYW1lICpwYWN0X2ZybTtcbitcbitcdGlmICghZnJhbWUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHBhY3RfZnJtID0gKHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSAqKWZyYW1lO1xuK1x0aWYgKGZyYW1lX2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSkgLSAxKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAocGFjdF9mcm0tXHUwMDNlY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9QVUJMSUMgXHUwMDI2XHUwMDI2XG4rXHQgICAgcGFjdF9mcm0tXHUwMDNlYWN0aW9uID09IFdMQU5fUFVCX0FDVElPTl9WRU5ET1JfU1BFQ0lGSUMgXHUwMDI2XHUwMDI2XG4rXHQgICAgcGFjdF9mcm0tXHUwMDNlb3VpX3R5cGUgPT0gV0xBTl9PVUlfVFlQRV9XRkFfRFBQIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGdldF91bmFsaWduZWRfYmUyNChwYWN0X2ZybS1cdTAwM2VvdWkpID09IFdMQU5fT1VJX1dGQSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG5AQCAtMjU3LDcgKzI4Myw3IEBAIHN0YXRpYyBib29sIGJyY21mX3AycF9pc19wMnBfYWN0aW9uKHZvaWQgKmZyYW1lLCB1MzIgZnJhbWVfbGVuKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoYWN0X2ZybS1cdTAwM2VjYXRlZ29yeSA9PSBQMlBfQUZfQ0FURUdPUlkgXHUwMDI2XHUwMDI2XG4tXHQgICAgYWN0X2ZybS1cdTAwM2V0eXBlICA9PSBQMlBfVkVSIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGFjdF9mcm0tXHUwMDNldHlwZSAgPT0gV0xBTl9PVUlfVFlQRV9XRkFfUDJQIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG1lbWNtcChhY3RfZnJtLVx1MDAzZW91aSwgUDJQX09VSSwgUDJQX09VSV9MRU4pID09IDApXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuQEAgLTEyODEsNiArMTMwNyw5IEBAIHN0YXRpYyBzMzIgYnJjbWZfcDJwX2Fib3J0X2FjdGlvbl9mcmFtZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnKVxuIFx0YnJjbWZfZGJnKFRSQUNFLCBcIkVudGVyXFxuXCIpO1xuIFxuIFx0dmlmID0gcDJwLVx1MDAzZWJzc19pZHhbUDJQQVBJX0JTU0NGR19ERVZJQ0VdLnZpZjtcbitcdGlmICghdmlmKVxuK1x0XHR2aWYgPSBwMnAtXHUwMDNlYnNzX2lkeFtQMlBBUElfQlNTQ0ZHX1BSSU1BUlldLnZpZjtcbitcbiBcdGVyciA9IGJyY21mX2ZpbF9ic3NjZmdfZGF0YV9zZXQodmlmLVx1MDAzZWlmcCwgXCJhY3RmcmFtZV9hYm9ydFwiLCBcdTAwMjZpbnRfdmFsLFxuIFx0XHRcdFx0XHRzaXplb2YoczMyKSk7XG4gXHRpZiAoZXJyKVxuQEAgLTE3ODksNyArMTgxOCw5IEBAIGJvb2wgYnJjbWZfcDJwX3NlbmRfYWN0aW9uX2ZyYW1lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRcdFx0Z290byBleGl0O1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKGJyY21mX3AycF9pc19wMnBfYWN0aW9uKGFjdGlvbl9mcmFtZS1cdTAwM2VkYXRhLFxuLVx0XHRcdFx0XHQgICBhY3Rpb25fZnJhbWVfbGVuKSkge1xuK1x0XHRcdFx0XHQgICBhY3Rpb25fZnJhbWVfbGVuKSB8fFxuK1x0XHQgICBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24oYWN0aW9uX2ZyYW1lLVx1MDAzZWRhdGEsXG4rXHRcdFx0XHRcdCAgICAgICBhY3Rpb25fZnJhbWVfbGVuKSkge1xuIFx0XHQvKiBkbyBub3QgY29uZmlndXJlIGFueXRoaW5nLiBpdCB3aWxsIGJlICovXG4gXHRcdC8qIHNlbnQgd2l0aCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiAgICAgKi9cbiBcdH0gZWxzZSB7XG5AQCAtMTgyNiw2ICsxODU3LDcgQEAgYm9vbCBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbiBcdC8qIHZhbGlkYXRlIGNoYW5uZWwgYW5kIHAycCBpZXMgKi9cbiBcdGlmIChjb25maWdfYWZfcGFyYW1zLnNlYXJjaF9jaGFubmVsIFx1MDAyNlx1MDAyNlxuIFx0ICAgIElTX1AyUF9TT0NJQUxfQ0hBTk5FTChsZTMyX3RvX2NwdShhZl9wYXJhbXMtXHUwMDNlY2hhbm5lbCkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHAycC1cdTAwM2Vic3NfaWR4W1AyUEFQSV9CU1NDRkdfREVWSUNFXS52aWYgXHUwMDI2XHUwMDI2XG4gXHQgICAgcDJwLVx1MDAzZWJzc19pZHhbUDJQQVBJX0JTU0NGR19ERVZJQ0VdLnZpZi1cdTAwM2VzYXZlZF9pZS5wcm9iZV9yZXFfaWVfbGVuKSB7XG4gXHRcdGFmeF9oZGwgPSBcdTAwMjZwMnAtXHUwMDNlYWZ4X2hkbDtcbiBcdFx0YWZ4X2hkbC1cdTAwM2VwZWVyX2xpc3Rlbl9jaGFuID0gbGUzMl90b19jcHUoYWZfcGFyYW1zLVx1MDAzZWNoYW5uZWwpO1xuQEAgLTI1NDMsNCArMjU3NSwzIEBAIHZvaWQgYnJjbWZfcDJwX2RldGFjaChzdHJ1Y3QgYnJjbWZfcDJwX2luZm8gKnAycClcbiBcdC8qIGp1c3Qgc2V0IGl0IGFsbCB0byB6ZXJvICovXG4gXHRtZW1zZXQocDJwLCAwLCBzaXplb2YoKnAycCkpO1xuIH1cbi1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvaW5jbHVkZS9icmNtdV93aWZpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvaW5jbHVkZS9icmNtdV93aWZpLmhcbmluZGV4IDc1NTJiZGI5MTk5MWNlLi5jNDY1MjA4YzQzMzE4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9pbmNsdWRlL2JyY211X3dpZmkuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oXG5AQCAtMjMzLDYgKzIzMyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhY19iaXRtYXBfdHN0KHU4IGJpdG1hcCwgaW50IHByZWMpXG4gXG4gI2RlZmluZSBXUEEzX0FVVEhfU0FFX1BTS1x0MHg0MDAwMFx0LyogU0FFIHdpdGggNC13YXkgaGFuZHNoYWtlICovXG4gXG4rI2RlZmluZSBXRkFfQVVUSF9EUFBcdFx0MHgyMDAwMDAgLyogV0ZBIERQUCBBVVRIICovXG4rXG4gI2RlZmluZSBET1QxMV9ERUZBVUxUX1JUU19MRU5cdFx0MjM0N1xuICNkZWZpbmUgRE9UMTFfREVGQVVMVF9GUkFHX0xFTlx0XHQyMzQ2XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNjowODowMS4wNzIxOTczOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTA0ODE4MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIGFuZCBUZXN0aW5nIERQUCBTdXBwb3J0IGluIGJyY21mbWFjKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgaXQncyB0d2Vha2luZyBgYnJjbWZtYWNgIHRvIHN1cHBvcnQgRFBQIGF1dGhlbnRpY2F0aW9uIChgV0xBTl9BS01fU1VJVEVfV0ZBX0RQUGApIGFuZCByZWxhdGVkIE9VSSB0eXBlcy4gU3BlY2lmaWNhbGx5LCBpdCB0b3VjaGVzIGBjZmc4MDIxMS5jYCBhbmQgYHAycC5jYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGNhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGlzIGZ1bmN0aW9uYWxpdHkgYW5kIHRlc3QgaXQgcHJvcGVybHk/XG5cblRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYGJyY21mbWFjYCwgdGhlIEJyb2FkY29tIFdpRmkgZHJpdmVyLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgaW4gdGhlIGBjZmc4MDIxMWAgaW50ZXJmYWNlIGFuZCBQMlAgYWN0aW9uIGZyYW1lIGhhbmRsaW5nLCBtZWFuaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBpbnRlcmFjdGlvbnMgdGhhdCAqc2hvdWxkKiBiZSBhY2Nlc3NpYmxlIHRocm91Z2ggbmV0bGluayBhbmQgbmV0d29yayBpbnRlcmZhY2VzLlxuXG5Ob3csIHRoZSByZWFsIGNoYWxsZW5nZS4gQ2FuIHdlIGV2ZW4gZnV6eiB0aGlzIGVmZmVjdGl2ZWx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEknbSB0aGlua2luZyBhYm91dCBmdXp6aW5nLiBgYnJjbWZtYWNgIGlzIGEgaGFyZHdhcmUgZHJpdmVyLCBtZWFuaW5nIGl0IGVpdGhlciBuZWVkcyByZWFsIGhhcmR3YXJlIG9yLCBpZGVhbGx5LCBzb21lIHNvcnQgb2Ygc2ltdWxhdGlvbiBsYXllci4gSSBxdWlja2x5IGNvbnNpZGVyIHdoZXRoZXIgdGhlcmXigJlzIGEgc2ltdWxhdG9yLiBJIGtub3cgdGhhdCBgbWFjODAyMTFgIGhhcyBgbWFjODAyMTFfaHdzaW1gLCBidXQgdGhpcyBpcyBhIGZ1bGxtYWMgZHJpdmVyLlxuXG5UaGVuLCBJIHJlbWVtYmVyIHN5emthbGxlci4gU3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzIGFyZSBpbnRyaWd1aW5nLiBUaGV5IGhhdmUgc29tZSBzdXBwb3J0IGZvciBVU0IgZnV6emluZyAoZHVtbXkgSENEKSBhbmQgUENJIGZ1enppbmcsIHdoaWNoICpjb3VsZCogZ2V0IHVzIHBhc3QgdGhlIGluaXRpYWwgcHJvYmUsIGFuZCBtYXliZSBldmVuIGZ1cnRoZXIgaWYgdGhlIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkLiBBbmQgYGJyY21mbWFjYCBoYXMgVVNCLCBTRElPLCBhbmQgUENJZSBpbnRlcmZhY2VzLiBCaW5nbyEgVVNCIGZ1enppbmcgaXMgdGhlIG1vc3QgcHJvbWlzaW5nIHJvdXRlLiBJdCdzIGxpa2VseSB3ZSBjYW4gcmVhY2ggdGhlIFVTQiBwcm9iZSwgcmVnaXN0ZXIgYSB3aXBoeSwgYW5kIHRoZW4gZXhwb3NlIHRob3NlIGNmZzgwMjExIG9wZXJhdGlvbnMgdG8gdXNlciBzcGFjZS5cblxuU28sIGxldCdzIG5haWwgZG93biB3aGF0IGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGhpdDogYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgIGFuZCBgYnJjbWZfcDJwX3NlbmRfYWN0aW9uX2ZyYW1lYC4gSWYgVVNCIGZ1enppbmcgd29ya3MsIHRoZSBkcml2ZXIgcHJvYmVzLCBhIHdpcGh5IGdldHMgcmVnaXN0ZXJlZCwgYW5kIG5ldGxpbmsgY29tbWFuZHMgY2FuIHRyaWdnZXIgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLiBUaGF0J3MgYSBkaXJlY3QgcGF0aC5cblxuVGltZSB0byBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucy4gTGV0IG1lIG1ha2Ugc3VyZSBgYnJjbWZtYWNgIGlzIGNvbXBpbGVkIHdpdGggVVNCIHN1cHBvcnQuIE5lZWQgdG8gY2hlY2s6IGBDT05GSUdfQlJDTUZNQUNgLCBgQ09ORklHX0JSQ01GTUFDX1VTQmAsIGBDT05GSUdfQlJDTUZNQUNfUENJRWAsIGFuZCBgQ09ORklHX0JSQ01GTUFDX1NESU9gLlxuXG5BbHJpZ2h0LCBhIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSBjb25maXJtcyB0aGUgY29ubmVjdGlvbi4gYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgIGlzIGEgYGNmZzgwMjExYCBjYWxsYmFjayBzcGVjaWZpY2FsbHkgZm9yIHRoZSBcImNvbm5lY3RcIiBvcGVyYXRpb24uIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgIGlzIGNhbGxlZCBmcm9tIGBicmNtZl9jZmc4MDIxMV9tZ210X3R4YCwgd2hpY2ggaXMgdGhlIGBtZ210X3R4YCBjYWxsYmFjay5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhvc2UgY29uZmlnIG9wdGlvbnMgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIHBsYWNlIGZvciBhIHByb3BlciB0ZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzY5LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MTEuOTc3MDE5MTkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDg4OTk1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSQ01GTUFDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE6Y29uZmlnIEJSQ01GTUFDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjExOmNvbmZpZyBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTItXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE0OmNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNS1cXHRib29sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTc6Y29uZmlnIEJSQ01GTUFDX1NESU9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xOC1cXHRib29sIFxcXCJTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoyOTpjb25maWcgQlJDTUZNQUNfVVNCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0zOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzo0MDpjb25maWcgQlJDTUZNQUNfUENJRVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIlBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MTMuNTg1OTI5MjIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMDc4MzczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJyb2FkY29tIFdpRmkgRHJpdmVyIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgQlJDTUZNQUNgIGFuZCBgQlJDTUZNQUNfVVNCYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhlaXIgcmVsZXZhbmNlIHRvIGZ1enppbmcuIEkgcmVtZW1iZXIgYEJSQ01GTUFDYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBDRkc4MDIxMWAsIHdoaWNoIHBpcXVlcyBteSBpbnRlcmVzdC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGRyaXZlciB3b3J0aCB0aGUgZWZmb3J0P1xuXG5XZWxsLCB5ZXMsIHRoZSBwb3RlbnRpYWwgaXMgZGVmaW5pdGVseSB0aGVyZS4gVGhlIGRyaXZlciBtb2RpZmllcyBmdW5jdGlvbmFsIGxvZ2ljLCB3aGljaCBpcyBhIGtleSBpbmRpY2F0b3IuIFBsdXMsIEkgY2FuIGluc3RhbnRpYXRlIHRoZSBgQlJDTUZNQUNgIHZpYSBVU0IgZnV6emluZywgd2hpY2ggaXMgZ3JlYXQgYmVjYXVzZSBTeXprYWxsZXIgaGFzIGEgZGVjZW50IFVTQiBmdXp6ZXIuIFRoYXQgc3RyZWFtbGluZXMgdGhlIGZ1enppbmcgcHJvY2VzcyBzaWduaWZpY2FudGx5LlxuXG5Ob3csIGEgY3JpdGljYWwgcG9pbnQgSSBuZWVkIHRvIHZlcmlmeTogZG9lcyBgYnJjbWZtYWNgIG5lZWQgYW55IGZpcm13YXJlIGZvciBpbml0aWFsaXphdGlvbj8gVGhpcyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyBhbnkgZmFsc2UgcG9zaXRpdmVzLiBUbyBtYWtlIHN1cmUsIEkgc2hvdWxkIGNoZWNrIHRoZSBgYnJjbWZfdXNiX3Byb2JlYCBmdW5jdGlvbiBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gZGV0ZXJtaW5lIGlmIGZpcm13YXJlIGlzIHJlcXVpcmVkIGFuZCBob3cgdGhlIFVTQiBpbnRlcmZhY2UgaW50ZXJhY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzUwLCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjA4OjE3Ljc5NjcxNTk4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA3NzIwNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3VzYl9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNTc9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9idXNfb3BzIGJyY21mX3VzYl9idXNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjExNjg6c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNjktXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyMTY9YnJjbWZfdXNiX3ByZXBhcmVfZndfcmVxdWVzdChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTIzNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTIzNjpzdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyMzctXFx0XFx0XFx0ICAgICAgZW51bSBicmNtZl9md3ZlbmRvciBmd3ZpZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjk5LVxcdC8qIHJlcXVlc3QgZmlybXdhcmUgaGVyZSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzAwOlxcdHJldCA9IGJyY21mX2Z3X2dldF9maXJtd2FyZXMoZGV2LCBmd3JlcSwgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzMDEtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEzMzM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzM0OmJyY21mX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzM1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDM0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNDM1OlxcdHJldCA9IGJyY21mX3VzYl9wcm9iZV9jYihkZXZpbmZvLCBpZC1cXHUwMDNlZHJpdmVyX2luZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDM2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTUwMz1zdGF0aWMgaW50IGJyY21mX3VzYl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUxNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTUxNjpcXHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKFxcdTAwMjZ1c2ItXFx1MDAzZWRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTE3LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTE1NTc9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJyY21mX3VzYmRydnIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NTgtXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTU1OTpcXHQucHJvYmUgPSBicmNtZl91c2JfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NjAtXFx0LmRpc2Nvbm5lY3QgPSBicmNtZl91c2JfZGlzY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MTkuNDA0NDQ0MzE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU2MjQyMDA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBicmNtZm1hYyBEcml2ZXIgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBicmNtZm1hY2AgZHJpdmVyLCBhbmQgdGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIGZpcm13YXJlIGF2YWlsYWJpbGl0eS4gVGhlIGNvZGUgY2FsbHMgYGJyY21mX2Z3X2dldF9maXJtd2FyZXNgLCBhbmQgaWYgdGhlIGZpcm13YXJlJ3MgbWlzc2luZywgdGhlIHByb2JlIGNvdWxkIGZhaWwgcmlnaHQgdGhlcmUuIFN5emthbGxlciB0aHJvd3Mgc29tZSBkdW1teSBmaXJtd2FyZSBpbWFnZXMgaW50byB0aGUgbWl4LCBidXQgaXQncyBub3QgYSBndWFyYW50ZWUgdGhhdCB0aGUgYGJyY21mbWFjYCBkcml2ZXIgd2lsbCBpbml0aWFsaXplIHByb3Blcmx5LiBJdCBjb3VsZCBiZSB0cnlpbmcgdG8gcGFyc2UgdGhlIGZpcm13YXJlIG9yIHRhbGsgdG8gdGhlIGRldmljZSwgc28gd2UgbmVlZCB0byBhY2NvdW50IGZvciB0aG9zZSBwb3NzaWJpbGl0aWVzLlxuXG5XYWl0LCBTeXprYWxsZXIgaGFzIHByZXR0eSBleHRlbnNpdmUgY292ZXJhZ2UgZm9yIGBicmNtZm1hY2AsIGRvZXNuJ3QgaXQ/IExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBpZiBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIHZpYSB0aGUgZnV6emluZy5cblxuQnV0LCBoYW5nIG9uLCBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgKnBlcmZlY3RseSogcmVhY2hhYmxlLCByaWdodD8gSXQncyByZWFsbHkgYWJvdXQgd2hldGhlciB0aGVyZSBhcmUgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgaW4gdGhlIGRyaXZlciwgYW5kLCBldmVuIGlmIHRoZSBjb3ZlcmFnZSBpc24ndCBwZXJmZWN0LCBpZiBpdCdzIHJlYWNoYWJsZSAqaW4gdGhlb3J5KiAoZS5nLiwgdGhyb3VnaCBVU0IgZnV6emluZyBvciBuZXRsaW5rIGlmIHRoZSBkZXZpY2UgaXMgYXJvdW5kKSwgSSBzaG91bGQganVzdCBtYXJrIGl0IGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblRoZSBpbnN0cnVjdGlvbnMgc3RhdGUsIGV4cGxpY2l0bHksIHRoYXQgaWYgYSBjaGFuZ2UgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGNvZGUgKmNhbiogYmUgZXhlY3V0ZWQgd2l0aCBteSBjb2RlIHNlYXJjaCB0b29scywgYW5kIHRoZW4gbWFyayBpdCBgV29ydGhGdXp6aW5nPXRydWVgLiBJdCdzIHNwZWNpZmljYWxseSBhIHByb2JsZW0gaWYgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGVzcGVjaWFsbHkgd2hlbiB1c2luZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS5cblxuU28sIGlzIGBicmNtZm1hY2AgaW1wb3NzaWJsZSB0byByZWFjaD8gQWJzb2x1dGVseSBub3QuXG5cbldpdGggVVNCIGZ1enppbmcsIHdoaWNoIGNhbiBiZSBkb25lIHdpdGggYSBkdW1teSBIQ0QsIHdlIGNhbiBlbXVsYXRlIHRoZSBVU0IgZGV2aWNlLiBUaGUgZHJpdmVyIHdpbGwgcHJvYmUsIGl0ICptaWdodCogYXNrIGZvciBmaXJtd2FyZS4gVGhhdCdzIHdoZXJlIFN5emthbGxlcidzIGZhdWx0IGluamVjdGlvbiBhbmQgdGhlIGR1bW15IGZpbGVzIGNvbWUgaW4gaGFuZHkuIElmIHRoZSBkcml2ZXIgYWN0dWFsbHkgcGFyc2VzIHRoZSBmaXJtd2FyZSBhbmQgaW5pdGlhbGl6ZXMgdGhlIGRldmljZSwgaXQgbWlnaHQgcmVnaXN0ZXIgdGhlIHdpcGh5LlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGlmIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCBpcyB0aGUgYmVzdCBmdW5jdGlvbiB0byBmb2N1cyBvbiBpbiB0aGlzIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTQxLCJPdXRwdXRUb2tlbnMiOjYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjA4OjI2Ljk2Njg2NzQyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3Njk0NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2NmZzgwMjExX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9MjM2Mz1zdGF0aWMgczMyXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MjM2NDpicmNtZl9jZmc4MDIxMV9jb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTIzNjUtXFx0XFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NTk1Nz1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBicmNtZl9jZmc4MDIxMV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01OTc0LVxcdC5zZXRfcG93ZXJfbWdtdCA9IGJyY21mX2NmZzgwMjExX3NldF9wb3dlcl9tZ210LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjU5NzU6XFx0LmNvbm5lY3QgPSBicmNtZl9jZmc4MDIxMV9jb25uZWN0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTU5NzYtXFx0LmRpc2Nvbm5lY3QgPSBicmNtZl9jZmc4MDIxMV9kaXNjb25uZWN0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjE0Nj1zdGF0aWMgdm9pZCBicmNtZl9jbGVhcl9hc3NvY19pZXMoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MTQ3LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo2MTQ4OlxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjE0OS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTYyOTY9c3RhdGljIHMzMiBicmNtZl9nZXRfYXNzb2NfaWVzKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MzAwLVxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9hc3NvY19pZWxlbl9sZSAqYXNzb2NfaW5mbztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo2MzAxOlxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjMwMi1cXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfZWRjZl9hY3BhcmFtIGVkY2ZfYWNwYXJhbV9pbmZvW0VEQ0ZfQUNfQ09VTlRdO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjM3OD1icmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MzgzLVxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlICpwcm9maWxlID0gXFx1MDAyNmlmcC1cXHUwMDNldmlmLVxcdTAwM2Vwcm9maWxlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjYzODQ6XFx0c3RydWN0IGJyY21mX2NmZzgwMjExX2Nvbm5lY3RfaW5mbyAqY29ubl9pbmZvID0gY2ZnX3RvX2Nvbm4oY2ZnKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02Mzg1LVxcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBjZmdfdG9fd2lwaHkoY2ZnKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTY0NTE9YnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjQ1Ni1cXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfcHJvZmlsZSAqcHJvZmlsZSA9IFxcdTAwMjZpZnAtXFx1MDAzZXZpZi1cXHUwMDNlcHJvZmlsZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo2NDU3OlxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjQ1OC1cXHRzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9yZXNwX3BhcmFtcyBjb25uX3BhcmFtcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MjcuMDI0NTc1MjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTYzMjMyMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIGFmZmVjdGluZyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCwgYGJyY21mX2NvbmZpZ3VyZV93cGFpZWAsIGBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb25gLCBhbmQgYGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbnMsIHNvIEknbSBkZWZpbml0ZWx5IGdvaW5nIHRvIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIGxldCdzIHB1bGwgb3V0IHRoZSBzcGVjaWZpYyBzeW1ib2xzIHRvIGZvY3VzIG9uLiBMb29rcyBsaWtlIHdlJ3ZlIGdvdDogYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLCBgYnJjbWZfY29uZmlndXJlX3dwYWllYCwgYGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZWAsIGBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb25gLiBBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSBhIGZldyBtb2RpZmllZCBmdW5jdGlvbnMgdG8gbm90ZTogYGJyY21mX3AycF9pc19wdWJfYWN0aW9uYCwgYGJyY21mX3AycF9pc19wMnBfYWN0aW9uYCwgYW5kIGBicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lYC5cblxuTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlLi4uIGBCUkNNRk1BQ2AsIGBCUkNNRk1BQ19VU0JgLCBgQlJDTUZNQUNfUENJRWAsIGFuZCBgQlJDTUZNQUNfU0RJT2AuIERvIEkgbmVlZCBhbGwgb2YgdGhlbT8gTm8sIHRoYXQncyBpbmVmZmljaWVudC4gYEJSQ01GTUFDX1VTQmAgaXMgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3Igc3l6a2FsbGVyLCBzbyBsZXQncyBqdXN0IHN0aWNrIHdpdGggYEJSQ01GTUFDYCBhbmQgYEJSQ01GTUFDX1VTQmAgZm9yIG5vdy5cblxuSnVzdCB0byBiZSBzdXJlLCBJIHNob3VsZCBjaGVjayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUgYWJvdXQgYFdMQU5fQUtNX1NVSVRFX1dGQV9EUFBgLiBOb3BlLCBpdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGUsIHNvIHRoYXQncyBnb29kLiBBbHJpZ2h0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGBicmNtZm1hYy9LY29uZmlnYCBmaWxlIG9uZSBtb3JlIHRpbWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMzYsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MzQuMTg3ODExOTQ2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE3MTU4NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSQ01GTUFDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE6Y29uZmlnIEJSQ01GTUFDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjExOmNvbmZpZyBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTItXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE0OmNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNS1cXHRib29sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTc6Y29uZmlnIEJSQ01GTUFDX1NESU9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xOC1cXHRib29sIFxcXCJTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoyOTpjb25maWcgQlJDTUZNQUNfVVNCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0zOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzo0MDpjb25maWcgQlJDTUZNQUNfUENJRVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIlBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MzQuMjg5NTQzOTc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjkzMDU4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgUDJQIEltcGxlbWVudGF0aW9uIHdpdGhpbiBCUkNNRk1BQyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHRoYXQgSSdtIGNvdmVyaW5nIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBQMlAgd2l0aGluIHRoZSBCUkNNRk1BQyBmcmFtZXdvcmssIGFuZCB0aGF0IGluY2x1ZGVzIGJvdGggYEJSQ01GTUFDYCBhbmQgYEJSQ01GTUFDX1VTQmAgYnVpbGRzLiBJIGtub3cgdGhvc2UgYXJlIGtleSBjb21wb25lbnRzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjb3JlIGZ1bmN0aW9uIGNhbGxzLiBJIHdhbnQgdG8gc3BlY2lmaWNhbGx5IGV4YW1pbmUgYGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZWAgYW5kIGBicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lYC4gVGhleSdyZSBsaWtlbHkgaW4gYHAycC5jYCwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhlaXIgaW1wbGVtZW50YXRpb24gYW5kIGludGVyYWN0aW9ucy5cblxuTm93LCBhIGNyaXRpY2FsIHBvaW50OiBpcyB0aGVyZSBhIHNwZWNpZmljLCBkZWRpY2F0ZWQgY29uZmlndXJhdGlvbiBmbGFnIG9yIHNldHRpbmcgd2l0aGluIGJyY21mbWFjIHRoYXQgZ292ZXJucyBQMlAgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUncyBhIGRpc3RpbmN0IGVuYWJsZS9kaXNhYmxlIHN3aXRjaCwgb3IgbWF5YmUgYSBzZXQgb2YgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGJlaGF2aW9yLiBUbyBjbGFyaWZ5IHRoZSBidWlsZCBhbmQgaXRzIHNldHRpbmdzLCBsZXQncyBkbyBhIHF1aWNrIGBncmVwYCBmb3IgYHAycC5jYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGVgIGZpbGUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBjb21wb25lbnQgaXMgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtIGFuZCBhbnkgcG90ZW50aWFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzM3LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjA4OjM4Ljg1ODg1NDQxN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwOTY0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicDJwXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGU9MTM9YnJjbWZtYWMtb2JqcyArPSBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtMTctXFx0XFx0ZndlaC5vIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGU6MTg6XFx0XFx0cDJwLm8gXFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZS0xOS1cXHRcXHRwcm90by5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MzguOTE4OTU5MDg2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTM0MzcwMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gRHJpdmVyIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGUgYEJSQ01GTUFDYCBkcml2ZXIgaGFzIGJlZW4gdXBkYXRlZCwgYW5kIHRoaXMgcGF0Y2ggc2VlbXMgZm9jdXNlZCBvbiBhZGRpbmcgc3VwcG9ydCBmb3IgRFBQIGF1dGhlbnRpY2F0aW9uLiBUaGlzIGlzIGdvaW5nIHRvIGludm9sdmUgY2hhbmdlcyB0byB0aGUgZmlybXdhcmUgc3VwcGxpY2FudCBsb2dpYyB3aXRoaW4gdGhlIGRyaXZlci4gU2luY2UgYEJSQ01GTUFDYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgbW9zdCBsaWtlbHkgdG8gYmUgaW1wYWN0ZWQgYW5kLCB0aGVyZWZvcmUsIHBvdGVudGlhbCB0YXJnZXRzIGZvciBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIHJldmlldyBzdWdnZXN0cyBhIGZldyBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsOiBgYnJjbWZfc2V0X2tleV9tZ210YCwgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLCBgYnJjbWZfY29uZmlndXJlX3dwYWllYCwgYGJyY21mX3AycF9pc19wdWJfYWN0aW9uYCwgYGJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvbmAsIGBicmNtZl9wMnBfaXNfcDJwX2FjdGlvbmAsIGBicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lYCwgYW5kIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgLiBJJ2xsIHNraW0gb3ZlciBgYnJjbWZfdmFsaWRfZHBwX3N1aXRlYCBzaW5jZSBpdCdzIHByb2JhYmx5IHNpbXBsZSwgYnV0IHRoZSBvdGhlcnMgbG9vayBwcm9taXNpbmcuIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCBhbmQgYGJyY21mX2NvbmZpZ3VyZV93cGFpZWAgc3RhbmQgb3V0IGFzIGltcG9ydGFudC4gYGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZWAgaXMgYWxzbyBjcml0aWNhbC5cblxuSSdsbCBkb3VibGUtY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gQWgsIGBDRkc4MDIxMWAgaXMgcmVxdWlyZWQgZm9yIGBCUkNNRk1BQ2AsIHNvIEknbGwgYmUgc3VyZSB0byBpbmNsdWRlIHRoYXQgaW4gbXkgY29uZmlndXJhdGlvbi4gQSBxdWljayBjaGVjayBvZiBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAgaW4gYGNmZzgwMjExLmNgIHJldmVhbHMgaXQncyBhIGNhbGxiYWNrIGZvciB0aGUgYGNmZzgwMjExX29wcy5jb25uZWN0YCBmdW5jdGlvbiwgYW5kIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgIGdldHMgY2FsbGVkIGZyb20gYGJyY21mX2NmZzgwMjExX21nbXRfdHhgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCB3aGljaCBtZWFucyBJIGNhbiBkaXJlY3RseSB0YXJnZXQgdGhlbSB3aXRoIGZ1enppbmcuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkndmUgY29tcGlsZWQgdGhlIGZvbGxvd2luZyBsaXN0IG9mIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiwgYW5kIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbmFsaXR5IGFyb3VuZCBEUFAgYW5kIG1vZGlmaWVzIGV4aXN0aW5nIFAyUCBsb2dpYyBpbiBhIGRyaXZlciB0aGF0J3MgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBhbmQgVVNCLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cblxuSGVyZSBpcyB0aGUgZGF0YTpcblxuYFdvcnRoRnV6emluZzogdHJ1ZWBcblxuYEZvY3VzU3ltYm9sczpgXG4tIGBicmNtZl9zZXRfa2V5X21nbXRgXG4tIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YFxuLSBgYnJjbWZfY29uZmlndXJlX3dwYWllYFxuLSBgYnJjbWZfcDJwX2lzX3B1Yl9hY3Rpb25gXG4tIGBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb25gXG4tIGBicmNtZl9wMnBfaXNfcDJwX2FjdGlvbmBcbi0gYGJyY21mX3AycF9hYm9ydF9hY3Rpb25fZnJhbWVgXG4tIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgXG5cbmBFbmFibGVDb25maWdzOmBcbi0gYEJSQ01GTUFDYFxuLSBgQlJDTUZNQUNfVVNCYFxuLSBgQ0ZHODAyMTFgXG5cbmBSZWFzb25pbmc6YCBUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEUFAgYXV0aGVudGljYXRpb24gYW5kIG1vZGlmaWVzIHRoZSBmaXJtd2FyZSBzdXBwbGljYW50IGxvZ2ljIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChicmNtZm1hYykuIEl0IGFsc28gdXBkYXRlcyBQMlAgYWN0aW9uIGZyYW1lIGhhbmRsaW5nIHRvIHN1cHBvcnQgRFBQIHB1YmxpYyBhY3Rpb24gZnJhbWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBkcml2ZXIncyBjZmc4MDIxMSBjYWxsYmFja3MgYW5kIFAyUCBsb2dpYywgd2hpY2ggY2FuIGJlIHJlYWNoZWQgdmlhIG5ldGxpbmsgY29tbWFuZHMgYW5kIFVTQiBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM1OCwiT3V0cHV0VG9rZW5zIjoyNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6NTAuODUzMzMyMjQ0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcxMjQ4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19VU0JcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJjbWZfc2V0X2tleV9tZ210XCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9jb25uZWN0XCIsXG4gICAgXCJicmNtZl9jb25maWd1cmVfd3BhaWVcIixcbiAgICBcImJyY21mX3AycF9pc19wdWJfYWN0aW9uXCIsXG4gICAgXCJicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb25cIixcbiAgICBcImJyY21mX3AycF9pc19wMnBfYWN0aW9uXCIsXG4gICAgXCJicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lXCIsXG4gICAgXCJicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIERQUCBhdXRoZW50aWNhdGlvbiBhbmQgbW9kaWZpZXMgdGhlIGZpcm13YXJlIHN1cHBsaWNhbnQgbG9naWMgaW4gdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKS4gSXQgYWxzbyB1cGRhdGVzIFAyUCBhY3Rpb24gZnJhbWUgaGFuZGxpbmcgdG8gc3VwcG9ydCBEUFAgcHVibGljIGFjdGlvbiBmcmFtZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGRyaXZlcidzIGNmZzgwMjExIGNhbGxiYWNrcyBhbmQgUDJQIGxvZ2ljLCB3aGljaCBjYW4gYmUgcmVhY2hlZCB2aWEgbmV0bGluayBjb21tYW5kcyBhbmQgVVNCIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicmNtZl9zZXRfa2V5X21nbXRcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2Nvbm5lY3RcIixcbiAgICBcImJyY21mX2NvbmZpZ3VyZV93cGFpZVwiLFxuICAgIFwiYnJjbWZfcDJwX2lzX3B1Yl9hY3Rpb25cIixcbiAgICBcImJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvblwiLFxuICAgIFwiYnJjbWZfcDJwX2lzX3AycF9hY3Rpb25cIixcbiAgICBcImJyY21mX3AycF9hYm9ydF9hY3Rpb25fZnJhbWVcIixcbiAgICBcImJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRFBQIGF1dGhlbnRpY2F0aW9uIGFuZCBtb2RpZmllcyB0aGUgZmlybXdhcmUgc3VwcGxpY2FudCBsb2dpYyBpbiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlciAoYnJjbWZtYWMpLiBJdCBhbHNvIHVwZGF0ZXMgUDJQIGFjdGlvbiBmcmFtZSBoYW5kbGluZyB0byBzdXBwb3J0IERQUCBwdWJsaWMgYWN0aW9uIGZyYW1lcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZHJpdmVyJ3MgY2ZnODAyMTEgY2FsbGJhY2tzIGFuZCBQMlAgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBVU0IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowsvd7p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 15:35:29 +0000 UTC FinishedAt: 2026-07-08 16:08:51 +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": "5cb5575308bce9d63178fe943bf89c520a348808", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRCMFMAC", "BRCMFMAC_USB", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "5cb5575308bce9d63178fe943bf89c520a348808", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRCMFMAC", "BRCMFMAC_USB", "CFG80211" ], "series_id": "4bce7538-ef98-4ac6-9cc5-1a5f7f73f03a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "brcmf_set_key_mgmt", "brcmf_cfg80211_connect", "brcmf_configure_wpaie", "brcmf_p2p_is_pub_action", "brcmf_p2p_is_dpp_pub_action", "brcmf_p2p_is_p2p_action", "brcmf_p2p_abort_action_frame", "brcmf_p2p_send_action_frame" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyY21mX3NldF9rZXlfbWdtdCYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9jb25uZWN0JiMzNDssCiAgICAmIzM0O2JyY21mX2NvbmZpZ3VyZV93cGFpZSYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfaXNfcHViX2FjdGlvbiYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24mIzM0OywKICAgICYjMzQ7YnJjbWZfcDJwX2lzX3AycF9hY3Rpb24mIzM0OywKICAgICYjMzQ7YnJjbWZfcDJwX2Fib3J0X2FjdGlvbl9mcmFtZSYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEUFAgYXV0aGVudGljYXRpb24gYW5kIG1vZGlmaWVzIHRoZSBmaXJtd2FyZSBzdXBwbGljYW50IGxvZ2ljIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChicmNtZm1hYykuIEl0IGFsc28gdXBkYXRlcyBQMlAgYWN0aW9uIGZyYW1lIGhhbmRsaW5nIHRvIHN1cHBvcnQgRFBQIHB1YmxpYyBhY3Rpb24gZnJhbWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBkcml2ZXImIzM5O3MgY2ZnODAyMTEgY2FsbGJhY2tzIGFuZCBQMlAgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNjowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY2Y2JiNzdmMjg5ZjVkNmY3Njg1ZjE1MTM3YmY2YWI2MmVkMzlhZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDE2OjA3OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbmluZGV4IDRiNzA4NDVlMWEyNjQzLi5kNjFjM2UwM2ExMDZhNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2NmZzgwMjExLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5AQCAtMjE1NCw2ICYjNDM7MjE1NSw5IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpXG4gXHRcdFx0dmFsID0gV1BBMl9BVVRIX1BTSyB8IFdQQTJfQVVUSF9GVDtcbiBcdFx0XHRwcm9maWxlLVx1MDAzZWlzX2Z0ID0gdHJ1ZTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfV0ZBX0RQUDpcbiYjNDM7XHRcdFx0dmFsID0gV0ZBX0FVVEhfRFBQO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDtpbnZhbGlkIGFrbSBzdWl0ZSAoJWQpXFxuXCYjMzQ7LFxuIFx0XHRcdFx0IHNtZS1cdTAwM2VjcnlwdG8uYWttX3N1aXRlc1swXSk7XG5AQCAtMjQ2Niw0MyAmIzQzOzI0NzAsNTAgQEAgYnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdFx0Z290byBkb25lO1xuIFx0fVxuIFxuLVx0aWYgKHNtZS1cdTAwM2VjcnlwdG8ucHNrIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfU0FFKSB7XG4tXHRcdGlmIChXQVJOX09OKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkpIHtcbi1cdFx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0XHRcdGdvdG8gZG9uZTtcbi1cdFx0fVxuLVx0XHRicmNtZl9kYmcoSU5GTywgXCYjMzQ7dXNpbmcgUFNLIG9mZmxvYWRcXG5cJiMzNDspO1xuLVx0XHRwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLO1xuLVx0fVxuLVxuLVx0aWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkge1xuLVx0XHQvKiBlbmFibGUgZmlybXdhcmUgc3VwcGxpY2FudCBmb3IgdGhpcyBpbnRlcmZhY2UgKi9cbi1cdFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2ludF9zZXQoaWZwLCBcJiMzNDtzdXBfd3BhXCYjMzQ7LCAxKTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLVx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgZncgc3VwcGxpY2FudFxcblwmIzM0Oyk7XG4tXHRcdFx0Z290byBkb25lO1xuJiM0MztcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX0ZXU1VQKSkge1xuJiM0MztcdFx0dTMyIGFrbSA9IHNtZS1cdTAwM2VjcnlwdG8ubl9ha21fc3VpdGVzID8gc21lLVx1MDAzZWNyeXB0by5ha21fc3VpdGVzWzBdIDogMDtcbiYjNDM7XHRcdGJvb2wgaXNfc2FlX2FrbSA9IGFrbSA9PSBXTEFOX0FLTV9TVUlURV9TQUUgfHxcbiYjNDM7XHRcdFx0YWttID09IFdMQU5fQUtNX1NVSVRFX0ZUX09WRVJfU0FFO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzbWUtXHUwMDNlY3J5cHRvLnBzayBcdTAwMjZcdTAwMjYgIWlzX3NhZV9ha20gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcbiYjNDM7XHRcdFx0aWYgKFdBUk5fT04ocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT1cbiYjNDM7XHRcdFx0XHQgICAgQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSkge1xuJiM0MztcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0Z290byBkb25lO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGJyY21mX2RiZyhJTkZPLCBcJiMzNDt1c2luZyBQU0sgb2ZmbG9hZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4gXHRcdH1cbi1cdH1cbi1cbi1cdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSylcbi1cdFx0ZXJyID0gYnJjbWZfc2V0X3BtayhpZnAsIHNtZS1cdTAwM2VjcnlwdG8ucHNrLFxuLVx0XHRcdFx0ICAgIEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pO1xuLVx0ZWxzZSBpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcbi1cdFx0LyogY2xlYW4gdXAgdXNlci1zcGFjZSBSU05FICovXG4tXHRcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O3dwYWllXCYjMzQ7LCBOVUxMLCAwKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2ZhaWxlZCB0byBjbGVhbiB1cCB1c2VyLXNwYWNlIFJTTkVcXG5cJiMzNDspO1xuLVx0XHRcdGdvdG8gZG9uZTtcbiYjNDM7XHRcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpIHtcbiYjNDM7XHRcdFx0LyogZW5hYmxlIGZpcm13YXJlIHN1cHBsaWNhbnQgZm9yIHRoaXMgaW50ZXJmYWNlICovXG4mIzQzO1x0XHRcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9pbnRfc2V0KGlmcCwgXCYjMzQ7c3VwX3dwYVwmIzM0OywgMSk7XG4mIzQzO1x0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGZ3IHN1cHBsaWNhbnRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdGdvdG8gZG9uZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2ludF9zZXQoaWZwLCBcJiMzNDtzdXBfd3BhXCYjMzQ7LCAwKTtcbiBcdFx0fVxuLVx0XHRlcnIgPSBicmNtZl9md3ZpZF9zZXRfc2FlX3Bhc3N3b3JkKGlmcCwgXHUwMDI2c21lLVx1MDAzZWNyeXB0byk7XG4tXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBzbWUtXHUwMDNlY3J5cHRvLnBzaylcbiYjNDM7XHRcdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSylcbiBcdFx0XHRlcnIgPSBicmNtZl9zZXRfcG1rKGlmcCwgc21lLVx1MDAzZWNyeXB0by5wc2ssXG4gXHRcdFx0XHRcdCAgICBCUkNNRl9XU0VDX01BWF9QU0tfTEVOKTtcbiYjNDM7XHRcdGVsc2UgaWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfU0FFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgc21lLVx1MDAzZWNyeXB0by5zYWVfcHdkIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9TQUUpKSB7XG4mIzQzO1x0XHRcdC8qIGNsZWFuIHVwIHVzZXItc3BhY2UgUlNORSAqL1xuJiM0MztcdFx0XHRpZiAoYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7d3BhaWVcJiMzNDssIE5VTEwsIDApKSB7XG4mIzQzO1x0XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7ZmFpbGVkIHRvIGNsZWFuIHVwIHVzZXItc3BhY2UgUlNORVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0Z290byBkb25lO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGVyciA9IGJyY21mX2Z3dmlkX3NldF9zYWVfcGFzc3dvcmQoaWZwLCBcdTAwMjZzbWUtXHUwMDNlY3J5cHRvKTtcbiYjNDM7XHRcdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHNtZS1cdTAwM2VjcnlwdG8ucHNrKVxuJiM0MztcdFx0XHRcdGVyciA9IGJyY21mX3NldF9wbWsoaWZwLCBzbWUtXHUwMDNlY3J5cHRvLnBzayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBkb25lO1xuIFx0fVxuLVx0aWYgKGVycilcbi1cdFx0Z290byBkb25lO1xuLVxuIFx0LyogSm9pbiB3aXRoIHNwZWNpZmljIEJTU0lEIGFuZCBjYWNoZWQgU1NJRFxuIFx0ICogSWYgU1NJRCBpcyB6ZXJvIGpvaW4gYmFzZWQgb24gQlNTSUQgb25seVxuIFx0ICovXG5AQCAtNDUxOSw2ICYjNDM7NDUzMCwxMSBAQCBzdGF0aWMgYm9vbCBicmNtZl92YWxpZF93cGFfb3VpKHU4ICpvdWksIGJvb2wgaXNfcnNuX2llKVxuIFx0cmV0dXJuIChtZW1jbXAob3VpLCBXUEFfT1VJLCBUTFZfT1VJX0xFTikgPT0gMCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBicmNtZl92YWxpZF9kcHBfc3VpdGUodTggKm91aSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBnZXRfdW5hbGlnbmVkX2JlMzIob3VpKSA9PSBXTEFOX0FLTV9TVUlURV9XRkFfRFBQO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzMzJcbiBicmNtZl9jb25maWd1cmVfd3BhaWUoc3RydWN0IGJyY21mX2lmICppZnAsXG4gXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicmNtZl92c190bHYgKndwYV9pZSxcbkBAIC00NjMyLDQyICYjNDM7NDY0OCw0NyBAQCBicmNtZl9jb25maWd1cmVfd3BhaWUoc3RydWN0IGJyY21mX2lmICppZnAsXG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoIWJyY21mX3ZhbGlkX3dwYV9vdWkoXHUwMDI2ZGF0YVtvZmZzZXRdLCBpc19yc25faWUpKSB7XG4mIzQzO1x0XHRpZiAoYnJjbWZfdmFsaWRfZHBwX3N1aXRlKFx1MDAyNmRhdGFbb2Zmc2V0XSkpIHtcbiYjNDM7XHRcdFx0d3BhX2F1dGggfD0gV0ZBX0FVVEhfRFBQO1xuJiM0MztcdFx0XHRvZmZzZXQgJiM0Mzs9IFRMVl9PVUlfTEVOO1xuJiM0MztcdFx0fSBlbHNlIGlmIChicmNtZl92YWxpZF93cGFfb3VpKFx1MDAyNmRhdGFbb2Zmc2V0XSwgaXNfcnNuX2llKSkge1xuJiM0MztcdFx0XHRvZmZzZXQgJiM0Mzs9IFRMVl9PVUlfTEVOO1xuJiM0MztcdFx0XHRzd2l0Y2ggKGRhdGFbb2Zmc2V0XSkge1xuJiM0MztcdFx0XHRjYXNlIFJTTl9BS01fTk9ORTpcbiYjNDM7XHRcdFx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O1JTTl9BS01fTk9ORVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0d3BhX2F1dGggfD0gV1BBX0FVVEhfTk9ORTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0Y2FzZSBSU05fQUtNX1VOU1BFQ0lGSUVEOlxuJiM0MztcdFx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7UlNOX0FLTV9VTlNQRUNJRklFRFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0aXNfcnNuX2llID9cbiYjNDM7XHRcdFx0XHRcdCh3cGFfYXV0aCB8PSBXUEEyX0FVVEhfVU5TUEVDSUZJRUQpIDpcbiYjNDM7XHRcdFx0XHRcdCh3cGFfYXV0aCB8PSBXUEFfQVVUSF9VTlNQRUNJRklFRCk7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGNhc2UgUlNOX0FLTV9QU0s6XG4mIzQzO1x0XHRcdFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtSU05fQUtNX1BTS1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0aXNfcnNuX2llID8gKHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0spIDpcbiYjNDM7XHRcdFx0XHRcdCAgICAod3BhX2F1dGggfD0gV1BBX0FVVEhfUFNLKTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0Y2FzZSBSU05fQUtNX1NIQTI1Nl9QU0s6XG4mIzQzO1x0XHRcdFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtSU05fQUtNX01GUF9QU0tcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0tfU0hBMjU2O1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRjYXNlIFJTTl9BS01fU0hBMjU2XzFYOlxuJiM0MztcdFx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7UlNOX0FLTV9NRlBfMVhcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdHdwYV9hdXRoIHw9IFdQQTJfQVVUSF8xWF9TSEEyNTY7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGNhc2UgUlNOX0FLTV9TQUU6XG4mIzQzO1x0XHRcdFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtSU05fQUtNX1NBRVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0d3BhX2F1dGggfD0gV1BBM19BVVRIX1NBRV9QU0s7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7SW52YWxpZCBrZXkgbWdtdCBpbmZvXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiBcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2ludmFsaWQgT1VJXFxuXCYjMzQ7KTtcbiBcdFx0XHRnb3RvIGV4aXQ7XG4gXHRcdH1cbi1cdFx0b2Zmc2V0ICYjNDM7PSBUTFZfT1VJX0xFTjtcbi1cdFx0c3dpdGNoIChkYXRhW29mZnNldF0pIHtcbi1cdFx0Y2FzZSBSU05fQUtNX05PTkU6XG4tXHRcdFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtSU05fQUtNX05PTkVcXG5cJiMzNDspO1xuLVx0XHRcdHdwYV9hdXRoIHw9IFdQQV9BVVRIX05PTkU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgUlNOX0FLTV9VTlNQRUNJRklFRDpcbi1cdFx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O1JTTl9BS01fVU5TUEVDSUZJRURcXG5cJiMzNDspO1xuLVx0XHRcdGlzX3Jzbl9pZSA/ICh3cGFfYXV0aCB8PSBXUEEyX0FVVEhfVU5TUEVDSUZJRUQpIDpcbi1cdFx0XHRcdCAgICAod3BhX2F1dGggfD0gV1BBX0FVVEhfVU5TUEVDSUZJRUQpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJTTl9BS01fUFNLOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7UlNOX0FLTV9QU0tcXG5cJiMzNDspO1xuLVx0XHRcdGlzX3Jzbl9pZSA/ICh3cGFfYXV0aCB8PSBXUEEyX0FVVEhfUFNLKSA6XG4tXHRcdFx0XHQgICAgKHdwYV9hdXRoIHw9IFdQQV9BVVRIX1BTSyk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgUlNOX0FLTV9TSEEyNTZfUFNLOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7UlNOX0FLTV9NRlBfUFNLXFxuXCYjMzQ7KTtcbi1cdFx0XHR3cGFfYXV0aCB8PSBXUEEyX0FVVEhfUFNLX1NIQTI1Njtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBSU05fQUtNX1NIQTI1Nl8xWDpcbi1cdFx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O1JTTl9BS01fTUZQXzFYXFxuXCYjMzQ7KTtcbi1cdFx0XHR3cGFfYXV0aCB8PSBXUEEyX0FVVEhfMVhfU0hBMjU2O1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJTTl9BS01fU0FFOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7UlNOX0FLTV9TQUVcXG5cJiMzNDspO1xuLVx0XHRcdHdwYV9hdXRoIHw9IFdQQTNfQVVUSF9TQUVfUFNLO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O0ludmFsaWQga2V5IG1nbXQgaW5mb1xcblwmIzM0Oyk7XG4tXHRcdH1cbiBcdFx0b2Zmc2V0JiM0MzsmIzQzOztcbiBcdH1cbiBcbkBAIC00Njg3LDEwICYjNDM7NDcwOCwxMiBAQCBicmNtZl9jb25maWd1cmVfd3BhaWUoc3RydWN0IGJyY21mX2lmICppZnAsXG4gXHRcdFx0XHQgKi9cbiBcdFx0XHRcdGlmICghKHdwYV9hdXRoIFx1MDAyNiAoV1BBMl9BVVRIX1BTS19TSEEyNTYgfFxuIFx0XHRcdFx0XHRcdCAgV1BBMl9BVVRIXzFYX1NIQTI1NiB8XG4mIzQzO1x0XHRcdFx0XHRcdCAgV0ZBX0FVVEhfRFBQIHxcbiBcdFx0XHRcdFx0XHQgIFdQQTNfQVVUSF9TQUVfUFNLKSkpIHtcbiBcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0XHRcdFx0Z290byBleGl0O1xuIFx0XHRcdFx0fVxuJiM0MztcbiBcdFx0XHRcdC8qIEZpcm13YXJlIGhhcyByZXF1aXJlbWVudCB0aGF0IFdQQTJfQVVUSF9QU0svXG4gXHRcdFx0XHQgKiBXUEEyX0FVVEhfVU5TUEVDSUZJRUQgYmUgc2V0LCBpZiBTSEEyNTYgT1VJXG4gXHRcdFx0XHQgKiBpcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgcnNuIGllLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuY1xuaW5kZXggNmUwYzkwZjQ3MThiNTguLjJjMWY1MmVkNTEzODAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmNcbkBAIC02LDYgJiM0Mzs2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9jZmc4MDIxMS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYnJjbXVfd2lmaS5oXHUwMDNlXG5AQCAtNDQsOSAmIzQzOzQ1LDYgQEBcbiBcbiAjZGVmaW5lIEJSQ01GX1NDQl9USU1FT1VUX1ZBTFVFXHQyMFxuIFxuLSNkZWZpbmUgUDJQX1ZFUlx0XHRcdDlcdC8qIFAyUCB2ZXJzaW9uOiA5PVdpRmkgUDJQIHYxLjAgKi9cbi0jZGVmaW5lIFAyUF9QVUJfQUZfQ0FURUdPUllcdDB4MDRcbi0jZGVmaW5lIFAyUF9QVUJfQUZfQUNUSU9OXHQweDA5XG4gI2RlZmluZSBQMlBfQUZfQ0FURUdPUllcdFx0MHg3ZlxuICNkZWZpbmUgUDJQX09VSVx0XHRcdFwmIzM0O1xceDUwXFx4NkZcXHg5QVwmIzM0O1x0LyogUDJQIE9VSSAqL1xuICNkZWZpbmUgUDJQX09VSV9MRU5cdFx0M1x0XHQvKiBQMlAgT1VJIGxlbmd0aCAqL1xuQEAgLTE0MywxMCAmIzQzOzE0MSwxMCBAQCBzdHJ1Y3QgYnJjbWZfcDJwX3NjYW5fbGUge1xuIC8qKlxuICAqIHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSAtIFdpRmkgUDJQIFB1YmxpYyBBY3Rpb24gRnJhbWVcbiAgKlxuLSAqIEBjYXRlZ29yeTogUDJQX1BVQl9BRl9DQVRFR09SWVxuLSAqIEBhY3Rpb246IFAyUF9QVUJfQUZfQUNUSU9OXG4mIzQzOyAqIEBjYXRlZ29yeTogV0xBTl9DQVRFR09SWV9QVUJMSUNcbiYjNDM7ICogQGFjdGlvbjogV0xBTl9QVUJfQUNUSU9OX1ZFTkRPUl9TUEVDSUZJQ1xuICAqIEBvdWk6IFAyUF9PVUlcbi0gKiBAb3VpX3R5cGU6IE9VSSB0eXBlIC0gUDJQX1ZFUlxuJiM0MzsgKiBAb3VpX3R5cGU6IE9VSSB0eXBlIC0gV0xBTl9PVUlfVFlQRV9XRkFfUDJQXG4gICogQHN1YnR5cGU6IE9VSSBzdWJ0eXBlIC0gUDJQX1RZUEVfKlxuICAqIEBkaWFsb2dfdG9rZW46IG5vbnplcm8sIGlkZW50aWZpZXMgcmVxL3JzcCB0cmFuc2FjdGlvblxuICAqIEBlbHRzOiBWYXJpYWJsZSBsZW5ndGggaW5mb3JtYXRpb24gZWxlbWVudHMuXG5AQCAtMTY2LDcgJiM0MzsxNjQsNyBAQCBzdHJ1Y3QgYnJjbWZfcDJwX3B1Yl9hY3RfZnJhbWUge1xuICAqXG4gICogQGNhdGVnb3J5OiBQMlBfQUZfQ0FURUdPUllcbiAgKiBAb3VpOiBPVUkgLSBQMlBfT1VJXG4tICogQHR5cGU6IE9VSSBUeXBlIC0gUDJQX1ZFUlxuJiM0MzsgKiBAdHlwZTogT1VJIFR5cGUgLSBXTEFOX09VSV9UWVBFX1dGQV9QMlBcbiAgKiBAc3VidHlwZTogT1VJIFN1YnR5cGUgLSBQMlBfQUZfKlxuICAqIEBkaWFsb2dfdG9rZW46IG5vbnplcm8sIGlkZW50aWZpZXMgcmVxL3Jlc3AgdHJhbmFjdGlvblxuICAqIEBlbHRzOiBWYXJpYWJsZSBsZW5ndGggaW5mb3JtYXRpb24gZWxlbWVudHMuXG5AQCAtMjI4LDEwICYjNDM7MjI2LDM4IEBAIHN0YXRpYyBib29sIGJyY21mX3AycF9pc19wdWJfYWN0aW9uKHZvaWQgKmZyYW1lLCB1MzIgZnJhbWVfbGVuKVxuIFx0aWYgKGZyYW1lX2xlbiBcdTAwM2Mgc2l6ZW9mKCpwYWN0X2ZybSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChwYWN0X2ZybS1cdTAwM2VjYXRlZ29yeSA9PSBQMlBfUFVCX0FGX0NBVEVHT1JZIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHBhY3RfZnJtLVx1MDAzZWFjdGlvbiA9PSBQMlBfUFVCX0FGX0FDVElPTiBcdTAwMjZcdTAwMjZcbi1cdCAgICBwYWN0X2ZybS1cdTAwM2VvdWlfdHlwZSA9PSBQMlBfVkVSIFx1MDAyNlx1MDAyNlxuLVx0ICAgIG1lbWNtcChwYWN0X2ZybS1cdTAwM2VvdWksIFAyUF9PVUksIFAyUF9PVUlfTEVOKSA9PSAwKVxuJiM0MztcdGlmIChwYWN0X2ZybS1cdTAwM2VjYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGFjdF9mcm0tXHUwMDNlYWN0aW9uID09IFdMQU5fUFVCX0FDVElPTl9WRU5ET1JfU1BFQ0lGSUMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBhY3RfZnJtLVx1MDAzZW91aV90eXBlID09IFdMQU5fT1VJX1RZUEVfV0ZBX1AyUCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgZ2V0X3VuYWxpZ25lZF9iZTI0KHBhY3RfZnJtLVx1MDAzZW91aSkgPT0gV0xBTl9PVUlfV0ZBKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvbigpIC0gdHJ1ZSBpZiBkcHAgcHVibGljIHR5cGUgZnJhbWUuXG4mIzQzOyAqXG4mIzQzOyAqIEBmcmFtZTogYWN0aW9uIGZyYW1lIGRhdGEuXG4mIzQzOyAqIEBmcmFtZV9sZW46IGxlbmd0aCBvZiBhY3Rpb24gZnJhbWUgZGF0YS5cbiYjNDM7ICpcbiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFjdGlvbiBmcmFtZSBpcyBkcHAgcHVibGljIGFjdGlvbiB0eXBlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24odm9pZCAqZnJhbWUsIHUzMiBmcmFtZV9sZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnJjbWZfcDJwX3B1Yl9hY3RfZnJhbWUgKnBhY3RfZnJtO1xuJiM0MztcbiYjNDM7XHRpZiAoIWZyYW1lKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRwYWN0X2ZybSA9IChzdHJ1Y3QgYnJjbWZfcDJwX3B1Yl9hY3RfZnJhbWUgKilmcmFtZTtcbiYjNDM7XHRpZiAoZnJhbWVfbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IGJyY21mX3AycF9wdWJfYWN0X2ZyYW1lKSAtIDEpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChwYWN0X2ZybS1cdTAwM2VjYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGFjdF9mcm0tXHUwMDNlYWN0aW9uID09IFdMQU5fUFVCX0FDVElPTl9WRU5ET1JfU1BFQ0lGSUMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBhY3RfZnJtLVx1MDAzZW91aV90eXBlID09IFdMQU5fT1VJX1RZUEVfV0ZBX0RQUCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgZ2V0X3VuYWxpZ25lZF9iZTI0KHBhY3RfZnJtLVx1MDAzZW91aSkgPT0gV0xBTl9PVUlfV0ZBKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdHJldHVybiBmYWxzZTtcbkBAIC0yNTcsNyAmIzQzOzI4Myw3IEBAIHN0YXRpYyBib29sIGJyY21mX3AycF9pc19wMnBfYWN0aW9uKHZvaWQgKmZyYW1lLCB1MzIgZnJhbWVfbGVuKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoYWN0X2ZybS1cdTAwM2VjYXRlZ29yeSA9PSBQMlBfQUZfQ0FURUdPUlkgXHUwMDI2XHUwMDI2XG4tXHQgICAgYWN0X2ZybS1cdTAwM2V0eXBlICA9PSBQMlBfVkVSIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBhY3RfZnJtLVx1MDAzZXR5cGUgID09IFdMQU5fT1VJX1RZUEVfV0ZBX1AyUCBcdTAwMjZcdTAwMjZcbiBcdCAgICBtZW1jbXAoYWN0X2ZybS1cdTAwM2VvdWksIFAyUF9PVUksIFAyUF9PVUlfTEVOKSA9PSAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbkBAIC0xMjgxLDYgJiM0MzsxMzA3LDkgQEAgc3RhdGljIHMzMiBicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcpXG4gXHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O0VudGVyXFxuXCYjMzQ7KTtcbiBcbiBcdHZpZiA9IHAycC1cdTAwM2Vic3NfaWR4W1AyUEFQSV9CU1NDRkdfREVWSUNFXS52aWY7XG4mIzQzO1x0aWYgKCF2aWYpXG4mIzQzO1x0XHR2aWYgPSBwMnAtXHUwMDNlYnNzX2lkeFtQMlBBUElfQlNTQ0ZHX1BSSU1BUlldLnZpZjtcbiYjNDM7XG4gXHRlcnIgPSBicmNtZl9maWxfYnNzY2ZnX2RhdGFfc2V0KHZpZi1cdTAwM2VpZnAsIFwmIzM0O2FjdGZyYW1lX2Fib3J0XCYjMzQ7LCBcdTAwMjZpbnRfdmFsLFxuIFx0XHRcdFx0XHRzaXplb2YoczMyKSk7XG4gXHRpZiAoZXJyKVxuQEAgLTE3ODksNyAmIzQzOzE4MTgsOSBAQCBib29sIGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmIChicmNtZl9wMnBfaXNfcDJwX2FjdGlvbihhY3Rpb25fZnJhbWUtXHUwMDNlZGF0YSxcbi1cdFx0XHRcdFx0ICAgYWN0aW9uX2ZyYW1lX2xlbikpIHtcbiYjNDM7XHRcdFx0XHRcdCAgIGFjdGlvbl9mcmFtZV9sZW4pIHx8XG4mIzQzO1x0XHQgICBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24oYWN0aW9uX2ZyYW1lLVx1MDAzZWRhdGEsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgYWN0aW9uX2ZyYW1lX2xlbikpIHtcbiBcdFx0LyogZG8gbm90IGNvbmZpZ3VyZSBhbnl0aGluZy4gaXQgd2lsbCBiZSAqL1xuIFx0XHQvKiBzZW50IHdpdGggYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gICAgICovXG4gXHR9IGVsc2Uge1xuQEAgLTE4MjYsNiAmIzQzOzE4NTcsNyBAQCBib29sIGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxuIFx0LyogdmFsaWRhdGUgY2hhbm5lbCBhbmQgcDJwIGllcyAqL1xuIFx0aWYgKGNvbmZpZ19hZl9wYXJhbXMuc2VhcmNoX2NoYW5uZWwgXHUwMDI2XHUwMDI2XG4gXHQgICAgSVNfUDJQX1NPQ0lBTF9DSEFOTkVMKGxlMzJfdG9fY3B1KGFmX3BhcmFtcy1cdTAwM2VjaGFubmVsKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHAycC1cdTAwM2Vic3NfaWR4W1AyUEFQSV9CU1NDRkdfREVWSUNFXS52aWYgXHUwMDI2XHUwMDI2XG4gXHQgICAgcDJwLVx1MDAzZWJzc19pZHhbUDJQQVBJX0JTU0NGR19ERVZJQ0VdLnZpZi1cdTAwM2VzYXZlZF9pZS5wcm9iZV9yZXFfaWVfbGVuKSB7XG4gXHRcdGFmeF9oZGwgPSBcdTAwMjZwMnAtXHUwMDNlYWZ4X2hkbDtcbiBcdFx0YWZ4X2hkbC1cdTAwM2VwZWVyX2xpc3Rlbl9jaGFuID0gbGUzMl90b19jcHUoYWZfcGFyYW1zLVx1MDAzZWNoYW5uZWwpO1xuQEAgLTI1NDMsNCAmIzQzOzI1NzUsMyBAQCB2b2lkIGJyY21mX3AycF9kZXRhY2goc3RydWN0IGJyY21mX3AycF9pbmZvICpwMnApXG4gXHQvKiBqdXN0IHNldCBpdCBhbGwgdG8gemVybyAqL1xuIFx0bWVtc2V0KHAycCwgMCwgc2l6ZW9mKCpwMnApKTtcbiB9XG4tXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oXG5pbmRleCA3NTUyYmRiOTE5OTFjZS4uYzQ2NTIwOGM0MzMxODIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvaW5jbHVkZS9icmNtdV93aWZpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9pbmNsdWRlL2JyY211X3dpZmkuaFxuQEAgLTIzMyw2ICYjNDM7MjMzLDggQEAgc3RhdGljIGlubGluZSBib29sIGFjX2JpdG1hcF90c3QodTggYml0bWFwLCBpbnQgcHJlYylcbiBcbiAjZGVmaW5lIFdQQTNfQVVUSF9TQUVfUFNLXHQweDQwMDAwXHQvKiBTQUUgd2l0aCA0LXdheSBoYW5kc2hha2UgKi9cbiBcbiYjNDM7I2RlZmluZSBXRkFfQVVUSF9EUFBcdFx0MHgyMDAwMDAgLyogV0ZBIERQUCBBVVRIICovXG4mIzQzO1xuICNkZWZpbmUgRE9UMTFfREVGQVVMVF9SVFNfTEVOXHRcdDIzNDdcbiAjZGVmaW5lIERPVDExX0RFRkFVTFRfRlJBR19MRU5cdFx0MjM0NlxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyY21mX3NldF9rZXlfbWdtdCYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9jb25uZWN0JiMzNDssCiAgICAmIzM0O2JyY21mX2NvbmZpZ3VyZV93cGFpZSYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfaXNfcHViX2FjdGlvbiYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24mIzM0OywKICAgICYjMzQ7YnJjbWZfcDJwX2lzX3AycF9hY3Rpb24mIzM0OywKICAgICYjMzQ7YnJjbWZfcDJwX2Fib3J0X2FjdGlvbl9mcmFtZSYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEUFAgYXV0aGVudGljYXRpb24gYW5kIG1vZGlmaWVzIHRoZSBmaXJtd2FyZSBzdXBwbGljYW50IGxvZ2ljIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChicmNtZm1hYykuIEl0IGFsc28gdXBkYXRlcyBQMlAgYWN0aW9uIGZyYW1lIGhhbmRsaW5nIHRvIHN1cHBvcnQgRFBQIHB1YmxpYyBhY3Rpb24gZnJhbWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBkcml2ZXImIzM5O3MgY2ZnODAyMTEgY2FsbGJhY2tzIGFuZCBQMlAgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjZjYmI3N2YyODlmNWQ2Zjc2ODVmMTUxMzdiZjZhYjYyZWQzOWFlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDggMTY6MDc6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jCmluZGV4IDRiNzA4NDVlMWEyNjQzLi5kNjFjM2UwM2ExMDZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aGVyZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvY2ZnODAyMTEuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0bGluay5oJmd0OwpAQCAtMjE1NCw2ICYjNDM7MjE1NSw5IEBAIGJyY21mX3NldF9rZXlfbWdtdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpCiAJCQl2YWwgPSBXUEEyX0FVVEhfUFNLIHwgV1BBMl9BVVRIX0ZUOwogCQkJcHJvZmlsZS0mZ3Q7aXNfZnQgPSB0cnVlOwogCQkJYnJlYWs7CiYjNDM7CQljYXNlIFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA6CiYjNDM7CQkJdmFsID0gV0ZBX0FVVEhfRFBQOwomIzQzOwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnBoeV9lcnIoZHJ2ciwgJiMzNDtpbnZhbGlkIGFrbSBzdWl0ZSAoJWQpXG4mIzM0OywKIAkJCQkgc21lLSZndDtjcnlwdG8uYWttX3N1aXRlc1swXSk7CkBAIC0yNDY2LDQzICYjNDM7MjQ3MCw1MCBAQCBicmNtZl9jZmc4MDIxMV9jb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKHNtZS0mZ3Q7Y3J5cHRvLnBzayAmYW1wOyZhbXA7Ci0JICAgIHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSkgewotCQlpZiAoV0FSTl9PTihwcm9maWxlLSZndDt1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSkgewotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCQlicmNtZl9kYmcoSU5GTywgJiMzNDt1c2luZyBQU0sgb2ZmbG9hZFxuJiMzNDspOwotCQlwcm9maWxlLSZndDt1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSzsKLQl9Ci0KLQlpZiAocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkgewotCQkvKiBlbmFibGUgZmlybXdhcmUgc3VwcGxpY2FudCBmb3IgdGhpcyBpbnRlcmZhY2UgKi8KLQkJZXJyID0gYnJjbWZfZmlsX2lvdmFyX2ludF9zZXQoaWZwLCAmIzM0O3N1cF93cGEmIzM0OywgMSk7Ci0JCWlmIChlcnIgJmx0OyAwKSB7Ci0JCQlicGh5X2VycihkcnZyLCAmIzM0O2ZhaWxlZCB0byBlbmFibGUgZncgc3VwcGxpY2FudFxuJiMzNDspOwotCQkJZ290byBkb25lOwomIzQzOwlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9GV1NVUCkpIHsKJiM0MzsJCXUzMiBha20gPSBzbWUtJmd0O2NyeXB0by5uX2FrbV9zdWl0ZXMgPyBzbWUtJmd0O2NyeXB0by5ha21fc3VpdGVzWzBdIDogMDsKJiM0MzsJCWJvb2wgaXNfc2FlX2FrbSA9IGFrbSA9PSBXTEFOX0FLTV9TVUlURV9TQUUgfHwKJiM0MzsJCQlha20gPT0gV0xBTl9BS01fU1VJVEVfRlRfT1ZFUl9TQUU7CiYjNDM7CiYjNDM7CQlpZiAoc21lLSZndDtjcnlwdG8ucHNrICZhbXA7JmFtcDsgIWlzX3NhZV9ha20gJmFtcDsmYW1wOwomIzQzOwkJICAgIHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSkgewomIzQzOwkJCWlmIChXQVJOX09OKHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPQomIzQzOwkJCQkgICAgQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSkgewomIzQzOwkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCQlnb3RvIGRvbmU7CiYjNDM7CQkJfQomIzQzOwkJCWJyY21mX2RiZyhJTkZPLCAmIzM0O3VzaW5nIFBTSyBvZmZsb2FkXG4mIzM0Oyk7CiYjNDM7CQkJcHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7CiAJCX0KLQl9Ci0KLQlpZiAocHJvZmlsZS0mZ3Q7dXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLKQotCQllcnIgPSBicmNtZl9zZXRfcG1rKGlmcCwgc21lLSZndDtjcnlwdG8ucHNrLAotCQkJCSAgICBCUkNNRl9XU0VDX01BWF9QU0tfTEVOKTsKLQllbHNlIGlmIChwcm9maWxlLSZndDt1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHsKLQkJLyogY2xlYW4gdXAgdXNlci1zcGFjZSBSU05FICovCi0JCWVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsICYjMzQ7d3BhaWUmIzM0OywgTlVMTCwgMCk7Ci0JCWlmIChlcnIpIHsKLQkJCWJwaHlfZXJyKGRydnIsICYjMzQ7ZmFpbGVkIHRvIGNsZWFuIHVwIHVzZXItc3BhY2UgUlNORVxuJiMzNDspOwotCQkJZ290byBkb25lOwomIzQzOwkJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpIHsKJiM0MzsJCQkvKiBlbmFibGUgZmlybXdhcmUgc3VwcGxpY2FudCBmb3IgdGhpcyBpbnRlcmZhY2UgKi8KJiM0MzsJCQllcnIgPSBicmNtZl9maWxfaW92YXJfaW50X3NldChpZnAsICYjMzQ7c3VwX3dwYSYjMzQ7LCAxKTsKJiM0MzsJCQlpZiAoZXJyICZsdDsgMCkgewomIzQzOwkJCQlicGh5X2VycihkcnZyLCAmIzM0O2ZhaWxlZCB0byBlbmFibGUgZncgc3VwcGxpY2FudFxuJiMzNDspOwomIzQzOwkJCQlnb3RvIGRvbmU7CiYjNDM7CQkJfQomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQllcnIgPSBicmNtZl9maWxfaW92YXJfaW50X3NldChpZnAsICYjMzQ7c3VwX3dwYSYjMzQ7LCAwKTsKIAkJfQotCQllcnIgPSBicmNtZl9md3ZpZF9zZXRfc2FlX3Bhc3N3b3JkKGlmcCwgJmFtcDtzbWUtJmd0O2NyeXB0byk7Ci0JCWlmICghZXJyICZhbXA7JmFtcDsgc21lLSZndDtjcnlwdG8ucHNrKQomIzQzOwkJaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSykKIAkJCWVyciA9IGJyY21mX3NldF9wbWsoaWZwLCBzbWUtJmd0O2NyeXB0by5wc2ssCiAJCQkJCSAgICBCUkNNRl9XU0VDX01BWF9QU0tfTEVOKTsKJiM0MzsJCWVsc2UgaWYgKHByb2ZpbGUtJmd0O3VzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSAmYW1wOyZhbXA7CiYjNDM7CQkJIHNtZS0mZ3Q7Y3J5cHRvLnNhZV9wd2QgJmFtcDsmYW1wOwomIzQzOwkJCSBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1NBRSkpIHsKJiM0MzsJCQkvKiBjbGVhbiB1cCB1c2VyLXNwYWNlIFJTTkUgKi8KJiM0MzsJCQlpZiAoYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgJiMzNDt3cGFpZSYjMzQ7LCBOVUxMLCAwKSkgewomIzQzOwkJCQlicGh5X2VycihkcnZyLCAmIzM0O2ZhaWxlZCB0byBjbGVhbiB1cCB1c2VyLXNwYWNlIFJTTkVcbiYjMzQ7KTsKJiM0MzsJCQkJZ290byBkb25lOwomIzQzOwkJCX0KJiM0MzsJCQllcnIgPSBicmNtZl9md3ZpZF9zZXRfc2FlX3Bhc3N3b3JkKGlmcCwgJmFtcDtzbWUtJmd0O2NyeXB0byk7CiYjNDM7CQkJaWYgKCFlcnIgJmFtcDsmYW1wOyBzbWUtJmd0O2NyeXB0by5wc2spCiYjNDM7CQkJCWVyciA9IGJyY21mX3NldF9wbWsoaWZwLCBzbWUtJmd0O2NyeXB0by5wc2ssCiYjNDM7CQkJCQkJICAgIEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pOwomIzQzOwkJfQomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGRvbmU7CiAJfQotCWlmIChlcnIpCi0JCWdvdG8gZG9uZTsKLQogCS8qIEpvaW4gd2l0aCBzcGVjaWZpYyBCU1NJRCBhbmQgY2FjaGVkIFNTSUQKIAkgKiBJZiBTU0lEIGlzIHplcm8gam9pbiBiYXNlZCBvbiBCU1NJRCBvbmx5CiAJICovCkBAIC00NTE5LDYgJiM0Mzs0NTMwLDExIEBAIHN0YXRpYyBib29sIGJyY21mX3ZhbGlkX3dwYV9vdWkodTggKm91aSwgYm9vbCBpc19yc25faWUpCiAJcmV0dXJuIChtZW1jbXAob3VpLCBXUEFfT1VJLCBUTFZfT1VJX0xFTikgPT0gMCk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBicmNtZl92YWxpZF9kcHBfc3VpdGUodTggKm91aSkKJiM0Mzt7CiYjNDM7CXJldHVybiBnZXRfdW5hbGlnbmVkX2JlMzIob3VpKSA9PSBXTEFOX0FLTV9TVUlURV9XRkFfRFBQOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzMzIKIGJyY21mX2NvbmZpZ3VyZV93cGFpZShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwKIAkJICAgICAgY29uc3Qgc3RydWN0IGJyY21mX3ZzX3RsdiAqd3BhX2llLApAQCAtNDYzMiw0MiAmIzQzOzQ2NDgsNDcgQEAgYnJjbWZfY29uZmlndXJlX3dwYWllKHN0cnVjdCBicmNtZl9pZiAqaWZwLAogCQlnb3RvIGV4aXQ7CiAJfQogCWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKCFicmNtZl92YWxpZF93cGFfb3VpKCZhbXA7ZGF0YVtvZmZzZXRdLCBpc19yc25faWUpKSB7CiYjNDM7CQlpZiAoYnJjbWZfdmFsaWRfZHBwX3N1aXRlKCZhbXA7ZGF0YVtvZmZzZXRdKSkgewomIzQzOwkJCXdwYV9hdXRoIHw9IFdGQV9BVVRIX0RQUDsKJiM0MzsJCQlvZmZzZXQgJiM0Mzs9IFRMVl9PVUlfTEVOOwomIzQzOwkJfSBlbHNlIGlmIChicmNtZl92YWxpZF93cGFfb3VpKCZhbXA7ZGF0YVtvZmZzZXRdLCBpc19yc25faWUpKSB7CiYjNDM7CQkJb2Zmc2V0ICYjNDM7PSBUTFZfT1VJX0xFTjsKJiM0MzsJCQlzd2l0Y2ggKGRhdGFbb2Zmc2V0XSkgewomIzQzOwkJCWNhc2UgUlNOX0FLTV9OT05FOgomIzQzOwkJCQlicmNtZl9kYmcoVFJBQ0UsICYjMzQ7UlNOX0FLTV9OT05FXG4mIzM0Oyk7CiYjNDM7CQkJCXdwYV9hdXRoIHw9IFdQQV9BVVRIX05PTkU7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWNhc2UgUlNOX0FLTV9VTlNQRUNJRklFRDoKJiM0MzsJCQkJYnJjbWZfZGJnKFRSQUNFLCAmIzM0O1JTTl9BS01fVU5TUEVDSUZJRURcbiYjMzQ7KTsKJiM0MzsJCQkJaXNfcnNuX2llID8KJiM0MzsJCQkJCSh3cGFfYXV0aCB8PSBXUEEyX0FVVEhfVU5TUEVDSUZJRUQpIDoKJiM0MzsJCQkJCSh3cGFfYXV0aCB8PSBXUEFfQVVUSF9VTlNQRUNJRklFRCk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWNhc2UgUlNOX0FLTV9QU0s6CiYjNDM7CQkJCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtSU05fQUtNX1BTS1xuJiMzNDspOwomIzQzOwkJCQlpc19yc25faWUgPyAod3BhX2F1dGggfD0gV1BBMl9BVVRIX1BTSykgOgomIzQzOwkJCQkJICAgICh3cGFfYXV0aCB8PSBXUEFfQVVUSF9QU0spOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQljYXNlIFJTTl9BS01fU0hBMjU2X1BTSzoKJiM0MzsJCQkJYnJjbWZfZGJnKFRSQUNFLCAmIzM0O1JTTl9BS01fTUZQX1BTS1xuJiMzNDspOwomIzQzOwkJCQl3cGFfYXV0aCB8PSBXUEEyX0FVVEhfUFNLX1NIQTI1NjsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJY2FzZSBSU05fQUtNX1NIQTI1Nl8xWDoKJiM0MzsJCQkJYnJjbWZfZGJnKFRSQUNFLCAmIzM0O1JTTl9BS01fTUZQXzFYXG4mIzM0Oyk7CiYjNDM7CQkJCXdwYV9hdXRoIHw9IFdQQTJfQVVUSF8xWF9TSEEyNTY7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWNhc2UgUlNOX0FLTV9TQUU6CiYjNDM7CQkJCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtSU05fQUtNX1NBRVxuJiMzNDspOwomIzQzOwkJCQl3cGFfYXV0aCB8PSBXUEEzX0FVVEhfU0FFX1BTSzsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJZGVmYXVsdDoKJiM0MzsJCQkJYnBoeV9lcnIoZHJ2ciwgJiMzNDtJbnZhbGlkIGtleSBtZ210IGluZm9cbiYjMzQ7KTsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgewogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWJwaHlfZXJyKGRydnIsICYjMzQ7aW52YWxpZCBPVUlcbiYjMzQ7KTsKIAkJCWdvdG8gZXhpdDsKIAkJfQotCQlvZmZzZXQgJiM0Mzs9IFRMVl9PVUlfTEVOOwotCQlzd2l0Y2ggKGRhdGFbb2Zmc2V0XSkgewotCQljYXNlIFJTTl9BS01fTk9ORToKLQkJCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtSU05fQUtNX05PTkVcbiYjMzQ7KTsKLQkJCXdwYV9hdXRoIHw9IFdQQV9BVVRIX05PTkU7Ci0JCQlicmVhazsKLQkJY2FzZSBSU05fQUtNX1VOU1BFQ0lGSUVEOgotCQkJYnJjbWZfZGJnKFRSQUNFLCAmIzM0O1JTTl9BS01fVU5TUEVDSUZJRURcbiYjMzQ7KTsKLQkJCWlzX3Jzbl9pZSA/ICh3cGFfYXV0aCB8PSBXUEEyX0FVVEhfVU5TUEVDSUZJRUQpIDoKLQkJCQkgICAgKHdwYV9hdXRoIHw9IFdQQV9BVVRIX1VOU1BFQ0lGSUVEKTsKLQkJCWJyZWFrOwotCQljYXNlIFJTTl9BS01fUFNLOgotCQkJYnJjbWZfZGJnKFRSQUNFLCAmIzM0O1JTTl9BS01fUFNLXG4mIzM0Oyk7Ci0JCQlpc19yc25faWUgPyAod3BhX2F1dGggfD0gV1BBMl9BVVRIX1BTSykgOgotCQkJCSAgICAod3BhX2F1dGggfD0gV1BBX0FVVEhfUFNLKTsKLQkJCWJyZWFrOwotCQljYXNlIFJTTl9BS01fU0hBMjU2X1BTSzoKLQkJCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtSU05fQUtNX01GUF9QU0tcbiYjMzQ7KTsKLQkJCXdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0tfU0hBMjU2OwotCQkJYnJlYWs7Ci0JCWNhc2UgUlNOX0FLTV9TSEEyNTZfMVg6Ci0JCQlicmNtZl9kYmcoVFJBQ0UsICYjMzQ7UlNOX0FLTV9NRlBfMVhcbiYjMzQ7KTsKLQkJCXdwYV9hdXRoIHw9IFdQQTJfQVVUSF8xWF9TSEEyNTY7Ci0JCQlicmVhazsKLQkJY2FzZSBSU05fQUtNX1NBRToKLQkJCWJyY21mX2RiZyhUUkFDRSwgJiMzNDtSU05fQUtNX1NBRVxuJiMzNDspOwotCQkJd3BhX2F1dGggfD0gV1BBM19BVVRIX1NBRV9QU0s7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJwaHlfZXJyKGRydnIsICYjMzQ7SW52YWxpZCBrZXkgbWdtdCBpbmZvXG4mIzM0Oyk7Ci0JCX0KIAkJb2Zmc2V0JiM0MzsmIzQzOzsKIAl9CiAKQEAgLTQ2ODcsMTAgJiM0Mzs0NzA4LDEyIEBAIGJyY21mX2NvbmZpZ3VyZV93cGFpZShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwKIAkJCQkgKi8KIAkJCQlpZiAoISh3cGFfYXV0aCAmYW1wOyAoV1BBMl9BVVRIX1BTS19TSEEyNTYgfAogCQkJCQkJICBXUEEyX0FVVEhfMVhfU0hBMjU2IHwKJiM0MzsJCQkJCQkgIFdGQV9BVVRIX0RQUCB8CiAJCQkJCQkgIFdQQTNfQVVUSF9TQUVfUFNLKSkpIHsKIAkJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQkJZ290byBleGl0OwogCQkJCX0KJiM0MzsKIAkJCQkvKiBGaXJtd2FyZSBoYXMgcmVxdWlyZW1lbnQgdGhhdCBXUEEyX0FVVEhfUFNLLwogCQkJCSAqIFdQQTJfQVVUSF9VTlNQRUNJRklFRCBiZSBzZXQsIGlmIFNIQTI1NiBPVUkKIAkJCQkgKiBpcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgcnNuIGllLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jCmluZGV4IDZlMGM5MGY0NzE4YjU4Li4yYzFmNTJlZDUxMzgwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYwpAQCAtNiw2ICYjNDM7Niw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2NmZzgwMjExLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDticmNtdV93aWZpLmgmZ3Q7CkBAIC00NCw5ICYjNDM7NDUsNiBAQAogCiAjZGVmaW5lIEJSQ01GX1NDQl9USU1FT1VUX1ZBTFVFCTIwCiAKLSNkZWZpbmUgUDJQX1ZFUgkJCTkJLyogUDJQIHZlcnNpb246IDk9V2lGaSBQMlAgdjEuMCAqLwotI2RlZmluZSBQMlBfUFVCX0FGX0NBVEVHT1JZCTB4MDQKLSNkZWZpbmUgUDJQX1BVQl9BRl9BQ1RJT04JMHgwOQogI2RlZmluZSBQMlBfQUZfQ0FURUdPUlkJCTB4N2YKICNkZWZpbmUgUDJQX09VSQkJCSYjMzQ7XHg1MFx4NkZceDlBJiMzNDsJLyogUDJQIE9VSSAqLwogI2RlZmluZSBQMlBfT1VJX0xFTgkJMwkJLyogUDJQIE9VSSBsZW5ndGggKi8KQEAgLTE0MywxMCAmIzQzOzE0MSwxMCBAQCBzdHJ1Y3QgYnJjbWZfcDJwX3NjYW5fbGUgewogLyoqCiAgKiBzdHJ1Y3QgYnJjbWZfcDJwX3B1Yl9hY3RfZnJhbWUgLSBXaUZpIFAyUCBQdWJsaWMgQWN0aW9uIEZyYW1lCiAgKgotICogQGNhdGVnb3J5OiBQMlBfUFVCX0FGX0NBVEVHT1JZCi0gKiBAYWN0aW9uOiBQMlBfUFVCX0FGX0FDVElPTgomIzQzOyAqIEBjYXRlZ29yeTogV0xBTl9DQVRFR09SWV9QVUJMSUMKJiM0MzsgKiBAYWN0aW9uOiBXTEFOX1BVQl9BQ1RJT05fVkVORE9SX1NQRUNJRklDCiAgKiBAb3VpOiBQMlBfT1VJCi0gKiBAb3VpX3R5cGU6IE9VSSB0eXBlIC0gUDJQX1ZFUgomIzQzOyAqIEBvdWlfdHlwZTogT1VJIHR5cGUgLSBXTEFOX09VSV9UWVBFX1dGQV9QMlAKICAqIEBzdWJ0eXBlOiBPVUkgc3VidHlwZSAtIFAyUF9UWVBFXyoKICAqIEBkaWFsb2dfdG9rZW46IG5vbnplcm8sIGlkZW50aWZpZXMgcmVxL3JzcCB0cmFuc2FjdGlvbgogICogQGVsdHM6IFZhcmlhYmxlIGxlbmd0aCBpbmZvcm1hdGlvbiBlbGVtZW50cy4KQEAgLTE2Niw3ICYjNDM7MTY0LDcgQEAgc3RydWN0IGJyY21mX3AycF9wdWJfYWN0X2ZyYW1lIHsKICAqCiAgKiBAY2F0ZWdvcnk6IFAyUF9BRl9DQVRFR09SWQogICogQG91aTogT1VJIC0gUDJQX09VSQotICogQHR5cGU6IE9VSSBUeXBlIC0gUDJQX1ZFUgomIzQzOyAqIEB0eXBlOiBPVUkgVHlwZSAtIFdMQU5fT1VJX1RZUEVfV0ZBX1AyUAogICogQHN1YnR5cGU6IE9VSSBTdWJ0eXBlIC0gUDJQX0FGXyoKICAqIEBkaWFsb2dfdG9rZW46IG5vbnplcm8sIGlkZW50aWZpZXMgcmVxL3Jlc3AgdHJhbmFjdGlvbgogICogQGVsdHM6IFZhcmlhYmxlIGxlbmd0aCBpbmZvcm1hdGlvbiBlbGVtZW50cy4KQEAgLTIyOCwxMCAmIzQzOzIyNiwzOCBAQCBzdGF0aWMgYm9vbCBicmNtZl9wMnBfaXNfcHViX2FjdGlvbih2b2lkICpmcmFtZSwgdTMyIGZyYW1lX2xlbikKIAlpZiAoZnJhbWVfbGVuICZsdDsgc2l6ZW9mKCpwYWN0X2ZybSkpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChwYWN0X2ZybS0mZ3Q7Y2F0ZWdvcnkgPT0gUDJQX1BVQl9BRl9DQVRFR09SWSAmYW1wOyZhbXA7Ci0JICAgIHBhY3RfZnJtLSZndDthY3Rpb24gPT0gUDJQX1BVQl9BRl9BQ1RJT04gJmFtcDsmYW1wOwotCSAgICBwYWN0X2ZybS0mZ3Q7b3VpX3R5cGUgPT0gUDJQX1ZFUiAmYW1wOyZhbXA7Ci0JICAgIG1lbWNtcChwYWN0X2ZybS0mZ3Q7b3VpLCBQMlBfT1VJLCBQMlBfT1VJX0xFTikgPT0gMCkKJiM0MzsJaWYgKHBhY3RfZnJtLSZndDtjYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBwYWN0X2ZybS0mZ3Q7YWN0aW9uID09IFdMQU5fUFVCX0FDVElPTl9WRU5ET1JfU1BFQ0lGSUMgJmFtcDsmYW1wOwomIzQzOwkgICAgcGFjdF9mcm0tJmd0O291aV90eXBlID09IFdMQU5fT1VJX1RZUEVfV0ZBX1AyUCAmYW1wOyZhbXA7CiYjNDM7CSAgICBnZXRfdW5hbGlnbmVkX2JlMjQocGFjdF9mcm0tJmd0O291aSkgPT0gV0xBTl9PVUlfV0ZBKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnJjbWZfcDJwX2lzX2RwcF9wdWJfYWN0aW9uKCkgLSB0cnVlIGlmIGRwcCBwdWJsaWMgdHlwZSBmcmFtZS4KJiM0MzsgKgomIzQzOyAqIEBmcmFtZTogYWN0aW9uIGZyYW1lIGRhdGEuCiYjNDM7ICogQGZyYW1lX2xlbjogbGVuZ3RoIG9mIGFjdGlvbiBmcmFtZSBkYXRhLgomIzQzOyAqCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFjdGlvbiBmcmFtZSBpcyBkcHAgcHVibGljIGFjdGlvbiB0eXBlCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgYnJjbWZfcDJwX2lzX2RwcF9wdWJfYWN0aW9uKHZvaWQgKmZyYW1lLCB1MzIgZnJhbWVfbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IGJyY21mX3AycF9wdWJfYWN0X2ZyYW1lICpwYWN0X2ZybTsKJiM0MzsKJiM0MzsJaWYgKCFmcmFtZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcGFjdF9mcm0gPSAoc3RydWN0IGJyY21mX3AycF9wdWJfYWN0X2ZyYW1lICopZnJhbWU7CiYjNDM7CWlmIChmcmFtZV9sZW4gJmx0OyBzaXplb2Yoc3RydWN0IGJyY21mX3AycF9wdWJfYWN0X2ZyYW1lKSAtIDEpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChwYWN0X2ZybS0mZ3Q7Y2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9QVUJMSUMgJmFtcDsmYW1wOwomIzQzOwkgICAgcGFjdF9mcm0tJmd0O2FjdGlvbiA9PSBXTEFOX1BVQl9BQ1RJT05fVkVORE9SX1NQRUNJRklDICZhbXA7JmFtcDsKJiM0MzsJICAgIHBhY3RfZnJtLSZndDtvdWlfdHlwZSA9PSBXTEFOX09VSV9UWVBFX1dGQV9EUFAgJmFtcDsmYW1wOwomIzQzOwkgICAgZ2V0X3VuYWxpZ25lZF9iZTI0KHBhY3RfZnJtLSZndDtvdWkpID09IFdMQU5fT1VJX1dGQSkKIAkJcmV0dXJuIHRydWU7CiAKIAlyZXR1cm4gZmFsc2U7CkBAIC0yNTcsNyAmIzQzOzI4Myw3IEBAIHN0YXRpYyBib29sIGJyY21mX3AycF9pc19wMnBfYWN0aW9uKHZvaWQgKmZyYW1lLCB1MzIgZnJhbWVfbGVuKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoYWN0X2ZybS0mZ3Q7Y2F0ZWdvcnkgPT0gUDJQX0FGX0NBVEVHT1JZICZhbXA7JmFtcDsKLQkgICAgYWN0X2ZybS0mZ3Q7dHlwZSAgPT0gUDJQX1ZFUiAmYW1wOyZhbXA7CiYjNDM7CSAgICBhY3RfZnJtLSZndDt0eXBlICA9PSBXTEFOX09VSV9UWVBFX1dGQV9QMlAgJmFtcDsmYW1wOwogCSAgICBtZW1jbXAoYWN0X2ZybS0mZ3Q7b3VpLCBQMlBfT1VJLCBQMlBfT1VJX0xFTikgPT0gMCkKIAkJcmV0dXJuIHRydWU7CiAKQEAgLTEyODEsNiAmIzQzOzEzMDcsOSBAQCBzdGF0aWMgczMyIGJyY21mX3AycF9hYm9ydF9hY3Rpb25fZnJhbWUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZykKIAlicmNtZl9kYmcoVFJBQ0UsICYjMzQ7RW50ZXJcbiYjMzQ7KTsKIAogCXZpZiA9IHAycC0mZ3Q7YnNzX2lkeFtQMlBBUElfQlNTQ0ZHX0RFVklDRV0udmlmOwomIzQzOwlpZiAoIXZpZikKJiM0MzsJCXZpZiA9IHAycC0mZ3Q7YnNzX2lkeFtQMlBBUElfQlNTQ0ZHX1BSSU1BUlldLnZpZjsKJiM0MzsKIAllcnIgPSBicmNtZl9maWxfYnNzY2ZnX2RhdGFfc2V0KHZpZi0mZ3Q7aWZwLCAmIzM0O2FjdGZyYW1lX2Fib3J0JiMzNDssICZhbXA7aW50X3ZhbCwKIAkJCQkJc2l6ZW9mKHMzMikpOwogCWlmIChlcnIpCkBAIC0xNzg5LDcgJiM0MzsxODE4LDkgQEAgYm9vbCBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywKIAkJCWdvdG8gZXhpdDsKIAkJfQogCX0gZWxzZSBpZiAoYnJjbWZfcDJwX2lzX3AycF9hY3Rpb24oYWN0aW9uX2ZyYW1lLSZndDtkYXRhLAotCQkJCQkgICBhY3Rpb25fZnJhbWVfbGVuKSkgewomIzQzOwkJCQkJICAgYWN0aW9uX2ZyYW1lX2xlbikgfHwKJiM0MzsJCSAgIGJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvbihhY3Rpb25fZnJhbWUtJmd0O2RhdGEsCiYjNDM7CQkJCQkgICAgICAgYWN0aW9uX2ZyYW1lX2xlbikpIHsKIAkJLyogZG8gbm90IGNvbmZpZ3VyZSBhbnl0aGluZy4gaXQgd2lsbCBiZSAqLwogCQkvKiBzZW50IHdpdGggYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gICAgICovCiAJfSBlbHNlIHsKQEAgLTE4MjYsNiAmIzQzOzE4NTcsNyBAQCBib29sIGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLAogCS8qIHZhbGlkYXRlIGNoYW5uZWwgYW5kIHAycCBpZXMgKi8KIAlpZiAoY29uZmlnX2FmX3BhcmFtcy5zZWFyY2hfY2hhbm5lbCAmYW1wOyZhbXA7CiAJICAgIElTX1AyUF9TT0NJQUxfQ0hBTk5FTChsZTMyX3RvX2NwdShhZl9wYXJhbXMtJmd0O2NoYW5uZWwpKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwMnAtJmd0O2Jzc19pZHhbUDJQQVBJX0JTU0NGR19ERVZJQ0VdLnZpZiAmYW1wOyZhbXA7CiAJICAgIHAycC0mZ3Q7YnNzX2lkeFtQMlBBUElfQlNTQ0ZHX0RFVklDRV0udmlmLSZndDtzYXZlZF9pZS5wcm9iZV9yZXFfaWVfbGVuKSB7CiAJCWFmeF9oZGwgPSAmYW1wO3AycC0mZ3Q7YWZ4X2hkbDsKIAkJYWZ4X2hkbC0mZ3Q7cGVlcl9saXN0ZW5fY2hhbiA9IGxlMzJfdG9fY3B1KGFmX3BhcmFtcy0mZ3Q7Y2hhbm5lbCk7CkBAIC0yNTQzLDQgJiM0MzsyNTc1LDMgQEAgdm9pZCBicmNtZl9wMnBfZGV0YWNoKHN0cnVjdCBicmNtZl9wMnBfaW5mbyAqcDJwKQogCS8qIGp1c3Qgc2V0IGl0IGFsbCB0byB6ZXJvICovCiAJbWVtc2V0KHAycCwgMCwgc2l6ZW9mKCpwMnApKTsKIH0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oCmluZGV4IDc1NTJiZGI5MTk5MWNlLi5jNDY1MjA4YzQzMzE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9pbmNsdWRlL2JyY211X3dpZmkuaApAQCAtMjMzLDYgJiM0MzsyMzMsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWNfYml0bWFwX3RzdCh1OCBiaXRtYXAsIGludCBwcmVjKQogCiAjZGVmaW5lIFdQQTNfQVVUSF9TQUVfUFNLCTB4NDAwMDAJLyogU0FFIHdpdGggNC13YXkgaGFuZHNoYWtlICovCiAKJiM0MzsjZGVmaW5lIFdGQV9BVVRIX0RQUAkJMHgyMDAwMDAgLyogV0ZBIERQUCBBVVRIICovCiYjNDM7CiAjZGVmaW5lIERPVDExX0RFRkFVTFRfUlRTX0xFTgkJMjM0NwogI2RlZmluZSBET1QxMV9ERUZBVUxUX0ZSQUdfTEVOCQkyMzQ2CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM2OQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDY3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBhbmQgVGVzdGluZyBEUFAgU3VwcG9ydCBpbiBicmNtZm1hYyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgaXQmIzM5O3MgdHdlYWtpbmcgYGJyY21mbWFjYCB0byBzdXBwb3J0IERQUCBhdXRoZW50aWNhdGlvbiAoYFdMQU5fQUtNX1NVSVRFX1dGQV9EUFBgKSBhbmQgcmVsYXRlZCBPVUkgdHlwZXMuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyBgY2ZnODAyMTEuY2AgYW5kIGBwMnAuY2AuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzLCBjYW4gd2UgYWN0dWFsbHkgcmVhY2ggdGhpcyBmdW5jdGlvbmFsaXR5IGFuZCB0ZXN0IGl0IHByb3Blcmx5PwoKVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBgYnJjbWZtYWNgLCB0aGUgQnJvYWRjb20gV2lGaSBkcml2ZXIuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBpbiB0aGUgYGNmZzgwMjExYCBpbnRlcmZhY2UgYW5kIFAyUCBhY3Rpb24gZnJhbWUgaGFuZGxpbmcsIG1lYW5pbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBpbnRlcmFjdGlvbnMgdGhhdCAqc2hvdWxkKiBiZSBhY2Nlc3NpYmxlIHRocm91Z2ggbmV0bGluayBhbmQgbmV0d29yayBpbnRlcmZhY2VzLgoKTm93LCB0aGUgcmVhbCBjaGFsbGVuZ2UuIENhbiB3ZSBldmVuIGZ1enogdGhpcyBlZmZlY3RpdmVseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcuIGBicmNtZm1hY2AgaXMgYSBoYXJkd2FyZSBkcml2ZXIsIG1lYW5pbmcgaXQgZWl0aGVyIG5lZWRzIHJlYWwgaGFyZHdhcmUgb3IsIGlkZWFsbHksIHNvbWUgc29ydCBvZiBzaW11bGF0aW9uIGxheWVyLiBJIHF1aWNrbHkgY29uc2lkZXIgd2hldGhlciB0aGVyZeKAmXMgYSBzaW11bGF0b3IuIEkga25vdyB0aGF0IGBtYWM4MDIxMWAgaGFzIGBtYWM4MDIxMV9od3NpbWAsIGJ1dCB0aGlzIGlzIGEgZnVsbG1hYyBkcml2ZXIuCgpUaGVuLCBJIHJlbWVtYmVyIHN5emthbGxlci4gU3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcyBhcmUgaW50cmlndWluZy4gVGhleSBoYXZlIHNvbWUgc3VwcG9ydCBmb3IgVVNCIGZ1enppbmcgKGR1bW15IEhDRCkgYW5kIFBDSSBmdXp6aW5nLCB3aGljaCAqY291bGQqIGdldCB1cyBwYXN0IHRoZSBpbml0aWFsIHByb2JlLCBhbmQgbWF5YmUgZXZlbiBmdXJ0aGVyIGlmIHRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZC4gQW5kIGBicmNtZm1hY2AgaGFzIFVTQiwgU0RJTywgYW5kIFBDSWUgaW50ZXJmYWNlcy4gQmluZ28hIFVTQiBmdXp6aW5nIGlzIHRoZSBtb3N0IHByb21pc2luZyByb3V0ZS4gSXQmIzM5O3MgbGlrZWx5IHdlIGNhbiByZWFjaCB0aGUgVVNCIHByb2JlLCByZWdpc3RlciBhIHdpcGh5LCBhbmQgdGhlbiBleHBvc2UgdGhvc2UgY2ZnODAyMTEgb3BlcmF0aW9ucyB0byB1c2VyIHNwYWNlLgoKU28sIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCBmdW5jdGlvbnMgd2UgbmVlZCB0byBoaXQ6IGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCBhbmQgYGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZWAuIElmIFVTQiBmdXp6aW5nIHdvcmtzLCB0aGUgZHJpdmVyIHByb2JlcywgYSB3aXBoeSBnZXRzIHJlZ2lzdGVyZWQsIGFuZCBuZXRsaW5rIGNvbW1hbmRzIGNhbiB0cmlnZ2VyIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YC4gVGhhdCYjMzk7cyBhIGRpcmVjdCBwYXRoLgoKVGltZSB0byBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucy4gTGV0IG1lIG1ha2Ugc3VyZSBgYnJjbWZtYWNgIGlzIGNvbXBpbGVkIHdpdGggVVNCIHN1cHBvcnQuIE5lZWQgdG8gY2hlY2s6IGBDT05GSUdfQlJDTUZNQUNgLCBgQ09ORklHX0JSQ01GTUFDX1VTQmAsIGBDT05GSUdfQlJDTUZNQUNfUENJRWAsIGFuZCBgQ09ORklHX0JSQ01GTUFDX1NESU9gLgoKQWxyaWdodCwgYSBxdWljayByZXZpZXcgb2YgdGhlIGNvZGUgY29uZmlybXMgdGhlIGNvbm5lY3Rpb24uIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCBpcyBhIGBjZmc4MDIxMWAgY2FsbGJhY2sgc3BlY2lmaWNhbGx5IGZvciB0aGUgJiMzNDtjb25uZWN0JiMzNDsgb3BlcmF0aW9uLiBgYnJjbWZfcDJwX3NlbmRfYWN0aW9uX2ZyYW1lYCBpcyBjYWxsZWQgZnJvbSBgYnJjbWZfY2ZnODAyMTFfbWdtdF90eGAsIHdoaWNoIGlzIHRoZSBgbWdtdF90eGAgY2FsbGJhY2suCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhvc2UgY29uZmlnIG9wdGlvbnMgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIHBsYWNlIGZvciBhIHByb3BlciB0ZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUkNNRk1BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE6Y29uZmlnIEJSQ01GTUFDXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTE6Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEyLVx0Ym9vbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNDpjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNS1cdGJvb2xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTc6Y29uZmlnIEJSQ01GTUFDX1NESU9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjI5OmNvbmZpZyBCUkNNRk1BQ19VU0JcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtVU0IgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTM5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6NDA6Y29uZmlnIEJSQ01GTUFDX1BDSUVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzUwCgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnJvYWRjb20gV2lGaSBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYEJSQ01GTUFDYCBhbmQgYEJSQ01GTUFDX1VTQmAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gYXNzZXNzIHRoZWlyIHJlbGV2YW5jZSB0byBmdXp6aW5nLiBJIHJlbWVtYmVyIGBCUkNNRk1BQ2AgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ0ZHODAyMTFgLCB3aGljaCBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBkcml2ZXIgd29ydGggdGhlIGVmZm9ydD8KCldlbGwsIHllcywgdGhlIHBvdGVudGlhbCBpcyBkZWZpbml0ZWx5IHRoZXJlLiBUaGUgZHJpdmVyIG1vZGlmaWVzIGZ1bmN0aW9uYWwgbG9naWMsIHdoaWNoIGlzIGEga2V5IGluZGljYXRvci4gUGx1cywgSSBjYW4gaW5zdGFudGlhdGUgdGhlIGBCUkNNRk1BQ2AgdmlhIFVTQiBmdXp6aW5nLCB3aGljaCBpcyBncmVhdCBiZWNhdXNlIFN5emthbGxlciBoYXMgYSBkZWNlbnQgVVNCIGZ1enplci4gVGhhdCBzdHJlYW1saW5lcyB0aGUgZnV6emluZyBwcm9jZXNzIHNpZ25pZmljYW50bHkuCgpOb3csIGEgY3JpdGljYWwgcG9pbnQgSSBuZWVkIHRvIHZlcmlmeTogZG9lcyBgYnJjbWZtYWNgIG5lZWQgYW55IGZpcm13YXJlIGZvciBpbml0aWFsaXphdGlvbj8gVGhpcyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyBhbnkgZmFsc2UgcG9zaXRpdmVzLiBUbyBtYWtlIHN1cmUsIEkgc2hvdWxkIGNoZWNrIHRoZSBgYnJjbWZfdXNiX3Byb2JlYCBmdW5jdGlvbiBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIGRldGVybWluZSBpZiBmaXJtd2FyZSBpcyByZXF1aXJlZCBhbmQgaG93IHRoZSBVU0IgaW50ZXJmYWNlIGludGVyYWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl91c2JfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNTc9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9idXNfb3BzIGJyY21mX3VzYl9idXNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMTY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjExNjg6c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE2OS1cdFx0XHRcdCAgIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTIxNj1icmNtZl91c2JfcHJlcGFyZV9md19yZXF1ZXN0KHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTIzNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMjM2OnN0YXRpYyBpbnQgYnJjbWZfdXNiX3Byb2JlX2NiKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjM3LVx0XHRcdCAgICAgIGVudW0gYnJjbWZfZnd2ZW5kb3IgZnd2aWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyOTktXHQvKiByZXF1ZXN0IGZpcm13YXJlIGhlcmUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzAwOlx0cmV0ID0gYnJjbWZfZndfZ2V0X2Zpcm13YXJlcyhkZXYsIGZ3cmVxLCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzAxLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMzMzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzM0OmJyY21mX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzMzUte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDM0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE0MzU6XHRyZXQgPSBicmNtZl91c2JfcHJvYmVfY2IoZGV2aW5mbywgaWQtXHUwMDNlZHJpdmVyX2luZm8pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE0MzYtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTAzPXN0YXRpYyBpbnQgYnJjbWZfdXNiX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUxNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTE2Olx0cmV0ID0gYnJjbWZfZndfZ2V0X2Zpcm13YXJlcyhcdTAwMjZ1c2ItXHUwMDNlZGV2LCBmd3JlcSwgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUxNy1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTE1NTc9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJyY21mX3VzYmRydnIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTU1OC1cdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTU1OTpcdC5wcm9iZSA9IGJyY21mX3VzYl9wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTYwLVx0LmRpc2Nvbm5lY3QgPSBicmNtZl91c2JfZGlzY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxNjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk0MQoJCQkJCQkJb3V0cHV0OiA2MgoJCQkJCQkJdGhvdWdodHM6IDM3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBicmNtZm1hYyBEcml2ZXIgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGJyY21mbWFjYCBkcml2ZXIsIGFuZCB0aGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgZmlybXdhcmUgYXZhaWxhYmlsaXR5LiBUaGUgY29kZSBjYWxscyBgYnJjbWZfZndfZ2V0X2Zpcm13YXJlc2AsIGFuZCBpZiB0aGUgZmlybXdhcmUmIzM5O3MgbWlzc2luZywgdGhlIHByb2JlIGNvdWxkIGZhaWwgcmlnaHQgdGhlcmUuIFN5emthbGxlciB0aHJvd3Mgc29tZSBkdW1teSBmaXJtd2FyZSBpbWFnZXMgaW50byB0aGUgbWl4LCBidXQgaXQmIzM5O3Mgbm90IGEgZ3VhcmFudGVlIHRoYXQgdGhlIGBicmNtZm1hY2AgZHJpdmVyIHdpbGwgaW5pdGlhbGl6ZSBwcm9wZXJseS4gSXQgY291bGQgYmUgdHJ5aW5nIHRvIHBhcnNlIHRoZSBmaXJtd2FyZSBvciB0YWxrIHRvIHRoZSBkZXZpY2UsIHNvIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhvc2UgcG9zc2liaWxpdGllcy4KCldhaXQsIFN5emthbGxlciBoYXMgcHJldHR5IGV4dGVuc2l2ZSBjb3ZlcmFnZSBmb3IgYGJyY21mbWFjYCwgZG9lc24mIzM5O3QgaXQ/IExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBpZiBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIHZpYSB0aGUgZnV6emluZy4KCkJ1dCwgaGFuZyBvbiwgaXQgZG9lc24mIzM5O3QgbmVlZCB0byBiZSAqcGVyZmVjdGx5KiByZWFjaGFibGUsIHJpZ2h0PyBJdCYjMzk7cyByZWFsbHkgYWJvdXQgd2hldGhlciB0aGVyZSBhcmUgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgaW4gdGhlIGRyaXZlciwgYW5kLCBldmVuIGlmIHRoZSBjb3ZlcmFnZSBpc24mIzM5O3QgcGVyZmVjdCwgaWYgaXQmIzM5O3MgcmVhY2hhYmxlICppbiB0aGVvcnkqIChlLmcuLCB0aHJvdWdoIFVTQiBmdXp6aW5nIG9yIG5ldGxpbmsgaWYgdGhlIGRldmljZSBpcyBhcm91bmQpLCBJIHNob3VsZCBqdXN0IG1hcmsgaXQgYXMgYFdvcnRoRnV6emluZz10cnVlYC4KClRoZSBpbnN0cnVjdGlvbnMgc3RhdGUsIGV4cGxpY2l0bHksIHRoYXQgaWYgYSBjaGFuZ2UgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGNvZGUgKmNhbiogYmUgZXhlY3V0ZWQgd2l0aCBteSBjb2RlIHNlYXJjaCB0b29scywgYW5kIHRoZW4gbWFyayBpdCBgV29ydGhGdXp6aW5nPXRydWVgLiBJdCYjMzk7cyBzcGVjaWZpY2FsbHkgYSBwcm9ibGVtIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBlc3BlY2lhbGx5IHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuCgpTbywgaXMgYGJyY21mbWFjYCBpbXBvc3NpYmxlIHRvIHJlYWNoPyBBYnNvbHV0ZWx5IG5vdC4KCldpdGggVVNCIGZ1enppbmcsIHdoaWNoIGNhbiBiZSBkb25lIHdpdGggYSBkdW1teSBIQ0QsIHdlIGNhbiBlbXVsYXRlIHRoZSBVU0IgZGV2aWNlLiBUaGUgZHJpdmVyIHdpbGwgcHJvYmUsIGl0ICptaWdodCogYXNrIGZvciBmaXJtd2FyZS4gVGhhdCYjMzk7cyB3aGVyZSBTeXprYWxsZXImIzM5O3MgZmF1bHQgaW5qZWN0aW9uIGFuZCB0aGUgZHVtbXkgZmlsZXMgY29tZSBpbiBoYW5keS4gSWYgdGhlIGRyaXZlciBhY3R1YWxseSBwYXJzZXMgdGhlIGZpcm13YXJlIGFuZCBpbml0aWFsaXplcyB0aGUgZGV2aWNlLCBpdCBtaWdodCByZWdpc3RlciB0aGUgd2lwaHkuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBpZiBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAgaXMgdGhlIGJlc3QgZnVuY3Rpb24gdG8gZm9jdXMgb24gaW4gdGhpcyBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2NmZzgwMjExX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz0yMzYzPXN0YXRpYyBzMzJcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjIzNjQ6YnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTIzNjUtXHRcdCAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz01OTU3PXN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfb3BzIGJyY21mX2NmZzgwMjExX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01OTc0LVx0LnNldF9wb3dlcl9tZ210ID0gYnJjbWZfY2ZnODAyMTFfc2V0X3Bvd2VyX21nbXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo1OTc1Olx0LmNvbm5lY3QgPSBicmNtZl9jZmc4MDIxMV9jb25uZWN0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNTk3Ni1cdC5kaXNjb25uZWN0ID0gYnJjbWZfY2ZnODAyMTFfZGlzY29ubmVjdCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz02MTQ2PXN0YXRpYyB2b2lkIGJyY21mX2NsZWFyX2Fzc29jX2llcyhzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjE0Ny17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo2MTQ4Olx0c3RydWN0IGJyY21mX2NmZzgwMjExX2Nvbm5lY3RfaW5mbyAqY29ubl9pbmZvID0gY2ZnX3RvX2Nvbm4oY2ZnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTYxNDktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjI5Nj1zdGF0aWMgczMyIGJyY21mX2dldF9hc3NvY19pZXMoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MzAwLVx0c3RydWN0IGJyY21mX2NmZzgwMjExX2Fzc29jX2llbGVuX2xlICphc3NvY19pbmZvO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjMwMTpcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MzAyLVx0c3RydWN0IGJyY21mX2NmZzgwMjExX2VkY2ZfYWNwYXJhbSBlZGNmX2FjcGFyYW1faW5mb1tFRENGX0FDX0NPVU5UXTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz02Mzc4PWJyY21mX2Jzc19yb2FtaW5nX2RvbmUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MzgzLVx0c3RydWN0IGJyY21mX2NmZzgwMjExX3Byb2ZpbGUgKnByb2ZpbGUgPSBcdTAwMjZpZnAtXHUwMDNldmlmLVx1MDAzZXByb2ZpbGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo2Mzg0Olx0c3RydWN0IGJyY21mX2NmZzgwMjExX2Nvbm5lY3RfaW5mbyAqY29ubl9pbmZvID0gY2ZnX3RvX2Nvbm4oY2ZnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTYzODUtXHRzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gY2ZnX3RvX3dpcGh5KGNmZyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjQ1MT1icmNtZl9ic3NfY29ubmVjdF9kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjQ1Ni1cdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlICpwcm9maWxlID0gXHUwMDI2aWZwLVx1MDAzZXZpZi1cdTAwM2Vwcm9maWxlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjQ1NzpcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02NDU4LVx0c3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcmVzcF9wYXJhbXMgY29ubl9wYXJhbXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMzYKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA0MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24gYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBhZmZlY3Rpbmcgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAsIGBicmNtZl9jb25maWd1cmVfd3BhaWVgLCBgYnJjbWZfcDJwX2lzX2RwcF9wdWJfYWN0aW9uYCwgYW5kIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBtb2RpZmljYXRpb25zLCBzbyBJJiMzOTttIGRlZmluaXRlbHkgZ29pbmcgdG8gZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBwdWxsIG91dCB0aGUgc3BlY2lmaWMgc3ltYm9scyB0byBmb2N1cyBvbi4gTG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290OiBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAsIGBicmNtZl9jb25maWd1cmVfd3BhaWVgLCBgYnJjbWZfcDJwX3NlbmRfYWN0aW9uX2ZyYW1lYCwgYGJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvbmAuIEFkZGl0aW9uYWxseSwgdGhlcmUgYXJlIGEgZmV3IG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBub3RlOiBgYnJjbWZfcDJwX2lzX3B1Yl9hY3Rpb25gLCBgYnJjbWZfcDJwX2lzX3AycF9hY3Rpb25gLCBhbmQgYGJyY21mX3AycF9hYm9ydF9hY3Rpb25fZnJhbWVgLgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBgQlJDTUZNQUNgLCBgQlJDTUZNQUNfVVNCYCwgYEJSQ01GTUFDX1BDSUVgLCBhbmQgYEJSQ01GTUFDX1NESU9gLiBEbyBJIG5lZWQgYWxsIG9mIHRoZW0/IE5vLCB0aGF0JiMzOTtzIGluZWZmaWNpZW50LiBgQlJDTUZNQUNfVVNCYCBpcyB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIsIHNvIGxldCYjMzk7cyBqdXN0IHN0aWNrIHdpdGggYEJSQ01GTUFDYCBhbmQgYEJSQ01GTUFDX1VTQmAgZm9yIG5vdy4KCkp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIHNlZSBhYm91dCBgV0xBTl9BS01fU1VJVEVfV0ZBX0RQUGAuIE5vcGUsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGUsIHNvIHRoYXQmIzM5O3MgZ29vZC4gQWxyaWdodCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBgYnJjbWZtYWMvS2NvbmZpZ2AgZmlsZSBvbmUgbW9yZSB0aW1lLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUkNNRk1BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE6Y29uZmlnIEJSQ01GTUFDXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTE6Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEyLVx0Ym9vbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNDpjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNS1cdGJvb2xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTc6Y29uZmlnIEJSQ01GTUFDX1NESU9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjI5OmNvbmZpZyBCUkNNRk1BQ19VU0JcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtVU0IgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTM5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6NDA6Y29uZmlnIEJSQ01GTUFDX1BDSUVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MzcKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBQMlAgSW1wbGVtZW50YXRpb24gd2l0aGluIEJSQ01GTUFDKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBtYWtlIHN1cmUgdGhhdCBJJiMzOTttIGNvdmVyaW5nIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBQMlAgd2l0aGluIHRoZSBCUkNNRk1BQyBmcmFtZXdvcmssIGFuZCB0aGF0IGluY2x1ZGVzIGJvdGggYEJSQ01GTUFDYCBhbmQgYEJSQ01GTUFDX1VTQmAgYnVpbGRzLiBJIGtub3cgdGhvc2UgYXJlIGtleSBjb21wb25lbnRzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSBmdW5jdGlvbiBjYWxscy4gSSB3YW50IHRvIHNwZWNpZmljYWxseSBleGFtaW5lIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgIGFuZCBgYnJjbWZfcDJwX2Fib3J0X2FjdGlvbl9mcmFtZWAuIFRoZXkmIzM5O3JlIGxpa2VseSBpbiBgcDJwLmNgLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGVpciBpbXBsZW1lbnRhdGlvbiBhbmQgaW50ZXJhY3Rpb25zLgoKTm93LCBhIGNyaXRpY2FsIHBvaW50OiBpcyB0aGVyZSBhIHNwZWNpZmljLCBkZWRpY2F0ZWQgY29uZmlndXJhdGlvbiBmbGFnIG9yIHNldHRpbmcgd2l0aGluIGJyY21mbWFjIHRoYXQgZ292ZXJucyBQMlAgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUmIzM5O3MgYSBkaXN0aW5jdCBlbmFibGUvZGlzYWJsZSBzd2l0Y2gsIG9yIG1heWJlIGEgc2V0IG9mIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSBiZWhhdmlvci4gVG8gY2xhcmlmeSB0aGUgYnVpbGQgYW5kIGl0cyBzZXR0aW5ncywgbGV0JiMzOTtzIGRvIGEgcXVpY2sgYGdyZXBgIGZvciBgcDJwLmNgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZWAgZmlsZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGNvbXBvbmVudCBpcyBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGFueSBwb3RlbnRpYWwgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cDJwXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGU9MTM9YnJjbWZtYWMtb2JqcyAmIzQzOz0gXFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtMTctXHRcdGZ3ZWgubyBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlOjE4Olx0XHRwMnAubyBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTE5LVx0XHRwcm90by5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDE2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzU4CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDY1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIERyaXZlciBDaGFuZ2VzKioKCk9rYXksIHNvIHRoZSBgQlJDTUZNQUNgIGRyaXZlciBoYXMgYmVlbiB1cGRhdGVkLCBhbmQgdGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkIG9uIGFkZGluZyBzdXBwb3J0IGZvciBEUFAgYXV0aGVudGljYXRpb24uIFRoaXMgaXMgZ29pbmcgdG8gaW52b2x2ZSBjaGFuZ2VzIHRvIHRoZSBmaXJtd2FyZSBzdXBwbGljYW50IGxvZ2ljIHdpdGhpbiB0aGUgZHJpdmVyLiBTaW5jZSBgQlJDTUZNQUNgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBtb3N0IGxpa2VseSB0byBiZSBpbXBhY3RlZCBhbmQsIHRoZXJlZm9yZSwgcG90ZW50aWFsIHRhcmdldHMgZm9yIGZ1enppbmcuCgpNeSBpbml0aWFsIHJldmlldyBzdWdnZXN0cyBhIGZldyBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsOiBgYnJjbWZfc2V0X2tleV9tZ210YCwgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLCBgYnJjbWZfY29uZmlndXJlX3dwYWllYCwgYGJyY21mX3AycF9pc19wdWJfYWN0aW9uYCwgYGJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvbmAsIGBicmNtZl9wMnBfaXNfcDJwX2FjdGlvbmAsIGBicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lYCwgYW5kIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgLiBJJiMzOTtsbCBza2ltIG92ZXIgYGJyY21mX3ZhbGlkX2RwcF9zdWl0ZWAgc2luY2UgaXQmIzM5O3MgcHJvYmFibHkgc2ltcGxlLCBidXQgdGhlIG90aGVycyBsb29rIHByb21pc2luZy4gYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgIGFuZCBgYnJjbWZfY29uZmlndXJlX3dwYWllYCBzdGFuZCBvdXQgYXMgaW1wb3J0YW50LiBgYnJjbWZfcDJwX3NlbmRfYWN0aW9uX2ZyYW1lYCBpcyBhbHNvIGNyaXRpY2FsLgoKSSYjMzk7bGwgZG91YmxlLWNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEFoLCBgQ0ZHODAyMTFgIGlzIHJlcXVpcmVkIGZvciBgQlJDTUZNQUNgLCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIGluY2x1ZGUgdGhhdCBpbiBteSBjb25maWd1cmF0aW9uLiBBIHF1aWNrIGNoZWNrIG9mIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCBpbiBgY2ZnODAyMTEuY2AgcmV2ZWFscyBpdCYjMzk7cyBhIGNhbGxiYWNrIGZvciB0aGUgYGNmZzgwMjExX29wcy5jb25uZWN0YCBmdW5jdGlvbiwgYW5kIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgIGdldHMgY2FsbGVkIGZyb20gYGJyY21mX2NmZzgwMjExX21nbXRfdHhgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCB3aGljaCBtZWFucyBJIGNhbiBkaXJlY3RseSB0YXJnZXQgdGhlbSB3aXRoIGZ1enppbmcuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTt2ZSBjb21waWxlZCB0aGUgZm9sbG93aW5nIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLCBhbmQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9uYWxpdHkgYXJvdW5kIERQUCBhbmQgbW9kaWZpZXMgZXhpc3RpbmcgUDJQIGxvZ2ljIGluIGEgZHJpdmVyIHRoYXQmIzM5O3MgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBhbmQgVVNCLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4KCkhlcmUgaXMgdGhlIGRhdGE6CgpgV29ydGhGdXp6aW5nOiB0cnVlYAoKYEZvY3VzU3ltYm9sczpgCi0gYGJyY21mX3NldF9rZXlfbWdtdGAKLSBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAKLSBgYnJjbWZfY29uZmlndXJlX3dwYWllYAotIGBicmNtZl9wMnBfaXNfcHViX2FjdGlvbmAKLSBgYnJjbWZfcDJwX2lzX2RwcF9wdWJfYWN0aW9uYAotIGBicmNtZl9wMnBfaXNfcDJwX2FjdGlvbmAKLSBgYnJjbWZfcDJwX2Fib3J0X2FjdGlvbl9mcmFtZWAKLSBgYnJjbWZfcDJwX3NlbmRfYWN0aW9uX2ZyYW1lYAoKYEVuYWJsZUNvbmZpZ3M6YAotIGBCUkNNRk1BQ2AKLSBgQlJDTUZNQUNfVVNCYAotIGBDRkc4MDIxMWAKCmBSZWFzb25pbmc6YCBUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEUFAgYXV0aGVudGljYXRpb24gYW5kIG1vZGlmaWVzIHRoZSBmaXJtd2FyZSBzdXBwbGljYW50IGxvZ2ljIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChicmNtZm1hYykuIEl0IGFsc28gdXBkYXRlcyBQMlAgYWN0aW9uIGZyYW1lIGhhbmRsaW5nIHRvIHN1cHBvcnQgRFBQIHB1YmxpYyBhY3Rpb24gZnJhbWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBkcml2ZXImIzM5O3MgY2ZnODAyMTEgY2FsbGJhY2tzIGFuZCBQMlAgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBVU0IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyY21mX3NldF9rZXlfbWdtdCYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9jb25uZWN0JiMzNDssCiAgICAmIzM0O2JyY21mX2NvbmZpZ3VyZV93cGFpZSYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfaXNfcHViX2FjdGlvbiYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24mIzM0OywKICAgICYjMzQ7YnJjbWZfcDJwX2lzX3AycF9hY3Rpb24mIzM0OywKICAgICYjMzQ7YnJjbWZfcDJwX2Fib3J0X2FjdGlvbl9mcmFtZSYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEUFAgYXV0aGVudGljYXRpb24gYW5kIG1vZGlmaWVzIHRoZSBmaXJtd2FyZSBzdXBwbGljYW50IGxvZ2ljIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChicmNtZm1hYykuIEl0IGFsc28gdXBkYXRlcyBQMlAgYWN0aW9uIGZyYW1lIGhhbmRsaW5nIHRvIHN1cHBvcnQgRFBQIHB1YmxpYyBhY3Rpb24gZnJhbWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBkcml2ZXImIzM5O3MgY2ZnODAyMTEgY2FsbGJhY2tzIGFuZCBQMlAgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJDTUZNQUMmIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfVVNCJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJjbWZfc2V0X2tleV9tZ210JiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnJjbWZfY29uZmlndXJlX3dwYWllJiMzNDssCiAgICAmIzM0O2JyY21mX3AycF9pc19wdWJfYWN0aW9uJiMzNDssCiAgICAmIzM0O2JyY21mX3AycF9pc19kcHBfcHViX2FjdGlvbiYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfaXNfcDJwX2FjdGlvbiYjMzQ7LAogICAgJiMzNDticmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lJiMzNDssCiAgICAmIzM0O2JyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIERQUCBhdXRoZW50aWNhdGlvbiBhbmQgbW9kaWZpZXMgdGhlIGZpcm13YXJlIHN1cHBsaWNhbnQgbG9naWMgaW4gdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKS4gSXQgYWxzbyB1cGRhdGVzIFAyUCBhY3Rpb24gZnJhbWUgaGFuZGxpbmcgdG8gc3VwcG9ydCBEUFAgcHVibGljIGFjdGlvbiBmcmFtZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGRyaXZlciYjMzk7cyBjZmc4MDIxMSBjYWxsYmFja3MgYW5kIFAyUCBsb2dpYywgd2hpY2ggY2FuIGJlIHJlYWNoZWQgdmlhIG5ldGxpbmsgY29tbWFuZHMgYW5kIFVTQiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MDAuNDcyMTE1NTYxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0NjgzNjYwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicmNtZl9zZXRfa2V5X21nbXRcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2Nvbm5lY3RcIixcbiAgICBcImJyY21mX2NvbmZpZ3VyZV93cGFpZVwiLFxuICAgIFwiYnJjbWZfcDJwX2lzX3B1Yl9hY3Rpb25cIixcbiAgICBcImJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvblwiLFxuICAgIFwiYnJjbWZfcDJwX2lzX3AycF9hY3Rpb25cIixcbiAgICBcImJyY21mX3AycF9hYm9ydF9hY3Rpb25fZnJhbWVcIixcbiAgICBcImJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRFBQIGF1dGhlbnRpY2F0aW9uIGFuZCBtb2RpZmllcyB0aGUgZmlybXdhcmUgc3VwcGxpY2FudCBsb2dpYyBpbiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlciAoYnJjbWZtYWMpLiBJdCBhbHNvIHVwZGF0ZXMgUDJQIGFjdGlvbiBmcmFtZSBoYW5kbGluZyB0byBzdXBwb3J0IERQUCBwdWJsaWMgYWN0aW9uIGZyYW1lcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZHJpdmVyJ3MgY2ZnODAyMTEgY2FsbGJhY2tzIGFuZCBQMlAgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBVU0IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MDAuNDcyMTIzMDkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTkxMjExNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2NmNiYjc3ZjI4OWY1ZDZmNzY4NWYxNTEzN2JmNmFiNjJlZDM5YWUyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDggMTY6MDc6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xcbmluZGV4IDRiNzA4NDVlMWEyNjQzLi5kNjFjM2UwM2ExMDZhNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXFxuQEAgLTgsNiArOCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2NmZzgwMjExLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbkBAIC0yMTU0LDYgKzIxNTUsOSBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxcbiBcXHRcXHRcXHR2YWwgPSBXUEEyX0FVVEhfUFNLIHwgV1BBMl9BVVRIX0ZUO1xcbiBcXHRcXHRcXHRwcm9maWxlLVxcdTAwM2Vpc19mdCA9IHRydWU7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA6XFxuK1xcdFxcdFxcdHZhbCA9IFdGQV9BVVRIX0RQUDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJpbnZhbGlkIGFrbSBzdWl0ZSAoJWQpXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgc21lLVxcdTAwM2VjcnlwdG8uYWttX3N1aXRlc1swXSk7XFxuQEAgLTI0NjYsNDMgKzI0NzAsNTAgQEAgYnJjbWZfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4gXFx0XFx0Z290byBkb25lO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc21lLVxcdTAwM2VjcnlwdG8ucHNrIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcXG4tXFx0XFx0aWYgKFdBUk5fT04ocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkpIHtcXG4tXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0Z290byBkb25lO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGJyY21mX2RiZyhJTkZPLCBcXFwidXNpbmcgUFNLIG9mZmxvYWRcXFxcblxcXCIpO1xcbi1cXHRcXHRwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSztcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpIHtcXG4tXFx0XFx0LyogZW5hYmxlIGZpcm13YXJlIHN1cHBsaWNhbnQgZm9yIHRoaXMgaW50ZXJmYWNlICovXFxuLVxcdFxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9pbnRfc2V0KGlmcCwgXFxcInN1cF93cGFcXFwiLCAxKTtcXG4tXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImZhaWxlZCB0byBlbmFibGUgZncgc3VwcGxpY2FudFxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdGdvdG8gZG9uZTtcXG4rXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfRldTVVApKSB7XFxuK1xcdFxcdHUzMiBha20gPSBzbWUtXFx1MDAzZWNyeXB0by5uX2FrbV9zdWl0ZXMgPyBzbWUtXFx1MDAzZWNyeXB0by5ha21fc3VpdGVzWzBdIDogMDtcXG4rXFx0XFx0Ym9vbCBpc19zYWVfYWttID0gYWttID09IFdMQU5fQUtNX1NVSVRFX1NBRSB8fFxcbitcXHRcXHRcXHRha20gPT0gV0xBTl9BS01fU1VJVEVfRlRfT1ZFUl9TQUU7XFxuK1xcbitcXHRcXHRpZiAoc21lLVxcdTAwM2VjcnlwdG8ucHNrIFxcdTAwMjZcXHUwMDI2ICFpc19zYWVfYWttIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcXG4rXFx0XFx0XFx0aWYgKFdBUk5fT04ocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwICE9XFxuK1xcdFxcdFxcdFxcdCAgICBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpKSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRicmNtZl9kYmcoSU5GTywgXFxcInVzaW5nIFBTSyBvZmZsb2FkXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XFxuIFxcdFxcdH1cXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSylcXG4tXFx0XFx0ZXJyID0gYnJjbWZfc2V0X3BtayhpZnAsIHNtZS1cXHUwMDNlY3J5cHRvLnBzayxcXG4tXFx0XFx0XFx0XFx0ICAgIEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pO1xcbi1cXHRlbHNlIGlmIChwcm9maWxlLVxcdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcXG4tXFx0XFx0LyogY2xlYW4gdXAgdXNlci1zcGFjZSBSU05FICovXFxuLVxcdFxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJ3cGFpZVxcXCIsIE5VTEwsIDApO1xcbi1cXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJmYWlsZWQgdG8gY2xlYW4gdXAgdXNlci1zcGFjZSBSU05FXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0Z290byBkb25lO1xcbitcXHRcXHRpZiAocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwICE9IEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkge1xcbitcXHRcXHRcXHQvKiBlbmFibGUgZmlybXdhcmUgc3VwcGxpY2FudCBmb3IgdGhpcyBpbnRlcmZhY2UgKi9cXG4rXFx0XFx0XFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2ludF9zZXQoaWZwLCBcXFwic3VwX3dwYVxcXCIsIDEpO1xcbitcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiZmFpbGVkIHRvIGVuYWJsZSBmdyBzdXBwbGljYW50XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0Z290byBkb25lO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9pbnRfc2V0KGlmcCwgXFxcInN1cF93cGFcXFwiLCAwKTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRlcnIgPSBicmNtZl9md3ZpZF9zZXRfc2FlX3Bhc3N3b3JkKGlmcCwgXFx1MDAyNnNtZS1cXHUwMDNlY3J5cHRvKTtcXG4tXFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgc21lLVxcdTAwM2VjcnlwdG8ucHNrKVxcbitcXHRcXHRpZiAocHJvZmlsZS1cXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfUFNLKVxcbiBcXHRcXHRcXHRlcnIgPSBicmNtZl9zZXRfcG1rKGlmcCwgc21lLVxcdTAwM2VjcnlwdG8ucHNrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgQlJDTUZfV1NFQ19NQVhfUFNLX0xFTik7XFxuK1xcdFxcdGVsc2UgaWYgKHByb2ZpbGUtXFx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgc21lLVxcdTAwM2VjcnlwdG8uc2FlX3B3ZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9TQUUpKSB7XFxuK1xcdFxcdFxcdC8qIGNsZWFuIHVwIHVzZXItc3BhY2UgUlNORSAqL1xcbitcXHRcXHRcXHRpZiAoYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcIndwYWllXFxcIiwgTlVMTCwgMCkpIHtcXG4rXFx0XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImZhaWxlZCB0byBjbGVhbiB1cCB1c2VyLXNwYWNlIFJTTkVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0ZXJyID0gYnJjbWZfZnd2aWRfc2V0X3NhZV9wYXNzd29yZChpZnAsIFxcdTAwMjZzbWUtXFx1MDAzZWNyeXB0byk7XFxuK1xcdFxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHNtZS1cXHUwMDNlY3J5cHRvLnBzaylcXG4rXFx0XFx0XFx0XFx0ZXJyID0gYnJjbWZfc2V0X3BtayhpZnAsIHNtZS1cXHUwMDNlY3J5cHRvLnBzayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZG9uZTtcXG4gXFx0fVxcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIGRvbmU7XFxuLVxcbiBcXHQvKiBKb2luIHdpdGggc3BlY2lmaWMgQlNTSUQgYW5kIGNhY2hlZCBTU0lEXFxuIFxcdCAqIElmIFNTSUQgaXMgemVybyBqb2luIGJhc2VkIG9uIEJTU0lEIG9ubHlcXG4gXFx0ICovXFxuQEAgLTQ1MTksNiArNDUzMCwxMSBAQCBzdGF0aWMgYm9vbCBicmNtZl92YWxpZF93cGFfb3VpKHU4ICpvdWksIGJvb2wgaXNfcnNuX2llKVxcbiBcXHRyZXR1cm4gKG1lbWNtcChvdWksIFdQQV9PVUksIFRMVl9PVUlfTEVOKSA9PSAwKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgYnJjbWZfdmFsaWRfZHBwX3N1aXRlKHU4ICpvdWkpXFxuK3tcXG4rXFx0cmV0dXJuIGdldF91bmFsaWduZWRfYmUzMihvdWkpID09IFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA7XFxuK31cXG4rXFxuIHN0YXRpYyBzMzJcXG4gYnJjbWZfY29uZmlndXJlX3dwYWllKHN0cnVjdCBicmNtZl9pZiAqaWZwLFxcbiBcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnJjbWZfdnNfdGx2ICp3cGFfaWUsXFxuQEAgLTQ2MzIsNDIgKzQ2NDgsNDcgQEAgYnJjbWZfY29uZmlndXJlX3dwYWllKHN0cnVjdCBicmNtZl9pZiAqaWZwLFxcbiBcXHRcXHRnb3RvIGV4aXQ7XFxuIFxcdH1cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4tXFx0XFx0aWYgKCFicmNtZl92YWxpZF93cGFfb3VpKFxcdTAwMjZkYXRhW29mZnNldF0sIGlzX3Jzbl9pZSkpIHtcXG4rXFx0XFx0aWYgKGJyY21mX3ZhbGlkX2RwcF9zdWl0ZShcXHUwMDI2ZGF0YVtvZmZzZXRdKSkge1xcbitcXHRcXHRcXHR3cGFfYXV0aCB8PSBXRkFfQVVUSF9EUFA7XFxuK1xcdFxcdFxcdG9mZnNldCArPSBUTFZfT1VJX0xFTjtcXG4rXFx0XFx0fSBlbHNlIGlmIChicmNtZl92YWxpZF93cGFfb3VpKFxcdTAwMjZkYXRhW29mZnNldF0sIGlzX3Jzbl9pZSkpIHtcXG4rXFx0XFx0XFx0b2Zmc2V0ICs9IFRMVl9PVUlfTEVOO1xcbitcXHRcXHRcXHRzd2l0Y2ggKGRhdGFbb2Zmc2V0XSkge1xcbitcXHRcXHRcXHRjYXNlIFJTTl9BS01fTk9ORTpcXG4rXFx0XFx0XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiUlNOX0FLTV9OT05FXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0d3BhX2F1dGggfD0gV1BBX0FVVEhfTk9ORTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGNhc2UgUlNOX0FLTV9VTlNQRUNJRklFRDpcXG4rXFx0XFx0XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiUlNOX0FLTV9VTlNQRUNJRklFRFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdGlzX3Jzbl9pZSA/XFxuK1xcdFxcdFxcdFxcdFxcdCh3cGFfYXV0aCB8PSBXUEEyX0FVVEhfVU5TUEVDSUZJRUQpIDpcXG4rXFx0XFx0XFx0XFx0XFx0KHdwYV9hdXRoIHw9IFdQQV9BVVRIX1VOU1BFQ0lGSUVEKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGNhc2UgUlNOX0FLTV9QU0s6XFxuK1xcdFxcdFxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcIlJTTl9BS01fUFNLXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0aXNfcnNuX2llID8gKHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0spIDpcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICh3cGFfYXV0aCB8PSBXUEFfQVVUSF9QU0spO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0Y2FzZSBSU05fQUtNX1NIQTI1Nl9QU0s6XFxuK1xcdFxcdFxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcIlJTTl9BS01fTUZQX1BTS1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0tfU0hBMjU2O1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0Y2FzZSBSU05fQUtNX1NIQTI1Nl8xWDpcXG4rXFx0XFx0XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiUlNOX0FLTV9NRlBfMVhcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHR3cGFfYXV0aCB8PSBXUEEyX0FVVEhfMVhfU0hBMjU2O1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0Y2FzZSBSU05fQUtNX1NBRTpcXG4rXFx0XFx0XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiUlNOX0FLTV9TQUVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHR3cGFfYXV0aCB8PSBXUEEzX0FVVEhfU0FFX1BTSztcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJJbnZhbGlkIGtleSBtZ210IGluZm9cXFxcblxcXCIpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIFxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJpbnZhbGlkIE9VSVxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRvZmZzZXQgKz0gVExWX09VSV9MRU47XFxuLVxcdFxcdHN3aXRjaCAoZGF0YVtvZmZzZXRdKSB7XFxuLVxcdFxcdGNhc2UgUlNOX0FLTV9OT05FOlxcbi1cXHRcXHRcXHRicmNtZl9kYmcoVFJBQ0UsIFxcXCJSU05fQUtNX05PTkVcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHR3cGFfYXV0aCB8PSBXUEFfQVVUSF9OT05FO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBSU05fQUtNX1VOU1BFQ0lGSUVEOlxcbi1cXHRcXHRcXHRicmNtZl9kYmcoVFJBQ0UsIFxcXCJSU05fQUtNX1VOU1BFQ0lGSUVEXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0aXNfcnNuX2llID8gKHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9VTlNQRUNJRklFRCkgOlxcbi1cXHRcXHRcXHRcXHQgICAgKHdwYV9hdXRoIHw9IFdQQV9BVVRIX1VOU1BFQ0lGSUVEKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgUlNOX0FLTV9QU0s6XFxuLVxcdFxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcIlJTTl9BS01fUFNLXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0aXNfcnNuX2llID8gKHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0spIDpcXG4tXFx0XFx0XFx0XFx0ICAgICh3cGFfYXV0aCB8PSBXUEFfQVVUSF9QU0spO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBSU05fQUtNX1NIQTI1Nl9QU0s6XFxuLVxcdFxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcIlJTTl9BS01fTUZQX1BTS1xcXFxuXFxcIik7XFxuLVxcdFxcdFxcdHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0tfU0hBMjU2O1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBSU05fQUtNX1NIQTI1Nl8xWDpcXG4tXFx0XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiUlNOX0FLTV9NRlBfMVhcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHR3cGFfYXV0aCB8PSBXUEEyX0FVVEhfMVhfU0hBMjU2O1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBSU05fQUtNX1NBRTpcXG4tXFx0XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwiUlNOX0FLTV9TQUVcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHR3cGFfYXV0aCB8PSBXUEEzX0FVVEhfU0FFX1BTSztcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJJbnZhbGlkIGtleSBtZ210IGluZm9cXFxcblxcXCIpO1xcbi1cXHRcXHR9XFxuIFxcdFxcdG9mZnNldCsrO1xcbiBcXHR9XFxuIFxcbkBAIC00Njg3LDEwICs0NzA4LDEyIEBAIGJyY21mX2NvbmZpZ3VyZV93cGFpZShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcXG4gXFx0XFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdFxcdGlmICghKHdwYV9hdXRoIFxcdTAwMjYgKFdQQTJfQVVUSF9QU0tfU0hBMjU2IHxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBXUEEyX0FVVEhfMVhfU0hBMjU2IHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBXRkFfQVVUSF9EUFAgfFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIFdQQTNfQVVUSF9TQUVfUFNLKSkpIHtcXG4gXFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBleGl0O1xcbiBcXHRcXHRcXHRcXHR9XFxuK1xcbiBcXHRcXHRcXHRcXHQvKiBGaXJtd2FyZSBoYXMgcmVxdWlyZW1lbnQgdGhhdCBXUEEyX0FVVEhfUFNLL1xcbiBcXHRcXHRcXHRcXHQgKiBXUEEyX0FVVEhfVU5TUEVDSUZJRUQgYmUgc2V0LCBpZiBTSEEyNTYgT1VJXFxuIFxcdFxcdFxcdFxcdCAqIGlzIHRvIGJlIGluY2x1ZGVkIGluIHRoZSByc24gaWUuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuY1xcbmluZGV4IDZlMGM5MGY0NzE4YjU4Li4yYzFmNTJlZDUxMzgwMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvY2ZnODAyMTEuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NicmNtdV93aWZpLmhcXHUwMDNlXFxuQEAgLTQ0LDkgKzQ1LDYgQEBcXG4gXFxuICNkZWZpbmUgQlJDTUZfU0NCX1RJTUVPVVRfVkFMVUVcXHQyMFxcbiBcXG4tI2RlZmluZSBQMlBfVkVSXFx0XFx0XFx0OVxcdC8qIFAyUCB2ZXJzaW9uOiA5PVdpRmkgUDJQIHYxLjAgKi9cXG4tI2RlZmluZSBQMlBfUFVCX0FGX0NBVEVHT1JZXFx0MHgwNFxcbi0jZGVmaW5lIFAyUF9QVUJfQUZfQUNUSU9OXFx0MHgwOVxcbiAjZGVmaW5lIFAyUF9BRl9DQVRFR09SWVxcdFxcdDB4N2ZcXG4gI2RlZmluZSBQMlBfT1VJXFx0XFx0XFx0XFxcIlxcXFx4NTBcXFxceDZGXFxcXHg5QVxcXCJcXHQvKiBQMlAgT1VJICovXFxuICNkZWZpbmUgUDJQX09VSV9MRU5cXHRcXHQzXFx0XFx0LyogUDJQIE9VSSBsZW5ndGggKi9cXG5AQCAtMTQzLDEwICsxNDEsMTAgQEAgc3RydWN0IGJyY21mX3AycF9zY2FuX2xlIHtcXG4gLyoqXFxuICAqIHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSAtIFdpRmkgUDJQIFB1YmxpYyBBY3Rpb24gRnJhbWVcXG4gICpcXG4tICogQGNhdGVnb3J5OiBQMlBfUFVCX0FGX0NBVEVHT1JZXFxuLSAqIEBhY3Rpb246IFAyUF9QVUJfQUZfQUNUSU9OXFxuKyAqIEBjYXRlZ29yeTogV0xBTl9DQVRFR09SWV9QVUJMSUNcXG4rICogQGFjdGlvbjogV0xBTl9QVUJfQUNUSU9OX1ZFTkRPUl9TUEVDSUZJQ1xcbiAgKiBAb3VpOiBQMlBfT1VJXFxuLSAqIEBvdWlfdHlwZTogT1VJIHR5cGUgLSBQMlBfVkVSXFxuKyAqIEBvdWlfdHlwZTogT1VJIHR5cGUgLSBXTEFOX09VSV9UWVBFX1dGQV9QMlBcXG4gICogQHN1YnR5cGU6IE9VSSBzdWJ0eXBlIC0gUDJQX1RZUEVfKlxcbiAgKiBAZGlhbG9nX3Rva2VuOiBub256ZXJvLCBpZGVudGlmaWVzIHJlcS9yc3AgdHJhbnNhY3Rpb25cXG4gICogQGVsdHM6IFZhcmlhYmxlIGxlbmd0aCBpbmZvcm1hdGlvbiBlbGVtZW50cy5cXG5AQCAtMTY2LDcgKzE2NCw3IEBAIHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSB7XFxuICAqXFxuICAqIEBjYXRlZ29yeTogUDJQX0FGX0NBVEVHT1JZXFxuICAqIEBvdWk6IE9VSSAtIFAyUF9PVUlcXG4tICogQHR5cGU6IE9VSSBUeXBlIC0gUDJQX1ZFUlxcbisgKiBAdHlwZTogT1VJIFR5cGUgLSBXTEFOX09VSV9UWVBFX1dGQV9QMlBcXG4gICogQHN1YnR5cGU6IE9VSSBTdWJ0eXBlIC0gUDJQX0FGXypcXG4gICogQGRpYWxvZ190b2tlbjogbm9uemVybywgaWRlbnRpZmllcyByZXEvcmVzcCB0cmFuYWN0aW9uXFxuICAqIEBlbHRzOiBWYXJpYWJsZSBsZW5ndGggaW5mb3JtYXRpb24gZWxlbWVudHMuXFxuQEAgLTIyOCwxMCArMjI2LDM4IEBAIHN0YXRpYyBib29sIGJyY21mX3AycF9pc19wdWJfYWN0aW9uKHZvaWQgKmZyYW1lLCB1MzIgZnJhbWVfbGVuKVxcbiBcXHRpZiAoZnJhbWVfbGVuIFxcdTAwM2Mgc2l6ZW9mKCpwYWN0X2ZybSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGlmIChwYWN0X2ZybS1cXHUwMDNlY2F0ZWdvcnkgPT0gUDJQX1BVQl9BRl9DQVRFR09SWSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgcGFjdF9mcm0tXFx1MDAzZWFjdGlvbiA9PSBQMlBfUFVCX0FGX0FDVElPTiBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgcGFjdF9mcm0tXFx1MDAzZW91aV90eXBlID09IFAyUF9WRVIgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIG1lbWNtcChwYWN0X2ZybS1cXHUwMDNlb3VpLCBQMlBfT1VJLCBQMlBfT1VJX0xFTikgPT0gMClcXG4rXFx0aWYgKHBhY3RfZnJtLVxcdTAwM2VjYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcGFjdF9mcm0tXFx1MDAzZWFjdGlvbiA9PSBXTEFOX1BVQl9BQ1RJT05fVkVORE9SX1NQRUNJRklDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwYWN0X2ZybS1cXHUwMDNlb3VpX3R5cGUgPT0gV0xBTl9PVUlfVFlQRV9XRkFfUDJQIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBnZXRfdW5hbGlnbmVkX2JlMjQocGFjdF9mcm0tXFx1MDAzZW91aSkgPT0gV0xBTl9PVUlfV0ZBKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvbigpIC0gdHJ1ZSBpZiBkcHAgcHVibGljIHR5cGUgZnJhbWUuXFxuKyAqXFxuKyAqIEBmcmFtZTogYWN0aW9uIGZyYW1lIGRhdGEuXFxuKyAqIEBmcmFtZV9sZW46IGxlbmd0aCBvZiBhY3Rpb24gZnJhbWUgZGF0YS5cXG4rICpcXG4rICogRGV0ZXJtaW5lIGlmIGFjdGlvbiBmcmFtZSBpcyBkcHAgcHVibGljIGFjdGlvbiB0eXBlXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24odm9pZCAqZnJhbWUsIHUzMiBmcmFtZV9sZW4pXFxuK3tcXG4rXFx0c3RydWN0IGJyY21mX3AycF9wdWJfYWN0X2ZyYW1lICpwYWN0X2ZybTtcXG4rXFxuK1xcdGlmICghZnJhbWUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHBhY3RfZnJtID0gKHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSAqKWZyYW1lO1xcbitcXHRpZiAoZnJhbWVfbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSkgLSAxKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocGFjdF9mcm0tXFx1MDAzZWNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfUFVCTElDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwYWN0X2ZybS1cXHUwMDNlYWN0aW9uID09IFdMQU5fUFVCX0FDVElPTl9WRU5ET1JfU1BFQ0lGSUMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHBhY3RfZnJtLVxcdTAwM2VvdWlfdHlwZSA9PSBXTEFOX09VSV9UWVBFX1dGQV9EUFAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGdldF91bmFsaWduZWRfYmUyNChwYWN0X2ZybS1cXHUwMDNlb3VpKSA9PSBXTEFOX09VSV9XRkEpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbkBAIC0yNTcsNyArMjgzLDcgQEAgc3RhdGljIGJvb2wgYnJjbWZfcDJwX2lzX3AycF9hY3Rpb24odm9pZCAqZnJhbWUsIHUzMiBmcmFtZV9sZW4pXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGlmIChhY3RfZnJtLVxcdTAwM2VjYXRlZ29yeSA9PSBQMlBfQUZfQ0FURUdPUlkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGFjdF9mcm0tXFx1MDAzZXR5cGUgID09IFAyUF9WRVIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGFjdF9mcm0tXFx1MDAzZXR5cGUgID09IFdMQU5fT1VJX1RZUEVfV0ZBX1AyUCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbWVtY21wKGFjdF9mcm0tXFx1MDAzZW91aSwgUDJQX09VSSwgUDJQX09VSV9MRU4pID09IDApXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG5AQCAtMTI4MSw2ICsxMzA3LDkgQEAgc3RhdGljIHMzMiBicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcpXFxuIFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcIkVudGVyXFxcXG5cXFwiKTtcXG4gXFxuIFxcdHZpZiA9IHAycC1cXHUwMDNlYnNzX2lkeFtQMlBBUElfQlNTQ0ZHX0RFVklDRV0udmlmO1xcbitcXHRpZiAoIXZpZilcXG4rXFx0XFx0dmlmID0gcDJwLVxcdTAwM2Vic3NfaWR4W1AyUEFQSV9CU1NDRkdfUFJJTUFSWV0udmlmO1xcbitcXG4gXFx0ZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19kYXRhX3NldCh2aWYtXFx1MDAzZWlmcCwgXFxcImFjdGZyYW1lX2Fib3J0XFxcIiwgXFx1MDAyNmludF92YWwsXFxuIFxcdFxcdFxcdFxcdFxcdHNpemVvZihzMzIpKTtcXG4gXFx0aWYgKGVycilcXG5AQCAtMTc4OSw3ICsxODE4LDkgQEAgYm9vbCBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcXG4gXFx0XFx0XFx0Z290byBleGl0O1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSBpZiAoYnJjbWZfcDJwX2lzX3AycF9hY3Rpb24oYWN0aW9uX2ZyYW1lLVxcdTAwM2VkYXRhLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBhY3Rpb25fZnJhbWVfbGVuKSkge1xcbitcXHRcXHRcXHRcXHRcXHQgICBhY3Rpb25fZnJhbWVfbGVuKSB8fFxcbitcXHRcXHQgICBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24oYWN0aW9uX2ZyYW1lLVxcdTAwM2VkYXRhLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgYWN0aW9uX2ZyYW1lX2xlbikpIHtcXG4gXFx0XFx0LyogZG8gbm90IGNvbmZpZ3VyZSBhbnl0aGluZy4gaXQgd2lsbCBiZSAqL1xcbiBcXHRcXHQvKiBzZW50IHdpdGggYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gICAgICovXFxuIFxcdH0gZWxzZSB7XFxuQEAgLTE4MjYsNiArMTg1Nyw3IEBAIGJvb2wgYnJjbWZfcDJwX3NlbmRfYWN0aW9uX2ZyYW1lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXFxuIFxcdC8qIHZhbGlkYXRlIGNoYW5uZWwgYW5kIHAycCBpZXMgKi9cXG4gXFx0aWYgKGNvbmZpZ19hZl9wYXJhbXMuc2VhcmNoX2NoYW5uZWwgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIElTX1AyUF9TT0NJQUxfQ0hBTk5FTChsZTMyX3RvX2NwdShhZl9wYXJhbXMtXFx1MDAzZWNoYW5uZWwpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcDJwLVxcdTAwM2Vic3NfaWR4W1AyUEFQSV9CU1NDRkdfREVWSUNFXS52aWYgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHAycC1cXHUwMDNlYnNzX2lkeFtQMlBBUElfQlNTQ0ZHX0RFVklDRV0udmlmLVxcdTAwM2VzYXZlZF9pZS5wcm9iZV9yZXFfaWVfbGVuKSB7XFxuIFxcdFxcdGFmeF9oZGwgPSBcXHUwMDI2cDJwLVxcdTAwM2VhZnhfaGRsO1xcbiBcXHRcXHRhZnhfaGRsLVxcdTAwM2VwZWVyX2xpc3Rlbl9jaGFuID0gbGUzMl90b19jcHUoYWZfcGFyYW1zLVxcdTAwM2VjaGFubmVsKTtcXG5AQCAtMjU0Myw0ICsyNTc1LDMgQEAgdm9pZCBicmNtZl9wMnBfZGV0YWNoKHN0cnVjdCBicmNtZl9wMnBfaW5mbyAqcDJwKVxcbiBcXHQvKiBqdXN0IHNldCBpdCBhbGwgdG8gemVybyAqL1xcbiBcXHRtZW1zZXQocDJwLCAwLCBzaXplb2YoKnAycCkpO1xcbiB9XFxuLVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvaW5jbHVkZS9icmNtdV93aWZpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvaW5jbHVkZS9icmNtdV93aWZpLmhcXG5pbmRleCA3NTUyYmRiOTE5OTFjZS4uYzQ2NTIwOGM0MzMxODIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oXFxuQEAgLTIzMyw2ICsyMzMsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWNfYml0bWFwX3RzdCh1OCBiaXRtYXAsIGludCBwcmVjKVxcbiBcXG4gI2RlZmluZSBXUEEzX0FVVEhfU0FFX1BTS1xcdDB4NDAwMDBcXHQvKiBTQUUgd2l0aCA0LXdheSBoYW5kc2hha2UgKi9cXG4gXFxuKyNkZWZpbmUgV0ZBX0FVVEhfRFBQXFx0XFx0MHgyMDAwMDAgLyogV0ZBIERQUCBBVVRIICovXFxuK1xcbiAjZGVmaW5lIERPVDExX0RFRkFVTFRfUlRTX0xFTlxcdFxcdDIzNDdcXG4gI2RlZmluZSBET1QxMV9ERUZBVUxUX0ZSQUdfTEVOXFx0XFx0MjM0NlxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MDEuMDcyMTk1NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODY4MjY4NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19VU0JcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJjbWZfc2V0X2tleV9tZ210XCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9jb25uZWN0XCIsXG4gICAgXCJicmNtZl9jb25maWd1cmVfd3BhaWVcIixcbiAgICBcImJyY21mX3AycF9pc19wdWJfYWN0aW9uXCIsXG4gICAgXCJicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb25cIixcbiAgICBcImJyY21mX3AycF9pc19wMnBfYWN0aW9uXCIsXG4gICAgXCJicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lXCIsXG4gICAgXCJicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIERQUCBhdXRoZW50aWNhdGlvbiBhbmQgbW9kaWZpZXMgdGhlIGZpcm13YXJlIHN1cHBsaWNhbnQgbG9naWMgaW4gdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKS4gSXQgYWxzbyB1cGRhdGVzIFAyUCBhY3Rpb24gZnJhbWUgaGFuZGxpbmcgdG8gc3VwcG9ydCBEUFAgcHVibGljIGFjdGlvbiBmcmFtZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGRyaXZlcidzIGNmZzgwMjExIGNhbGxiYWNrcyBhbmQgUDJQIGxvZ2ljLCB3aGljaCBjYW4gYmUgcmVhY2hlZCB2aWEgbmV0bGluayBjb21tYW5kcyBhbmQgVVNCIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjZjYmI3N2YyODlmNWQ2Zjc2ODVmMTUxMzdiZjZhYjYyZWQzOWFlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMTY6MDc6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG5pbmRleCA0YjcwODQ1ZTFhMjY0My4uZDYxYzNlMDNhMTA2YTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvY2ZnODAyMTEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2VcbkBAIC0yMTU0LDYgKzIxNTUsOSBAQCBicmNtZl9zZXRfa2V5X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxuIFx0XHRcdHZhbCA9IFdQQTJfQVVUSF9QU0sgfCBXUEEyX0FVVEhfRlQ7XG4gXHRcdFx0cHJvZmlsZS1cdTAwM2Vpc19mdCA9IHRydWU7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgV0xBTl9BS01fU1VJVEVfV0ZBX0RQUDpcbitcdFx0XHR2YWwgPSBXRkFfQVVUSF9EUFA7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCJpbnZhbGlkIGFrbSBzdWl0ZSAoJWQpXFxuXCIsXG4gXHRcdFx0XHQgc21lLVx1MDAzZWNyeXB0by5ha21fc3VpdGVzWzBdKTtcbkBAIC0yNDY2LDQzICsyNDcwLDUwIEBAIGJyY21mX2NmZzgwMjExX2Nvbm5lY3Qoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdGdvdG8gZG9uZTtcbiBcdH1cbiBcbi1cdGlmIChzbWUtXHUwMDNlY3J5cHRvLnBzayBcdTAwMjZcdTAwMjZcbi1cdCAgICBwcm9maWxlLVx1MDAzZXVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1NBRSkge1xuLVx0XHRpZiAoV0FSTl9PTihwcm9maWxlLVx1MDAzZXVzZV9md3N1cCAhPSBCUkNNRl9QUk9GSUxFX0ZXU1VQX05PTkUpKSB7XG4tXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIGRvbmU7XG4tXHRcdH1cbi1cdFx0YnJjbWZfZGJnKElORk8sIFwidXNpbmcgUFNLIG9mZmxvYWRcXG5cIik7XG4tXHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4tXHR9XG4tXG4tXHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSB7XG4tXHRcdC8qIGVuYWJsZSBmaXJtd2FyZSBzdXBwbGljYW50IGZvciB0aGlzIGludGVyZmFjZSAqL1xuLVx0XHRlcnIgPSBicmNtZl9maWxfaW92YXJfaW50X3NldChpZnAsIFwic3VwX3dwYVwiLCAxKTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLVx0XHRcdGJwaHlfZXJyKGRydnIsIFwiZmFpbGVkIHRvIGVuYWJsZSBmdyBzdXBwbGljYW50XFxuXCIpO1xuLVx0XHRcdGdvdG8gZG9uZTtcbitcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX0ZXU1VQKSkge1xuK1x0XHR1MzIgYWttID0gc21lLVx1MDAzZWNyeXB0by5uX2FrbV9zdWl0ZXMgPyBzbWUtXHUwMDNlY3J5cHRvLmFrbV9zdWl0ZXNbMF0gOiAwO1xuK1x0XHRib29sIGlzX3NhZV9ha20gPSBha20gPT0gV0xBTl9BS01fU1VJVEVfU0FFIHx8XG4rXHRcdFx0YWttID09IFdMQU5fQUtNX1NVSVRFX0ZUX09WRVJfU0FFO1xuK1xuK1x0XHRpZiAoc21lLVx1MDAzZWNyeXB0by5wc2sgXHUwMDI2XHUwMDI2ICFpc19zYWVfYWttIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcbitcdFx0XHRpZiAoV0FSTl9PTihwcm9maWxlLVx1MDAzZXVzZV9md3N1cCAhPVxuK1x0XHRcdFx0ICAgIEJSQ01GX1BST0ZJTEVfRldTVVBfTk9ORSkpIHtcbitcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0XHRnb3RvIGRvbmU7XG4rXHRcdFx0fVxuK1x0XHRcdGJyY21mX2RiZyhJTkZPLCBcInVzaW5nIFBTSyBvZmZsb2FkXFxuXCIpO1xuK1x0XHRcdHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0s7XG4gXHRcdH1cbi1cdH1cbi1cbi1cdGlmIChwcm9maWxlLVx1MDAzZXVzZV9md3N1cCA9PSBCUkNNRl9QUk9GSUxFX0ZXU1VQX1BTSylcbi1cdFx0ZXJyID0gYnJjbWZfc2V0X3BtayhpZnAsIHNtZS1cdTAwM2VjcnlwdG8ucHNrLFxuLVx0XHRcdFx0ICAgIEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pO1xuLVx0ZWxzZSBpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9TQUUpIHtcbi1cdFx0LyogY2xlYW4gdXAgdXNlci1zcGFjZSBSU05FICovXG4tXHRcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwid3BhaWVcIiwgTlVMTCwgMCk7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRicGh5X2VycihkcnZyLCBcImZhaWxlZCB0byBjbGVhbiB1cCB1c2VyLXNwYWNlIFJTTkVcXG5cIik7XG4tXHRcdFx0Z290byBkb25lO1xuK1x0XHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgIT0gQlJDTUZfUFJPRklMRV9GV1NVUF9OT05FKSB7XG4rXHRcdFx0LyogZW5hYmxlIGZpcm13YXJlIHN1cHBsaWNhbnQgZm9yIHRoaXMgaW50ZXJmYWNlICovXG4rXHRcdFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2ludF9zZXQoaWZwLCBcInN1cF93cGFcIiwgMSk7XG4rXHRcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuK1x0XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCJmYWlsZWQgdG8gZW5hYmxlIGZ3IHN1cHBsaWNhbnRcXG5cIik7XG4rXHRcdFx0XHRnb3RvIGRvbmU7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9pbnRfc2V0KGlmcCwgXCJzdXBfd3BhXCIsIDApO1xuIFx0XHR9XG4tXHRcdGVyciA9IGJyY21mX2Z3dmlkX3NldF9zYWVfcGFzc3dvcmQoaWZwLCBcdTAwMjZzbWUtXHUwMDNlY3J5cHRvKTtcbi1cdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHNtZS1cdTAwM2VjcnlwdG8ucHNrKVxuK1x0XHRpZiAocHJvZmlsZS1cdTAwM2V1c2VfZndzdXAgPT0gQlJDTUZfUFJPRklMRV9GV1NVUF9QU0spXG4gXHRcdFx0ZXJyID0gYnJjbWZfc2V0X3BtayhpZnAsIHNtZS1cdTAwM2VjcnlwdG8ucHNrLFxuIFx0XHRcdFx0XHQgICAgQlJDTUZfV1NFQ19NQVhfUFNLX0xFTik7XG4rXHRcdGVsc2UgaWYgKHByb2ZpbGUtXHUwMDNldXNlX2Z3c3VwID09IEJSQ01GX1BST0ZJTEVfRldTVVBfU0FFIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBzbWUtXHUwMDNlY3J5cHRvLnNhZV9wd2QgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfU0FFKSkge1xuK1x0XHRcdC8qIGNsZWFuIHVwIHVzZXItc3BhY2UgUlNORSAqL1xuK1x0XHRcdGlmIChicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcIndwYWllXCIsIE5VTEwsIDApKSB7XG4rXHRcdFx0XHRicGh5X2VycihkcnZyLCBcImZhaWxlZCB0byBjbGVhbiB1cCB1c2VyLXNwYWNlIFJTTkVcXG5cIik7XG4rXHRcdFx0XHRnb3RvIGRvbmU7XG4rXHRcdFx0fVxuK1x0XHRcdGVyciA9IGJyY21mX2Z3dmlkX3NldF9zYWVfcGFzc3dvcmQoaWZwLCBcdTAwMjZzbWUtXHUwMDNlY3J5cHRvKTtcbitcdFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgc21lLVx1MDAzZWNyeXB0by5wc2spXG4rXHRcdFx0XHRlcnIgPSBicmNtZl9zZXRfcG1rKGlmcCwgc21lLVx1MDAzZWNyeXB0by5wc2ssXG4rXHRcdFx0XHRcdFx0ICAgIEJSQ01GX1dTRUNfTUFYX1BTS19MRU4pO1xuK1x0XHR9XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBkb25lO1xuIFx0fVxuLVx0aWYgKGVycilcbi1cdFx0Z290byBkb25lO1xuLVxuIFx0LyogSm9pbiB3aXRoIHNwZWNpZmljIEJTU0lEIGFuZCBjYWNoZWQgU1NJRFxuIFx0ICogSWYgU1NJRCBpcyB6ZXJvIGpvaW4gYmFzZWQgb24gQlNTSUQgb25seVxuIFx0ICovXG5AQCAtNDUxOSw2ICs0NTMwLDExIEBAIHN0YXRpYyBib29sIGJyY21mX3ZhbGlkX3dwYV9vdWkodTggKm91aSwgYm9vbCBpc19yc25faWUpXG4gXHRyZXR1cm4gKG1lbWNtcChvdWksIFdQQV9PVUksIFRMVl9PVUlfTEVOKSA9PSAwKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgYnJjbWZfdmFsaWRfZHBwX3N1aXRlKHU4ICpvdWkpXG4re1xuK1x0cmV0dXJuIGdldF91bmFsaWduZWRfYmUzMihvdWkpID09IFdMQU5fQUtNX1NVSVRFX1dGQV9EUFA7XG4rfVxuK1xuIHN0YXRpYyBzMzJcbiBicmNtZl9jb25maWd1cmVfd3BhaWUoc3RydWN0IGJyY21mX2lmICppZnAsXG4gXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicmNtZl92c190bHYgKndwYV9pZSxcbkBAIC00NjMyLDQyICs0NjQ4LDQ3IEBAIGJyY21mX2NvbmZpZ3VyZV93cGFpZShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcbiBcdFx0Z290byBleGl0O1xuIFx0fVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkrKykge1xuLVx0XHRpZiAoIWJyY21mX3ZhbGlkX3dwYV9vdWkoXHUwMDI2ZGF0YVtvZmZzZXRdLCBpc19yc25faWUpKSB7XG4rXHRcdGlmIChicmNtZl92YWxpZF9kcHBfc3VpdGUoXHUwMDI2ZGF0YVtvZmZzZXRdKSkge1xuK1x0XHRcdHdwYV9hdXRoIHw9IFdGQV9BVVRIX0RQUDtcbitcdFx0XHRvZmZzZXQgKz0gVExWX09VSV9MRU47XG4rXHRcdH0gZWxzZSBpZiAoYnJjbWZfdmFsaWRfd3BhX291aShcdTAwMjZkYXRhW29mZnNldF0sIGlzX3Jzbl9pZSkpIHtcbitcdFx0XHRvZmZzZXQgKz0gVExWX09VSV9MRU47XG4rXHRcdFx0c3dpdGNoIChkYXRhW29mZnNldF0pIHtcbitcdFx0XHRjYXNlIFJTTl9BS01fTk9ORTpcbitcdFx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCJSU05fQUtNX05PTkVcXG5cIik7XG4rXHRcdFx0XHR3cGFfYXV0aCB8PSBXUEFfQVVUSF9OT05FO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0Y2FzZSBSU05fQUtNX1VOU1BFQ0lGSUVEOlxuK1x0XHRcdFx0YnJjbWZfZGJnKFRSQUNFLCBcIlJTTl9BS01fVU5TUEVDSUZJRURcXG5cIik7XG4rXHRcdFx0XHRpc19yc25faWUgP1xuK1x0XHRcdFx0XHQod3BhX2F1dGggfD0gV1BBMl9BVVRIX1VOU1BFQ0lGSUVEKSA6XG4rXHRcdFx0XHRcdCh3cGFfYXV0aCB8PSBXUEFfQVVUSF9VTlNQRUNJRklFRCk7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRjYXNlIFJTTl9BS01fUFNLOlxuK1x0XHRcdFx0YnJjbWZfZGJnKFRSQUNFLCBcIlJTTl9BS01fUFNLXFxuXCIpO1xuK1x0XHRcdFx0aXNfcnNuX2llID8gKHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0spIDpcbitcdFx0XHRcdFx0ICAgICh3cGFfYXV0aCB8PSBXUEFfQVVUSF9QU0spO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0Y2FzZSBSU05fQUtNX1NIQTI1Nl9QU0s6XG4rXHRcdFx0XHRicmNtZl9kYmcoVFJBQ0UsIFwiUlNOX0FLTV9NRlBfUFNLXFxuXCIpO1xuK1x0XHRcdFx0d3BhX2F1dGggfD0gV1BBMl9BVVRIX1BTS19TSEEyNTY7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRjYXNlIFJTTl9BS01fU0hBMjU2XzFYOlxuK1x0XHRcdFx0YnJjbWZfZGJnKFRSQUNFLCBcIlJTTl9BS01fTUZQXzFYXFxuXCIpO1xuK1x0XHRcdFx0d3BhX2F1dGggfD0gV1BBMl9BVVRIXzFYX1NIQTI1NjtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGNhc2UgUlNOX0FLTV9TQUU6XG4rXHRcdFx0XHRicmNtZl9kYmcoVFJBQ0UsIFwiUlNOX0FLTV9TQUVcXG5cIik7XG4rXHRcdFx0XHR3cGFfYXV0aCB8PSBXUEEzX0FVVEhfU0FFX1BTSztcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGRlZmF1bHQ6XG4rXHRcdFx0XHRicGh5X2VycihkcnZyLCBcIkludmFsaWQga2V5IG1nbXQgaW5mb1xcblwiKTtcbitcdFx0XHR9XG4rXHRcdH0gZWxzZSB7XG4gXHRcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0XHRicGh5X2VycihkcnZyLCBcImludmFsaWQgT1VJXFxuXCIpO1xuIFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fVxuLVx0XHRvZmZzZXQgKz0gVExWX09VSV9MRU47XG4tXHRcdHN3aXRjaCAoZGF0YVtvZmZzZXRdKSB7XG4tXHRcdGNhc2UgUlNOX0FLTV9OT05FOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCJSU05fQUtNX05PTkVcXG5cIik7XG4tXHRcdFx0d3BhX2F1dGggfD0gV1BBX0FVVEhfTk9ORTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBSU05fQUtNX1VOU1BFQ0lGSUVEOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCJSU05fQUtNX1VOU1BFQ0lGSUVEXFxuXCIpO1xuLVx0XHRcdGlzX3Jzbl9pZSA/ICh3cGFfYXV0aCB8PSBXUEEyX0FVVEhfVU5TUEVDSUZJRUQpIDpcbi1cdFx0XHRcdCAgICAod3BhX2F1dGggfD0gV1BBX0FVVEhfVU5TUEVDSUZJRUQpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJTTl9BS01fUFNLOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCJSU05fQUtNX1BTS1xcblwiKTtcbi1cdFx0XHRpc19yc25faWUgPyAod3BhX2F1dGggfD0gV1BBMl9BVVRIX1BTSykgOlxuLVx0XHRcdFx0ICAgICh3cGFfYXV0aCB8PSBXUEFfQVVUSF9QU0spO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJTTl9BS01fU0hBMjU2X1BTSzpcbi1cdFx0XHRicmNtZl9kYmcoVFJBQ0UsIFwiUlNOX0FLTV9NRlBfUFNLXFxuXCIpO1xuLVx0XHRcdHdwYV9hdXRoIHw9IFdQQTJfQVVUSF9QU0tfU0hBMjU2O1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJTTl9BS01fU0hBMjU2XzFYOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCJSU05fQUtNX01GUF8xWFxcblwiKTtcbi1cdFx0XHR3cGFfYXV0aCB8PSBXUEEyX0FVVEhfMVhfU0hBMjU2O1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJTTl9BS01fU0FFOlxuLVx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCJSU05fQUtNX1NBRVxcblwiKTtcbi1cdFx0XHR3cGFfYXV0aCB8PSBXUEEzX0FVVEhfU0FFX1BTSztcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRicGh5X2VycihkcnZyLCBcIkludmFsaWQga2V5IG1nbXQgaW5mb1xcblwiKTtcbi1cdFx0fVxuIFx0XHRvZmZzZXQrKztcbiBcdH1cbiBcbkBAIC00Njg3LDEwICs0NzA4LDEyIEBAIGJyY21mX2NvbmZpZ3VyZV93cGFpZShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcbiBcdFx0XHRcdCAqL1xuIFx0XHRcdFx0aWYgKCEod3BhX2F1dGggXHUwMDI2IChXUEEyX0FVVEhfUFNLX1NIQTI1NiB8XG4gXHRcdFx0XHRcdFx0ICBXUEEyX0FVVEhfMVhfU0hBMjU2IHxcbitcdFx0XHRcdFx0XHQgIFdGQV9BVVRIX0RQUCB8XG4gXHRcdFx0XHRcdFx0ICBXUEEzX0FVVEhfU0FFX1BTSykpKSB7XG4gXHRcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0XHRcdH1cbitcbiBcdFx0XHRcdC8qIEZpcm13YXJlIGhhcyByZXF1aXJlbWVudCB0aGF0IFdQQTJfQVVUSF9QU0svXG4gXHRcdFx0XHQgKiBXUEEyX0FVVEhfVU5TUEVDSUZJRUQgYmUgc2V0LCBpZiBTSEEyNTYgT1VJXG4gXHRcdFx0XHQgKiBpcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgcnNuIGllLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wMnAuY1xuaW5kZXggNmUwYzkwZjQ3MThiNTguLjJjMWY1MmVkNTEzODAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3AycC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcDJwLmNcbkBAIC02LDYgKzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvY2ZnODAyMTEuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2JyY211X3dpZmkuaFx1MDAzZVxuQEAgLTQ0LDkgKzQ1LDYgQEBcbiBcbiAjZGVmaW5lIEJSQ01GX1NDQl9USU1FT1VUX1ZBTFVFXHQyMFxuIFxuLSNkZWZpbmUgUDJQX1ZFUlx0XHRcdDlcdC8qIFAyUCB2ZXJzaW9uOiA5PVdpRmkgUDJQIHYxLjAgKi9cbi0jZGVmaW5lIFAyUF9QVUJfQUZfQ0FURUdPUllcdDB4MDRcbi0jZGVmaW5lIFAyUF9QVUJfQUZfQUNUSU9OXHQweDA5XG4gI2RlZmluZSBQMlBfQUZfQ0FURUdPUllcdFx0MHg3ZlxuICNkZWZpbmUgUDJQX09VSVx0XHRcdFwiXFx4NTBcXHg2RlxceDlBXCJcdC8qIFAyUCBPVUkgKi9cbiAjZGVmaW5lIFAyUF9PVUlfTEVOXHRcdDNcdFx0LyogUDJQIE9VSSBsZW5ndGggKi9cbkBAIC0xNDMsMTAgKzE0MSwxMCBAQCBzdHJ1Y3QgYnJjbWZfcDJwX3NjYW5fbGUge1xuIC8qKlxuICAqIHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSAtIFdpRmkgUDJQIFB1YmxpYyBBY3Rpb24gRnJhbWVcbiAgKlxuLSAqIEBjYXRlZ29yeTogUDJQX1BVQl9BRl9DQVRFR09SWVxuLSAqIEBhY3Rpb246IFAyUF9QVUJfQUZfQUNUSU9OXG4rICogQGNhdGVnb3J5OiBXTEFOX0NBVEVHT1JZX1BVQkxJQ1xuKyAqIEBhY3Rpb246IFdMQU5fUFVCX0FDVElPTl9WRU5ET1JfU1BFQ0lGSUNcbiAgKiBAb3VpOiBQMlBfT1VJXG4tICogQG91aV90eXBlOiBPVUkgdHlwZSAtIFAyUF9WRVJcbisgKiBAb3VpX3R5cGU6IE9VSSB0eXBlIC0gV0xBTl9PVUlfVFlQRV9XRkFfUDJQXG4gICogQHN1YnR5cGU6IE9VSSBzdWJ0eXBlIC0gUDJQX1RZUEVfKlxuICAqIEBkaWFsb2dfdG9rZW46IG5vbnplcm8sIGlkZW50aWZpZXMgcmVxL3JzcCB0cmFuc2FjdGlvblxuICAqIEBlbHRzOiBWYXJpYWJsZSBsZW5ndGggaW5mb3JtYXRpb24gZWxlbWVudHMuXG5AQCAtMTY2LDcgKzE2NCw3IEBAIHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSB7XG4gICpcbiAgKiBAY2F0ZWdvcnk6IFAyUF9BRl9DQVRFR09SWVxuICAqIEBvdWk6IE9VSSAtIFAyUF9PVUlcbi0gKiBAdHlwZTogT1VJIFR5cGUgLSBQMlBfVkVSXG4rICogQHR5cGU6IE9VSSBUeXBlIC0gV0xBTl9PVUlfVFlQRV9XRkFfUDJQXG4gICogQHN1YnR5cGU6IE9VSSBTdWJ0eXBlIC0gUDJQX0FGXypcbiAgKiBAZGlhbG9nX3Rva2VuOiBub256ZXJvLCBpZGVudGlmaWVzIHJlcS9yZXNwIHRyYW5hY3Rpb25cbiAgKiBAZWx0czogVmFyaWFibGUgbGVuZ3RoIGluZm9ybWF0aW9uIGVsZW1lbnRzLlxuQEAgLTIyOCwxMCArMjI2LDM4IEBAIHN0YXRpYyBib29sIGJyY21mX3AycF9pc19wdWJfYWN0aW9uKHZvaWQgKmZyYW1lLCB1MzIgZnJhbWVfbGVuKVxuIFx0aWYgKGZyYW1lX2xlbiBcdTAwM2Mgc2l6ZW9mKCpwYWN0X2ZybSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChwYWN0X2ZybS1cdTAwM2VjYXRlZ29yeSA9PSBQMlBfUFVCX0FGX0NBVEVHT1JZIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHBhY3RfZnJtLVx1MDAzZWFjdGlvbiA9PSBQMlBfUFVCX0FGX0FDVElPTiBcdTAwMjZcdTAwMjZcbi1cdCAgICBwYWN0X2ZybS1cdTAwM2VvdWlfdHlwZSA9PSBQMlBfVkVSIFx1MDAyNlx1MDAyNlxuLVx0ICAgIG1lbWNtcChwYWN0X2ZybS1cdTAwM2VvdWksIFAyUF9PVUksIFAyUF9PVUlfTEVOKSA9PSAwKVxuK1x0aWYgKHBhY3RfZnJtLVx1MDAzZWNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfUFVCTElDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBhY3RfZnJtLVx1MDAzZWFjdGlvbiA9PSBXTEFOX1BVQl9BQ1RJT05fVkVORE9SX1NQRUNJRklDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBhY3RfZnJtLVx1MDAzZW91aV90eXBlID09IFdMQU5fT1VJX1RZUEVfV0ZBX1AyUCBcdTAwMjZcdTAwMjZcbitcdCAgICBnZXRfdW5hbGlnbmVkX2JlMjQocGFjdF9mcm0tXHUwMDNlb3VpKSA9PSBXTEFOX09VSV9XRkEpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbisvKipcbisgKiBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24oKSAtIHRydWUgaWYgZHBwIHB1YmxpYyB0eXBlIGZyYW1lLlxuKyAqXG4rICogQGZyYW1lOiBhY3Rpb24gZnJhbWUgZGF0YS5cbisgKiBAZnJhbWVfbGVuOiBsZW5ndGggb2YgYWN0aW9uIGZyYW1lIGRhdGEuXG4rICpcbisgKiBEZXRlcm1pbmUgaWYgYWN0aW9uIGZyYW1lIGlzIGRwcCBwdWJsaWMgYWN0aW9uIHR5cGVcbisgKi9cbitzdGF0aWMgYm9vbCBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24odm9pZCAqZnJhbWUsIHUzMiBmcmFtZV9sZW4pXG4re1xuK1x0c3RydWN0IGJyY21mX3AycF9wdWJfYWN0X2ZyYW1lICpwYWN0X2ZybTtcbitcbitcdGlmICghZnJhbWUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHBhY3RfZnJtID0gKHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSAqKWZyYW1lO1xuK1x0aWYgKGZyYW1lX2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBicmNtZl9wMnBfcHViX2FjdF9mcmFtZSkgLSAxKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAocGFjdF9mcm0tXHUwMDNlY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9QVUJMSUMgXHUwMDI2XHUwMDI2XG4rXHQgICAgcGFjdF9mcm0tXHUwMDNlYWN0aW9uID09IFdMQU5fUFVCX0FDVElPTl9WRU5ET1JfU1BFQ0lGSUMgXHUwMDI2XHUwMDI2XG4rXHQgICAgcGFjdF9mcm0tXHUwMDNlb3VpX3R5cGUgPT0gV0xBTl9PVUlfVFlQRV9XRkFfRFBQIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGdldF91bmFsaWduZWRfYmUyNChwYWN0X2ZybS1cdTAwM2VvdWkpID09IFdMQU5fT1VJX1dGQSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG5AQCAtMjU3LDcgKzI4Myw3IEBAIHN0YXRpYyBib29sIGJyY21mX3AycF9pc19wMnBfYWN0aW9uKHZvaWQgKmZyYW1lLCB1MzIgZnJhbWVfbGVuKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoYWN0X2ZybS1cdTAwM2VjYXRlZ29yeSA9PSBQMlBfQUZfQ0FURUdPUlkgXHUwMDI2XHUwMDI2XG4tXHQgICAgYWN0X2ZybS1cdTAwM2V0eXBlICA9PSBQMlBfVkVSIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGFjdF9mcm0tXHUwMDNldHlwZSAgPT0gV0xBTl9PVUlfVFlQRV9XRkFfUDJQIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG1lbWNtcChhY3RfZnJtLVx1MDAzZW91aSwgUDJQX09VSSwgUDJQX09VSV9MRU4pID09IDApXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuQEAgLTEyODEsNiArMTMwNyw5IEBAIHN0YXRpYyBzMzIgYnJjbWZfcDJwX2Fib3J0X2FjdGlvbl9mcmFtZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnKVxuIFx0YnJjbWZfZGJnKFRSQUNFLCBcIkVudGVyXFxuXCIpO1xuIFxuIFx0dmlmID0gcDJwLVx1MDAzZWJzc19pZHhbUDJQQVBJX0JTU0NGR19ERVZJQ0VdLnZpZjtcbitcdGlmICghdmlmKVxuK1x0XHR2aWYgPSBwMnAtXHUwMDNlYnNzX2lkeFtQMlBBUElfQlNTQ0ZHX1BSSU1BUlldLnZpZjtcbitcbiBcdGVyciA9IGJyY21mX2ZpbF9ic3NjZmdfZGF0YV9zZXQodmlmLVx1MDAzZWlmcCwgXCJhY3RmcmFtZV9hYm9ydFwiLCBcdTAwMjZpbnRfdmFsLFxuIFx0XHRcdFx0XHRzaXplb2YoczMyKSk7XG4gXHRpZiAoZXJyKVxuQEAgLTE3ODksNyArMTgxOCw5IEBAIGJvb2wgYnJjbWZfcDJwX3NlbmRfYWN0aW9uX2ZyYW1lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXG4gXHRcdFx0Z290byBleGl0O1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKGJyY21mX3AycF9pc19wMnBfYWN0aW9uKGFjdGlvbl9mcmFtZS1cdTAwM2VkYXRhLFxuLVx0XHRcdFx0XHQgICBhY3Rpb25fZnJhbWVfbGVuKSkge1xuK1x0XHRcdFx0XHQgICBhY3Rpb25fZnJhbWVfbGVuKSB8fFxuK1x0XHQgICBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb24oYWN0aW9uX2ZyYW1lLVx1MDAzZWRhdGEsXG4rXHRcdFx0XHRcdCAgICAgICBhY3Rpb25fZnJhbWVfbGVuKSkge1xuIFx0XHQvKiBkbyBub3QgY29uZmlndXJlIGFueXRoaW5nLiBpdCB3aWxsIGJlICovXG4gXHRcdC8qIHNlbnQgd2l0aCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiAgICAgKi9cbiBcdH0gZWxzZSB7XG5AQCAtMTgyNiw2ICsxODU3LDcgQEAgYm9vbCBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWUoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZyxcbiBcdC8qIHZhbGlkYXRlIGNoYW5uZWwgYW5kIHAycCBpZXMgKi9cbiBcdGlmIChjb25maWdfYWZfcGFyYW1zLnNlYXJjaF9jaGFubmVsIFx1MDAyNlx1MDAyNlxuIFx0ICAgIElTX1AyUF9TT0NJQUxfQ0hBTk5FTChsZTMyX3RvX2NwdShhZl9wYXJhbXMtXHUwMDNlY2hhbm5lbCkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHAycC1cdTAwM2Vic3NfaWR4W1AyUEFQSV9CU1NDRkdfREVWSUNFXS52aWYgXHUwMDI2XHUwMDI2XG4gXHQgICAgcDJwLVx1MDAzZWJzc19pZHhbUDJQQVBJX0JTU0NGR19ERVZJQ0VdLnZpZi1cdTAwM2VzYXZlZF9pZS5wcm9iZV9yZXFfaWVfbGVuKSB7XG4gXHRcdGFmeF9oZGwgPSBcdTAwMjZwMnAtXHUwMDNlYWZ4X2hkbDtcbiBcdFx0YWZ4X2hkbC1cdTAwM2VwZWVyX2xpc3Rlbl9jaGFuID0gbGUzMl90b19jcHUoYWZfcGFyYW1zLVx1MDAzZWNoYW5uZWwpO1xuQEAgLTI1NDMsNCArMjU3NSwzIEBAIHZvaWQgYnJjbWZfcDJwX2RldGFjaChzdHJ1Y3QgYnJjbWZfcDJwX2luZm8gKnAycClcbiBcdC8qIGp1c3Qgc2V0IGl0IGFsbCB0byB6ZXJvICovXG4gXHRtZW1zZXQocDJwLCAwLCBzaXplb2YoKnAycCkpO1xuIH1cbi1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvaW5jbHVkZS9icmNtdV93aWZpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvaW5jbHVkZS9icmNtdV93aWZpLmhcbmluZGV4IDc1NTJiZGI5MTk5MWNlLi5jNDY1MjA4YzQzMzE4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9pbmNsdWRlL2JyY211X3dpZmkuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfd2lmaS5oXG5AQCAtMjMzLDYgKzIzMyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhY19iaXRtYXBfdHN0KHU4IGJpdG1hcCwgaW50IHByZWMpXG4gXG4gI2RlZmluZSBXUEEzX0FVVEhfU0FFX1BTS1x0MHg0MDAwMFx0LyogU0FFIHdpdGggNC13YXkgaGFuZHNoYWtlICovXG4gXG4rI2RlZmluZSBXRkFfQVVUSF9EUFBcdFx0MHgyMDAwMDAgLyogV0ZBIERQUCBBVVRIICovXG4rXG4gI2RlZmluZSBET1QxMV9ERUZBVUxUX1JUU19MRU5cdFx0MjM0N1xuICNkZWZpbmUgRE9UMTFfREVGQVVMVF9GUkFHX0xFTlx0XHQyMzQ2XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxNjowODowMS4wNzIxOTczOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTA0ODE4MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIGFuZCBUZXN0aW5nIERQUCBTdXBwb3J0IGluIGJyY21mbWFjKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgaXQncyB0d2Vha2luZyBgYnJjbWZtYWNgIHRvIHN1cHBvcnQgRFBQIGF1dGhlbnRpY2F0aW9uIChgV0xBTl9BS01fU1VJVEVfV0ZBX0RQUGApIGFuZCByZWxhdGVkIE9VSSB0eXBlcy4gU3BlY2lmaWNhbGx5LCBpdCB0b3VjaGVzIGBjZmc4MDIxMS5jYCBhbmQgYHAycC5jYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGNhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGlzIGZ1bmN0aW9uYWxpdHkgYW5kIHRlc3QgaXQgcHJvcGVybHk/XG5cblRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYGJyY21mbWFjYCwgdGhlIEJyb2FkY29tIFdpRmkgZHJpdmVyLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgaW4gdGhlIGBjZmc4MDIxMWAgaW50ZXJmYWNlIGFuZCBQMlAgYWN0aW9uIGZyYW1lIGhhbmRsaW5nLCBtZWFuaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBpbnRlcmFjdGlvbnMgdGhhdCAqc2hvdWxkKiBiZSBhY2Nlc3NpYmxlIHRocm91Z2ggbmV0bGluayBhbmQgbmV0d29yayBpbnRlcmZhY2VzLlxuXG5Ob3csIHRoZSByZWFsIGNoYWxsZW5nZS4gQ2FuIHdlIGV2ZW4gZnV6eiB0aGlzIGVmZmVjdGl2ZWx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEknbSB0aGlua2luZyBhYm91dCBmdXp6aW5nLiBgYnJjbWZtYWNgIGlzIGEgaGFyZHdhcmUgZHJpdmVyLCBtZWFuaW5nIGl0IGVpdGhlciBuZWVkcyByZWFsIGhhcmR3YXJlIG9yLCBpZGVhbGx5LCBzb21lIHNvcnQgb2Ygc2ltdWxhdGlvbiBsYXllci4gSSBxdWlja2x5IGNvbnNpZGVyIHdoZXRoZXIgdGhlcmXigJlzIGEgc2ltdWxhdG9yLiBJIGtub3cgdGhhdCBgbWFjODAyMTFgIGhhcyBgbWFjODAyMTFfaHdzaW1gLCBidXQgdGhpcyBpcyBhIGZ1bGxtYWMgZHJpdmVyLlxuXG5UaGVuLCBJIHJlbWVtYmVyIHN5emthbGxlci4gU3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzIGFyZSBpbnRyaWd1aW5nLiBUaGV5IGhhdmUgc29tZSBzdXBwb3J0IGZvciBVU0IgZnV6emluZyAoZHVtbXkgSENEKSBhbmQgUENJIGZ1enppbmcsIHdoaWNoICpjb3VsZCogZ2V0IHVzIHBhc3QgdGhlIGluaXRpYWwgcHJvYmUsIGFuZCBtYXliZSBldmVuIGZ1cnRoZXIgaWYgdGhlIGRyaXZlciBjYW4gYmUgaW5zdGFudGlhdGVkLiBBbmQgYGJyY21mbWFjYCBoYXMgVVNCLCBTRElPLCBhbmQgUENJZSBpbnRlcmZhY2VzLiBCaW5nbyEgVVNCIGZ1enppbmcgaXMgdGhlIG1vc3QgcHJvbWlzaW5nIHJvdXRlLiBJdCdzIGxpa2VseSB3ZSBjYW4gcmVhY2ggdGhlIFVTQiBwcm9iZSwgcmVnaXN0ZXIgYSB3aXBoeSwgYW5kIHRoZW4gZXhwb3NlIHRob3NlIGNmZzgwMjExIG9wZXJhdGlvbnMgdG8gdXNlciBzcGFjZS5cblxuU28sIGxldCdzIG5haWwgZG93biB3aGF0IGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGhpdDogYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgIGFuZCBgYnJjbWZfcDJwX3NlbmRfYWN0aW9uX2ZyYW1lYC4gSWYgVVNCIGZ1enppbmcgd29ya3MsIHRoZSBkcml2ZXIgcHJvYmVzLCBhIHdpcGh5IGdldHMgcmVnaXN0ZXJlZCwgYW5kIG5ldGxpbmsgY29tbWFuZHMgY2FuIHRyaWdnZXIgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLiBUaGF0J3MgYSBkaXJlY3QgcGF0aC5cblxuVGltZSB0byBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucy4gTGV0IG1lIG1ha2Ugc3VyZSBgYnJjbWZtYWNgIGlzIGNvbXBpbGVkIHdpdGggVVNCIHN1cHBvcnQuIE5lZWQgdG8gY2hlY2s6IGBDT05GSUdfQlJDTUZNQUNgLCBgQ09ORklHX0JSQ01GTUFDX1VTQmAsIGBDT05GSUdfQlJDTUZNQUNfUENJRWAsIGFuZCBgQ09ORklHX0JSQ01GTUFDX1NESU9gLlxuXG5BbHJpZ2h0LCBhIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSBjb25maXJtcyB0aGUgY29ubmVjdGlvbi4gYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgIGlzIGEgYGNmZzgwMjExYCBjYWxsYmFjayBzcGVjaWZpY2FsbHkgZm9yIHRoZSBcImNvbm5lY3RcIiBvcGVyYXRpb24uIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgIGlzIGNhbGxlZCBmcm9tIGBicmNtZl9jZmc4MDIxMV9tZ210X3R4YCwgd2hpY2ggaXMgdGhlIGBtZ210X3R4YCBjYWxsYmFjay5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhvc2UgY29uZmlnIG9wdGlvbnMgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIHBsYWNlIGZvciBhIHByb3BlciB0ZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzY5LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MTEuOTc3MDE5MTkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDg4OTk1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSQ01GTUFDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE6Y29uZmlnIEJSQ01GTUFDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjExOmNvbmZpZyBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTItXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE0OmNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNS1cXHRib29sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTc6Y29uZmlnIEJSQ01GTUFDX1NESU9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xOC1cXHRib29sIFxcXCJTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoyOTpjb25maWcgQlJDTUZNQUNfVVNCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0zOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzo0MDpjb25maWcgQlJDTUZNQUNfUENJRVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIlBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MTMuNTg1OTI5MjIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMDc4MzczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJyb2FkY29tIFdpRmkgRHJpdmVyIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgQlJDTUZNQUNgIGFuZCBgQlJDTUZNQUNfVVNCYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhlaXIgcmVsZXZhbmNlIHRvIGZ1enppbmcuIEkgcmVtZW1iZXIgYEJSQ01GTUFDYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBDRkc4MDIxMWAsIHdoaWNoIHBpcXVlcyBteSBpbnRlcmVzdC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGRyaXZlciB3b3J0aCB0aGUgZWZmb3J0P1xuXG5XZWxsLCB5ZXMsIHRoZSBwb3RlbnRpYWwgaXMgZGVmaW5pdGVseSB0aGVyZS4gVGhlIGRyaXZlciBtb2RpZmllcyBmdW5jdGlvbmFsIGxvZ2ljLCB3aGljaCBpcyBhIGtleSBpbmRpY2F0b3IuIFBsdXMsIEkgY2FuIGluc3RhbnRpYXRlIHRoZSBgQlJDTUZNQUNgIHZpYSBVU0IgZnV6emluZywgd2hpY2ggaXMgZ3JlYXQgYmVjYXVzZSBTeXprYWxsZXIgaGFzIGEgZGVjZW50IFVTQiBmdXp6ZXIuIFRoYXQgc3RyZWFtbGluZXMgdGhlIGZ1enppbmcgcHJvY2VzcyBzaWduaWZpY2FudGx5LlxuXG5Ob3csIGEgY3JpdGljYWwgcG9pbnQgSSBuZWVkIHRvIHZlcmlmeTogZG9lcyBgYnJjbWZtYWNgIG5lZWQgYW55IGZpcm13YXJlIGZvciBpbml0aWFsaXphdGlvbj8gVGhpcyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyBhbnkgZmFsc2UgcG9zaXRpdmVzLiBUbyBtYWtlIHN1cmUsIEkgc2hvdWxkIGNoZWNrIHRoZSBgYnJjbWZfdXNiX3Byb2JlYCBmdW5jdGlvbiBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gZGV0ZXJtaW5lIGlmIGZpcm13YXJlIGlzIHJlcXVpcmVkIGFuZCBob3cgdGhlIFVTQiBpbnRlcmZhY2UgaW50ZXJhY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzUwLCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjA4OjE3Ljc5NjcxNTk4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA3NzIwNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3VzYl9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNTc9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9idXNfb3BzIGJyY21mX3VzYl9idXNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjExNjg6c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNjktXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyMTY9YnJjbWZfdXNiX3ByZXBhcmVfZndfcmVxdWVzdChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTIzNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTIzNjpzdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyMzctXFx0XFx0XFx0ICAgICAgZW51bSBicmNtZl9md3ZlbmRvciBmd3ZpZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjk5LVxcdC8qIHJlcXVlc3QgZmlybXdhcmUgaGVyZSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzAwOlxcdHJldCA9IGJyY21mX2Z3X2dldF9maXJtd2FyZXMoZGV2LCBmd3JlcSwgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzMDEtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEzMzM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzM0OmJyY21mX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzM1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDM0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNDM1OlxcdHJldCA9IGJyY21mX3VzYl9wcm9iZV9jYihkZXZpbmZvLCBpZC1cXHUwMDNlZHJpdmVyX2luZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDM2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTUwMz1zdGF0aWMgaW50IGJyY21mX3VzYl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUxNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTUxNjpcXHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKFxcdTAwMjZ1c2ItXFx1MDAzZWRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTE3LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTE1NTc9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJyY21mX3VzYmRydnIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NTgtXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTU1OTpcXHQucHJvYmUgPSBicmNtZl91c2JfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NjAtXFx0LmRpc2Nvbm5lY3QgPSBicmNtZl91c2JfZGlzY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MTkuNDA0NDQ0MzE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU2MjQyMDA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBicmNtZm1hYyBEcml2ZXIgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBicmNtZm1hY2AgZHJpdmVyLCBhbmQgdGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIGZpcm13YXJlIGF2YWlsYWJpbGl0eS4gVGhlIGNvZGUgY2FsbHMgYGJyY21mX2Z3X2dldF9maXJtd2FyZXNgLCBhbmQgaWYgdGhlIGZpcm13YXJlJ3MgbWlzc2luZywgdGhlIHByb2JlIGNvdWxkIGZhaWwgcmlnaHQgdGhlcmUuIFN5emthbGxlciB0aHJvd3Mgc29tZSBkdW1teSBmaXJtd2FyZSBpbWFnZXMgaW50byB0aGUgbWl4LCBidXQgaXQncyBub3QgYSBndWFyYW50ZWUgdGhhdCB0aGUgYGJyY21mbWFjYCBkcml2ZXIgd2lsbCBpbml0aWFsaXplIHByb3Blcmx5LiBJdCBjb3VsZCBiZSB0cnlpbmcgdG8gcGFyc2UgdGhlIGZpcm13YXJlIG9yIHRhbGsgdG8gdGhlIGRldmljZSwgc28gd2UgbmVlZCB0byBhY2NvdW50IGZvciB0aG9zZSBwb3NzaWJpbGl0aWVzLlxuXG5XYWl0LCBTeXprYWxsZXIgaGFzIHByZXR0eSBleHRlbnNpdmUgY292ZXJhZ2UgZm9yIGBicmNtZm1hY2AsIGRvZXNuJ3QgaXQ/IExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBpZiBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIHZpYSB0aGUgZnV6emluZy5cblxuQnV0LCBoYW5nIG9uLCBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgKnBlcmZlY3RseSogcmVhY2hhYmxlLCByaWdodD8gSXQncyByZWFsbHkgYWJvdXQgd2hldGhlciB0aGVyZSBhcmUgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgaW4gdGhlIGRyaXZlciwgYW5kLCBldmVuIGlmIHRoZSBjb3ZlcmFnZSBpc24ndCBwZXJmZWN0LCBpZiBpdCdzIHJlYWNoYWJsZSAqaW4gdGhlb3J5KiAoZS5nLiwgdGhyb3VnaCBVU0IgZnV6emluZyBvciBuZXRsaW5rIGlmIHRoZSBkZXZpY2UgaXMgYXJvdW5kKSwgSSBzaG91bGQganVzdCBtYXJrIGl0IGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblRoZSBpbnN0cnVjdGlvbnMgc3RhdGUsIGV4cGxpY2l0bHksIHRoYXQgaWYgYSBjaGFuZ2UgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGNvZGUgKmNhbiogYmUgZXhlY3V0ZWQgd2l0aCBteSBjb2RlIHNlYXJjaCB0b29scywgYW5kIHRoZW4gbWFyayBpdCBgV29ydGhGdXp6aW5nPXRydWVgLiBJdCdzIHNwZWNpZmljYWxseSBhIHByb2JsZW0gaWYgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGVzcGVjaWFsbHkgd2hlbiB1c2luZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS5cblxuU28sIGlzIGBicmNtZm1hY2AgaW1wb3NzaWJsZSB0byByZWFjaD8gQWJzb2x1dGVseSBub3QuXG5cbldpdGggVVNCIGZ1enppbmcsIHdoaWNoIGNhbiBiZSBkb25lIHdpdGggYSBkdW1teSBIQ0QsIHdlIGNhbiBlbXVsYXRlIHRoZSBVU0IgZGV2aWNlLiBUaGUgZHJpdmVyIHdpbGwgcHJvYmUsIGl0ICptaWdodCogYXNrIGZvciBmaXJtd2FyZS4gVGhhdCdzIHdoZXJlIFN5emthbGxlcidzIGZhdWx0IGluamVjdGlvbiBhbmQgdGhlIGR1bW15IGZpbGVzIGNvbWUgaW4gaGFuZHkuIElmIHRoZSBkcml2ZXIgYWN0dWFsbHkgcGFyc2VzIHRoZSBmaXJtd2FyZSBhbmQgaW5pdGlhbGl6ZXMgdGhlIGRldmljZSwgaXQgbWlnaHQgcmVnaXN0ZXIgdGhlIHdpcGh5LlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGlmIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCBpcyB0aGUgYmVzdCBmdW5jdGlvbiB0byBmb2N1cyBvbiBpbiB0aGlzIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTQxLCJPdXRwdXRUb2tlbnMiOjYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjA4OjI2Ljk2Njg2NzQyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3Njk0NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2NmZzgwMjExX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9MjM2Mz1zdGF0aWMgczMyXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6MjM2NDpicmNtZl9jZmc4MDIxMV9jb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTIzNjUtXFx0XFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NTk1Nz1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBicmNtZl9jZmc4MDIxMV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy01OTc0LVxcdC5zZXRfcG93ZXJfbWdtdCA9IGJyY21mX2NmZzgwMjExX3NldF9wb3dlcl9tZ210LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjU5NzU6XFx0LmNvbm5lY3QgPSBicmNtZl9jZmc4MDIxMV9jb25uZWN0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTU5NzYtXFx0LmRpc2Nvbm5lY3QgPSBicmNtZl9jZmc4MDIxMV9kaXNjb25uZWN0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjE0Nj1zdGF0aWMgdm9pZCBicmNtZl9jbGVhcl9hc3NvY19pZXMoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MTQ3LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo2MTQ4OlxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjE0OS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTYyOTY9c3RhdGljIHMzMiBicmNtZl9nZXRfYXNzb2NfaWVzKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MzAwLVxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9hc3NvY19pZWxlbl9sZSAqYXNzb2NfaW5mbztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo2MzAxOlxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjMwMi1cXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfZWRjZl9hY3BhcmFtIGVkY2ZfYWNwYXJhbV9pbmZvW0VEQ0ZfQUNfQ09VTlRdO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjM3OD1icmNtZl9ic3Nfcm9hbWluZ19kb25lKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MzgzLVxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9wcm9maWxlICpwcm9maWxlID0gXFx1MDAyNmlmcC1cXHUwMDNldmlmLVxcdTAwM2Vwcm9maWxlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjYzODQ6XFx0c3RydWN0IGJyY21mX2NmZzgwMjExX2Nvbm5lY3RfaW5mbyAqY29ubl9pbmZvID0gY2ZnX3RvX2Nvbm4oY2ZnKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02Mzg1LVxcdHN0cnVjdCB3aXBoeSAqd2lwaHkgPSBjZmdfdG9fd2lwaHkoY2ZnKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTY0NTE9YnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjQ1Ni1cXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfcHJvZmlsZSAqcHJvZmlsZSA9IFxcdTAwMjZpZnAtXFx1MDAzZXZpZi1cXHUwMDNlcHJvZmlsZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo2NDU3OlxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IGNmZ190b19jb25uKGNmZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjQ1OC1cXHRzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9yZXNwX3BhcmFtcyBjb25uX3BhcmFtcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MjcuMDI0NTc1MjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTYzMjMyMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIGFmZmVjdGluZyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCwgYGJyY21mX2NvbmZpZ3VyZV93cGFpZWAsIGBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb25gLCBhbmQgYGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbnMsIHNvIEknbSBkZWZpbml0ZWx5IGdvaW5nIHRvIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIGxldCdzIHB1bGwgb3V0IHRoZSBzcGVjaWZpYyBzeW1ib2xzIHRvIGZvY3VzIG9uLiBMb29rcyBsaWtlIHdlJ3ZlIGdvdDogYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLCBgYnJjbWZfY29uZmlndXJlX3dwYWllYCwgYGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZWAsIGBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb25gLiBBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSBhIGZldyBtb2RpZmllZCBmdW5jdGlvbnMgdG8gbm90ZTogYGJyY21mX3AycF9pc19wdWJfYWN0aW9uYCwgYGJyY21mX3AycF9pc19wMnBfYWN0aW9uYCwgYW5kIGBicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lYC5cblxuTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlLi4uIGBCUkNNRk1BQ2AsIGBCUkNNRk1BQ19VU0JgLCBgQlJDTUZNQUNfUENJRWAsIGFuZCBgQlJDTUZNQUNfU0RJT2AuIERvIEkgbmVlZCBhbGwgb2YgdGhlbT8gTm8sIHRoYXQncyBpbmVmZmljaWVudC4gYEJSQ01GTUFDX1VTQmAgaXMgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3Igc3l6a2FsbGVyLCBzbyBsZXQncyBqdXN0IHN0aWNrIHdpdGggYEJSQ01GTUFDYCBhbmQgYEJSQ01GTUFDX1VTQmAgZm9yIG5vdy5cblxuSnVzdCB0byBiZSBzdXJlLCBJIHNob3VsZCBjaGVjayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUgYWJvdXQgYFdMQU5fQUtNX1NVSVRFX1dGQV9EUFBgLiBOb3BlLCBpdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGUsIHNvIHRoYXQncyBnb29kLiBBbHJpZ2h0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGBicmNtZm1hYy9LY29uZmlnYCBmaWxlIG9uZSBtb3JlIHRpbWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMzYsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MzQuMTg3ODExOTQ2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE3MTU4NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSQ01GTUFDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE6Y29uZmlnIEJSQ01GTUFDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjExOmNvbmZpZyBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTItXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE0OmNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNS1cXHRib29sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTc6Y29uZmlnIEJSQ01GTUFDX1NESU9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xOC1cXHRib29sIFxcXCJTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoyOTpjb25maWcgQlJDTUZNQUNfVVNCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0zOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzo0MDpjb25maWcgQlJDTUZNQUNfUENJRVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIlBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MzQuMjg5NTQzOTc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjkzMDU4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgUDJQIEltcGxlbWVudGF0aW9uIHdpdGhpbiBCUkNNRk1BQyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHRoYXQgSSdtIGNvdmVyaW5nIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBQMlAgd2l0aGluIHRoZSBCUkNNRk1BQyBmcmFtZXdvcmssIGFuZCB0aGF0IGluY2x1ZGVzIGJvdGggYEJSQ01GTUFDYCBhbmQgYEJSQ01GTUFDX1VTQmAgYnVpbGRzLiBJIGtub3cgdGhvc2UgYXJlIGtleSBjb21wb25lbnRzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjb3JlIGZ1bmN0aW9uIGNhbGxzLiBJIHdhbnQgdG8gc3BlY2lmaWNhbGx5IGV4YW1pbmUgYGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZWAgYW5kIGBicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lYC4gVGhleSdyZSBsaWtlbHkgaW4gYHAycC5jYCwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhlaXIgaW1wbGVtZW50YXRpb24gYW5kIGludGVyYWN0aW9ucy5cblxuTm93LCBhIGNyaXRpY2FsIHBvaW50OiBpcyB0aGVyZSBhIHNwZWNpZmljLCBkZWRpY2F0ZWQgY29uZmlndXJhdGlvbiBmbGFnIG9yIHNldHRpbmcgd2l0aGluIGJyY21mbWFjIHRoYXQgZ292ZXJucyBQMlAgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUncyBhIGRpc3RpbmN0IGVuYWJsZS9kaXNhYmxlIHN3aXRjaCwgb3IgbWF5YmUgYSBzZXQgb2YgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGJlaGF2aW9yLiBUbyBjbGFyaWZ5IHRoZSBidWlsZCBhbmQgaXRzIHNldHRpbmdzLCBsZXQncyBkbyBhIHF1aWNrIGBncmVwYCBmb3IgYHAycC5jYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGVgIGZpbGUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBjb21wb25lbnQgaXMgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtIGFuZCBhbnkgcG90ZW50aWFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzM3LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDE2OjA4OjM4Ljg1ODg1NDQxN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwOTY0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicDJwXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGU9MTM9YnJjbWZtYWMtb2JqcyArPSBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtMTctXFx0XFx0ZndlaC5vIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGU6MTg6XFx0XFx0cDJwLm8gXFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZS0xOS1cXHRcXHRwcm90by5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6MzguOTE4OTU5MDg2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTM0MzcwMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gRHJpdmVyIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGUgYEJSQ01GTUFDYCBkcml2ZXIgaGFzIGJlZW4gdXBkYXRlZCwgYW5kIHRoaXMgcGF0Y2ggc2VlbXMgZm9jdXNlZCBvbiBhZGRpbmcgc3VwcG9ydCBmb3IgRFBQIGF1dGhlbnRpY2F0aW9uLiBUaGlzIGlzIGdvaW5nIHRvIGludm9sdmUgY2hhbmdlcyB0byB0aGUgZmlybXdhcmUgc3VwcGxpY2FudCBsb2dpYyB3aXRoaW4gdGhlIGRyaXZlci4gU2luY2UgYEJSQ01GTUFDYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgbW9zdCBsaWtlbHkgdG8gYmUgaW1wYWN0ZWQgYW5kLCB0aGVyZWZvcmUsIHBvdGVudGlhbCB0YXJnZXRzIGZvciBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIHJldmlldyBzdWdnZXN0cyBhIGZldyBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsOiBgYnJjbWZfc2V0X2tleV9tZ210YCwgYGJyY21mX2NmZzgwMjExX2Nvbm5lY3RgLCBgYnJjbWZfY29uZmlndXJlX3dwYWllYCwgYGJyY21mX3AycF9pc19wdWJfYWN0aW9uYCwgYGJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvbmAsIGBicmNtZl9wMnBfaXNfcDJwX2FjdGlvbmAsIGBicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lYCwgYW5kIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgLiBJJ2xsIHNraW0gb3ZlciBgYnJjbWZfdmFsaWRfZHBwX3N1aXRlYCBzaW5jZSBpdCdzIHByb2JhYmx5IHNpbXBsZSwgYnV0IHRoZSBvdGhlcnMgbG9vayBwcm9taXNpbmcuIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YCBhbmQgYGJyY21mX2NvbmZpZ3VyZV93cGFpZWAgc3RhbmQgb3V0IGFzIGltcG9ydGFudC4gYGJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZWAgaXMgYWxzbyBjcml0aWNhbC5cblxuSSdsbCBkb3VibGUtY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gQWgsIGBDRkc4MDIxMWAgaXMgcmVxdWlyZWQgZm9yIGBCUkNNRk1BQ2AsIHNvIEknbGwgYmUgc3VyZSB0byBpbmNsdWRlIHRoYXQgaW4gbXkgY29uZmlndXJhdGlvbi4gQSBxdWljayBjaGVjayBvZiBgYnJjbWZfY2ZnODAyMTFfY29ubmVjdGAgaW4gYGNmZzgwMjExLmNgIHJldmVhbHMgaXQncyBhIGNhbGxiYWNrIGZvciB0aGUgYGNmZzgwMjExX29wcy5jb25uZWN0YCBmdW5jdGlvbiwgYW5kIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgIGdldHMgY2FsbGVkIGZyb20gYGJyY21mX2NmZzgwMjExX21nbXRfdHhgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCB3aGljaCBtZWFucyBJIGNhbiBkaXJlY3RseSB0YXJnZXQgdGhlbSB3aXRoIGZ1enppbmcuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkndmUgY29tcGlsZWQgdGhlIGZvbGxvd2luZyBsaXN0IG9mIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiwgYW5kIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbmFsaXR5IGFyb3VuZCBEUFAgYW5kIG1vZGlmaWVzIGV4aXN0aW5nIFAyUCBsb2dpYyBpbiBhIGRyaXZlciB0aGF0J3MgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBhbmQgVVNCLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cblxuSGVyZSBpcyB0aGUgZGF0YTpcblxuYFdvcnRoRnV6emluZzogdHJ1ZWBcblxuYEZvY3VzU3ltYm9sczpgXG4tIGBicmNtZl9zZXRfa2V5X21nbXRgXG4tIGBicmNtZl9jZmc4MDIxMV9jb25uZWN0YFxuLSBgYnJjbWZfY29uZmlndXJlX3dwYWllYFxuLSBgYnJjbWZfcDJwX2lzX3B1Yl9hY3Rpb25gXG4tIGBicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb25gXG4tIGBicmNtZl9wMnBfaXNfcDJwX2FjdGlvbmBcbi0gYGJyY21mX3AycF9hYm9ydF9hY3Rpb25fZnJhbWVgXG4tIGBicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVgXG5cbmBFbmFibGVDb25maWdzOmBcbi0gYEJSQ01GTUFDYFxuLSBgQlJDTUZNQUNfVVNCYFxuLSBgQ0ZHODAyMTFgXG5cbmBSZWFzb25pbmc6YCBUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEUFAgYXV0aGVudGljYXRpb24gYW5kIG1vZGlmaWVzIHRoZSBmaXJtd2FyZSBzdXBwbGljYW50IGxvZ2ljIGluIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChicmNtZm1hYykuIEl0IGFsc28gdXBkYXRlcyBQMlAgYWN0aW9uIGZyYW1lIGhhbmRsaW5nIHRvIHN1cHBvcnQgRFBQIHB1YmxpYyBhY3Rpb24gZnJhbWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBkcml2ZXIncyBjZmc4MDIxMSBjYWxsYmFja3MgYW5kIFAyUCBsb2dpYywgd2hpY2ggY2FuIGJlIHJlYWNoZWQgdmlhIG5ldGxpbmsgY29tbWFuZHMgYW5kIFVTQiBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM1OCwiT3V0cHV0VG9rZW5zIjoyNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTY6MDg6NTAuODUzMzMyMjQ0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcxMjQ4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19VU0JcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJjbWZfc2V0X2tleV9tZ210XCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9jb25uZWN0XCIsXG4gICAgXCJicmNtZl9jb25maWd1cmVfd3BhaWVcIixcbiAgICBcImJyY21mX3AycF9pc19wdWJfYWN0aW9uXCIsXG4gICAgXCJicmNtZl9wMnBfaXNfZHBwX3B1Yl9hY3Rpb25cIixcbiAgICBcImJyY21mX3AycF9pc19wMnBfYWN0aW9uXCIsXG4gICAgXCJicmNtZl9wMnBfYWJvcnRfYWN0aW9uX2ZyYW1lXCIsXG4gICAgXCJicmNtZl9wMnBfc2VuZF9hY3Rpb25fZnJhbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIERQUCBhdXRoZW50aWNhdGlvbiBhbmQgbW9kaWZpZXMgdGhlIGZpcm13YXJlIHN1cHBsaWNhbnQgbG9naWMgaW4gdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKS4gSXQgYWxzbyB1cGRhdGVzIFAyUCBhY3Rpb24gZnJhbWUgaGFuZGxpbmcgdG8gc3VwcG9ydCBEUFAgcHVibGljIGFjdGlvbiBmcmFtZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGRyaXZlcidzIGNmZzgwMjExIGNhbGxiYWNrcyBhbmQgUDJQIGxvZ2ljLCB3aGljaCBjYW4gYmUgcmVhY2hlZCB2aWEgbmV0bGluayBjb21tYW5kcyBhbmQgVVNCIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicmNtZl9zZXRfa2V5X21nbXRcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2Nvbm5lY3RcIixcbiAgICBcImJyY21mX2NvbmZpZ3VyZV93cGFpZVwiLFxuICAgIFwiYnJjbWZfcDJwX2lzX3B1Yl9hY3Rpb25cIixcbiAgICBcImJyY21mX3AycF9pc19kcHBfcHViX2FjdGlvblwiLFxuICAgIFwiYnJjbWZfcDJwX2lzX3AycF9hY3Rpb25cIixcbiAgICBcImJyY21mX3AycF9hYm9ydF9hY3Rpb25fZnJhbWVcIixcbiAgICBcImJyY21mX3AycF9zZW5kX2FjdGlvbl9mcmFtZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRFBQIGF1dGhlbnRpY2F0aW9uIGFuZCBtb2RpZmllcyB0aGUgZmlybXdhcmUgc3VwcGxpY2FudCBsb2dpYyBpbiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlciAoYnJjbWZtYWMpLiBJdCBhbHNvIHVwZGF0ZXMgUDJQIGFjdGlvbiBmcmFtZSBoYW5kbGluZyB0byBzdXBwb3J0IERQUCBwdWJsaWMgYWN0aW9uIGZyYW1lcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZHJpdmVyJ3MgY2ZnODAyMTEgY2FsbGJhY2tzIGFuZCBQMlAgbG9naWMsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGFuZCBVU0IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowsvd7p[1] Phase: Succeeded StartedAt: 2026-07-08 16:09:48 +0000 UTC FinishedAt: 2026-07-08 16:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvd7p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 16:09:48 +0000 UTC FinishedAt: 2026-07-08 16:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvd7p[2] Phase: Succeeded StartedAt: 2026-07-08 16:09:48 +0000 UTC FinishedAt: 2026-07-08 16:42:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvd7p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"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":["brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_configure_wpaie","brcmf_p2p_is_pub_action","brcmf_p2p_is_dpp_pub_action","brcmf_p2p_is_p2p_action","brcmf_p2p_abort_action_frame","brcmf_p2p_send_action_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"series_id":"4bce7538-ef98-4ac6-9cc5-1a5f7f73f03a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-08 16:09:48 +0000 UTC FinishedAt: 2026-07-08 16:42:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"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":["brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_configure_wpaie","brcmf_p2p_is_pub_action","brcmf_p2p_is_dpp_pub_action","brcmf_p2p_is_p2p_action","brcmf_p2p_abort_action_frame","brcmf_p2p_send_action_frame"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"series_id":"4bce7538-ef98-4ac6-9cc5-1a5f7f73f03a","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-workflowsvd7p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"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":["brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_configure_wpaie","brcmf_p2p_is_pub_action","brcmf_p2p_is_dpp_pub_action","brcmf_p2p_is_p2p_action","brcmf_p2p_abort_action_frame","brcmf_p2p_send_action_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"series_id":"4bce7538-ef98-4ac6-9cc5-1a5f7f73f03a","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-08 16:09:48 +0000 UTC FinishedAt: 2026-07-08 16:10:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvd7p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"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":["brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_configure_wpaie","brcmf_p2p_is_pub_action","brcmf_p2p_is_dpp_pub_action","brcmf_p2p_is_p2p_action","brcmf_p2p_abort_action_frame","brcmf_p2p_send_action_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"series_id":"4bce7538-ef98-4ac6-9cc5-1a5f7f73f03a","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-08 16:09:48 +0000 UTC FinishedAt: 2026-07-08 16:10:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"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-workflowsvd7p/series-workflowsvd7p-convert-artifact-898189410/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvd7p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"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":["brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_configure_wpaie","brcmf_p2p_is_pub_action","brcmf_p2p_is_dpp_pub_action","brcmf_p2p_is_p2p_action","brcmf_p2p_abort_action_frame","brcmf_p2p_send_action_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"series_id":"4bce7538-ef98-4ac6-9cc5-1a5f7f73f03a","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-08 16:10:12 +0000 UTC FinishedAt: 2026-07-08 16:42:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvd7p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"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":["brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_configure_wpaie","brcmf_p2p_is_pub_action","brcmf_p2p_is_dpp_pub_action","brcmf_p2p_is_p2p_action","brcmf_p2p_abort_action_frame","brcmf_p2p_send_action_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"series_id":"4bce7538-ef98-4ac6-9cc5-1a5f7f73f03a","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-08 16:10:12 +0000 UTC FinishedAt: 2026-07-08 16:42:14 +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:*b2ad2aac-bf11-47d2-a2ca-3f9b5dfe4462,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-workflowsvd7p/series-workflowsvd7p-convert-artifact-898189410/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": "394f4037-b81e-434e-9c8f-f830083d24d9", "success": false },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-workflowsvd7p/series-workflowsvd7p-build-action-1156882464/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvd7p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"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":["brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_configure_wpaie","brcmf_p2p_is_pub_action","brcmf_p2p_is_dpp_pub_action","brcmf_p2p_is_p2p_action","brcmf_p2p_abort_action_frame","brcmf_p2p_send_action_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"series_id":"4bce7538-ef98-4ac6-9cc5-1a5f7f73f03a","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-08 16:10:12 +0000 UTC FinishedAt: 2026-07-08 16:41:54 +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:*b2ad2aac-bf11-47d2-a2ca-3f9b5dfe4462,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-workflowsvd7p/series-workflowsvd7p-convert-artifact-898189410/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": "394f4037-b81e-434e-9c8f-f830083d24d9", "success": false },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-workflowsvd7p/series-workflowsvd7p-build-action-1156882464/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvd7p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"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":["brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_configure_wpaie","brcmf_p2p_is_pub_action","brcmf_p2p_is_dpp_pub_action","brcmf_p2p_is_p2p_action","brcmf_p2p_abort_action_frame","brcmf_p2p_send_action_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"series_id":"4bce7538-ef98-4ac6-9cc5-1a5f7f73f03a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Failed StartedAt: 2026-07-08 16:42:14 +0000 UTC FinishedAt: 2026-07-08 16:42:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvd7p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"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":["brcmf_set_key_mgmt","brcmf_cfg80211_connect","brcmf_configure_wpaie","brcmf_p2p_is_pub_action","brcmf_p2p_is_dpp_pub_action","brcmf_p2p_is_p2p_action","brcmf_p2p_abort_action_frame","brcmf_p2p_send_action_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5cb5575308bce9d63178fe943bf89c520a348808","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","CFG80211"],"series_id":"4bce7538-ef98-4ac6-9cc5-1a5f7f73f03a","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: Failed StartedAt: 2026-07-08 16:42:14 +0000 UTC FinishedAt: 2026-07-08 16:42:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}