Name: series-workflowq5bx4 Phase: Succeeded StartedAt: 2026-08-14 02:49:37 +0000 UTC FinishedAt: 2026-08-14 05:01:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[0] Phase: Succeeded StartedAt: 2026-08-14 02:49:37 +0000 UTC FinishedAt: 2026-08-14 03:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 02:49:37 +0000 UTC FinishedAt: 2026-08-14 03:33:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a275b5bfc9ee29b7eeef4ee6a635ac5461290df4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK", "BLK_DEV_ZONED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a275b5bfc9ee29b7eeef4ee6a635ac5461290df4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK", "BLK_DEV_ZONED" ], "series_id": "7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ublk_ctrl_uring_cmd", "ublk_ctrl_set_params" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJsa19jdHJsX3VyaW5nX2NtZCYjMzQ7LAogICAgJiMzNDt1YmxrX2N0cmxfc2V0X3BhcmFtcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AgaW4gYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AgdG8gZW5zdXJlIHRoYXQgYGNodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiBmb3Igem9uZWQgZGV2aWNlcy4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIG9mIHVwZGF0ZXMgdG8gdGhlIHVzZXItc3BhY2Ugc2VsZnRlc3RzIChgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9gKS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBrZXJuZWwgY2hhbmdlIGlzIHB1cmVseSBhIHZhbGlkYXRpb24gY2hlY2sgb24gYW4gZXhpc3RpbmcgcGFyYW1ldGVyLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdWJsayBkcml2ZXIgdG8gZW5mb3JjZSB0aGF0IGBjaHVua19zZWN0b3JzYCBpcyBhIHBvd2VyIG9mIDIgd2hlbiBjb25maWd1cmluZyBhIHpvbmVkIHVibGsgZGV2aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGtlcm5lbCYjMzk7cyB2YWxpZGF0aW9uIGxvZ2ljIGZvciB1c2VyLXByb3ZpZGVkIHBhcmFtZXRlcnMsIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgY29tbWFuZHMgb24gYC9kZXYvdWJsay1jb250cm9sYC4gVGhlIGNvZGUgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE4YzIzY2Y0NDk5NzU4NmMwZjhkM2EyYjZjMGU1ODE5MGQ1NTQyODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwMzozMToxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbmluZGV4IDg1M2NkNDBhMzQwM2MuLjE5M2Y2ZWJjM2IzN2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuQEAgLTk4MCw3ICYjNDM7OTgwLDcgQEAgc3RhdGljIGludCB1YmxrX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxuIFx0XHRpZiAocC1cdTAwM2VtYXhfc2VjdG9ycyBcdTAwM2MgUEFHRV9TRUNUT1JTKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAodWJsa19kZXZfaXNfem9uZWQodWIpIFx1MDAyNlx1MDAyNiAhcC1cdTAwM2VjaHVua19zZWN0b3JzKVxuJiM0MztcdFx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSBcdTAwMjZcdTAwMjYgIWlzX3Bvd2VyX29mXzIocC1cdTAwM2VjaHVua19zZWN0b3JzKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH0gZWxzZVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZVxuaW5kZXggYTNjZWM3YjM1ZGI3Ny4uNWRhZjM2YzZjMzZjNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGVcbkBAIC01NSw2ICYjNDM7NTUsOCBAQCBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3N0cmlwZV8wNi5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IHRlc3RfcGFydF8wMS5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IHRlc3RfcGFydF8wMi5zaFxuIFxuJiM0MztURVNUX1BST0dTICYjNDM7PSB0ZXN0X3BhcmFtc18wMS5zaFxuJiM0MztcbiBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3NobWVtemNfMDEuc2hcbiBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3NobWVtemNfMDIuc2hcbiBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3NobWVtemNfMDMuc2hcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmNcbmluZGV4IGJlNWEwZDc3NTk1MmMuLjI0MDBiNDYxNTc2NjQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuY1xuQEAgLTgsNiAmIzQzOzgsMTMgQEBcbiAjaW5jbHVkZSBcJiMzNDtrdWJsay5oXCYjMzQ7XG4gXG4gI2RlZmluZSBNQVhfTlJfVEdUX0FSRyBcdDY0XG4mIzQzOyNkZWZpbmUgS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVFx0XHQ5XG4mIzQzOyNkZWZpbmUgS1VCTEtfUEFSQU1fUEhZU0lDQUxfQlNfU0hJRlRcdFx0MTJcbiYjNDM7I2RlZmluZSBLVUJMS19QQVJBTV9aT05FX1NFQ1RPUlNcdFx0MTI4XG4mIzQzOyNkZWZpbmUgS1VCTEtfUEFSQU1fTlJfWk9ORVNcdFx0XHQxNlxuJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTXHRcdFx0XFxcbiYjNDM7XHQoS1VCTEtfUEFSQU1fWk9ORV9TRUNUT1JTICogS1VCTEtfUEFSQU1fTlJfWk9ORVMpXG4mIzQzOyNkZWZpbmUgS1VCTEtfUEFSQU1fWk9ORV9BUFBFTkRfU0VDVE9SU1x0XHQ4XG4gXG4gdW5zaWduZWQgaW50IHVibGtfZGJnX21hc2sgPSBVQkxLX0xPRztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHVibGtfdGd0X29wcyAqdGd0X29wc19saXN0W10gPSB7XG5AQCAtMjI3LDYgJiM0MzsyMzQsNTUgQEAgc3RhdGljIGludCB1YmxrX2N0cmxfZ2V0X2ZlYXR1cmVzKHN0cnVjdCB1YmxrX2RldiAqZGV2LFxuIFx0cmV0dXJuIF9fdWJsa19jdHJsX2NtZChkZXYsIFx1MDAyNmRhdGEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBwYXJzZV9wYXJhbV90eXBlcyhjb25zdCBjaGFyICphcmcsIF9fdTMyICp0eXBlcylcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzEyOF0sICpzYXZlID0gTlVMTCwgKnRvaztcbiYjNDM7XG4mIzQzO1x0aWYgKHN0cmxlbihhcmcpIFx1MDAzZT0gc2l6ZW9mKGJ1ZikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0c3RyY3B5KGJ1ZiwgYXJnKTtcbiYjNDM7XHQqdHlwZXMgPSAwO1xuJiM0MztcdHRvayA9IHN0cnRva19yKGJ1ZiwgXCYjMzQ7LFwmIzM0OywgXHUwMDI2c2F2ZSk7XG4mIzQzO1x0d2hpbGUgKHRvaykge1xuJiM0MztcdFx0aWYgKCFzdHJjbXAodG9rLCBcJiMzNDtub25lXCYjMzQ7KSlcbiYjNDM7XHRcdFx0O1xuJiM0MztcdFx0ZWxzZSBpZiAoIXN0cmNtcCh0b2ssIFwmIzM0O2Jhc2ljXCYjMzQ7KSlcbiYjNDM7XHRcdFx0KnR5cGVzIHw9IFVCTEtfUEFSQU1fVFlQRV9CQVNJQztcbiYjNDM7XHRcdGVsc2UgaWYgKCFzdHJjbXAodG9rLCBcJiMzNDt6b25lZFwmIzM0OykpXG4mIzQzO1x0XHRcdCp0eXBlcyB8PSBVQkxLX1BBUkFNX1RZUEVfWk9ORUQ7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0dG9rID0gc3RydG9rX3IoTlVMTCwgXCYjMzQ7LFwmIzM0OywgXHUwMDI2c2F2ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjb25zdCBzdHJ1Y3QgZGV2X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCB1YmxrX3BhcmFtcyAqcGFyYW1zKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHBhcmFtc19jdHggKnAgPSBcdTAwMjZjdHgtXHUwMDNlcGFyYW1zO1xuJiM0MztcbiYjNDM7XHQqcGFyYW1zID0gKHN0cnVjdCB1YmxrX3BhcmFtcykge1xuJiM0MztcdFx0LnR5cGVzID0gcC1cdTAwM2V0eXBlcyxcbiYjNDM7XHRcdC5iYXNpYyA9IHtcbiYjNDM7XHRcdFx0LmxvZ2ljYWxfYnNfc2hpZnRcdD0gcC1cdTAwM2Vsb2dpY2FsX2JzX3NoaWZ0LFxuJiM0MztcdFx0XHQucGh5c2ljYWxfYnNfc2hpZnRcdD0gcC1cdTAwM2VwaHlzaWNhbF9ic19zaGlmdCxcbiYjNDM7XHRcdFx0LmlvX21pbl9zaGlmdFx0XHQ9IHAtXHUwMDNlaW9fbWluX3NoaWZ0LFxuJiM0MztcdFx0XHQuaW9fb3B0X3NoaWZ0XHRcdD0gcC1cdTAwM2Vpb19vcHRfc2hpZnQsXG4mIzQzO1x0XHRcdC5tYXhfc2VjdG9yc1x0XHQ9IHAtXHUwMDNlbWF4X3NlY3RvcnMsXG4mIzQzO1x0XHRcdC5jaHVua19zZWN0b3JzXHRcdD0gcC1cdTAwM2VjaHVua19zZWN0b3JzLFxuJiM0MztcdFx0XHQuZGV2X3NlY3RvcnNcdFx0PSBwLVx1MDAzZWRldl9zZWN0b3JzLFxuJiM0MztcdFx0fSxcbiYjNDM7XHRcdC56b25lZCA9IHtcbiYjNDM7XHRcdFx0Lm1heF9vcGVuX3pvbmVzXHRcdD0gcC1cdTAwM2VtYXhfb3Blbl96b25lcyxcbiYjNDM7XHRcdFx0Lm1heF9hY3RpdmVfem9uZXNcdD0gcC1cdTAwM2VtYXhfYWN0aXZlX3pvbmVzLFxuJiM0MztcdFx0XHQubWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgPSBwLVx1MDAzZW1heF96b25lX2FwcGVuZF9zZWN0b3JzLFxuJiM0MztcdFx0fSxcbiYjNDM7XHR9O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdWJsa19jdHJsX3VwZGF0ZV9zaXplKHN0cnVjdCB1YmxrX2RldiAqZGV2LFxuIFx0XHRfX3U2NCBucl9zZWN0cylcbiB7XG5AQCAtMTc3Miw2ICYjNDM7MTgyOCw1MSBAQCBzdGF0aWMgaW50IF9fY21kX2Rldl9hZGQoY29uc3Qgc3RydWN0IGRldl9jdHggKmN0eClcbiBcbiBzdGF0aWMgaW50IF9fY21kX2Rldl9saXN0KHN0cnVjdCBkZXZfY3R4ICpjdHgpO1xuIFxuJiM0MztzdGF0aWMgaW50IGNtZF9kZXZfc2V0X3BhcmFtcyhzdHJ1Y3QgZGV2X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHVibGtzcnZfY3RybF9kZXZfaW5mbyAqaW5mbztcbiYjNDM7XHRzdHJ1Y3QgdWJsa19wYXJhbXMgcGFyYW1zO1xuJiM0MztcdHN0cnVjdCB1YmxrX2RldiAqZGV2O1xuJiM0MztcdF9fdTY0IGZlYXR1cmVzO1xuJiM0MztcdGludCByZXQsIGRlbF9yZXQ7XG4mIzQzO1xuJiM0MztcdGRldiA9IHVibGtfY3RybF9pbml0KCk7XG4mIzQzO1x0aWYgKCFkZXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdWJsa19jdHJsX2dldF9mZWF0dXJlcyhkZXYsIFx1MDAyNmZlYXR1cmVzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmICghKGZlYXR1cmVzIFx1MDAyNiBVQkxLX0ZfQ01EX0lPQ1RMX0VOQ09ERSkpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9UU1VQO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpbmZvID0gXHUwMDI2ZGV2LVx1MDAzZWRldl9pbmZvO1xuJiM0MztcdGluZm8tXHUwMDNlZGV2X2lkID0gY3R4LVx1MDAzZWRldl9pZDtcbiYjNDM7XHRpbmZvLVx1MDAzZW5yX2h3X3F1ZXVlcyA9IGN0eC1cdTAwM2Vucl9od19xdWV1ZXM7XG4mIzQzO1x0aW5mby1cdTAwM2VxdWV1ZV9kZXB0aCA9IGN0eC1cdTAwM2VxdWV1ZV9kZXB0aDtcbiYjNDM7XHRpbmZvLVx1MDAzZWlvX2Rlc2Nfc2l6ZSA9IGN0eC1cdTAwM2Vpb19kZXNjX3NpemU7XG4mIzQzO1x0aW5mby1cdTAwM2VmbGFncyA9IGN0eC1cdTAwM2VmbGFncztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdWJsa19jdHJsX2FkZF9kZXYoZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHVibGtfaW5pdF9wYXJhbXNfZnJvbV9jdHgoY3R4LCBcdTAwMjZwYXJhbXMpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB1YmxrX2N0cmxfc2V0X3BhcmFtcyhkZXYsIFx1MDAyNnBhcmFtcyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O1NFVF9QQVJBTVMgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1xuJiM0MztcdGRlbF9yZXQgPSB1YmxrX2N0cmxfZGVsX2RldihkZXYpO1xuJiM0MztcdGlmIChkZWxfcmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgPT0gMClcbiYjNDM7XHRcdHJldCA9IGRlbF9yZXQ7XG4mIzQzO291dDpcbiYjNDM7XHR1YmxrX2N0cmxfZGVpbml0KGRldik7XG4mIzQzO1x0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBjbWRfZGV2X2FkZChzdHJ1Y3QgZGV2X2N0eCAqY3R4KVxuIHtcbiBcdGludCByZXM7XG5AQCAtMjExNyw2ICYjNDM7MjIxOCw5IEBAIHN0YXRpYyBpbnQgY21kX2Rldl9oZWxwKGNoYXIgKmV4ZSlcbiBcdHByaW50ZihcJiMzNDtcXHQgLS1zYWZlIG9ubHkgc3RvcCBpZiBkZXZpY2UgaGFzIG5vIGFjdGl2ZSBvcGVuZXJzXFxuXFxuXCYjMzQ7KTtcbiBcdHByaW50ZihcJiMzNDslcyBsaXN0IFstbiBkZXZfaWRdIC1hIFxcblwmIzM0OywgZXhlKTtcbiBcdHByaW50ZihcJiMzNDtcXHQgLWEgbGlzdCBhbGwgZGV2aWNlcywgLW4gbGlzdCBzcGVjaWZpZWQgZGV2aWNlLCBkZWZhdWx0IC1hIFxcblxcblwmIzM0Oyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0OyVzIHNldF9wYXJhbXMgWy1uIGRldl9pZF0gWy1xIG5yX3F1ZXVlc10gWy1kIGRlcHRoXSBbLXVdIFstLXpvbmVkXVxcblwmIzM0OywgZXhlKTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7XFx0Wy0tcGFyYW1fdHlwZXMgYmFzaWNbLHpvbmVkXXxub25lXVxcblwmIzM0Oyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O1xcdCBpc3N1ZSBBRERfREVWLCBTRVRfUEFSQU1TIGFuZCBERUxfREVWIHdpdGhvdXQgU1RBUlRfREVWXFxuXFxuXCYjMzQ7KTtcbiBcdHByaW50ZihcJiMzNDslcyBmZWF0dXJlc1xcblwmIzM0OywgZXhlKTtcbiBcdHByaW50ZihcJiMzNDslcyB1cGRhdGVfc2l6ZSAtbiBkZXZfaWQgLXN8LS1zaXplIHNpemVfaW5fYnl0ZXMgXFxuXCYjMzQ7LCBleGUpO1xuIFx0cHJpbnRmKFwmIzM0OyVzIHF1aWVzY2UgLW4gZGV2X2lkXFxuXCYjMzQ7LCBleGUpO1xuQEAgLTIxNjAsNiAmIzQzOzIyNjQsMTggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0eyBcJiMzNDtodGxiXCYjMzQ7LFx0XHQxLFx0TlVMTCwgIDAgIH0sXG4gXHRcdHsgXCYjMzQ7cmRvbmx5X3NobWVtX2J1ZlwmIzM0OyxcdDAsXHROVUxMLCAgMCAgfSxcbiBcdFx0eyBcJiMzNDtpb19kZXNjX3NpemVcJiMzNDssXHQxLFx0TlVMTCwgIDAgIH0sXG4mIzQzO1x0XHR7IFwmIzM0O3pvbmVkXCYjMzQ7LFx0XHQwLFx0TlVMTCwgIDAgIH0sXG4mIzQzO1x0XHR7IFwmIzM0O3BhcmFtX3R5cGVzXCYjMzQ7LFx0MSxcdE5VTEwsICAwICB9LFxuJiM0MztcdFx0eyBcJiMzNDtsb2dpY2FsX2JzX3NoaWZ0XCYjMzQ7LFx0MSxcdE5VTEwsICAwICB9LFxuJiM0MztcdFx0eyBcJiMzNDtwaHlzaWNhbF9ic19zaGlmdFwmIzM0OyxcdDEsXHROVUxMLCAgMCAgfSxcbiYjNDM7XHRcdHsgXCYjMzQ7aW9fbWluX3NoaWZ0XCYjMzQ7LFx0MSxcdE5VTEwsICAwICB9LFxuJiM0MztcdFx0eyBcJiMzNDtpb19vcHRfc2hpZnRcJiMzNDssXHQxLFx0TlVMTCwgIDAgIH0sXG4mIzQzO1x0XHR7IFwmIzM0O21heF9zZWN0b3JzXCYjMzQ7LFx0MSxcdE5VTEwsICAwICB9LFxuJiM0MztcdFx0eyBcJiMzNDtjaHVua19zZWN0b3JzXCYjMzQ7LFx0MSxcdE5VTEwsICAwICB9LFxuJiM0MztcdFx0eyBcJiMzNDtkZXZfc2VjdG9yc1wmIzM0OyxcdDEsXHROVUxMLCAgMCAgfSxcbiYjNDM7XHRcdHsgXCYjMzQ7bWF4X3pvbmVfYXBwZW5kX3NlY3RvcnNcJiMzNDssIDEsIE5VTEwsICAwICB9LFxuJiM0MztcdFx0eyBcJiMzNDttYXhfb3Blbl96b25lc1wmIzM0OyxcdDEsXHROVUxMLCAgMCAgfSxcbiYjNDM7XHRcdHsgXCYjMzQ7bWF4X2FjdGl2ZV96b25lc1wmIzM0OyxcdDEsXHROVUxMLCAgMCAgfSxcbiBcdFx0eyAwLCAwLCAwLCAwIH1cbiBcdH07XG4gXHRjb25zdCBzdHJ1Y3QgdWJsa190Z3Rfb3BzICpvcHMgPSBOVUxMO1xuQEAgLTIxNzMsNiAmIzQzOzIyODksMTkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0LnRndF90eXBlXHQ9XHRcJiMzNDt1bmtub3duXCYjMzQ7LFxuIFx0XHQuY3N1bV90eXBlXHQ9XHRMQk1EX1BJX0NTVU1fTk9ORSxcbiBcdFx0LmlvX2Rlc2Nfc2l6ZVx0PVx0c2l6ZW9mKHN0cnVjdCB1Ymxrc3J2X2lvX2Rlc2MpLFxuJiM0MztcdFx0LnBhcmFtcyA9IHtcbiYjNDM7XHRcdFx0LnR5cGVzXHRcdFx0PSBVQkxLX1BBUkFNX1RZUEVfQkFTSUMsXG4mIzQzO1x0XHRcdC5sb2dpY2FsX2JzX3NoaWZ0XHQ9IEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlQsXG4mIzQzO1x0XHRcdC5waHlzaWNhbF9ic19zaGlmdFx0PSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCxcbiYjNDM7XHRcdFx0LmlvX21pbl9zaGlmdFx0XHQ9IEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlQsXG4mIzQzO1x0XHRcdC5pb19vcHRfc2hpZnRcdFx0PSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCxcbiYjNDM7XHRcdFx0Lm1heF9zZWN0b3JzXHRcdD1cbiYjNDM7XHRcdFx0XHRVQkxLX0lPX01BWF9CWVRFUyBcdTAwM2VcdTAwM2UgS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCxcbiYjNDM7XHRcdFx0LmNodW5rX3NlY3RvcnNcdFx0PSBLVUJMS19QQVJBTV9aT05FX1NFQ1RPUlMsXG4mIzQzO1x0XHRcdC5kZXZfc2VjdG9yc1x0XHQ9IEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTLFxuJiM0MztcdFx0XHQubWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgPVxuJiM0MztcdFx0XHRcdEtVQkxLX1BBUkFNX1pPTkVfQVBQRU5EX1NFQ1RPUlMsXG4mIzQzO1x0XHR9LFxuIFx0fTtcbiBcdGludCByZXQgPSAtRUlOVkFMLCBpO1xuIFx0aW50IHRndF9hcmdjID0gMTtcbkBAIC0yMjg4LDYgJiM0MzsyNDE3LDM0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdFx0XHRjdHguZmxhZ3MgfD0gVUJMS19GX0lPX0RFU0NfU0laRTtcbiBcdFx0XHRcdGN0eC5pb19kZXNjX3NpemUgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4gXHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcJiMzNDt6b25lZFwmIzM0OykpXG4mIzQzO1x0XHRcdFx0Y3R4LmZsYWdzIHw9IFVCTEtfRl9aT05FRDtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCYjMzQ7cGFyYW1fdHlwZXNcJiMzNDspKSB7XG4mIzQzO1x0XHRcdFx0cmV0ID0gcGFyc2VfcGFyYW1fdHlwZXMob3B0YXJnLCBcdTAwMjZjdHgucGFyYW1zLnR5cGVzKTtcbiYjNDM7XHRcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcJiMzNDtsb2dpY2FsX2JzX3NoaWZ0XCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRjdHgucGFyYW1zLmxvZ2ljYWxfYnNfc2hpZnQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwmIzM0O3BoeXNpY2FsX2JzX3NoaWZ0XCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRjdHgucGFyYW1zLnBoeXNpY2FsX2JzX3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcJiMzNDtpb19taW5fc2hpZnRcJiMzNDspKVxuJiM0MztcdFx0XHRcdGN0eC5wYXJhbXMuaW9fbWluX3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcJiMzNDtpb19vcHRfc2hpZnRcJiMzNDspKVxuJiM0MztcdFx0XHRcdGN0eC5wYXJhbXMuaW9fb3B0X3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcJiMzNDttYXhfc2VjdG9yc1wmIzM0OykpXG4mIzQzO1x0XHRcdFx0Y3R4LnBhcmFtcy5tYXhfc2VjdG9ycyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCYjMzQ7Y2h1bmtfc2VjdG9yc1wmIzM0OykpXG4mIzQzO1x0XHRcdFx0Y3R4LnBhcmFtcy5jaHVua19zZWN0b3JzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcJiMzNDtkZXZfc2VjdG9yc1wmIzM0OykpXG4mIzQzO1x0XHRcdFx0Y3R4LnBhcmFtcy5kZXZfc2VjdG9ycyA9IHN0cnRvdWxsKG9wdGFyZywgTlVMTCwgMCk7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwmIzM0O21heF96b25lX2FwcGVuZF9zZWN0b3JzXCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRjdHgucGFyYW1zLm1heF96b25lX2FwcGVuZF9zZWN0b3JzID1cbiYjNDM7XHRcdFx0XHRcdHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCYjMzQ7bWF4X29wZW5fem9uZXNcJiMzNDspKVxuJiM0MztcdFx0XHRcdGN0eC5wYXJhbXMubWF4X29wZW5fem9uZXMgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwmIzM0O21heF9hY3RpdmVfem9uZXNcJiMzNDspKVxuJiM0MztcdFx0XHRcdGN0eC5wYXJhbXMubWF4X2FjdGl2ZV96b25lcyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5Oz8mIzM5OzpcbiBcdFx0XHQvKlxuQEAgLTIzNzcsNyAmIzQzOzI1MzQsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHRvcHMtXHUwMDNlcGFyc2VfY21kX2xpbmUoXHUwMDI2Y3R4LCB0Z3RfYXJnYywgdGd0X2FyZ3YpO1xuIFx0fVxuIFxuLVx0aWYgKCFzdHJjbXAoY21kLCBcJiMzNDthZGRcJiMzNDspKVxuJiM0MztcdGlmICghc3RyY21wKGNtZCwgXCYjMzQ7c2V0X3BhcmFtc1wmIzM0OykpXG4mIzQzO1x0XHRyZXQgPSBjbWRfZGV2X3NldF9wYXJhbXMoXHUwMDI2Y3R4KTtcbiYjNDM7XHRlbHNlIGlmICghc3RyY21wKGNtZCwgXCYjMzQ7YWRkXCYjMzQ7KSlcbiBcdFx0cmV0ID0gY21kX2Rldl9hZGQoXHUwMDI2Y3R4KTtcbiBcdGVsc2UgaWYgKCFzdHJjbXAoY21kLCBcJiMzNDtyZWNvdmVyXCYjMzQ7KSkge1xuIFx0XHRpZiAoY3R4LmRldl9pZCBcdTAwM2MgMCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaFxuaW5kZXggZTI3YzE1NGZjOTEwOC4uZDk4ZjNkNjEyZDg4OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oXG5AQCAtNjMsNiAmIzQzOzYzLDIyIEBAIHN0cnVjdCBmYXVsdF9pbmplY3RfY3R4IHtcbiBcdGJvb2wgZGllX2R1cmluZ19mZXRjaDtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgcGFyYW1zX2N0eCB7XG4mIzQzO1x0X191MzIgdHlwZXM7XG4mIzQzO1xuJiM0MztcdF9fdTMyIGxvZ2ljYWxfYnNfc2hpZnQ7XG4mIzQzO1x0X191MzIgcGh5c2ljYWxfYnNfc2hpZnQ7XG4mIzQzO1x0X191MzIgaW9fbWluX3NoaWZ0O1xuJiM0MztcdF9fdTMyIGlvX29wdF9zaGlmdDtcbiYjNDM7XHRfX3UzMiBtYXhfc2VjdG9ycztcbiYjNDM7XHRfX3UzMiBjaHVua19zZWN0b3JzO1xuJiM0MztcdF9fdTY0IGRldl9zZWN0b3JzO1xuJiM0MztcbiYjNDM7XHRfX3UzMiBtYXhfb3Blbl96b25lcztcbiYjNDM7XHRfX3UzMiBtYXhfYWN0aXZlX3pvbmVzO1xuJiM0MztcdF9fdTMyIG1heF96b25lX2FwcGVuZF9zZWN0b3JzO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgZGV2X2N0eCB7XG4gXHRjaGFyIHRndF90eXBlWzE2XTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtOTksNiAmIzQzOzExNSw4IEBAIHN0cnVjdCBkZXZfY3R4IHtcbiBcdC8qIGZvciAmIzM5O3VwZGF0ZV9zaXplJiMzOTsgY29tbWFuZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBsb25nIHNpemU7XG4gXG4mIzQzO1x0c3RydWN0IHBhcmFtc19jdHggcGFyYW1zO1xuJiM0MztcbiBcdGNoYXIgKmh0bGJfcGF0aDtcbiBcbiBcdHVuaW9uIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcGFyYW1zXzAxLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3BhcmFtc18wMS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjkyOGU3MmIxMDM1ZDJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2hcbkBAIC0wLDAgJiM0MzsxLDExNCBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsuIFwmIzM0OyQoY2QgXCYjMzQ7JChkaXJuYW1lIFwmIzM0OyQwXCYjMzQ7KVwmIzM0OyBcdTAwMjZcdTAwMjYgcHdkKVwmIzM0Oy90ZXN0X2NvbW1vbi5zaFxuJiM0MztcbiYjNDM7RVJSX0NPREU9MFxuJiM0MztcbiYjNDM7cnVuX3NldF9wYXJhbXNfc3VjY2VzcygpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBuYW1lPSQxXG4mIzQzO1xuJiM0MztcdHNoaWZ0XG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7JG5hbWVcJiMzNDtcbiYjNDM7XHRpZiAhIFwmIzM0OyRVQkxLX1BST0dcJiMzNDsgc2V0X3BhcmFtcyAtcSAxIC1kIDIgXCYjMzQ7JEBcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7JG5hbWU6IFNFVF9QQVJBTVMgY2hlY2sgZmFpbGVkXCYjMzQ7XG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzO3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbmFtZT0kMVxuJiM0MztcbiYjNDM7XHRzaGlmdFxuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0OyRuYW1lXCYjMzQ7XG4mIzQzO1x0aWYgXCYjMzQ7JFVCTEtfUFJPR1wmIzM0OyBzZXRfcGFyYW1zIC1xIDEgLWQgMiBcJiMzNDskQFwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDskbmFtZTogU0VUX1BBUkFNUyBzdWNjZWVkZWQgdW5leHBlY3RlZGx5XCYjMzQ7XG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzO3J1bl96b25lZF9zZXRfcGFyYW1zX3N1Y2Nlc3MoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbmFtZT0kMVxuJiM0MztcbiYjNDM7XHRzaGlmdFxuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0OyRuYW1lXCYjMzQ7XG4mIzQzO1x0aWYgISBcJiMzNDskVUJMS19QUk9HXCYjMzQ7IHNldF9wYXJhbXMgLXEgMSAtZCAyIC11IC0tem9uZWQgXCYjMzQ7JEBcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7JG5hbWU6IFNFVF9QQVJBTVMgY2hlY2sgZmFpbGVkXCYjMzQ7XG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzO3J1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbmFtZT0kMVxuJiM0MztcbiYjNDM7XHRzaGlmdFxuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0OyRuYW1lXCYjMzQ7XG4mIzQzO1x0aWYgXCYjMzQ7JFVCTEtfUFJPR1wmIzM0OyBzZXRfcGFyYW1zIC1xIDEgLWQgMiAtdSAtLXpvbmVkIFwmIzM0OyRAXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0OyRuYW1lOiBTRVRfUEFSQU1TIHN1Y2NlZWRlZCB1bmV4cGVjdGVkbHlcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7X3ByZXBfdGVzdCBcJiMzNDtwYXJhbXNcJiMzNDsgXCYjMzQ7U0VUX1BBUkFNUyB2YWxpZGF0aW9uXCYjMzQ7XG4mIzQzO1xuJiM0MztpZiBbICEgLWMgL2Rldi91YmxrLWNvbnRyb2wgXTsgdGhlblxuJiM0MztcdF9jbGVhbnVwX3Rlc3RcbiYjNDM7XHRfc2hvd19yZXN1bHQgJFRJRCAkVUJMS19TS0lQX0NPREVcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MgXCYjMzQ7dmFsaWQgYmFzaWMgcGFyYW1zXCYjMzQ7IHx8XG4mIzQzO1x0RVJSX0NPREU9MVxuJiM0MztcbiYjNDM7cnVuX3NldF9wYXJhbXNfZmFpbHVyZSBcJiMzNDttaXNzaW5nIGJhc2ljIHBhcmFtc1wmIzM0OyBcXFxuJiM0MztcdC0tcGFyYW1fdHlwZXMgbm9uZSB8fFxuJiM0MztcdEVSUl9DT0RFPTFcbiYjNDM7XG4mIzQzO3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUgXCYjMzQ7bG9naWNhbCBibG9jayBsYXJnZXIgdGhhbiBwaHlzaWNhbCBibG9ja1wmIzM0OyBcXFxuJiM0MztcdC0tbG9naWNhbF9ic19zaGlmdCAxMiAtLXBoeXNpY2FsX2JzX3NoaWZ0IDkgfHxcbiYjNDM7XHRFUlJfQ09ERT0xXG4mIzQzO1xuJiM0MztydW5fc2V0X3BhcmFtc19mYWlsdXJlIFwmIzM0O3RvbyBsYXJnZSBtYXggc2VjdG9yc1wmIzM0OyBcXFxuJiM0MztcdC0tbWF4X3NlY3RvcnMgMjA0OSB8fFxuJiM0MztcdEVSUl9DT0RFPTFcbiYjNDM7XG4mIzQzO2lmIF9oYXZlX2ZlYXR1cmUgXCYjMzQ7Wk9ORURcJiMzNDsgXHUwMDI2XHUwMDI2IF9oYXZlX2ZlYXR1cmUgXCYjMzQ7VVNFUl9DT1BZXCYjMzQ7OyB0aGVuXG4mIzQzO1x0cnVuX3pvbmVkX3NldF9wYXJhbXNfc3VjY2VzcyBcJiMzNDt2YWxpZCB6b25lZCBwYXJhbXNcJiMzNDsgXFxcbiYjNDM7XHRcdC0tcGFyYW1fdHlwZXMgYmFzaWMsem9uZWQgfHxcbiYjNDM7XHRcdEVSUl9DT0RFPTFcbiYjNDM7XG4mIzQzO1x0cnVuX3pvbmVkX3NldF9wYXJhbXNfZmFpbHVyZSBcJiMzNDttaXNzaW5nIHpvbmVkIHBhcmFtc1wmIzM0OyB8fFxuJiM0MztcdFx0RVJSX0NPREU9MVxuJiM0MztcbiYjNDM7XHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwmIzM0O25vbi1wb3dlci1vZi0yIHpvbmUgc2l6ZVwmIzM0OyBcXFxuJiM0MztcdFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxuJiM0MztcdFx0LS1jaHVua19zZWN0b3JzIDk2IC0tZGV2X3NlY3RvcnMgJCgoOTYgKiAxNikpIHx8XG4mIzQzO1x0XHRFUlJfQ09ERT0xXG4mIzQzO1xuJiM0MztcdHJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgXCYjMzQ7emVybyBtYXggem9uZSBhcHBlbmRcJiMzNDsgXFxcbiYjNDM7XHRcdC0tcGFyYW1fdHlwZXMgYmFzaWMsem9uZWQgXFxcbiYjNDM7XHRcdC0tbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgMCB8fFxuJiM0MztcdFx0RVJSX0NPREU9MVxuJiM0MztcbiYjNDM7XHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwmIzM0O3RvbyBtYW55IG9wZW4gem9uZXNcJiMzNDsgXFxcbiYjNDM7XHRcdC0tcGFyYW1fdHlwZXMgYmFzaWMsem9uZWQgXFxcbiYjNDM7XHRcdC0tZGV2X3NlY3RvcnMgJCgoMTI4ICogNCkpIC0tbWF4X29wZW5fem9uZXMgNSB8fFxuJiM0MztcdFx0RVJSX0NPREU9MVxuJiM0MztcbiYjNDM7XHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwmIzM0O3RvbyBtYW55IGFjdGl2ZSB6b25lc1wmIzM0OyBcXFxuJiM0MztcdFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxuJiM0MztcdFx0LS1kZXZfc2VjdG9ycyAkKCgxMjggKiA0KSkgLS1tYXhfYWN0aXZlX3pvbmVzIDUgfHxcbiYjNDM7XHRcdEVSUl9DT0RFPTFcbiYjNDM7ZWxzZVxuJiM0MztcdGVjaG8gXCYjMzQ7em9uZWQgdWJsayBmZWF0dXJlIHVuYXZhaWxhYmxlLCBza2lwIHpvbmVkIFNFVF9QQVJBTVMgY2FzZXNcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO19jbGVhbnVwX3Rlc3RcbiYjNDM7X3Nob3dfcmVzdWx0ICRUSUQgJEVSUl9DT0RFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJsa19jdHJsX3VyaW5nX2NtZCYjMzQ7LAogICAgJiMzNDt1YmxrX2N0cmxfc2V0X3BhcmFtcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdWJsayBkcml2ZXIgdG8gZW5mb3JjZSB0aGF0IGBjaHVua19zZWN0b3JzYCBpcyBhIHBvd2VyIG9mIDIgd2hlbiBjb25maWd1cmluZyBhIHpvbmVkIHVibGsgZGV2aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGtlcm5lbCYjMzk7cyB2YWxpZGF0aW9uIGxvZ2ljIGZvciB1c2VyLXByb3ZpZGVkIHBhcmFtZXRlcnMsIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgY29tbWFuZHMgb24gYC9kZXYvdWJsay1jb250cm9sYC4gVGhlIGNvZGUgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE4YzIzY2Y0NDk5NzU4NmMwZjhkM2EyYjZjMGU1ODE5MGQ1NTQyODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwMzozMToxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYwppbmRleCA4NTNjZDQwYTM0MDNjLi4xOTNmNmViYzNiMzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCkBAIC05ODAsNyAmIzQzOzk4MCw3IEBAIHN0YXRpYyBpbnQgdWJsa192YWxpZGF0ZV9wYXJhbXMoY29uc3Qgc3RydWN0IHVibGtfZGV2aWNlICp1YikKIAkJaWYgKHAtJmd0O21heF9zZWN0b3JzICZsdDsgUEFHRV9TRUNUT1JTKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSAmYW1wOyZhbXA7ICFwLSZndDtjaHVua19zZWN0b3JzKQomIzQzOwkJaWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSAmYW1wOyZhbXA7ICFpc19wb3dlcl9vZl8yKHAtJmd0O2NodW5rX3NlY3RvcnMpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGUKaW5kZXggYTNjZWM3YjM1ZGI3Ny4uNWRhZjM2YzZjMzZjNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL01ha2VmaWxlCkBAIC01NSw2ICYjNDM7NTUsOCBAQCBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3N0cmlwZV8wNi5zaAogVEVTVF9QUk9HUyAmIzQzOz0gdGVzdF9wYXJ0XzAxLnNoCiBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3BhcnRfMDIuc2gKIAomIzQzO1RFU1RfUFJPR1MgJiM0Mzs9IHRlc3RfcGFyYW1zXzAxLnNoCiYjNDM7CiBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3NobWVtemNfMDEuc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IHRlc3Rfc2htZW16Y18wMi5zaAogVEVTVF9QUk9HUyAmIzQzOz0gdGVzdF9zaG1lbXpjXzAzLnNoCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmMKaW5kZXggYmU1YTBkNzc1OTUyYy4uMjQwMGI0NjE1NzY2NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuYwpAQCAtOCw2ICYjNDM7OCwxMyBAQAogI2luY2x1ZGUgJiMzNDtrdWJsay5oJiMzNDsKIAogI2RlZmluZSBNQVhfTlJfVEdUX0FSRyAJNjQKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlQJCTkKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX1BIWVNJQ0FMX0JTX1NISUZUCQkxMgomIzQzOyNkZWZpbmUgS1VCTEtfUEFSQU1fWk9ORV9TRUNUT1JTCQkxMjgKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX05SX1pPTkVTCQkJMTYKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTCQkJXAomIzQzOwkoS1VCTEtfUEFSQU1fWk9ORV9TRUNUT1JTICogS1VCTEtfUEFSQU1fTlJfWk9ORVMpCiYjNDM7I2RlZmluZSBLVUJMS19QQVJBTV9aT05FX0FQUEVORF9TRUNUT1JTCQk4CiAKIHVuc2lnbmVkIGludCB1YmxrX2RiZ19tYXNrID0gVUJMS19MT0c7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHVibGtfdGd0X29wcyAqdGd0X29wc19saXN0W10gPSB7CkBAIC0yMjcsNiAmIzQzOzIzNCw1NSBAQCBzdGF0aWMgaW50IHVibGtfY3RybF9nZXRfZmVhdHVyZXMoc3RydWN0IHVibGtfZGV2ICpkZXYsCiAJcmV0dXJuIF9fdWJsa19jdHJsX2NtZChkZXYsICZhbXA7ZGF0YSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBhcnNlX3BhcmFtX3R5cGVzKGNvbnN0IGNoYXIgKmFyZywgX191MzIgKnR5cGVzKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMTI4XSwgKnNhdmUgPSBOVUxMLCAqdG9rOwomIzQzOwomIzQzOwlpZiAoc3RybGVuKGFyZykgJmd0Oz0gc2l6ZW9mKGJ1ZikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJc3RyY3B5KGJ1ZiwgYXJnKTsKJiM0MzsJKnR5cGVzID0gMDsKJiM0MzsJdG9rID0gc3RydG9rX3IoYnVmLCAmIzM0OywmIzM0OywgJmFtcDtzYXZlKTsKJiM0MzsJd2hpbGUgKHRvaykgewomIzQzOwkJaWYgKCFzdHJjbXAodG9rLCAmIzM0O25vbmUmIzM0OykpCiYjNDM7CQkJOwomIzQzOwkJZWxzZSBpZiAoIXN0cmNtcCh0b2ssICYjMzQ7YmFzaWMmIzM0OykpCiYjNDM7CQkJKnR5cGVzIHw9IFVCTEtfUEFSQU1fVFlQRV9CQVNJQzsKJiM0MzsJCWVsc2UgaWYgKCFzdHJjbXAodG9rLCAmIzM0O3pvbmVkJiMzNDspKQomIzQzOwkJCSp0eXBlcyB8PSBVQkxLX1BBUkFNX1RZUEVfWk9ORUQ7CiYjNDM7CQllbHNlCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl0b2sgPSBzdHJ0b2tfcihOVUxMLCAmIzM0OywmIzM0OywgJmFtcDtzYXZlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjb25zdCBzdHJ1Y3QgZGV2X2N0eCAqY3R4LAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgdWJsa19wYXJhbXMgKnBhcmFtcykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBwYXJhbXNfY3R4ICpwID0gJmFtcDtjdHgtJmd0O3BhcmFtczsKJiM0MzsKJiM0MzsJKnBhcmFtcyA9IChzdHJ1Y3QgdWJsa19wYXJhbXMpIHsKJiM0MzsJCS50eXBlcyA9IHAtJmd0O3R5cGVzLAomIzQzOwkJLmJhc2ljID0gewomIzQzOwkJCS5sb2dpY2FsX2JzX3NoaWZ0CT0gcC0mZ3Q7bG9naWNhbF9ic19zaGlmdCwKJiM0MzsJCQkucGh5c2ljYWxfYnNfc2hpZnQJPSBwLSZndDtwaHlzaWNhbF9ic19zaGlmdCwKJiM0MzsJCQkuaW9fbWluX3NoaWZ0CQk9IHAtJmd0O2lvX21pbl9zaGlmdCwKJiM0MzsJCQkuaW9fb3B0X3NoaWZ0CQk9IHAtJmd0O2lvX29wdF9zaGlmdCwKJiM0MzsJCQkubWF4X3NlY3RvcnMJCT0gcC0mZ3Q7bWF4X3NlY3RvcnMsCiYjNDM7CQkJLmNodW5rX3NlY3RvcnMJCT0gcC0mZ3Q7Y2h1bmtfc2VjdG9ycywKJiM0MzsJCQkuZGV2X3NlY3RvcnMJCT0gcC0mZ3Q7ZGV2X3NlY3RvcnMsCiYjNDM7CQl9LAomIzQzOwkJLnpvbmVkID0gewomIzQzOwkJCS5tYXhfb3Blbl96b25lcwkJPSBwLSZndDttYXhfb3Blbl96b25lcywKJiM0MzsJCQkubWF4X2FjdGl2ZV96b25lcwk9IHAtJmd0O21heF9hY3RpdmVfem9uZXMsCiYjNDM7CQkJLm1heF96b25lX2FwcGVuZF9zZWN0b3JzID0gcC0mZ3Q7bWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMsCiYjNDM7CQl9LAomIzQzOwl9OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdWJsa19jdHJsX3VwZGF0ZV9zaXplKHN0cnVjdCB1YmxrX2RldiAqZGV2LAogCQlfX3U2NCBucl9zZWN0cykKIHsKQEAgLTE3NzIsNiAmIzQzOzE4MjgsNTEgQEAgc3RhdGljIGludCBfX2NtZF9kZXZfYWRkKGNvbnN0IHN0cnVjdCBkZXZfY3R4ICpjdHgpCiAKIHN0YXRpYyBpbnQgX19jbWRfZGV2X2xpc3Qoc3RydWN0IGRldl9jdHggKmN0eCk7CiAKJiM0MztzdGF0aWMgaW50IGNtZF9kZXZfc2V0X3BhcmFtcyhzdHJ1Y3QgZGV2X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHVibGtzcnZfY3RybF9kZXZfaW5mbyAqaW5mbzsKJiM0MzsJc3RydWN0IHVibGtfcGFyYW1zIHBhcmFtczsKJiM0MzsJc3RydWN0IHVibGtfZGV2ICpkZXY7CiYjNDM7CV9fdTY0IGZlYXR1cmVzOwomIzQzOwlpbnQgcmV0LCBkZWxfcmV0OwomIzQzOwomIzQzOwlkZXYgPSB1YmxrX2N0cmxfaW5pdCgpOwomIzQzOwlpZiAoIWRldikKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlyZXQgPSB1YmxrX2N0cmxfZ2V0X2ZlYXR1cmVzKGRldiwgJmFtcDtmZWF0dXJlcyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghKGZlYXR1cmVzICZhbXA7IFVCTEtfRl9DTURfSU9DVExfRU5DT0RFKSkgewomIzQzOwkJcmV0ID0gLUVOT1RTVVA7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpbmZvID0gJmFtcDtkZXYtJmd0O2Rldl9pbmZvOwomIzQzOwlpbmZvLSZndDtkZXZfaWQgPSBjdHgtJmd0O2Rldl9pZDsKJiM0MzsJaW5mby0mZ3Q7bnJfaHdfcXVldWVzID0gY3R4LSZndDtucl9od19xdWV1ZXM7CiYjNDM7CWluZm8tJmd0O3F1ZXVlX2RlcHRoID0gY3R4LSZndDtxdWV1ZV9kZXB0aDsKJiM0MzsJaW5mby0mZ3Q7aW9fZGVzY19zaXplID0gY3R4LSZndDtpb19kZXNjX3NpemU7CiYjNDM7CWluZm8tJmd0O2ZsYWdzID0gY3R4LSZndDtmbGFnczsKJiM0MzsKJiM0MzsJcmV0ID0gdWJsa19jdHJsX2FkZF9kZXYoZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJdWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjdHgsICZhbXA7cGFyYW1zKTsKJiM0MzsKJiM0MzsJcmV0ID0gdWJsa19jdHJsX3NldF9wYXJhbXMoZGV2LCAmYW1wO3BhcmFtcyk7CiYjNDM7CXByaW50ZigmIzM0O1NFVF9QQVJBTVMgcmV0dXJuZWQgJWRcbiYjMzQ7LCByZXQpOwomIzQzOwomIzQzOwlkZWxfcmV0ID0gdWJsa19jdHJsX2RlbF9kZXYoZGV2KTsKJiM0MzsJaWYgKGRlbF9yZXQgJmx0OyAwICZhbXA7JmFtcDsgcmV0ID09IDApCiYjNDM7CQlyZXQgPSBkZWxfcmV0OwomIzQzO291dDoKJiM0MzsJdWJsa19jdHJsX2RlaW5pdChkZXYpOwomIzQzOwlyZXR1cm4gcmV0ICZsdDsgMCA/IHJldCA6IDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBjbWRfZGV2X2FkZChzdHJ1Y3QgZGV2X2N0eCAqY3R4KQogewogCWludCByZXM7CkBAIC0yMTE3LDYgJiM0MzsyMjE4LDkgQEAgc3RhdGljIGludCBjbWRfZGV2X2hlbHAoY2hhciAqZXhlKQogCXByaW50ZigmIzM0O1x0IC0tc2FmZSBvbmx5IHN0b3AgaWYgZGV2aWNlIGhhcyBubyBhY3RpdmUgb3BlbmVyc1xuXG4mIzM0Oyk7CiAJcHJpbnRmKCYjMzQ7JXMgbGlzdCBbLW4gZGV2X2lkXSAtYSBcbiYjMzQ7LCBleGUpOwogCXByaW50ZigmIzM0O1x0IC1hIGxpc3QgYWxsIGRldmljZXMsIC1uIGxpc3Qgc3BlY2lmaWVkIGRldmljZSwgZGVmYXVsdCAtYSBcblxuJiMzNDspOwomIzQzOwlwcmludGYoJiMzNDslcyBzZXRfcGFyYW1zIFstbiBkZXZfaWRdIFstcSBucl9xdWV1ZXNdIFstZCBkZXB0aF0gWy11XSBbLS16b25lZF1cbiYjMzQ7LCBleGUpOwomIzQzOwlwcmludGYoJiMzNDtcdFstLXBhcmFtX3R5cGVzIGJhc2ljWyx6b25lZF18bm9uZV1cbiYjMzQ7KTsKJiM0MzsJcHJpbnRmKCYjMzQ7XHQgaXNzdWUgQUREX0RFViwgU0VUX1BBUkFNUyBhbmQgREVMX0RFViB3aXRob3V0IFNUQVJUX0RFVlxuXG4mIzM0Oyk7CiAJcHJpbnRmKCYjMzQ7JXMgZmVhdHVyZXNcbiYjMzQ7LCBleGUpOwogCXByaW50ZigmIzM0OyVzIHVwZGF0ZV9zaXplIC1uIGRldl9pZCAtc3wtLXNpemUgc2l6ZV9pbl9ieXRlcyBcbiYjMzQ7LCBleGUpOwogCXByaW50ZigmIzM0OyVzIHF1aWVzY2UgLW4gZGV2X2lkXG4mIzM0OywgZXhlKTsKQEAgLTIxNjAsNiAmIzQzOzIyNjQsMTggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJeyAmIzM0O2h0bGImIzM0OywJCTEsCU5VTEwsICAwICB9LAogCQl7ICYjMzQ7cmRvbmx5X3NobWVtX2J1ZiYjMzQ7LAkwLAlOVUxMLCAgMCAgfSwKIAkJeyAmIzM0O2lvX2Rlc2Nfc2l6ZSYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKJiM0MzsJCXsgJiMzNDt6b25lZCYjMzQ7LAkJMCwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7cGFyYW1fdHlwZXMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bG9naWNhbF9ic19zaGlmdCYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKJiM0MzsJCXsgJiMzNDtwaHlzaWNhbF9ic19zaGlmdCYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKJiM0MzsJCXsgJiMzNDtpb19taW5fc2hpZnQmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7aW9fb3B0X3NoaWZ0JiMzNDssCTEsCU5VTEwsICAwICB9LAomIzQzOwkJeyAmIzM0O21heF9zZWN0b3JzJiMzNDssCTEsCU5VTEwsICAwICB9LAomIzQzOwkJeyAmIzM0O2NodW5rX3NlY3RvcnMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7ZGV2X3NlY3RvcnMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMmIzM0OywgMSwgTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bWF4X29wZW5fem9uZXMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bWF4X2FjdGl2ZV96b25lcyYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKIAkJeyAwLCAwLCAwLCAwIH0KIAl9OwogCWNvbnN0IHN0cnVjdCB1YmxrX3RndF9vcHMgKm9wcyA9IE5VTEw7CkBAIC0yMTczLDYgJiM0MzsyMjg5LDE5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCS50Z3RfdHlwZQk9CSYjMzQ7dW5rbm93biYjMzQ7LAogCQkuY3N1bV90eXBlCT0JTEJNRF9QSV9DU1VNX05PTkUsCiAJCS5pb19kZXNjX3NpemUJPQlzaXplb2Yoc3RydWN0IHVibGtzcnZfaW9fZGVzYyksCiYjNDM7CQkucGFyYW1zID0gewomIzQzOwkJCS50eXBlcwkJCT0gVUJMS19QQVJBTV9UWVBFX0JBU0lDLAomIzQzOwkJCS5sb2dpY2FsX2JzX3NoaWZ0CT0gS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCwKJiM0MzsJCQkucGh5c2ljYWxfYnNfc2hpZnQJPSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCwKJiM0MzsJCQkuaW9fbWluX3NoaWZ0CQk9IEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlQsCiYjNDM7CQkJLmlvX29wdF9zaGlmdAkJPSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCwKJiM0MzsJCQkubWF4X3NlY3RvcnMJCT0KJiM0MzsJCQkJVUJMS19JT19NQVhfQllURVMgJmd0OyZndDsgS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCwKJiM0MzsJCQkuY2h1bmtfc2VjdG9ycwkJPSBLVUJMS19QQVJBTV9aT05FX1NFQ1RPUlMsCiYjNDM7CQkJLmRldl9zZWN0b3JzCQk9IEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTLAomIzQzOwkJCS5tYXhfem9uZV9hcHBlbmRfc2VjdG9ycyA9CiYjNDM7CQkJCUtVQkxLX1BBUkFNX1pPTkVfQVBQRU5EX1NFQ1RPUlMsCiYjNDM7CQl9LAogCX07CiAJaW50IHJldCA9IC1FSU5WQUwsIGk7CiAJaW50IHRndF9hcmdjID0gMTsKQEAgLTIyODgsNiAmIzQzOzI0MTcsMzQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQljdHguZmxhZ3MgfD0gVUJMS19GX0lPX0RFU0NfU0laRTsKIAkJCQljdHguaW9fZGVzY19zaXplID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwogCQkJfQomIzQzOwkJCWlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsICYjMzQ7em9uZWQmIzM0OykpCiYjNDM7CQkJCWN0eC5mbGFncyB8PSBVQkxLX0ZfWk9ORUQ7CiYjNDM7CQkJaWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgJiMzNDtwYXJhbV90eXBlcyYjMzQ7KSkgewomIzQzOwkJCQlyZXQgPSBwYXJzZV9wYXJhbV90eXBlcyhvcHRhcmcsICZhbXA7Y3R4LnBhcmFtcy50eXBlcyk7CiYjNDM7CQkJCWlmIChyZXQpCiYjNDM7CQkJCQlyZXR1cm4gcmV0OwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2xvZ2ljYWxfYnNfc2hpZnQmIzM0OykpCiYjNDM7CQkJCWN0eC5wYXJhbXMubG9naWNhbF9ic19zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O3BoeXNpY2FsX2JzX3NoaWZ0JiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLnBoeXNpY2FsX2JzX3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwomIzQzOwkJCWlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsICYjMzQ7aW9fbWluX3NoaWZ0JiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLmlvX21pbl9zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2lvX29wdF9zaGlmdCYjMzQ7KSkKJiM0MzsJCQkJY3R4LnBhcmFtcy5pb19vcHRfc2hpZnQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7CiYjNDM7CQkJaWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgJiMzNDttYXhfc2VjdG9ycyYjMzQ7KSkKJiM0MzsJCQkJY3R4LnBhcmFtcy5tYXhfc2VjdG9ycyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2NodW5rX3NlY3RvcnMmIzM0OykpCiYjNDM7CQkJCWN0eC5wYXJhbXMuY2h1bmtfc2VjdG9ycyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2Rldl9zZWN0b3JzJiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLmRldl9zZWN0b3JzID0gc3RydG91bGwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O21heF96b25lX2FwcGVuZF9zZWN0b3JzJiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLm1heF96b25lX2FwcGVuZF9zZWN0b3JzID0KJiM0MzsJCQkJCXN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O21heF9vcGVuX3pvbmVzJiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLm1heF9vcGVuX3pvbmVzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwomIzQzOwkJCWlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsICYjMzQ7bWF4X2FjdGl2ZV96b25lcyYjMzQ7KSkKJiM0MzsJCQkJY3R4LnBhcmFtcy5tYXhfYWN0aXZlX3pvbmVzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwogCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTs/JiMzOTs6CiAJCQkvKgpAQCAtMjM3Nyw3ICYjNDM7MjUzNCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCW9wcy0mZ3Q7cGFyc2VfY21kX2xpbmUoJmFtcDtjdHgsIHRndF9hcmdjLCB0Z3RfYXJndik7CiAJfQogCi0JaWYgKCFzdHJjbXAoY21kLCAmIzM0O2FkZCYjMzQ7KSkKJiM0MzsJaWYgKCFzdHJjbXAoY21kLCAmIzM0O3NldF9wYXJhbXMmIzM0OykpCiYjNDM7CQlyZXQgPSBjbWRfZGV2X3NldF9wYXJhbXMoJmFtcDtjdHgpOwomIzQzOwllbHNlIGlmICghc3RyY21wKGNtZCwgJiMzNDthZGQmIzM0OykpCiAJCXJldCA9IGNtZF9kZXZfYWRkKCZhbXA7Y3R4KTsKIAllbHNlIGlmICghc3RyY21wKGNtZCwgJiMzNDtyZWNvdmVyJiMzNDspKSB7CiAJCWlmIChjdHguZGV2X2lkICZsdDsgMCkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oCmluZGV4IGUyN2MxNTRmYzkxMDguLmQ5OGYzZDYxMmQ4ODggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmgKQEAgLTYzLDYgJiM0Mzs2MywyMiBAQCBzdHJ1Y3QgZmF1bHRfaW5qZWN0X2N0eCB7CiAJYm9vbCBkaWVfZHVyaW5nX2ZldGNoOwogfTsKIAomIzQzO3N0cnVjdCBwYXJhbXNfY3R4IHsKJiM0MzsJX191MzIgdHlwZXM7CiYjNDM7CiYjNDM7CV9fdTMyIGxvZ2ljYWxfYnNfc2hpZnQ7CiYjNDM7CV9fdTMyIHBoeXNpY2FsX2JzX3NoaWZ0OwomIzQzOwlfX3UzMiBpb19taW5fc2hpZnQ7CiYjNDM7CV9fdTMyIGlvX29wdF9zaGlmdDsKJiM0MzsJX191MzIgbWF4X3NlY3RvcnM7CiYjNDM7CV9fdTMyIGNodW5rX3NlY3RvcnM7CiYjNDM7CV9fdTY0IGRldl9zZWN0b3JzOwomIzQzOwomIzQzOwlfX3UzMiBtYXhfb3Blbl96b25lczsKJiM0MzsJX191MzIgbWF4X2FjdGl2ZV96b25lczsKJiM0MzsJX191MzIgbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnM7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBkZXZfY3R4IHsKIAljaGFyIHRndF90eXBlWzE2XTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtOTksNiAmIzQzOzExNSw4IEBAIHN0cnVjdCBkZXZfY3R4IHsKIAkvKiBmb3IgJiMzOTt1cGRhdGVfc2l6ZSYjMzk7IGNvbW1hbmQgKi8KIAl1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTsKIAomIzQzOwlzdHJ1Y3QgcGFyYW1zX2N0eCBwYXJhbXM7CiYjNDM7CiAJY2hhciAqaHRsYl9wYXRoOwogCiAJdW5pb24gewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3BhcmFtc18wMS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTI4ZTcyYjEwMzVkMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2gKQEAgLTAsMCAmIzQzOzEsMTE0IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7LiAmIzM0OyQoY2QgJiMzNDskKGRpcm5hbWUgJiMzNDskMCYjMzQ7KSYjMzQ7ICZhbXA7JmFtcDsgcHdkKSYjMzQ7L3Rlc3RfY29tbW9uLnNoCiYjNDM7CiYjNDM7RVJSX0NPREU9MAomIzQzOwomIzQzO3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MoKQomIzQzO3sKJiM0MzsJbG9jYWwgbmFtZT0kMQomIzQzOwomIzQzOwlzaGlmdAomIzQzOwomIzQzOwllY2hvICYjMzQ7JG5hbWUmIzM0OwomIzQzOwlpZiAhICYjMzQ7JFVCTEtfUFJPRyYjMzQ7IHNldF9wYXJhbXMgLXEgMSAtZCAyICYjMzQ7JEAmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0OyRuYW1lOiBTRVRfUEFSQU1TIGNoZWNrIGZhaWxlZCYjMzQ7CiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztydW5fc2V0X3BhcmFtc19mYWlsdXJlKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5hbWU9JDEKJiM0MzsKJiM0MzsJc2hpZnQKJiM0MzsKJiM0MzsJZWNobyAmIzM0OyRuYW1lJiMzNDsKJiM0MzsJaWYgJiMzNDskVUJMS19QUk9HJiMzNDsgc2V0X3BhcmFtcyAtcSAxIC1kIDIgJiMzNDskQCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7JG5hbWU6IFNFVF9QQVJBTVMgc3VjY2VlZGVkIHVuZXhwZWN0ZWRseSYjMzQ7CiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztydW5fem9uZWRfc2V0X3BhcmFtc19zdWNjZXNzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5hbWU9JDEKJiM0MzsKJiM0MzsJc2hpZnQKJiM0MzsKJiM0MzsJZWNobyAmIzM0OyRuYW1lJiMzNDsKJiM0MzsJaWYgISAmIzM0OyRVQkxLX1BST0cmIzM0OyBzZXRfcGFyYW1zIC1xIDEgLWQgMiAtdSAtLXpvbmVkICYjMzQ7JEAmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0OyRuYW1lOiBTRVRfUEFSQU1TIGNoZWNrIGZhaWxlZCYjMzQ7CiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5hbWU9JDEKJiM0MzsKJiM0MzsJc2hpZnQKJiM0MzsKJiM0MzsJZWNobyAmIzM0OyRuYW1lJiMzNDsKJiM0MzsJaWYgJiMzNDskVUJMS19QUk9HJiMzNDsgc2V0X3BhcmFtcyAtcSAxIC1kIDIgLXUgLS16b25lZCAmIzM0OyRAJiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDskbmFtZTogU0VUX1BBUkFNUyBzdWNjZWVkZWQgdW5leHBlY3RlZGx5JiMzNDsKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO19wcmVwX3Rlc3QgJiMzNDtwYXJhbXMmIzM0OyAmIzM0O1NFVF9QQVJBTVMgdmFsaWRhdGlvbiYjMzQ7CiYjNDM7CiYjNDM7aWYgWyAhIC1jIC9kZXYvdWJsay1jb250cm9sIF07IHRoZW4KJiM0MzsJX2NsZWFudXBfdGVzdAomIzQzOwlfc2hvd19yZXN1bHQgJFRJRCAkVUJMS19TS0lQX0NPREUKJiM0MztmaQomIzQzOwomIzQzO3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MgJiMzNDt2YWxpZCBiYXNpYyBwYXJhbXMmIzM0OyB8fAomIzQzOwlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7cnVuX3NldF9wYXJhbXNfZmFpbHVyZSAmIzM0O21pc3NpbmcgYmFzaWMgcGFyYW1zJiMzNDsgXAomIzQzOwktLXBhcmFtX3R5cGVzIG5vbmUgfHwKJiM0MzsJRVJSX0NPREU9MQomIzQzOwomIzQzO3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDtsb2dpY2FsIGJsb2NrIGxhcmdlciB0aGFuIHBoeXNpY2FsIGJsb2NrJiMzNDsgXAomIzQzOwktLWxvZ2ljYWxfYnNfc2hpZnQgMTIgLS1waHlzaWNhbF9ic19zaGlmdCA5IHx8CiYjNDM7CUVSUl9DT0RFPTEKJiM0MzsKJiM0MztydW5fc2V0X3BhcmFtc19mYWlsdXJlICYjMzQ7dG9vIGxhcmdlIG1heCBzZWN0b3JzJiMzNDsgXAomIzQzOwktLW1heF9zZWN0b3JzIDIwNDkgfHwKJiM0MzsJRVJSX0NPREU9MQomIzQzOwomIzQzO2lmIF9oYXZlX2ZlYXR1cmUgJiMzNDtaT05FRCYjMzQ7ICZhbXA7JmFtcDsgX2hhdmVfZmVhdHVyZSAmIzM0O1VTRVJfQ09QWSYjMzQ7OyB0aGVuCiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX3N1Y2Nlc3MgJiMzNDt2YWxpZCB6b25lZCBwYXJhbXMmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDttaXNzaW5nIHpvbmVkIHBhcmFtcyYjMzQ7IHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDtub24tcG93ZXItb2YtMiB6b25lIHNpemUmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFwKJiM0MzsJCS0tY2h1bmtfc2VjdG9ycyA5NiAtLWRldl9zZWN0b3JzICQoKDk2ICogMTYpKSB8fAomIzQzOwkJRVJSX0NPREU9MQomIzQzOwomIzQzOwlydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlICYjMzQ7emVybyBtYXggem9uZSBhcHBlbmQmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFwKJiM0MzsJCS0tbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgMCB8fAomIzQzOwkJRVJSX0NPREU9MQomIzQzOwomIzQzOwlydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlICYjMzQ7dG9vIG1hbnkgb3BlbiB6b25lcyYjMzQ7IFwKJiM0MzsJCS0tcGFyYW1fdHlwZXMgYmFzaWMsem9uZWQgXAomIzQzOwkJLS1kZXZfc2VjdG9ycyAkKCgxMjggKiA0KSkgLS1tYXhfb3Blbl96b25lcyA1IHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDt0b28gbWFueSBhY3RpdmUgem9uZXMmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFwKJiM0MzsJCS0tZGV2X3NlY3RvcnMgJCgoMTI4ICogNCkpIC0tbWF4X2FjdGl2ZV96b25lcyA1IHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7ZWxzZQomIzQzOwllY2hvICYjMzQ7em9uZWQgdWJsayBmZWF0dXJlIHVuYXZhaWxhYmxlLCBza2lwIHpvbmVkIFNFVF9QQVJBTVMgY2FzZXMmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7X2NsZWFudXBfdGVzdAomIzQzO19zaG93X3Jlc3VsdCAkVElEICRFUlJfQ09ERQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTQyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIHVibGsgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCB0d2Vha3MgdGhlIGB1YmxrX2Rydi5jYCBmaWxlIGFuZCBzb21lIGFzc29jaWF0ZWQgc2VsZi10ZXN0cy4gVGhlIGNvcmUgY2hhbmdlIGlzIGEgc2luZ2xlLWxpbmUgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYHVibGtfdmFsaWRhdGVfcGFyYW1zYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdGlnaHRlbmluZyB1cCBhIHZhbGlkYXRpb24gY2hlY2suICBTcGVjaWZpY2FsbHksIGluc3RlYWQgb2YganVzdCBtYWtpbmcgc3VyZSBgcC0mZ3Q7Y2h1bmtfc2VjdG9yc2AgaXMgKm5vdCogemVybyB3aGVuIGRlYWxpbmcgd2l0aCB6b25lZCBkZXZpY2VzLCB3ZSYjMzk7cmUgbm93IGVuZm9yY2luZyB0aGF0IGl0IGJlIGEgcG93ZXIgb2YgMi4gIFNtYXJ0OyBpdCBoZWxwcyB3aXRoIGFsaWdubWVudCBpc3N1ZXMsIHByb2JhYmx5LgoKVGhlIHF1ZXN0aW9uIG5vdyBpcywgaXMgdGhpcyBzb21ldGhpbmcgd2Ugc2hvdWxkIGNvbnNpZGVyIGZ1enppbmc/IExldCYjMzk7cyBicmVhayBpdCBkb3duLiBUaGUgY2hhbmdlIGlzIGluIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHVibGsgZHJpdmVyLiAgVWJsayBpcyBhIHVzZXItc3BhY2UgYmxvY2sgZGV2aWNlIGRyaXZlciwgd2hpY2ggbWFrZXMgaXQgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB3aGljaCBpcyBnb29kIGZvciB1cy4gVGhlIGNoYW5nZSBpdHNlbGYgaXMgYSBmYWlybHkgbWlub3IgZnVuY3Rpb25hbCBmaXgsIGEgYml0IGxpa2UgZW5zdXJpbmcgdGhhdCB3ZSBhcmUgZ3VhcmRpbmcgYWdhaW5zdCBhIHBhcnRpY3VsYXIgYnVnIHdoZXJlIGEgbm9uLXBvd2VyLW9mLTIgYGNodW5rX3NlY3RvcnNgIHZhbHVlIGNvdWxkIGJlIHBhc3NlZC4gIFRoYXQgY291bGQgZGVmaW5pdGVseSBsZWFkIHRvIHByb2JsZW1zIGxhdGVyIG9uLgoKU28sIHllYWgsIGl0IHNlZW1zIGxpa2UgdGhpcyBpcyB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gV2Ugd2FudCB0byBiZSBzdXJlIHRoYXQgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgb3IgZXhwb3NlIGFueSBleGlzdGluZyBvbmVzLiBJdCYjMzk7cyBhIGtlcm5lbCBmdW5jdGlvbmFsIGNoYW5nZSwgc28gaXQgaXMgcHJvYmFibHkgd29ydGggb3VyIHRpbWUuIExldCYjMzk7cyBkZWx2ZSBkZWVwZXIgaW50byBgdWJsa192YWxpZGF0ZV9wYXJhbXNgIGl0c2VsZiBhbmQgc2VlIHdoYXQga2luZCBvZiBpbnB1dHMgaXQmIzM5O3MgZXhwb3NlZCB0by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX3ZhbGlkYXRlX3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9OTM0PXN0YXRpYyBlbnVtIGJsa19pbnRlZ3JpdHlfY2hlY2tzdW0gdWJsa19pbnRlZ3JpdHlfY3N1bV90eXBlKHU4IGNzdW1fdHlwZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtOTUwLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjk1MTpzdGF0aWMgaW50IHVibGtfdmFsaWRhdGVfcGFyYW1zKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtOTUyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTA0Mj1zdGF0aWMgaW50IHVibGtfY3RybF9zZXRfcGFyYW1zKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUwNzQtXHRcdHViLVx1MDAzZXBhcmFtcy50eXBlcyBcdTAwMjY9IFVCTEtfUEFSQU1fVFlQRV9BTEw7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTA3NTpcdFx0cmV0ID0gdWJsa192YWxpZGF0ZV9wYXJhbXModWIpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUwNzYtXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHVibGtfY3RybF9zZXRfcGFyYW1zYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBjb2RlIHNob3dzIHRoYXQgYHVibGtfY3RybF9zZXRfcGFyYW1zYCBjYWxscyBgdWJsa192YWxpZGF0ZV9wYXJhbXNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZW5zdXJpbmcgcGFyYW1ldGVyIGludGVncml0eS4gTm93LCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGB1YmxrX2N0cmxfc2V0X3BhcmFtc2AgaXRzZWxmIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWJsa19jdHJsX3NldF9wYXJhbXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTUwMTI9c3RhdGljIGludCB1YmxrX2N0cmxfZ2V0X3BhcmFtcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MDQxLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjUwNDI6c3RhdGljIGludCB1YmxrX2N0cmxfc2V0X3BhcmFtcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUwNDMtXHRcdGNvbnN0IHN0cnVjdCB1Ymxrc3J2X2N0cmxfY21kICpoZWFkZXIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU3NjM9c3RhdGljIGludCB1YmxrX2N0cmxfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTgzNi1cdGNhc2UgVUJMS19DTURfU0VUX1BBUkFNUzpcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1ODM3Olx0XHRyZXQgPSB1YmxrX2N0cmxfc2V0X3BhcmFtcyh1YiwgXHUwMDI2aGVhZGVyKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODM4LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzQwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBVYmxrIENvbnRyb2wgUGF0aCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgVWJsayBjb250cm9sIHBhdGgsIGFuZCBteSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGVpdGhlciBgdWJsa19jdHJsX3VyaW5nX2NtZGAgb3IgYHVibGtfY3RybF9zZXRfcGFyYW1zYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50cywgc28gbGV0JiMzOTtzIHN0YXJ0IHdpdGggYHVibGtfY3RybF91cmluZ19jbWRgLiBJJiMzOTtsbCB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGNvbW1hbmRzIGFyZSBhY3R1YWxseSBwcm9jZXNzZWQgd2hlbiB0aGV5IGNvbWUgaW4gdmlhIHRoZSBVcmluZyBpbnRlcmZhY2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgY29yZSBpbnRlcmFjdGlvbiBtb2RlbC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZmxvdyBmcm9tIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWJsa19jdHJsX3VyaW5nX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTYxNz1zdGF0aWMgYm9vbCB1YmxrX3RyeV9idWZfbWF0Y2goc3RydWN0IHVibGtfZGV2aWNlICp1Yixcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTY3MC1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NjcxOnN0YXRpYyBpbnQgdWJsa19jdHJsX3VyaW5nX2NtZF9wZXJtaXNzaW9uKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTY3Mi1cdFx0dTMyIGNtZF9vcCwgc3RydWN0IHVibGtzcnZfY3RybF9jbWQgKmhlYWRlcilcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc0OS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NzUwOnN0YXRpYyBib29sIHVibGtfY3RybF91cmluZ19jbWRfbWF5X3NsZWVwKHUzMiBjbWRfb3ApXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc1MS17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NjItXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTc2MzpzdGF0aWMgaW50IHVibGtfY3RybF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NjQtXHRcdHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc3My1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1Nzc0Olx0aWYgKHVibGtfY3RybF91cmluZ19jbWRfbWF5X3NsZWVwKGNtZF9vcCkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc3NS1cdCAgICBpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSylcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTgwMy1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1ODA0Olx0XHRyZXQgPSB1YmxrX2N0cmxfdXJpbmdfY21kX3Blcm1pc3Npb24odWIsIGNtZF9vcCwgXHUwMDI2aGVhZGVyKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODA1LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01ODc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY3RsX2ZvcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTg3NS1cdC5vcGVuXHRcdD0gbm9uc2Vla2FibGVfb3BlbixcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1ODc2Olx0LnVyaW5nX2NtZCAgICAgID0gdWJsa19jdHJsX3VyaW5nX2NtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODc3LVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgdWJsa19jdHJsX3VyaW5nX2NtZGAgRW50cnkgUG9pbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB1YmxrX2N0cmxfdXJpbmdfY21kYCDigJMgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBob29rLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZ29pbmcgdG8gYmUgcmVxdWlyZWQgYXQgdGhpcyBwb2ludD8gV2hhdCBsZXZlcnMgZG8gSSBuZWVkIHRvIHB1bGwgdG8gZ2V0IHRoZSBzeXN0ZW0gYmVoYXZpbmcgdGhlIHdheSBJIG5lZWQgaXQgdG8/IFdoYXQgcGFyYW1ldGVycyBhbSBJIGdvaW5nIHRvIGV4cG9zZSB0aHJvdWdoIHRoaXMgZW50cnk/IEFyZSB0aGVyZSBzcGVjaWZpYyBrbm9icyByZWxhdGVkIHRvIGhvdyBJIGhhbmRsZSB0aGUgY29tbWFuZHMgaGVyZSwgb3IgaXMgdGhpcyBtb3JlIGFib3V0IHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50IGJlZm9yZSB0aGUgY29tbWFuZHMgYmVnaW4gcHJvY2Vzc2luZz8gSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGltcG9ydGFudCBhc3BlY3RzIHRoYXQgSSB3YW50IHRvIGNvbmZpZ3VyZSBoZXJlLiBMZXQmIzM5O3Mgc3RhcnQgbWFwcGluZyBvdXQgdGhlIHZhcmlvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1VCTEsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI3LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI5LVx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYEJMS19ERVZfVUJMS2AgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYEJMS19ERVZfVUJMS2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSB6b29tIGluIG9uIHRoZSBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgaXMgdGhpcyB0aGluZyB0aWVkIHRvPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmlwcGxlIGVmZmVjdCBvZiBhbnkgY2hhbmdlcyBoZXJlLiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb3JlIGJsb2NrIGxheWVyIGludGVyZmFjZXM/IERldmljZSBtYXBwZXIgaW50ZWdyYXRpb24/IEFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggZXhpc3Rpbmcgc3RvcmFnZSBkcml2ZXJzPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIHByb2JsZW1zIGxpdmUuIEdvdHRhIG1ha2Ugc3VyZSBJIGZ1bGx5IGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMgdG8gYXNzZXNzIHRoZSBzY29wZSBvZiB0aGlzIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjg6XHRjb25maWcgQkxLX0RFVl9VQkxLXG4gMzI5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4gMzMwOlx0XHRzZWxlY3QgSU9fVVJJTkdcbiAzMzE6XHRcdGhlbHBcbiAzMzI6XHRcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xuIDMzMzpcdFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXG4gMzM0Olx0XHQgIGRlZmluaXRpb24gaXNuJiMzOTt0IGZpbmFsaXplZCB5ZXQsIGFuZCBtaWdodCBjaGFuZ2UgYWNjb3JkaW5nIHRvIGZ1dHVyZVxuIDMzNTpcdFx0ICByZXF1aXJlbWVudCwgc28gbWFyayBpcyBhcyBleHBlcmltZW50YWwgbm93LlxuIDMzNjpcdFxuIDMzNzpcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xuIDMzODpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZVwmIzM0O1xuIDMzOTpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX1VCTEtcbiAzNDA6XHRcdGRlZmF1bHQgeVxuIDM0MTpcdFx0aGVscFxuIDM0MjpcdFx0ICB1YmxrIGRyaXZlciBzdGFydGVkIHRvIHRha2UgcGxhaW4gY29tbWFuZCBlbmNvZGluZywgd2hpY2ggdHVybnMgb3V0XG4gMzQzOlx0XHQgIG9uZSBiYWQgd2F5LiBUaGUgdHJhZGl0aW9uYWwgaW9jdGwgY29tbWFuZCBvcGNvZGUgZW5jb2RlcyBtb3JlXG4gMzQ0Olx0XHQgIGluZm8gYW5kIGJhc2ljYWxseSBkZWZpbmVzIGVhY2ggY29kZSB1bmlxdWVseSwgc28gb3Bjb2RlIGNvbmZsaWN0XG4gMzQ1Olx0XHQgIGlzIGF2b2lkZWQsIGFuZCBkcml2ZXIgY2FuIGhhbmRsZSB3cm9uZyBjb21tYW5kIGVhc2lseSwgbWVhbnRpbWUgaXRcbiAzNDY6XHRcdCAgbWF5IGhlbHAgc2VjdXJpdHkgc3Vic3lzdGVtIHRvIGF1ZGl0IGlvX3VyaW5nIGNvbW1hbmQuXG4gMzQ3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIHVibGsgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZSBpcyBgQkxLX0RFVl9VQkxLYC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGNvcmUuIEJ1dCB0aGUgY2hhbmdlIGFsc28gbW9kaWZpZXMgYHVibGtfZGV2X2lzX3pvbmVkKHViKWAuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2UgbmVlZCB0byBjb25zaWRlcjogaXMgYEJMS19ERVZfWk9ORURgIGFsc28gaW52b2x2ZWQgb3IgcG90ZW50aWFsbHkgbmVlZGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcyBjaGFuZ2U/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBjb25maWd1cmF0aW9ucyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBvcGVyYXRpbmcgYXMgaW50ZW5kZWQgYW5kIHRoYXQgbm8gYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgdGhhdCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgYSBiaXQgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYW4gaW1wYWN0IG9uIHpvbmVkIGJsb2NrIGRldmljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfZGV2X2lzX3pvbmVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00NTU9c3RhdGljIGlubGluZSBib29sIHVibGtfZGV2X3N1cHBvcnRfdXNlcl9jb3B5KGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ1OS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0NjA6c3RhdGljIGlubGluZSBib29sIHVibGtfZGV2X2lzX3pvbmVkKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDYxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTcyPXN0YXRpYyBpbnQgdWJsa19kZXZfcGFyYW1fem9uZWRfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHVibGtfZGV2aWNlICp1Yilcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc2LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU3NzpcdGlmICghdWJsa19kZXZfaXNfem9uZWQodWIpKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3OC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTk1MT1zdGF0aWMgaW50IHVibGtfdmFsaWRhdGVfcGFyYW1zKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTk4Mi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo5ODM6XHRcdGlmICh1YmxrX2Rldl9pc196b25lZCh1YikgXHUwMDI2XHUwMDI2ICFpc19wb3dlcl9vZl8yKHAtXHUwMDNlY2h1bmtfc2VjdG9ycykpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtOTg0LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xMDA0LVx0XHRyZXR1cm4gdWJsa19kZXZfcGFyYW1fem9uZWRfdmFsaWRhdGUodWIpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjEwMDU6XHRlbHNlIGlmICh1YmxrX2Rldl9pc196b25lZCh1YikpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTAwNi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM4NTI9c3RhdGljIGludCB1YmxrX2NoZWNrX2JhdGNoX2NtZChjb25zdCBzdHJ1Y3QgdWJsa19iYXRjaF9pb19kYXRhICpkYXRhKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zODYyLVx0aWYgKCh1Yy1cdTAwM2VmbGFncyBcdTAwMjYgVUJMS19CQVRDSF9GX0hBU19aT05FX0xCQSkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mzg2MzpcdFx0XHQhdWJsa19kZXZfaXNfem9uZWQoZGF0YS1cdTAwM2V1YikpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzg2NC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTQ0NDc9c3RhdGljIGludCB1YmxrX2N0cmxfc3RhcnRfZGV2KHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ1NzAtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDU3MTpcdGlmICh1YmxrX2Rldl9pc196b25lZCh1YikpIHtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00NTcyLVx0XHRyZXQgPSB1YmxrX3JldmFsaWRhdGVfZGlza196b25lcyh1Yik7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTQ2NTc9c3RhdGljIGludCB1YmxrX2N0cmxfYWRkX2Rldihjb25zdCBzdHJ1Y3QgdWJsa3Nydl9jdHJsX2NtZCAqaGVhZGVyKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00ODI1LVx0ICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDgyNjpcdGlmICh1YmxrX2Rldl9pc196b25lZCh1YikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDgyNy1cdCAgICAoIUlTX0VOQUJMRUQoQ09ORklHX0JMS19ERVZfWk9ORUQpIHx8ICEodWItXHUwMDNlZGV2X2luZm8uZmxhZ3MgXHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDQ1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgdWJsayBab25lZCBCbG9jayBEZXZpY2UgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgc28gSSBzZWUgYENPTkZJR19CTEtfREVWX1pPTkVEYCBpcyBiZWluZyBjaGVja2VkIHdpdGhpbiB0aGUgYHVibGtfY3RybF9hZGRfZGV2YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kLCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSB0aGUgY29uZGl0aW9uYWwgbG9naWMgZm9yIGhhbmRsaW5nIHpvbmVkIGJsb2NrIGRldmljZXMuIE15IG5leHQgc3RlcCBoZXJlIGlzIGRlZmluaXRlbHkgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hlY2suIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2hlbiBhIHpvbmVkIGJsb2NrIGRldmljZSBpcyBkZXRlY3RlZC4KClRoZSBpbXBvcnRhbnQgZnVuY3Rpb24gdG8gZm9jdXMgb24gbm93IGlzIGNsZWFybHkgYHVibGtfZGV2X2lzX3pvbmVkYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoYXQgaXMgaW1wbGVtZW50ZWQgYW5kIHdoYXQgdGhlIGRlY2lzaW9uIHRyZWUgaW4gdGhhdCBmdW5jdGlvbiBsb29rcyBsaWtlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcyB0byBhY3R1YWxseSBkZXRlcm1pbmUgaWYgdGhlIGRldmljZSBpcyB6b25lZCBvciBub3QgYW5kIHdoYXQgZmxhZ3MgYXJlIHNldCBiYXNlZCBvbiB0aGF0IGRldGVybWluYXRpb24uIEkmIzM5O20gZ3Vlc3NpbmcgaXQgbG9va3MgYXQgYSBkZXZpY2UmIzM5O3MgY2hhcmFjdGVyaXN0aWNzLCBtYXliZSBpdHMgZ2VvbWV0cnkgb3Igc29tZSBzcGVjaWZpYyBmbGFncyBpbiB0aGUgZGV2aWNlJiMzOTtzIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gVGhlIGNvbmZpZ3VyYXRpb24gY2hlY2sgaGVyZSBzdWdnZXN0cyBgdWJsa19jdHJsX2FkZF9kZXZgIGlzIGRvaW5nIHNvbWUgc2V0dXAgb3IgY29uZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gdGhhdCByZWxpZXMgb24gdGhlIHpvbmVkL25vbi16b25lZCBkaXN0aW5jdGlvbi4gTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgYHVibGtfZGV2X2lzX3pvbmVkYCBhbmQgc2VlIGhvdyBpdCYjMzk7cyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0c3RhdGljIGlubGluZSBib29sIHVibGtfZGV2X2lzX3pvbmVkKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG4gNDYxOlx0e1xuIDQ2MjpcdFx0cmV0dXJuIHViLVx1MDAzZWRldl9pbmZvLmZsYWdzIFx1MDAyNiBVQkxLX0ZfWk9ORUQ7XG4gNDYzOlx0fVxuIDQ2NDpcdFxuIDQ2NTpcdHN0YXRpYyBpbmxpbmUgYm9vbCB1YmxrX3F1ZXVlX2lzX3pvbmVkKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXG4gNDY2Olx0e1xuIDQ2NzpcdFx0cmV0dXJuIHVicS1cdTAwM2VmbGFncyBcdTAwMjYgVUJMS19GX1pPTkVEO1xuIDQ2ODpcdH1cbiA0Njk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipab25lZCBCbG9jayBEZXZpY2UgVGVzdGluZyBTdHJhdGVneSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBpc3N1ZSBoZXJlLCB0aGUgdGhpbmcgSSYjMzk7bSBpbW1lZGlhdGVseSBmb2N1c2VkIG9uLCBpcyBlbnN1cmluZyBhIHJvYnVzdCB0ZXN0IHN1aXRlIGZvciB0aGlzIHpvbmVkIGJsb2NrIGRldmljZSBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyBiZWNvbWluZyBjbGVhciB0aGF0IGEgdHJ1bHkgY29tcHJlaGVuc2l2ZSBldmFsdWF0aW9uIGlzIGdvaW5nIHRvIGhpbmdlIG9uIHByb3BlciBoYW5kbGluZyBvZiBgQkxLX0RFVl9aT05FRGAuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBhbnkgdGVzdGluZyBJJiMzOTttIGRvaW5nIHRha2VzIHRoaXMgaW50byBhY2NvdW50LiBUaGlzIG1lYW5zIGNvbmZpcm1pbmcgYEJMS19ERVZfWk9ORURgIGlzIGFwcHJvcHJpYXRlbHkgZXhwb3NlZCB3aXRoaW4gdGhlIHN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IHZlcmlmeWluZyBpdHMgcHJlc2VuY2UgYXMgYSBjb25maWd1cmFibGUgb3B0aW9uLiBUaGlzIGlzIHRoZSBseW5jaHBpbiBJIG5lZWQgdG8gc2VjdXJlIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9aT05FRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz03Nz1jb25maWcgQkxLX0RFVl9XUklURV9NT1VOVEVEXG4tLVxuYmxvY2svS2NvbmZpZy05Ni1cbmJsb2NrL0tjb25maWc6OTc6Y29uZmlnIEJMS19ERVZfWk9ORURcbmJsb2NrL0tjb25maWctOTgtXHRib29sIFwmIzM0O1pvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODcyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBVYmxrIERyaXZlciBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBCTEtfREVWX1pPTkVEYCBjb25maWcsIHJpZ2h0PyBBbmQgYWxvbmdzaWRlIHRoYXQgd2UmIzM5O3ZlIGdvdCBgQkxLX0RFVl9VQkxLYC4gUmlnaHQsIGdvdCBpdC4gTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGFyZSBnb2luZyB0byBiZSBgdWJsa19jdHJsX3NldF9wYXJhbXNgIGFuZCBgdWJsa19jdHJsX3VyaW5nX2NtZGAuCgpGaXJzdCwgbGV0IG1lIGNoZWNrIGlmIGB1YmxrX2N0cmxfc2V0X3BhcmFtc2AgaXMgc3RhdGljLiBZZXMsIGl0IGlzLiBIbW0sIHdhaXQgYSBzZWNvbmQsIHRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byBwcmVmZXIgKm5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkKiBlbnRyeSBwb2ludHMuIEludGVybmFsIHN0YXRpYyBoZWxwZXJzLCB0aGUgcHJvbXB0IHN0YXRlcywgZ2V0IGlubGluZWQgYW5kIGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuCgpSaWdodCwgc28gYHVibGtfY3RybF9zZXRfcGFyYW1zYCBiZWluZyBzdGF0aWMgaXMgYSBwb3RlbnRpYWwgaXNzdWUuIExldCYjMzk7cyBzZWUuLi4gZXZlbiB0aG91Z2ggaXQgKmlzKiBzdGF0aWMsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHdpdGhpbiBgdWJsa19jdHJsX3VyaW5nX2NtZGAsIHdoaWNoIGlzIGEgc3dpdGNoIGNhc2UsIHNvIGl0ICptaWdodCogbm90IGJlIGlubGluZWQuIEJ1dCwgYHVibGtfY3RybF91cmluZ19jbWRgIGl0c2VsZiBpcyBkZWZpbml0ZWx5IGFuIGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIGdvb2QuCgpTbywgbGV0JiMzOTtzIGxvb2sgYXQgYHVibGtfY3RybF91cmluZ19jbWRgLiBPa2F5LCBpdCYjMzk7cyBhbHNvIHN0YXRpYywgYnV0IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGB1YmxrX2N0bF9mb3BzLnVyaW5nX2NtZGAuIFRoYXQgYXNzaWdubWVudCBpbXBsaWVzIGl0IGhhcyBhIGRlZmluZWQgc3ltYm9sLCByZWdhcmRsZXNzIG9mIHRoZSBgc3RhdGljYCBkZWNsYXJhdGlvbi4gTm93LCBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBhbnkgKm5vbiotc3RhdGljIGZ1bmN0aW9uIHRoYXQgSSBjYW4gcG9pbnQgdG8uCgpMZXQmIzM5O3MgZGlnIGludG8gYHVibGtfY3RybF91cmluZ19jbWRgIGFnYWluLCBub3cgaW4gYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgaXMgYW4gYXBwcm9wcmlhdGUgZW50cnkgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfY3RybF91cmluZ19jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU2MTc9c3RhdGljIGJvb2wgdWJsa190cnlfYnVmX21hdGNoKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU2NzAtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTY3MTpzdGF0aWMgaW50IHVibGtfY3RybF91cmluZ19jbWRfcGVybWlzc2lvbihzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU2NzItXHRcdHUzMiBjbWRfb3AsIHN0cnVjdCB1Ymxrc3J2X2N0cmxfY21kICpoZWFkZXIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NDktXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTc1MDpzdGF0aWMgYm9vbCB1YmxrX2N0cmxfdXJpbmdfY21kX21heV9zbGVlcCh1MzIgY21kX29wKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NTEte1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzYyLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU3NjM6c3RhdGljIGludCB1YmxrX2N0cmxfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzY0LVx0XHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NzMtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTc3NDpcdGlmICh1YmxrX2N0cmxfdXJpbmdfY21kX21heV9zbGVlcChjbWRfb3ApIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NzUtXHQgICAgaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4MDMtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTgwNDpcdFx0cmV0ID0gdWJsa19jdHJsX3VyaW5nX2NtZF9wZXJtaXNzaW9uKHViLCBjbWRfb3AsIFx1MDAyNmhlYWRlcik7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTgwNS1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTg3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2N0bF9mb3BzID0ge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4NzUtXHQub3Blblx0XHQ9IG5vbnNlZWthYmxlX29wZW4sXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTg3NjpcdC51cmluZ19jbWQgICAgICA9IHVibGtfY3RybF91cmluZ19jbWQsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTg3Ny1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1NAoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgdWJsayBEcml2ZXIgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIGB1YmxrX2N0cmxfdXJpbmdfY21kYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyBhIGZ1bmN0aW9uIHRoYXQgc2VlbXMgdG8gYmUgdGhlIG1haW4gZW50cnkgcG9pbnQgZnJvbSB0aGUgdXNlcnNwYWNlIHJpbmcgYnVmZmVyLiBUaGF0JiMzOTtzIGEgYml0IHVudXN1YWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgZHJpdmVyIGFyZSBhbHNvIGRlZmluZWQgYXMgc3RhdGljLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYWNjZXNzIGFuZCBwb3RlbnRpYWwgdmlzaWJpbGl0eSBvZiBkaWZmZXJlbnQgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgdGhyb3VnaCBgdWJsa19kcnYuY2Agbm93IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgd291bGQgaW5kaWNhdGUgaG93IHVzZXJzcGFjZSBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgYmxvY2sgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiB1YmxrXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTEzLS8qIHVibGsgYmF0Y2ggZmV0Y2ggdXJpbmdfY21kICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTE0OnN0cnVjdCB1YmxrX2JhdGNoX2ZldGNoX2NtZCB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTE1LVx0c3RydWN0IGxpc3RfaGVhZCBub2RlO1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xMTktXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTIwOnN0cnVjdCB1YmxrX3VyaW5nX2NtZF9wZHUge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTEyMS1cdC8qXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE0NS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNDY6c3RydWN0IHVibGtfYmF0Y2hfaW9fZGF0YSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTQ3LVx0c3RydWN0IHVibGtfZGV2aWNlICp1Yjtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjAzLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIwNDp1bmlvbiB1YmxrX2lvX2J1ZiB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjA1LVx0X191NjRcdGFkZHI7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIwOC1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMDk6c3RydWN0IHVibGtfaW8ge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxMC1cdHVuaW9uIHVibGtfaW9fYnVmIGJ1Zjtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjQxLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI0MjpzdHJ1Y3QgdWJsa19xdWV1ZSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjQzLVx0dTE2IHFfaWQ7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwNC0vKiBNYXBsZSB0cmVlIHZhbHVlOiBtYXBzIGEgUEZOIHJhbmdlIHRvIGJ1ZmZlciBsb2NhdGlvbiAqL1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMwNTpzdHJ1Y3QgdWJsa19idWZfcmFuZ2Uge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwNi1cdHVuc2lnbmVkIHNob3J0IGJ1Zl9pbmRleDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzEwLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMxMTpzdHJ1Y3QgdWJsa19kZXZpY2Uge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMxMi1cdHN0cnVjdCBnZW5kaXNrXHRcdCp1Yl9kaXNrO1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTEtLyogaGVhZGVyIG9mIHVibGtfcGFyYW1zICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyOnN0cnVjdCB1YmxrX3BhcmFtc19oZWFkZXIge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1My1cdF9fdTMyXHRsZW47XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTUwNj1zdGF0aWMgdm9pZCB1YmxrX2luaXRfaW9kKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUzMi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1MzM6c3RydWN0IHVibGtfem9uZWRfcmVwb3J0X2Rlc2Mge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUzNC1cdF9fdTY0IHNlY3Rvcjtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzU3MT11YmxrX2JhdGNoX2F1dG9fYnVmX3JlZyhjb25zdCBzdHJ1Y3QgdWJsa19iYXRjaF9pbyAqdWMsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1ODctI2RlZmluZSBVQkxLX0NNRF9CQVRDSF9UTVBfQlVGX1NaICAoNDggKiAxMClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTg4OnN0cnVjdCB1YmxrX2JhdGNoX2lvX2l0ZXIge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1ODktXHR2b2lkIF9fdXNlciAqdWFkZHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjcwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSByb2xlIG9mIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYHVibGtfZHJ2LmNgJiMzOTtzIFN0cnVjdHVyZSoqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgYHVibGtfZHJ2LmNgIGNvZGUsIG15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgbW9zdCBvZiB0aGUgZnVuY3Rpb25zIGFyZSBsaWtlbHkgZGVjbGFyZWQgc3RhdGljLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGRyaXZlciBtb2R1bGVzLCBlc3BlY2lhbGx5IHRoZSBsb3dlci1sZXZlbCBjb21wb25lbnRzLiBUaGlzIGRlc2lnbiBrZWVwcyB0aG9zZSBmdW5jdGlvbnMgaW50ZXJuYWwgdG8gdGhlIGZpbGUsIHByb21vdGluZyBtb2R1bGFyaXR5IGFuZCBwcmV2ZW50aW5nIGFjY2lkZW50YWwgbmFtaW5nIGNvbGxpc2lvbnMuIFRoZSBrZXkgaW50ZXJlc3QgcmlnaHQgbm93IGxpZXMgaW4gdGhlIGVudHJ5IHBvaW50cy4gU28sIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTGV0IG1lIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCBleGl0IHJvdXRpbmVzLiBUaGF0IHdvdWxkIGludm9sdmUgc2VhcmNoaW5nIGZvciBgbW9kdWxlX2luaXRgIChvciwgaW4gb2xkZXIga2VybmVscywgbWF5YmUganVzdCBhbiBgaW5pdGAgZnVuY3Rpb24pIGFuZCBgbW9kdWxlX2V4aXRgIG1hY3JvcyBvciB0aGVpciBlcXVpdmFsZW50LiBUaGF0IHdpbGwgYmUgbXkgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGFuIGlkZWEgb2YgaG93IHRoaXMgbW9kdWxlIGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSBpbml0aWFsIGVudHJ5IGFuZCBleGl0IGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHVibGtfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20ganVtcGluZyBpbnRvIHRoaXMgY29kZSBhbmQsIGFzIGFsd2F5cywgdGhlIGZpcnN0IHBsYWNlIEkgd2FudCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBpcyBob3cgdGhlIG9iamVjdHMgYXJlIGNvbnN0cnVjdGVkLiBUaGF0IG1lYW5zIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBgX19pbml0X19gIG1ldGhvZHMuIFRoZXkgYXJlIHRoZSBiZWRyb2NrIG9mIG9iamVjdCBpbml0aWFsaXphdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY2xhc3MgYW5kIGl0cyBwb3RlbnRpYWwgc3VwZXJjbGFzc2VzIGFyZSBiZWluZyBzZXQgdXAuIFdoYXQgYXJndW1lbnRzIGFyZSBiZWluZyBhY2NlcHRlZD8gV2hhdCBkYXRhIGlzIGJlaW5nIGluaXRpYWxpemVkIGFuZCBob3c/IEFueSBzaWRlIGVmZmVjdHMgSSBuZWVkIHRvIHdhdGNoIG91dCBmb3IgaW4gdGhlIHByb2Nlc3Mgb2YgY29uc3RydWN0aW9uPyBXaGF0IGNhbGxzIGFyZSBtYWRlIHRvIG90aGVyIGZ1bmN0aW9ucyBkdXJpbmcgaW5pdGlhbGl6YXRpb24/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgaXNzdWVzLCBsaWtlIG11dGFibGUgZGVmYXVsdCBhcmd1bWVudHM/IExldCYjMzk7cyB0cmFjZSBpdCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTg4MT1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgdWJsa19taXNjID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODg2LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU4ODc6c3RhdGljIGludCBfX2luaXQgdWJsa19pbml0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTg4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHVibGsgQVBJIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGFza2VkIHdpdGggaWRlbnRpZnlpbmcgdGhlIGJlc3QgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nIHRoZSB1YmxrIGRyaXZlci4gVGhlIGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gYHVibGtfY3RybF91cmluZ19jbWRgIGFuZCBgdWJsa19jdHJsX3NldF9wYXJhbXNgLCBhc3N1bWluZyB0aGF0LCBldmVuIGlmIHRoZXkgYXJlIHN0YXRpYywgdGhlIGZ1enplciBjb3VsZCBzdGlsbCBtYWtlIHVzZSBvZiB0aGVpciBzeW1ib2xzIG9yIGp1c3QgZnV6eiB0aGUgaW9fdXJpbmcgY29tbWFuZHMuCgpUaGVuIEkgcmVhbGl6ZWQgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbnMuIEkgaW1tZWRpYXRlbHkgY2hlY2tlZCBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBxdWlja2x5IGZvdW5kIHRoYXQgdGhlIGZpcnN0IHR3byBmdW5jdGlvbnMgSSB0aG91Z2h0IG9mIGFyZSBzdGF0aWMuIEkgZG91YmxlLWNoZWNrZWQgYHVibGtfdmFsaWRhdGVfcGFyYW1zYCwgYW5kIGl0IGlzIGFsc28gc3RhdGljLgoKU2luY2UgdGhlcmUgZG9uJiMzOTt0IHNlZW0gdG8gYmUgYW55IG9idmlvdXMgbm9uLXN0YXRpYyBBUEkgZW50cnkgcG9pbnRzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBvbmVzIEkmIzM5O20gcHJvdmlkaW5nIGFyZW4mIzM5O3QgaW5saW5lZC4gVGhlIHByb21wdCBhbHNvIG5vdGVzIHRoYXQgaW5saW5lZCBmdW5jdGlvbnMgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gR2l2ZW4gdGhhdCBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgdWJsa19jdHJsX3VyaW5nX2NtZGAgaXMgbm90IGlubGluZWQsIGFuZCBzaW5jZSBgdWJsa19jdHJsX3NldF9wYXJhbXNgIGlzIGEgc2l6YWJsZSBmdW5jdGlvbiwgSSYjMzk7bSBnb2luZyB0byBhc3N1bWUgaXQgaXMgYWxzbyBub3QgaW5saW5lZC4KClRoZSBjYWxsIHN0YWNrIGNvbmZpcm1zIG15IHN1c3BpY2lvbnM7IGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AgaXMgY2FsbGVkIGZyb20gYHVibGtfY3RybF9zZXRfcGFyYW1zYCBhbmQgYHVibGtfY3RybF9hZGRfZGV2YC4gR2l2ZW4gdGhlIGFkdmljZSBmcm9tIHRoZSBwcm9tcHQsIHRoZSBiZXN0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYHVibGtfY3RybF91cmluZ19jbWRgIGFuZCBgdWJsa19jdHJsX3NldF9wYXJhbXNgLgoKRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgbm90ZSB0aGUgY29uZmlncyBJIHdhcyBjb25zaWRlcmluZyB3ZXJlIGBCTEtfREVWX1VCTEtgIGFuZCBgQkxLX0RFVl9aT05FRGAgYW5kIHRoYXQgdGhlIGZvcm1lciBpcyB0aGUgb25lIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBmb3IgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI4Olx0Y29uZmlnIEJMS19ERVZfVUJMS1xuIDMyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuIDMzMDpcdFx0c2VsZWN0IElPX1VSSU5HXG4gMzMxOlx0XHRoZWxwXG4gMzMyOlx0XHQgIGlvX3VyaW5nIGJhc2VkIHVzZXJzcGFjZSBibG9jayBkcml2ZXIuIFRvZ2V0aGVyIHdpdGggdWJsayBzZXJ2ZXIsIHVibGtcbiAzMzM6XHRcdCAgaGFzIGJlZW4gd29ya2luZyB3ZWxsLCBidXQgaW50ZXJmYWNlIHdpdGggdXNlcnNwYWNlIG9yIGNvbW1hbmQgZGF0YVxuIDMzNDpcdFx0ICBkZWZpbml0aW9uIGlzbiYjMzk7dCBmaW5hbGl6ZWQgeWV0LCBhbmQgbWlnaHQgY2hhbmdlIGFjY29yZGluZyB0byBmdXR1cmVcbiAzMzU6XHRcdCAgcmVxdWlyZW1lbnQsIHNvIG1hcmsgaXMgYXMgZXhwZXJpbWVudGFsIG5vdy5cbiAzMzY6XHRcbiAzMzc6XHRjb25maWcgQkxLREVWX1VCTEtfTEVHQUNZX09QQ09ERVNcbiAzMzg6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGVcJiMzNDtcbiAzMzk6XHRcdGRlcGVuZHMgb24gQkxLX0RFVl9VQkxLXG4gMzQwOlx0XHRkZWZhdWx0IHlcbiAzNDE6XHRcdGhlbHBcbiAzNDI6XHRcdCAgdWJsayBkcml2ZXIgc3RhcnRlZCB0byB0YWtlIHBsYWluIGNvbW1hbmQgZW5jb2RpbmcsIHdoaWNoIHR1cm5zIG91dFxuIDM0MzpcdFx0ICBvbmUgYmFkIHdheS4gVGhlIHRyYWRpdGlvbmFsIGlvY3RsIGNvbW1hbmQgb3Bjb2RlIGVuY29kZXMgbW9yZVxuIDM0NDpcdFx0ICBpbmZvIGFuZCBiYXNpY2FsbHkgZGVmaW5lcyBlYWNoIGNvZGUgdW5pcXVlbHksIHNvIG9wY29kZSBjb25mbGljdFxuIDM0NTpcdFx0ICBpcyBhdm9pZGVkLCBhbmQgZHJpdmVyIGNhbiBoYW5kbGUgd3JvbmcgY29tbWFuZCBlYXNpbHksIG1lYW50aW1lIGl0XG4gMzQ2Olx0XHQgIG1heSBoZWxwIHNlY3VyaXR5IHN1YnN5c3RlbSB0byBhdWRpdCBpb191cmluZyBjb21tYW5kLlxuIDM0NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk3MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJT19VUklORyBhbmQgWm9uZWQgQmxvY2sgRGV2aWNlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBzeXN0ZW0gaXMgY2hvb3NpbmcgYElPX1VSSU5HYC4gR29vZCwgdGhhdCYjMzk7cyBnZW5lcmFsbHkgdGhlIHJpZ2h0IGRpcmVjdGlvbiBmb3IgbW9kZXJuIEkvTy4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBCTEtfREVWX1pPTkVEYCBjb250aW5nZW50IG9uIHNvbWV0aGluZyBzcGVjaWZpYz8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMuIEkga25vdyBpdCAqc2hvdWxkbiYjMzk7dCogYmUgYSBtYWpvciBpc3N1ZSwgYnV0IEkgd2FudCB0byBlbnN1cmUgdGhhdCBteSBhc3N1bXB0aW9ucyByZWdhcmRpbmcgd2hpY2ggb3RoZXIgdGhpbmdzIGFyZSBuZWVkZWQgYXJlIGNvcnJlY3QuIERvbiYjMzk7dCB3YW50IGFueSBzdXJwcmlzZXMgbGF0ZXIuIEdvdHRhIHN0YXkgc2hhcnAgYW5kIG1ha2Ugc3VyZSB0aGlzIGlzIHNldCB1cCBjb3JyZWN0bHkuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIGlzIGxpbmluZyB1cCBuaWNlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTc6XHRjb25maWcgQkxLX0RFVl9aT05FRFxuICA5ODpcdFx0Ym9vbCBcJiMzNDtab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICA5OTpcdFx0aGVscFxuIDEwMDpcdFx0QmxvY2sgbGF5ZXIgem9uZWQgYmxvY2sgZGV2aWNlIHN1cHBvcnQuIFRoaXMgb3B0aW9uIGVuYWJsZXNcbiAxMDE6XHRcdHN1cHBvcnQgZm9yIFpBQy9aQkMvWk5TIGhvc3QtbWFuYWdlZCBhbmQgaG9zdC1hd2FyZSB6b25lZCBibG9ja1xuIDEwMjpcdFx0ZGV2aWNlcy5cbiAxMDM6XHRcbiAxMDQ6XHRcdFNheSB5ZXMgaGVyZSBpZiB5b3UgaGF2ZSBhIFpBQywgWkJDLCBvciBaTlMgc3RvcmFnZSBkZXZpY2UuXG4gMTA1Olx0XG4gMTA2Olx0Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xuIDEwNzpcdFx0Ym9vbCBcJiMzNDtCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XCYjMzQ7XG4gMTA4Olx0XHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcbiAxMDk6XHRcdHNlbGVjdCBCTEtfQ0dST1VQX1JXU1RBVFxuIDExMDpcdFx0aGVscFxuIDExMTpcdFx0QmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydC4gSXQgY2FuIGJlIHVzZWQgdG8gbGltaXRcbiAxMTI6XHRcdHRoZSBJTyByYXRlIHRvIGEgZGV2aWNlLiBJTyByYXRlIHBvbGljaWVzIGFyZSBwZXIgY2dyb3VwIGFuZFxuIDExMzpcdFx0b25lIG5lZWRzIHRvIG1vdW50IGFuZCB1c2UgYmxraW8gY2dyb3VwIGNvbnRyb2xsZXIgZm9yIGNyZWF0aW5nXG4gMTE0Olx0XHRjZ3JvdXBzIGFuZCBzcGVjaWZ5aW5nIHBlciBkZXZpY2UgSU8gcmF0ZSBwb2xpY2llcy5cbiAxMTU6XHRcbiAxMTY6XHRcdFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MTIKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFVCTEsgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlcmUgYXJlIG5vIGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfWk9ORURgLCB3aGljaCBpbW1lZGlhdGVseSBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgQkxLX0RFVl9VQkxLYCBhbmQgYEJMS19ERVZfWk9ORURgLCBhbmQgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBgdWJsa19jdHJsX3VyaW5nX2NtZGAgYW5kIGB1YmxrX2N0cmxfc2V0X3BhcmFtc2AuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzLgoKV2FpdCwgaG9sZCBvbiBhIHNlY29uZOKApiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaXNuJiMzOTt0ICpqdXN0KiBjb3JlIGtlcm5lbCBjb2RlLiBJdCBhbHNvIHRvdWNoZXMgc2VsZnRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmNgIGFuZCBhZGRzIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcGFyYW1zXzAxLnNoYC4gU2VsZnRlc3RzIGFyZW4mIzM5O3QgcGFydCBvZiB0aGUgY29yZSBrZXJuZWwsIEkga25vdyB0aGF0LCBidXQgdGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNgLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY29zbWV0aWMgdHdlYWs7IGl0JiMzOTtzIGEgZml4IHRvIGEgdmFsaWRhdGlvbiBjaGVjay4gVGhlIHBhdGNoIGlzIGVuZm9yY2luZyB0aGF0IGBjaHVua19zZWN0b3JzYCBpcyBhIHBvd2VyIG9mIDIgd2hlbiBjb25maWd1cmluZyBhIHpvbmVkIHVibGsgZGV2aWNlLgoKQ3J1Y2lhbGx5LCB0aGlzIGNoYW5nZSBpcyB0cmlnZ2VyZWQgYnkgdXNlci1zdXBwbGllZCBwYXJhbWV0ZXJzIHRocm91Z2ggaW9fdXJpbmcgY29tbWFuZHMgb24gYC9kZXYvdWJsay1jb250cm9sYC4gU28sIGl0JiMzOTtzIHVzZXItYWNjZXNzaWJsZSBrZXJuZWwgY29kZSwgYW5kIGl04oCZcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW4gYmUgZXhlY3V0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBHaXZlbiB0aGlzIHJlYWNoYWJpbGl0eSBhbmQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhIHZhbGlkYXRpb24gZml4LCBhbmQgdGh1cyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIG1pc2Zvcm1lZCBpbnB1dCBJIGNvbmNsdWRlIGl0JiMzOTtzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gVGhlIGdvYWwgb2YgZnV6emluZyB3aWxsIGJlIHRvIHByb2JlIHRoaXMgcGFyYW1ldGVyIHZhbGlkYXRpb24uCgpUaGVyZWZvcmUsIGZvciB0aGUgZnV6emluZyBzZXR1cCwgbXkgY29uZmlncyB3aWxsIGJlIGBCTEtfREVWX1VCTEtgLCBgQkxLX0RFVl9aT05FRGAsIGFuZCBteSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYHVibGtfY3RybF91cmluZ19jbWRgLCBgdWJsa19jdHJsX3NldF9wYXJhbXNgLiBJIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlc2UgdmFsdWVzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoZSBgY2h1bmtfc2VjdG9yc2AgdmFsaWRhdGlvbiBpbiBteSBmdXp6aW5nIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9VQkxLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1YmxrX2N0cmxfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfY3RybF9zZXRfcGFyYW1zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB1YmxrIGRyaXZlciB0byBlbmZvcmNlIHRoYXQgYGNodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiB3aGVuIGNvbmZpZ3VyaW5nIGEgem9uZWQgdWJsayBkZXZpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUga2VybmVsJiMzOTtzIHZhbGlkYXRpb24gbG9naWMgZm9yIHVzZXItcHJvdmlkZWQgcGFyYW1ldGVycywgcmVhY2hhYmxlIHZpYSBpb191cmluZyBjb21tYW5kcyBvbiBgL2Rldi91YmxrLWNvbnRyb2xgLiBUaGUgY29kZSBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1VCTEsmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VibGtfY3RybF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19jdHJsX3NldF9wYXJhbXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHVibGsgZHJpdmVyIHRvIGVuZm9yY2UgdGhhdCBgY2h1bmtfc2VjdG9yc2AgaXMgYSBwb3dlciBvZiAyIHdoZW4gY29uZmlndXJpbmcgYSB6b25lZCB1YmxrIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwmIzM5O3MgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdXNlci1wcm92aWRlZCBwYXJhbWV0ZXJzLCByZWFjaGFibGUgdmlhIGlvX3VyaW5nIGNvbW1hbmRzIG9uIGAvZGV2L3VibGstY29udHJvbGAuIFRoZSBjb2RlIGlzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHVibGtfdmFsaWRhdGVfcGFyYW1zYCBpbiBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYCB0byBlbnN1cmUgdGhhdCBgY2h1bmtfc2VjdG9yc2AgaXMgYSBwb3dlciBvZiAyIGZvciB6b25lZCBkZXZpY2VzLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggY29uc2lzdHMgb2YgdXBkYXRlcyB0byB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdHMgKGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2ApLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGtlcm5lbCBjaGFuZ2UgaXMgcHVyZWx5IGEgdmFsaWRhdGlvbiBjaGVjayBvbiBhbiBleGlzdGluZyBwYXJhbWV0ZXIuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE4YzIzY2Y0NDk5NzU4NmMwZjhkM2EyYjZjMGU1ODE5MGQ1NTQyODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwMzozMToxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYwppbmRleCA4NTNjZDQwYTM0MDNjLi4xOTNmNmViYzNiMzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCkBAIC05ODAsNyAmIzQzOzk4MCw3IEBAIHN0YXRpYyBpbnQgdWJsa192YWxpZGF0ZV9wYXJhbXMoY29uc3Qgc3RydWN0IHVibGtfZGV2aWNlICp1YikKIAkJaWYgKHAtJmd0O21heF9zZWN0b3JzICZsdDsgUEFHRV9TRUNUT1JTKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSAmYW1wOyZhbXA7ICFwLSZndDtjaHVua19zZWN0b3JzKQomIzQzOwkJaWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSAmYW1wOyZhbXA7ICFpc19wb3dlcl9vZl8yKHAtJmd0O2NodW5rX3NlY3RvcnMpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGUKaW5kZXggYTNjZWM3YjM1ZGI3Ny4uNWRhZjM2YzZjMzZjNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL01ha2VmaWxlCkBAIC01NSw2ICYjNDM7NTUsOCBAQCBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3N0cmlwZV8wNi5zaAogVEVTVF9QUk9HUyAmIzQzOz0gdGVzdF9wYXJ0XzAxLnNoCiBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3BhcnRfMDIuc2gKIAomIzQzO1RFU1RfUFJPR1MgJiM0Mzs9IHRlc3RfcGFyYW1zXzAxLnNoCiYjNDM7CiBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3NobWVtemNfMDEuc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IHRlc3Rfc2htZW16Y18wMi5zaAogVEVTVF9QUk9HUyAmIzQzOz0gdGVzdF9zaG1lbXpjXzAzLnNoCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmMKaW5kZXggYmU1YTBkNzc1OTUyYy4uMjQwMGI0NjE1NzY2NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuYwpAQCAtOCw2ICYjNDM7OCwxMyBAQAogI2luY2x1ZGUgJiMzNDtrdWJsay5oJiMzNDsKIAogI2RlZmluZSBNQVhfTlJfVEdUX0FSRyAJNjQKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlQJCTkKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX1BIWVNJQ0FMX0JTX1NISUZUCQkxMgomIzQzOyNkZWZpbmUgS1VCTEtfUEFSQU1fWk9ORV9TRUNUT1JTCQkxMjgKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX05SX1pPTkVTCQkJMTYKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTCQkJXAomIzQzOwkoS1VCTEtfUEFSQU1fWk9ORV9TRUNUT1JTICogS1VCTEtfUEFSQU1fTlJfWk9ORVMpCiYjNDM7I2RlZmluZSBLVUJMS19QQVJBTV9aT05FX0FQUEVORF9TRUNUT1JTCQk4CiAKIHVuc2lnbmVkIGludCB1YmxrX2RiZ19tYXNrID0gVUJMS19MT0c7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHVibGtfdGd0X29wcyAqdGd0X29wc19saXN0W10gPSB7CkBAIC0yMjcsNiAmIzQzOzIzNCw1NSBAQCBzdGF0aWMgaW50IHVibGtfY3RybF9nZXRfZmVhdHVyZXMoc3RydWN0IHVibGtfZGV2ICpkZXYsCiAJcmV0dXJuIF9fdWJsa19jdHJsX2NtZChkZXYsICZhbXA7ZGF0YSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBhcnNlX3BhcmFtX3R5cGVzKGNvbnN0IGNoYXIgKmFyZywgX191MzIgKnR5cGVzKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMTI4XSwgKnNhdmUgPSBOVUxMLCAqdG9rOwomIzQzOwomIzQzOwlpZiAoc3RybGVuKGFyZykgJmd0Oz0gc2l6ZW9mKGJ1ZikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJc3RyY3B5KGJ1ZiwgYXJnKTsKJiM0MzsJKnR5cGVzID0gMDsKJiM0MzsJdG9rID0gc3RydG9rX3IoYnVmLCAmIzM0OywmIzM0OywgJmFtcDtzYXZlKTsKJiM0MzsJd2hpbGUgKHRvaykgewomIzQzOwkJaWYgKCFzdHJjbXAodG9rLCAmIzM0O25vbmUmIzM0OykpCiYjNDM7CQkJOwomIzQzOwkJZWxzZSBpZiAoIXN0cmNtcCh0b2ssICYjMzQ7YmFzaWMmIzM0OykpCiYjNDM7CQkJKnR5cGVzIHw9IFVCTEtfUEFSQU1fVFlQRV9CQVNJQzsKJiM0MzsJCWVsc2UgaWYgKCFzdHJjbXAodG9rLCAmIzM0O3pvbmVkJiMzNDspKQomIzQzOwkJCSp0eXBlcyB8PSBVQkxLX1BBUkFNX1RZUEVfWk9ORUQ7CiYjNDM7CQllbHNlCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl0b2sgPSBzdHJ0b2tfcihOVUxMLCAmIzM0OywmIzM0OywgJmFtcDtzYXZlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjb25zdCBzdHJ1Y3QgZGV2X2N0eCAqY3R4LAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgdWJsa19wYXJhbXMgKnBhcmFtcykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBwYXJhbXNfY3R4ICpwID0gJmFtcDtjdHgtJmd0O3BhcmFtczsKJiM0MzsKJiM0MzsJKnBhcmFtcyA9IChzdHJ1Y3QgdWJsa19wYXJhbXMpIHsKJiM0MzsJCS50eXBlcyA9IHAtJmd0O3R5cGVzLAomIzQzOwkJLmJhc2ljID0gewomIzQzOwkJCS5sb2dpY2FsX2JzX3NoaWZ0CT0gcC0mZ3Q7bG9naWNhbF9ic19zaGlmdCwKJiM0MzsJCQkucGh5c2ljYWxfYnNfc2hpZnQJPSBwLSZndDtwaHlzaWNhbF9ic19zaGlmdCwKJiM0MzsJCQkuaW9fbWluX3NoaWZ0CQk9IHAtJmd0O2lvX21pbl9zaGlmdCwKJiM0MzsJCQkuaW9fb3B0X3NoaWZ0CQk9IHAtJmd0O2lvX29wdF9zaGlmdCwKJiM0MzsJCQkubWF4X3NlY3RvcnMJCT0gcC0mZ3Q7bWF4X3NlY3RvcnMsCiYjNDM7CQkJLmNodW5rX3NlY3RvcnMJCT0gcC0mZ3Q7Y2h1bmtfc2VjdG9ycywKJiM0MzsJCQkuZGV2X3NlY3RvcnMJCT0gcC0mZ3Q7ZGV2X3NlY3RvcnMsCiYjNDM7CQl9LAomIzQzOwkJLnpvbmVkID0gewomIzQzOwkJCS5tYXhfb3Blbl96b25lcwkJPSBwLSZndDttYXhfb3Blbl96b25lcywKJiM0MzsJCQkubWF4X2FjdGl2ZV96b25lcwk9IHAtJmd0O21heF9hY3RpdmVfem9uZXMsCiYjNDM7CQkJLm1heF96b25lX2FwcGVuZF9zZWN0b3JzID0gcC0mZ3Q7bWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMsCiYjNDM7CQl9LAomIzQzOwl9OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdWJsa19jdHJsX3VwZGF0ZV9zaXplKHN0cnVjdCB1YmxrX2RldiAqZGV2LAogCQlfX3U2NCBucl9zZWN0cykKIHsKQEAgLTE3NzIsNiAmIzQzOzE4MjgsNTEgQEAgc3RhdGljIGludCBfX2NtZF9kZXZfYWRkKGNvbnN0IHN0cnVjdCBkZXZfY3R4ICpjdHgpCiAKIHN0YXRpYyBpbnQgX19jbWRfZGV2X2xpc3Qoc3RydWN0IGRldl9jdHggKmN0eCk7CiAKJiM0MztzdGF0aWMgaW50IGNtZF9kZXZfc2V0X3BhcmFtcyhzdHJ1Y3QgZGV2X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHVibGtzcnZfY3RybF9kZXZfaW5mbyAqaW5mbzsKJiM0MzsJc3RydWN0IHVibGtfcGFyYW1zIHBhcmFtczsKJiM0MzsJc3RydWN0IHVibGtfZGV2ICpkZXY7CiYjNDM7CV9fdTY0IGZlYXR1cmVzOwomIzQzOwlpbnQgcmV0LCBkZWxfcmV0OwomIzQzOwomIzQzOwlkZXYgPSB1YmxrX2N0cmxfaW5pdCgpOwomIzQzOwlpZiAoIWRldikKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlyZXQgPSB1YmxrX2N0cmxfZ2V0X2ZlYXR1cmVzKGRldiwgJmFtcDtmZWF0dXJlcyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghKGZlYXR1cmVzICZhbXA7IFVCTEtfRl9DTURfSU9DVExfRU5DT0RFKSkgewomIzQzOwkJcmV0ID0gLUVOT1RTVVA7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpbmZvID0gJmFtcDtkZXYtJmd0O2Rldl9pbmZvOwomIzQzOwlpbmZvLSZndDtkZXZfaWQgPSBjdHgtJmd0O2Rldl9pZDsKJiM0MzsJaW5mby0mZ3Q7bnJfaHdfcXVldWVzID0gY3R4LSZndDtucl9od19xdWV1ZXM7CiYjNDM7CWluZm8tJmd0O3F1ZXVlX2RlcHRoID0gY3R4LSZndDtxdWV1ZV9kZXB0aDsKJiM0MzsJaW5mby0mZ3Q7aW9fZGVzY19zaXplID0gY3R4LSZndDtpb19kZXNjX3NpemU7CiYjNDM7CWluZm8tJmd0O2ZsYWdzID0gY3R4LSZndDtmbGFnczsKJiM0MzsKJiM0MzsJcmV0ID0gdWJsa19jdHJsX2FkZF9kZXYoZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJdWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjdHgsICZhbXA7cGFyYW1zKTsKJiM0MzsKJiM0MzsJcmV0ID0gdWJsa19jdHJsX3NldF9wYXJhbXMoZGV2LCAmYW1wO3BhcmFtcyk7CiYjNDM7CXByaW50ZigmIzM0O1NFVF9QQVJBTVMgcmV0dXJuZWQgJWRcbiYjMzQ7LCByZXQpOwomIzQzOwomIzQzOwlkZWxfcmV0ID0gdWJsa19jdHJsX2RlbF9kZXYoZGV2KTsKJiM0MzsJaWYgKGRlbF9yZXQgJmx0OyAwICZhbXA7JmFtcDsgcmV0ID09IDApCiYjNDM7CQlyZXQgPSBkZWxfcmV0OwomIzQzO291dDoKJiM0MzsJdWJsa19jdHJsX2RlaW5pdChkZXYpOwomIzQzOwlyZXR1cm4gcmV0ICZsdDsgMCA/IHJldCA6IDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBjbWRfZGV2X2FkZChzdHJ1Y3QgZGV2X2N0eCAqY3R4KQogewogCWludCByZXM7CkBAIC0yMTE3LDYgJiM0MzsyMjE4LDkgQEAgc3RhdGljIGludCBjbWRfZGV2X2hlbHAoY2hhciAqZXhlKQogCXByaW50ZigmIzM0O1x0IC0tc2FmZSBvbmx5IHN0b3AgaWYgZGV2aWNlIGhhcyBubyBhY3RpdmUgb3BlbmVyc1xuXG4mIzM0Oyk7CiAJcHJpbnRmKCYjMzQ7JXMgbGlzdCBbLW4gZGV2X2lkXSAtYSBcbiYjMzQ7LCBleGUpOwogCXByaW50ZigmIzM0O1x0IC1hIGxpc3QgYWxsIGRldmljZXMsIC1uIGxpc3Qgc3BlY2lmaWVkIGRldmljZSwgZGVmYXVsdCAtYSBcblxuJiMzNDspOwomIzQzOwlwcmludGYoJiMzNDslcyBzZXRfcGFyYW1zIFstbiBkZXZfaWRdIFstcSBucl9xdWV1ZXNdIFstZCBkZXB0aF0gWy11XSBbLS16b25lZF1cbiYjMzQ7LCBleGUpOwomIzQzOwlwcmludGYoJiMzNDtcdFstLXBhcmFtX3R5cGVzIGJhc2ljWyx6b25lZF18bm9uZV1cbiYjMzQ7KTsKJiM0MzsJcHJpbnRmKCYjMzQ7XHQgaXNzdWUgQUREX0RFViwgU0VUX1BBUkFNUyBhbmQgREVMX0RFViB3aXRob3V0IFNUQVJUX0RFVlxuXG4mIzM0Oyk7CiAJcHJpbnRmKCYjMzQ7JXMgZmVhdHVyZXNcbiYjMzQ7LCBleGUpOwogCXByaW50ZigmIzM0OyVzIHVwZGF0ZV9zaXplIC1uIGRldl9pZCAtc3wtLXNpemUgc2l6ZV9pbl9ieXRlcyBcbiYjMzQ7LCBleGUpOwogCXByaW50ZigmIzM0OyVzIHF1aWVzY2UgLW4gZGV2X2lkXG4mIzM0OywgZXhlKTsKQEAgLTIxNjAsNiAmIzQzOzIyNjQsMTggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJeyAmIzM0O2h0bGImIzM0OywJCTEsCU5VTEwsICAwICB9LAogCQl7ICYjMzQ7cmRvbmx5X3NobWVtX2J1ZiYjMzQ7LAkwLAlOVUxMLCAgMCAgfSwKIAkJeyAmIzM0O2lvX2Rlc2Nfc2l6ZSYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKJiM0MzsJCXsgJiMzNDt6b25lZCYjMzQ7LAkJMCwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7cGFyYW1fdHlwZXMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bG9naWNhbF9ic19zaGlmdCYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKJiM0MzsJCXsgJiMzNDtwaHlzaWNhbF9ic19zaGlmdCYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKJiM0MzsJCXsgJiMzNDtpb19taW5fc2hpZnQmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7aW9fb3B0X3NoaWZ0JiMzNDssCTEsCU5VTEwsICAwICB9LAomIzQzOwkJeyAmIzM0O21heF9zZWN0b3JzJiMzNDssCTEsCU5VTEwsICAwICB9LAomIzQzOwkJeyAmIzM0O2NodW5rX3NlY3RvcnMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7ZGV2X3NlY3RvcnMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMmIzM0OywgMSwgTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bWF4X29wZW5fem9uZXMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bWF4X2FjdGl2ZV96b25lcyYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKIAkJeyAwLCAwLCAwLCAwIH0KIAl9OwogCWNvbnN0IHN0cnVjdCB1YmxrX3RndF9vcHMgKm9wcyA9IE5VTEw7CkBAIC0yMTczLDYgJiM0MzsyMjg5LDE5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCS50Z3RfdHlwZQk9CSYjMzQ7dW5rbm93biYjMzQ7LAogCQkuY3N1bV90eXBlCT0JTEJNRF9QSV9DU1VNX05PTkUsCiAJCS5pb19kZXNjX3NpemUJPQlzaXplb2Yoc3RydWN0IHVibGtzcnZfaW9fZGVzYyksCiYjNDM7CQkucGFyYW1zID0gewomIzQzOwkJCS50eXBlcwkJCT0gVUJMS19QQVJBTV9UWVBFX0JBU0lDLAomIzQzOwkJCS5sb2dpY2FsX2JzX3NoaWZ0CT0gS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCwKJiM0MzsJCQkucGh5c2ljYWxfYnNfc2hpZnQJPSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCwKJiM0MzsJCQkuaW9fbWluX3NoaWZ0CQk9IEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlQsCiYjNDM7CQkJLmlvX29wdF9zaGlmdAkJPSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCwKJiM0MzsJCQkubWF4X3NlY3RvcnMJCT0KJiM0MzsJCQkJVUJMS19JT19NQVhfQllURVMgJmd0OyZndDsgS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCwKJiM0MzsJCQkuY2h1bmtfc2VjdG9ycwkJPSBLVUJMS19QQVJBTV9aT05FX1NFQ1RPUlMsCiYjNDM7CQkJLmRldl9zZWN0b3JzCQk9IEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTLAomIzQzOwkJCS5tYXhfem9uZV9hcHBlbmRfc2VjdG9ycyA9CiYjNDM7CQkJCUtVQkxLX1BBUkFNX1pPTkVfQVBQRU5EX1NFQ1RPUlMsCiYjNDM7CQl9LAogCX07CiAJaW50IHJldCA9IC1FSU5WQUwsIGk7CiAJaW50IHRndF9hcmdjID0gMTsKQEAgLTIyODgsNiAmIzQzOzI0MTcsMzQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQljdHguZmxhZ3MgfD0gVUJMS19GX0lPX0RFU0NfU0laRTsKIAkJCQljdHguaW9fZGVzY19zaXplID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwogCQkJfQomIzQzOwkJCWlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsICYjMzQ7em9uZWQmIzM0OykpCiYjNDM7CQkJCWN0eC5mbGFncyB8PSBVQkxLX0ZfWk9ORUQ7CiYjNDM7CQkJaWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgJiMzNDtwYXJhbV90eXBlcyYjMzQ7KSkgewomIzQzOwkJCQlyZXQgPSBwYXJzZV9wYXJhbV90eXBlcyhvcHRhcmcsICZhbXA7Y3R4LnBhcmFtcy50eXBlcyk7CiYjNDM7CQkJCWlmIChyZXQpCiYjNDM7CQkJCQlyZXR1cm4gcmV0OwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2xvZ2ljYWxfYnNfc2hpZnQmIzM0OykpCiYjNDM7CQkJCWN0eC5wYXJhbXMubG9naWNhbF9ic19zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O3BoeXNpY2FsX2JzX3NoaWZ0JiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLnBoeXNpY2FsX2JzX3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwomIzQzOwkJCWlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsICYjMzQ7aW9fbWluX3NoaWZ0JiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLmlvX21pbl9zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2lvX29wdF9zaGlmdCYjMzQ7KSkKJiM0MzsJCQkJY3R4LnBhcmFtcy5pb19vcHRfc2hpZnQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7CiYjNDM7CQkJaWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgJiMzNDttYXhfc2VjdG9ycyYjMzQ7KSkKJiM0MzsJCQkJY3R4LnBhcmFtcy5tYXhfc2VjdG9ycyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2NodW5rX3NlY3RvcnMmIzM0OykpCiYjNDM7CQkJCWN0eC5wYXJhbXMuY2h1bmtfc2VjdG9ycyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2Rldl9zZWN0b3JzJiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLmRldl9zZWN0b3JzID0gc3RydG91bGwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O21heF96b25lX2FwcGVuZF9zZWN0b3JzJiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLm1heF96b25lX2FwcGVuZF9zZWN0b3JzID0KJiM0MzsJCQkJCXN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O21heF9vcGVuX3pvbmVzJiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLm1heF9vcGVuX3pvbmVzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwomIzQzOwkJCWlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsICYjMzQ7bWF4X2FjdGl2ZV96b25lcyYjMzQ7KSkKJiM0MzsJCQkJY3R4LnBhcmFtcy5tYXhfYWN0aXZlX3pvbmVzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwogCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTs/JiMzOTs6CiAJCQkvKgpAQCAtMjM3Nyw3ICYjNDM7MjUzNCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCW9wcy0mZ3Q7cGFyc2VfY21kX2xpbmUoJmFtcDtjdHgsIHRndF9hcmdjLCB0Z3RfYXJndik7CiAJfQogCi0JaWYgKCFzdHJjbXAoY21kLCAmIzM0O2FkZCYjMzQ7KSkKJiM0MzsJaWYgKCFzdHJjbXAoY21kLCAmIzM0O3NldF9wYXJhbXMmIzM0OykpCiYjNDM7CQlyZXQgPSBjbWRfZGV2X3NldF9wYXJhbXMoJmFtcDtjdHgpOwomIzQzOwllbHNlIGlmICghc3RyY21wKGNtZCwgJiMzNDthZGQmIzM0OykpCiAJCXJldCA9IGNtZF9kZXZfYWRkKCZhbXA7Y3R4KTsKIAllbHNlIGlmICghc3RyY21wKGNtZCwgJiMzNDtyZWNvdmVyJiMzNDspKSB7CiAJCWlmIChjdHguZGV2X2lkICZsdDsgMCkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oCmluZGV4IGUyN2MxNTRmYzkxMDguLmQ5OGYzZDYxMmQ4ODggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmgKQEAgLTYzLDYgJiM0Mzs2MywyMiBAQCBzdHJ1Y3QgZmF1bHRfaW5qZWN0X2N0eCB7CiAJYm9vbCBkaWVfZHVyaW5nX2ZldGNoOwogfTsKIAomIzQzO3N0cnVjdCBwYXJhbXNfY3R4IHsKJiM0MzsJX191MzIgdHlwZXM7CiYjNDM7CiYjNDM7CV9fdTMyIGxvZ2ljYWxfYnNfc2hpZnQ7CiYjNDM7CV9fdTMyIHBoeXNpY2FsX2JzX3NoaWZ0OwomIzQzOwlfX3UzMiBpb19taW5fc2hpZnQ7CiYjNDM7CV9fdTMyIGlvX29wdF9zaGlmdDsKJiM0MzsJX191MzIgbWF4X3NlY3RvcnM7CiYjNDM7CV9fdTMyIGNodW5rX3NlY3RvcnM7CiYjNDM7CV9fdTY0IGRldl9zZWN0b3JzOwomIzQzOwomIzQzOwlfX3UzMiBtYXhfb3Blbl96b25lczsKJiM0MzsJX191MzIgbWF4X2FjdGl2ZV96b25lczsKJiM0MzsJX191MzIgbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnM7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBkZXZfY3R4IHsKIAljaGFyIHRndF90eXBlWzE2XTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtOTksNiAmIzQzOzExNSw4IEBAIHN0cnVjdCBkZXZfY3R4IHsKIAkvKiBmb3IgJiMzOTt1cGRhdGVfc2l6ZSYjMzk7IGNvbW1hbmQgKi8KIAl1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTsKIAomIzQzOwlzdHJ1Y3QgcGFyYW1zX2N0eCBwYXJhbXM7CiYjNDM7CiAJY2hhciAqaHRsYl9wYXRoOwogCiAJdW5pb24gewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3BhcmFtc18wMS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTI4ZTcyYjEwMzVkMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2gKQEAgLTAsMCAmIzQzOzEsMTE0IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7LiAmIzM0OyQoY2QgJiMzNDskKGRpcm5hbWUgJiMzNDskMCYjMzQ7KSYjMzQ7ICZhbXA7JmFtcDsgcHdkKSYjMzQ7L3Rlc3RfY29tbW9uLnNoCiYjNDM7CiYjNDM7RVJSX0NPREU9MAomIzQzOwomIzQzO3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MoKQomIzQzO3sKJiM0MzsJbG9jYWwgbmFtZT0kMQomIzQzOwomIzQzOwlzaGlmdAomIzQzOwomIzQzOwllY2hvICYjMzQ7JG5hbWUmIzM0OwomIzQzOwlpZiAhICYjMzQ7JFVCTEtfUFJPRyYjMzQ7IHNldF9wYXJhbXMgLXEgMSAtZCAyICYjMzQ7JEAmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0OyRuYW1lOiBTRVRfUEFSQU1TIGNoZWNrIGZhaWxlZCYjMzQ7CiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztydW5fc2V0X3BhcmFtc19mYWlsdXJlKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5hbWU9JDEKJiM0MzsKJiM0MzsJc2hpZnQKJiM0MzsKJiM0MzsJZWNobyAmIzM0OyRuYW1lJiMzNDsKJiM0MzsJaWYgJiMzNDskVUJMS19QUk9HJiMzNDsgc2V0X3BhcmFtcyAtcSAxIC1kIDIgJiMzNDskQCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7JG5hbWU6IFNFVF9QQVJBTVMgc3VjY2VlZGVkIHVuZXhwZWN0ZWRseSYjMzQ7CiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztydW5fem9uZWRfc2V0X3BhcmFtc19zdWNjZXNzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5hbWU9JDEKJiM0MzsKJiM0MzsJc2hpZnQKJiM0MzsKJiM0MzsJZWNobyAmIzM0OyRuYW1lJiMzNDsKJiM0MzsJaWYgISAmIzM0OyRVQkxLX1BST0cmIzM0OyBzZXRfcGFyYW1zIC1xIDEgLWQgMiAtdSAtLXpvbmVkICYjMzQ7JEAmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0OyRuYW1lOiBTRVRfUEFSQU1TIGNoZWNrIGZhaWxlZCYjMzQ7CiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5hbWU9JDEKJiM0MzsKJiM0MzsJc2hpZnQKJiM0MzsKJiM0MzsJZWNobyAmIzM0OyRuYW1lJiMzNDsKJiM0MzsJaWYgJiMzNDskVUJMS19QUk9HJiMzNDsgc2V0X3BhcmFtcyAtcSAxIC1kIDIgLXUgLS16b25lZCAmIzM0OyRAJiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDskbmFtZTogU0VUX1BBUkFNUyBzdWNjZWVkZWQgdW5leHBlY3RlZGx5JiMzNDsKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO19wcmVwX3Rlc3QgJiMzNDtwYXJhbXMmIzM0OyAmIzM0O1NFVF9QQVJBTVMgdmFsaWRhdGlvbiYjMzQ7CiYjNDM7CiYjNDM7aWYgWyAhIC1jIC9kZXYvdWJsay1jb250cm9sIF07IHRoZW4KJiM0MzsJX2NsZWFudXBfdGVzdAomIzQzOwlfc2hvd19yZXN1bHQgJFRJRCAkVUJMS19TS0lQX0NPREUKJiM0MztmaQomIzQzOwomIzQzO3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MgJiMzNDt2YWxpZCBiYXNpYyBwYXJhbXMmIzM0OyB8fAomIzQzOwlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7cnVuX3NldF9wYXJhbXNfZmFpbHVyZSAmIzM0O21pc3NpbmcgYmFzaWMgcGFyYW1zJiMzNDsgXAomIzQzOwktLXBhcmFtX3R5cGVzIG5vbmUgfHwKJiM0MzsJRVJSX0NPREU9MQomIzQzOwomIzQzO3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDtsb2dpY2FsIGJsb2NrIGxhcmdlciB0aGFuIHBoeXNpY2FsIGJsb2NrJiMzNDsgXAomIzQzOwktLWxvZ2ljYWxfYnNfc2hpZnQgMTIgLS1waHlzaWNhbF9ic19zaGlmdCA5IHx8CiYjNDM7CUVSUl9DT0RFPTEKJiM0MzsKJiM0MztydW5fc2V0X3BhcmFtc19mYWlsdXJlICYjMzQ7dG9vIGxhcmdlIG1heCBzZWN0b3JzJiMzNDsgXAomIzQzOwktLW1heF9zZWN0b3JzIDIwNDkgfHwKJiM0MzsJRVJSX0NPREU9MQomIzQzOwomIzQzO2lmIF9oYXZlX2ZlYXR1cmUgJiMzNDtaT05FRCYjMzQ7ICZhbXA7JmFtcDsgX2hhdmVfZmVhdHVyZSAmIzM0O1VTRVJfQ09QWSYjMzQ7OyB0aGVuCiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX3N1Y2Nlc3MgJiMzNDt2YWxpZCB6b25lZCBwYXJhbXMmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDttaXNzaW5nIHpvbmVkIHBhcmFtcyYjMzQ7IHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDtub24tcG93ZXItb2YtMiB6b25lIHNpemUmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFwKJiM0MzsJCS0tY2h1bmtfc2VjdG9ycyA5NiAtLWRldl9zZWN0b3JzICQoKDk2ICogMTYpKSB8fAomIzQzOwkJRVJSX0NPREU9MQomIzQzOwomIzQzOwlydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlICYjMzQ7emVybyBtYXggem9uZSBhcHBlbmQmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFwKJiM0MzsJCS0tbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgMCB8fAomIzQzOwkJRVJSX0NPREU9MQomIzQzOwomIzQzOwlydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlICYjMzQ7dG9vIG1hbnkgb3BlbiB6b25lcyYjMzQ7IFwKJiM0MzsJCS0tcGFyYW1fdHlwZXMgYmFzaWMsem9uZWQgXAomIzQzOwkJLS1kZXZfc2VjdG9ycyAkKCgxMjggKiA0KSkgLS1tYXhfb3Blbl96b25lcyA1IHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDt0b28gbWFueSBhY3RpdmUgem9uZXMmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFwKJiM0MzsJCS0tZGV2X3NlY3RvcnMgJCgoMTI4ICogNCkpIC0tbWF4X2FjdGl2ZV96b25lcyA1IHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7ZWxzZQomIzQzOwllY2hvICYjMzQ7em9uZWQgdWJsayBmZWF0dXJlIHVuYXZhaWxhYmxlLCBza2lwIHpvbmVkIFNFVF9QQVJBTVMgY2FzZXMmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7X2NsZWFudXBfdGVzdAomIzQzO19zaG93X3Jlc3VsdCAkVElEICRFUlJfQ09ERQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkzOQoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiA3ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB1YmxrIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaGl0cyBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYCBhbmQgYWRkcyBzb21lIHRlc3RzIHRvIHRoZSBgc2VsZnRlc3RzL3VibGsvYCBhcmVhLiBUaGUgY29yZSBrZXJuZWwgY2hhbmdlIGlzIGEgc2ltcGxlIHZhbGlkYXRpb24gY2hlY2s6IHdlJiMzOTtyZSBjaGFuZ2luZyB0aGUgbG9naWMgaW4gYHVibGtfdmFsaWRhdGVfcGFyYW1zYCB0byBlbnN1cmUgYHAtJmd0O2NodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiB3aGVuIHRoZSB1YmxrIGRldmljZSBpcyB6b25lZC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhIGNvZGUgbW9kaWZpY2F0aW9uIGZyb20gYCFwLSZndDtjaHVua19zZWN0b3JzYCB0byBgIWlzX3Bvd2VyX29mXzIocC0mZ3Q7Y2h1bmtfc2VjdG9ycylgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHByb2JlIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoaXMgaXMgYSBjb21tb24gcGl0ZmFsbCBpbiBrZXJuZWwgcGF0Y2hlcywgYnV0LCBsb29raW5nIGF0IHRoZSBjb2RlLCB0aGlzIG9uZSBzZWVtcyBwcmV0dHkgY2xlYW4uIFRoZSBwYXRjaCBpcyBzaW1wbHkgcmVmaW5pbmcgYW4gZXhpc3RpbmcgdmFsaWRhdGlvbiBzdGVwLiBOb3csIGlmIGBwLSZndDtjaHVua19zZWN0b3JzYCB3ZXJlIDAsIHRoZW4gYGlzX3Bvd2VyX29mXzIoMClgIGV2YWx1YXRlcyB0byBmYWxzZSwgdGh1cyBuZWdhdGluZyB0byB0cnVlLiBTbyBpdCBpcyBzdGlsbCBjYXVnaHQgYW5kIHJlamVjdGVkLiBUaGVyZWZvcmUsIHRoZXJlJiMzOTtzIG5vIHdheSB3ZSYjMzk7cmUgYWNjaWRlbnRhbGx5IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyBpbmZvcm1hdGlvbiBoZXJlLCBiZWNhdXNlIGl0IGlzIG9ubHkgY2hlY2tpbmcgYSB2YWxpZGF0aW9uIHJldHVybi4gSSB3YXMgc2xpZ2h0bHkgY29uY2VybmVkIHRoYXQgdGhpcyBjb3VsZCBoYXZlIGludHJvZHVjZWQgc29tZSBraW5kIG9mIGV4cGxvaXRhYmxlIG1lbW9yeSBjb25kaXRpb24gYnV0IHRoYXQgaXMgbm90IHRoZSBjYXNlLiBUaGlzIGlzIGEgc2ltcGxlIHBvd2VyLW9mLTIgdmFsaWRhdGlvbiB0byBwcmV2ZW50IHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIG9yIG90aGVyIGlzc3VlcyB3aXRoIHpvbmVkIGRldmljZXMuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJ1dCB0aGUgZGlmZiBjb25maXJtcyBpdC4gVGhlIHBhdGNoJiMzOTtzIGltcGFjdCBpcyBtaW5pbWFsLiBUaGUgcmVzdCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBhcmUganVzdCByZWxhdGVkIHRvIHRoZSB1c2VyLXNwYWNlIHNlbGZ0ZXN0czsgc3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgYWRkZWQgdGVzdCBzdXBwb3J0IGZvciB0aGUgYHNldF9wYXJhbXNgIGNvbW1hbmQgYW5kIHZhcmlvdXMgcGFyYW1ldGVycy4KClNvLCBmcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludCwgdGhpcyBpcyBhIGxvdy1yaXNrIGNoYW5nZS4gVGhlcmUmIzM5O3Mgbm8gbWFuaXB1bGF0aW9uIG9mIG1lbW9yeSBhbGxvY2F0aW9uLCBubyBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGJlIGFidXNlZCwgYW5kIG5vIG1vZGlmaWNhdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMuIFRoZSBrZXJuZWwgY2hhbmdlIGlzIGV4Y2x1c2l2ZWx5IGEgdmFsaWRhdGlvbiBjaGVjayBvbiBhbiBleGlzdGluZyBwYXJhbWV0ZXIuIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmVhc29uIHRvIHdvcnJ5IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8gbGVha3MuIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGlzc3Vlcy4gV2UmIzM5O3JlIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AgaW4gYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AgdG8gZW5zdXJlIHRoYXQgYGNodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiBmb3Igem9uZWQgZGV2aWNlcy4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIG9mIHVwZGF0ZXMgdG8gdGhlIHVzZXItc3BhY2Ugc2VsZnRlc3RzIChgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9gKS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBrZXJuZWwgY2hhbmdlIGlzIHB1cmVseSBhIHZhbGlkYXRpb24gY2hlY2sgb24gYW4gZXhpc3RpbmcgcGFyYW1ldGVyLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHVibGtfdmFsaWRhdGVfcGFyYW1zYCBpbiBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYCB0byBlbnN1cmUgdGhhdCBgY2h1bmtfc2VjdG9yc2AgaXMgYSBwb3dlciBvZiAyIGZvciB6b25lZCBkZXZpY2VzLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggY29uc2lzdHMgb2YgdXBkYXRlcyB0byB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdHMgKGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2ApLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGtlcm5lbCBjaGFuZ2UgaXMgcHVyZWx5IGEgdmFsaWRhdGlvbiBjaGVjayBvbiBhbiBleGlzdGluZyBwYXJhbWV0ZXIuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjE0LjM4MzI2NDQwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDkzMjk5MjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1VCTEtcIixcbiAgICBcIkJMS19ERVZfWk9ORURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmxrX2N0cmxfdXJpbmdfY21kXCIsXG4gICAgXCJ1YmxrX2N0cmxfc2V0X3BhcmFtc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHVibGtfdmFsaWRhdGVfcGFyYW1zYCBpbiBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYCB0byBlbnN1cmUgdGhhdCBgY2h1bmtfc2VjdG9yc2AgaXMgYSBwb3dlciBvZiAyIGZvciB6b25lZCBkZXZpY2VzLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggY29uc2lzdHMgb2YgdXBkYXRlcyB0byB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdHMgKGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2ApLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGtlcm5lbCBjaGFuZ2UgaXMgcHVyZWx5IGEgdmFsaWRhdGlvbiBjaGVjayBvbiBhbiBleGlzdGluZyBwYXJhbWV0ZXIuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHVibGsgZHJpdmVyIHRvIGVuZm9yY2UgdGhhdCBgY2h1bmtfc2VjdG9yc2AgaXMgYSBwb3dlciBvZiAyIHdoZW4gY29uZmlndXJpbmcgYSB6b25lZCB1YmxrIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwncyB2YWxpZGF0aW9uIGxvZ2ljIGZvciB1c2VyLXByb3ZpZGVkIHBhcmFtZXRlcnMsIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgY29tbWFuZHMgb24gYC9kZXYvdWJsay1jb250cm9sYC4gVGhlIGNvZGUgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzE6MTQuMzgzMjcyMzIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE1MzQyNjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYThjMjNjZjQ0OTk3NTg2YzBmOGQzYTJiNmMwZTU4MTkwZDU1NDI4NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwMzozMToxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcXG5pbmRleCA4NTNjZDQwYTM0MDNjLi4xOTNmNmViYzNiMzdjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xcbkBAIC05ODAsNyArOTgwLDcgQEAgc3RhdGljIGludCB1YmxrX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbiBcXHRcXHRpZiAocC1cXHUwMDNlbWF4X3NlY3RvcnMgXFx1MDAzYyBQQUdFX1NFQ1RPUlMpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0XFx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSBcXHUwMDI2XFx1MDAyNiAhcC1cXHUwMDNlY2h1bmtfc2VjdG9ycylcXG4rXFx0XFx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSBcXHUwMDI2XFx1MDAyNiAhaXNfcG93ZXJfb2ZfMihwLVxcdTAwM2VjaHVua19zZWN0b3JzKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH0gZWxzZVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGVcXG5pbmRleCBhM2NlYzdiMzVkYjc3Li41ZGFmMzZjNmMzNmM0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL01ha2VmaWxlXFxuQEAgLTU1LDYgKzU1LDggQEAgVEVTVF9QUk9HUyArPSB0ZXN0X3N0cmlwZV8wNi5zaFxcbiBURVNUX1BST0dTICs9IHRlc3RfcGFydF8wMS5zaFxcbiBURVNUX1BST0dTICs9IHRlc3RfcGFydF8wMi5zaFxcbiBcXG4rVEVTVF9QUk9HUyArPSB0ZXN0X3BhcmFtc18wMS5zaFxcbitcXG4gVEVTVF9QUk9HUyArPSB0ZXN0X3NobWVtemNfMDEuc2hcXG4gVEVTVF9QUk9HUyArPSB0ZXN0X3NobWVtemNfMDIuc2hcXG4gVEVTVF9QUk9HUyArPSB0ZXN0X3NobWVtemNfMDMuc2hcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jXFxuaW5kZXggYmU1YTBkNzc1OTUyYy4uMjQwMGI0NjE1NzY2NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmNcXG5AQCAtOCw2ICs4LDEzIEBAXFxuICNpbmNsdWRlIFxcXCJrdWJsay5oXFxcIlxcbiBcXG4gI2RlZmluZSBNQVhfTlJfVEdUX0FSRyBcXHQ2NFxcbisjZGVmaW5lIEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlRcXHRcXHQ5XFxuKyNkZWZpbmUgS1VCTEtfUEFSQU1fUEhZU0lDQUxfQlNfU0hJRlRcXHRcXHQxMlxcbisjZGVmaW5lIEtVQkxLX1BBUkFNX1pPTkVfU0VDVE9SU1xcdFxcdDEyOFxcbisjZGVmaW5lIEtVQkxLX1BBUkFNX05SX1pPTkVTXFx0XFx0XFx0MTZcXG4rI2RlZmluZSBLVUJMS19QQVJBTV9ERVZfU0VDVE9SU1xcdFxcdFxcdFxcXFxcXG4rXFx0KEtVQkxLX1BBUkFNX1pPTkVfU0VDVE9SUyAqIEtVQkxLX1BBUkFNX05SX1pPTkVTKVxcbisjZGVmaW5lIEtVQkxLX1BBUkFNX1pPTkVfQVBQRU5EX1NFQ1RPUlNcXHRcXHQ4XFxuIFxcbiB1bnNpZ25lZCBpbnQgdWJsa19kYmdfbWFzayA9IFVCTEtfTE9HO1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHVibGtfdGd0X29wcyAqdGd0X29wc19saXN0W10gPSB7XFxuQEAgLTIyNyw2ICsyMzQsNTUgQEAgc3RhdGljIGludCB1YmxrX2N0cmxfZ2V0X2ZlYXR1cmVzKHN0cnVjdCB1YmxrX2RldiAqZGV2LFxcbiBcXHRyZXR1cm4gX191YmxrX2N0cmxfY21kKGRldiwgXFx1MDAyNmRhdGEpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHBhcnNlX3BhcmFtX3R5cGVzKGNvbnN0IGNoYXIgKmFyZywgX191MzIgKnR5cGVzKVxcbit7XFxuK1xcdGNoYXIgYnVmWzEyOF0sICpzYXZlID0gTlVMTCwgKnRvaztcXG4rXFxuK1xcdGlmIChzdHJsZW4oYXJnKSBcXHUwMDNlPSBzaXplb2YoYnVmKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRzdHJjcHkoYnVmLCBhcmcpO1xcbitcXHQqdHlwZXMgPSAwO1xcbitcXHR0b2sgPSBzdHJ0b2tfcihidWYsIFxcXCIsXFxcIiwgXFx1MDAyNnNhdmUpO1xcbitcXHR3aGlsZSAodG9rKSB7XFxuK1xcdFxcdGlmICghc3RyY21wKHRvaywgXFxcIm5vbmVcXFwiKSlcXG4rXFx0XFx0XFx0O1xcbitcXHRcXHRlbHNlIGlmICghc3RyY21wKHRvaywgXFxcImJhc2ljXFxcIikpXFxuK1xcdFxcdFxcdCp0eXBlcyB8PSBVQkxLX1BBUkFNX1RZUEVfQkFTSUM7XFxuK1xcdFxcdGVsc2UgaWYgKCFzdHJjbXAodG9rLCBcXFwiem9uZWRcXFwiKSlcXG4rXFx0XFx0XFx0KnR5cGVzIHw9IFVCTEtfUEFSQU1fVFlQRV9aT05FRDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0dG9rID0gc3RydG9rX3IoTlVMTCwgXFxcIixcXFwiLCBcXHUwMDI2c2F2ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB1YmxrX2luaXRfcGFyYW1zX2Zyb21fY3R4KGNvbnN0IHN0cnVjdCBkZXZfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB1YmxrX3BhcmFtcyAqcGFyYW1zKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBwYXJhbXNfY3R4ICpwID0gXFx1MDAyNmN0eC1cXHUwMDNlcGFyYW1zO1xcbitcXG4rXFx0KnBhcmFtcyA9IChzdHJ1Y3QgdWJsa19wYXJhbXMpIHtcXG4rXFx0XFx0LnR5cGVzID0gcC1cXHUwMDNldHlwZXMsXFxuK1xcdFxcdC5iYXNpYyA9IHtcXG4rXFx0XFx0XFx0LmxvZ2ljYWxfYnNfc2hpZnRcXHQ9IHAtXFx1MDAzZWxvZ2ljYWxfYnNfc2hpZnQsXFxuK1xcdFxcdFxcdC5waHlzaWNhbF9ic19zaGlmdFxcdD0gcC1cXHUwMDNlcGh5c2ljYWxfYnNfc2hpZnQsXFxuK1xcdFxcdFxcdC5pb19taW5fc2hpZnRcXHRcXHQ9IHAtXFx1MDAzZWlvX21pbl9zaGlmdCxcXG4rXFx0XFx0XFx0LmlvX29wdF9zaGlmdFxcdFxcdD0gcC1cXHUwMDNlaW9fb3B0X3NoaWZ0LFxcbitcXHRcXHRcXHQubWF4X3NlY3RvcnNcXHRcXHQ9IHAtXFx1MDAzZW1heF9zZWN0b3JzLFxcbitcXHRcXHRcXHQuY2h1bmtfc2VjdG9yc1xcdFxcdD0gcC1cXHUwMDNlY2h1bmtfc2VjdG9ycyxcXG4rXFx0XFx0XFx0LmRldl9zZWN0b3JzXFx0XFx0PSBwLVxcdTAwM2VkZXZfc2VjdG9ycyxcXG4rXFx0XFx0fSxcXG4rXFx0XFx0LnpvbmVkID0ge1xcbitcXHRcXHRcXHQubWF4X29wZW5fem9uZXNcXHRcXHQ9IHAtXFx1MDAzZW1heF9vcGVuX3pvbmVzLFxcbitcXHRcXHRcXHQubWF4X2FjdGl2ZV96b25lc1xcdD0gcC1cXHUwMDNlbWF4X2FjdGl2ZV96b25lcyxcXG4rXFx0XFx0XFx0Lm1heF96b25lX2FwcGVuZF9zZWN0b3JzID0gcC1cXHUwMDNlbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMsXFxuK1xcdFxcdH0sXFxuK1xcdH07XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdWJsa19jdHJsX3VwZGF0ZV9zaXplKHN0cnVjdCB1YmxrX2RldiAqZGV2LFxcbiBcXHRcXHRfX3U2NCBucl9zZWN0cylcXG4ge1xcbkBAIC0xNzcyLDYgKzE4MjgsNTEgQEAgc3RhdGljIGludCBfX2NtZF9kZXZfYWRkKGNvbnN0IHN0cnVjdCBkZXZfY3R4ICpjdHgpXFxuIFxcbiBzdGF0aWMgaW50IF9fY21kX2Rldl9saXN0KHN0cnVjdCBkZXZfY3R4ICpjdHgpO1xcbiBcXG4rc3RhdGljIGludCBjbWRfZGV2X3NldF9wYXJhbXMoc3RydWN0IGRldl9jdHggKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdWJsa3Nydl9jdHJsX2Rldl9pbmZvICppbmZvO1xcbitcXHRzdHJ1Y3QgdWJsa19wYXJhbXMgcGFyYW1zO1xcbitcXHRzdHJ1Y3QgdWJsa19kZXYgKmRldjtcXG4rXFx0X191NjQgZmVhdHVyZXM7XFxuK1xcdGludCByZXQsIGRlbF9yZXQ7XFxuK1xcbitcXHRkZXYgPSB1YmxrX2N0cmxfaW5pdCgpO1xcbitcXHRpZiAoIWRldilcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRyZXQgPSB1YmxrX2N0cmxfZ2V0X2ZlYXR1cmVzKGRldiwgXFx1MDAyNmZlYXR1cmVzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKCEoZmVhdHVyZXMgXFx1MDAyNiBVQkxLX0ZfQ01EX0lPQ1RMX0VOQ09ERSkpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT1RTVVA7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpbmZvID0gXFx1MDAyNmRldi1cXHUwMDNlZGV2X2luZm87XFxuK1xcdGluZm8tXFx1MDAzZWRldl9pZCA9IGN0eC1cXHUwMDNlZGV2X2lkO1xcbitcXHRpbmZvLVxcdTAwM2Vucl9od19xdWV1ZXMgPSBjdHgtXFx1MDAzZW5yX2h3X3F1ZXVlcztcXG4rXFx0aW5mby1cXHUwMDNlcXVldWVfZGVwdGggPSBjdHgtXFx1MDAzZXF1ZXVlX2RlcHRoO1xcbitcXHRpbmZvLVxcdTAwM2Vpb19kZXNjX3NpemUgPSBjdHgtXFx1MDAzZWlvX2Rlc2Nfc2l6ZTtcXG4rXFx0aW5mby1cXHUwMDNlZmxhZ3MgPSBjdHgtXFx1MDAzZWZsYWdzO1xcbitcXG4rXFx0cmV0ID0gdWJsa19jdHJsX2FkZF9kZXYoZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0dWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjdHgsIFxcdTAwMjZwYXJhbXMpO1xcbitcXG4rXFx0cmV0ID0gdWJsa19jdHJsX3NldF9wYXJhbXMoZGV2LCBcXHUwMDI2cGFyYW1zKTtcXG4rXFx0cHJpbnRmKFxcXCJTRVRfUEFSQU1TIHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXG4rXFx0ZGVsX3JldCA9IHVibGtfY3RybF9kZWxfZGV2KGRldik7XFxuK1xcdGlmIChkZWxfcmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiByZXQgPT0gMClcXG4rXFx0XFx0cmV0ID0gZGVsX3JldDtcXG4rb3V0OlxcbitcXHR1YmxrX2N0cmxfZGVpbml0KGRldik7XFxuK1xcdHJldHVybiByZXQgXFx1MDAzYyAwID8gcmV0IDogMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBjbWRfZGV2X2FkZChzdHJ1Y3QgZGV2X2N0eCAqY3R4KVxcbiB7XFxuIFxcdGludCByZXM7XFxuQEAgLTIxMTcsNiArMjIxOCw5IEBAIHN0YXRpYyBpbnQgY21kX2Rldl9oZWxwKGNoYXIgKmV4ZSlcXG4gXFx0cHJpbnRmKFxcXCJcXFxcdCAtLXNhZmUgb25seSBzdG9wIGlmIGRldmljZSBoYXMgbm8gYWN0aXZlIG9wZW5lcnNcXFxcblxcXFxuXFxcIik7XFxuIFxcdHByaW50ZihcXFwiJXMgbGlzdCBbLW4gZGV2X2lkXSAtYSBcXFxcblxcXCIsIGV4ZSk7XFxuIFxcdHByaW50ZihcXFwiXFxcXHQgLWEgbGlzdCBhbGwgZGV2aWNlcywgLW4gbGlzdCBzcGVjaWZpZWQgZGV2aWNlLCBkZWZhdWx0IC1hIFxcXFxuXFxcXG5cXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCIlcyBzZXRfcGFyYW1zIFstbiBkZXZfaWRdIFstcSBucl9xdWV1ZXNdIFstZCBkZXB0aF0gWy11XSBbLS16b25lZF1cXFxcblxcXCIsIGV4ZSk7XFxuK1xcdHByaW50ZihcXFwiXFxcXHRbLS1wYXJhbV90eXBlcyBiYXNpY1ssem9uZWRdfG5vbmVdXFxcXG5cXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCJcXFxcdCBpc3N1ZSBBRERfREVWLCBTRVRfUEFSQU1TIGFuZCBERUxfREVWIHdpdGhvdXQgU1RBUlRfREVWXFxcXG5cXFxcblxcXCIpO1xcbiBcXHRwcmludGYoXFxcIiVzIGZlYXR1cmVzXFxcXG5cXFwiLCBleGUpO1xcbiBcXHRwcmludGYoXFxcIiVzIHVwZGF0ZV9zaXplIC1uIGRldl9pZCAtc3wtLXNpemUgc2l6ZV9pbl9ieXRlcyBcXFxcblxcXCIsIGV4ZSk7XFxuIFxcdHByaW50ZihcXFwiJXMgcXVpZXNjZSAtbiBkZXZfaWRcXFxcblxcXCIsIGV4ZSk7XFxuQEAgLTIxNjAsNiArMjI2NCwxOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHR7IFxcXCJodGxiXFxcIixcXHRcXHQxLFxcdE5VTEwsICAwICB9LFxcbiBcXHRcXHR7IFxcXCJyZG9ubHlfc2htZW1fYnVmXFxcIixcXHQwLFxcdE5VTEwsICAwICB9LFxcbiBcXHRcXHR7IFxcXCJpb19kZXNjX3NpemVcXFwiLFxcdDEsXFx0TlVMTCwgIDAgIH0sXFxuK1xcdFxcdHsgXFxcInpvbmVkXFxcIixcXHRcXHQwLFxcdE5VTEwsICAwICB9LFxcbitcXHRcXHR7IFxcXCJwYXJhbV90eXBlc1xcXCIsXFx0MSxcXHROVUxMLCAgMCAgfSxcXG4rXFx0XFx0eyBcXFwibG9naWNhbF9ic19zaGlmdFxcXCIsXFx0MSxcXHROVUxMLCAgMCAgfSxcXG4rXFx0XFx0eyBcXFwicGh5c2ljYWxfYnNfc2hpZnRcXFwiLFxcdDEsXFx0TlVMTCwgIDAgIH0sXFxuK1xcdFxcdHsgXFxcImlvX21pbl9zaGlmdFxcXCIsXFx0MSxcXHROVUxMLCAgMCAgfSxcXG4rXFx0XFx0eyBcXFwiaW9fb3B0X3NoaWZ0XFxcIixcXHQxLFxcdE5VTEwsICAwICB9LFxcbitcXHRcXHR7IFxcXCJtYXhfc2VjdG9yc1xcXCIsXFx0MSxcXHROVUxMLCAgMCAgfSxcXG4rXFx0XFx0eyBcXFwiY2h1bmtfc2VjdG9yc1xcXCIsXFx0MSxcXHROVUxMLCAgMCAgfSxcXG4rXFx0XFx0eyBcXFwiZGV2X3NlY3RvcnNcXFwiLFxcdDEsXFx0TlVMTCwgIDAgIH0sXFxuK1xcdFxcdHsgXFxcIm1heF96b25lX2FwcGVuZF9zZWN0b3JzXFxcIiwgMSwgTlVMTCwgIDAgIH0sXFxuK1xcdFxcdHsgXFxcIm1heF9vcGVuX3pvbmVzXFxcIixcXHQxLFxcdE5VTEwsICAwICB9LFxcbitcXHRcXHR7IFxcXCJtYXhfYWN0aXZlX3pvbmVzXFxcIixcXHQxLFxcdE5VTEwsICAwICB9LFxcbiBcXHRcXHR7IDAsIDAsIDAsIDAgfVxcbiBcXHR9O1xcbiBcXHRjb25zdCBzdHJ1Y3QgdWJsa190Z3Rfb3BzICpvcHMgPSBOVUxMO1xcbkBAIC0yMTczLDYgKzIyODksMTkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0XFx0LnRndF90eXBlXFx0PVxcdFxcXCJ1bmtub3duXFxcIixcXG4gXFx0XFx0LmNzdW1fdHlwZVxcdD1cXHRMQk1EX1BJX0NTVU1fTk9ORSxcXG4gXFx0XFx0LmlvX2Rlc2Nfc2l6ZVxcdD1cXHRzaXplb2Yoc3RydWN0IHVibGtzcnZfaW9fZGVzYyksXFxuK1xcdFxcdC5wYXJhbXMgPSB7XFxuK1xcdFxcdFxcdC50eXBlc1xcdFxcdFxcdD0gVUJMS19QQVJBTV9UWVBFX0JBU0lDLFxcbitcXHRcXHRcXHQubG9naWNhbF9ic19zaGlmdFxcdD0gS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCxcXG4rXFx0XFx0XFx0LnBoeXNpY2FsX2JzX3NoaWZ0XFx0PSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCxcXG4rXFx0XFx0XFx0LmlvX21pbl9zaGlmdFxcdFxcdD0gS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCxcXG4rXFx0XFx0XFx0LmlvX29wdF9zaGlmdFxcdFxcdD0gS1VCTEtfUEFSQU1fUEhZU0lDQUxfQlNfU0hJRlQsXFxuK1xcdFxcdFxcdC5tYXhfc2VjdG9yc1xcdFxcdD1cXG4rXFx0XFx0XFx0XFx0VUJMS19JT19NQVhfQllURVMgXFx1MDAzZVxcdTAwM2UgS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCxcXG4rXFx0XFx0XFx0LmNodW5rX3NlY3RvcnNcXHRcXHQ9IEtVQkxLX1BBUkFNX1pPTkVfU0VDVE9SUyxcXG4rXFx0XFx0XFx0LmRldl9zZWN0b3JzXFx0XFx0PSBLVUJMS19QQVJBTV9ERVZfU0VDVE9SUyxcXG4rXFx0XFx0XFx0Lm1heF96b25lX2FwcGVuZF9zZWN0b3JzID1cXG4rXFx0XFx0XFx0XFx0S1VCTEtfUEFSQU1fWk9ORV9BUFBFTkRfU0VDVE9SUyxcXG4rXFx0XFx0fSxcXG4gXFx0fTtcXG4gXFx0aW50IHJldCA9IC1FSU5WQUwsIGk7XFxuIFxcdGludCB0Z3RfYXJnYyA9IDE7XFxuQEAgLTIyODgsNiArMjQxNywzNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHRcXHRcXHRjdHguZmxhZ3MgfD0gVUJMS19GX0lPX0RFU0NfU0laRTtcXG4gXFx0XFx0XFx0XFx0Y3R4LmlvX2Rlc2Nfc2l6ZSA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4gXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcXFwiem9uZWRcXFwiKSlcXG4rXFx0XFx0XFx0XFx0Y3R4LmZsYWdzIHw9IFVCTEtfRl9aT05FRDtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXFxcInBhcmFtX3R5cGVzXFxcIikpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gcGFyc2VfcGFyYW1fdHlwZXMob3B0YXJnLCBcXHUwMDI2Y3R4LnBhcmFtcy50eXBlcyk7XFxuK1xcdFxcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXFxcImxvZ2ljYWxfYnNfc2hpZnRcXFwiKSlcXG4rXFx0XFx0XFx0XFx0Y3R4LnBhcmFtcy5sb2dpY2FsX2JzX3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xcbitcXHRcXHRcXHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcXFwicGh5c2ljYWxfYnNfc2hpZnRcXFwiKSlcXG4rXFx0XFx0XFx0XFx0Y3R4LnBhcmFtcy5waHlzaWNhbF9ic19zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXFxcImlvX21pbl9zaGlmdFxcXCIpKVxcbitcXHRcXHRcXHRcXHRjdHgucGFyYW1zLmlvX21pbl9zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXFxcImlvX29wdF9zaGlmdFxcXCIpKVxcbitcXHRcXHRcXHRcXHRjdHgucGFyYW1zLmlvX29wdF9zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXFxcIm1heF9zZWN0b3JzXFxcIikpXFxuK1xcdFxcdFxcdFxcdGN0eC5wYXJhbXMubWF4X3NlY3RvcnMgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFxcXCJjaHVua19zZWN0b3JzXFxcIikpXFxuK1xcdFxcdFxcdFxcdGN0eC5wYXJhbXMuY2h1bmtfc2VjdG9ycyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXFxcImRldl9zZWN0b3JzXFxcIikpXFxuK1xcdFxcdFxcdFxcdGN0eC5wYXJhbXMuZGV2X3NlY3RvcnMgPSBzdHJ0b3VsbChvcHRhcmcsIE5VTEwsIDApO1xcbitcXHRcXHRcXHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcXFwibWF4X3pvbmVfYXBwZW5kX3NlY3RvcnNcXFwiKSlcXG4rXFx0XFx0XFx0XFx0Y3R4LnBhcmFtcy5tYXhfem9uZV9hcHBlbmRfc2VjdG9ycyA9XFxuK1xcdFxcdFxcdFxcdFxcdHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXFxcIm1heF9vcGVuX3pvbmVzXFxcIikpXFxuK1xcdFxcdFxcdFxcdGN0eC5wYXJhbXMubWF4X29wZW5fem9uZXMgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFxcXCJtYXhfYWN0aXZlX3pvbmVzXFxcIikpXFxuK1xcdFxcdFxcdFxcdGN0eC5wYXJhbXMubWF4X2FjdGl2ZV96b25lcyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJz8nOlxcbiBcXHRcXHRcXHQvKlxcbkBAIC0yMzc3LDcgKzI1MzQsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHRvcHMtXFx1MDAzZXBhcnNlX2NtZF9saW5lKFxcdTAwMjZjdHgsIHRndF9hcmdjLCB0Z3RfYXJndik7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghc3RyY21wKGNtZCwgXFxcImFkZFxcXCIpKVxcbitcXHRpZiAoIXN0cmNtcChjbWQsIFxcXCJzZXRfcGFyYW1zXFxcIikpXFxuK1xcdFxcdHJldCA9IGNtZF9kZXZfc2V0X3BhcmFtcyhcXHUwMDI2Y3R4KTtcXG4rXFx0ZWxzZSBpZiAoIXN0cmNtcChjbWQsIFxcXCJhZGRcXFwiKSlcXG4gXFx0XFx0cmV0ID0gY21kX2Rldl9hZGQoXFx1MDAyNmN0eCk7XFxuIFxcdGVsc2UgaWYgKCFzdHJjbXAoY21kLCBcXFwicmVjb3ZlclxcXCIpKSB7XFxuIFxcdFxcdGlmIChjdHguZGV2X2lkIFxcdTAwM2MgMCkge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmhcXG5pbmRleCBlMjdjMTU0ZmM5MTA4Li5kOThmM2Q2MTJkODg4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaFxcbkBAIC02Myw2ICs2MywyMiBAQCBzdHJ1Y3QgZmF1bHRfaW5qZWN0X2N0eCB7XFxuIFxcdGJvb2wgZGllX2R1cmluZ19mZXRjaDtcXG4gfTtcXG4gXFxuK3N0cnVjdCBwYXJhbXNfY3R4IHtcXG4rXFx0X191MzIgdHlwZXM7XFxuK1xcbitcXHRfX3UzMiBsb2dpY2FsX2JzX3NoaWZ0O1xcbitcXHRfX3UzMiBwaHlzaWNhbF9ic19zaGlmdDtcXG4rXFx0X191MzIgaW9fbWluX3NoaWZ0O1xcbitcXHRfX3UzMiBpb19vcHRfc2hpZnQ7XFxuK1xcdF9fdTMyIG1heF9zZWN0b3JzO1xcbitcXHRfX3UzMiBjaHVua19zZWN0b3JzO1xcbitcXHRfX3U2NCBkZXZfc2VjdG9ycztcXG4rXFxuK1xcdF9fdTMyIG1heF9vcGVuX3pvbmVzO1xcbitcXHRfX3UzMiBtYXhfYWN0aXZlX3pvbmVzO1xcbitcXHRfX3UzMiBtYXhfem9uZV9hcHBlbmRfc2VjdG9ycztcXG4rfTtcXG4rXFxuIHN0cnVjdCBkZXZfY3R4IHtcXG4gXFx0Y2hhciB0Z3RfdHlwZVsxNl07XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuQEAgLTk5LDYgKzExNSw4IEBAIHN0cnVjdCBkZXZfY3R4IHtcXG4gXFx0LyogZm9yICd1cGRhdGVfc2l6ZScgY29tbWFuZCAqL1xcbiBcXHR1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTtcXG4gXFxuK1xcdHN0cnVjdCBwYXJhbXNfY3R4IHBhcmFtcztcXG4rXFxuIFxcdGNoYXIgKmh0bGJfcGF0aDtcXG4gXFxuIFxcdHVuaW9uIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3BhcmFtc18wMS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjkyOGU3MmIxMDM1ZDJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3BhcmFtc18wMS5zaFxcbkBAIC0wLDAgKzEsMTE0IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKy4gXFxcIiQoY2QgXFxcIiQoZGlybmFtZSBcXFwiJDBcXFwiKVxcXCIgXFx1MDAyNlxcdTAwMjYgcHdkKVxcXCIvdGVzdF9jb21tb24uc2hcXG4rXFxuK0VSUl9DT0RFPTBcXG4rXFxuK3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MoKVxcbit7XFxuK1xcdGxvY2FsIG5hbWU9JDFcXG4rXFxuK1xcdHNoaWZ0XFxuK1xcbitcXHRlY2hvIFxcXCIkbmFtZVxcXCJcXG4rXFx0aWYgISBcXFwiJFVCTEtfUFJPR1xcXCIgc2V0X3BhcmFtcyAtcSAxIC1kIDIgXFxcIiRAXFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCIkbmFtZTogU0VUX1BBUkFNUyBjaGVjayBmYWlsZWRcXFwiXFxuK1xcdFxcdHJldHVybiAxXFxuK1xcdGZpXFxuK31cXG4rXFxuK3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUoKVxcbit7XFxuK1xcdGxvY2FsIG5hbWU9JDFcXG4rXFxuK1xcdHNoaWZ0XFxuK1xcbitcXHRlY2hvIFxcXCIkbmFtZVxcXCJcXG4rXFx0aWYgXFxcIiRVQkxLX1BST0dcXFwiIHNldF9wYXJhbXMgLXEgMSAtZCAyIFxcXCIkQFxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiJG5hbWU6IFNFVF9QQVJBTVMgc3VjY2VlZGVkIHVuZXhwZWN0ZWRseVxcXCJcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rfVxcbitcXG4rcnVuX3pvbmVkX3NldF9wYXJhbXNfc3VjY2VzcygpXFxuK3tcXG4rXFx0bG9jYWwgbmFtZT0kMVxcbitcXG4rXFx0c2hpZnRcXG4rXFxuK1xcdGVjaG8gXFxcIiRuYW1lXFxcIlxcbitcXHRpZiAhIFxcXCIkVUJMS19QUk9HXFxcIiBzZXRfcGFyYW1zIC1xIDEgLWQgMiAtdSAtLXpvbmVkIFxcXCIkQFxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiJG5hbWU6IFNFVF9QQVJBTVMgY2hlY2sgZmFpbGVkXFxcIlxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbit9XFxuK1xcbitydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlKClcXG4re1xcbitcXHRsb2NhbCBuYW1lPSQxXFxuK1xcbitcXHRzaGlmdFxcbitcXG4rXFx0ZWNobyBcXFwiJG5hbWVcXFwiXFxuK1xcdGlmIFxcXCIkVUJMS19QUk9HXFxcIiBzZXRfcGFyYW1zIC1xIDEgLWQgMiAtdSAtLXpvbmVkIFxcXCIkQFxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiJG5hbWU6IFNFVF9QQVJBTVMgc3VjY2VlZGVkIHVuZXhwZWN0ZWRseVxcXCJcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rfVxcbitcXG4rX3ByZXBfdGVzdCBcXFwicGFyYW1zXFxcIiBcXFwiU0VUX1BBUkFNUyB2YWxpZGF0aW9uXFxcIlxcbitcXG4raWYgWyAhIC1jIC9kZXYvdWJsay1jb250cm9sIF07IHRoZW5cXG4rXFx0X2NsZWFudXBfdGVzdFxcbitcXHRfc2hvd19yZXN1bHQgJFRJRCAkVUJMS19TS0lQX0NPREVcXG4rZmlcXG4rXFxuK3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MgXFxcInZhbGlkIGJhc2ljIHBhcmFtc1xcXCIgfHxcXG4rXFx0RVJSX0NPREU9MVxcbitcXG4rcnVuX3NldF9wYXJhbXNfZmFpbHVyZSBcXFwibWlzc2luZyBiYXNpYyBwYXJhbXNcXFwiIFxcXFxcXG4rXFx0LS1wYXJhbV90eXBlcyBub25lIHx8XFxuK1xcdEVSUl9DT0RFPTFcXG4rXFxuK3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUgXFxcImxvZ2ljYWwgYmxvY2sgbGFyZ2VyIHRoYW4gcGh5c2ljYWwgYmxvY2tcXFwiIFxcXFxcXG4rXFx0LS1sb2dpY2FsX2JzX3NoaWZ0IDEyIC0tcGh5c2ljYWxfYnNfc2hpZnQgOSB8fFxcbitcXHRFUlJfQ09ERT0xXFxuK1xcbitydW5fc2V0X3BhcmFtc19mYWlsdXJlIFxcXCJ0b28gbGFyZ2UgbWF4IHNlY3RvcnNcXFwiIFxcXFxcXG4rXFx0LS1tYXhfc2VjdG9ycyAyMDQ5IHx8XFxuK1xcdEVSUl9DT0RFPTFcXG4rXFxuK2lmIF9oYXZlX2ZlYXR1cmUgXFxcIlpPTkVEXFxcIiBcXHUwMDI2XFx1MDAyNiBfaGF2ZV9mZWF0dXJlIFxcXCJVU0VSX0NPUFlcXFwiOyB0aGVuXFxuK1xcdHJ1bl96b25lZF9zZXRfcGFyYW1zX3N1Y2Nlc3MgXFxcInZhbGlkIHpvbmVkIHBhcmFtc1xcXCIgXFxcXFxcbitcXHRcXHQtLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIHx8XFxuK1xcdFxcdEVSUl9DT0RFPTFcXG4rXFxuK1xcdHJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgXFxcIm1pc3Npbmcgem9uZWQgcGFyYW1zXFxcIiB8fFxcbitcXHRcXHRFUlJfQ09ERT0xXFxuK1xcbitcXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFxcXCJub24tcG93ZXItb2YtMiB6b25lIHNpemVcXFwiIFxcXFxcXG4rXFx0XFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxcXFxuK1xcdFxcdC0tY2h1bmtfc2VjdG9ycyA5NiAtLWRldl9zZWN0b3JzICQoKDk2ICogMTYpKSB8fFxcbitcXHRcXHRFUlJfQ09ERT0xXFxuK1xcbitcXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFxcXCJ6ZXJvIG1heCB6b25lIGFwcGVuZFxcXCIgXFxcXFxcbitcXHRcXHQtLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFxcXFxcXG4rXFx0XFx0LS1tYXhfem9uZV9hcHBlbmRfc2VjdG9ycyAwIHx8XFxuK1xcdFxcdEVSUl9DT0RFPTFcXG4rXFxuK1xcdHJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgXFxcInRvbyBtYW55IG9wZW4gem9uZXNcXFwiIFxcXFxcXG4rXFx0XFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxcXFxuK1xcdFxcdC0tZGV2X3NlY3RvcnMgJCgoMTI4ICogNCkpIC0tbWF4X29wZW5fem9uZXMgNSB8fFxcbitcXHRcXHRFUlJfQ09ERT0xXFxuK1xcbitcXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFxcXCJ0b28gbWFueSBhY3RpdmUgem9uZXNcXFwiIFxcXFxcXG4rXFx0XFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxcXFxuK1xcdFxcdC0tZGV2X3NlY3RvcnMgJCgoMTI4ICogNCkpIC0tbWF4X2FjdGl2ZV96b25lcyA1IHx8XFxuK1xcdFxcdEVSUl9DT0RFPTFcXG4rZWxzZVxcbitcXHRlY2hvIFxcXCJ6b25lZCB1YmxrIGZlYXR1cmUgdW5hdmFpbGFibGUsIHNraXAgem9uZWQgU0VUX1BBUkFNUyBjYXNlc1xcXCJcXG4rZmlcXG4rXFxuK19jbGVhbnVwX3Rlc3RcXG4rX3Nob3dfcmVzdWx0ICRUSUQgJEVSUl9DT0RFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjE1LjkwMTY1Mjc3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg5OTQ0MTYxNDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfVUJMS1wiLFxuICAgIFwiQkxLX0RFVl9aT05FRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVibGtfY3RybF91cmluZ19jbWRcIixcbiAgICBcInVibGtfY3RybF9zZXRfcGFyYW1zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHVibGsgZHJpdmVyIHRvIGVuZm9yY2UgdGhhdCBgY2h1bmtfc2VjdG9yc2AgaXMgYSBwb3dlciBvZiAyIHdoZW4gY29uZmlndXJpbmcgYSB6b25lZCB1YmxrIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwncyB2YWxpZGF0aW9uIGxvZ2ljIGZvciB1c2VyLXByb3ZpZGVkIHBhcmFtZXRlcnMsIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgY29tbWFuZHMgb24gYC9kZXYvdWJsay1jb250cm9sYC4gVGhlIGNvZGUgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYThjMjNjZjQ0OTk3NTg2YzBmOGQzYTJiNmMwZTU4MTkwZDU1NDI4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDAzOjMxOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5pbmRleCA4NTNjZDQwYTM0MDNjLi4xOTNmNmViYzNiMzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbkBAIC05ODAsNyArOTgwLDcgQEAgc3RhdGljIGludCB1YmxrX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxuIFx0XHRpZiAocC1cdTAwM2VtYXhfc2VjdG9ycyBcdTAwM2MgUEFHRV9TRUNUT1JTKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAodWJsa19kZXZfaXNfem9uZWQodWIpIFx1MDAyNlx1MDAyNiAhcC1cdTAwM2VjaHVua19zZWN0b3JzKVxuK1x0XHRpZiAodWJsa19kZXZfaXNfem9uZWQodWIpIFx1MDAyNlx1MDAyNiAhaXNfcG93ZXJfb2ZfMihwLVx1MDAzZWNodW5rX3NlY3RvcnMpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fSBlbHNlXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL01ha2VmaWxlXG5pbmRleCBhM2NlYzdiMzVkYjc3Li41ZGFmMzZjNmMzNmM0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZVxuQEAgLTU1LDYgKzU1LDggQEAgVEVTVF9QUk9HUyArPSB0ZXN0X3N0cmlwZV8wNi5zaFxuIFRFU1RfUFJPR1MgKz0gdGVzdF9wYXJ0XzAxLnNoXG4gVEVTVF9QUk9HUyArPSB0ZXN0X3BhcnRfMDIuc2hcbiBcbitURVNUX1BST0dTICs9IHRlc3RfcGFyYW1zXzAxLnNoXG4rXG4gVEVTVF9QUk9HUyArPSB0ZXN0X3NobWVtemNfMDEuc2hcbiBURVNUX1BST0dTICs9IHRlc3Rfc2htZW16Y18wMi5zaFxuIFRFU1RfUFJPR1MgKz0gdGVzdF9zaG1lbXpjXzAzLnNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jXG5pbmRleCBiZTVhMGQ3NzU5NTJjLi4yNDAwYjQ2MTU3NjY0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmNcbkBAIC04LDYgKzgsMTMgQEBcbiAjaW5jbHVkZSBcImt1YmxrLmhcIlxuIFxuICNkZWZpbmUgTUFYX05SX1RHVF9BUkcgXHQ2NFxuKyNkZWZpbmUgS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVFx0XHQ5XG4rI2RlZmluZSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVFx0XHQxMlxuKyNkZWZpbmUgS1VCTEtfUEFSQU1fWk9ORV9TRUNUT1JTXHRcdDEyOFxuKyNkZWZpbmUgS1VCTEtfUEFSQU1fTlJfWk9ORVNcdFx0XHQxNlxuKyNkZWZpbmUgS1VCTEtfUEFSQU1fREVWX1NFQ1RPUlNcdFx0XHRcXFxuK1x0KEtVQkxLX1BBUkFNX1pPTkVfU0VDVE9SUyAqIEtVQkxLX1BBUkFNX05SX1pPTkVTKVxuKyNkZWZpbmUgS1VCTEtfUEFSQU1fWk9ORV9BUFBFTkRfU0VDVE9SU1x0XHQ4XG4gXG4gdW5zaWduZWQgaW50IHVibGtfZGJnX21hc2sgPSBVQkxLX0xPRztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHVibGtfdGd0X29wcyAqdGd0X29wc19saXN0W10gPSB7XG5AQCAtMjI3LDYgKzIzNCw1NSBAQCBzdGF0aWMgaW50IHVibGtfY3RybF9nZXRfZmVhdHVyZXMoc3RydWN0IHVibGtfZGV2ICpkZXYsXG4gXHRyZXR1cm4gX191YmxrX2N0cmxfY21kKGRldiwgXHUwMDI2ZGF0YSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcGFyc2VfcGFyYW1fdHlwZXMoY29uc3QgY2hhciAqYXJnLCBfX3UzMiAqdHlwZXMpXG4re1xuK1x0Y2hhciBidWZbMTI4XSwgKnNhdmUgPSBOVUxMLCAqdG9rO1xuK1xuK1x0aWYgKHN0cmxlbihhcmcpIFx1MDAzZT0gc2l6ZW9mKGJ1ZikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0c3RyY3B5KGJ1ZiwgYXJnKTtcbitcdCp0eXBlcyA9IDA7XG4rXHR0b2sgPSBzdHJ0b2tfcihidWYsIFwiLFwiLCBcdTAwMjZzYXZlKTtcbitcdHdoaWxlICh0b2spIHtcbitcdFx0aWYgKCFzdHJjbXAodG9rLCBcIm5vbmVcIikpXG4rXHRcdFx0O1xuK1x0XHRlbHNlIGlmICghc3RyY21wKHRvaywgXCJiYXNpY1wiKSlcbitcdFx0XHQqdHlwZXMgfD0gVUJMS19QQVJBTV9UWVBFX0JBU0lDO1xuK1x0XHRlbHNlIGlmICghc3RyY21wKHRvaywgXCJ6b25lZFwiKSlcbitcdFx0XHQqdHlwZXMgfD0gVUJMS19QQVJBTV9UWVBFX1pPTkVEO1xuK1x0XHRlbHNlXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdHRvayA9IHN0cnRva19yKE5VTEwsIFwiLFwiLCBcdTAwMjZzYXZlKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCB1YmxrX2luaXRfcGFyYW1zX2Zyb21fY3R4KGNvbnN0IHN0cnVjdCBkZXZfY3R4ICpjdHgsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgdWJsa19wYXJhbXMgKnBhcmFtcylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcGFyYW1zX2N0eCAqcCA9IFx1MDAyNmN0eC1cdTAwM2VwYXJhbXM7XG4rXG4rXHQqcGFyYW1zID0gKHN0cnVjdCB1YmxrX3BhcmFtcykge1xuK1x0XHQudHlwZXMgPSBwLVx1MDAzZXR5cGVzLFxuK1x0XHQuYmFzaWMgPSB7XG4rXHRcdFx0LmxvZ2ljYWxfYnNfc2hpZnRcdD0gcC1cdTAwM2Vsb2dpY2FsX2JzX3NoaWZ0LFxuK1x0XHRcdC5waHlzaWNhbF9ic19zaGlmdFx0PSBwLVx1MDAzZXBoeXNpY2FsX2JzX3NoaWZ0LFxuK1x0XHRcdC5pb19taW5fc2hpZnRcdFx0PSBwLVx1MDAzZWlvX21pbl9zaGlmdCxcbitcdFx0XHQuaW9fb3B0X3NoaWZ0XHRcdD0gcC1cdTAwM2Vpb19vcHRfc2hpZnQsXG4rXHRcdFx0Lm1heF9zZWN0b3JzXHRcdD0gcC1cdTAwM2VtYXhfc2VjdG9ycyxcbitcdFx0XHQuY2h1bmtfc2VjdG9yc1x0XHQ9IHAtXHUwMDNlY2h1bmtfc2VjdG9ycyxcbitcdFx0XHQuZGV2X3NlY3RvcnNcdFx0PSBwLVx1MDAzZWRldl9zZWN0b3JzLFxuK1x0XHR9LFxuK1x0XHQuem9uZWQgPSB7XG4rXHRcdFx0Lm1heF9vcGVuX3pvbmVzXHRcdD0gcC1cdTAwM2VtYXhfb3Blbl96b25lcyxcbitcdFx0XHQubWF4X2FjdGl2ZV96b25lc1x0PSBwLVx1MDAzZW1heF9hY3RpdmVfem9uZXMsXG4rXHRcdFx0Lm1heF96b25lX2FwcGVuZF9zZWN0b3JzID0gcC1cdTAwM2VtYXhfem9uZV9hcHBlbmRfc2VjdG9ycyxcbitcdFx0fSxcbitcdH07XG4rfVxuK1xuIHN0YXRpYyBpbnQgdWJsa19jdHJsX3VwZGF0ZV9zaXplKHN0cnVjdCB1YmxrX2RldiAqZGV2LFxuIFx0XHRfX3U2NCBucl9zZWN0cylcbiB7XG5AQCAtMTc3Miw2ICsxODI4LDUxIEBAIHN0YXRpYyBpbnQgX19jbWRfZGV2X2FkZChjb25zdCBzdHJ1Y3QgZGV2X2N0eCAqY3R4KVxuIFxuIHN0YXRpYyBpbnQgX19jbWRfZGV2X2xpc3Qoc3RydWN0IGRldl9jdHggKmN0eCk7XG4gXG4rc3RhdGljIGludCBjbWRfZGV2X3NldF9wYXJhbXMoc3RydWN0IGRldl9jdHggKmN0eClcbit7XG4rXHRzdHJ1Y3QgdWJsa3Nydl9jdHJsX2Rldl9pbmZvICppbmZvO1xuK1x0c3RydWN0IHVibGtfcGFyYW1zIHBhcmFtcztcbitcdHN0cnVjdCB1YmxrX2RldiAqZGV2O1xuK1x0X191NjQgZmVhdHVyZXM7XG4rXHRpbnQgcmV0LCBkZWxfcmV0O1xuK1xuK1x0ZGV2ID0gdWJsa19jdHJsX2luaXQoKTtcbitcdGlmICghZGV2KVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldCA9IHVibGtfY3RybF9nZXRfZmVhdHVyZXMoZGV2LCBcdTAwMjZmZWF0dXJlcyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghKGZlYXR1cmVzIFx1MDAyNiBVQkxLX0ZfQ01EX0lPQ1RMX0VOQ09ERSkpIHtcbitcdFx0cmV0ID0gLUVOT1RTVVA7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aW5mbyA9IFx1MDAyNmRldi1cdTAwM2VkZXZfaW5mbztcbitcdGluZm8tXHUwMDNlZGV2X2lkID0gY3R4LVx1MDAzZWRldl9pZDtcbitcdGluZm8tXHUwMDNlbnJfaHdfcXVldWVzID0gY3R4LVx1MDAzZW5yX2h3X3F1ZXVlcztcbitcdGluZm8tXHUwMDNlcXVldWVfZGVwdGggPSBjdHgtXHUwMDNlcXVldWVfZGVwdGg7XG4rXHRpbmZvLVx1MDAzZWlvX2Rlc2Nfc2l6ZSA9IGN0eC1cdTAwM2Vpb19kZXNjX3NpemU7XG4rXHRpbmZvLVx1MDAzZWZsYWdzID0gY3R4LVx1MDAzZWZsYWdzO1xuK1xuK1x0cmV0ID0gdWJsa19jdHJsX2FkZF9kZXYoZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0dWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjdHgsIFx1MDAyNnBhcmFtcyk7XG4rXG4rXHRyZXQgPSB1YmxrX2N0cmxfc2V0X3BhcmFtcyhkZXYsIFx1MDAyNnBhcmFtcyk7XG4rXHRwcmludGYoXCJTRVRfUEFSQU1TIHJldHVybmVkICVkXFxuXCIsIHJldCk7XG4rXG4rXHRkZWxfcmV0ID0gdWJsa19jdHJsX2RlbF9kZXYoZGV2KTtcbitcdGlmIChkZWxfcmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgPT0gMClcbitcdFx0cmV0ID0gZGVsX3JldDtcbitvdXQ6XG4rXHR1YmxrX2N0cmxfZGVpbml0KGRldik7XG4rXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogMDtcbit9XG4rXG4gc3RhdGljIGludCBjbWRfZGV2X2FkZChzdHJ1Y3QgZGV2X2N0eCAqY3R4KVxuIHtcbiBcdGludCByZXM7XG5AQCAtMjExNyw2ICsyMjE4LDkgQEAgc3RhdGljIGludCBjbWRfZGV2X2hlbHAoY2hhciAqZXhlKVxuIFx0cHJpbnRmKFwiXFx0IC0tc2FmZSBvbmx5IHN0b3AgaWYgZGV2aWNlIGhhcyBubyBhY3RpdmUgb3BlbmVyc1xcblxcblwiKTtcbiBcdHByaW50ZihcIiVzIGxpc3QgWy1uIGRldl9pZF0gLWEgXFxuXCIsIGV4ZSk7XG4gXHRwcmludGYoXCJcXHQgLWEgbGlzdCBhbGwgZGV2aWNlcywgLW4gbGlzdCBzcGVjaWZpZWQgZGV2aWNlLCBkZWZhdWx0IC1hIFxcblxcblwiKTtcbitcdHByaW50ZihcIiVzIHNldF9wYXJhbXMgWy1uIGRldl9pZF0gWy1xIG5yX3F1ZXVlc10gWy1kIGRlcHRoXSBbLXVdIFstLXpvbmVkXVxcblwiLCBleGUpO1xuK1x0cHJpbnRmKFwiXFx0Wy0tcGFyYW1fdHlwZXMgYmFzaWNbLHpvbmVkXXxub25lXVxcblwiKTtcbitcdHByaW50ZihcIlxcdCBpc3N1ZSBBRERfREVWLCBTRVRfUEFSQU1TIGFuZCBERUxfREVWIHdpdGhvdXQgU1RBUlRfREVWXFxuXFxuXCIpO1xuIFx0cHJpbnRmKFwiJXMgZmVhdHVyZXNcXG5cIiwgZXhlKTtcbiBcdHByaW50ZihcIiVzIHVwZGF0ZV9zaXplIC1uIGRldl9pZCAtc3wtLXNpemUgc2l6ZV9pbl9ieXRlcyBcXG5cIiwgZXhlKTtcbiBcdHByaW50ZihcIiVzIHF1aWVzY2UgLW4gZGV2X2lkXFxuXCIsIGV4ZSk7XG5AQCAtMjE2MCw2ICsyMjY0LDE4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdHsgXCJodGxiXCIsXHRcdDEsXHROVUxMLCAgMCAgfSxcbiBcdFx0eyBcInJkb25seV9zaG1lbV9idWZcIixcdDAsXHROVUxMLCAgMCAgfSxcbiBcdFx0eyBcImlvX2Rlc2Nfc2l6ZVwiLFx0MSxcdE5VTEwsICAwICB9LFxuK1x0XHR7IFwiem9uZWRcIixcdFx0MCxcdE5VTEwsICAwICB9LFxuK1x0XHR7IFwicGFyYW1fdHlwZXNcIixcdDEsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcImxvZ2ljYWxfYnNfc2hpZnRcIixcdDEsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcInBoeXNpY2FsX2JzX3NoaWZ0XCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJpb19taW5fc2hpZnRcIixcdDEsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcImlvX29wdF9zaGlmdFwiLFx0MSxcdE5VTEwsICAwICB9LFxuK1x0XHR7IFwibWF4X3NlY3RvcnNcIixcdDEsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcImNodW5rX3NlY3RvcnNcIixcdDEsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcImRldl9zZWN0b3JzXCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJtYXhfem9uZV9hcHBlbmRfc2VjdG9yc1wiLCAxLCBOVUxMLCAgMCAgfSxcbitcdFx0eyBcIm1heF9vcGVuX3pvbmVzXCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJtYXhfYWN0aXZlX3pvbmVzXCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4gXHRcdHsgMCwgMCwgMCwgMCB9XG4gXHR9O1xuIFx0Y29uc3Qgc3RydWN0IHVibGtfdGd0X29wcyAqb3BzID0gTlVMTDtcbkBAIC0yMTczLDYgKzIyODksMTkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0LnRndF90eXBlXHQ9XHRcInVua25vd25cIixcbiBcdFx0LmNzdW1fdHlwZVx0PVx0TEJNRF9QSV9DU1VNX05PTkUsXG4gXHRcdC5pb19kZXNjX3NpemVcdD1cdHNpemVvZihzdHJ1Y3QgdWJsa3Nydl9pb19kZXNjKSxcbitcdFx0LnBhcmFtcyA9IHtcbitcdFx0XHQudHlwZXNcdFx0XHQ9IFVCTEtfUEFSQU1fVFlQRV9CQVNJQyxcbitcdFx0XHQubG9naWNhbF9ic19zaGlmdFx0PSBLVUJMS19QQVJBTV9MT0dJQ0FMX0JTX1NISUZULFxuK1x0XHRcdC5waHlzaWNhbF9ic19zaGlmdFx0PSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCxcbitcdFx0XHQuaW9fbWluX3NoaWZ0XHRcdD0gS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCxcbitcdFx0XHQuaW9fb3B0X3NoaWZ0XHRcdD0gS1VCTEtfUEFSQU1fUEhZU0lDQUxfQlNfU0hJRlQsXG4rXHRcdFx0Lm1heF9zZWN0b3JzXHRcdD1cbitcdFx0XHRcdFVCTEtfSU9fTUFYX0JZVEVTIFx1MDAzZVx1MDAzZSBLVUJMS19QQVJBTV9MT0dJQ0FMX0JTX1NISUZULFxuK1x0XHRcdC5jaHVua19zZWN0b3JzXHRcdD0gS1VCTEtfUEFSQU1fWk9ORV9TRUNUT1JTLFxuK1x0XHRcdC5kZXZfc2VjdG9yc1x0XHQ9IEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTLFxuK1x0XHRcdC5tYXhfem9uZV9hcHBlbmRfc2VjdG9ycyA9XG4rXHRcdFx0XHRLVUJMS19QQVJBTV9aT05FX0FQUEVORF9TRUNUT1JTLFxuK1x0XHR9LFxuIFx0fTtcbiBcdGludCByZXQgPSAtRUlOVkFMLCBpO1xuIFx0aW50IHRndF9hcmdjID0gMTtcbkBAIC0yMjg4LDYgKzI0MTcsMzQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0XHRcdGN0eC5mbGFncyB8PSBVQkxLX0ZfSU9fREVTQ19TSVpFO1xuIFx0XHRcdFx0Y3R4LmlvX2Rlc2Nfc2l6ZSA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbiBcdFx0XHR9XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJ6b25lZFwiKSlcbitcdFx0XHRcdGN0eC5mbGFncyB8PSBVQkxLX0ZfWk9ORUQ7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJwYXJhbV90eXBlc1wiKSkge1xuK1x0XHRcdFx0cmV0ID0gcGFyc2VfcGFyYW1fdHlwZXMob3B0YXJnLCBcdTAwMjZjdHgucGFyYW1zLnR5cGVzKTtcbitcdFx0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0fVxuK1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwibG9naWNhbF9ic19zaGlmdFwiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMubG9naWNhbF9ic19zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcInBoeXNpY2FsX2JzX3NoaWZ0XCIpKVxuK1x0XHRcdFx0Y3R4LnBhcmFtcy5waHlzaWNhbF9ic19zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcImlvX21pbl9zaGlmdFwiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMuaW9fbWluX3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuK1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwiaW9fb3B0X3NoaWZ0XCIpKVxuK1x0XHRcdFx0Y3R4LnBhcmFtcy5pb19vcHRfc2hpZnQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJtYXhfc2VjdG9yc1wiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMubWF4X3NlY3RvcnMgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJjaHVua19zZWN0b3JzXCIpKVxuK1x0XHRcdFx0Y3R4LnBhcmFtcy5jaHVua19zZWN0b3JzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuK1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwiZGV2X3NlY3RvcnNcIikpXG4rXHRcdFx0XHRjdHgucGFyYW1zLmRldl9zZWN0b3JzID0gc3RydG91bGwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcIm1heF96b25lX2FwcGVuZF9zZWN0b3JzXCIpKVxuK1x0XHRcdFx0Y3R4LnBhcmFtcy5tYXhfem9uZV9hcHBlbmRfc2VjdG9ycyA9XG4rXHRcdFx0XHRcdHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcIm1heF9vcGVuX3pvbmVzXCIpKVxuK1x0XHRcdFx0Y3R4LnBhcmFtcy5tYXhfb3Blbl96b25lcyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcIm1heF9hY3RpdmVfem9uZXNcIikpXG4rXHRcdFx0XHRjdHgucGFyYW1zLm1heF9hY3RpdmVfem9uZXMgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJz8nOlxuIFx0XHRcdC8qXG5AQCAtMjM3Nyw3ICsyNTM0LDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0b3BzLVx1MDAzZXBhcnNlX2NtZF9saW5lKFx1MDAyNmN0eCwgdGd0X2FyZ2MsIHRndF9hcmd2KTtcbiBcdH1cbiBcbi1cdGlmICghc3RyY21wKGNtZCwgXCJhZGRcIikpXG4rXHRpZiAoIXN0cmNtcChjbWQsIFwic2V0X3BhcmFtc1wiKSlcbitcdFx0cmV0ID0gY21kX2Rldl9zZXRfcGFyYW1zKFx1MDAyNmN0eCk7XG4rXHRlbHNlIGlmICghc3RyY21wKGNtZCwgXCJhZGRcIikpXG4gXHRcdHJldCA9IGNtZF9kZXZfYWRkKFx1MDAyNmN0eCk7XG4gXHRlbHNlIGlmICghc3RyY21wKGNtZCwgXCJyZWNvdmVyXCIpKSB7XG4gXHRcdGlmIChjdHguZGV2X2lkIFx1MDAzYyAwKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oXG5pbmRleCBlMjdjMTU0ZmM5MTA4Li5kOThmM2Q2MTJkODg4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmhcbkBAIC02Myw2ICs2MywyMiBAQCBzdHJ1Y3QgZmF1bHRfaW5qZWN0X2N0eCB7XG4gXHRib29sIGRpZV9kdXJpbmdfZmV0Y2g7XG4gfTtcbiBcbitzdHJ1Y3QgcGFyYW1zX2N0eCB7XG4rXHRfX3UzMiB0eXBlcztcbitcbitcdF9fdTMyIGxvZ2ljYWxfYnNfc2hpZnQ7XG4rXHRfX3UzMiBwaHlzaWNhbF9ic19zaGlmdDtcbitcdF9fdTMyIGlvX21pbl9zaGlmdDtcbitcdF9fdTMyIGlvX29wdF9zaGlmdDtcbitcdF9fdTMyIG1heF9zZWN0b3JzO1xuK1x0X191MzIgY2h1bmtfc2VjdG9ycztcbitcdF9fdTY0IGRldl9zZWN0b3JzO1xuK1xuK1x0X191MzIgbWF4X29wZW5fem9uZXM7XG4rXHRfX3UzMiBtYXhfYWN0aXZlX3pvbmVzO1xuK1x0X191MzIgbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnM7XG4rfTtcbitcbiBzdHJ1Y3QgZGV2X2N0eCB7XG4gXHRjaGFyIHRndF90eXBlWzE2XTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtOTksNiArMTE1LDggQEAgc3RydWN0IGRldl9jdHgge1xuIFx0LyogZm9yICd1cGRhdGVfc2l6ZScgY29tbWFuZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBsb25nIHNpemU7XG4gXG4rXHRzdHJ1Y3QgcGFyYW1zX2N0eCBwYXJhbXM7XG4rXG4gXHRjaGFyICpodGxiX3BhdGg7XG4gXG4gXHR1bmlvbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3BhcmFtc18wMS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45MjhlNzJiMTAzNWQyXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcGFyYW1zXzAxLnNoXG5AQCAtMCwwICsxLDExNCBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKy4gXCIkKGNkIFwiJChkaXJuYW1lIFwiJDBcIilcIiBcdTAwMjZcdTAwMjYgcHdkKVwiL3Rlc3RfY29tbW9uLnNoXG4rXG4rRVJSX0NPREU9MFxuK1xuK3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MoKVxuK3tcbitcdGxvY2FsIG5hbWU9JDFcbitcbitcdHNoaWZ0XG4rXG4rXHRlY2hvIFwiJG5hbWVcIlxuK1x0aWYgISBcIiRVQkxLX1BST0dcIiBzZXRfcGFyYW1zIC1xIDEgLWQgMiBcIiRAXCI7IHRoZW5cbitcdFx0ZWNobyBcIiRuYW1lOiBTRVRfUEFSQU1TIGNoZWNrIGZhaWxlZFwiXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK31cbitcbitydW5fc2V0X3BhcmFtc19mYWlsdXJlKClcbit7XG4rXHRsb2NhbCBuYW1lPSQxXG4rXG4rXHRzaGlmdFxuK1xuK1x0ZWNobyBcIiRuYW1lXCJcbitcdGlmIFwiJFVCTEtfUFJPR1wiIHNldF9wYXJhbXMgLXEgMSAtZCAyIFwiJEBcIjsgdGhlblxuK1x0XHRlY2hvIFwiJG5hbWU6IFNFVF9QQVJBTVMgc3VjY2VlZGVkIHVuZXhwZWN0ZWRseVwiXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK31cbitcbitydW5fem9uZWRfc2V0X3BhcmFtc19zdWNjZXNzKClcbit7XG4rXHRsb2NhbCBuYW1lPSQxXG4rXG4rXHRzaGlmdFxuK1xuK1x0ZWNobyBcIiRuYW1lXCJcbitcdGlmICEgXCIkVUJMS19QUk9HXCIgc2V0X3BhcmFtcyAtcSAxIC1kIDIgLXUgLS16b25lZCBcIiRAXCI7IHRoZW5cbitcdFx0ZWNobyBcIiRuYW1lOiBTRVRfUEFSQU1TIGNoZWNrIGZhaWxlZFwiXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK31cbitcbitydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlKClcbit7XG4rXHRsb2NhbCBuYW1lPSQxXG4rXG4rXHRzaGlmdFxuK1xuK1x0ZWNobyBcIiRuYW1lXCJcbitcdGlmIFwiJFVCTEtfUFJPR1wiIHNldF9wYXJhbXMgLXEgMSAtZCAyIC11IC0tem9uZWQgXCIkQFwiOyB0aGVuXG4rXHRcdGVjaG8gXCIkbmFtZTogU0VUX1BBUkFNUyBzdWNjZWVkZWQgdW5leHBlY3RlZGx5XCJcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rfVxuK1xuK19wcmVwX3Rlc3QgXCJwYXJhbXNcIiBcIlNFVF9QQVJBTVMgdmFsaWRhdGlvblwiXG4rXG4raWYgWyAhIC1jIC9kZXYvdWJsay1jb250cm9sIF07IHRoZW5cbitcdF9jbGVhbnVwX3Rlc3RcbitcdF9zaG93X3Jlc3VsdCAkVElEICRVQkxLX1NLSVBfQ09ERVxuK2ZpXG4rXG4rcnVuX3NldF9wYXJhbXNfc3VjY2VzcyBcInZhbGlkIGJhc2ljIHBhcmFtc1wiIHx8XG4rXHRFUlJfQ09ERT0xXG4rXG4rcnVuX3NldF9wYXJhbXNfZmFpbHVyZSBcIm1pc3NpbmcgYmFzaWMgcGFyYW1zXCIgXFxcbitcdC0tcGFyYW1fdHlwZXMgbm9uZSB8fFxuK1x0RVJSX0NPREU9MVxuK1xuK3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUgXCJsb2dpY2FsIGJsb2NrIGxhcmdlciB0aGFuIHBoeXNpY2FsIGJsb2NrXCIgXFxcbitcdC0tbG9naWNhbF9ic19zaGlmdCAxMiAtLXBoeXNpY2FsX2JzX3NoaWZ0IDkgfHxcbitcdEVSUl9DT0RFPTFcbitcbitydW5fc2V0X3BhcmFtc19mYWlsdXJlIFwidG9vIGxhcmdlIG1heCBzZWN0b3JzXCIgXFxcbitcdC0tbWF4X3NlY3RvcnMgMjA0OSB8fFxuK1x0RVJSX0NPREU9MVxuK1xuK2lmIF9oYXZlX2ZlYXR1cmUgXCJaT05FRFwiIFx1MDAyNlx1MDAyNiBfaGF2ZV9mZWF0dXJlIFwiVVNFUl9DT1BZXCI7IHRoZW5cbitcdHJ1bl96b25lZF9zZXRfcGFyYW1zX3N1Y2Nlc3MgXCJ2YWxpZCB6b25lZCBwYXJhbXNcIiBcXFxuK1x0XHQtLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIHx8XG4rXHRcdEVSUl9DT0RFPTFcbitcbitcdHJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgXCJtaXNzaW5nIHpvbmVkIHBhcmFtc1wiIHx8XG4rXHRcdEVSUl9DT0RFPTFcbitcbitcdHJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgXCJub24tcG93ZXItb2YtMiB6b25lIHNpemVcIiBcXFxuK1x0XHQtLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFxcXG4rXHRcdC0tY2h1bmtfc2VjdG9ycyA5NiAtLWRldl9zZWN0b3JzICQoKDk2ICogMTYpKSB8fFxuK1x0XHRFUlJfQ09ERT0xXG4rXG4rXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwiemVybyBtYXggem9uZSBhcHBlbmRcIiBcXFxuK1x0XHQtLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFxcXG4rXHRcdC0tbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgMCB8fFxuK1x0XHRFUlJfQ09ERT0xXG4rXG4rXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwidG9vIG1hbnkgb3BlbiB6b25lc1wiIFxcXG4rXHRcdC0tcGFyYW1fdHlwZXMgYmFzaWMsem9uZWQgXFxcbitcdFx0LS1kZXZfc2VjdG9ycyAkKCgxMjggKiA0KSkgLS1tYXhfb3Blbl96b25lcyA1IHx8XG4rXHRcdEVSUl9DT0RFPTFcbitcbitcdHJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgXCJ0b28gbWFueSBhY3RpdmUgem9uZXNcIiBcXFxuK1x0XHQtLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFxcXG4rXHRcdC0tZGV2X3NlY3RvcnMgJCgoMTI4ICogNCkpIC0tbWF4X2FjdGl2ZV96b25lcyA1IHx8XG4rXHRcdEVSUl9DT0RFPTFcbitlbHNlXG4rXHRlY2hvIFwiem9uZWQgdWJsayBmZWF0dXJlIHVuYXZhaWxhYmxlLCBza2lwIHpvbmVkIFNFVF9QQVJBTVMgY2FzZXNcIlxuK2ZpXG4rXG4rX2NsZWFudXBfdGVzdFxuK19zaG93X3Jlc3VsdCAkVElEICRFUlJfQ09ERVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzE6MTUuOTAxNjU1NjY3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQyMjYyMzMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSB1YmxrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0IHR3ZWFrcyB0aGUgYHVibGtfZHJ2LmNgIGZpbGUgYW5kIHNvbWUgYXNzb2NpYXRlZCBzZWxmLXRlc3RzLiBUaGUgY29yZSBjaGFuZ2UgaXMgYSBzaW5nbGUtbGluZSBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBgdWJsa192YWxpZGF0ZV9wYXJhbXNgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHRpZ2h0ZW5pbmcgdXAgYSB2YWxpZGF0aW9uIGNoZWNrLiAgU3BlY2lmaWNhbGx5LCBpbnN0ZWFkIG9mIGp1c3QgbWFraW5nIHN1cmUgYHAtXHUwMDNlY2h1bmtfc2VjdG9yc2AgaXMgKm5vdCogemVybyB3aGVuIGRlYWxpbmcgd2l0aCB6b25lZCBkZXZpY2VzLCB3ZSdyZSBub3cgZW5mb3JjaW5nIHRoYXQgaXQgYmUgYSBwb3dlciBvZiAyLiAgU21hcnQ7IGl0IGhlbHBzIHdpdGggYWxpZ25tZW50IGlzc3VlcywgcHJvYmFibHkuXG5cblRoZSBxdWVzdGlvbiBub3cgaXMsIGlzIHRoaXMgc29tZXRoaW5nIHdlIHNob3VsZCBjb25zaWRlciBmdXp6aW5nPyBMZXQncyBicmVhayBpdCBkb3duLiBUaGUgY2hhbmdlIGlzIGluIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHVibGsgZHJpdmVyLiAgVWJsayBpcyBhIHVzZXItc3BhY2UgYmxvY2sgZGV2aWNlIGRyaXZlciwgd2hpY2ggbWFrZXMgaXQgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB3aGljaCBpcyBnb29kIGZvciB1cy4gVGhlIGNoYW5nZSBpdHNlbGYgaXMgYSBmYWlybHkgbWlub3IgZnVuY3Rpb25hbCBmaXgsIGEgYml0IGxpa2UgZW5zdXJpbmcgdGhhdCB3ZSBhcmUgZ3VhcmRpbmcgYWdhaW5zdCBhIHBhcnRpY3VsYXIgYnVnIHdoZXJlIGEgbm9uLXBvd2VyLW9mLTIgYGNodW5rX3NlY3RvcnNgIHZhbHVlIGNvdWxkIGJlIHBhc3NlZC4gIFRoYXQgY291bGQgZGVmaW5pdGVseSBsZWFkIHRvIHByb2JsZW1zIGxhdGVyIG9uLlxuXG5TbywgeWVhaCwgaXQgc2VlbXMgbGlrZSB0aGlzIGlzIHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgcG90ZW50aWFsLiBXZSB3YW50IHRvIGJlIHN1cmUgdGhhdCB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIG9yIGV4cG9zZSBhbnkgZXhpc3Rpbmcgb25lcy4gSXQncyBhIGtlcm5lbCBmdW5jdGlvbmFsIGNoYW5nZSwgc28gaXQgaXMgcHJvYmFibHkgd29ydGggb3VyIHRpbWUuIExldCdzIGRlbHZlIGRlZXBlciBpbnRvIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AgaXRzZWxmIGFuZCBzZWUgd2hhdCBraW5kIG9mIGlucHV0cyBpdCdzIGV4cG9zZWQgdG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMToyMi4zMjQyODMwNDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MDExNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfdmFsaWRhdGVfcGFyYW1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9OTM0PXN0YXRpYyBlbnVtIGJsa19pbnRlZ3JpdHlfY2hlY2tzdW0gdWJsa19pbnRlZ3JpdHlfY3N1bV90eXBlKHU4IGNzdW1fdHlwZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy05NTAtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjk1MTpzdGF0aWMgaW50IHVibGtfdmFsaWRhdGVfcGFyYW1zKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTk1Mi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTA0Mj1zdGF0aWMgaW50IHVibGtfY3RybF9zZXRfcGFyYW1zKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTA3NC1cXHRcXHR1Yi1cXHUwMDNlcGFyYW1zLnR5cGVzIFxcdTAwMjY9IFVCTEtfUEFSQU1fVFlQRV9BTEw7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjUwNzU6XFx0XFx0cmV0ID0gdWJsa192YWxpZGF0ZV9wYXJhbXModWIpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MDc2LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjIyLjQ1MjI5OTA2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODgyMzM5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdWJsa19jdHJsX3NldF9wYXJhbXNgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBjb2RlIHNob3dzIHRoYXQgYHVibGtfY3RybF9zZXRfcGFyYW1zYCBjYWxscyBgdWJsa192YWxpZGF0ZV9wYXJhbXNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBlbnN1cmluZyBwYXJhbWV0ZXIgaW50ZWdyaXR5LiBOb3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHVibGtfY3RybF9zZXRfcGFyYW1zYCBpdHNlbGYgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjI1Ljc0MDUzNTMwNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE3MDkyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19jdHJsX3NldF9wYXJhbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01MDEyPXN0YXRpYyBpbnQgdWJsa19jdHJsX2dldF9wYXJhbXMoc3RydWN0IHVibGtfZGV2aWNlICp1YixcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MDQxLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1MDQyOnN0YXRpYyBpbnQgdWJsa19jdHJsX3NldF9wYXJhbXMoc3RydWN0IHVibGtfZGV2aWNlICp1YixcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTA0My1cXHRcXHRjb25zdCBzdHJ1Y3QgdWJsa3Nydl9jdHJsX2NtZCAqaGVhZGVyKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU3NjM9c3RhdGljIGludCB1YmxrX2N0cmxfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODM2LVxcdGNhc2UgVUJMS19DTURfU0VUX1BBUkFNUzpcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTgzNzpcXHRcXHRyZXQgPSB1YmxrX2N0cmxfc2V0X3BhcmFtcyh1YiwgXFx1MDAyNmhlYWRlcik7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4MzgtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjI1Ljg0MjI0OTI5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDY4NjYxNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgVWJsayBDb250cm9sIFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBVYmxrIGNvbnRyb2wgcGF0aCwgYW5kIG15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gZWl0aGVyIGB1YmxrX2N0cmxfdXJpbmdfY21kYCBvciBgdWJsa19jdHJsX3NldF9wYXJhbXNgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnRzLCBzbyBsZXQncyBzdGFydCB3aXRoIGB1YmxrX2N0cmxfdXJpbmdfY21kYC4gSSdsbCB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGNvbW1hbmRzIGFyZSBhY3R1YWxseSBwcm9jZXNzZWQgd2hlbiB0aGV5IGNvbWUgaW4gdmlhIHRoZSBVcmluZyBpbnRlcmZhY2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgY29yZSBpbnRlcmFjdGlvbiBtb2RlbC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IGZyb20gdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM0MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjI4Ljg4OTExNzY3M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM4ODg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1YmxrX2N0cmxfdXJpbmdfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTYxNz1zdGF0aWMgYm9vbCB1YmxrX3RyeV9idWZfbWF0Y2goc3RydWN0IHVibGtfZGV2aWNlICp1YixcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NjcwLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NjcxOnN0YXRpYyBpbnQgdWJsa19jdHJsX3VyaW5nX2NtZF9wZXJtaXNzaW9uKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU2NzItXFx0XFx0dTMyIGNtZF9vcCwgc3RydWN0IHVibGtzcnZfY3RybF9jbWQgKmhlYWRlcilcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzQ5LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NzUwOnN0YXRpYyBib29sIHVibGtfY3RybF91cmluZ19jbWRfbWF5X3NsZWVwKHUzMiBjbWRfb3ApXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NTEte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NjItXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU3NjM6c3RhdGljIGludCB1YmxrX2N0cmxfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc2NC1cXHRcXHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc3My1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTc3NDpcXHRpZiAodWJsa19jdHJsX3VyaW5nX2NtZF9tYXlfc2xlZXAoY21kX29wKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01Nzc1LVxcdCAgICBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTgwMy1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTgwNDpcXHRcXHRyZXQgPSB1YmxrX2N0cmxfdXJpbmdfY21kX3Blcm1pc3Npb24odWIsIGNtZF9vcCwgXFx1MDAyNmhlYWRlcik7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4MDUtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01ODc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY3RsX2ZvcHMgPSB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4NzUtXFx0Lm9wZW5cXHRcXHQ9IG5vbnNlZWthYmxlX29wZW4sXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU4NzY6XFx0LnVyaW5nX2NtZCAgICAgID0gdWJsa19jdHJsX3VyaW5nX2NtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTg3Ny1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMToyOC45NjI1MTI0NjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjE3OTMyNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHVibGtfY3RybF91cmluZ19jbWRgIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHVibGtfY3RybF91cmluZ19jbWRgIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgaG9vay4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGdvaW5nIHRvIGJlIHJlcXVpcmVkIGF0IHRoaXMgcG9pbnQ/IFdoYXQgbGV2ZXJzIGRvIEkgbmVlZCB0byBwdWxsIHRvIGdldCB0aGUgc3lzdGVtIGJlaGF2aW5nIHRoZSB3YXkgSSBuZWVkIGl0IHRvPyBXaGF0IHBhcmFtZXRlcnMgYW0gSSBnb2luZyB0byBleHBvc2UgdGhyb3VnaCB0aGlzIGVudHJ5PyBBcmUgdGhlcmUgc3BlY2lmaWMga25vYnMgcmVsYXRlZCB0byBob3cgSSBoYW5kbGUgdGhlIGNvbW1hbmRzIGhlcmUsIG9yIGlzIHRoaXMgbW9yZSBhYm91dCBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCBiZWZvcmUgdGhlIGNvbW1hbmRzIGJlZ2luIHByb2Nlc3Npbmc/IEkgbmVlZCB0byBtYXAgb3V0IHRoZSBpbXBvcnRhbnQgYXNwZWN0cyB0aGF0IEkgd2FudCB0byBjb25maWd1cmUgaGVyZS4gTGV0J3Mgc3RhcnQgbWFwcGluZyBvdXQgdGhlIHZhcmlvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMTozMy4xODA0NDczMzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0ODg2MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1VCTEtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0zMTU9Y29uZmlnIEJMS19ERVZfUkJEXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI3LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozMjg6Y29uZmlnIEJMS19ERVZfVUJMS1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjktXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjMzLjI1NTMzODcwN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjEwOTUzMDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgQkxLX0RFVl9VQkxLYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBCTEtfREVWX1VCTEtgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgem9vbSBpbiBvbiB0aGUgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGlzIHRoaXMgdGhpbmcgdGllZCB0bz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJpcHBsZSBlZmZlY3Qgb2YgYW55IGNoYW5nZXMgaGVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgY29yZSBibG9jayBsYXllciBpbnRlcmZhY2VzPyBEZXZpY2UgbWFwcGVyIGludGVncmF0aW9uPyBBbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIHN0b3JhZ2UgZHJpdmVycz8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBwcm9ibGVtcyBsaXZlLiBHb3R0YSBtYWtlIHN1cmUgSSBmdWxseSBncmFzcCB0aGUgZGVwZW5kZW5jaWVzIHRvIGFzc2VzcyB0aGUgc2NvcGUgb2YgdGhpcyB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDYyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzE6NDEuODY2Mjk0MDE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjg6XFx0Y29uZmlnIEJMS19ERVZfVUJMS1xcbiAzMjk6XFx0XFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcXFwiXFxuIDMzMDpcXHRcXHRzZWxlY3QgSU9fVVJJTkdcXG4gMzMxOlxcdFxcdGhlbHBcXG4gMzMyOlxcdFxcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xcbiAzMzM6XFx0XFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXFxuIDMzNDpcXHRcXHQgIGRlZmluaXRpb24gaXNuJ3QgZmluYWxpemVkIHlldCwgYW5kIG1pZ2h0IGNoYW5nZSBhY2NvcmRpbmcgdG8gZnV0dXJlXFxuIDMzNTpcXHRcXHQgIHJlcXVpcmVtZW50LCBzbyBtYXJrIGlzIGFzIGV4cGVyaW1lbnRhbCBub3cuXFxuIDMzNjpcXHRcXG4gMzM3OlxcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xcbiAzMzg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGVcXFwiXFxuIDMzOTpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfVUJMS1xcbiAzNDA6XFx0XFx0ZGVmYXVsdCB5XFxuIDM0MTpcXHRcXHRoZWxwXFxuIDM0MjpcXHRcXHQgIHVibGsgZHJpdmVyIHN0YXJ0ZWQgdG8gdGFrZSBwbGFpbiBjb21tYW5kIGVuY29kaW5nLCB3aGljaCB0dXJucyBvdXRcXG4gMzQzOlxcdFxcdCAgb25lIGJhZCB3YXkuIFRoZSB0cmFkaXRpb25hbCBpb2N0bCBjb21tYW5kIG9wY29kZSBlbmNvZGVzIG1vcmVcXG4gMzQ0OlxcdFxcdCAgaW5mbyBhbmQgYmFzaWNhbGx5IGRlZmluZXMgZWFjaCBjb2RlIHVuaXF1ZWx5LCBzbyBvcGNvZGUgY29uZmxpY3RcXG4gMzQ1OlxcdFxcdCAgaXMgYXZvaWRlZCwgYW5kIGRyaXZlciBjYW4gaGFuZGxlIHdyb25nIGNvbW1hbmQgZWFzaWx5LCBtZWFudGltZSBpdFxcbiAzNDY6XFx0XFx0ICBtYXkgaGVscCBzZWN1cml0eSBzdWJzeXN0ZW0gdG8gYXVkaXQgaW9fdXJpbmcgY29tbWFuZC5cXG4gMzQ3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMTo0MS44NjYzNTkwNzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMDAxNjgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIHVibGsgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBhbmQgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUgaXMgYEJMS19ERVZfVUJMS2AuIFJpZ2h0LCB0aGF0J3MgdGhlIGNvcmUuIEJ1dCB0aGUgY2hhbmdlIGFsc28gbW9kaWZpZXMgYHVibGtfZGV2X2lzX3pvbmVkKHViKWAuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2UgbmVlZCB0byBjb25zaWRlcjogaXMgYEJMS19ERVZfWk9ORURgIGFsc28gaW52b2x2ZWQgb3IgcG90ZW50aWFsbHkgbmVlZGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcyBjaGFuZ2U/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBjb25maWd1cmF0aW9ucyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBvcGVyYXRpbmcgYXMgaW50ZW5kZWQgYW5kIHRoYXQgbm8gYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgdGhhdCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgYSBiaXQgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUncyBhbiBpbXBhY3Qgb24gem9uZWQgYmxvY2sgZGV2aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk2OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzE6NDUuOTk2MzgwMTIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU4OTcyMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfZGV2X2lzX3pvbmVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDU1PXN0YXRpYyBpbmxpbmUgYm9vbCB1YmxrX2Rldl9zdXBwb3J0X3VzZXJfY29weShjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ1OS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDYwOnN0YXRpYyBpbmxpbmUgYm9vbCB1YmxrX2Rldl9pc196b25lZChjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00NjEte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU3Mj1zdGF0aWMgaW50IHVibGtfZGV2X3BhcmFtX3pvbmVkX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc2LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1Nzc6XFx0aWYgKCF1YmxrX2Rldl9pc196b25lZCh1YikpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz05NTE9c3RhdGljIGludCB1YmxrX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTk4Mi1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6OTgzOlxcdFxcdGlmICh1YmxrX2Rldl9pc196b25lZCh1YikgXFx1MDAyNlxcdTAwMjYgIWlzX3Bvd2VyX29mXzIocC1cXHUwMDNlY2h1bmtfc2VjdG9ycykpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTk4NC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xMDA0LVxcdFxcdHJldHVybiB1YmxrX2Rldl9wYXJhbV96b25lZF92YWxpZGF0ZSh1Yik7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjEwMDU6XFx0ZWxzZSBpZiAodWJsa19kZXZfaXNfem9uZWQodWIpKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xMDA2LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM4NTI9c3RhdGljIGludCB1YmxrX2NoZWNrX2JhdGNoX2NtZChjb25zdCBzdHJ1Y3QgdWJsa19iYXRjaF9pb19kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM4NjItXFx0aWYgKCh1Yy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBVQkxLX0JBVENIX0ZfSEFTX1pPTkVfTEJBKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozODYzOlxcdFxcdFxcdCF1YmxrX2Rldl9pc196b25lZChkYXRhLVxcdTAwM2V1YikpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM4NjQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDQ0Nz1zdGF0aWMgaW50IHVibGtfY3RybF9zdGFydF9kZXYoc3RydWN0IHVibGtfZGV2aWNlICp1YixcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00NTcwLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0NTcxOlxcdGlmICh1YmxrX2Rldl9pc196b25lZCh1YikpIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDU3Mi1cXHRcXHRyZXQgPSB1YmxrX3JldmFsaWRhdGVfZGlza196b25lcyh1Yik7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDY1Nz1zdGF0aWMgaW50IHVibGtfY3RybF9hZGRfZGV2KGNvbnN0IHN0cnVjdCB1Ymxrc3J2X2N0cmxfY21kICpoZWFkZXIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDgyNS1cXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDgyNjpcXHRpZiAodWJsa19kZXZfaXNfem9uZWQodWIpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ4MjctXFx0ICAgICghSVNfRU5BQkxFRChDT05GSUdfQkxLX0RFVl9aT05FRCkgfHwgISh1Yi1cXHUwMDNlZGV2X2luZm8uZmxhZ3MgXFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMTo0Ny4zNTUzNTg2NzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwNjc3MjkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB1YmxrIFpvbmVkIEJsb2NrIERldmljZSBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHNvIEkgc2VlIGBDT05GSUdfQkxLX0RFVl9aT05FRGAgaXMgYmVpbmcgY2hlY2tlZCB3aXRoaW4gdGhlIGB1YmxrX2N0cmxfYWRkX2RldmAgZnVuY3Rpb24uIFRoYXQncyBnb29kLCB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGZvciBoYW5kbGluZyB6b25lZCBibG9jayBkZXZpY2VzLiBNeSBuZXh0IHN0ZXAgaGVyZSBpcyBkZWZpbml0ZWx5IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoZWNrLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgd2hlbiBhIHpvbmVkIGJsb2NrIGRldmljZSBpcyBkZXRlY3RlZC5cblxuVGhlIGltcG9ydGFudCBmdW5jdGlvbiB0byBmb2N1cyBvbiBub3cgaXMgY2xlYXJseSBgdWJsa19kZXZfaXNfem9uZWRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhhdCBpcyBpbXBsZW1lbnRlZCBhbmQgd2hhdCB0aGUgZGVjaXNpb24gdHJlZSBpbiB0aGF0IGZ1bmN0aW9uIGxvb2tzIGxpa2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzIHRvIGFjdHVhbGx5IGRldGVybWluZSBpZiB0aGUgZGV2aWNlIGlzIHpvbmVkIG9yIG5vdCBhbmQgd2hhdCBmbGFncyBhcmUgc2V0IGJhc2VkIG9uIHRoYXQgZGV0ZXJtaW5hdGlvbi4gSSdtIGd1ZXNzaW5nIGl0IGxvb2tzIGF0IGEgZGV2aWNlJ3MgY2hhcmFjdGVyaXN0aWNzLCBtYXliZSBpdHMgZ2VvbWV0cnkgb3Igc29tZSBzcGVjaWZpYyBmbGFncyBpbiB0aGUgZGV2aWNlJ3MgaW5mb3JtYXRpb24gc3RydWN0dXJlLiBUaGUgY29uZmlndXJhdGlvbiBjaGVjayBoZXJlIHN1Z2dlc3RzIGB1YmxrX2N0cmxfYWRkX2RldmAgaXMgZG9pbmcgc29tZSBzZXR1cCBvciBjb25kaXRpb25hbCBpbml0aWFsaXphdGlvbiB0aGF0IHJlbGllcyBvbiB0aGUgem9uZWQvbm9uLXpvbmVkIGRpc3RpbmN0aW9uLiBOb3csIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGB1YmxrX2Rldl9pc196b25lZGAgYW5kIHNlZSBob3cgaXQncyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA0NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjUyLjM2MjEzNDUzNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgdWJsa19kZXZfaXNfem9uZWQoY29uc3Qgc3RydWN0IHVibGtfZGV2aWNlICp1YilcXG4gNDYxOlxcdHtcXG4gNDYyOlxcdFxcdHJldHVybiB1Yi1cXHUwMDNlZGV2X2luZm8uZmxhZ3MgXFx1MDAyNiBVQkxLX0ZfWk9ORUQ7XFxuIDQ2MzpcXHR9XFxuIDQ2NDpcXHRcXG4gNDY1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB1YmxrX3F1ZXVlX2lzX3pvbmVkKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXFxuIDQ2NjpcXHR7XFxuIDQ2NzpcXHRcXHRyZXR1cm4gdWJxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFVCTEtfRl9aT05FRDtcXG4gNDY4OlxcdH1cXG4gNDY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMTo1Mi4zNjIzMTg0OTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMjgzMTUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqWm9uZWQgQmxvY2sgRGV2aWNlIFRlc3RpbmcgU3RyYXRlZ3kqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBpc3N1ZSBoZXJlLCB0aGUgdGhpbmcgSSdtIGltbWVkaWF0ZWx5IGZvY3VzZWQgb24sIGlzIGVuc3VyaW5nIGEgcm9idXN0IHRlc3Qgc3VpdGUgZm9yIHRoaXMgem9uZWQgYmxvY2sgZGV2aWNlIGZ1bmN0aW9uYWxpdHkuIEl0J3MgYmVjb21pbmcgY2xlYXIgdGhhdCBhIHRydWx5IGNvbXByZWhlbnNpdmUgZXZhbHVhdGlvbiBpcyBnb2luZyB0byBoaW5nZSBvbiBwcm9wZXIgaGFuZGxpbmcgb2YgYEJMS19ERVZfWk9ORURgLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYW55IHRlc3RpbmcgSSdtIGRvaW5nIHRha2VzIHRoaXMgaW50byBhY2NvdW50LiBUaGlzIG1lYW5zIGNvbmZpcm1pbmcgYEJMS19ERVZfWk9ORURgIGlzIGFwcHJvcHJpYXRlbHkgZXhwb3NlZCB3aXRoaW4gdGhlIHN5c3RlbSdzIGNvbmZpZ3VyYXRpb24uIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IHZlcmlmeWluZyBpdHMgcHJlc2VuY2UgYXMgYSBjb25maWd1cmFibGUgb3B0aW9uLiBUaGlzIGlzIHRoZSBseW5jaHBpbiBJIG5lZWQgdG8gc2VjdXJlIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU2OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzE6NTYuNDk1MTUyOTEyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjc0OTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9aT05FRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Nzc9Y29uZmlnIEJMS19ERVZfV1JJVEVfTU9VTlRFRFxcbi0tXFxuYmxvY2svS2NvbmZpZy05Ni1cXG5ibG9jay9LY29uZmlnOjk3OmNvbmZpZyBCTEtfREVWX1pPTkVEXFxuYmxvY2svS2NvbmZpZy05OC1cXHRib29sIFxcXCJab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzE6NTYuNTY3OTA2MzUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0ODgyMDA5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFVibGsgRHJpdmVyIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBCTEtfREVWX1pPTkVEYCBjb25maWcsIHJpZ2h0PyBBbmQgYWxvbmdzaWRlIHRoYXQgd2UndmUgZ290IGBCTEtfREVWX1VCTEtgLiBSaWdodCwgZ290IGl0LiBNeSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgYXJlIGdvaW5nIHRvIGJlIGB1YmxrX2N0cmxfc2V0X3BhcmFtc2AgYW5kIGB1YmxrX2N0cmxfdXJpbmdfY21kYC5cblxuRmlyc3QsIGxldCBtZSBjaGVjayBpZiBgdWJsa19jdHJsX3NldF9wYXJhbXNgIGlzIHN0YXRpYy4gWWVzLCBpdCBpcy4gSG1tLCB3YWl0IGEgc2Vjb25kLCB0aGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gcHJlZmVyICpub24tc3RhdGljLCBub24taW5saW5lZCogZW50cnkgcG9pbnRzLiBJbnRlcm5hbCBzdGF0aWMgaGVscGVycywgdGhlIHByb21wdCBzdGF0ZXMsIGdldCBpbmxpbmVkIGFuZCBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuXG5cblJpZ2h0LCBzbyBgdWJsa19jdHJsX3NldF9wYXJhbXNgIGJlaW5nIHN0YXRpYyBpcyBhIHBvdGVudGlhbCBpc3N1ZS4gTGV0J3Mgc2VlLi4uIGV2ZW4gdGhvdWdoIGl0ICppcyogc3RhdGljLCBpdCdzIGNhbGxlZCBmcm9tIHdpdGhpbiBgdWJsa19jdHJsX3VyaW5nX2NtZGAsIHdoaWNoIGlzIGEgc3dpdGNoIGNhc2UsIHNvIGl0ICptaWdodCogbm90IGJlIGlubGluZWQuIEJ1dCwgYHVibGtfY3RybF91cmluZ19jbWRgIGl0c2VsZiBpcyBkZWZpbml0ZWx5IGFuIGVudHJ5IHBvaW50LiBUaGF0J3MgZ29vZC5cblxuU28sIGxldCdzIGxvb2sgYXQgYHVibGtfY3RybF91cmluZ19jbWRgLiBPa2F5LCBpdCdzIGFsc28gc3RhdGljLCBidXQgaXQncyBhc3NpZ25lZCB0byBgdWJsa19jdGxfZm9wcy51cmluZ19jbWRgLiBUaGF0IGFzc2lnbm1lbnQgaW1wbGllcyBpdCBoYXMgYSBkZWZpbmVkIHN5bWJvbCwgcmVnYXJkbGVzcyBvZiB0aGUgYHN0YXRpY2AgZGVjbGFyYXRpb24uIE5vdywgSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUncyBhbnkgKm5vbiotc3RhdGljIGZ1bmN0aW9uIHRoYXQgSSBjYW4gcG9pbnQgdG8uXG5cbkxldCdzIGRpZyBpbnRvIGB1YmxrX2N0cmxfdXJpbmdfY21kYCBhZ2Fpbiwgbm93IGluIGBkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgaXMgYW4gYXBwcm9wcmlhdGUgZW50cnkgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODcyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMyOjA0LjA1NjEwOTg0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEwNzM5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19jdHJsX3VyaW5nX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU2MTc9c3RhdGljIGJvb2wgdWJsa190cnlfYnVmX21hdGNoKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTY3MC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTY3MTpzdGF0aWMgaW50IHVibGtfY3RybF91cmluZ19jbWRfcGVybWlzc2lvbihzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NjcyLVxcdFxcdHUzMiBjbWRfb3AsIHN0cnVjdCB1Ymxrc3J2X2N0cmxfY21kICpoZWFkZXIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc0OS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTc1MDpzdGF0aWMgYm9vbCB1YmxrX2N0cmxfdXJpbmdfY21kX21heV9zbGVlcCh1MzIgY21kX29wKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzUxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzYyLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NzYzOnN0YXRpYyBpbnQgdWJsa19jdHJsX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NjQtXFx0XFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NzMtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU3NzQ6XFx0aWYgKHVibGtfY3RybF91cmluZ19jbWRfbWF5X3NsZWVwKGNtZF9vcCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc3NS1cXHQgICAgaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4MDMtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU4MDQ6XFx0XFx0cmV0ID0gdWJsa19jdHJsX3VyaW5nX2NtZF9wZXJtaXNzaW9uKHViLCBjbWRfb3AsIFxcdTAwMjZoZWFkZXIpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODA1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTg3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2N0bF9mb3BzID0ge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODc1LVxcdC5vcGVuXFx0XFx0PSBub25zZWVrYWJsZV9vcGVuLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1ODc2OlxcdC51cmluZ19jbWQgICAgICA9IHVibGtfY3RybF91cmluZ19jbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4NzctXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzI6MDQuMTQ3MTg4ODgyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzQ4OTQwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgdWJsayBEcml2ZXIgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gYHVibGtfY3RybF91cmluZ19jbWRgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgYSBmdW5jdGlvbiB0aGF0IHNlZW1zIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IGZyb20gdGhlIHVzZXJzcGFjZSByaW5nIGJ1ZmZlci4gVGhhdCdzIGEgYml0IHVudXN1YWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgZHJpdmVyIGFyZSBhbHNvIGRlZmluZWQgYXMgc3RhdGljLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYWNjZXNzIGFuZCBwb3RlbnRpYWwgdmlzaWJpbGl0eSBvZiBkaWZmZXJlbnQgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gbG9vayB0aHJvdWdoIGB1YmxrX2Rydi5jYCBub3cgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCB3b3VsZCBpbmRpY2F0ZSBob3cgdXNlcnNwYWNlIGNvbW11bmljYXRlcyB3aXRoIHRoZSBibG9jayBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTU0LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzI6MDguNjIyMDg2MDA1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY5NjUyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogdWJsa19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xMTMtLyogdWJsayBiYXRjaCBmZXRjaCB1cmluZ19jbWQgKi9cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTE0OnN0cnVjdCB1YmxrX2JhdGNoX2ZldGNoX2NtZCB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTExNS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTE5LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxMjA6c3RydWN0IHVibGtfdXJpbmdfY21kX3BkdSB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTEyMS1cXHQvKlxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE0NS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTQ2OnN0cnVjdCB1YmxrX2JhdGNoX2lvX2RhdGEge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNDctXFx0c3RydWN0IHVibGtfZGV2aWNlICp1YjtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMDMtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIwNDp1bmlvbiB1YmxrX2lvX2J1ZiB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIwNS1cXHRfX3U2NFxcdGFkZHI7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjA4LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMDk6c3RydWN0IHVibGtfaW8ge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTAtXFx0dW5pb24gdWJsa19pb19idWYgYnVmO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI0MS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjQyOnN0cnVjdCB1YmxrX3F1ZXVlIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjQzLVxcdHUxNiBxX2lkO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwNC0vKiBNYXBsZSB0cmVlIHZhbHVlOiBtYXBzIGEgUEZOIHJhbmdlIHRvIGJ1ZmZlciBsb2NhdGlvbiAqL1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDU6c3RydWN0IHVibGtfYnVmX3JhbmdlIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzA2LVxcdHVuc2lnbmVkIHNob3J0IGJ1Zl9pbmRleDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMTAtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMxMTpzdHJ1Y3QgdWJsa19kZXZpY2Uge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMTItXFx0c3RydWN0IGdlbmRpc2tcXHRcXHQqdWJfZGlzaztcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTEtLyogaGVhZGVyIG9mIHVibGtfcGFyYW1zICovXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1MjpzdHJ1Y3QgdWJsa19wYXJhbXNfaGVhZGVyIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzLVxcdF9fdTMyXFx0bGVuO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTUwNj1zdGF0aWMgdm9pZCB1YmxrX2luaXRfaW9kKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTMyLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1MzM6c3RydWN0IHVibGtfem9uZWRfcmVwb3J0X2Rlc2Mge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MzQtXFx0X191NjQgc2VjdG9yO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM1NzE9dWJsa19iYXRjaF9hdXRvX2J1Zl9yZWcoY29uc3Qgc3RydWN0IHVibGtfYmF0Y2hfaW8gKnVjLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1ODctI2RlZmluZSBVQkxLX0NNRF9CQVRDSF9UTVBfQlVGX1NaICAoNDggKiAxMClcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzU4ODpzdHJ1Y3QgdWJsa19iYXRjaF9pb19pdGVyIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU4OS1cXHR2b2lkIF9fdXNlciAqdWFkZHI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMyOjA4Ljc0OTA1NTUxNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTE0NTI5Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSByb2xlIG9mIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgdWJsa19kcnYuY2AncyBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgYHVibGtfZHJ2LmNgIGNvZGUsIG15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgbW9zdCBvZiB0aGUgZnVuY3Rpb25zIGFyZSBsaWtlbHkgZGVjbGFyZWQgc3RhdGljLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGRyaXZlciBtb2R1bGVzLCBlc3BlY2lhbGx5IHRoZSBsb3dlci1sZXZlbCBjb21wb25lbnRzLiBUaGlzIGRlc2lnbiBrZWVwcyB0aG9zZSBmdW5jdGlvbnMgaW50ZXJuYWwgdG8gdGhlIGZpbGUsIHByb21vdGluZyBtb2R1bGFyaXR5IGFuZCBwcmV2ZW50aW5nIGFjY2lkZW50YWwgbmFtaW5nIGNvbGxpc2lvbnMuIFRoZSBrZXkgaW50ZXJlc3QgcmlnaHQgbm93IGxpZXMgaW4gdGhlIGVudHJ5IHBvaW50cy4gU28sIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTGV0IG1lIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCBleGl0IHJvdXRpbmVzLiBUaGF0IHdvdWxkIGludm9sdmUgc2VhcmNoaW5nIGZvciBgbW9kdWxlX2luaXRgIChvciwgaW4gb2xkZXIga2VybmVscywgbWF5YmUganVzdCBhbiBgaW5pdGAgZnVuY3Rpb24pIGFuZCBgbW9kdWxlX2V4aXRgIG1hY3JvcyBvciB0aGVpciBlcXVpdmFsZW50LiBUaGF0IHdpbGwgYmUgbXkgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGFuIGlkZWEgb2YgaG93IHRoaXMgbW9kdWxlIGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsLiBJJ2xsIGZvY3VzIG9uIHRoZXNlIGluaXRpYWwgZW50cnkgYW5kIGV4aXQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI3MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMyOjEyLjg2MzU4NzE5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMzMTgwNzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgdWJsa19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMjoxMi45NTY5MTE5NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU5NDQ5NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGp1bXBpbmcgaW50byB0aGlzIGNvZGUgYW5kLCBhcyBhbHdheXMsIHRoZSBmaXJzdCBwbGFjZSBJIHdhbnQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaXMgaG93IHRoZSBvYmplY3RzIGFyZSBjb25zdHJ1Y3RlZC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYF9faW5pdF9fYCBtZXRob2RzLiBUaGV5IGFyZSB0aGUgYmVkcm9jayBvZiBvYmplY3QgaW5pdGlhbGl6YXRpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNsYXNzIGFuZCBpdHMgcG90ZW50aWFsIHN1cGVyY2xhc3NlcyBhcmUgYmVpbmcgc2V0IHVwLiBXaGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgYWNjZXB0ZWQ/IFdoYXQgZGF0YSBpcyBiZWluZyBpbml0aWFsaXplZCBhbmQgaG93PyBBbnkgc2lkZSBlZmZlY3RzIEkgbmVlZCB0byB3YXRjaCBvdXQgZm9yIGluIHRoZSBwcm9jZXNzIG9mIGNvbnN0cnVjdGlvbj8gV2hhdCBjYWxscyBhcmUgbWFkZSB0byBvdGhlciBmdW5jdGlvbnMgZHVyaW5nIGluaXRpYWxpemF0aW9uPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG90ZW50aWFsIGlzc3VlcywgbGlrZSBtdXRhYmxlIGRlZmF1bHQgYXJndW1lbnRzPyBMZXQncyB0cmFjZSBpdCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTU0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzI6MTcuNDE2Mzc0NzMzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzkyNTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01ODgxPXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB1YmxrX21pc2MgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTg4Ni1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTg4NzpzdGF0aWMgaW50IF9faW5pdCB1YmxrX2luaXQodm9pZClcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTg4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMyOjE3LjQ3MDMwNjU2MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzY3Njc3Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHVibGsgQVBJIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIHRhc2tlZCB3aXRoIGlkZW50aWZ5aW5nIHRoZSBiZXN0IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyB0aGUgdWJsayBkcml2ZXIuIFRoZSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGB1YmxrX2N0cmxfdXJpbmdfY21kYCBhbmQgYHVibGtfY3RybF9zZXRfcGFyYW1zYCwgYXNzdW1pbmcgdGhhdCwgZXZlbiBpZiB0aGV5IGFyZSBzdGF0aWMsIHRoZSBmdXp6ZXIgY291bGQgc3RpbGwgbWFrZSB1c2Ugb2YgdGhlaXIgc3ltYm9scyBvciBqdXN0IGZ1enogdGhlIGlvX3VyaW5nIGNvbW1hbmRzLlxuXG5UaGVuIEkgcmVhbGl6ZWQgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbnMuIEkgaW1tZWRpYXRlbHkgY2hlY2tlZCBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBxdWlja2x5IGZvdW5kIHRoYXQgdGhlIGZpcnN0IHR3byBmdW5jdGlvbnMgSSB0aG91Z2h0IG9mIGFyZSBzdGF0aWMuIEkgZG91YmxlLWNoZWNrZWQgYHVibGtfdmFsaWRhdGVfcGFyYW1zYCwgYW5kIGl0IGlzIGFsc28gc3RhdGljLlxuXG5TaW5jZSB0aGVyZSBkb24ndCBzZWVtIHRvIGJlIGFueSBvYnZpb3VzIG5vbi1zdGF0aWMgQVBJIGVudHJ5IHBvaW50cywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgb25lcyBJJ20gcHJvdmlkaW5nIGFyZW4ndCBpbmxpbmVkLiBUaGUgcHJvbXB0IGFsc28gbm90ZXMgdGhhdCBpbmxpbmVkIGZ1bmN0aW9ucyBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEdpdmVuIHRoYXQgaXRzIGFkZHJlc3MgaXMgdGFrZW4sIEknbSBjb25maWRlbnQgdGhhdCBgdWJsa19jdHJsX3VyaW5nX2NtZGAgaXMgbm90IGlubGluZWQsIGFuZCBzaW5jZSBgdWJsa19jdHJsX3NldF9wYXJhbXNgIGlzIGEgc2l6YWJsZSBmdW5jdGlvbiwgSSdtIGdvaW5nIHRvIGFzc3VtZSBpdCBpcyBhbHNvIG5vdCBpbmxpbmVkLlxuXG5UaGUgY2FsbCBzdGFjayBjb25maXJtcyBteSBzdXNwaWNpb25zOyBgdWJsa192YWxpZGF0ZV9wYXJhbXNgIGlzIGNhbGxlZCBmcm9tIGB1YmxrX2N0cmxfc2V0X3BhcmFtc2AgYW5kIGB1YmxrX2N0cmxfYWRkX2RldmAuIEdpdmVuIHRoZSBhZHZpY2UgZnJvbSB0aGUgcHJvbXB0LCB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGB1YmxrX2N0cmxfdXJpbmdfY21kYCBhbmQgYHVibGtfY3RybF9zZXRfcGFyYW1zYC5cblxuRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgbm90ZSB0aGUgY29uZmlncyBJIHdhcyBjb25zaWRlcmluZyB3ZXJlIGBCTEtfREVWX1VCTEtgIGFuZCBgQkxLX0RFVl9aT05FRGAgYW5kIHRoYXQgdGhlIGZvcm1lciBpcyB0aGUgb25lIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBmb3IgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg2MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMjoyNi4yMzc5ODc3MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzI4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzI4OlxcdGNvbmZpZyBCTEtfREVWX1VCTEtcXG4gMzI5OlxcdFxcdHRyaXN0YXRlIFxcXCJVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXFxcIlxcbiAzMzA6XFx0XFx0c2VsZWN0IElPX1VSSU5HXFxuIDMzMTpcXHRcXHRoZWxwXFxuIDMzMjpcXHRcXHQgIGlvX3VyaW5nIGJhc2VkIHVzZXJzcGFjZSBibG9jayBkcml2ZXIuIFRvZ2V0aGVyIHdpdGggdWJsayBzZXJ2ZXIsIHVibGtcXG4gMzMzOlxcdFxcdCAgaGFzIGJlZW4gd29ya2luZyB3ZWxsLCBidXQgaW50ZXJmYWNlIHdpdGggdXNlcnNwYWNlIG9yIGNvbW1hbmQgZGF0YVxcbiAzMzQ6XFx0XFx0ICBkZWZpbml0aW9uIGlzbid0IGZpbmFsaXplZCB5ZXQsIGFuZCBtaWdodCBjaGFuZ2UgYWNjb3JkaW5nIHRvIGZ1dHVyZVxcbiAzMzU6XFx0XFx0ICByZXF1aXJlbWVudCwgc28gbWFyayBpcyBhcyBleHBlcmltZW50YWwgbm93LlxcbiAzMzY6XFx0XFxuIDMzNzpcXHRjb25maWcgQkxLREVWX1VCTEtfTEVHQUNZX09QQ09ERVNcXG4gMzM4OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgbGVnYWN5IGNvbW1hbmQgb3Bjb2RlXFxcIlxcbiAzMzk6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfREVWX1VCTEtcXG4gMzQwOlxcdFxcdGRlZmF1bHQgeVxcbiAzNDE6XFx0XFx0aGVscFxcbiAzNDI6XFx0XFx0ICB1YmxrIGRyaXZlciBzdGFydGVkIHRvIHRha2UgcGxhaW4gY29tbWFuZCBlbmNvZGluZywgd2hpY2ggdHVybnMgb3V0XFxuIDM0MzpcXHRcXHQgIG9uZSBiYWQgd2F5LiBUaGUgdHJhZGl0aW9uYWwgaW9jdGwgY29tbWFuZCBvcGNvZGUgZW5jb2RlcyBtb3JlXFxuIDM0NDpcXHRcXHQgIGluZm8gYW5kIGJhc2ljYWxseSBkZWZpbmVzIGVhY2ggY29kZSB1bmlxdWVseSwgc28gb3Bjb2RlIGNvbmZsaWN0XFxuIDM0NTpcXHRcXHQgIGlzIGF2b2lkZWQsIGFuZCBkcml2ZXIgY2FuIGhhbmRsZSB3cm9uZyBjb21tYW5kIGVhc2lseSwgbWVhbnRpbWUgaXRcXG4gMzQ2OlxcdFxcdCAgbWF5IGhlbHAgc2VjdXJpdHkgc3Vic3lzdGVtIHRvIGF1ZGl0IGlvX3VyaW5nIGNvbW1hbmQuXFxuIDM0NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzI6MjYuMjM4MDc2MDZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ0NTY5MzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSU9fVVJJTkcgYW5kIFpvbmVkIEJsb2NrIERldmljZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gdGhlIHN5c3RlbSBpcyBjaG9vc2luZyBgSU9fVVJJTkdgLiBHb29kLCB0aGF0J3MgZ2VuZXJhbGx5IHRoZSByaWdodCBkaXJlY3Rpb24gZm9yIG1vZGVybiBJL08uIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgQkxLX0RFVl9aT05FRGAgY29udGluZ2VudCBvbiBzb21ldGhpbmcgc3BlY2lmaWM/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzLiBJIGtub3cgaXQgKnNob3VsZG4ndCogYmUgYSBtYWpvciBpc3N1ZSwgYnV0IEkgd2FudCB0byBlbnN1cmUgdGhhdCBteSBhc3N1bXB0aW9ucyByZWdhcmRpbmcgd2hpY2ggb3RoZXIgdGhpbmdzIGFyZSBuZWVkZWQgYXJlIGNvcnJlY3QuIERvbid0IHdhbnQgYW55IHN1cnByaXNlcyBsYXRlci4gR290dGEgc3RheSBzaGFycCBhbmQgbWFrZSBzdXJlIHRoaXMgaXMgc2V0IHVwIGNvcnJlY3RseS4gTGV0J3MgZGlnIGRlZXBlciBhbmQgdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBpcyBsaW5pbmcgdXAgbmljZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk3MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzI6MzMuNjgzNzcyODVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTc6XFx0Y29uZmlnIEJMS19ERVZfWk9ORURcXG4gIDk4OlxcdFxcdGJvb2wgXFxcIlpvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAgOTk6XFx0XFx0aGVscFxcbiAxMDA6XFx0XFx0QmxvY2sgbGF5ZXIgem9uZWQgYmxvY2sgZGV2aWNlIHN1cHBvcnQuIFRoaXMgb3B0aW9uIGVuYWJsZXNcXG4gMTAxOlxcdFxcdHN1cHBvcnQgZm9yIFpBQy9aQkMvWk5TIGhvc3QtbWFuYWdlZCBhbmQgaG9zdC1hd2FyZSB6b25lZCBibG9ja1xcbiAxMDI6XFx0XFx0ZGV2aWNlcy5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0U2F5IHllcyBoZXJlIGlmIHlvdSBoYXZlIGEgWkFDLCBaQkMsIG9yIFpOUyBzdG9yYWdlIGRldmljZS5cXG4gMTA1OlxcdFxcbiAxMDY6XFx0Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xcbiAxMDc6XFx0XFx0Ym9vbCBcXFwiQmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydFxcXCJcXG4gMTA4OlxcdFxcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxcbiAxMDk6XFx0XFx0c2VsZWN0IEJMS19DR1JPVVBfUldTVEFUXFxuIDExMDpcXHRcXHRoZWxwXFxuIDExMTpcXHRcXHRCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0LiBJdCBjYW4gYmUgdXNlZCB0byBsaW1pdFxcbiAxMTI6XFx0XFx0dGhlIElPIHJhdGUgdG8gYSBkZXZpY2UuIElPIHJhdGUgcG9saWNpZXMgYXJlIHBlciBjZ3JvdXAgYW5kXFxuIDExMzpcXHRcXHRvbmUgbmVlZHMgdG8gbW91bnQgYW5kIHVzZSBibGtpbyBjZ3JvdXAgY29udHJvbGxlciBmb3IgY3JlYXRpbmdcXG4gMTE0OlxcdFxcdGNncm91cHMgYW5kIHNwZWNpZnlpbmcgcGVyIGRldmljZSBJTyByYXRlIHBvbGljaWVzLlxcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvYmxraW8tY29udHJvbGxlci5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMyOjMzLjY4MzkzNjU5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTk2Njc1MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFVCTEsgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZXJlIGFyZSBubyBkZXBlbmRlbmNpZXMgZm9yIGBCTEtfREVWX1pPTkVEYCwgd2hpY2ggaW1tZWRpYXRlbHkgc2ltcGxpZmllcyB0aGluZ3MuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYEJMS19ERVZfVUJMS2AgYW5kIGBCTEtfREVWX1pPTkVEYCwgYW5kIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgYHVibGtfY3RybF91cmluZ19jbWRgIGFuZCBgdWJsa19jdHJsX3NldF9wYXJhbXNgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cy5cblxuV2FpdCwgaG9sZCBvbiBhIHNlY29uZOKApiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaXNuJ3QgKmp1c3QqIGNvcmUga2VybmVsIGNvZGUuIEl0IGFsc28gdG91Y2hlcyBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuY2AgYW5kIGFkZHMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2hgLiBTZWxmdGVzdHMgYXJlbid0IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsLCBJIGtub3cgdGhhdCwgYnV0IHRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYC4gVGhpcyBpc24ndCBqdXN0IGEgY29zbWV0aWMgdHdlYWs7IGl0J3MgYSBmaXggdG8gYSB2YWxpZGF0aW9uIGNoZWNrLiBUaGUgcGF0Y2ggaXMgZW5mb3JjaW5nIHRoYXQgYGNodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiB3aGVuIGNvbmZpZ3VyaW5nIGEgem9uZWQgdWJsayBkZXZpY2UuXG5cbkNydWNpYWxseSwgdGhpcyBjaGFuZ2UgaXMgdHJpZ2dlcmVkIGJ5IHVzZXItc3VwcGxpZWQgcGFyYW1ldGVycyB0aHJvdWdoIGlvX3VyaW5nIGNvbW1hbmRzIG9uIGAvZGV2L3VibGstY29udHJvbGAuIFNvLCBpdCdzIHVzZXItYWNjZXNzaWJsZSBrZXJuZWwgY29kZSwgYW5kIGl04oCZcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW4gYmUgZXhlY3V0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBHaXZlbiB0aGlzIHJlYWNoYWJpbGl0eSBhbmQgdGhlIGZhY3QgdGhhdCBpdCdzIGEgdmFsaWRhdGlvbiBmaXgsIGFuZCB0aHVzIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgdG8gbWlzZm9ybWVkIGlucHV0IEkgY29uY2x1ZGUgaXQncyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBnb2FsIG9mIGZ1enppbmcgd2lsbCBiZSB0byBwcm9iZSB0aGlzIHBhcmFtZXRlciB2YWxpZGF0aW9uLlxuXG5UaGVyZWZvcmUsIGZvciB0aGUgZnV6emluZyBzZXR1cCwgbXkgY29uZmlncyB3aWxsIGJlIGBCTEtfREVWX1VCTEtgLCBgQkxLX0RFVl9aT05FRGAsIGFuZCBteSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYHVibGtfY3RybF91cmluZ19jbWRgLCBgdWJsa19jdHJsX3NldF9wYXJhbXNgLiBJIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlc2UgdmFsdWVzLiBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIGBjaHVua19zZWN0b3JzYCB2YWxpZGF0aW9uIGluIG15IGZ1enppbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTEyLCJPdXRwdXRUb2tlbnMiOjE1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMyOjQ1LjY4MDYxNTYzM1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTE5NTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9VQkxLXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWJsa19jdHJsX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19jdHJsX3NldF9wYXJhbXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdWJsayBkcml2ZXIgdG8gZW5mb3JjZSB0aGF0IGBjaHVua19zZWN0b3JzYCBpcyBhIHBvd2VyIG9mIDIgd2hlbiBjb25maWd1cmluZyBhIHpvbmVkIHVibGsgZGV2aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGtlcm5lbCdzIHZhbGlkYXRpb24gbG9naWMgZm9yIHVzZXItcHJvdmlkZWQgcGFyYW1ldGVycywgcmVhY2hhYmxlIHZpYSBpb191cmluZyBjb21tYW5kcyBvbiBgL2Rldi91YmxrLWNvbnRyb2xgLiBUaGUgY29kZSBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfVUJMS1wiLFxuICAgIFwiQkxLX0RFVl9aT05FRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVibGtfY3RybF91cmluZ19jbWRcIixcbiAgICBcInVibGtfY3RybF9zZXRfcGFyYW1zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHVibGsgZHJpdmVyIHRvIGVuZm9yY2UgdGhhdCBgY2h1bmtfc2VjdG9yc2AgaXMgYSBwb3dlciBvZiAyIHdoZW4gY29uZmlndXJpbmcgYSB6b25lZCB1YmxrIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwncyB2YWxpZGF0aW9uIGxvZ2ljIGZvciB1c2VyLXByb3ZpZGVkIHBhcmFtZXRlcnMsIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgY29tbWFuZHMgb24gYC9kZXYvdWJsay1jb250cm9sYC4gVGhlIGNvZGUgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzI6NDUuODQ1ODE3NTkxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDcwNDI3MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzI6NDUuODQ2MzAwMzYxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk0Njk5Mzg2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AgaW4gYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AgdG8gZW5zdXJlIHRoYXQgYGNodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiBmb3Igem9uZWQgZGV2aWNlcy4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIG9mIHVwZGF0ZXMgdG8gdGhlIHVzZXItc3BhY2Ugc2VsZnRlc3RzIChgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9gKS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBrZXJuZWwgY2hhbmdlIGlzIHB1cmVseSBhIHZhbGlkYXRpb24gY2hlY2sgb24gYW4gZXhpc3RpbmcgcGFyYW1ldGVyLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4YzIzY2Y0NDk5NzU4NmMwZjhkM2EyYjZjMGU1ODE5MGQ1NTQyODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwMzozMToxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuaW5kZXggODUzY2Q0MGEzNDAzYy4uMTkzZjZlYmMzYjM3YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5AQCAtOTgwLDcgKzk4MCw3IEBAIHN0YXRpYyBpbnQgdWJsa192YWxpZGF0ZV9wYXJhbXMoY29uc3Qgc3RydWN0IHVibGtfZGV2aWNlICp1YilcbiBcdFx0aWYgKHAtXHUwMDNlbWF4X3NlY3RvcnMgXHUwMDNjIFBBR0VfU0VDVE9SUylcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSBcdTAwMjZcdTAwMjYgIXAtXHUwMDNlY2h1bmtfc2VjdG9ycylcbitcdFx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSBcdTAwMjZcdTAwMjYgIWlzX3Bvd2VyX29mXzIocC1cdTAwM2VjaHVua19zZWN0b3JzKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH0gZWxzZVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZVxuaW5kZXggYTNjZWM3YjM1ZGI3Ny4uNWRhZjM2YzZjMzZjNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGVcbkBAIC01NSw2ICs1NSw4IEBAIFRFU1RfUFJPR1MgKz0gdGVzdF9zdHJpcGVfMDYuc2hcbiBURVNUX1BST0dTICs9IHRlc3RfcGFydF8wMS5zaFxuIFRFU1RfUFJPR1MgKz0gdGVzdF9wYXJ0XzAyLnNoXG4gXG4rVEVTVF9QUk9HUyArPSB0ZXN0X3BhcmFtc18wMS5zaFxuK1xuIFRFU1RfUFJPR1MgKz0gdGVzdF9zaG1lbXpjXzAxLnNoXG4gVEVTVF9QUk9HUyArPSB0ZXN0X3NobWVtemNfMDIuc2hcbiBURVNUX1BST0dTICs9IHRlc3Rfc2htZW16Y18wMy5zaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuY1xuaW5kZXggYmU1YTBkNzc1OTUyYy4uMjQwMGI0NjE1NzY2NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jXG5AQCAtOCw2ICs4LDEzIEBAXG4gI2luY2x1ZGUgXCJrdWJsay5oXCJcbiBcbiAjZGVmaW5lIE1BWF9OUl9UR1RfQVJHIFx0NjRcbisjZGVmaW5lIEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlRcdFx0OVxuKyNkZWZpbmUgS1VCTEtfUEFSQU1fUEhZU0lDQUxfQlNfU0hJRlRcdFx0MTJcbisjZGVmaW5lIEtVQkxLX1BBUkFNX1pPTkVfU0VDVE9SU1x0XHQxMjhcbisjZGVmaW5lIEtVQkxLX1BBUkFNX05SX1pPTkVTXHRcdFx0MTZcbisjZGVmaW5lIEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTXHRcdFx0XFxcbitcdChLVUJMS19QQVJBTV9aT05FX1NFQ1RPUlMgKiBLVUJMS19QQVJBTV9OUl9aT05FUylcbisjZGVmaW5lIEtVQkxLX1BBUkFNX1pPTkVfQVBQRU5EX1NFQ1RPUlNcdFx0OFxuIFxuIHVuc2lnbmVkIGludCB1YmxrX2RiZ19tYXNrID0gVUJMS19MT0c7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCB1YmxrX3RndF9vcHMgKnRndF9vcHNfbGlzdFtdID0ge1xuQEAgLTIyNyw2ICsyMzQsNTUgQEAgc3RhdGljIGludCB1YmxrX2N0cmxfZ2V0X2ZlYXR1cmVzKHN0cnVjdCB1YmxrX2RldiAqZGV2LFxuIFx0cmV0dXJuIF9fdWJsa19jdHJsX2NtZChkZXYsIFx1MDAyNmRhdGEpO1xuIH1cbiBcbitzdGF0aWMgaW50IHBhcnNlX3BhcmFtX3R5cGVzKGNvbnN0IGNoYXIgKmFyZywgX191MzIgKnR5cGVzKVxuK3tcbitcdGNoYXIgYnVmWzEyOF0sICpzYXZlID0gTlVMTCwgKnRvaztcbitcbitcdGlmIChzdHJsZW4oYXJnKSBcdTAwM2U9IHNpemVvZihidWYpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHN0cmNweShidWYsIGFyZyk7XG4rXHQqdHlwZXMgPSAwO1xuK1x0dG9rID0gc3RydG9rX3IoYnVmLCBcIixcIiwgXHUwMDI2c2F2ZSk7XG4rXHR3aGlsZSAodG9rKSB7XG4rXHRcdGlmICghc3RyY21wKHRvaywgXCJub25lXCIpKVxuK1x0XHRcdDtcbitcdFx0ZWxzZSBpZiAoIXN0cmNtcCh0b2ssIFwiYmFzaWNcIikpXG4rXHRcdFx0KnR5cGVzIHw9IFVCTEtfUEFSQU1fVFlQRV9CQVNJQztcbitcdFx0ZWxzZSBpZiAoIXN0cmNtcCh0b2ssIFwiem9uZWRcIikpXG4rXHRcdFx0KnR5cGVzIHw9IFVCTEtfUEFSQU1fVFlQRV9aT05FRDtcbitcdFx0ZWxzZVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR0b2sgPSBzdHJ0b2tfcihOVUxMLCBcIixcIiwgXHUwMDI2c2F2ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgdWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjb25zdCBzdHJ1Y3QgZGV2X2N0eCAqY3R4LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHVibGtfcGFyYW1zICpwYXJhbXMpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHBhcmFtc19jdHggKnAgPSBcdTAwMjZjdHgtXHUwMDNlcGFyYW1zO1xuK1xuK1x0KnBhcmFtcyA9IChzdHJ1Y3QgdWJsa19wYXJhbXMpIHtcbitcdFx0LnR5cGVzID0gcC1cdTAwM2V0eXBlcyxcbitcdFx0LmJhc2ljID0ge1xuK1x0XHRcdC5sb2dpY2FsX2JzX3NoaWZ0XHQ9IHAtXHUwMDNlbG9naWNhbF9ic19zaGlmdCxcbitcdFx0XHQucGh5c2ljYWxfYnNfc2hpZnRcdD0gcC1cdTAwM2VwaHlzaWNhbF9ic19zaGlmdCxcbitcdFx0XHQuaW9fbWluX3NoaWZ0XHRcdD0gcC1cdTAwM2Vpb19taW5fc2hpZnQsXG4rXHRcdFx0LmlvX29wdF9zaGlmdFx0XHQ9IHAtXHUwMDNlaW9fb3B0X3NoaWZ0LFxuK1x0XHRcdC5tYXhfc2VjdG9yc1x0XHQ9IHAtXHUwMDNlbWF4X3NlY3RvcnMsXG4rXHRcdFx0LmNodW5rX3NlY3RvcnNcdFx0PSBwLVx1MDAzZWNodW5rX3NlY3RvcnMsXG4rXHRcdFx0LmRldl9zZWN0b3JzXHRcdD0gcC1cdTAwM2VkZXZfc2VjdG9ycyxcbitcdFx0fSxcbitcdFx0LnpvbmVkID0ge1xuK1x0XHRcdC5tYXhfb3Blbl96b25lc1x0XHQ9IHAtXHUwMDNlbWF4X29wZW5fem9uZXMsXG4rXHRcdFx0Lm1heF9hY3RpdmVfem9uZXNcdD0gcC1cdTAwM2VtYXhfYWN0aXZlX3pvbmVzLFxuK1x0XHRcdC5tYXhfem9uZV9hcHBlbmRfc2VjdG9ycyA9IHAtXHUwMDNlbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMsXG4rXHRcdH0sXG4rXHR9O1xuK31cbitcbiBzdGF0aWMgaW50IHVibGtfY3RybF91cGRhdGVfc2l6ZShzdHJ1Y3QgdWJsa19kZXYgKmRldixcbiBcdFx0X191NjQgbnJfc2VjdHMpXG4ge1xuQEAgLTE3NzIsNiArMTgyOCw1MSBAQCBzdGF0aWMgaW50IF9fY21kX2Rldl9hZGQoY29uc3Qgc3RydWN0IGRldl9jdHggKmN0eClcbiBcbiBzdGF0aWMgaW50IF9fY21kX2Rldl9saXN0KHN0cnVjdCBkZXZfY3R4ICpjdHgpO1xuIFxuK3N0YXRpYyBpbnQgY21kX2Rldl9zZXRfcGFyYW1zKHN0cnVjdCBkZXZfY3R4ICpjdHgpXG4re1xuK1x0c3RydWN0IHVibGtzcnZfY3RybF9kZXZfaW5mbyAqaW5mbztcbitcdHN0cnVjdCB1YmxrX3BhcmFtcyBwYXJhbXM7XG4rXHRzdHJ1Y3QgdWJsa19kZXYgKmRldjtcbitcdF9fdTY0IGZlYXR1cmVzO1xuK1x0aW50IHJldCwgZGVsX3JldDtcbitcbitcdGRldiA9IHVibGtfY3RybF9pbml0KCk7XG4rXHRpZiAoIWRldilcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRyZXQgPSB1YmxrX2N0cmxfZ2V0X2ZlYXR1cmVzKGRldiwgXHUwMDI2ZmVhdHVyZXMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoIShmZWF0dXJlcyBcdTAwMjYgVUJMS19GX0NNRF9JT0NUTF9FTkNPREUpKSB7XG4rXHRcdHJldCA9IC1FTk9UU1VQO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGluZm8gPSBcdTAwMjZkZXYtXHUwMDNlZGV2X2luZm87XG4rXHRpbmZvLVx1MDAzZWRldl9pZCA9IGN0eC1cdTAwM2VkZXZfaWQ7XG4rXHRpbmZvLVx1MDAzZW5yX2h3X3F1ZXVlcyA9IGN0eC1cdTAwM2Vucl9od19xdWV1ZXM7XG4rXHRpbmZvLVx1MDAzZXF1ZXVlX2RlcHRoID0gY3R4LVx1MDAzZXF1ZXVlX2RlcHRoO1xuK1x0aW5mby1cdTAwM2Vpb19kZXNjX3NpemUgPSBjdHgtXHUwMDNlaW9fZGVzY19zaXplO1xuK1x0aW5mby1cdTAwM2VmbGFncyA9IGN0eC1cdTAwM2VmbGFncztcbitcbitcdHJldCA9IHVibGtfY3RybF9hZGRfZGV2KGRldik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHVibGtfaW5pdF9wYXJhbXNfZnJvbV9jdHgoY3R4LCBcdTAwMjZwYXJhbXMpO1xuK1xuK1x0cmV0ID0gdWJsa19jdHJsX3NldF9wYXJhbXMoZGV2LCBcdTAwMjZwYXJhbXMpO1xuK1x0cHJpbnRmKFwiU0VUX1BBUkFNUyByZXR1cm5lZCAlZFxcblwiLCByZXQpO1xuK1xuK1x0ZGVsX3JldCA9IHVibGtfY3RybF9kZWxfZGV2KGRldik7XG4rXHRpZiAoZGVsX3JldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgcmV0ID09IDApXG4rXHRcdHJldCA9IGRlbF9yZXQ7XG4rb3V0OlxuK1x0dWJsa19jdHJsX2RlaW5pdChkZXYpO1xuK1x0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgY21kX2Rldl9hZGQoc3RydWN0IGRldl9jdHggKmN0eClcbiB7XG4gXHRpbnQgcmVzO1xuQEAgLTIxMTcsNiArMjIxOCw5IEBAIHN0YXRpYyBpbnQgY21kX2Rldl9oZWxwKGNoYXIgKmV4ZSlcbiBcdHByaW50ZihcIlxcdCAtLXNhZmUgb25seSBzdG9wIGlmIGRldmljZSBoYXMgbm8gYWN0aXZlIG9wZW5lcnNcXG5cXG5cIik7XG4gXHRwcmludGYoXCIlcyBsaXN0IFstbiBkZXZfaWRdIC1hIFxcblwiLCBleGUpO1xuIFx0cHJpbnRmKFwiXFx0IC1hIGxpc3QgYWxsIGRldmljZXMsIC1uIGxpc3Qgc3BlY2lmaWVkIGRldmljZSwgZGVmYXVsdCAtYSBcXG5cXG5cIik7XG4rXHRwcmludGYoXCIlcyBzZXRfcGFyYW1zIFstbiBkZXZfaWRdIFstcSBucl9xdWV1ZXNdIFstZCBkZXB0aF0gWy11XSBbLS16b25lZF1cXG5cIiwgZXhlKTtcbitcdHByaW50ZihcIlxcdFstLXBhcmFtX3R5cGVzIGJhc2ljWyx6b25lZF18bm9uZV1cXG5cIik7XG4rXHRwcmludGYoXCJcXHQgaXNzdWUgQUREX0RFViwgU0VUX1BBUkFNUyBhbmQgREVMX0RFViB3aXRob3V0IFNUQVJUX0RFVlxcblxcblwiKTtcbiBcdHByaW50ZihcIiVzIGZlYXR1cmVzXFxuXCIsIGV4ZSk7XG4gXHRwcmludGYoXCIlcyB1cGRhdGVfc2l6ZSAtbiBkZXZfaWQgLXN8LS1zaXplIHNpemVfaW5fYnl0ZXMgXFxuXCIsIGV4ZSk7XG4gXHRwcmludGYoXCIlcyBxdWllc2NlIC1uIGRldl9pZFxcblwiLCBleGUpO1xuQEAgLTIxNjAsNiArMjI2NCwxOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHR7IFwiaHRsYlwiLFx0XHQxLFx0TlVMTCwgIDAgIH0sXG4gXHRcdHsgXCJyZG9ubHlfc2htZW1fYnVmXCIsXHQwLFx0TlVMTCwgIDAgIH0sXG4gXHRcdHsgXCJpb19kZXNjX3NpemVcIixcdDEsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcInpvbmVkXCIsXHRcdDAsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcInBhcmFtX3R5cGVzXCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJsb2dpY2FsX2JzX3NoaWZ0XCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJwaHlzaWNhbF9ic19zaGlmdFwiLFx0MSxcdE5VTEwsICAwICB9LFxuK1x0XHR7IFwiaW9fbWluX3NoaWZ0XCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJpb19vcHRfc2hpZnRcIixcdDEsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcIm1heF9zZWN0b3JzXCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJjaHVua19zZWN0b3JzXCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJkZXZfc2VjdG9yc1wiLFx0MSxcdE5VTEwsICAwICB9LFxuK1x0XHR7IFwibWF4X3pvbmVfYXBwZW5kX3NlY3RvcnNcIiwgMSwgTlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJtYXhfb3Blbl96b25lc1wiLFx0MSxcdE5VTEwsICAwICB9LFxuK1x0XHR7IFwibWF4X2FjdGl2ZV96b25lc1wiLFx0MSxcdE5VTEwsICAwICB9LFxuIFx0XHR7IDAsIDAsIDAsIDAgfVxuIFx0fTtcbiBcdGNvbnN0IHN0cnVjdCB1YmxrX3RndF9vcHMgKm9wcyA9IE5VTEw7XG5AQCAtMjE3Myw2ICsyMjg5LDE5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdC50Z3RfdHlwZVx0PVx0XCJ1bmtub3duXCIsXG4gXHRcdC5jc3VtX3R5cGVcdD1cdExCTURfUElfQ1NVTV9OT05FLFxuIFx0XHQuaW9fZGVzY19zaXplXHQ9XHRzaXplb2Yoc3RydWN0IHVibGtzcnZfaW9fZGVzYyksXG4rXHRcdC5wYXJhbXMgPSB7XG4rXHRcdFx0LnR5cGVzXHRcdFx0PSBVQkxLX1BBUkFNX1RZUEVfQkFTSUMsXG4rXHRcdFx0LmxvZ2ljYWxfYnNfc2hpZnRcdD0gS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCxcbitcdFx0XHQucGh5c2ljYWxfYnNfc2hpZnRcdD0gS1VCTEtfUEFSQU1fUEhZU0lDQUxfQlNfU0hJRlQsXG4rXHRcdFx0LmlvX21pbl9zaGlmdFx0XHQ9IEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlQsXG4rXHRcdFx0LmlvX29wdF9zaGlmdFx0XHQ9IEtVQkxLX1BBUkFNX1BIWVNJQ0FMX0JTX1NISUZULFxuK1x0XHRcdC5tYXhfc2VjdG9yc1x0XHQ9XG4rXHRcdFx0XHRVQkxLX0lPX01BWF9CWVRFUyBcdTAwM2VcdTAwM2UgS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCxcbitcdFx0XHQuY2h1bmtfc2VjdG9yc1x0XHQ9IEtVQkxLX1BBUkFNX1pPTkVfU0VDVE9SUyxcbitcdFx0XHQuZGV2X3NlY3RvcnNcdFx0PSBLVUJMS19QQVJBTV9ERVZfU0VDVE9SUyxcbitcdFx0XHQubWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgPVxuK1x0XHRcdFx0S1VCTEtfUEFSQU1fWk9ORV9BUFBFTkRfU0VDVE9SUyxcbitcdFx0fSxcbiBcdH07XG4gXHRpbnQgcmV0ID0gLUVJTlZBTCwgaTtcbiBcdGludCB0Z3RfYXJnYyA9IDE7XG5AQCAtMjI4OCw2ICsyNDE3LDM0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdFx0XHRjdHguZmxhZ3MgfD0gVUJMS19GX0lPX0RFU0NfU0laRTtcbiBcdFx0XHRcdGN0eC5pb19kZXNjX3NpemUgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4gXHRcdFx0fVxuK1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwiem9uZWRcIikpXG4rXHRcdFx0XHRjdHguZmxhZ3MgfD0gVUJMS19GX1pPTkVEO1xuK1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwicGFyYW1fdHlwZXNcIikpIHtcbitcdFx0XHRcdHJldCA9IHBhcnNlX3BhcmFtX3R5cGVzKG9wdGFyZywgXHUwMDI2Y3R4LnBhcmFtcy50eXBlcyk7XG4rXHRcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcImxvZ2ljYWxfYnNfc2hpZnRcIikpXG4rXHRcdFx0XHRjdHgucGFyYW1zLmxvZ2ljYWxfYnNfc2hpZnQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJwaHlzaWNhbF9ic19zaGlmdFwiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMucGh5c2ljYWxfYnNfc2hpZnQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJpb19taW5fc2hpZnRcIikpXG4rXHRcdFx0XHRjdHgucGFyYW1zLmlvX21pbl9zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcImlvX29wdF9zaGlmdFwiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMuaW9fb3B0X3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuK1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwibWF4X3NlY3RvcnNcIikpXG4rXHRcdFx0XHRjdHgucGFyYW1zLm1heF9zZWN0b3JzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuK1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwiY2h1bmtfc2VjdG9yc1wiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMuY2h1bmtfc2VjdG9ycyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcImRldl9zZWN0b3JzXCIpKVxuK1x0XHRcdFx0Y3R4LnBhcmFtcy5kZXZfc2VjdG9ycyA9IHN0cnRvdWxsKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJtYXhfem9uZV9hcHBlbmRfc2VjdG9yc1wiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMubWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgPVxuK1x0XHRcdFx0XHRzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJtYXhfb3Blbl96b25lc1wiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMubWF4X29wZW5fem9uZXMgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJtYXhfYWN0aXZlX3pvbmVzXCIpKVxuK1x0XHRcdFx0Y3R4LnBhcmFtcy5tYXhfYWN0aXZlX3pvbmVzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICc/JzpcbiBcdFx0XHQvKlxuQEAgLTIzNzcsNyArMjUzNCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdG9wcy1cdTAwM2VwYXJzZV9jbWRfbGluZShcdTAwMjZjdHgsIHRndF9hcmdjLCB0Z3RfYXJndik7XG4gXHR9XG4gXG4tXHRpZiAoIXN0cmNtcChjbWQsIFwiYWRkXCIpKVxuK1x0aWYgKCFzdHJjbXAoY21kLCBcInNldF9wYXJhbXNcIikpXG4rXHRcdHJldCA9IGNtZF9kZXZfc2V0X3BhcmFtcyhcdTAwMjZjdHgpO1xuK1x0ZWxzZSBpZiAoIXN0cmNtcChjbWQsIFwiYWRkXCIpKVxuIFx0XHRyZXQgPSBjbWRfZGV2X2FkZChcdTAwMjZjdHgpO1xuIFx0ZWxzZSBpZiAoIXN0cmNtcChjbWQsIFwicmVjb3ZlclwiKSkge1xuIFx0XHRpZiAoY3R4LmRldl9pZCBcdTAwM2MgMCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaFxuaW5kZXggZTI3YzE1NGZjOTEwOC4uZDk4ZjNkNjEyZDg4OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oXG5AQCAtNjMsNiArNjMsMjIgQEAgc3RydWN0IGZhdWx0X2luamVjdF9jdHgge1xuIFx0Ym9vbCBkaWVfZHVyaW5nX2ZldGNoO1xuIH07XG4gXG4rc3RydWN0IHBhcmFtc19jdHgge1xuK1x0X191MzIgdHlwZXM7XG4rXG4rXHRfX3UzMiBsb2dpY2FsX2JzX3NoaWZ0O1xuK1x0X191MzIgcGh5c2ljYWxfYnNfc2hpZnQ7XG4rXHRfX3UzMiBpb19taW5fc2hpZnQ7XG4rXHRfX3UzMiBpb19vcHRfc2hpZnQ7XG4rXHRfX3UzMiBtYXhfc2VjdG9ycztcbitcdF9fdTMyIGNodW5rX3NlY3RvcnM7XG4rXHRfX3U2NCBkZXZfc2VjdG9ycztcbitcbitcdF9fdTMyIG1heF9vcGVuX3pvbmVzO1xuK1x0X191MzIgbWF4X2FjdGl2ZV96b25lcztcbitcdF9fdTMyIG1heF96b25lX2FwcGVuZF9zZWN0b3JzO1xuK307XG4rXG4gc3RydWN0IGRldl9jdHgge1xuIFx0Y2hhciB0Z3RfdHlwZVsxNl07XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuQEAgLTk5LDYgKzExNSw4IEBAIHN0cnVjdCBkZXZfY3R4IHtcbiBcdC8qIGZvciAndXBkYXRlX3NpemUnIGNvbW1hbmQgKi9cbiBcdHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplO1xuIFxuK1x0c3RydWN0IHBhcmFtc19jdHggcGFyYW1zO1xuK1xuIFx0Y2hhciAqaHRsYl9wYXRoO1xuIFxuIFx0dW5pb24ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcGFyYW1zXzAxLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTI4ZTcyYjEwMzVkMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3BhcmFtc18wMS5zaFxuQEAgLTAsMCArMSwxMTQgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisuIFwiJChjZCBcIiQoZGlybmFtZSBcIiQwXCIpXCIgXHUwMDI2XHUwMDI2IHB3ZClcIi90ZXN0X2NvbW1vbi5zaFxuK1xuK0VSUl9DT0RFPTBcbitcbitydW5fc2V0X3BhcmFtc19zdWNjZXNzKClcbit7XG4rXHRsb2NhbCBuYW1lPSQxXG4rXG4rXHRzaGlmdFxuK1xuK1x0ZWNobyBcIiRuYW1lXCJcbitcdGlmICEgXCIkVUJMS19QUk9HXCIgc2V0X3BhcmFtcyAtcSAxIC1kIDIgXCIkQFwiOyB0aGVuXG4rXHRcdGVjaG8gXCIkbmFtZTogU0VUX1BBUkFNUyBjaGVjayBmYWlsZWRcIlxuK1x0XHRyZXR1cm4gMVxuK1x0Zmlcbit9XG4rXG4rcnVuX3NldF9wYXJhbXNfZmFpbHVyZSgpXG4re1xuK1x0bG9jYWwgbmFtZT0kMVxuK1xuK1x0c2hpZnRcbitcbitcdGVjaG8gXCIkbmFtZVwiXG4rXHRpZiBcIiRVQkxLX1BST0dcIiBzZXRfcGFyYW1zIC1xIDEgLWQgMiBcIiRAXCI7IHRoZW5cbitcdFx0ZWNobyBcIiRuYW1lOiBTRVRfUEFSQU1TIHN1Y2NlZWRlZCB1bmV4cGVjdGVkbHlcIlxuK1x0XHRyZXR1cm4gMVxuK1x0Zmlcbit9XG4rXG4rcnVuX3pvbmVkX3NldF9wYXJhbXNfc3VjY2VzcygpXG4re1xuK1x0bG9jYWwgbmFtZT0kMVxuK1xuK1x0c2hpZnRcbitcbitcdGVjaG8gXCIkbmFtZVwiXG4rXHRpZiAhIFwiJFVCTEtfUFJPR1wiIHNldF9wYXJhbXMgLXEgMSAtZCAyIC11IC0tem9uZWQgXCIkQFwiOyB0aGVuXG4rXHRcdGVjaG8gXCIkbmFtZTogU0VUX1BBUkFNUyBjaGVjayBmYWlsZWRcIlxuK1x0XHRyZXR1cm4gMVxuK1x0Zmlcbit9XG4rXG4rcnVuX3pvbmVkX3NldF9wYXJhbXNfZmFpbHVyZSgpXG4re1xuK1x0bG9jYWwgbmFtZT0kMVxuK1xuK1x0c2hpZnRcbitcbitcdGVjaG8gXCIkbmFtZVwiXG4rXHRpZiBcIiRVQkxLX1BST0dcIiBzZXRfcGFyYW1zIC1xIDEgLWQgMiAtdSAtLXpvbmVkIFwiJEBcIjsgdGhlblxuK1x0XHRlY2hvIFwiJG5hbWU6IFNFVF9QQVJBTVMgc3VjY2VlZGVkIHVuZXhwZWN0ZWRseVwiXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK31cbitcbitfcHJlcF90ZXN0IFwicGFyYW1zXCIgXCJTRVRfUEFSQU1TIHZhbGlkYXRpb25cIlxuK1xuK2lmIFsgISAtYyAvZGV2L3VibGstY29udHJvbCBdOyB0aGVuXG4rXHRfY2xlYW51cF90ZXN0XG4rXHRfc2hvd19yZXN1bHQgJFRJRCAkVUJMS19TS0lQX0NPREVcbitmaVxuK1xuK3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MgXCJ2YWxpZCBiYXNpYyBwYXJhbXNcIiB8fFxuK1x0RVJSX0NPREU9MVxuK1xuK3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUgXCJtaXNzaW5nIGJhc2ljIHBhcmFtc1wiIFxcXG4rXHQtLXBhcmFtX3R5cGVzIG5vbmUgfHxcbitcdEVSUl9DT0RFPTFcbitcbitydW5fc2V0X3BhcmFtc19mYWlsdXJlIFwibG9naWNhbCBibG9jayBsYXJnZXIgdGhhbiBwaHlzaWNhbCBibG9ja1wiIFxcXG4rXHQtLWxvZ2ljYWxfYnNfc2hpZnQgMTIgLS1waHlzaWNhbF9ic19zaGlmdCA5IHx8XG4rXHRFUlJfQ09ERT0xXG4rXG4rcnVuX3NldF9wYXJhbXNfZmFpbHVyZSBcInRvbyBsYXJnZSBtYXggc2VjdG9yc1wiIFxcXG4rXHQtLW1heF9zZWN0b3JzIDIwNDkgfHxcbitcdEVSUl9DT0RFPTFcbitcbitpZiBfaGF2ZV9mZWF0dXJlIFwiWk9ORURcIiBcdTAwMjZcdTAwMjYgX2hhdmVfZmVhdHVyZSBcIlVTRVJfQ09QWVwiOyB0aGVuXG4rXHRydW5fem9uZWRfc2V0X3BhcmFtc19zdWNjZXNzIFwidmFsaWQgem9uZWQgcGFyYW1zXCIgXFxcbitcdFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCB8fFxuK1x0XHRFUlJfQ09ERT0xXG4rXG4rXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwibWlzc2luZyB6b25lZCBwYXJhbXNcIiB8fFxuK1x0XHRFUlJfQ09ERT0xXG4rXG4rXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwibm9uLXBvd2VyLW9mLTIgem9uZSBzaXplXCIgXFxcbitcdFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxuK1x0XHQtLWNodW5rX3NlY3RvcnMgOTYgLS1kZXZfc2VjdG9ycyAkKCg5NiAqIDE2KSkgfHxcbitcdFx0RVJSX0NPREU9MVxuK1xuK1x0cnVuX3pvbmVkX3NldF9wYXJhbXNfZmFpbHVyZSBcInplcm8gbWF4IHpvbmUgYXBwZW5kXCIgXFxcbitcdFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxuK1x0XHQtLW1heF96b25lX2FwcGVuZF9zZWN0b3JzIDAgfHxcbitcdFx0RVJSX0NPREU9MVxuK1xuK1x0cnVuX3pvbmVkX3NldF9wYXJhbXNfZmFpbHVyZSBcInRvbyBtYW55IG9wZW4gem9uZXNcIiBcXFxuK1x0XHQtLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFxcXG4rXHRcdC0tZGV2X3NlY3RvcnMgJCgoMTI4ICogNCkpIC0tbWF4X29wZW5fem9uZXMgNSB8fFxuK1x0XHRFUlJfQ09ERT0xXG4rXG4rXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwidG9vIG1hbnkgYWN0aXZlIHpvbmVzXCIgXFxcbitcdFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxuK1x0XHQtLWRldl9zZWN0b3JzICQoKDEyOCAqIDQpKSAtLW1heF9hY3RpdmVfem9uZXMgNSB8fFxuK1x0XHRFUlJfQ09ERT0xXG4rZWxzZVxuK1x0ZWNobyBcInpvbmVkIHVibGsgZmVhdHVyZSB1bmF2YWlsYWJsZSwgc2tpcCB6b25lZCBTRVRfUEFSQU1TIGNhc2VzXCJcbitmaVxuK1xuK19jbGVhbnVwX3Rlc3Rcbitfc2hvd19yZXN1bHQgJFRJRCAkRVJSX0NPREVcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMyOjQ1Ljg0NjMwMTI3MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDY5OTExNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdWJsayBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaGl0cyBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYCBhbmQgYWRkcyBzb21lIHRlc3RzIHRvIHRoZSBgc2VsZnRlc3RzL3VibGsvYCBhcmVhLiBUaGUgY29yZSBrZXJuZWwgY2hhbmdlIGlzIGEgc2ltcGxlIHZhbGlkYXRpb24gY2hlY2s6IHdlJ3JlIGNoYW5naW5nIHRoZSBsb2dpYyBpbiBgdWJsa192YWxpZGF0ZV9wYXJhbXNgIHRvIGVuc3VyZSBgcC1cdTAwM2VjaHVua19zZWN0b3JzYCBpcyBhIHBvd2VyIG9mIDIgd2hlbiB0aGUgdWJsayBkZXZpY2UgaXMgem9uZWQuIFNwZWNpZmljYWxseSwgaXQncyBhIGNvZGUgbW9kaWZpY2F0aW9uIGZyb20gYCFwLVx1MDAzZWNodW5rX3NlY3RvcnNgIHRvIGAhaXNfcG93ZXJfb2ZfMihwLVx1MDAzZWNodW5rX3NlY3RvcnMpYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHByb2JlIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoaXMgaXMgYSBjb21tb24gcGl0ZmFsbCBpbiBrZXJuZWwgcGF0Y2hlcywgYnV0LCBsb29raW5nIGF0IHRoZSBjb2RlLCB0aGlzIG9uZSBzZWVtcyBwcmV0dHkgY2xlYW4uIFRoZSBwYXRjaCBpcyBzaW1wbHkgcmVmaW5pbmcgYW4gZXhpc3RpbmcgdmFsaWRhdGlvbiBzdGVwLiBOb3csIGlmIGBwLVx1MDAzZWNodW5rX3NlY3RvcnNgIHdlcmUgMCwgdGhlbiBgaXNfcG93ZXJfb2ZfMigwKWAgZXZhbHVhdGVzIHRvIGZhbHNlLCB0aHVzIG5lZ2F0aW5nIHRvIHRydWUuIFNvIGl0IGlzIHN0aWxsIGNhdWdodCBhbmQgcmVqZWN0ZWQuIFRoZXJlZm9yZSwgdGhlcmUncyBubyB3YXkgd2UncmUgYWNjaWRlbnRhbGx5IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyBpbmZvcm1hdGlvbiBoZXJlLCBiZWNhdXNlIGl0IGlzIG9ubHkgY2hlY2tpbmcgYSB2YWxpZGF0aW9uIHJldHVybi4gSSB3YXMgc2xpZ2h0bHkgY29uY2VybmVkIHRoYXQgdGhpcyBjb3VsZCBoYXZlIGludHJvZHVjZWQgc29tZSBraW5kIG9mIGV4cGxvaXRhYmxlIG1lbW9yeSBjb25kaXRpb24gYnV0IHRoYXQgaXMgbm90IHRoZSBjYXNlLiBUaGlzIGlzIGEgc2ltcGxlIHBvd2VyLW9mLTIgdmFsaWRhdGlvbiB0byBwcmV2ZW50IHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIG9yIG90aGVyIGlzc3VlcyB3aXRoIHpvbmVkIGRldmljZXMuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYnV0IHRoZSBkaWZmIGNvbmZpcm1zIGl0LiBUaGUgcGF0Y2gncyBpbXBhY3QgaXMgbWluaW1hbC4gVGhlIHJlc3Qgb2YgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGp1c3QgcmVsYXRlZCB0byB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdHM7IHNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgYWRkZWQgdGVzdCBzdXBwb3J0IGZvciB0aGUgYHNldF9wYXJhbXNgIGNvbW1hbmQgYW5kIHZhcmlvdXMgcGFyYW1ldGVycy5cblxuU28sIGZyb20gYSBzZWN1cml0eSBzdGFuZHBvaW50LCB0aGlzIGlzIGEgbG93LXJpc2sgY2hhbmdlLiBUaGVyZSdzIG5vIG1hbmlwdWxhdGlvbiBvZiBtZW1vcnkgYWxsb2NhdGlvbiwgbm8gY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBiZSBhYnVzZWQsIGFuZCBubyBtb2RpZmljYXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzLiBUaGUga2VybmVsIGNoYW5nZSBpcyBleGNsdXNpdmVseSBhIHZhbGlkYXRpb24gY2hlY2sgb24gYW4gZXhpc3RpbmcgcGFyYW1ldGVyLiBJIGRvbid0IHNlZSBhbnkgcmVhc29uIHRvIHdvcnJ5IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8gbGVha3MuIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGlzc3Vlcy4gV2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkzOSwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMjo1NS4zMTYyMTY4NDJaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AgaW4gYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AgdG8gZW5zdXJlIHRoYXQgYGNodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiBmb3Igem9uZWQgZGV2aWNlcy4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIG9mIHVwZGF0ZXMgdG8gdGhlIHVzZXItc3BhY2Ugc2VsZnRlc3RzIChgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9gKS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBrZXJuZWwgY2hhbmdlIGlzIHB1cmVseSBhIHZhbGlkYXRpb24gY2hlY2sgb24gYW4gZXhpc3RpbmcgcGFyYW1ldGVyLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AgaW4gYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AgdG8gZW5zdXJlIHRoYXQgYGNodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiBmb3Igem9uZWQgZGV2aWNlcy4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIG9mIHVwZGF0ZXMgdG8gdGhlIHVzZXItc3BhY2Ugc2VsZnRlc3RzIChgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9gKS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBrZXJuZWwgY2hhbmdlIGlzIHB1cmVseSBhIHZhbGlkYXRpb24gY2hlY2sgb24gYW4gZXhpc3RpbmcgcGFyYW1ldGVyLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq5bx4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 02:49:37 +0000 UTC FinishedAt: 2026-08-14 03:32:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a275b5bfc9ee29b7eeef4ee6a635ac5461290df4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK", "BLK_DEV_ZONED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a275b5bfc9ee29b7eeef4ee6a635ac5461290df4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK", "BLK_DEV_ZONED" ], "series_id": "7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ublk_ctrl_uring_cmd", "ublk_ctrl_set_params" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJsa19jdHJsX3VyaW5nX2NtZCYjMzQ7LAogICAgJiMzNDt1YmxrX2N0cmxfc2V0X3BhcmFtcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AgaW4gYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AgdG8gZW5zdXJlIHRoYXQgYGNodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiBmb3Igem9uZWQgZGV2aWNlcy4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIG9mIHVwZGF0ZXMgdG8gdGhlIHVzZXItc3BhY2Ugc2VsZnRlc3RzIChgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9gKS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBrZXJuZWwgY2hhbmdlIGlzIHB1cmVseSBhIHZhbGlkYXRpb24gY2hlY2sgb24gYW4gZXhpc3RpbmcgcGFyYW1ldGVyLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdWJsayBkcml2ZXIgdG8gZW5mb3JjZSB0aGF0IGBjaHVua19zZWN0b3JzYCBpcyBhIHBvd2VyIG9mIDIgd2hlbiBjb25maWd1cmluZyBhIHpvbmVkIHVibGsgZGV2aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGtlcm5lbCYjMzk7cyB2YWxpZGF0aW9uIGxvZ2ljIGZvciB1c2VyLXByb3ZpZGVkIHBhcmFtZXRlcnMsIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgY29tbWFuZHMgb24gYC9kZXYvdWJsay1jb250cm9sYC4gVGhlIGNvZGUgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE4YzIzY2Y0NDk5NzU4NmMwZjhkM2EyYjZjMGU1ODE5MGQ1NTQyODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwMzozMToxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbmluZGV4IDg1M2NkNDBhMzQwM2MuLjE5M2Y2ZWJjM2IzN2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuQEAgLTk4MCw3ICYjNDM7OTgwLDcgQEAgc3RhdGljIGludCB1YmxrX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxuIFx0XHRpZiAocC1cdTAwM2VtYXhfc2VjdG9ycyBcdTAwM2MgUEFHRV9TRUNUT1JTKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAodWJsa19kZXZfaXNfem9uZWQodWIpIFx1MDAyNlx1MDAyNiAhcC1cdTAwM2VjaHVua19zZWN0b3JzKVxuJiM0MztcdFx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSBcdTAwMjZcdTAwMjYgIWlzX3Bvd2VyX29mXzIocC1cdTAwM2VjaHVua19zZWN0b3JzKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH0gZWxzZVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZVxuaW5kZXggYTNjZWM3YjM1ZGI3Ny4uNWRhZjM2YzZjMzZjNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGVcbkBAIC01NSw2ICYjNDM7NTUsOCBAQCBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3N0cmlwZV8wNi5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IHRlc3RfcGFydF8wMS5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IHRlc3RfcGFydF8wMi5zaFxuIFxuJiM0MztURVNUX1BST0dTICYjNDM7PSB0ZXN0X3BhcmFtc18wMS5zaFxuJiM0MztcbiBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3NobWVtemNfMDEuc2hcbiBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3NobWVtemNfMDIuc2hcbiBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3NobWVtemNfMDMuc2hcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmNcbmluZGV4IGJlNWEwZDc3NTk1MmMuLjI0MDBiNDYxNTc2NjQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuY1xuQEAgLTgsNiAmIzQzOzgsMTMgQEBcbiAjaW5jbHVkZSBcJiMzNDtrdWJsay5oXCYjMzQ7XG4gXG4gI2RlZmluZSBNQVhfTlJfVEdUX0FSRyBcdDY0XG4mIzQzOyNkZWZpbmUgS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVFx0XHQ5XG4mIzQzOyNkZWZpbmUgS1VCTEtfUEFSQU1fUEhZU0lDQUxfQlNfU0hJRlRcdFx0MTJcbiYjNDM7I2RlZmluZSBLVUJMS19QQVJBTV9aT05FX1NFQ1RPUlNcdFx0MTI4XG4mIzQzOyNkZWZpbmUgS1VCTEtfUEFSQU1fTlJfWk9ORVNcdFx0XHQxNlxuJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTXHRcdFx0XFxcbiYjNDM7XHQoS1VCTEtfUEFSQU1fWk9ORV9TRUNUT1JTICogS1VCTEtfUEFSQU1fTlJfWk9ORVMpXG4mIzQzOyNkZWZpbmUgS1VCTEtfUEFSQU1fWk9ORV9BUFBFTkRfU0VDVE9SU1x0XHQ4XG4gXG4gdW5zaWduZWQgaW50IHVibGtfZGJnX21hc2sgPSBVQkxLX0xPRztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHVibGtfdGd0X29wcyAqdGd0X29wc19saXN0W10gPSB7XG5AQCAtMjI3LDYgJiM0MzsyMzQsNTUgQEAgc3RhdGljIGludCB1YmxrX2N0cmxfZ2V0X2ZlYXR1cmVzKHN0cnVjdCB1YmxrX2RldiAqZGV2LFxuIFx0cmV0dXJuIF9fdWJsa19jdHJsX2NtZChkZXYsIFx1MDAyNmRhdGEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBwYXJzZV9wYXJhbV90eXBlcyhjb25zdCBjaGFyICphcmcsIF9fdTMyICp0eXBlcylcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzEyOF0sICpzYXZlID0gTlVMTCwgKnRvaztcbiYjNDM7XG4mIzQzO1x0aWYgKHN0cmxlbihhcmcpIFx1MDAzZT0gc2l6ZW9mKGJ1ZikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0c3RyY3B5KGJ1ZiwgYXJnKTtcbiYjNDM7XHQqdHlwZXMgPSAwO1xuJiM0MztcdHRvayA9IHN0cnRva19yKGJ1ZiwgXCYjMzQ7LFwmIzM0OywgXHUwMDI2c2F2ZSk7XG4mIzQzO1x0d2hpbGUgKHRvaykge1xuJiM0MztcdFx0aWYgKCFzdHJjbXAodG9rLCBcJiMzNDtub25lXCYjMzQ7KSlcbiYjNDM7XHRcdFx0O1xuJiM0MztcdFx0ZWxzZSBpZiAoIXN0cmNtcCh0b2ssIFwmIzM0O2Jhc2ljXCYjMzQ7KSlcbiYjNDM7XHRcdFx0KnR5cGVzIHw9IFVCTEtfUEFSQU1fVFlQRV9CQVNJQztcbiYjNDM7XHRcdGVsc2UgaWYgKCFzdHJjbXAodG9rLCBcJiMzNDt6b25lZFwmIzM0OykpXG4mIzQzO1x0XHRcdCp0eXBlcyB8PSBVQkxLX1BBUkFNX1RZUEVfWk9ORUQ7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0dG9rID0gc3RydG9rX3IoTlVMTCwgXCYjMzQ7LFwmIzM0OywgXHUwMDI2c2F2ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjb25zdCBzdHJ1Y3QgZGV2X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCB1YmxrX3BhcmFtcyAqcGFyYW1zKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHBhcmFtc19jdHggKnAgPSBcdTAwMjZjdHgtXHUwMDNlcGFyYW1zO1xuJiM0MztcbiYjNDM7XHQqcGFyYW1zID0gKHN0cnVjdCB1YmxrX3BhcmFtcykge1xuJiM0MztcdFx0LnR5cGVzID0gcC1cdTAwM2V0eXBlcyxcbiYjNDM7XHRcdC5iYXNpYyA9IHtcbiYjNDM7XHRcdFx0LmxvZ2ljYWxfYnNfc2hpZnRcdD0gcC1cdTAwM2Vsb2dpY2FsX2JzX3NoaWZ0LFxuJiM0MztcdFx0XHQucGh5c2ljYWxfYnNfc2hpZnRcdD0gcC1cdTAwM2VwaHlzaWNhbF9ic19zaGlmdCxcbiYjNDM7XHRcdFx0LmlvX21pbl9zaGlmdFx0XHQ9IHAtXHUwMDNlaW9fbWluX3NoaWZ0LFxuJiM0MztcdFx0XHQuaW9fb3B0X3NoaWZ0XHRcdD0gcC1cdTAwM2Vpb19vcHRfc2hpZnQsXG4mIzQzO1x0XHRcdC5tYXhfc2VjdG9yc1x0XHQ9IHAtXHUwMDNlbWF4X3NlY3RvcnMsXG4mIzQzO1x0XHRcdC5jaHVua19zZWN0b3JzXHRcdD0gcC1cdTAwM2VjaHVua19zZWN0b3JzLFxuJiM0MztcdFx0XHQuZGV2X3NlY3RvcnNcdFx0PSBwLVx1MDAzZWRldl9zZWN0b3JzLFxuJiM0MztcdFx0fSxcbiYjNDM7XHRcdC56b25lZCA9IHtcbiYjNDM7XHRcdFx0Lm1heF9vcGVuX3pvbmVzXHRcdD0gcC1cdTAwM2VtYXhfb3Blbl96b25lcyxcbiYjNDM7XHRcdFx0Lm1heF9hY3RpdmVfem9uZXNcdD0gcC1cdTAwM2VtYXhfYWN0aXZlX3pvbmVzLFxuJiM0MztcdFx0XHQubWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgPSBwLVx1MDAzZW1heF96b25lX2FwcGVuZF9zZWN0b3JzLFxuJiM0MztcdFx0fSxcbiYjNDM7XHR9O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdWJsa19jdHJsX3VwZGF0ZV9zaXplKHN0cnVjdCB1YmxrX2RldiAqZGV2LFxuIFx0XHRfX3U2NCBucl9zZWN0cylcbiB7XG5AQCAtMTc3Miw2ICYjNDM7MTgyOCw1MSBAQCBzdGF0aWMgaW50IF9fY21kX2Rldl9hZGQoY29uc3Qgc3RydWN0IGRldl9jdHggKmN0eClcbiBcbiBzdGF0aWMgaW50IF9fY21kX2Rldl9saXN0KHN0cnVjdCBkZXZfY3R4ICpjdHgpO1xuIFxuJiM0MztzdGF0aWMgaW50IGNtZF9kZXZfc2V0X3BhcmFtcyhzdHJ1Y3QgZGV2X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHVibGtzcnZfY3RybF9kZXZfaW5mbyAqaW5mbztcbiYjNDM7XHRzdHJ1Y3QgdWJsa19wYXJhbXMgcGFyYW1zO1xuJiM0MztcdHN0cnVjdCB1YmxrX2RldiAqZGV2O1xuJiM0MztcdF9fdTY0IGZlYXR1cmVzO1xuJiM0MztcdGludCByZXQsIGRlbF9yZXQ7XG4mIzQzO1xuJiM0MztcdGRldiA9IHVibGtfY3RybF9pbml0KCk7XG4mIzQzO1x0aWYgKCFkZXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdWJsa19jdHJsX2dldF9mZWF0dXJlcyhkZXYsIFx1MDAyNmZlYXR1cmVzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmICghKGZlYXR1cmVzIFx1MDAyNiBVQkxLX0ZfQ01EX0lPQ1RMX0VOQ09ERSkpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9UU1VQO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpbmZvID0gXHUwMDI2ZGV2LVx1MDAzZWRldl9pbmZvO1xuJiM0MztcdGluZm8tXHUwMDNlZGV2X2lkID0gY3R4LVx1MDAzZWRldl9pZDtcbiYjNDM7XHRpbmZvLVx1MDAzZW5yX2h3X3F1ZXVlcyA9IGN0eC1cdTAwM2Vucl9od19xdWV1ZXM7XG4mIzQzO1x0aW5mby1cdTAwM2VxdWV1ZV9kZXB0aCA9IGN0eC1cdTAwM2VxdWV1ZV9kZXB0aDtcbiYjNDM7XHRpbmZvLVx1MDAzZWlvX2Rlc2Nfc2l6ZSA9IGN0eC1cdTAwM2Vpb19kZXNjX3NpemU7XG4mIzQzO1x0aW5mby1cdTAwM2VmbGFncyA9IGN0eC1cdTAwM2VmbGFncztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdWJsa19jdHJsX2FkZF9kZXYoZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHVibGtfaW5pdF9wYXJhbXNfZnJvbV9jdHgoY3R4LCBcdTAwMjZwYXJhbXMpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB1YmxrX2N0cmxfc2V0X3BhcmFtcyhkZXYsIFx1MDAyNnBhcmFtcyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O1NFVF9QQVJBTVMgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1xuJiM0MztcdGRlbF9yZXQgPSB1YmxrX2N0cmxfZGVsX2RldihkZXYpO1xuJiM0MztcdGlmIChkZWxfcmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgPT0gMClcbiYjNDM7XHRcdHJldCA9IGRlbF9yZXQ7XG4mIzQzO291dDpcbiYjNDM7XHR1YmxrX2N0cmxfZGVpbml0KGRldik7XG4mIzQzO1x0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBjbWRfZGV2X2FkZChzdHJ1Y3QgZGV2X2N0eCAqY3R4KVxuIHtcbiBcdGludCByZXM7XG5AQCAtMjExNyw2ICYjNDM7MjIxOCw5IEBAIHN0YXRpYyBpbnQgY21kX2Rldl9oZWxwKGNoYXIgKmV4ZSlcbiBcdHByaW50ZihcJiMzNDtcXHQgLS1zYWZlIG9ubHkgc3RvcCBpZiBkZXZpY2UgaGFzIG5vIGFjdGl2ZSBvcGVuZXJzXFxuXFxuXCYjMzQ7KTtcbiBcdHByaW50ZihcJiMzNDslcyBsaXN0IFstbiBkZXZfaWRdIC1hIFxcblwmIzM0OywgZXhlKTtcbiBcdHByaW50ZihcJiMzNDtcXHQgLWEgbGlzdCBhbGwgZGV2aWNlcywgLW4gbGlzdCBzcGVjaWZpZWQgZGV2aWNlLCBkZWZhdWx0IC1hIFxcblxcblwmIzM0Oyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0OyVzIHNldF9wYXJhbXMgWy1uIGRldl9pZF0gWy1xIG5yX3F1ZXVlc10gWy1kIGRlcHRoXSBbLXVdIFstLXpvbmVkXVxcblwmIzM0OywgZXhlKTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7XFx0Wy0tcGFyYW1fdHlwZXMgYmFzaWNbLHpvbmVkXXxub25lXVxcblwmIzM0Oyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O1xcdCBpc3N1ZSBBRERfREVWLCBTRVRfUEFSQU1TIGFuZCBERUxfREVWIHdpdGhvdXQgU1RBUlRfREVWXFxuXFxuXCYjMzQ7KTtcbiBcdHByaW50ZihcJiMzNDslcyBmZWF0dXJlc1xcblwmIzM0OywgZXhlKTtcbiBcdHByaW50ZihcJiMzNDslcyB1cGRhdGVfc2l6ZSAtbiBkZXZfaWQgLXN8LS1zaXplIHNpemVfaW5fYnl0ZXMgXFxuXCYjMzQ7LCBleGUpO1xuIFx0cHJpbnRmKFwmIzM0OyVzIHF1aWVzY2UgLW4gZGV2X2lkXFxuXCYjMzQ7LCBleGUpO1xuQEAgLTIxNjAsNiAmIzQzOzIyNjQsMTggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0eyBcJiMzNDtodGxiXCYjMzQ7LFx0XHQxLFx0TlVMTCwgIDAgIH0sXG4gXHRcdHsgXCYjMzQ7cmRvbmx5X3NobWVtX2J1ZlwmIzM0OyxcdDAsXHROVUxMLCAgMCAgfSxcbiBcdFx0eyBcJiMzNDtpb19kZXNjX3NpemVcJiMzNDssXHQxLFx0TlVMTCwgIDAgIH0sXG4mIzQzO1x0XHR7IFwmIzM0O3pvbmVkXCYjMzQ7LFx0XHQwLFx0TlVMTCwgIDAgIH0sXG4mIzQzO1x0XHR7IFwmIzM0O3BhcmFtX3R5cGVzXCYjMzQ7LFx0MSxcdE5VTEwsICAwICB9LFxuJiM0MztcdFx0eyBcJiMzNDtsb2dpY2FsX2JzX3NoaWZ0XCYjMzQ7LFx0MSxcdE5VTEwsICAwICB9LFxuJiM0MztcdFx0eyBcJiMzNDtwaHlzaWNhbF9ic19zaGlmdFwmIzM0OyxcdDEsXHROVUxMLCAgMCAgfSxcbiYjNDM7XHRcdHsgXCYjMzQ7aW9fbWluX3NoaWZ0XCYjMzQ7LFx0MSxcdE5VTEwsICAwICB9LFxuJiM0MztcdFx0eyBcJiMzNDtpb19vcHRfc2hpZnRcJiMzNDssXHQxLFx0TlVMTCwgIDAgIH0sXG4mIzQzO1x0XHR7IFwmIzM0O21heF9zZWN0b3JzXCYjMzQ7LFx0MSxcdE5VTEwsICAwICB9LFxuJiM0MztcdFx0eyBcJiMzNDtjaHVua19zZWN0b3JzXCYjMzQ7LFx0MSxcdE5VTEwsICAwICB9LFxuJiM0MztcdFx0eyBcJiMzNDtkZXZfc2VjdG9yc1wmIzM0OyxcdDEsXHROVUxMLCAgMCAgfSxcbiYjNDM7XHRcdHsgXCYjMzQ7bWF4X3pvbmVfYXBwZW5kX3NlY3RvcnNcJiMzNDssIDEsIE5VTEwsICAwICB9LFxuJiM0MztcdFx0eyBcJiMzNDttYXhfb3Blbl96b25lc1wmIzM0OyxcdDEsXHROVUxMLCAgMCAgfSxcbiYjNDM7XHRcdHsgXCYjMzQ7bWF4X2FjdGl2ZV96b25lc1wmIzM0OyxcdDEsXHROVUxMLCAgMCAgfSxcbiBcdFx0eyAwLCAwLCAwLCAwIH1cbiBcdH07XG4gXHRjb25zdCBzdHJ1Y3QgdWJsa190Z3Rfb3BzICpvcHMgPSBOVUxMO1xuQEAgLTIxNzMsNiAmIzQzOzIyODksMTkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0LnRndF90eXBlXHQ9XHRcJiMzNDt1bmtub3duXCYjMzQ7LFxuIFx0XHQuY3N1bV90eXBlXHQ9XHRMQk1EX1BJX0NTVU1fTk9ORSxcbiBcdFx0LmlvX2Rlc2Nfc2l6ZVx0PVx0c2l6ZW9mKHN0cnVjdCB1Ymxrc3J2X2lvX2Rlc2MpLFxuJiM0MztcdFx0LnBhcmFtcyA9IHtcbiYjNDM7XHRcdFx0LnR5cGVzXHRcdFx0PSBVQkxLX1BBUkFNX1RZUEVfQkFTSUMsXG4mIzQzO1x0XHRcdC5sb2dpY2FsX2JzX3NoaWZ0XHQ9IEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlQsXG4mIzQzO1x0XHRcdC5waHlzaWNhbF9ic19zaGlmdFx0PSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCxcbiYjNDM7XHRcdFx0LmlvX21pbl9zaGlmdFx0XHQ9IEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlQsXG4mIzQzO1x0XHRcdC5pb19vcHRfc2hpZnRcdFx0PSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCxcbiYjNDM7XHRcdFx0Lm1heF9zZWN0b3JzXHRcdD1cbiYjNDM7XHRcdFx0XHRVQkxLX0lPX01BWF9CWVRFUyBcdTAwM2VcdTAwM2UgS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCxcbiYjNDM7XHRcdFx0LmNodW5rX3NlY3RvcnNcdFx0PSBLVUJMS19QQVJBTV9aT05FX1NFQ1RPUlMsXG4mIzQzO1x0XHRcdC5kZXZfc2VjdG9yc1x0XHQ9IEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTLFxuJiM0MztcdFx0XHQubWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgPVxuJiM0MztcdFx0XHRcdEtVQkxLX1BBUkFNX1pPTkVfQVBQRU5EX1NFQ1RPUlMsXG4mIzQzO1x0XHR9LFxuIFx0fTtcbiBcdGludCByZXQgPSAtRUlOVkFMLCBpO1xuIFx0aW50IHRndF9hcmdjID0gMTtcbkBAIC0yMjg4LDYgJiM0MzsyNDE3LDM0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdFx0XHRjdHguZmxhZ3MgfD0gVUJMS19GX0lPX0RFU0NfU0laRTtcbiBcdFx0XHRcdGN0eC5pb19kZXNjX3NpemUgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4gXHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcJiMzNDt6b25lZFwmIzM0OykpXG4mIzQzO1x0XHRcdFx0Y3R4LmZsYWdzIHw9IFVCTEtfRl9aT05FRDtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCYjMzQ7cGFyYW1fdHlwZXNcJiMzNDspKSB7XG4mIzQzO1x0XHRcdFx0cmV0ID0gcGFyc2VfcGFyYW1fdHlwZXMob3B0YXJnLCBcdTAwMjZjdHgucGFyYW1zLnR5cGVzKTtcbiYjNDM7XHRcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcJiMzNDtsb2dpY2FsX2JzX3NoaWZ0XCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRjdHgucGFyYW1zLmxvZ2ljYWxfYnNfc2hpZnQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwmIzM0O3BoeXNpY2FsX2JzX3NoaWZ0XCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRjdHgucGFyYW1zLnBoeXNpY2FsX2JzX3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcJiMzNDtpb19taW5fc2hpZnRcJiMzNDspKVxuJiM0MztcdFx0XHRcdGN0eC5wYXJhbXMuaW9fbWluX3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcJiMzNDtpb19vcHRfc2hpZnRcJiMzNDspKVxuJiM0MztcdFx0XHRcdGN0eC5wYXJhbXMuaW9fb3B0X3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcJiMzNDttYXhfc2VjdG9yc1wmIzM0OykpXG4mIzQzO1x0XHRcdFx0Y3R4LnBhcmFtcy5tYXhfc2VjdG9ycyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCYjMzQ7Y2h1bmtfc2VjdG9yc1wmIzM0OykpXG4mIzQzO1x0XHRcdFx0Y3R4LnBhcmFtcy5jaHVua19zZWN0b3JzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcJiMzNDtkZXZfc2VjdG9yc1wmIzM0OykpXG4mIzQzO1x0XHRcdFx0Y3R4LnBhcmFtcy5kZXZfc2VjdG9ycyA9IHN0cnRvdWxsKG9wdGFyZywgTlVMTCwgMCk7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwmIzM0O21heF96b25lX2FwcGVuZF9zZWN0b3JzXCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRjdHgucGFyYW1zLm1heF96b25lX2FwcGVuZF9zZWN0b3JzID1cbiYjNDM7XHRcdFx0XHRcdHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCYjMzQ7bWF4X29wZW5fem9uZXNcJiMzNDspKVxuJiM0MztcdFx0XHRcdGN0eC5wYXJhbXMubWF4X29wZW5fem9uZXMgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4mIzQzO1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwmIzM0O21heF9hY3RpdmVfem9uZXNcJiMzNDspKVxuJiM0MztcdFx0XHRcdGN0eC5wYXJhbXMubWF4X2FjdGl2ZV96b25lcyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5Oz8mIzM5OzpcbiBcdFx0XHQvKlxuQEAgLTIzNzcsNyAmIzQzOzI1MzQsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHRvcHMtXHUwMDNlcGFyc2VfY21kX2xpbmUoXHUwMDI2Y3R4LCB0Z3RfYXJnYywgdGd0X2FyZ3YpO1xuIFx0fVxuIFxuLVx0aWYgKCFzdHJjbXAoY21kLCBcJiMzNDthZGRcJiMzNDspKVxuJiM0MztcdGlmICghc3RyY21wKGNtZCwgXCYjMzQ7c2V0X3BhcmFtc1wmIzM0OykpXG4mIzQzO1x0XHRyZXQgPSBjbWRfZGV2X3NldF9wYXJhbXMoXHUwMDI2Y3R4KTtcbiYjNDM7XHRlbHNlIGlmICghc3RyY21wKGNtZCwgXCYjMzQ7YWRkXCYjMzQ7KSlcbiBcdFx0cmV0ID0gY21kX2Rldl9hZGQoXHUwMDI2Y3R4KTtcbiBcdGVsc2UgaWYgKCFzdHJjbXAoY21kLCBcJiMzNDtyZWNvdmVyXCYjMzQ7KSkge1xuIFx0XHRpZiAoY3R4LmRldl9pZCBcdTAwM2MgMCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaFxuaW5kZXggZTI3YzE1NGZjOTEwOC4uZDk4ZjNkNjEyZDg4OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oXG5AQCAtNjMsNiAmIzQzOzYzLDIyIEBAIHN0cnVjdCBmYXVsdF9pbmplY3RfY3R4IHtcbiBcdGJvb2wgZGllX2R1cmluZ19mZXRjaDtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgcGFyYW1zX2N0eCB7XG4mIzQzO1x0X191MzIgdHlwZXM7XG4mIzQzO1xuJiM0MztcdF9fdTMyIGxvZ2ljYWxfYnNfc2hpZnQ7XG4mIzQzO1x0X191MzIgcGh5c2ljYWxfYnNfc2hpZnQ7XG4mIzQzO1x0X191MzIgaW9fbWluX3NoaWZ0O1xuJiM0MztcdF9fdTMyIGlvX29wdF9zaGlmdDtcbiYjNDM7XHRfX3UzMiBtYXhfc2VjdG9ycztcbiYjNDM7XHRfX3UzMiBjaHVua19zZWN0b3JzO1xuJiM0MztcdF9fdTY0IGRldl9zZWN0b3JzO1xuJiM0MztcbiYjNDM7XHRfX3UzMiBtYXhfb3Blbl96b25lcztcbiYjNDM7XHRfX3UzMiBtYXhfYWN0aXZlX3pvbmVzO1xuJiM0MztcdF9fdTMyIG1heF96b25lX2FwcGVuZF9zZWN0b3JzO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgZGV2X2N0eCB7XG4gXHRjaGFyIHRndF90eXBlWzE2XTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtOTksNiAmIzQzOzExNSw4IEBAIHN0cnVjdCBkZXZfY3R4IHtcbiBcdC8qIGZvciAmIzM5O3VwZGF0ZV9zaXplJiMzOTsgY29tbWFuZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBsb25nIHNpemU7XG4gXG4mIzQzO1x0c3RydWN0IHBhcmFtc19jdHggcGFyYW1zO1xuJiM0MztcbiBcdGNoYXIgKmh0bGJfcGF0aDtcbiBcbiBcdHVuaW9uIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcGFyYW1zXzAxLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3BhcmFtc18wMS5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjkyOGU3MmIxMDM1ZDJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2hcbkBAIC0wLDAgJiM0MzsxLDExNCBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsuIFwmIzM0OyQoY2QgXCYjMzQ7JChkaXJuYW1lIFwmIzM0OyQwXCYjMzQ7KVwmIzM0OyBcdTAwMjZcdTAwMjYgcHdkKVwmIzM0Oy90ZXN0X2NvbW1vbi5zaFxuJiM0MztcbiYjNDM7RVJSX0NPREU9MFxuJiM0MztcbiYjNDM7cnVuX3NldF9wYXJhbXNfc3VjY2VzcygpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBuYW1lPSQxXG4mIzQzO1xuJiM0MztcdHNoaWZ0XG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7JG5hbWVcJiMzNDtcbiYjNDM7XHRpZiAhIFwmIzM0OyRVQkxLX1BST0dcJiMzNDsgc2V0X3BhcmFtcyAtcSAxIC1kIDIgXCYjMzQ7JEBcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7JG5hbWU6IFNFVF9QQVJBTVMgY2hlY2sgZmFpbGVkXCYjMzQ7XG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzO3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbmFtZT0kMVxuJiM0MztcbiYjNDM7XHRzaGlmdFxuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0OyRuYW1lXCYjMzQ7XG4mIzQzO1x0aWYgXCYjMzQ7JFVCTEtfUFJPR1wmIzM0OyBzZXRfcGFyYW1zIC1xIDEgLWQgMiBcJiMzNDskQFwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDskbmFtZTogU0VUX1BBUkFNUyBzdWNjZWVkZWQgdW5leHBlY3RlZGx5XCYjMzQ7XG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzO3J1bl96b25lZF9zZXRfcGFyYW1zX3N1Y2Nlc3MoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbmFtZT0kMVxuJiM0MztcbiYjNDM7XHRzaGlmdFxuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0OyRuYW1lXCYjMzQ7XG4mIzQzO1x0aWYgISBcJiMzNDskVUJMS19QUk9HXCYjMzQ7IHNldF9wYXJhbXMgLXEgMSAtZCAyIC11IC0tem9uZWQgXCYjMzQ7JEBcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7JG5hbWU6IFNFVF9QQVJBTVMgY2hlY2sgZmFpbGVkXCYjMzQ7XG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzO3J1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbmFtZT0kMVxuJiM0MztcbiYjNDM7XHRzaGlmdFxuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0OyRuYW1lXCYjMzQ7XG4mIzQzO1x0aWYgXCYjMzQ7JFVCTEtfUFJPR1wmIzM0OyBzZXRfcGFyYW1zIC1xIDEgLWQgMiAtdSAtLXpvbmVkIFwmIzM0OyRAXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0OyRuYW1lOiBTRVRfUEFSQU1TIHN1Y2NlZWRlZCB1bmV4cGVjdGVkbHlcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7X3ByZXBfdGVzdCBcJiMzNDtwYXJhbXNcJiMzNDsgXCYjMzQ7U0VUX1BBUkFNUyB2YWxpZGF0aW9uXCYjMzQ7XG4mIzQzO1xuJiM0MztpZiBbICEgLWMgL2Rldi91YmxrLWNvbnRyb2wgXTsgdGhlblxuJiM0MztcdF9jbGVhbnVwX3Rlc3RcbiYjNDM7XHRfc2hvd19yZXN1bHQgJFRJRCAkVUJMS19TS0lQX0NPREVcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MgXCYjMzQ7dmFsaWQgYmFzaWMgcGFyYW1zXCYjMzQ7IHx8XG4mIzQzO1x0RVJSX0NPREU9MVxuJiM0MztcbiYjNDM7cnVuX3NldF9wYXJhbXNfZmFpbHVyZSBcJiMzNDttaXNzaW5nIGJhc2ljIHBhcmFtc1wmIzM0OyBcXFxuJiM0MztcdC0tcGFyYW1fdHlwZXMgbm9uZSB8fFxuJiM0MztcdEVSUl9DT0RFPTFcbiYjNDM7XG4mIzQzO3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUgXCYjMzQ7bG9naWNhbCBibG9jayBsYXJnZXIgdGhhbiBwaHlzaWNhbCBibG9ja1wmIzM0OyBcXFxuJiM0MztcdC0tbG9naWNhbF9ic19zaGlmdCAxMiAtLXBoeXNpY2FsX2JzX3NoaWZ0IDkgfHxcbiYjNDM7XHRFUlJfQ09ERT0xXG4mIzQzO1xuJiM0MztydW5fc2V0X3BhcmFtc19mYWlsdXJlIFwmIzM0O3RvbyBsYXJnZSBtYXggc2VjdG9yc1wmIzM0OyBcXFxuJiM0MztcdC0tbWF4X3NlY3RvcnMgMjA0OSB8fFxuJiM0MztcdEVSUl9DT0RFPTFcbiYjNDM7XG4mIzQzO2lmIF9oYXZlX2ZlYXR1cmUgXCYjMzQ7Wk9ORURcJiMzNDsgXHUwMDI2XHUwMDI2IF9oYXZlX2ZlYXR1cmUgXCYjMzQ7VVNFUl9DT1BZXCYjMzQ7OyB0aGVuXG4mIzQzO1x0cnVuX3pvbmVkX3NldF9wYXJhbXNfc3VjY2VzcyBcJiMzNDt2YWxpZCB6b25lZCBwYXJhbXNcJiMzNDsgXFxcbiYjNDM7XHRcdC0tcGFyYW1fdHlwZXMgYmFzaWMsem9uZWQgfHxcbiYjNDM7XHRcdEVSUl9DT0RFPTFcbiYjNDM7XG4mIzQzO1x0cnVuX3pvbmVkX3NldF9wYXJhbXNfZmFpbHVyZSBcJiMzNDttaXNzaW5nIHpvbmVkIHBhcmFtc1wmIzM0OyB8fFxuJiM0MztcdFx0RVJSX0NPREU9MVxuJiM0MztcbiYjNDM7XHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwmIzM0O25vbi1wb3dlci1vZi0yIHpvbmUgc2l6ZVwmIzM0OyBcXFxuJiM0MztcdFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxuJiM0MztcdFx0LS1jaHVua19zZWN0b3JzIDk2IC0tZGV2X3NlY3RvcnMgJCgoOTYgKiAxNikpIHx8XG4mIzQzO1x0XHRFUlJfQ09ERT0xXG4mIzQzO1xuJiM0MztcdHJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgXCYjMzQ7emVybyBtYXggem9uZSBhcHBlbmRcJiMzNDsgXFxcbiYjNDM7XHRcdC0tcGFyYW1fdHlwZXMgYmFzaWMsem9uZWQgXFxcbiYjNDM7XHRcdC0tbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgMCB8fFxuJiM0MztcdFx0RVJSX0NPREU9MVxuJiM0MztcbiYjNDM7XHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwmIzM0O3RvbyBtYW55IG9wZW4gem9uZXNcJiMzNDsgXFxcbiYjNDM7XHRcdC0tcGFyYW1fdHlwZXMgYmFzaWMsem9uZWQgXFxcbiYjNDM7XHRcdC0tZGV2X3NlY3RvcnMgJCgoMTI4ICogNCkpIC0tbWF4X29wZW5fem9uZXMgNSB8fFxuJiM0MztcdFx0RVJSX0NPREU9MVxuJiM0MztcbiYjNDM7XHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwmIzM0O3RvbyBtYW55IGFjdGl2ZSB6b25lc1wmIzM0OyBcXFxuJiM0MztcdFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxuJiM0MztcdFx0LS1kZXZfc2VjdG9ycyAkKCgxMjggKiA0KSkgLS1tYXhfYWN0aXZlX3pvbmVzIDUgfHxcbiYjNDM7XHRcdEVSUl9DT0RFPTFcbiYjNDM7ZWxzZVxuJiM0MztcdGVjaG8gXCYjMzQ7em9uZWQgdWJsayBmZWF0dXJlIHVuYXZhaWxhYmxlLCBza2lwIHpvbmVkIFNFVF9QQVJBTVMgY2FzZXNcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO19jbGVhbnVwX3Rlc3RcbiYjNDM7X3Nob3dfcmVzdWx0ICRUSUQgJEVSUl9DT0RFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJsa19jdHJsX3VyaW5nX2NtZCYjMzQ7LAogICAgJiMzNDt1YmxrX2N0cmxfc2V0X3BhcmFtcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdWJsayBkcml2ZXIgdG8gZW5mb3JjZSB0aGF0IGBjaHVua19zZWN0b3JzYCBpcyBhIHBvd2VyIG9mIDIgd2hlbiBjb25maWd1cmluZyBhIHpvbmVkIHVibGsgZGV2aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGtlcm5lbCYjMzk7cyB2YWxpZGF0aW9uIGxvZ2ljIGZvciB1c2VyLXByb3ZpZGVkIHBhcmFtZXRlcnMsIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgY29tbWFuZHMgb24gYC9kZXYvdWJsay1jb250cm9sYC4gVGhlIGNvZGUgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE4YzIzY2Y0NDk5NzU4NmMwZjhkM2EyYjZjMGU1ODE5MGQ1NTQyODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwMzozMToxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYwppbmRleCA4NTNjZDQwYTM0MDNjLi4xOTNmNmViYzNiMzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCkBAIC05ODAsNyAmIzQzOzk4MCw3IEBAIHN0YXRpYyBpbnQgdWJsa192YWxpZGF0ZV9wYXJhbXMoY29uc3Qgc3RydWN0IHVibGtfZGV2aWNlICp1YikKIAkJaWYgKHAtJmd0O21heF9zZWN0b3JzICZsdDsgUEFHRV9TRUNUT1JTKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSAmYW1wOyZhbXA7ICFwLSZndDtjaHVua19zZWN0b3JzKQomIzQzOwkJaWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSAmYW1wOyZhbXA7ICFpc19wb3dlcl9vZl8yKHAtJmd0O2NodW5rX3NlY3RvcnMpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGUKaW5kZXggYTNjZWM3YjM1ZGI3Ny4uNWRhZjM2YzZjMzZjNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL01ha2VmaWxlCkBAIC01NSw2ICYjNDM7NTUsOCBAQCBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3N0cmlwZV8wNi5zaAogVEVTVF9QUk9HUyAmIzQzOz0gdGVzdF9wYXJ0XzAxLnNoCiBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3BhcnRfMDIuc2gKIAomIzQzO1RFU1RfUFJPR1MgJiM0Mzs9IHRlc3RfcGFyYW1zXzAxLnNoCiYjNDM7CiBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3NobWVtemNfMDEuc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IHRlc3Rfc2htZW16Y18wMi5zaAogVEVTVF9QUk9HUyAmIzQzOz0gdGVzdF9zaG1lbXpjXzAzLnNoCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmMKaW5kZXggYmU1YTBkNzc1OTUyYy4uMjQwMGI0NjE1NzY2NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuYwpAQCAtOCw2ICYjNDM7OCwxMyBAQAogI2luY2x1ZGUgJiMzNDtrdWJsay5oJiMzNDsKIAogI2RlZmluZSBNQVhfTlJfVEdUX0FSRyAJNjQKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlQJCTkKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX1BIWVNJQ0FMX0JTX1NISUZUCQkxMgomIzQzOyNkZWZpbmUgS1VCTEtfUEFSQU1fWk9ORV9TRUNUT1JTCQkxMjgKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX05SX1pPTkVTCQkJMTYKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTCQkJXAomIzQzOwkoS1VCTEtfUEFSQU1fWk9ORV9TRUNUT1JTICogS1VCTEtfUEFSQU1fTlJfWk9ORVMpCiYjNDM7I2RlZmluZSBLVUJMS19QQVJBTV9aT05FX0FQUEVORF9TRUNUT1JTCQk4CiAKIHVuc2lnbmVkIGludCB1YmxrX2RiZ19tYXNrID0gVUJMS19MT0c7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHVibGtfdGd0X29wcyAqdGd0X29wc19saXN0W10gPSB7CkBAIC0yMjcsNiAmIzQzOzIzNCw1NSBAQCBzdGF0aWMgaW50IHVibGtfY3RybF9nZXRfZmVhdHVyZXMoc3RydWN0IHVibGtfZGV2ICpkZXYsCiAJcmV0dXJuIF9fdWJsa19jdHJsX2NtZChkZXYsICZhbXA7ZGF0YSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBhcnNlX3BhcmFtX3R5cGVzKGNvbnN0IGNoYXIgKmFyZywgX191MzIgKnR5cGVzKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMTI4XSwgKnNhdmUgPSBOVUxMLCAqdG9rOwomIzQzOwomIzQzOwlpZiAoc3RybGVuKGFyZykgJmd0Oz0gc2l6ZW9mKGJ1ZikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJc3RyY3B5KGJ1ZiwgYXJnKTsKJiM0MzsJKnR5cGVzID0gMDsKJiM0MzsJdG9rID0gc3RydG9rX3IoYnVmLCAmIzM0OywmIzM0OywgJmFtcDtzYXZlKTsKJiM0MzsJd2hpbGUgKHRvaykgewomIzQzOwkJaWYgKCFzdHJjbXAodG9rLCAmIzM0O25vbmUmIzM0OykpCiYjNDM7CQkJOwomIzQzOwkJZWxzZSBpZiAoIXN0cmNtcCh0b2ssICYjMzQ7YmFzaWMmIzM0OykpCiYjNDM7CQkJKnR5cGVzIHw9IFVCTEtfUEFSQU1fVFlQRV9CQVNJQzsKJiM0MzsJCWVsc2UgaWYgKCFzdHJjbXAodG9rLCAmIzM0O3pvbmVkJiMzNDspKQomIzQzOwkJCSp0eXBlcyB8PSBVQkxLX1BBUkFNX1RZUEVfWk9ORUQ7CiYjNDM7CQllbHNlCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl0b2sgPSBzdHJ0b2tfcihOVUxMLCAmIzM0OywmIzM0OywgJmFtcDtzYXZlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjb25zdCBzdHJ1Y3QgZGV2X2N0eCAqY3R4LAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgdWJsa19wYXJhbXMgKnBhcmFtcykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBwYXJhbXNfY3R4ICpwID0gJmFtcDtjdHgtJmd0O3BhcmFtczsKJiM0MzsKJiM0MzsJKnBhcmFtcyA9IChzdHJ1Y3QgdWJsa19wYXJhbXMpIHsKJiM0MzsJCS50eXBlcyA9IHAtJmd0O3R5cGVzLAomIzQzOwkJLmJhc2ljID0gewomIzQzOwkJCS5sb2dpY2FsX2JzX3NoaWZ0CT0gcC0mZ3Q7bG9naWNhbF9ic19zaGlmdCwKJiM0MzsJCQkucGh5c2ljYWxfYnNfc2hpZnQJPSBwLSZndDtwaHlzaWNhbF9ic19zaGlmdCwKJiM0MzsJCQkuaW9fbWluX3NoaWZ0CQk9IHAtJmd0O2lvX21pbl9zaGlmdCwKJiM0MzsJCQkuaW9fb3B0X3NoaWZ0CQk9IHAtJmd0O2lvX29wdF9zaGlmdCwKJiM0MzsJCQkubWF4X3NlY3RvcnMJCT0gcC0mZ3Q7bWF4X3NlY3RvcnMsCiYjNDM7CQkJLmNodW5rX3NlY3RvcnMJCT0gcC0mZ3Q7Y2h1bmtfc2VjdG9ycywKJiM0MzsJCQkuZGV2X3NlY3RvcnMJCT0gcC0mZ3Q7ZGV2X3NlY3RvcnMsCiYjNDM7CQl9LAomIzQzOwkJLnpvbmVkID0gewomIzQzOwkJCS5tYXhfb3Blbl96b25lcwkJPSBwLSZndDttYXhfb3Blbl96b25lcywKJiM0MzsJCQkubWF4X2FjdGl2ZV96b25lcwk9IHAtJmd0O21heF9hY3RpdmVfem9uZXMsCiYjNDM7CQkJLm1heF96b25lX2FwcGVuZF9zZWN0b3JzID0gcC0mZ3Q7bWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMsCiYjNDM7CQl9LAomIzQzOwl9OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdWJsa19jdHJsX3VwZGF0ZV9zaXplKHN0cnVjdCB1YmxrX2RldiAqZGV2LAogCQlfX3U2NCBucl9zZWN0cykKIHsKQEAgLTE3NzIsNiAmIzQzOzE4MjgsNTEgQEAgc3RhdGljIGludCBfX2NtZF9kZXZfYWRkKGNvbnN0IHN0cnVjdCBkZXZfY3R4ICpjdHgpCiAKIHN0YXRpYyBpbnQgX19jbWRfZGV2X2xpc3Qoc3RydWN0IGRldl9jdHggKmN0eCk7CiAKJiM0MztzdGF0aWMgaW50IGNtZF9kZXZfc2V0X3BhcmFtcyhzdHJ1Y3QgZGV2X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHVibGtzcnZfY3RybF9kZXZfaW5mbyAqaW5mbzsKJiM0MzsJc3RydWN0IHVibGtfcGFyYW1zIHBhcmFtczsKJiM0MzsJc3RydWN0IHVibGtfZGV2ICpkZXY7CiYjNDM7CV9fdTY0IGZlYXR1cmVzOwomIzQzOwlpbnQgcmV0LCBkZWxfcmV0OwomIzQzOwomIzQzOwlkZXYgPSB1YmxrX2N0cmxfaW5pdCgpOwomIzQzOwlpZiAoIWRldikKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlyZXQgPSB1YmxrX2N0cmxfZ2V0X2ZlYXR1cmVzKGRldiwgJmFtcDtmZWF0dXJlcyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghKGZlYXR1cmVzICZhbXA7IFVCTEtfRl9DTURfSU9DVExfRU5DT0RFKSkgewomIzQzOwkJcmV0ID0gLUVOT1RTVVA7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpbmZvID0gJmFtcDtkZXYtJmd0O2Rldl9pbmZvOwomIzQzOwlpbmZvLSZndDtkZXZfaWQgPSBjdHgtJmd0O2Rldl9pZDsKJiM0MzsJaW5mby0mZ3Q7bnJfaHdfcXVldWVzID0gY3R4LSZndDtucl9od19xdWV1ZXM7CiYjNDM7CWluZm8tJmd0O3F1ZXVlX2RlcHRoID0gY3R4LSZndDtxdWV1ZV9kZXB0aDsKJiM0MzsJaW5mby0mZ3Q7aW9fZGVzY19zaXplID0gY3R4LSZndDtpb19kZXNjX3NpemU7CiYjNDM7CWluZm8tJmd0O2ZsYWdzID0gY3R4LSZndDtmbGFnczsKJiM0MzsKJiM0MzsJcmV0ID0gdWJsa19jdHJsX2FkZF9kZXYoZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJdWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjdHgsICZhbXA7cGFyYW1zKTsKJiM0MzsKJiM0MzsJcmV0ID0gdWJsa19jdHJsX3NldF9wYXJhbXMoZGV2LCAmYW1wO3BhcmFtcyk7CiYjNDM7CXByaW50ZigmIzM0O1NFVF9QQVJBTVMgcmV0dXJuZWQgJWRcbiYjMzQ7LCByZXQpOwomIzQzOwomIzQzOwlkZWxfcmV0ID0gdWJsa19jdHJsX2RlbF9kZXYoZGV2KTsKJiM0MzsJaWYgKGRlbF9yZXQgJmx0OyAwICZhbXA7JmFtcDsgcmV0ID09IDApCiYjNDM7CQlyZXQgPSBkZWxfcmV0OwomIzQzO291dDoKJiM0MzsJdWJsa19jdHJsX2RlaW5pdChkZXYpOwomIzQzOwlyZXR1cm4gcmV0ICZsdDsgMCA/IHJldCA6IDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBjbWRfZGV2X2FkZChzdHJ1Y3QgZGV2X2N0eCAqY3R4KQogewogCWludCByZXM7CkBAIC0yMTE3LDYgJiM0MzsyMjE4LDkgQEAgc3RhdGljIGludCBjbWRfZGV2X2hlbHAoY2hhciAqZXhlKQogCXByaW50ZigmIzM0O1x0IC0tc2FmZSBvbmx5IHN0b3AgaWYgZGV2aWNlIGhhcyBubyBhY3RpdmUgb3BlbmVyc1xuXG4mIzM0Oyk7CiAJcHJpbnRmKCYjMzQ7JXMgbGlzdCBbLW4gZGV2X2lkXSAtYSBcbiYjMzQ7LCBleGUpOwogCXByaW50ZigmIzM0O1x0IC1hIGxpc3QgYWxsIGRldmljZXMsIC1uIGxpc3Qgc3BlY2lmaWVkIGRldmljZSwgZGVmYXVsdCAtYSBcblxuJiMzNDspOwomIzQzOwlwcmludGYoJiMzNDslcyBzZXRfcGFyYW1zIFstbiBkZXZfaWRdIFstcSBucl9xdWV1ZXNdIFstZCBkZXB0aF0gWy11XSBbLS16b25lZF1cbiYjMzQ7LCBleGUpOwomIzQzOwlwcmludGYoJiMzNDtcdFstLXBhcmFtX3R5cGVzIGJhc2ljWyx6b25lZF18bm9uZV1cbiYjMzQ7KTsKJiM0MzsJcHJpbnRmKCYjMzQ7XHQgaXNzdWUgQUREX0RFViwgU0VUX1BBUkFNUyBhbmQgREVMX0RFViB3aXRob3V0IFNUQVJUX0RFVlxuXG4mIzM0Oyk7CiAJcHJpbnRmKCYjMzQ7JXMgZmVhdHVyZXNcbiYjMzQ7LCBleGUpOwogCXByaW50ZigmIzM0OyVzIHVwZGF0ZV9zaXplIC1uIGRldl9pZCAtc3wtLXNpemUgc2l6ZV9pbl9ieXRlcyBcbiYjMzQ7LCBleGUpOwogCXByaW50ZigmIzM0OyVzIHF1aWVzY2UgLW4gZGV2X2lkXG4mIzM0OywgZXhlKTsKQEAgLTIxNjAsNiAmIzQzOzIyNjQsMTggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJeyAmIzM0O2h0bGImIzM0OywJCTEsCU5VTEwsICAwICB9LAogCQl7ICYjMzQ7cmRvbmx5X3NobWVtX2J1ZiYjMzQ7LAkwLAlOVUxMLCAgMCAgfSwKIAkJeyAmIzM0O2lvX2Rlc2Nfc2l6ZSYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKJiM0MzsJCXsgJiMzNDt6b25lZCYjMzQ7LAkJMCwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7cGFyYW1fdHlwZXMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bG9naWNhbF9ic19zaGlmdCYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKJiM0MzsJCXsgJiMzNDtwaHlzaWNhbF9ic19zaGlmdCYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKJiM0MzsJCXsgJiMzNDtpb19taW5fc2hpZnQmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7aW9fb3B0X3NoaWZ0JiMzNDssCTEsCU5VTEwsICAwICB9LAomIzQzOwkJeyAmIzM0O21heF9zZWN0b3JzJiMzNDssCTEsCU5VTEwsICAwICB9LAomIzQzOwkJeyAmIzM0O2NodW5rX3NlY3RvcnMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7ZGV2X3NlY3RvcnMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMmIzM0OywgMSwgTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bWF4X29wZW5fem9uZXMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bWF4X2FjdGl2ZV96b25lcyYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKIAkJeyAwLCAwLCAwLCAwIH0KIAl9OwogCWNvbnN0IHN0cnVjdCB1YmxrX3RndF9vcHMgKm9wcyA9IE5VTEw7CkBAIC0yMTczLDYgJiM0MzsyMjg5LDE5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCS50Z3RfdHlwZQk9CSYjMzQ7dW5rbm93biYjMzQ7LAogCQkuY3N1bV90eXBlCT0JTEJNRF9QSV9DU1VNX05PTkUsCiAJCS5pb19kZXNjX3NpemUJPQlzaXplb2Yoc3RydWN0IHVibGtzcnZfaW9fZGVzYyksCiYjNDM7CQkucGFyYW1zID0gewomIzQzOwkJCS50eXBlcwkJCT0gVUJMS19QQVJBTV9UWVBFX0JBU0lDLAomIzQzOwkJCS5sb2dpY2FsX2JzX3NoaWZ0CT0gS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCwKJiM0MzsJCQkucGh5c2ljYWxfYnNfc2hpZnQJPSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCwKJiM0MzsJCQkuaW9fbWluX3NoaWZ0CQk9IEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlQsCiYjNDM7CQkJLmlvX29wdF9zaGlmdAkJPSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCwKJiM0MzsJCQkubWF4X3NlY3RvcnMJCT0KJiM0MzsJCQkJVUJMS19JT19NQVhfQllURVMgJmd0OyZndDsgS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCwKJiM0MzsJCQkuY2h1bmtfc2VjdG9ycwkJPSBLVUJMS19QQVJBTV9aT05FX1NFQ1RPUlMsCiYjNDM7CQkJLmRldl9zZWN0b3JzCQk9IEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTLAomIzQzOwkJCS5tYXhfem9uZV9hcHBlbmRfc2VjdG9ycyA9CiYjNDM7CQkJCUtVQkxLX1BBUkFNX1pPTkVfQVBQRU5EX1NFQ1RPUlMsCiYjNDM7CQl9LAogCX07CiAJaW50IHJldCA9IC1FSU5WQUwsIGk7CiAJaW50IHRndF9hcmdjID0gMTsKQEAgLTIyODgsNiAmIzQzOzI0MTcsMzQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQljdHguZmxhZ3MgfD0gVUJMS19GX0lPX0RFU0NfU0laRTsKIAkJCQljdHguaW9fZGVzY19zaXplID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwogCQkJfQomIzQzOwkJCWlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsICYjMzQ7em9uZWQmIzM0OykpCiYjNDM7CQkJCWN0eC5mbGFncyB8PSBVQkxLX0ZfWk9ORUQ7CiYjNDM7CQkJaWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgJiMzNDtwYXJhbV90eXBlcyYjMzQ7KSkgewomIzQzOwkJCQlyZXQgPSBwYXJzZV9wYXJhbV90eXBlcyhvcHRhcmcsICZhbXA7Y3R4LnBhcmFtcy50eXBlcyk7CiYjNDM7CQkJCWlmIChyZXQpCiYjNDM7CQkJCQlyZXR1cm4gcmV0OwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2xvZ2ljYWxfYnNfc2hpZnQmIzM0OykpCiYjNDM7CQkJCWN0eC5wYXJhbXMubG9naWNhbF9ic19zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O3BoeXNpY2FsX2JzX3NoaWZ0JiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLnBoeXNpY2FsX2JzX3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwomIzQzOwkJCWlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsICYjMzQ7aW9fbWluX3NoaWZ0JiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLmlvX21pbl9zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2lvX29wdF9zaGlmdCYjMzQ7KSkKJiM0MzsJCQkJY3R4LnBhcmFtcy5pb19vcHRfc2hpZnQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7CiYjNDM7CQkJaWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgJiMzNDttYXhfc2VjdG9ycyYjMzQ7KSkKJiM0MzsJCQkJY3R4LnBhcmFtcy5tYXhfc2VjdG9ycyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2NodW5rX3NlY3RvcnMmIzM0OykpCiYjNDM7CQkJCWN0eC5wYXJhbXMuY2h1bmtfc2VjdG9ycyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2Rldl9zZWN0b3JzJiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLmRldl9zZWN0b3JzID0gc3RydG91bGwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O21heF96b25lX2FwcGVuZF9zZWN0b3JzJiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLm1heF96b25lX2FwcGVuZF9zZWN0b3JzID0KJiM0MzsJCQkJCXN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O21heF9vcGVuX3pvbmVzJiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLm1heF9vcGVuX3pvbmVzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwomIzQzOwkJCWlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsICYjMzQ7bWF4X2FjdGl2ZV96b25lcyYjMzQ7KSkKJiM0MzsJCQkJY3R4LnBhcmFtcy5tYXhfYWN0aXZlX3pvbmVzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwogCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTs/JiMzOTs6CiAJCQkvKgpAQCAtMjM3Nyw3ICYjNDM7MjUzNCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCW9wcy0mZ3Q7cGFyc2VfY21kX2xpbmUoJmFtcDtjdHgsIHRndF9hcmdjLCB0Z3RfYXJndik7CiAJfQogCi0JaWYgKCFzdHJjbXAoY21kLCAmIzM0O2FkZCYjMzQ7KSkKJiM0MzsJaWYgKCFzdHJjbXAoY21kLCAmIzM0O3NldF9wYXJhbXMmIzM0OykpCiYjNDM7CQlyZXQgPSBjbWRfZGV2X3NldF9wYXJhbXMoJmFtcDtjdHgpOwomIzQzOwllbHNlIGlmICghc3RyY21wKGNtZCwgJiMzNDthZGQmIzM0OykpCiAJCXJldCA9IGNtZF9kZXZfYWRkKCZhbXA7Y3R4KTsKIAllbHNlIGlmICghc3RyY21wKGNtZCwgJiMzNDtyZWNvdmVyJiMzNDspKSB7CiAJCWlmIChjdHguZGV2X2lkICZsdDsgMCkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oCmluZGV4IGUyN2MxNTRmYzkxMDguLmQ5OGYzZDYxMmQ4ODggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmgKQEAgLTYzLDYgJiM0Mzs2MywyMiBAQCBzdHJ1Y3QgZmF1bHRfaW5qZWN0X2N0eCB7CiAJYm9vbCBkaWVfZHVyaW5nX2ZldGNoOwogfTsKIAomIzQzO3N0cnVjdCBwYXJhbXNfY3R4IHsKJiM0MzsJX191MzIgdHlwZXM7CiYjNDM7CiYjNDM7CV9fdTMyIGxvZ2ljYWxfYnNfc2hpZnQ7CiYjNDM7CV9fdTMyIHBoeXNpY2FsX2JzX3NoaWZ0OwomIzQzOwlfX3UzMiBpb19taW5fc2hpZnQ7CiYjNDM7CV9fdTMyIGlvX29wdF9zaGlmdDsKJiM0MzsJX191MzIgbWF4X3NlY3RvcnM7CiYjNDM7CV9fdTMyIGNodW5rX3NlY3RvcnM7CiYjNDM7CV9fdTY0IGRldl9zZWN0b3JzOwomIzQzOwomIzQzOwlfX3UzMiBtYXhfb3Blbl96b25lczsKJiM0MzsJX191MzIgbWF4X2FjdGl2ZV96b25lczsKJiM0MzsJX191MzIgbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnM7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBkZXZfY3R4IHsKIAljaGFyIHRndF90eXBlWzE2XTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtOTksNiAmIzQzOzExNSw4IEBAIHN0cnVjdCBkZXZfY3R4IHsKIAkvKiBmb3IgJiMzOTt1cGRhdGVfc2l6ZSYjMzk7IGNvbW1hbmQgKi8KIAl1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTsKIAomIzQzOwlzdHJ1Y3QgcGFyYW1zX2N0eCBwYXJhbXM7CiYjNDM7CiAJY2hhciAqaHRsYl9wYXRoOwogCiAJdW5pb24gewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3BhcmFtc18wMS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTI4ZTcyYjEwMzVkMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2gKQEAgLTAsMCAmIzQzOzEsMTE0IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7LiAmIzM0OyQoY2QgJiMzNDskKGRpcm5hbWUgJiMzNDskMCYjMzQ7KSYjMzQ7ICZhbXA7JmFtcDsgcHdkKSYjMzQ7L3Rlc3RfY29tbW9uLnNoCiYjNDM7CiYjNDM7RVJSX0NPREU9MAomIzQzOwomIzQzO3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MoKQomIzQzO3sKJiM0MzsJbG9jYWwgbmFtZT0kMQomIzQzOwomIzQzOwlzaGlmdAomIzQzOwomIzQzOwllY2hvICYjMzQ7JG5hbWUmIzM0OwomIzQzOwlpZiAhICYjMzQ7JFVCTEtfUFJPRyYjMzQ7IHNldF9wYXJhbXMgLXEgMSAtZCAyICYjMzQ7JEAmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0OyRuYW1lOiBTRVRfUEFSQU1TIGNoZWNrIGZhaWxlZCYjMzQ7CiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztydW5fc2V0X3BhcmFtc19mYWlsdXJlKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5hbWU9JDEKJiM0MzsKJiM0MzsJc2hpZnQKJiM0MzsKJiM0MzsJZWNobyAmIzM0OyRuYW1lJiMzNDsKJiM0MzsJaWYgJiMzNDskVUJMS19QUk9HJiMzNDsgc2V0X3BhcmFtcyAtcSAxIC1kIDIgJiMzNDskQCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7JG5hbWU6IFNFVF9QQVJBTVMgc3VjY2VlZGVkIHVuZXhwZWN0ZWRseSYjMzQ7CiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztydW5fem9uZWRfc2V0X3BhcmFtc19zdWNjZXNzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5hbWU9JDEKJiM0MzsKJiM0MzsJc2hpZnQKJiM0MzsKJiM0MzsJZWNobyAmIzM0OyRuYW1lJiMzNDsKJiM0MzsJaWYgISAmIzM0OyRVQkxLX1BST0cmIzM0OyBzZXRfcGFyYW1zIC1xIDEgLWQgMiAtdSAtLXpvbmVkICYjMzQ7JEAmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0OyRuYW1lOiBTRVRfUEFSQU1TIGNoZWNrIGZhaWxlZCYjMzQ7CiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5hbWU9JDEKJiM0MzsKJiM0MzsJc2hpZnQKJiM0MzsKJiM0MzsJZWNobyAmIzM0OyRuYW1lJiMzNDsKJiM0MzsJaWYgJiMzNDskVUJMS19QUk9HJiMzNDsgc2V0X3BhcmFtcyAtcSAxIC1kIDIgLXUgLS16b25lZCAmIzM0OyRAJiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDskbmFtZTogU0VUX1BBUkFNUyBzdWNjZWVkZWQgdW5leHBlY3RlZGx5JiMzNDsKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO19wcmVwX3Rlc3QgJiMzNDtwYXJhbXMmIzM0OyAmIzM0O1NFVF9QQVJBTVMgdmFsaWRhdGlvbiYjMzQ7CiYjNDM7CiYjNDM7aWYgWyAhIC1jIC9kZXYvdWJsay1jb250cm9sIF07IHRoZW4KJiM0MzsJX2NsZWFudXBfdGVzdAomIzQzOwlfc2hvd19yZXN1bHQgJFRJRCAkVUJMS19TS0lQX0NPREUKJiM0MztmaQomIzQzOwomIzQzO3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MgJiMzNDt2YWxpZCBiYXNpYyBwYXJhbXMmIzM0OyB8fAomIzQzOwlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7cnVuX3NldF9wYXJhbXNfZmFpbHVyZSAmIzM0O21pc3NpbmcgYmFzaWMgcGFyYW1zJiMzNDsgXAomIzQzOwktLXBhcmFtX3R5cGVzIG5vbmUgfHwKJiM0MzsJRVJSX0NPREU9MQomIzQzOwomIzQzO3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDtsb2dpY2FsIGJsb2NrIGxhcmdlciB0aGFuIHBoeXNpY2FsIGJsb2NrJiMzNDsgXAomIzQzOwktLWxvZ2ljYWxfYnNfc2hpZnQgMTIgLS1waHlzaWNhbF9ic19zaGlmdCA5IHx8CiYjNDM7CUVSUl9DT0RFPTEKJiM0MzsKJiM0MztydW5fc2V0X3BhcmFtc19mYWlsdXJlICYjMzQ7dG9vIGxhcmdlIG1heCBzZWN0b3JzJiMzNDsgXAomIzQzOwktLW1heF9zZWN0b3JzIDIwNDkgfHwKJiM0MzsJRVJSX0NPREU9MQomIzQzOwomIzQzO2lmIF9oYXZlX2ZlYXR1cmUgJiMzNDtaT05FRCYjMzQ7ICZhbXA7JmFtcDsgX2hhdmVfZmVhdHVyZSAmIzM0O1VTRVJfQ09QWSYjMzQ7OyB0aGVuCiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX3N1Y2Nlc3MgJiMzNDt2YWxpZCB6b25lZCBwYXJhbXMmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDttaXNzaW5nIHpvbmVkIHBhcmFtcyYjMzQ7IHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDtub24tcG93ZXItb2YtMiB6b25lIHNpemUmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFwKJiM0MzsJCS0tY2h1bmtfc2VjdG9ycyA5NiAtLWRldl9zZWN0b3JzICQoKDk2ICogMTYpKSB8fAomIzQzOwkJRVJSX0NPREU9MQomIzQzOwomIzQzOwlydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlICYjMzQ7emVybyBtYXggem9uZSBhcHBlbmQmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFwKJiM0MzsJCS0tbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgMCB8fAomIzQzOwkJRVJSX0NPREU9MQomIzQzOwomIzQzOwlydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlICYjMzQ7dG9vIG1hbnkgb3BlbiB6b25lcyYjMzQ7IFwKJiM0MzsJCS0tcGFyYW1fdHlwZXMgYmFzaWMsem9uZWQgXAomIzQzOwkJLS1kZXZfc2VjdG9ycyAkKCgxMjggKiA0KSkgLS1tYXhfb3Blbl96b25lcyA1IHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDt0b28gbWFueSBhY3RpdmUgem9uZXMmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFwKJiM0MzsJCS0tZGV2X3NlY3RvcnMgJCgoMTI4ICogNCkpIC0tbWF4X2FjdGl2ZV96b25lcyA1IHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7ZWxzZQomIzQzOwllY2hvICYjMzQ7em9uZWQgdWJsayBmZWF0dXJlIHVuYXZhaWxhYmxlLCBza2lwIHpvbmVkIFNFVF9QQVJBTVMgY2FzZXMmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7X2NsZWFudXBfdGVzdAomIzQzO19zaG93X3Jlc3VsdCAkVElEICRFUlJfQ09ERQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTQyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIHVibGsgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCB0d2Vha3MgdGhlIGB1YmxrX2Rydi5jYCBmaWxlIGFuZCBzb21lIGFzc29jaWF0ZWQgc2VsZi10ZXN0cy4gVGhlIGNvcmUgY2hhbmdlIGlzIGEgc2luZ2xlLWxpbmUgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYHVibGtfdmFsaWRhdGVfcGFyYW1zYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdGlnaHRlbmluZyB1cCBhIHZhbGlkYXRpb24gY2hlY2suICBTcGVjaWZpY2FsbHksIGluc3RlYWQgb2YganVzdCBtYWtpbmcgc3VyZSBgcC0mZ3Q7Y2h1bmtfc2VjdG9yc2AgaXMgKm5vdCogemVybyB3aGVuIGRlYWxpbmcgd2l0aCB6b25lZCBkZXZpY2VzLCB3ZSYjMzk7cmUgbm93IGVuZm9yY2luZyB0aGF0IGl0IGJlIGEgcG93ZXIgb2YgMi4gIFNtYXJ0OyBpdCBoZWxwcyB3aXRoIGFsaWdubWVudCBpc3N1ZXMsIHByb2JhYmx5LgoKVGhlIHF1ZXN0aW9uIG5vdyBpcywgaXMgdGhpcyBzb21ldGhpbmcgd2Ugc2hvdWxkIGNvbnNpZGVyIGZ1enppbmc/IExldCYjMzk7cyBicmVhayBpdCBkb3duLiBUaGUgY2hhbmdlIGlzIGluIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHVibGsgZHJpdmVyLiAgVWJsayBpcyBhIHVzZXItc3BhY2UgYmxvY2sgZGV2aWNlIGRyaXZlciwgd2hpY2ggbWFrZXMgaXQgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB3aGljaCBpcyBnb29kIGZvciB1cy4gVGhlIGNoYW5nZSBpdHNlbGYgaXMgYSBmYWlybHkgbWlub3IgZnVuY3Rpb25hbCBmaXgsIGEgYml0IGxpa2UgZW5zdXJpbmcgdGhhdCB3ZSBhcmUgZ3VhcmRpbmcgYWdhaW5zdCBhIHBhcnRpY3VsYXIgYnVnIHdoZXJlIGEgbm9uLXBvd2VyLW9mLTIgYGNodW5rX3NlY3RvcnNgIHZhbHVlIGNvdWxkIGJlIHBhc3NlZC4gIFRoYXQgY291bGQgZGVmaW5pdGVseSBsZWFkIHRvIHByb2JsZW1zIGxhdGVyIG9uLgoKU28sIHllYWgsIGl0IHNlZW1zIGxpa2UgdGhpcyBpcyB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gV2Ugd2FudCB0byBiZSBzdXJlIHRoYXQgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgb3IgZXhwb3NlIGFueSBleGlzdGluZyBvbmVzLiBJdCYjMzk7cyBhIGtlcm5lbCBmdW5jdGlvbmFsIGNoYW5nZSwgc28gaXQgaXMgcHJvYmFibHkgd29ydGggb3VyIHRpbWUuIExldCYjMzk7cyBkZWx2ZSBkZWVwZXIgaW50byBgdWJsa192YWxpZGF0ZV9wYXJhbXNgIGl0c2VsZiBhbmQgc2VlIHdoYXQga2luZCBvZiBpbnB1dHMgaXQmIzM5O3MgZXhwb3NlZCB0by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX3ZhbGlkYXRlX3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9OTM0PXN0YXRpYyBlbnVtIGJsa19pbnRlZ3JpdHlfY2hlY2tzdW0gdWJsa19pbnRlZ3JpdHlfY3N1bV90eXBlKHU4IGNzdW1fdHlwZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtOTUwLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjk1MTpzdGF0aWMgaW50IHVibGtfdmFsaWRhdGVfcGFyYW1zKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtOTUyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTA0Mj1zdGF0aWMgaW50IHVibGtfY3RybF9zZXRfcGFyYW1zKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUwNzQtXHRcdHViLVx1MDAzZXBhcmFtcy50eXBlcyBcdTAwMjY9IFVCTEtfUEFSQU1fVFlQRV9BTEw7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTA3NTpcdFx0cmV0ID0gdWJsa192YWxpZGF0ZV9wYXJhbXModWIpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUwNzYtXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHVibGtfY3RybF9zZXRfcGFyYW1zYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBjb2RlIHNob3dzIHRoYXQgYHVibGtfY3RybF9zZXRfcGFyYW1zYCBjYWxscyBgdWJsa192YWxpZGF0ZV9wYXJhbXNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZW5zdXJpbmcgcGFyYW1ldGVyIGludGVncml0eS4gTm93LCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGB1YmxrX2N0cmxfc2V0X3BhcmFtc2AgaXRzZWxmIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWJsa19jdHJsX3NldF9wYXJhbXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTUwMTI9c3RhdGljIGludCB1YmxrX2N0cmxfZ2V0X3BhcmFtcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MDQxLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjUwNDI6c3RhdGljIGludCB1YmxrX2N0cmxfc2V0X3BhcmFtcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUwNDMtXHRcdGNvbnN0IHN0cnVjdCB1Ymxrc3J2X2N0cmxfY21kICpoZWFkZXIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU3NjM9c3RhdGljIGludCB1YmxrX2N0cmxfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTgzNi1cdGNhc2UgVUJMS19DTURfU0VUX1BBUkFNUzpcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1ODM3Olx0XHRyZXQgPSB1YmxrX2N0cmxfc2V0X3BhcmFtcyh1YiwgXHUwMDI2aGVhZGVyKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODM4LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzQwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBVYmxrIENvbnRyb2wgUGF0aCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgVWJsayBjb250cm9sIHBhdGgsIGFuZCBteSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGVpdGhlciBgdWJsa19jdHJsX3VyaW5nX2NtZGAgb3IgYHVibGtfY3RybF9zZXRfcGFyYW1zYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50cywgc28gbGV0JiMzOTtzIHN0YXJ0IHdpdGggYHVibGtfY3RybF91cmluZ19jbWRgLiBJJiMzOTtsbCB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGNvbW1hbmRzIGFyZSBhY3R1YWxseSBwcm9jZXNzZWQgd2hlbiB0aGV5IGNvbWUgaW4gdmlhIHRoZSBVcmluZyBpbnRlcmZhY2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgY29yZSBpbnRlcmFjdGlvbiBtb2RlbC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZmxvdyBmcm9tIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWJsa19jdHJsX3VyaW5nX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTYxNz1zdGF0aWMgYm9vbCB1YmxrX3RyeV9idWZfbWF0Y2goc3RydWN0IHVibGtfZGV2aWNlICp1Yixcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTY3MC1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NjcxOnN0YXRpYyBpbnQgdWJsa19jdHJsX3VyaW5nX2NtZF9wZXJtaXNzaW9uKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTY3Mi1cdFx0dTMyIGNtZF9vcCwgc3RydWN0IHVibGtzcnZfY3RybF9jbWQgKmhlYWRlcilcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc0OS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NzUwOnN0YXRpYyBib29sIHVibGtfY3RybF91cmluZ19jbWRfbWF5X3NsZWVwKHUzMiBjbWRfb3ApXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc1MS17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NjItXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTc2MzpzdGF0aWMgaW50IHVibGtfY3RybF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NjQtXHRcdHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc3My1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1Nzc0Olx0aWYgKHVibGtfY3RybF91cmluZ19jbWRfbWF5X3NsZWVwKGNtZF9vcCkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc3NS1cdCAgICBpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9OT05CTE9DSylcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTgwMy1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1ODA0Olx0XHRyZXQgPSB1YmxrX2N0cmxfdXJpbmdfY21kX3Blcm1pc3Npb24odWIsIGNtZF9vcCwgXHUwMDI2aGVhZGVyKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODA1LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01ODc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY3RsX2ZvcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTg3NS1cdC5vcGVuXHRcdD0gbm9uc2Vla2FibGVfb3BlbixcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1ODc2Olx0LnVyaW5nX2NtZCAgICAgID0gdWJsa19jdHJsX3VyaW5nX2NtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODc3LVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgdWJsa19jdHJsX3VyaW5nX2NtZGAgRW50cnkgUG9pbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB1YmxrX2N0cmxfdXJpbmdfY21kYCDigJMgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBob29rLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZ29pbmcgdG8gYmUgcmVxdWlyZWQgYXQgdGhpcyBwb2ludD8gV2hhdCBsZXZlcnMgZG8gSSBuZWVkIHRvIHB1bGwgdG8gZ2V0IHRoZSBzeXN0ZW0gYmVoYXZpbmcgdGhlIHdheSBJIG5lZWQgaXQgdG8/IFdoYXQgcGFyYW1ldGVycyBhbSBJIGdvaW5nIHRvIGV4cG9zZSB0aHJvdWdoIHRoaXMgZW50cnk/IEFyZSB0aGVyZSBzcGVjaWZpYyBrbm9icyByZWxhdGVkIHRvIGhvdyBJIGhhbmRsZSB0aGUgY29tbWFuZHMgaGVyZSwgb3IgaXMgdGhpcyBtb3JlIGFib3V0IHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50IGJlZm9yZSB0aGUgY29tbWFuZHMgYmVnaW4gcHJvY2Vzc2luZz8gSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGltcG9ydGFudCBhc3BlY3RzIHRoYXQgSSB3YW50IHRvIGNvbmZpZ3VyZSBoZXJlLiBMZXQmIzM5O3Mgc3RhcnQgbWFwcGluZyBvdXQgdGhlIHZhcmlvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1VCTEsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI3LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI5LVx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYEJMS19ERVZfVUJMS2AgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYEJMS19ERVZfVUJMS2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSB6b29tIGluIG9uIHRoZSBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgaXMgdGhpcyB0aGluZyB0aWVkIHRvPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmlwcGxlIGVmZmVjdCBvZiBhbnkgY2hhbmdlcyBoZXJlLiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb3JlIGJsb2NrIGxheWVyIGludGVyZmFjZXM/IERldmljZSBtYXBwZXIgaW50ZWdyYXRpb24/IEFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggZXhpc3Rpbmcgc3RvcmFnZSBkcml2ZXJzPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIHByb2JsZW1zIGxpdmUuIEdvdHRhIG1ha2Ugc3VyZSBJIGZ1bGx5IGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMgdG8gYXNzZXNzIHRoZSBzY29wZSBvZiB0aGlzIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjg6XHRjb25maWcgQkxLX0RFVl9VQkxLXG4gMzI5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4gMzMwOlx0XHRzZWxlY3QgSU9fVVJJTkdcbiAzMzE6XHRcdGhlbHBcbiAzMzI6XHRcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xuIDMzMzpcdFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXG4gMzM0Olx0XHQgIGRlZmluaXRpb24gaXNuJiMzOTt0IGZpbmFsaXplZCB5ZXQsIGFuZCBtaWdodCBjaGFuZ2UgYWNjb3JkaW5nIHRvIGZ1dHVyZVxuIDMzNTpcdFx0ICByZXF1aXJlbWVudCwgc28gbWFyayBpcyBhcyBleHBlcmltZW50YWwgbm93LlxuIDMzNjpcdFxuIDMzNzpcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xuIDMzODpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZVwmIzM0O1xuIDMzOTpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX1VCTEtcbiAzNDA6XHRcdGRlZmF1bHQgeVxuIDM0MTpcdFx0aGVscFxuIDM0MjpcdFx0ICB1YmxrIGRyaXZlciBzdGFydGVkIHRvIHRha2UgcGxhaW4gY29tbWFuZCBlbmNvZGluZywgd2hpY2ggdHVybnMgb3V0XG4gMzQzOlx0XHQgIG9uZSBiYWQgd2F5LiBUaGUgdHJhZGl0aW9uYWwgaW9jdGwgY29tbWFuZCBvcGNvZGUgZW5jb2RlcyBtb3JlXG4gMzQ0Olx0XHQgIGluZm8gYW5kIGJhc2ljYWxseSBkZWZpbmVzIGVhY2ggY29kZSB1bmlxdWVseSwgc28gb3Bjb2RlIGNvbmZsaWN0XG4gMzQ1Olx0XHQgIGlzIGF2b2lkZWQsIGFuZCBkcml2ZXIgY2FuIGhhbmRsZSB3cm9uZyBjb21tYW5kIGVhc2lseSwgbWVhbnRpbWUgaXRcbiAzNDY6XHRcdCAgbWF5IGhlbHAgc2VjdXJpdHkgc3Vic3lzdGVtIHRvIGF1ZGl0IGlvX3VyaW5nIGNvbW1hbmQuXG4gMzQ3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIHVibGsgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZSBpcyBgQkxLX0RFVl9VQkxLYC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGNvcmUuIEJ1dCB0aGUgY2hhbmdlIGFsc28gbW9kaWZpZXMgYHVibGtfZGV2X2lzX3pvbmVkKHViKWAuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2UgbmVlZCB0byBjb25zaWRlcjogaXMgYEJMS19ERVZfWk9ORURgIGFsc28gaW52b2x2ZWQgb3IgcG90ZW50aWFsbHkgbmVlZGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcyBjaGFuZ2U/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBjb25maWd1cmF0aW9ucyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBvcGVyYXRpbmcgYXMgaW50ZW5kZWQgYW5kIHRoYXQgbm8gYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgdGhhdCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgYSBiaXQgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYW4gaW1wYWN0IG9uIHpvbmVkIGJsb2NrIGRldmljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfZGV2X2lzX3pvbmVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00NTU9c3RhdGljIGlubGluZSBib29sIHVibGtfZGV2X3N1cHBvcnRfdXNlcl9jb3B5KGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ1OS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0NjA6c3RhdGljIGlubGluZSBib29sIHVibGtfZGV2X2lzX3pvbmVkKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDYxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTcyPXN0YXRpYyBpbnQgdWJsa19kZXZfcGFyYW1fem9uZWRfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHVibGtfZGV2aWNlICp1Yilcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc2LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU3NzpcdGlmICghdWJsa19kZXZfaXNfem9uZWQodWIpKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3OC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTk1MT1zdGF0aWMgaW50IHVibGtfdmFsaWRhdGVfcGFyYW1zKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTk4Mi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo5ODM6XHRcdGlmICh1YmxrX2Rldl9pc196b25lZCh1YikgXHUwMDI2XHUwMDI2ICFpc19wb3dlcl9vZl8yKHAtXHUwMDNlY2h1bmtfc2VjdG9ycykpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtOTg0LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xMDA0LVx0XHRyZXR1cm4gdWJsa19kZXZfcGFyYW1fem9uZWRfdmFsaWRhdGUodWIpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjEwMDU6XHRlbHNlIGlmICh1YmxrX2Rldl9pc196b25lZCh1YikpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTAwNi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM4NTI9c3RhdGljIGludCB1YmxrX2NoZWNrX2JhdGNoX2NtZChjb25zdCBzdHJ1Y3QgdWJsa19iYXRjaF9pb19kYXRhICpkYXRhKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zODYyLVx0aWYgKCh1Yy1cdTAwM2VmbGFncyBcdTAwMjYgVUJMS19CQVRDSF9GX0hBU19aT05FX0xCQSkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mzg2MzpcdFx0XHQhdWJsa19kZXZfaXNfem9uZWQoZGF0YS1cdTAwM2V1YikpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzg2NC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTQ0NDc9c3RhdGljIGludCB1YmxrX2N0cmxfc3RhcnRfZGV2KHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ1NzAtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDU3MTpcdGlmICh1YmxrX2Rldl9pc196b25lZCh1YikpIHtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00NTcyLVx0XHRyZXQgPSB1YmxrX3JldmFsaWRhdGVfZGlza196b25lcyh1Yik7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTQ2NTc9c3RhdGljIGludCB1YmxrX2N0cmxfYWRkX2Rldihjb25zdCBzdHJ1Y3QgdWJsa3Nydl9jdHJsX2NtZCAqaGVhZGVyKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00ODI1LVx0ICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDgyNjpcdGlmICh1YmxrX2Rldl9pc196b25lZCh1YikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDgyNy1cdCAgICAoIUlTX0VOQUJMRUQoQ09ORklHX0JMS19ERVZfWk9ORUQpIHx8ICEodWItXHUwMDNlZGV2X2luZm8uZmxhZ3MgXHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDQ1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgdWJsayBab25lZCBCbG9jayBEZXZpY2UgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgc28gSSBzZWUgYENPTkZJR19CTEtfREVWX1pPTkVEYCBpcyBiZWluZyBjaGVja2VkIHdpdGhpbiB0aGUgYHVibGtfY3RybF9hZGRfZGV2YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kLCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSB0aGUgY29uZGl0aW9uYWwgbG9naWMgZm9yIGhhbmRsaW5nIHpvbmVkIGJsb2NrIGRldmljZXMuIE15IG5leHQgc3RlcCBoZXJlIGlzIGRlZmluaXRlbHkgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hlY2suIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2hlbiBhIHpvbmVkIGJsb2NrIGRldmljZSBpcyBkZXRlY3RlZC4KClRoZSBpbXBvcnRhbnQgZnVuY3Rpb24gdG8gZm9jdXMgb24gbm93IGlzIGNsZWFybHkgYHVibGtfZGV2X2lzX3pvbmVkYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoYXQgaXMgaW1wbGVtZW50ZWQgYW5kIHdoYXQgdGhlIGRlY2lzaW9uIHRyZWUgaW4gdGhhdCBmdW5jdGlvbiBsb29rcyBsaWtlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcyB0byBhY3R1YWxseSBkZXRlcm1pbmUgaWYgdGhlIGRldmljZSBpcyB6b25lZCBvciBub3QgYW5kIHdoYXQgZmxhZ3MgYXJlIHNldCBiYXNlZCBvbiB0aGF0IGRldGVybWluYXRpb24uIEkmIzM5O20gZ3Vlc3NpbmcgaXQgbG9va3MgYXQgYSBkZXZpY2UmIzM5O3MgY2hhcmFjdGVyaXN0aWNzLCBtYXliZSBpdHMgZ2VvbWV0cnkgb3Igc29tZSBzcGVjaWZpYyBmbGFncyBpbiB0aGUgZGV2aWNlJiMzOTtzIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gVGhlIGNvbmZpZ3VyYXRpb24gY2hlY2sgaGVyZSBzdWdnZXN0cyBgdWJsa19jdHJsX2FkZF9kZXZgIGlzIGRvaW5nIHNvbWUgc2V0dXAgb3IgY29uZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gdGhhdCByZWxpZXMgb24gdGhlIHpvbmVkL25vbi16b25lZCBkaXN0aW5jdGlvbi4gTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgYHVibGtfZGV2X2lzX3pvbmVkYCBhbmQgc2VlIGhvdyBpdCYjMzk7cyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0c3RhdGljIGlubGluZSBib29sIHVibGtfZGV2X2lzX3pvbmVkKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG4gNDYxOlx0e1xuIDQ2MjpcdFx0cmV0dXJuIHViLVx1MDAzZWRldl9pbmZvLmZsYWdzIFx1MDAyNiBVQkxLX0ZfWk9ORUQ7XG4gNDYzOlx0fVxuIDQ2NDpcdFxuIDQ2NTpcdHN0YXRpYyBpbmxpbmUgYm9vbCB1YmxrX3F1ZXVlX2lzX3pvbmVkKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXG4gNDY2Olx0e1xuIDQ2NzpcdFx0cmV0dXJuIHVicS1cdTAwM2VmbGFncyBcdTAwMjYgVUJMS19GX1pPTkVEO1xuIDQ2ODpcdH1cbiA0Njk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipab25lZCBCbG9jayBEZXZpY2UgVGVzdGluZyBTdHJhdGVneSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBpc3N1ZSBoZXJlLCB0aGUgdGhpbmcgSSYjMzk7bSBpbW1lZGlhdGVseSBmb2N1c2VkIG9uLCBpcyBlbnN1cmluZyBhIHJvYnVzdCB0ZXN0IHN1aXRlIGZvciB0aGlzIHpvbmVkIGJsb2NrIGRldmljZSBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyBiZWNvbWluZyBjbGVhciB0aGF0IGEgdHJ1bHkgY29tcHJlaGVuc2l2ZSBldmFsdWF0aW9uIGlzIGdvaW5nIHRvIGhpbmdlIG9uIHByb3BlciBoYW5kbGluZyBvZiBgQkxLX0RFVl9aT05FRGAuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBhbnkgdGVzdGluZyBJJiMzOTttIGRvaW5nIHRha2VzIHRoaXMgaW50byBhY2NvdW50LiBUaGlzIG1lYW5zIGNvbmZpcm1pbmcgYEJMS19ERVZfWk9ORURgIGlzIGFwcHJvcHJpYXRlbHkgZXhwb3NlZCB3aXRoaW4gdGhlIHN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IHZlcmlmeWluZyBpdHMgcHJlc2VuY2UgYXMgYSBjb25maWd1cmFibGUgb3B0aW9uLiBUaGlzIGlzIHRoZSBseW5jaHBpbiBJIG5lZWQgdG8gc2VjdXJlIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9aT05FRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz03Nz1jb25maWcgQkxLX0RFVl9XUklURV9NT1VOVEVEXG4tLVxuYmxvY2svS2NvbmZpZy05Ni1cbmJsb2NrL0tjb25maWc6OTc6Y29uZmlnIEJMS19ERVZfWk9ORURcbmJsb2NrL0tjb25maWctOTgtXHRib29sIFwmIzM0O1pvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODcyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBVYmxrIERyaXZlciBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBCTEtfREVWX1pPTkVEYCBjb25maWcsIHJpZ2h0PyBBbmQgYWxvbmdzaWRlIHRoYXQgd2UmIzM5O3ZlIGdvdCBgQkxLX0RFVl9VQkxLYC4gUmlnaHQsIGdvdCBpdC4gTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGFyZSBnb2luZyB0byBiZSBgdWJsa19jdHJsX3NldF9wYXJhbXNgIGFuZCBgdWJsa19jdHJsX3VyaW5nX2NtZGAuCgpGaXJzdCwgbGV0IG1lIGNoZWNrIGlmIGB1YmxrX2N0cmxfc2V0X3BhcmFtc2AgaXMgc3RhdGljLiBZZXMsIGl0IGlzLiBIbW0sIHdhaXQgYSBzZWNvbmQsIHRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byBwcmVmZXIgKm5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkKiBlbnRyeSBwb2ludHMuIEludGVybmFsIHN0YXRpYyBoZWxwZXJzLCB0aGUgcHJvbXB0IHN0YXRlcywgZ2V0IGlubGluZWQgYW5kIGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuCgpSaWdodCwgc28gYHVibGtfY3RybF9zZXRfcGFyYW1zYCBiZWluZyBzdGF0aWMgaXMgYSBwb3RlbnRpYWwgaXNzdWUuIExldCYjMzk7cyBzZWUuLi4gZXZlbiB0aG91Z2ggaXQgKmlzKiBzdGF0aWMsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHdpdGhpbiBgdWJsa19jdHJsX3VyaW5nX2NtZGAsIHdoaWNoIGlzIGEgc3dpdGNoIGNhc2UsIHNvIGl0ICptaWdodCogbm90IGJlIGlubGluZWQuIEJ1dCwgYHVibGtfY3RybF91cmluZ19jbWRgIGl0c2VsZiBpcyBkZWZpbml0ZWx5IGFuIGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIGdvb2QuCgpTbywgbGV0JiMzOTtzIGxvb2sgYXQgYHVibGtfY3RybF91cmluZ19jbWRgLiBPa2F5LCBpdCYjMzk7cyBhbHNvIHN0YXRpYywgYnV0IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGB1YmxrX2N0bF9mb3BzLnVyaW5nX2NtZGAuIFRoYXQgYXNzaWdubWVudCBpbXBsaWVzIGl0IGhhcyBhIGRlZmluZWQgc3ltYm9sLCByZWdhcmRsZXNzIG9mIHRoZSBgc3RhdGljYCBkZWNsYXJhdGlvbi4gTm93LCBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBhbnkgKm5vbiotc3RhdGljIGZ1bmN0aW9uIHRoYXQgSSBjYW4gcG9pbnQgdG8uCgpMZXQmIzM5O3MgZGlnIGludG8gYHVibGtfY3RybF91cmluZ19jbWRgIGFnYWluLCBub3cgaW4gYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgaXMgYW4gYXBwcm9wcmlhdGUgZW50cnkgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfY3RybF91cmluZ19jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU2MTc9c3RhdGljIGJvb2wgdWJsa190cnlfYnVmX21hdGNoKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU2NzAtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTY3MTpzdGF0aWMgaW50IHVibGtfY3RybF91cmluZ19jbWRfcGVybWlzc2lvbihzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU2NzItXHRcdHUzMiBjbWRfb3AsIHN0cnVjdCB1Ymxrc3J2X2N0cmxfY21kICpoZWFkZXIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NDktXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTc1MDpzdGF0aWMgYm9vbCB1YmxrX2N0cmxfdXJpbmdfY21kX21heV9zbGVlcCh1MzIgY21kX29wKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NTEte1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzYyLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU3NjM6c3RhdGljIGludCB1YmxrX2N0cmxfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzY0LVx0XHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NzMtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTc3NDpcdGlmICh1YmxrX2N0cmxfdXJpbmdfY21kX21heV9zbGVlcChjbWRfb3ApIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NzUtXHQgICAgaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4MDMtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTgwNDpcdFx0cmV0ID0gdWJsa19jdHJsX3VyaW5nX2NtZF9wZXJtaXNzaW9uKHViLCBjbWRfb3AsIFx1MDAyNmhlYWRlcik7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTgwNS1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTg3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2N0bF9mb3BzID0ge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4NzUtXHQub3Blblx0XHQ9IG5vbnNlZWthYmxlX29wZW4sXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTg3NjpcdC51cmluZ19jbWQgICAgICA9IHVibGtfY3RybF91cmluZ19jbWQsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTg3Ny1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1NAoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgdWJsayBEcml2ZXIgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIGB1YmxrX2N0cmxfdXJpbmdfY21kYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyBhIGZ1bmN0aW9uIHRoYXQgc2VlbXMgdG8gYmUgdGhlIG1haW4gZW50cnkgcG9pbnQgZnJvbSB0aGUgdXNlcnNwYWNlIHJpbmcgYnVmZmVyLiBUaGF0JiMzOTtzIGEgYml0IHVudXN1YWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgZHJpdmVyIGFyZSBhbHNvIGRlZmluZWQgYXMgc3RhdGljLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYWNjZXNzIGFuZCBwb3RlbnRpYWwgdmlzaWJpbGl0eSBvZiBkaWZmZXJlbnQgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgdGhyb3VnaCBgdWJsa19kcnYuY2Agbm93IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgd291bGQgaW5kaWNhdGUgaG93IHVzZXJzcGFjZSBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgYmxvY2sgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiB1YmxrXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTEzLS8qIHVibGsgYmF0Y2ggZmV0Y2ggdXJpbmdfY21kICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTE0OnN0cnVjdCB1YmxrX2JhdGNoX2ZldGNoX2NtZCB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTE1LVx0c3RydWN0IGxpc3RfaGVhZCBub2RlO1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xMTktXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTIwOnN0cnVjdCB1YmxrX3VyaW5nX2NtZF9wZHUge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTEyMS1cdC8qXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE0NS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNDY6c3RydWN0IHVibGtfYmF0Y2hfaW9fZGF0YSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTQ3LVx0c3RydWN0IHVibGtfZGV2aWNlICp1Yjtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjAzLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIwNDp1bmlvbiB1YmxrX2lvX2J1ZiB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjA1LVx0X191NjRcdGFkZHI7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIwOC1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMDk6c3RydWN0IHVibGtfaW8ge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxMC1cdHVuaW9uIHVibGtfaW9fYnVmIGJ1Zjtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjQxLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI0MjpzdHJ1Y3QgdWJsa19xdWV1ZSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjQzLVx0dTE2IHFfaWQ7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwNC0vKiBNYXBsZSB0cmVlIHZhbHVlOiBtYXBzIGEgUEZOIHJhbmdlIHRvIGJ1ZmZlciBsb2NhdGlvbiAqL1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMwNTpzdHJ1Y3QgdWJsa19idWZfcmFuZ2Uge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwNi1cdHVuc2lnbmVkIHNob3J0IGJ1Zl9pbmRleDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzEwLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMxMTpzdHJ1Y3QgdWJsa19kZXZpY2Uge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMxMi1cdHN0cnVjdCBnZW5kaXNrXHRcdCp1Yl9kaXNrO1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTEtLyogaGVhZGVyIG9mIHVibGtfcGFyYW1zICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyOnN0cnVjdCB1YmxrX3BhcmFtc19oZWFkZXIge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1My1cdF9fdTMyXHRsZW47XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTUwNj1zdGF0aWMgdm9pZCB1YmxrX2luaXRfaW9kKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUzMi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1MzM6c3RydWN0IHVibGtfem9uZWRfcmVwb3J0X2Rlc2Mge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUzNC1cdF9fdTY0IHNlY3Rvcjtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzU3MT11YmxrX2JhdGNoX2F1dG9fYnVmX3JlZyhjb25zdCBzdHJ1Y3QgdWJsa19iYXRjaF9pbyAqdWMsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1ODctI2RlZmluZSBVQkxLX0NNRF9CQVRDSF9UTVBfQlVGX1NaICAoNDggKiAxMClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTg4OnN0cnVjdCB1YmxrX2JhdGNoX2lvX2l0ZXIge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1ODktXHR2b2lkIF9fdXNlciAqdWFkZHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjcwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSByb2xlIG9mIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYHVibGtfZHJ2LmNgJiMzOTtzIFN0cnVjdHVyZSoqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgYHVibGtfZHJ2LmNgIGNvZGUsIG15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgbW9zdCBvZiB0aGUgZnVuY3Rpb25zIGFyZSBsaWtlbHkgZGVjbGFyZWQgc3RhdGljLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGRyaXZlciBtb2R1bGVzLCBlc3BlY2lhbGx5IHRoZSBsb3dlci1sZXZlbCBjb21wb25lbnRzLiBUaGlzIGRlc2lnbiBrZWVwcyB0aG9zZSBmdW5jdGlvbnMgaW50ZXJuYWwgdG8gdGhlIGZpbGUsIHByb21vdGluZyBtb2R1bGFyaXR5IGFuZCBwcmV2ZW50aW5nIGFjY2lkZW50YWwgbmFtaW5nIGNvbGxpc2lvbnMuIFRoZSBrZXkgaW50ZXJlc3QgcmlnaHQgbm93IGxpZXMgaW4gdGhlIGVudHJ5IHBvaW50cy4gU28sIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTGV0IG1lIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCBleGl0IHJvdXRpbmVzLiBUaGF0IHdvdWxkIGludm9sdmUgc2VhcmNoaW5nIGZvciBgbW9kdWxlX2luaXRgIChvciwgaW4gb2xkZXIga2VybmVscywgbWF5YmUganVzdCBhbiBgaW5pdGAgZnVuY3Rpb24pIGFuZCBgbW9kdWxlX2V4aXRgIG1hY3JvcyBvciB0aGVpciBlcXVpdmFsZW50LiBUaGF0IHdpbGwgYmUgbXkgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGFuIGlkZWEgb2YgaG93IHRoaXMgbW9kdWxlIGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSBpbml0aWFsIGVudHJ5IGFuZCBleGl0IGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHVibGtfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20ganVtcGluZyBpbnRvIHRoaXMgY29kZSBhbmQsIGFzIGFsd2F5cywgdGhlIGZpcnN0IHBsYWNlIEkgd2FudCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBpcyBob3cgdGhlIG9iamVjdHMgYXJlIGNvbnN0cnVjdGVkLiBUaGF0IG1lYW5zIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBgX19pbml0X19gIG1ldGhvZHMuIFRoZXkgYXJlIHRoZSBiZWRyb2NrIG9mIG9iamVjdCBpbml0aWFsaXphdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY2xhc3MgYW5kIGl0cyBwb3RlbnRpYWwgc3VwZXJjbGFzc2VzIGFyZSBiZWluZyBzZXQgdXAuIFdoYXQgYXJndW1lbnRzIGFyZSBiZWluZyBhY2NlcHRlZD8gV2hhdCBkYXRhIGlzIGJlaW5nIGluaXRpYWxpemVkIGFuZCBob3c/IEFueSBzaWRlIGVmZmVjdHMgSSBuZWVkIHRvIHdhdGNoIG91dCBmb3IgaW4gdGhlIHByb2Nlc3Mgb2YgY29uc3RydWN0aW9uPyBXaGF0IGNhbGxzIGFyZSBtYWRlIHRvIG90aGVyIGZ1bmN0aW9ucyBkdXJpbmcgaW5pdGlhbGl6YXRpb24/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgaXNzdWVzLCBsaWtlIG11dGFibGUgZGVmYXVsdCBhcmd1bWVudHM/IExldCYjMzk7cyB0cmFjZSBpdCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTg4MT1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgdWJsa19taXNjID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODg2LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU4ODc6c3RhdGljIGludCBfX2luaXQgdWJsa19pbml0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTg4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHVibGsgQVBJIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGFza2VkIHdpdGggaWRlbnRpZnlpbmcgdGhlIGJlc3QgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nIHRoZSB1YmxrIGRyaXZlci4gVGhlIGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gYHVibGtfY3RybF91cmluZ19jbWRgIGFuZCBgdWJsa19jdHJsX3NldF9wYXJhbXNgLCBhc3N1bWluZyB0aGF0LCBldmVuIGlmIHRoZXkgYXJlIHN0YXRpYywgdGhlIGZ1enplciBjb3VsZCBzdGlsbCBtYWtlIHVzZSBvZiB0aGVpciBzeW1ib2xzIG9yIGp1c3QgZnV6eiB0aGUgaW9fdXJpbmcgY29tbWFuZHMuCgpUaGVuIEkgcmVhbGl6ZWQgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbnMuIEkgaW1tZWRpYXRlbHkgY2hlY2tlZCBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBxdWlja2x5IGZvdW5kIHRoYXQgdGhlIGZpcnN0IHR3byBmdW5jdGlvbnMgSSB0aG91Z2h0IG9mIGFyZSBzdGF0aWMuIEkgZG91YmxlLWNoZWNrZWQgYHVibGtfdmFsaWRhdGVfcGFyYW1zYCwgYW5kIGl0IGlzIGFsc28gc3RhdGljLgoKU2luY2UgdGhlcmUgZG9uJiMzOTt0IHNlZW0gdG8gYmUgYW55IG9idmlvdXMgbm9uLXN0YXRpYyBBUEkgZW50cnkgcG9pbnRzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBvbmVzIEkmIzM5O20gcHJvdmlkaW5nIGFyZW4mIzM5O3QgaW5saW5lZC4gVGhlIHByb21wdCBhbHNvIG5vdGVzIHRoYXQgaW5saW5lZCBmdW5jdGlvbnMgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gR2l2ZW4gdGhhdCBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgdWJsa19jdHJsX3VyaW5nX2NtZGAgaXMgbm90IGlubGluZWQsIGFuZCBzaW5jZSBgdWJsa19jdHJsX3NldF9wYXJhbXNgIGlzIGEgc2l6YWJsZSBmdW5jdGlvbiwgSSYjMzk7bSBnb2luZyB0byBhc3N1bWUgaXQgaXMgYWxzbyBub3QgaW5saW5lZC4KClRoZSBjYWxsIHN0YWNrIGNvbmZpcm1zIG15IHN1c3BpY2lvbnM7IGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AgaXMgY2FsbGVkIGZyb20gYHVibGtfY3RybF9zZXRfcGFyYW1zYCBhbmQgYHVibGtfY3RybF9hZGRfZGV2YC4gR2l2ZW4gdGhlIGFkdmljZSBmcm9tIHRoZSBwcm9tcHQsIHRoZSBiZXN0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYHVibGtfY3RybF91cmluZ19jbWRgIGFuZCBgdWJsa19jdHJsX3NldF9wYXJhbXNgLgoKRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgbm90ZSB0aGUgY29uZmlncyBJIHdhcyBjb25zaWRlcmluZyB3ZXJlIGBCTEtfREVWX1VCTEtgIGFuZCBgQkxLX0RFVl9aT05FRGAgYW5kIHRoYXQgdGhlIGZvcm1lciBpcyB0aGUgb25lIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBmb3IgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI4Olx0Y29uZmlnIEJMS19ERVZfVUJMS1xuIDMyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuIDMzMDpcdFx0c2VsZWN0IElPX1VSSU5HXG4gMzMxOlx0XHRoZWxwXG4gMzMyOlx0XHQgIGlvX3VyaW5nIGJhc2VkIHVzZXJzcGFjZSBibG9jayBkcml2ZXIuIFRvZ2V0aGVyIHdpdGggdWJsayBzZXJ2ZXIsIHVibGtcbiAzMzM6XHRcdCAgaGFzIGJlZW4gd29ya2luZyB3ZWxsLCBidXQgaW50ZXJmYWNlIHdpdGggdXNlcnNwYWNlIG9yIGNvbW1hbmQgZGF0YVxuIDMzNDpcdFx0ICBkZWZpbml0aW9uIGlzbiYjMzk7dCBmaW5hbGl6ZWQgeWV0LCBhbmQgbWlnaHQgY2hhbmdlIGFjY29yZGluZyB0byBmdXR1cmVcbiAzMzU6XHRcdCAgcmVxdWlyZW1lbnQsIHNvIG1hcmsgaXMgYXMgZXhwZXJpbWVudGFsIG5vdy5cbiAzMzY6XHRcbiAzMzc6XHRjb25maWcgQkxLREVWX1VCTEtfTEVHQUNZX09QQ09ERVNcbiAzMzg6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGVcJiMzNDtcbiAzMzk6XHRcdGRlcGVuZHMgb24gQkxLX0RFVl9VQkxLXG4gMzQwOlx0XHRkZWZhdWx0IHlcbiAzNDE6XHRcdGhlbHBcbiAzNDI6XHRcdCAgdWJsayBkcml2ZXIgc3RhcnRlZCB0byB0YWtlIHBsYWluIGNvbW1hbmQgZW5jb2RpbmcsIHdoaWNoIHR1cm5zIG91dFxuIDM0MzpcdFx0ICBvbmUgYmFkIHdheS4gVGhlIHRyYWRpdGlvbmFsIGlvY3RsIGNvbW1hbmQgb3Bjb2RlIGVuY29kZXMgbW9yZVxuIDM0NDpcdFx0ICBpbmZvIGFuZCBiYXNpY2FsbHkgZGVmaW5lcyBlYWNoIGNvZGUgdW5pcXVlbHksIHNvIG9wY29kZSBjb25mbGljdFxuIDM0NTpcdFx0ICBpcyBhdm9pZGVkLCBhbmQgZHJpdmVyIGNhbiBoYW5kbGUgd3JvbmcgY29tbWFuZCBlYXNpbHksIG1lYW50aW1lIGl0XG4gMzQ2Olx0XHQgIG1heSBoZWxwIHNlY3VyaXR5IHN1YnN5c3RlbSB0byBhdWRpdCBpb191cmluZyBjb21tYW5kLlxuIDM0NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk3MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJT19VUklORyBhbmQgWm9uZWQgQmxvY2sgRGV2aWNlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBzeXN0ZW0gaXMgY2hvb3NpbmcgYElPX1VSSU5HYC4gR29vZCwgdGhhdCYjMzk7cyBnZW5lcmFsbHkgdGhlIHJpZ2h0IGRpcmVjdGlvbiBmb3IgbW9kZXJuIEkvTy4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBCTEtfREVWX1pPTkVEYCBjb250aW5nZW50IG9uIHNvbWV0aGluZyBzcGVjaWZpYz8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMuIEkga25vdyBpdCAqc2hvdWxkbiYjMzk7dCogYmUgYSBtYWpvciBpc3N1ZSwgYnV0IEkgd2FudCB0byBlbnN1cmUgdGhhdCBteSBhc3N1bXB0aW9ucyByZWdhcmRpbmcgd2hpY2ggb3RoZXIgdGhpbmdzIGFyZSBuZWVkZWQgYXJlIGNvcnJlY3QuIERvbiYjMzk7dCB3YW50IGFueSBzdXJwcmlzZXMgbGF0ZXIuIEdvdHRhIHN0YXkgc2hhcnAgYW5kIG1ha2Ugc3VyZSB0aGlzIGlzIHNldCB1cCBjb3JyZWN0bHkuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIGlzIGxpbmluZyB1cCBuaWNlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTc6XHRjb25maWcgQkxLX0RFVl9aT05FRFxuICA5ODpcdFx0Ym9vbCBcJiMzNDtab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICA5OTpcdFx0aGVscFxuIDEwMDpcdFx0QmxvY2sgbGF5ZXIgem9uZWQgYmxvY2sgZGV2aWNlIHN1cHBvcnQuIFRoaXMgb3B0aW9uIGVuYWJsZXNcbiAxMDE6XHRcdHN1cHBvcnQgZm9yIFpBQy9aQkMvWk5TIGhvc3QtbWFuYWdlZCBhbmQgaG9zdC1hd2FyZSB6b25lZCBibG9ja1xuIDEwMjpcdFx0ZGV2aWNlcy5cbiAxMDM6XHRcbiAxMDQ6XHRcdFNheSB5ZXMgaGVyZSBpZiB5b3UgaGF2ZSBhIFpBQywgWkJDLCBvciBaTlMgc3RvcmFnZSBkZXZpY2UuXG4gMTA1Olx0XG4gMTA2Olx0Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xuIDEwNzpcdFx0Ym9vbCBcJiMzNDtCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XCYjMzQ7XG4gMTA4Olx0XHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcbiAxMDk6XHRcdHNlbGVjdCBCTEtfQ0dST1VQX1JXU1RBVFxuIDExMDpcdFx0aGVscFxuIDExMTpcdFx0QmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydC4gSXQgY2FuIGJlIHVzZWQgdG8gbGltaXRcbiAxMTI6XHRcdHRoZSBJTyByYXRlIHRvIGEgZGV2aWNlLiBJTyByYXRlIHBvbGljaWVzIGFyZSBwZXIgY2dyb3VwIGFuZFxuIDExMzpcdFx0b25lIG5lZWRzIHRvIG1vdW50IGFuZCB1c2UgYmxraW8gY2dyb3VwIGNvbnRyb2xsZXIgZm9yIGNyZWF0aW5nXG4gMTE0Olx0XHRjZ3JvdXBzIGFuZCBzcGVjaWZ5aW5nIHBlciBkZXZpY2UgSU8gcmF0ZSBwb2xpY2llcy5cbiAxMTU6XHRcbiAxMTY6XHRcdFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MTIKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFVCTEsgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlcmUgYXJlIG5vIGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfWk9ORURgLCB3aGljaCBpbW1lZGlhdGVseSBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgQkxLX0RFVl9VQkxLYCBhbmQgYEJMS19ERVZfWk9ORURgLCBhbmQgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBgdWJsa19jdHJsX3VyaW5nX2NtZGAgYW5kIGB1YmxrX2N0cmxfc2V0X3BhcmFtc2AuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzLgoKV2FpdCwgaG9sZCBvbiBhIHNlY29uZOKApiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaXNuJiMzOTt0ICpqdXN0KiBjb3JlIGtlcm5lbCBjb2RlLiBJdCBhbHNvIHRvdWNoZXMgc2VsZnRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmNgIGFuZCBhZGRzIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcGFyYW1zXzAxLnNoYC4gU2VsZnRlc3RzIGFyZW4mIzM5O3QgcGFydCBvZiB0aGUgY29yZSBrZXJuZWwsIEkga25vdyB0aGF0LCBidXQgdGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNgLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY29zbWV0aWMgdHdlYWs7IGl0JiMzOTtzIGEgZml4IHRvIGEgdmFsaWRhdGlvbiBjaGVjay4gVGhlIHBhdGNoIGlzIGVuZm9yY2luZyB0aGF0IGBjaHVua19zZWN0b3JzYCBpcyBhIHBvd2VyIG9mIDIgd2hlbiBjb25maWd1cmluZyBhIHpvbmVkIHVibGsgZGV2aWNlLgoKQ3J1Y2lhbGx5LCB0aGlzIGNoYW5nZSBpcyB0cmlnZ2VyZWQgYnkgdXNlci1zdXBwbGllZCBwYXJhbWV0ZXJzIHRocm91Z2ggaW9fdXJpbmcgY29tbWFuZHMgb24gYC9kZXYvdWJsay1jb250cm9sYC4gU28sIGl0JiMzOTtzIHVzZXItYWNjZXNzaWJsZSBrZXJuZWwgY29kZSwgYW5kIGl04oCZcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW4gYmUgZXhlY3V0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBHaXZlbiB0aGlzIHJlYWNoYWJpbGl0eSBhbmQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhIHZhbGlkYXRpb24gZml4LCBhbmQgdGh1cyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIG1pc2Zvcm1lZCBpbnB1dCBJIGNvbmNsdWRlIGl0JiMzOTtzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gVGhlIGdvYWwgb2YgZnV6emluZyB3aWxsIGJlIHRvIHByb2JlIHRoaXMgcGFyYW1ldGVyIHZhbGlkYXRpb24uCgpUaGVyZWZvcmUsIGZvciB0aGUgZnV6emluZyBzZXR1cCwgbXkgY29uZmlncyB3aWxsIGJlIGBCTEtfREVWX1VCTEtgLCBgQkxLX0RFVl9aT05FRGAsIGFuZCBteSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYHVibGtfY3RybF91cmluZ19jbWRgLCBgdWJsa19jdHJsX3NldF9wYXJhbXNgLiBJIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlc2UgdmFsdWVzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoZSBgY2h1bmtfc2VjdG9yc2AgdmFsaWRhdGlvbiBpbiBteSBmdXp6aW5nIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9VQkxLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1YmxrX2N0cmxfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfY3RybF9zZXRfcGFyYW1zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB1YmxrIGRyaXZlciB0byBlbmZvcmNlIHRoYXQgYGNodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiB3aGVuIGNvbmZpZ3VyaW5nIGEgem9uZWQgdWJsayBkZXZpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUga2VybmVsJiMzOTtzIHZhbGlkYXRpb24gbG9naWMgZm9yIHVzZXItcHJvdmlkZWQgcGFyYW1ldGVycywgcmVhY2hhYmxlIHZpYSBpb191cmluZyBjb21tYW5kcyBvbiBgL2Rldi91YmxrLWNvbnRyb2xgLiBUaGUgY29kZSBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1VCTEsmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VibGtfY3RybF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19jdHJsX3NldF9wYXJhbXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHVibGsgZHJpdmVyIHRvIGVuZm9yY2UgdGhhdCBgY2h1bmtfc2VjdG9yc2AgaXMgYSBwb3dlciBvZiAyIHdoZW4gY29uZmlndXJpbmcgYSB6b25lZCB1YmxrIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwmIzM5O3MgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdXNlci1wcm92aWRlZCBwYXJhbWV0ZXJzLCByZWFjaGFibGUgdmlhIGlvX3VyaW5nIGNvbW1hbmRzIG9uIGAvZGV2L3VibGstY29udHJvbGAuIFRoZSBjb2RlIGlzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHVibGtfdmFsaWRhdGVfcGFyYW1zYCBpbiBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYCB0byBlbnN1cmUgdGhhdCBgY2h1bmtfc2VjdG9yc2AgaXMgYSBwb3dlciBvZiAyIGZvciB6b25lZCBkZXZpY2VzLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggY29uc2lzdHMgb2YgdXBkYXRlcyB0byB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdHMgKGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2ApLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGtlcm5lbCBjaGFuZ2UgaXMgcHVyZWx5IGEgdmFsaWRhdGlvbiBjaGVjayBvbiBhbiBleGlzdGluZyBwYXJhbWV0ZXIuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE4YzIzY2Y0NDk5NzU4NmMwZjhkM2EyYjZjMGU1ODE5MGQ1NTQyODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwMzozMToxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYwppbmRleCA4NTNjZDQwYTM0MDNjLi4xOTNmNmViYzNiMzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCkBAIC05ODAsNyAmIzQzOzk4MCw3IEBAIHN0YXRpYyBpbnQgdWJsa192YWxpZGF0ZV9wYXJhbXMoY29uc3Qgc3RydWN0IHVibGtfZGV2aWNlICp1YikKIAkJaWYgKHAtJmd0O21heF9zZWN0b3JzICZsdDsgUEFHRV9TRUNUT1JTKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSAmYW1wOyZhbXA7ICFwLSZndDtjaHVua19zZWN0b3JzKQomIzQzOwkJaWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSAmYW1wOyZhbXA7ICFpc19wb3dlcl9vZl8yKHAtJmd0O2NodW5rX3NlY3RvcnMpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGUKaW5kZXggYTNjZWM3YjM1ZGI3Ny4uNWRhZjM2YzZjMzZjNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL01ha2VmaWxlCkBAIC01NSw2ICYjNDM7NTUsOCBAQCBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3N0cmlwZV8wNi5zaAogVEVTVF9QUk9HUyAmIzQzOz0gdGVzdF9wYXJ0XzAxLnNoCiBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3BhcnRfMDIuc2gKIAomIzQzO1RFU1RfUFJPR1MgJiM0Mzs9IHRlc3RfcGFyYW1zXzAxLnNoCiYjNDM7CiBURVNUX1BST0dTICYjNDM7PSB0ZXN0X3NobWVtemNfMDEuc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IHRlc3Rfc2htZW16Y18wMi5zaAogVEVTVF9QUk9HUyAmIzQzOz0gdGVzdF9zaG1lbXpjXzAzLnNoCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmMKaW5kZXggYmU1YTBkNzc1OTUyYy4uMjQwMGI0NjE1NzY2NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuYwpAQCAtOCw2ICYjNDM7OCwxMyBAQAogI2luY2x1ZGUgJiMzNDtrdWJsay5oJiMzNDsKIAogI2RlZmluZSBNQVhfTlJfVEdUX0FSRyAJNjQKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlQJCTkKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX1BIWVNJQ0FMX0JTX1NISUZUCQkxMgomIzQzOyNkZWZpbmUgS1VCTEtfUEFSQU1fWk9ORV9TRUNUT1JTCQkxMjgKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX05SX1pPTkVTCQkJMTYKJiM0MzsjZGVmaW5lIEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTCQkJXAomIzQzOwkoS1VCTEtfUEFSQU1fWk9ORV9TRUNUT1JTICogS1VCTEtfUEFSQU1fTlJfWk9ORVMpCiYjNDM7I2RlZmluZSBLVUJMS19QQVJBTV9aT05FX0FQUEVORF9TRUNUT1JTCQk4CiAKIHVuc2lnbmVkIGludCB1YmxrX2RiZ19tYXNrID0gVUJMS19MT0c7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHVibGtfdGd0X29wcyAqdGd0X29wc19saXN0W10gPSB7CkBAIC0yMjcsNiAmIzQzOzIzNCw1NSBAQCBzdGF0aWMgaW50IHVibGtfY3RybF9nZXRfZmVhdHVyZXMoc3RydWN0IHVibGtfZGV2ICpkZXYsCiAJcmV0dXJuIF9fdWJsa19jdHJsX2NtZChkZXYsICZhbXA7ZGF0YSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBhcnNlX3BhcmFtX3R5cGVzKGNvbnN0IGNoYXIgKmFyZywgX191MzIgKnR5cGVzKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMTI4XSwgKnNhdmUgPSBOVUxMLCAqdG9rOwomIzQzOwomIzQzOwlpZiAoc3RybGVuKGFyZykgJmd0Oz0gc2l6ZW9mKGJ1ZikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJc3RyY3B5KGJ1ZiwgYXJnKTsKJiM0MzsJKnR5cGVzID0gMDsKJiM0MzsJdG9rID0gc3RydG9rX3IoYnVmLCAmIzM0OywmIzM0OywgJmFtcDtzYXZlKTsKJiM0MzsJd2hpbGUgKHRvaykgewomIzQzOwkJaWYgKCFzdHJjbXAodG9rLCAmIzM0O25vbmUmIzM0OykpCiYjNDM7CQkJOwomIzQzOwkJZWxzZSBpZiAoIXN0cmNtcCh0b2ssICYjMzQ7YmFzaWMmIzM0OykpCiYjNDM7CQkJKnR5cGVzIHw9IFVCTEtfUEFSQU1fVFlQRV9CQVNJQzsKJiM0MzsJCWVsc2UgaWYgKCFzdHJjbXAodG9rLCAmIzM0O3pvbmVkJiMzNDspKQomIzQzOwkJCSp0eXBlcyB8PSBVQkxLX1BBUkFNX1RZUEVfWk9ORUQ7CiYjNDM7CQllbHNlCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl0b2sgPSBzdHJ0b2tfcihOVUxMLCAmIzM0OywmIzM0OywgJmFtcDtzYXZlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjb25zdCBzdHJ1Y3QgZGV2X2N0eCAqY3R4LAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgdWJsa19wYXJhbXMgKnBhcmFtcykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBwYXJhbXNfY3R4ICpwID0gJmFtcDtjdHgtJmd0O3BhcmFtczsKJiM0MzsKJiM0MzsJKnBhcmFtcyA9IChzdHJ1Y3QgdWJsa19wYXJhbXMpIHsKJiM0MzsJCS50eXBlcyA9IHAtJmd0O3R5cGVzLAomIzQzOwkJLmJhc2ljID0gewomIzQzOwkJCS5sb2dpY2FsX2JzX3NoaWZ0CT0gcC0mZ3Q7bG9naWNhbF9ic19zaGlmdCwKJiM0MzsJCQkucGh5c2ljYWxfYnNfc2hpZnQJPSBwLSZndDtwaHlzaWNhbF9ic19zaGlmdCwKJiM0MzsJCQkuaW9fbWluX3NoaWZ0CQk9IHAtJmd0O2lvX21pbl9zaGlmdCwKJiM0MzsJCQkuaW9fb3B0X3NoaWZ0CQk9IHAtJmd0O2lvX29wdF9zaGlmdCwKJiM0MzsJCQkubWF4X3NlY3RvcnMJCT0gcC0mZ3Q7bWF4X3NlY3RvcnMsCiYjNDM7CQkJLmNodW5rX3NlY3RvcnMJCT0gcC0mZ3Q7Y2h1bmtfc2VjdG9ycywKJiM0MzsJCQkuZGV2X3NlY3RvcnMJCT0gcC0mZ3Q7ZGV2X3NlY3RvcnMsCiYjNDM7CQl9LAomIzQzOwkJLnpvbmVkID0gewomIzQzOwkJCS5tYXhfb3Blbl96b25lcwkJPSBwLSZndDttYXhfb3Blbl96b25lcywKJiM0MzsJCQkubWF4X2FjdGl2ZV96b25lcwk9IHAtJmd0O21heF9hY3RpdmVfem9uZXMsCiYjNDM7CQkJLm1heF96b25lX2FwcGVuZF9zZWN0b3JzID0gcC0mZ3Q7bWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMsCiYjNDM7CQl9LAomIzQzOwl9OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdWJsa19jdHJsX3VwZGF0ZV9zaXplKHN0cnVjdCB1YmxrX2RldiAqZGV2LAogCQlfX3U2NCBucl9zZWN0cykKIHsKQEAgLTE3NzIsNiAmIzQzOzE4MjgsNTEgQEAgc3RhdGljIGludCBfX2NtZF9kZXZfYWRkKGNvbnN0IHN0cnVjdCBkZXZfY3R4ICpjdHgpCiAKIHN0YXRpYyBpbnQgX19jbWRfZGV2X2xpc3Qoc3RydWN0IGRldl9jdHggKmN0eCk7CiAKJiM0MztzdGF0aWMgaW50IGNtZF9kZXZfc2V0X3BhcmFtcyhzdHJ1Y3QgZGV2X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHVibGtzcnZfY3RybF9kZXZfaW5mbyAqaW5mbzsKJiM0MzsJc3RydWN0IHVibGtfcGFyYW1zIHBhcmFtczsKJiM0MzsJc3RydWN0IHVibGtfZGV2ICpkZXY7CiYjNDM7CV9fdTY0IGZlYXR1cmVzOwomIzQzOwlpbnQgcmV0LCBkZWxfcmV0OwomIzQzOwomIzQzOwlkZXYgPSB1YmxrX2N0cmxfaW5pdCgpOwomIzQzOwlpZiAoIWRldikKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlyZXQgPSB1YmxrX2N0cmxfZ2V0X2ZlYXR1cmVzKGRldiwgJmFtcDtmZWF0dXJlcyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghKGZlYXR1cmVzICZhbXA7IFVCTEtfRl9DTURfSU9DVExfRU5DT0RFKSkgewomIzQzOwkJcmV0ID0gLUVOT1RTVVA7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpbmZvID0gJmFtcDtkZXYtJmd0O2Rldl9pbmZvOwomIzQzOwlpbmZvLSZndDtkZXZfaWQgPSBjdHgtJmd0O2Rldl9pZDsKJiM0MzsJaW5mby0mZ3Q7bnJfaHdfcXVldWVzID0gY3R4LSZndDtucl9od19xdWV1ZXM7CiYjNDM7CWluZm8tJmd0O3F1ZXVlX2RlcHRoID0gY3R4LSZndDtxdWV1ZV9kZXB0aDsKJiM0MzsJaW5mby0mZ3Q7aW9fZGVzY19zaXplID0gY3R4LSZndDtpb19kZXNjX3NpemU7CiYjNDM7CWluZm8tJmd0O2ZsYWdzID0gY3R4LSZndDtmbGFnczsKJiM0MzsKJiM0MzsJcmV0ID0gdWJsa19jdHJsX2FkZF9kZXYoZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJdWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjdHgsICZhbXA7cGFyYW1zKTsKJiM0MzsKJiM0MzsJcmV0ID0gdWJsa19jdHJsX3NldF9wYXJhbXMoZGV2LCAmYW1wO3BhcmFtcyk7CiYjNDM7CXByaW50ZigmIzM0O1NFVF9QQVJBTVMgcmV0dXJuZWQgJWRcbiYjMzQ7LCByZXQpOwomIzQzOwomIzQzOwlkZWxfcmV0ID0gdWJsa19jdHJsX2RlbF9kZXYoZGV2KTsKJiM0MzsJaWYgKGRlbF9yZXQgJmx0OyAwICZhbXA7JmFtcDsgcmV0ID09IDApCiYjNDM7CQlyZXQgPSBkZWxfcmV0OwomIzQzO291dDoKJiM0MzsJdWJsa19jdHJsX2RlaW5pdChkZXYpOwomIzQzOwlyZXR1cm4gcmV0ICZsdDsgMCA/IHJldCA6IDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBjbWRfZGV2X2FkZChzdHJ1Y3QgZGV2X2N0eCAqY3R4KQogewogCWludCByZXM7CkBAIC0yMTE3LDYgJiM0MzsyMjE4LDkgQEAgc3RhdGljIGludCBjbWRfZGV2X2hlbHAoY2hhciAqZXhlKQogCXByaW50ZigmIzM0O1x0IC0tc2FmZSBvbmx5IHN0b3AgaWYgZGV2aWNlIGhhcyBubyBhY3RpdmUgb3BlbmVyc1xuXG4mIzM0Oyk7CiAJcHJpbnRmKCYjMzQ7JXMgbGlzdCBbLW4gZGV2X2lkXSAtYSBcbiYjMzQ7LCBleGUpOwogCXByaW50ZigmIzM0O1x0IC1hIGxpc3QgYWxsIGRldmljZXMsIC1uIGxpc3Qgc3BlY2lmaWVkIGRldmljZSwgZGVmYXVsdCAtYSBcblxuJiMzNDspOwomIzQzOwlwcmludGYoJiMzNDslcyBzZXRfcGFyYW1zIFstbiBkZXZfaWRdIFstcSBucl9xdWV1ZXNdIFstZCBkZXB0aF0gWy11XSBbLS16b25lZF1cbiYjMzQ7LCBleGUpOwomIzQzOwlwcmludGYoJiMzNDtcdFstLXBhcmFtX3R5cGVzIGJhc2ljWyx6b25lZF18bm9uZV1cbiYjMzQ7KTsKJiM0MzsJcHJpbnRmKCYjMzQ7XHQgaXNzdWUgQUREX0RFViwgU0VUX1BBUkFNUyBhbmQgREVMX0RFViB3aXRob3V0IFNUQVJUX0RFVlxuXG4mIzM0Oyk7CiAJcHJpbnRmKCYjMzQ7JXMgZmVhdHVyZXNcbiYjMzQ7LCBleGUpOwogCXByaW50ZigmIzM0OyVzIHVwZGF0ZV9zaXplIC1uIGRldl9pZCAtc3wtLXNpemUgc2l6ZV9pbl9ieXRlcyBcbiYjMzQ7LCBleGUpOwogCXByaW50ZigmIzM0OyVzIHF1aWVzY2UgLW4gZGV2X2lkXG4mIzM0OywgZXhlKTsKQEAgLTIxNjAsNiAmIzQzOzIyNjQsMTggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJeyAmIzM0O2h0bGImIzM0OywJCTEsCU5VTEwsICAwICB9LAogCQl7ICYjMzQ7cmRvbmx5X3NobWVtX2J1ZiYjMzQ7LAkwLAlOVUxMLCAgMCAgfSwKIAkJeyAmIzM0O2lvX2Rlc2Nfc2l6ZSYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKJiM0MzsJCXsgJiMzNDt6b25lZCYjMzQ7LAkJMCwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7cGFyYW1fdHlwZXMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bG9naWNhbF9ic19zaGlmdCYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKJiM0MzsJCXsgJiMzNDtwaHlzaWNhbF9ic19zaGlmdCYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKJiM0MzsJCXsgJiMzNDtpb19taW5fc2hpZnQmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7aW9fb3B0X3NoaWZ0JiMzNDssCTEsCU5VTEwsICAwICB9LAomIzQzOwkJeyAmIzM0O21heF9zZWN0b3JzJiMzNDssCTEsCU5VTEwsICAwICB9LAomIzQzOwkJeyAmIzM0O2NodW5rX3NlY3RvcnMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7ZGV2X3NlY3RvcnMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMmIzM0OywgMSwgTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bWF4X29wZW5fem9uZXMmIzM0OywJMSwJTlVMTCwgIDAgIH0sCiYjNDM7CQl7ICYjMzQ7bWF4X2FjdGl2ZV96b25lcyYjMzQ7LAkxLAlOVUxMLCAgMCAgfSwKIAkJeyAwLCAwLCAwLCAwIH0KIAl9OwogCWNvbnN0IHN0cnVjdCB1YmxrX3RndF9vcHMgKm9wcyA9IE5VTEw7CkBAIC0yMTczLDYgJiM0MzsyMjg5LDE5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCS50Z3RfdHlwZQk9CSYjMzQ7dW5rbm93biYjMzQ7LAogCQkuY3N1bV90eXBlCT0JTEJNRF9QSV9DU1VNX05PTkUsCiAJCS5pb19kZXNjX3NpemUJPQlzaXplb2Yoc3RydWN0IHVibGtzcnZfaW9fZGVzYyksCiYjNDM7CQkucGFyYW1zID0gewomIzQzOwkJCS50eXBlcwkJCT0gVUJMS19QQVJBTV9UWVBFX0JBU0lDLAomIzQzOwkJCS5sb2dpY2FsX2JzX3NoaWZ0CT0gS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCwKJiM0MzsJCQkucGh5c2ljYWxfYnNfc2hpZnQJPSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCwKJiM0MzsJCQkuaW9fbWluX3NoaWZ0CQk9IEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlQsCiYjNDM7CQkJLmlvX29wdF9zaGlmdAkJPSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCwKJiM0MzsJCQkubWF4X3NlY3RvcnMJCT0KJiM0MzsJCQkJVUJMS19JT19NQVhfQllURVMgJmd0OyZndDsgS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCwKJiM0MzsJCQkuY2h1bmtfc2VjdG9ycwkJPSBLVUJMS19QQVJBTV9aT05FX1NFQ1RPUlMsCiYjNDM7CQkJLmRldl9zZWN0b3JzCQk9IEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTLAomIzQzOwkJCS5tYXhfem9uZV9hcHBlbmRfc2VjdG9ycyA9CiYjNDM7CQkJCUtVQkxLX1BBUkFNX1pPTkVfQVBQRU5EX1NFQ1RPUlMsCiYjNDM7CQl9LAogCX07CiAJaW50IHJldCA9IC1FSU5WQUwsIGk7CiAJaW50IHRndF9hcmdjID0gMTsKQEAgLTIyODgsNiAmIzQzOzI0MTcsMzQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQljdHguZmxhZ3MgfD0gVUJMS19GX0lPX0RFU0NfU0laRTsKIAkJCQljdHguaW9fZGVzY19zaXplID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwogCQkJfQomIzQzOwkJCWlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsICYjMzQ7em9uZWQmIzM0OykpCiYjNDM7CQkJCWN0eC5mbGFncyB8PSBVQkxLX0ZfWk9ORUQ7CiYjNDM7CQkJaWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgJiMzNDtwYXJhbV90eXBlcyYjMzQ7KSkgewomIzQzOwkJCQlyZXQgPSBwYXJzZV9wYXJhbV90eXBlcyhvcHRhcmcsICZhbXA7Y3R4LnBhcmFtcy50eXBlcyk7CiYjNDM7CQkJCWlmIChyZXQpCiYjNDM7CQkJCQlyZXR1cm4gcmV0OwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2xvZ2ljYWxfYnNfc2hpZnQmIzM0OykpCiYjNDM7CQkJCWN0eC5wYXJhbXMubG9naWNhbF9ic19zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O3BoeXNpY2FsX2JzX3NoaWZ0JiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLnBoeXNpY2FsX2JzX3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwomIzQzOwkJCWlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsICYjMzQ7aW9fbWluX3NoaWZ0JiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLmlvX21pbl9zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2lvX29wdF9zaGlmdCYjMzQ7KSkKJiM0MzsJCQkJY3R4LnBhcmFtcy5pb19vcHRfc2hpZnQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7CiYjNDM7CQkJaWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgJiMzNDttYXhfc2VjdG9ycyYjMzQ7KSkKJiM0MzsJCQkJY3R4LnBhcmFtcy5tYXhfc2VjdG9ycyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2NodW5rX3NlY3RvcnMmIzM0OykpCiYjNDM7CQkJCWN0eC5wYXJhbXMuY2h1bmtfc2VjdG9ycyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O2Rldl9zZWN0b3JzJiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLmRldl9zZWN0b3JzID0gc3RydG91bGwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O21heF96b25lX2FwcGVuZF9zZWN0b3JzJiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLm1heF96b25lX2FwcGVuZF9zZWN0b3JzID0KJiM0MzsJCQkJCXN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKJiM0MzsJCQlpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCAmIzM0O21heF9vcGVuX3pvbmVzJiMzNDspKQomIzQzOwkJCQljdHgucGFyYW1zLm1heF9vcGVuX3pvbmVzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwomIzQzOwkJCWlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsICYjMzQ7bWF4X2FjdGl2ZV96b25lcyYjMzQ7KSkKJiM0MzsJCQkJY3R4LnBhcmFtcy5tYXhfYWN0aXZlX3pvbmVzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOwogCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTs/JiMzOTs6CiAJCQkvKgpAQCAtMjM3Nyw3ICYjNDM7MjUzNCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCW9wcy0mZ3Q7cGFyc2VfY21kX2xpbmUoJmFtcDtjdHgsIHRndF9hcmdjLCB0Z3RfYXJndik7CiAJfQogCi0JaWYgKCFzdHJjbXAoY21kLCAmIzM0O2FkZCYjMzQ7KSkKJiM0MzsJaWYgKCFzdHJjbXAoY21kLCAmIzM0O3NldF9wYXJhbXMmIzM0OykpCiYjNDM7CQlyZXQgPSBjbWRfZGV2X3NldF9wYXJhbXMoJmFtcDtjdHgpOwomIzQzOwllbHNlIGlmICghc3RyY21wKGNtZCwgJiMzNDthZGQmIzM0OykpCiAJCXJldCA9IGNtZF9kZXZfYWRkKCZhbXA7Y3R4KTsKIAllbHNlIGlmICghc3RyY21wKGNtZCwgJiMzNDtyZWNvdmVyJiMzNDspKSB7CiAJCWlmIChjdHguZGV2X2lkICZsdDsgMCkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oCmluZGV4IGUyN2MxNTRmYzkxMDguLmQ5OGYzZDYxMmQ4ODggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmgKQEAgLTYzLDYgJiM0Mzs2MywyMiBAQCBzdHJ1Y3QgZmF1bHRfaW5qZWN0X2N0eCB7CiAJYm9vbCBkaWVfZHVyaW5nX2ZldGNoOwogfTsKIAomIzQzO3N0cnVjdCBwYXJhbXNfY3R4IHsKJiM0MzsJX191MzIgdHlwZXM7CiYjNDM7CiYjNDM7CV9fdTMyIGxvZ2ljYWxfYnNfc2hpZnQ7CiYjNDM7CV9fdTMyIHBoeXNpY2FsX2JzX3NoaWZ0OwomIzQzOwlfX3UzMiBpb19taW5fc2hpZnQ7CiYjNDM7CV9fdTMyIGlvX29wdF9zaGlmdDsKJiM0MzsJX191MzIgbWF4X3NlY3RvcnM7CiYjNDM7CV9fdTMyIGNodW5rX3NlY3RvcnM7CiYjNDM7CV9fdTY0IGRldl9zZWN0b3JzOwomIzQzOwomIzQzOwlfX3UzMiBtYXhfb3Blbl96b25lczsKJiM0MzsJX191MzIgbWF4X2FjdGl2ZV96b25lczsKJiM0MzsJX191MzIgbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnM7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBkZXZfY3R4IHsKIAljaGFyIHRndF90eXBlWzE2XTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtOTksNiAmIzQzOzExNSw4IEBAIHN0cnVjdCBkZXZfY3R4IHsKIAkvKiBmb3IgJiMzOTt1cGRhdGVfc2l6ZSYjMzk7IGNvbW1hbmQgKi8KIAl1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTsKIAomIzQzOwlzdHJ1Y3QgcGFyYW1zX2N0eCBwYXJhbXM7CiYjNDM7CiAJY2hhciAqaHRsYl9wYXRoOwogCiAJdW5pb24gewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3BhcmFtc18wMS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTI4ZTcyYjEwMzVkMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2gKQEAgLTAsMCAmIzQzOzEsMTE0IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7LiAmIzM0OyQoY2QgJiMzNDskKGRpcm5hbWUgJiMzNDskMCYjMzQ7KSYjMzQ7ICZhbXA7JmFtcDsgcHdkKSYjMzQ7L3Rlc3RfY29tbW9uLnNoCiYjNDM7CiYjNDM7RVJSX0NPREU9MAomIzQzOwomIzQzO3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MoKQomIzQzO3sKJiM0MzsJbG9jYWwgbmFtZT0kMQomIzQzOwomIzQzOwlzaGlmdAomIzQzOwomIzQzOwllY2hvICYjMzQ7JG5hbWUmIzM0OwomIzQzOwlpZiAhICYjMzQ7JFVCTEtfUFJPRyYjMzQ7IHNldF9wYXJhbXMgLXEgMSAtZCAyICYjMzQ7JEAmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0OyRuYW1lOiBTRVRfUEFSQU1TIGNoZWNrIGZhaWxlZCYjMzQ7CiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztydW5fc2V0X3BhcmFtc19mYWlsdXJlKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5hbWU9JDEKJiM0MzsKJiM0MzsJc2hpZnQKJiM0MzsKJiM0MzsJZWNobyAmIzM0OyRuYW1lJiMzNDsKJiM0MzsJaWYgJiMzNDskVUJMS19QUk9HJiMzNDsgc2V0X3BhcmFtcyAtcSAxIC1kIDIgJiMzNDskQCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7JG5hbWU6IFNFVF9QQVJBTVMgc3VjY2VlZGVkIHVuZXhwZWN0ZWRseSYjMzQ7CiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztydW5fem9uZWRfc2V0X3BhcmFtc19zdWNjZXNzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5hbWU9JDEKJiM0MzsKJiM0MzsJc2hpZnQKJiM0MzsKJiM0MzsJZWNobyAmIzM0OyRuYW1lJiMzNDsKJiM0MzsJaWYgISAmIzM0OyRVQkxLX1BST0cmIzM0OyBzZXRfcGFyYW1zIC1xIDEgLWQgMiAtdSAtLXpvbmVkICYjMzQ7JEAmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0OyRuYW1lOiBTRVRfUEFSQU1TIGNoZWNrIGZhaWxlZCYjMzQ7CiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5hbWU9JDEKJiM0MzsKJiM0MzsJc2hpZnQKJiM0MzsKJiM0MzsJZWNobyAmIzM0OyRuYW1lJiMzNDsKJiM0MzsJaWYgJiMzNDskVUJMS19QUk9HJiMzNDsgc2V0X3BhcmFtcyAtcSAxIC1kIDIgLXUgLS16b25lZCAmIzM0OyRAJiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDskbmFtZTogU0VUX1BBUkFNUyBzdWNjZWVkZWQgdW5leHBlY3RlZGx5JiMzNDsKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO19wcmVwX3Rlc3QgJiMzNDtwYXJhbXMmIzM0OyAmIzM0O1NFVF9QQVJBTVMgdmFsaWRhdGlvbiYjMzQ7CiYjNDM7CiYjNDM7aWYgWyAhIC1jIC9kZXYvdWJsay1jb250cm9sIF07IHRoZW4KJiM0MzsJX2NsZWFudXBfdGVzdAomIzQzOwlfc2hvd19yZXN1bHQgJFRJRCAkVUJMS19TS0lQX0NPREUKJiM0MztmaQomIzQzOwomIzQzO3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MgJiMzNDt2YWxpZCBiYXNpYyBwYXJhbXMmIzM0OyB8fAomIzQzOwlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7cnVuX3NldF9wYXJhbXNfZmFpbHVyZSAmIzM0O21pc3NpbmcgYmFzaWMgcGFyYW1zJiMzNDsgXAomIzQzOwktLXBhcmFtX3R5cGVzIG5vbmUgfHwKJiM0MzsJRVJSX0NPREU9MQomIzQzOwomIzQzO3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDtsb2dpY2FsIGJsb2NrIGxhcmdlciB0aGFuIHBoeXNpY2FsIGJsb2NrJiMzNDsgXAomIzQzOwktLWxvZ2ljYWxfYnNfc2hpZnQgMTIgLS1waHlzaWNhbF9ic19zaGlmdCA5IHx8CiYjNDM7CUVSUl9DT0RFPTEKJiM0MzsKJiM0MztydW5fc2V0X3BhcmFtc19mYWlsdXJlICYjMzQ7dG9vIGxhcmdlIG1heCBzZWN0b3JzJiMzNDsgXAomIzQzOwktLW1heF9zZWN0b3JzIDIwNDkgfHwKJiM0MzsJRVJSX0NPREU9MQomIzQzOwomIzQzO2lmIF9oYXZlX2ZlYXR1cmUgJiMzNDtaT05FRCYjMzQ7ICZhbXA7JmFtcDsgX2hhdmVfZmVhdHVyZSAmIzM0O1VTRVJfQ09QWSYjMzQ7OyB0aGVuCiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX3N1Y2Nlc3MgJiMzNDt2YWxpZCB6b25lZCBwYXJhbXMmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDttaXNzaW5nIHpvbmVkIHBhcmFtcyYjMzQ7IHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDtub24tcG93ZXItb2YtMiB6b25lIHNpemUmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFwKJiM0MzsJCS0tY2h1bmtfc2VjdG9ycyA5NiAtLWRldl9zZWN0b3JzICQoKDk2ICogMTYpKSB8fAomIzQzOwkJRVJSX0NPREU9MQomIzQzOwomIzQzOwlydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlICYjMzQ7emVybyBtYXggem9uZSBhcHBlbmQmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFwKJiM0MzsJCS0tbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgMCB8fAomIzQzOwkJRVJSX0NPREU9MQomIzQzOwomIzQzOwlydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlICYjMzQ7dG9vIG1hbnkgb3BlbiB6b25lcyYjMzQ7IFwKJiM0MzsJCS0tcGFyYW1fdHlwZXMgYmFzaWMsem9uZWQgXAomIzQzOwkJLS1kZXZfc2VjdG9ycyAkKCgxMjggKiA0KSkgLS1tYXhfb3Blbl96b25lcyA1IHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7CiYjNDM7CXJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgJiMzNDt0b28gbWFueSBhY3RpdmUgem9uZXMmIzM0OyBcCiYjNDM7CQktLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFwKJiM0MzsJCS0tZGV2X3NlY3RvcnMgJCgoMTI4ICogNCkpIC0tbWF4X2FjdGl2ZV96b25lcyA1IHx8CiYjNDM7CQlFUlJfQ09ERT0xCiYjNDM7ZWxzZQomIzQzOwllY2hvICYjMzQ7em9uZWQgdWJsayBmZWF0dXJlIHVuYXZhaWxhYmxlLCBza2lwIHpvbmVkIFNFVF9QQVJBTVMgY2FzZXMmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7X2NsZWFudXBfdGVzdAomIzQzO19zaG93X3Jlc3VsdCAkVElEICRFUlJfQ09ERQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkzOQoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiA3ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB1YmxrIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaGl0cyBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYCBhbmQgYWRkcyBzb21lIHRlc3RzIHRvIHRoZSBgc2VsZnRlc3RzL3VibGsvYCBhcmVhLiBUaGUgY29yZSBrZXJuZWwgY2hhbmdlIGlzIGEgc2ltcGxlIHZhbGlkYXRpb24gY2hlY2s6IHdlJiMzOTtyZSBjaGFuZ2luZyB0aGUgbG9naWMgaW4gYHVibGtfdmFsaWRhdGVfcGFyYW1zYCB0byBlbnN1cmUgYHAtJmd0O2NodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiB3aGVuIHRoZSB1YmxrIGRldmljZSBpcyB6b25lZC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhIGNvZGUgbW9kaWZpY2F0aW9uIGZyb20gYCFwLSZndDtjaHVua19zZWN0b3JzYCB0byBgIWlzX3Bvd2VyX29mXzIocC0mZ3Q7Y2h1bmtfc2VjdG9ycylgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHByb2JlIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoaXMgaXMgYSBjb21tb24gcGl0ZmFsbCBpbiBrZXJuZWwgcGF0Y2hlcywgYnV0LCBsb29raW5nIGF0IHRoZSBjb2RlLCB0aGlzIG9uZSBzZWVtcyBwcmV0dHkgY2xlYW4uIFRoZSBwYXRjaCBpcyBzaW1wbHkgcmVmaW5pbmcgYW4gZXhpc3RpbmcgdmFsaWRhdGlvbiBzdGVwLiBOb3csIGlmIGBwLSZndDtjaHVua19zZWN0b3JzYCB3ZXJlIDAsIHRoZW4gYGlzX3Bvd2VyX29mXzIoMClgIGV2YWx1YXRlcyB0byBmYWxzZSwgdGh1cyBuZWdhdGluZyB0byB0cnVlLiBTbyBpdCBpcyBzdGlsbCBjYXVnaHQgYW5kIHJlamVjdGVkLiBUaGVyZWZvcmUsIHRoZXJlJiMzOTtzIG5vIHdheSB3ZSYjMzk7cmUgYWNjaWRlbnRhbGx5IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyBpbmZvcm1hdGlvbiBoZXJlLCBiZWNhdXNlIGl0IGlzIG9ubHkgY2hlY2tpbmcgYSB2YWxpZGF0aW9uIHJldHVybi4gSSB3YXMgc2xpZ2h0bHkgY29uY2VybmVkIHRoYXQgdGhpcyBjb3VsZCBoYXZlIGludHJvZHVjZWQgc29tZSBraW5kIG9mIGV4cGxvaXRhYmxlIG1lbW9yeSBjb25kaXRpb24gYnV0IHRoYXQgaXMgbm90IHRoZSBjYXNlLiBUaGlzIGlzIGEgc2ltcGxlIHBvd2VyLW9mLTIgdmFsaWRhdGlvbiB0byBwcmV2ZW50IHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIG9yIG90aGVyIGlzc3VlcyB3aXRoIHpvbmVkIGRldmljZXMuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJ1dCB0aGUgZGlmZiBjb25maXJtcyBpdC4gVGhlIHBhdGNoJiMzOTtzIGltcGFjdCBpcyBtaW5pbWFsLiBUaGUgcmVzdCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBhcmUganVzdCByZWxhdGVkIHRvIHRoZSB1c2VyLXNwYWNlIHNlbGZ0ZXN0czsgc3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgYWRkZWQgdGVzdCBzdXBwb3J0IGZvciB0aGUgYHNldF9wYXJhbXNgIGNvbW1hbmQgYW5kIHZhcmlvdXMgcGFyYW1ldGVycy4KClNvLCBmcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludCwgdGhpcyBpcyBhIGxvdy1yaXNrIGNoYW5nZS4gVGhlcmUmIzM5O3Mgbm8gbWFuaXB1bGF0aW9uIG9mIG1lbW9yeSBhbGxvY2F0aW9uLCBubyBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGJlIGFidXNlZCwgYW5kIG5vIG1vZGlmaWNhdGlvbiBvZiBkYXRhIHN0cnVjdHVyZXMuIFRoZSBrZXJuZWwgY2hhbmdlIGlzIGV4Y2x1c2l2ZWx5IGEgdmFsaWRhdGlvbiBjaGVjayBvbiBhbiBleGlzdGluZyBwYXJhbWV0ZXIuIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmVhc29uIHRvIHdvcnJ5IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8gbGVha3MuIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGlzc3Vlcy4gV2UmIzM5O3JlIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AgaW4gYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AgdG8gZW5zdXJlIHRoYXQgYGNodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiBmb3Igem9uZWQgZGV2aWNlcy4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIG9mIHVwZGF0ZXMgdG8gdGhlIHVzZXItc3BhY2Ugc2VsZnRlc3RzIChgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9gKS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBrZXJuZWwgY2hhbmdlIGlzIHB1cmVseSBhIHZhbGlkYXRpb24gY2hlY2sgb24gYW4gZXhpc3RpbmcgcGFyYW1ldGVyLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHVibGtfdmFsaWRhdGVfcGFyYW1zYCBpbiBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYCB0byBlbnN1cmUgdGhhdCBgY2h1bmtfc2VjdG9yc2AgaXMgYSBwb3dlciBvZiAyIGZvciB6b25lZCBkZXZpY2VzLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggY29uc2lzdHMgb2YgdXBkYXRlcyB0byB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdHMgKGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2ApLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGtlcm5lbCBjaGFuZ2UgaXMgcHVyZWx5IGEgdmFsaWRhdGlvbiBjaGVjayBvbiBhbiBleGlzdGluZyBwYXJhbWV0ZXIuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjE0LjM4MzI2NDQwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDkzMjk5MjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1VCTEtcIixcbiAgICBcIkJMS19ERVZfWk9ORURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmxrX2N0cmxfdXJpbmdfY21kXCIsXG4gICAgXCJ1YmxrX2N0cmxfc2V0X3BhcmFtc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHVibGtfdmFsaWRhdGVfcGFyYW1zYCBpbiBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYCB0byBlbnN1cmUgdGhhdCBgY2h1bmtfc2VjdG9yc2AgaXMgYSBwb3dlciBvZiAyIGZvciB6b25lZCBkZXZpY2VzLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggY29uc2lzdHMgb2YgdXBkYXRlcyB0byB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdHMgKGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2ApLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGtlcm5lbCBjaGFuZ2UgaXMgcHVyZWx5IGEgdmFsaWRhdGlvbiBjaGVjayBvbiBhbiBleGlzdGluZyBwYXJhbWV0ZXIuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHVibGsgZHJpdmVyIHRvIGVuZm9yY2UgdGhhdCBgY2h1bmtfc2VjdG9yc2AgaXMgYSBwb3dlciBvZiAyIHdoZW4gY29uZmlndXJpbmcgYSB6b25lZCB1YmxrIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwncyB2YWxpZGF0aW9uIGxvZ2ljIGZvciB1c2VyLXByb3ZpZGVkIHBhcmFtZXRlcnMsIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgY29tbWFuZHMgb24gYC9kZXYvdWJsay1jb250cm9sYC4gVGhlIGNvZGUgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzE6MTQuMzgzMjcyMzIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE1MzQyNjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYThjMjNjZjQ0OTk3NTg2YzBmOGQzYTJiNmMwZTU4MTkwZDU1NDI4NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwMzozMToxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcXG5pbmRleCA4NTNjZDQwYTM0MDNjLi4xOTNmNmViYzNiMzdjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xcbkBAIC05ODAsNyArOTgwLDcgQEAgc3RhdGljIGludCB1YmxrX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbiBcXHRcXHRpZiAocC1cXHUwMDNlbWF4X3NlY3RvcnMgXFx1MDAzYyBQQUdFX1NFQ1RPUlMpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0XFx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSBcXHUwMDI2XFx1MDAyNiAhcC1cXHUwMDNlY2h1bmtfc2VjdG9ycylcXG4rXFx0XFx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSBcXHUwMDI2XFx1MDAyNiAhaXNfcG93ZXJfb2ZfMihwLVxcdTAwM2VjaHVua19zZWN0b3JzKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH0gZWxzZVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGVcXG5pbmRleCBhM2NlYzdiMzVkYjc3Li41ZGFmMzZjNmMzNmM0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL01ha2VmaWxlXFxuQEAgLTU1LDYgKzU1LDggQEAgVEVTVF9QUk9HUyArPSB0ZXN0X3N0cmlwZV8wNi5zaFxcbiBURVNUX1BST0dTICs9IHRlc3RfcGFydF8wMS5zaFxcbiBURVNUX1BST0dTICs9IHRlc3RfcGFydF8wMi5zaFxcbiBcXG4rVEVTVF9QUk9HUyArPSB0ZXN0X3BhcmFtc18wMS5zaFxcbitcXG4gVEVTVF9QUk9HUyArPSB0ZXN0X3NobWVtemNfMDEuc2hcXG4gVEVTVF9QUk9HUyArPSB0ZXN0X3NobWVtemNfMDIuc2hcXG4gVEVTVF9QUk9HUyArPSB0ZXN0X3NobWVtemNfMDMuc2hcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jXFxuaW5kZXggYmU1YTBkNzc1OTUyYy4uMjQwMGI0NjE1NzY2NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmNcXG5AQCAtOCw2ICs4LDEzIEBAXFxuICNpbmNsdWRlIFxcXCJrdWJsay5oXFxcIlxcbiBcXG4gI2RlZmluZSBNQVhfTlJfVEdUX0FSRyBcXHQ2NFxcbisjZGVmaW5lIEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlRcXHRcXHQ5XFxuKyNkZWZpbmUgS1VCTEtfUEFSQU1fUEhZU0lDQUxfQlNfU0hJRlRcXHRcXHQxMlxcbisjZGVmaW5lIEtVQkxLX1BBUkFNX1pPTkVfU0VDVE9SU1xcdFxcdDEyOFxcbisjZGVmaW5lIEtVQkxLX1BBUkFNX05SX1pPTkVTXFx0XFx0XFx0MTZcXG4rI2RlZmluZSBLVUJMS19QQVJBTV9ERVZfU0VDVE9SU1xcdFxcdFxcdFxcXFxcXG4rXFx0KEtVQkxLX1BBUkFNX1pPTkVfU0VDVE9SUyAqIEtVQkxLX1BBUkFNX05SX1pPTkVTKVxcbisjZGVmaW5lIEtVQkxLX1BBUkFNX1pPTkVfQVBQRU5EX1NFQ1RPUlNcXHRcXHQ4XFxuIFxcbiB1bnNpZ25lZCBpbnQgdWJsa19kYmdfbWFzayA9IFVCTEtfTE9HO1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHVibGtfdGd0X29wcyAqdGd0X29wc19saXN0W10gPSB7XFxuQEAgLTIyNyw2ICsyMzQsNTUgQEAgc3RhdGljIGludCB1YmxrX2N0cmxfZ2V0X2ZlYXR1cmVzKHN0cnVjdCB1YmxrX2RldiAqZGV2LFxcbiBcXHRyZXR1cm4gX191YmxrX2N0cmxfY21kKGRldiwgXFx1MDAyNmRhdGEpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHBhcnNlX3BhcmFtX3R5cGVzKGNvbnN0IGNoYXIgKmFyZywgX191MzIgKnR5cGVzKVxcbit7XFxuK1xcdGNoYXIgYnVmWzEyOF0sICpzYXZlID0gTlVMTCwgKnRvaztcXG4rXFxuK1xcdGlmIChzdHJsZW4oYXJnKSBcXHUwMDNlPSBzaXplb2YoYnVmKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRzdHJjcHkoYnVmLCBhcmcpO1xcbitcXHQqdHlwZXMgPSAwO1xcbitcXHR0b2sgPSBzdHJ0b2tfcihidWYsIFxcXCIsXFxcIiwgXFx1MDAyNnNhdmUpO1xcbitcXHR3aGlsZSAodG9rKSB7XFxuK1xcdFxcdGlmICghc3RyY21wKHRvaywgXFxcIm5vbmVcXFwiKSlcXG4rXFx0XFx0XFx0O1xcbitcXHRcXHRlbHNlIGlmICghc3RyY21wKHRvaywgXFxcImJhc2ljXFxcIikpXFxuK1xcdFxcdFxcdCp0eXBlcyB8PSBVQkxLX1BBUkFNX1RZUEVfQkFTSUM7XFxuK1xcdFxcdGVsc2UgaWYgKCFzdHJjbXAodG9rLCBcXFwiem9uZWRcXFwiKSlcXG4rXFx0XFx0XFx0KnR5cGVzIHw9IFVCTEtfUEFSQU1fVFlQRV9aT05FRDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0dG9rID0gc3RydG9rX3IoTlVMTCwgXFxcIixcXFwiLCBcXHUwMDI2c2F2ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB1YmxrX2luaXRfcGFyYW1zX2Zyb21fY3R4KGNvbnN0IHN0cnVjdCBkZXZfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB1YmxrX3BhcmFtcyAqcGFyYW1zKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBwYXJhbXNfY3R4ICpwID0gXFx1MDAyNmN0eC1cXHUwMDNlcGFyYW1zO1xcbitcXG4rXFx0KnBhcmFtcyA9IChzdHJ1Y3QgdWJsa19wYXJhbXMpIHtcXG4rXFx0XFx0LnR5cGVzID0gcC1cXHUwMDNldHlwZXMsXFxuK1xcdFxcdC5iYXNpYyA9IHtcXG4rXFx0XFx0XFx0LmxvZ2ljYWxfYnNfc2hpZnRcXHQ9IHAtXFx1MDAzZWxvZ2ljYWxfYnNfc2hpZnQsXFxuK1xcdFxcdFxcdC5waHlzaWNhbF9ic19zaGlmdFxcdD0gcC1cXHUwMDNlcGh5c2ljYWxfYnNfc2hpZnQsXFxuK1xcdFxcdFxcdC5pb19taW5fc2hpZnRcXHRcXHQ9IHAtXFx1MDAzZWlvX21pbl9zaGlmdCxcXG4rXFx0XFx0XFx0LmlvX29wdF9zaGlmdFxcdFxcdD0gcC1cXHUwMDNlaW9fb3B0X3NoaWZ0LFxcbitcXHRcXHRcXHQubWF4X3NlY3RvcnNcXHRcXHQ9IHAtXFx1MDAzZW1heF9zZWN0b3JzLFxcbitcXHRcXHRcXHQuY2h1bmtfc2VjdG9yc1xcdFxcdD0gcC1cXHUwMDNlY2h1bmtfc2VjdG9ycyxcXG4rXFx0XFx0XFx0LmRldl9zZWN0b3JzXFx0XFx0PSBwLVxcdTAwM2VkZXZfc2VjdG9ycyxcXG4rXFx0XFx0fSxcXG4rXFx0XFx0LnpvbmVkID0ge1xcbitcXHRcXHRcXHQubWF4X29wZW5fem9uZXNcXHRcXHQ9IHAtXFx1MDAzZW1heF9vcGVuX3pvbmVzLFxcbitcXHRcXHRcXHQubWF4X2FjdGl2ZV96b25lc1xcdD0gcC1cXHUwMDNlbWF4X2FjdGl2ZV96b25lcyxcXG4rXFx0XFx0XFx0Lm1heF96b25lX2FwcGVuZF9zZWN0b3JzID0gcC1cXHUwMDNlbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMsXFxuK1xcdFxcdH0sXFxuK1xcdH07XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdWJsa19jdHJsX3VwZGF0ZV9zaXplKHN0cnVjdCB1YmxrX2RldiAqZGV2LFxcbiBcXHRcXHRfX3U2NCBucl9zZWN0cylcXG4ge1xcbkBAIC0xNzcyLDYgKzE4MjgsNTEgQEAgc3RhdGljIGludCBfX2NtZF9kZXZfYWRkKGNvbnN0IHN0cnVjdCBkZXZfY3R4ICpjdHgpXFxuIFxcbiBzdGF0aWMgaW50IF9fY21kX2Rldl9saXN0KHN0cnVjdCBkZXZfY3R4ICpjdHgpO1xcbiBcXG4rc3RhdGljIGludCBjbWRfZGV2X3NldF9wYXJhbXMoc3RydWN0IGRldl9jdHggKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdWJsa3Nydl9jdHJsX2Rldl9pbmZvICppbmZvO1xcbitcXHRzdHJ1Y3QgdWJsa19wYXJhbXMgcGFyYW1zO1xcbitcXHRzdHJ1Y3QgdWJsa19kZXYgKmRldjtcXG4rXFx0X191NjQgZmVhdHVyZXM7XFxuK1xcdGludCByZXQsIGRlbF9yZXQ7XFxuK1xcbitcXHRkZXYgPSB1YmxrX2N0cmxfaW5pdCgpO1xcbitcXHRpZiAoIWRldilcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRyZXQgPSB1YmxrX2N0cmxfZ2V0X2ZlYXR1cmVzKGRldiwgXFx1MDAyNmZlYXR1cmVzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKCEoZmVhdHVyZXMgXFx1MDAyNiBVQkxLX0ZfQ01EX0lPQ1RMX0VOQ09ERSkpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT1RTVVA7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpbmZvID0gXFx1MDAyNmRldi1cXHUwMDNlZGV2X2luZm87XFxuK1xcdGluZm8tXFx1MDAzZWRldl9pZCA9IGN0eC1cXHUwMDNlZGV2X2lkO1xcbitcXHRpbmZvLVxcdTAwM2Vucl9od19xdWV1ZXMgPSBjdHgtXFx1MDAzZW5yX2h3X3F1ZXVlcztcXG4rXFx0aW5mby1cXHUwMDNlcXVldWVfZGVwdGggPSBjdHgtXFx1MDAzZXF1ZXVlX2RlcHRoO1xcbitcXHRpbmZvLVxcdTAwM2Vpb19kZXNjX3NpemUgPSBjdHgtXFx1MDAzZWlvX2Rlc2Nfc2l6ZTtcXG4rXFx0aW5mby1cXHUwMDNlZmxhZ3MgPSBjdHgtXFx1MDAzZWZsYWdzO1xcbitcXG4rXFx0cmV0ID0gdWJsa19jdHJsX2FkZF9kZXYoZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0dWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjdHgsIFxcdTAwMjZwYXJhbXMpO1xcbitcXG4rXFx0cmV0ID0gdWJsa19jdHJsX3NldF9wYXJhbXMoZGV2LCBcXHUwMDI2cGFyYW1zKTtcXG4rXFx0cHJpbnRmKFxcXCJTRVRfUEFSQU1TIHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXG4rXFx0ZGVsX3JldCA9IHVibGtfY3RybF9kZWxfZGV2KGRldik7XFxuK1xcdGlmIChkZWxfcmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiByZXQgPT0gMClcXG4rXFx0XFx0cmV0ID0gZGVsX3JldDtcXG4rb3V0OlxcbitcXHR1YmxrX2N0cmxfZGVpbml0KGRldik7XFxuK1xcdHJldHVybiByZXQgXFx1MDAzYyAwID8gcmV0IDogMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBjbWRfZGV2X2FkZChzdHJ1Y3QgZGV2X2N0eCAqY3R4KVxcbiB7XFxuIFxcdGludCByZXM7XFxuQEAgLTIxMTcsNiArMjIxOCw5IEBAIHN0YXRpYyBpbnQgY21kX2Rldl9oZWxwKGNoYXIgKmV4ZSlcXG4gXFx0cHJpbnRmKFxcXCJcXFxcdCAtLXNhZmUgb25seSBzdG9wIGlmIGRldmljZSBoYXMgbm8gYWN0aXZlIG9wZW5lcnNcXFxcblxcXFxuXFxcIik7XFxuIFxcdHByaW50ZihcXFwiJXMgbGlzdCBbLW4gZGV2X2lkXSAtYSBcXFxcblxcXCIsIGV4ZSk7XFxuIFxcdHByaW50ZihcXFwiXFxcXHQgLWEgbGlzdCBhbGwgZGV2aWNlcywgLW4gbGlzdCBzcGVjaWZpZWQgZGV2aWNlLCBkZWZhdWx0IC1hIFxcXFxuXFxcXG5cXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCIlcyBzZXRfcGFyYW1zIFstbiBkZXZfaWRdIFstcSBucl9xdWV1ZXNdIFstZCBkZXB0aF0gWy11XSBbLS16b25lZF1cXFxcblxcXCIsIGV4ZSk7XFxuK1xcdHByaW50ZihcXFwiXFxcXHRbLS1wYXJhbV90eXBlcyBiYXNpY1ssem9uZWRdfG5vbmVdXFxcXG5cXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCJcXFxcdCBpc3N1ZSBBRERfREVWLCBTRVRfUEFSQU1TIGFuZCBERUxfREVWIHdpdGhvdXQgU1RBUlRfREVWXFxcXG5cXFxcblxcXCIpO1xcbiBcXHRwcmludGYoXFxcIiVzIGZlYXR1cmVzXFxcXG5cXFwiLCBleGUpO1xcbiBcXHRwcmludGYoXFxcIiVzIHVwZGF0ZV9zaXplIC1uIGRldl9pZCAtc3wtLXNpemUgc2l6ZV9pbl9ieXRlcyBcXFxcblxcXCIsIGV4ZSk7XFxuIFxcdHByaW50ZihcXFwiJXMgcXVpZXNjZSAtbiBkZXZfaWRcXFxcblxcXCIsIGV4ZSk7XFxuQEAgLTIxNjAsNiArMjI2NCwxOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHR7IFxcXCJodGxiXFxcIixcXHRcXHQxLFxcdE5VTEwsICAwICB9LFxcbiBcXHRcXHR7IFxcXCJyZG9ubHlfc2htZW1fYnVmXFxcIixcXHQwLFxcdE5VTEwsICAwICB9LFxcbiBcXHRcXHR7IFxcXCJpb19kZXNjX3NpemVcXFwiLFxcdDEsXFx0TlVMTCwgIDAgIH0sXFxuK1xcdFxcdHsgXFxcInpvbmVkXFxcIixcXHRcXHQwLFxcdE5VTEwsICAwICB9LFxcbitcXHRcXHR7IFxcXCJwYXJhbV90eXBlc1xcXCIsXFx0MSxcXHROVUxMLCAgMCAgfSxcXG4rXFx0XFx0eyBcXFwibG9naWNhbF9ic19zaGlmdFxcXCIsXFx0MSxcXHROVUxMLCAgMCAgfSxcXG4rXFx0XFx0eyBcXFwicGh5c2ljYWxfYnNfc2hpZnRcXFwiLFxcdDEsXFx0TlVMTCwgIDAgIH0sXFxuK1xcdFxcdHsgXFxcImlvX21pbl9zaGlmdFxcXCIsXFx0MSxcXHROVUxMLCAgMCAgfSxcXG4rXFx0XFx0eyBcXFwiaW9fb3B0X3NoaWZ0XFxcIixcXHQxLFxcdE5VTEwsICAwICB9LFxcbitcXHRcXHR7IFxcXCJtYXhfc2VjdG9yc1xcXCIsXFx0MSxcXHROVUxMLCAgMCAgfSxcXG4rXFx0XFx0eyBcXFwiY2h1bmtfc2VjdG9yc1xcXCIsXFx0MSxcXHROVUxMLCAgMCAgfSxcXG4rXFx0XFx0eyBcXFwiZGV2X3NlY3RvcnNcXFwiLFxcdDEsXFx0TlVMTCwgIDAgIH0sXFxuK1xcdFxcdHsgXFxcIm1heF96b25lX2FwcGVuZF9zZWN0b3JzXFxcIiwgMSwgTlVMTCwgIDAgIH0sXFxuK1xcdFxcdHsgXFxcIm1heF9vcGVuX3pvbmVzXFxcIixcXHQxLFxcdE5VTEwsICAwICB9LFxcbitcXHRcXHR7IFxcXCJtYXhfYWN0aXZlX3pvbmVzXFxcIixcXHQxLFxcdE5VTEwsICAwICB9LFxcbiBcXHRcXHR7IDAsIDAsIDAsIDAgfVxcbiBcXHR9O1xcbiBcXHRjb25zdCBzdHJ1Y3QgdWJsa190Z3Rfb3BzICpvcHMgPSBOVUxMO1xcbkBAIC0yMTczLDYgKzIyODksMTkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0XFx0LnRndF90eXBlXFx0PVxcdFxcXCJ1bmtub3duXFxcIixcXG4gXFx0XFx0LmNzdW1fdHlwZVxcdD1cXHRMQk1EX1BJX0NTVU1fTk9ORSxcXG4gXFx0XFx0LmlvX2Rlc2Nfc2l6ZVxcdD1cXHRzaXplb2Yoc3RydWN0IHVibGtzcnZfaW9fZGVzYyksXFxuK1xcdFxcdC5wYXJhbXMgPSB7XFxuK1xcdFxcdFxcdC50eXBlc1xcdFxcdFxcdD0gVUJMS19QQVJBTV9UWVBFX0JBU0lDLFxcbitcXHRcXHRcXHQubG9naWNhbF9ic19zaGlmdFxcdD0gS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCxcXG4rXFx0XFx0XFx0LnBoeXNpY2FsX2JzX3NoaWZ0XFx0PSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCxcXG4rXFx0XFx0XFx0LmlvX21pbl9zaGlmdFxcdFxcdD0gS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCxcXG4rXFx0XFx0XFx0LmlvX29wdF9zaGlmdFxcdFxcdD0gS1VCTEtfUEFSQU1fUEhZU0lDQUxfQlNfU0hJRlQsXFxuK1xcdFxcdFxcdC5tYXhfc2VjdG9yc1xcdFxcdD1cXG4rXFx0XFx0XFx0XFx0VUJMS19JT19NQVhfQllURVMgXFx1MDAzZVxcdTAwM2UgS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCxcXG4rXFx0XFx0XFx0LmNodW5rX3NlY3RvcnNcXHRcXHQ9IEtVQkxLX1BBUkFNX1pPTkVfU0VDVE9SUyxcXG4rXFx0XFx0XFx0LmRldl9zZWN0b3JzXFx0XFx0PSBLVUJMS19QQVJBTV9ERVZfU0VDVE9SUyxcXG4rXFx0XFx0XFx0Lm1heF96b25lX2FwcGVuZF9zZWN0b3JzID1cXG4rXFx0XFx0XFx0XFx0S1VCTEtfUEFSQU1fWk9ORV9BUFBFTkRfU0VDVE9SUyxcXG4rXFx0XFx0fSxcXG4gXFx0fTtcXG4gXFx0aW50IHJldCA9IC1FSU5WQUwsIGk7XFxuIFxcdGludCB0Z3RfYXJnYyA9IDE7XFxuQEAgLTIyODgsNiArMjQxNywzNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHRcXHRcXHRjdHguZmxhZ3MgfD0gVUJMS19GX0lPX0RFU0NfU0laRTtcXG4gXFx0XFx0XFx0XFx0Y3R4LmlvX2Rlc2Nfc2l6ZSA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4gXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcXFwiem9uZWRcXFwiKSlcXG4rXFx0XFx0XFx0XFx0Y3R4LmZsYWdzIHw9IFVCTEtfRl9aT05FRDtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXFxcInBhcmFtX3R5cGVzXFxcIikpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gcGFyc2VfcGFyYW1fdHlwZXMob3B0YXJnLCBcXHUwMDI2Y3R4LnBhcmFtcy50eXBlcyk7XFxuK1xcdFxcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXFxcImxvZ2ljYWxfYnNfc2hpZnRcXFwiKSlcXG4rXFx0XFx0XFx0XFx0Y3R4LnBhcmFtcy5sb2dpY2FsX2JzX3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xcbitcXHRcXHRcXHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcXFwicGh5c2ljYWxfYnNfc2hpZnRcXFwiKSlcXG4rXFx0XFx0XFx0XFx0Y3R4LnBhcmFtcy5waHlzaWNhbF9ic19zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXFxcImlvX21pbl9zaGlmdFxcXCIpKVxcbitcXHRcXHRcXHRcXHRjdHgucGFyYW1zLmlvX21pbl9zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXFxcImlvX29wdF9zaGlmdFxcXCIpKVxcbitcXHRcXHRcXHRcXHRjdHgucGFyYW1zLmlvX29wdF9zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXFxcIm1heF9zZWN0b3JzXFxcIikpXFxuK1xcdFxcdFxcdFxcdGN0eC5wYXJhbXMubWF4X3NlY3RvcnMgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFxcXCJjaHVua19zZWN0b3JzXFxcIikpXFxuK1xcdFxcdFxcdFxcdGN0eC5wYXJhbXMuY2h1bmtfc2VjdG9ycyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXFxcImRldl9zZWN0b3JzXFxcIikpXFxuK1xcdFxcdFxcdFxcdGN0eC5wYXJhbXMuZGV2X3NlY3RvcnMgPSBzdHJ0b3VsbChvcHRhcmcsIE5VTEwsIDApO1xcbitcXHRcXHRcXHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcXFwibWF4X3pvbmVfYXBwZW5kX3NlY3RvcnNcXFwiKSlcXG4rXFx0XFx0XFx0XFx0Y3R4LnBhcmFtcy5tYXhfem9uZV9hcHBlbmRfc2VjdG9ycyA9XFxuK1xcdFxcdFxcdFxcdFxcdHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXFxcIm1heF9vcGVuX3pvbmVzXFxcIikpXFxuK1xcdFxcdFxcdFxcdGN0eC5wYXJhbXMubWF4X29wZW5fem9uZXMgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFxcXCJtYXhfYWN0aXZlX3pvbmVzXFxcIikpXFxuK1xcdFxcdFxcdFxcdGN0eC5wYXJhbXMubWF4X2FjdGl2ZV96b25lcyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJz8nOlxcbiBcXHRcXHRcXHQvKlxcbkBAIC0yMzc3LDcgKzI1MzQsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHRvcHMtXFx1MDAzZXBhcnNlX2NtZF9saW5lKFxcdTAwMjZjdHgsIHRndF9hcmdjLCB0Z3RfYXJndik7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghc3RyY21wKGNtZCwgXFxcImFkZFxcXCIpKVxcbitcXHRpZiAoIXN0cmNtcChjbWQsIFxcXCJzZXRfcGFyYW1zXFxcIikpXFxuK1xcdFxcdHJldCA9IGNtZF9kZXZfc2V0X3BhcmFtcyhcXHUwMDI2Y3R4KTtcXG4rXFx0ZWxzZSBpZiAoIXN0cmNtcChjbWQsIFxcXCJhZGRcXFwiKSlcXG4gXFx0XFx0cmV0ID0gY21kX2Rldl9hZGQoXFx1MDAyNmN0eCk7XFxuIFxcdGVsc2UgaWYgKCFzdHJjbXAoY21kLCBcXFwicmVjb3ZlclxcXCIpKSB7XFxuIFxcdFxcdGlmIChjdHguZGV2X2lkIFxcdTAwM2MgMCkge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmhcXG5pbmRleCBlMjdjMTU0ZmM5MTA4Li5kOThmM2Q2MTJkODg4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaFxcbkBAIC02Myw2ICs2MywyMiBAQCBzdHJ1Y3QgZmF1bHRfaW5qZWN0X2N0eCB7XFxuIFxcdGJvb2wgZGllX2R1cmluZ19mZXRjaDtcXG4gfTtcXG4gXFxuK3N0cnVjdCBwYXJhbXNfY3R4IHtcXG4rXFx0X191MzIgdHlwZXM7XFxuK1xcbitcXHRfX3UzMiBsb2dpY2FsX2JzX3NoaWZ0O1xcbitcXHRfX3UzMiBwaHlzaWNhbF9ic19zaGlmdDtcXG4rXFx0X191MzIgaW9fbWluX3NoaWZ0O1xcbitcXHRfX3UzMiBpb19vcHRfc2hpZnQ7XFxuK1xcdF9fdTMyIG1heF9zZWN0b3JzO1xcbitcXHRfX3UzMiBjaHVua19zZWN0b3JzO1xcbitcXHRfX3U2NCBkZXZfc2VjdG9ycztcXG4rXFxuK1xcdF9fdTMyIG1heF9vcGVuX3pvbmVzO1xcbitcXHRfX3UzMiBtYXhfYWN0aXZlX3pvbmVzO1xcbitcXHRfX3UzMiBtYXhfem9uZV9hcHBlbmRfc2VjdG9ycztcXG4rfTtcXG4rXFxuIHN0cnVjdCBkZXZfY3R4IHtcXG4gXFx0Y2hhciB0Z3RfdHlwZVsxNl07XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuQEAgLTk5LDYgKzExNSw4IEBAIHN0cnVjdCBkZXZfY3R4IHtcXG4gXFx0LyogZm9yICd1cGRhdGVfc2l6ZScgY29tbWFuZCAqL1xcbiBcXHR1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTtcXG4gXFxuK1xcdHN0cnVjdCBwYXJhbXNfY3R4IHBhcmFtcztcXG4rXFxuIFxcdGNoYXIgKmh0bGJfcGF0aDtcXG4gXFxuIFxcdHVuaW9uIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3BhcmFtc18wMS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjkyOGU3MmIxMDM1ZDJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3BhcmFtc18wMS5zaFxcbkBAIC0wLDAgKzEsMTE0IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKy4gXFxcIiQoY2QgXFxcIiQoZGlybmFtZSBcXFwiJDBcXFwiKVxcXCIgXFx1MDAyNlxcdTAwMjYgcHdkKVxcXCIvdGVzdF9jb21tb24uc2hcXG4rXFxuK0VSUl9DT0RFPTBcXG4rXFxuK3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MoKVxcbit7XFxuK1xcdGxvY2FsIG5hbWU9JDFcXG4rXFxuK1xcdHNoaWZ0XFxuK1xcbitcXHRlY2hvIFxcXCIkbmFtZVxcXCJcXG4rXFx0aWYgISBcXFwiJFVCTEtfUFJPR1xcXCIgc2V0X3BhcmFtcyAtcSAxIC1kIDIgXFxcIiRAXFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCIkbmFtZTogU0VUX1BBUkFNUyBjaGVjayBmYWlsZWRcXFwiXFxuK1xcdFxcdHJldHVybiAxXFxuK1xcdGZpXFxuK31cXG4rXFxuK3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUoKVxcbit7XFxuK1xcdGxvY2FsIG5hbWU9JDFcXG4rXFxuK1xcdHNoaWZ0XFxuK1xcbitcXHRlY2hvIFxcXCIkbmFtZVxcXCJcXG4rXFx0aWYgXFxcIiRVQkxLX1BST0dcXFwiIHNldF9wYXJhbXMgLXEgMSAtZCAyIFxcXCIkQFxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiJG5hbWU6IFNFVF9QQVJBTVMgc3VjY2VlZGVkIHVuZXhwZWN0ZWRseVxcXCJcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rfVxcbitcXG4rcnVuX3pvbmVkX3NldF9wYXJhbXNfc3VjY2VzcygpXFxuK3tcXG4rXFx0bG9jYWwgbmFtZT0kMVxcbitcXG4rXFx0c2hpZnRcXG4rXFxuK1xcdGVjaG8gXFxcIiRuYW1lXFxcIlxcbitcXHRpZiAhIFxcXCIkVUJMS19QUk9HXFxcIiBzZXRfcGFyYW1zIC1xIDEgLWQgMiAtdSAtLXpvbmVkIFxcXCIkQFxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiJG5hbWU6IFNFVF9QQVJBTVMgY2hlY2sgZmFpbGVkXFxcIlxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbit9XFxuK1xcbitydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlKClcXG4re1xcbitcXHRsb2NhbCBuYW1lPSQxXFxuK1xcbitcXHRzaGlmdFxcbitcXG4rXFx0ZWNobyBcXFwiJG5hbWVcXFwiXFxuK1xcdGlmIFxcXCIkVUJMS19QUk9HXFxcIiBzZXRfcGFyYW1zIC1xIDEgLWQgMiAtdSAtLXpvbmVkIFxcXCIkQFxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiJG5hbWU6IFNFVF9QQVJBTVMgc3VjY2VlZGVkIHVuZXhwZWN0ZWRseVxcXCJcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rfVxcbitcXG4rX3ByZXBfdGVzdCBcXFwicGFyYW1zXFxcIiBcXFwiU0VUX1BBUkFNUyB2YWxpZGF0aW9uXFxcIlxcbitcXG4raWYgWyAhIC1jIC9kZXYvdWJsay1jb250cm9sIF07IHRoZW5cXG4rXFx0X2NsZWFudXBfdGVzdFxcbitcXHRfc2hvd19yZXN1bHQgJFRJRCAkVUJMS19TS0lQX0NPREVcXG4rZmlcXG4rXFxuK3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MgXFxcInZhbGlkIGJhc2ljIHBhcmFtc1xcXCIgfHxcXG4rXFx0RVJSX0NPREU9MVxcbitcXG4rcnVuX3NldF9wYXJhbXNfZmFpbHVyZSBcXFwibWlzc2luZyBiYXNpYyBwYXJhbXNcXFwiIFxcXFxcXG4rXFx0LS1wYXJhbV90eXBlcyBub25lIHx8XFxuK1xcdEVSUl9DT0RFPTFcXG4rXFxuK3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUgXFxcImxvZ2ljYWwgYmxvY2sgbGFyZ2VyIHRoYW4gcGh5c2ljYWwgYmxvY2tcXFwiIFxcXFxcXG4rXFx0LS1sb2dpY2FsX2JzX3NoaWZ0IDEyIC0tcGh5c2ljYWxfYnNfc2hpZnQgOSB8fFxcbitcXHRFUlJfQ09ERT0xXFxuK1xcbitydW5fc2V0X3BhcmFtc19mYWlsdXJlIFxcXCJ0b28gbGFyZ2UgbWF4IHNlY3RvcnNcXFwiIFxcXFxcXG4rXFx0LS1tYXhfc2VjdG9ycyAyMDQ5IHx8XFxuK1xcdEVSUl9DT0RFPTFcXG4rXFxuK2lmIF9oYXZlX2ZlYXR1cmUgXFxcIlpPTkVEXFxcIiBcXHUwMDI2XFx1MDAyNiBfaGF2ZV9mZWF0dXJlIFxcXCJVU0VSX0NPUFlcXFwiOyB0aGVuXFxuK1xcdHJ1bl96b25lZF9zZXRfcGFyYW1zX3N1Y2Nlc3MgXFxcInZhbGlkIHpvbmVkIHBhcmFtc1xcXCIgXFxcXFxcbitcXHRcXHQtLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIHx8XFxuK1xcdFxcdEVSUl9DT0RFPTFcXG4rXFxuK1xcdHJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgXFxcIm1pc3Npbmcgem9uZWQgcGFyYW1zXFxcIiB8fFxcbitcXHRcXHRFUlJfQ09ERT0xXFxuK1xcbitcXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFxcXCJub24tcG93ZXItb2YtMiB6b25lIHNpemVcXFwiIFxcXFxcXG4rXFx0XFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxcXFxuK1xcdFxcdC0tY2h1bmtfc2VjdG9ycyA5NiAtLWRldl9zZWN0b3JzICQoKDk2ICogMTYpKSB8fFxcbitcXHRcXHRFUlJfQ09ERT0xXFxuK1xcbitcXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFxcXCJ6ZXJvIG1heCB6b25lIGFwcGVuZFxcXCIgXFxcXFxcbitcXHRcXHQtLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFxcXFxcXG4rXFx0XFx0LS1tYXhfem9uZV9hcHBlbmRfc2VjdG9ycyAwIHx8XFxuK1xcdFxcdEVSUl9DT0RFPTFcXG4rXFxuK1xcdHJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgXFxcInRvbyBtYW55IG9wZW4gem9uZXNcXFwiIFxcXFxcXG4rXFx0XFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxcXFxuK1xcdFxcdC0tZGV2X3NlY3RvcnMgJCgoMTI4ICogNCkpIC0tbWF4X29wZW5fem9uZXMgNSB8fFxcbitcXHRcXHRFUlJfQ09ERT0xXFxuK1xcbitcXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFxcXCJ0b28gbWFueSBhY3RpdmUgem9uZXNcXFwiIFxcXFxcXG4rXFx0XFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxcXFxuK1xcdFxcdC0tZGV2X3NlY3RvcnMgJCgoMTI4ICogNCkpIC0tbWF4X2FjdGl2ZV96b25lcyA1IHx8XFxuK1xcdFxcdEVSUl9DT0RFPTFcXG4rZWxzZVxcbitcXHRlY2hvIFxcXCJ6b25lZCB1YmxrIGZlYXR1cmUgdW5hdmFpbGFibGUsIHNraXAgem9uZWQgU0VUX1BBUkFNUyBjYXNlc1xcXCJcXG4rZmlcXG4rXFxuK19jbGVhbnVwX3Rlc3RcXG4rX3Nob3dfcmVzdWx0ICRUSUQgJEVSUl9DT0RFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjE1LjkwMTY1Mjc3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg5OTQ0MTYxNDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfVUJMS1wiLFxuICAgIFwiQkxLX0RFVl9aT05FRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVibGtfY3RybF91cmluZ19jbWRcIixcbiAgICBcInVibGtfY3RybF9zZXRfcGFyYW1zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHVibGsgZHJpdmVyIHRvIGVuZm9yY2UgdGhhdCBgY2h1bmtfc2VjdG9yc2AgaXMgYSBwb3dlciBvZiAyIHdoZW4gY29uZmlndXJpbmcgYSB6b25lZCB1YmxrIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwncyB2YWxpZGF0aW9uIGxvZ2ljIGZvciB1c2VyLXByb3ZpZGVkIHBhcmFtZXRlcnMsIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgY29tbWFuZHMgb24gYC9kZXYvdWJsay1jb250cm9sYC4gVGhlIGNvZGUgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYThjMjNjZjQ0OTk3NTg2YzBmOGQzYTJiNmMwZTU4MTkwZDU1NDI4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDAzOjMxOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5pbmRleCA4NTNjZDQwYTM0MDNjLi4xOTNmNmViYzNiMzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbkBAIC05ODAsNyArOTgwLDcgQEAgc3RhdGljIGludCB1YmxrX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxuIFx0XHRpZiAocC1cdTAwM2VtYXhfc2VjdG9ycyBcdTAwM2MgUEFHRV9TRUNUT1JTKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRpZiAodWJsa19kZXZfaXNfem9uZWQodWIpIFx1MDAyNlx1MDAyNiAhcC1cdTAwM2VjaHVua19zZWN0b3JzKVxuK1x0XHRpZiAodWJsa19kZXZfaXNfem9uZWQodWIpIFx1MDAyNlx1MDAyNiAhaXNfcG93ZXJfb2ZfMihwLVx1MDAzZWNodW5rX3NlY3RvcnMpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fSBlbHNlXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL01ha2VmaWxlXG5pbmRleCBhM2NlYzdiMzVkYjc3Li41ZGFmMzZjNmMzNmM0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZVxuQEAgLTU1LDYgKzU1LDggQEAgVEVTVF9QUk9HUyArPSB0ZXN0X3N0cmlwZV8wNi5zaFxuIFRFU1RfUFJPR1MgKz0gdGVzdF9wYXJ0XzAxLnNoXG4gVEVTVF9QUk9HUyArPSB0ZXN0X3BhcnRfMDIuc2hcbiBcbitURVNUX1BST0dTICs9IHRlc3RfcGFyYW1zXzAxLnNoXG4rXG4gVEVTVF9QUk9HUyArPSB0ZXN0X3NobWVtemNfMDEuc2hcbiBURVNUX1BST0dTICs9IHRlc3Rfc2htZW16Y18wMi5zaFxuIFRFU1RfUFJPR1MgKz0gdGVzdF9zaG1lbXpjXzAzLnNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jXG5pbmRleCBiZTVhMGQ3NzU5NTJjLi4yNDAwYjQ2MTU3NjY0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmNcbkBAIC04LDYgKzgsMTMgQEBcbiAjaW5jbHVkZSBcImt1YmxrLmhcIlxuIFxuICNkZWZpbmUgTUFYX05SX1RHVF9BUkcgXHQ2NFxuKyNkZWZpbmUgS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVFx0XHQ5XG4rI2RlZmluZSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVFx0XHQxMlxuKyNkZWZpbmUgS1VCTEtfUEFSQU1fWk9ORV9TRUNUT1JTXHRcdDEyOFxuKyNkZWZpbmUgS1VCTEtfUEFSQU1fTlJfWk9ORVNcdFx0XHQxNlxuKyNkZWZpbmUgS1VCTEtfUEFSQU1fREVWX1NFQ1RPUlNcdFx0XHRcXFxuK1x0KEtVQkxLX1BBUkFNX1pPTkVfU0VDVE9SUyAqIEtVQkxLX1BBUkFNX05SX1pPTkVTKVxuKyNkZWZpbmUgS1VCTEtfUEFSQU1fWk9ORV9BUFBFTkRfU0VDVE9SU1x0XHQ4XG4gXG4gdW5zaWduZWQgaW50IHVibGtfZGJnX21hc2sgPSBVQkxLX0xPRztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHVibGtfdGd0X29wcyAqdGd0X29wc19saXN0W10gPSB7XG5AQCAtMjI3LDYgKzIzNCw1NSBAQCBzdGF0aWMgaW50IHVibGtfY3RybF9nZXRfZmVhdHVyZXMoc3RydWN0IHVibGtfZGV2ICpkZXYsXG4gXHRyZXR1cm4gX191YmxrX2N0cmxfY21kKGRldiwgXHUwMDI2ZGF0YSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcGFyc2VfcGFyYW1fdHlwZXMoY29uc3QgY2hhciAqYXJnLCBfX3UzMiAqdHlwZXMpXG4re1xuK1x0Y2hhciBidWZbMTI4XSwgKnNhdmUgPSBOVUxMLCAqdG9rO1xuK1xuK1x0aWYgKHN0cmxlbihhcmcpIFx1MDAzZT0gc2l6ZW9mKGJ1ZikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0c3RyY3B5KGJ1ZiwgYXJnKTtcbitcdCp0eXBlcyA9IDA7XG4rXHR0b2sgPSBzdHJ0b2tfcihidWYsIFwiLFwiLCBcdTAwMjZzYXZlKTtcbitcdHdoaWxlICh0b2spIHtcbitcdFx0aWYgKCFzdHJjbXAodG9rLCBcIm5vbmVcIikpXG4rXHRcdFx0O1xuK1x0XHRlbHNlIGlmICghc3RyY21wKHRvaywgXCJiYXNpY1wiKSlcbitcdFx0XHQqdHlwZXMgfD0gVUJMS19QQVJBTV9UWVBFX0JBU0lDO1xuK1x0XHRlbHNlIGlmICghc3RyY21wKHRvaywgXCJ6b25lZFwiKSlcbitcdFx0XHQqdHlwZXMgfD0gVUJMS19QQVJBTV9UWVBFX1pPTkVEO1xuK1x0XHRlbHNlXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdHRvayA9IHN0cnRva19yKE5VTEwsIFwiLFwiLCBcdTAwMjZzYXZlKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCB1YmxrX2luaXRfcGFyYW1zX2Zyb21fY3R4KGNvbnN0IHN0cnVjdCBkZXZfY3R4ICpjdHgsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgdWJsa19wYXJhbXMgKnBhcmFtcylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcGFyYW1zX2N0eCAqcCA9IFx1MDAyNmN0eC1cdTAwM2VwYXJhbXM7XG4rXG4rXHQqcGFyYW1zID0gKHN0cnVjdCB1YmxrX3BhcmFtcykge1xuK1x0XHQudHlwZXMgPSBwLVx1MDAzZXR5cGVzLFxuK1x0XHQuYmFzaWMgPSB7XG4rXHRcdFx0LmxvZ2ljYWxfYnNfc2hpZnRcdD0gcC1cdTAwM2Vsb2dpY2FsX2JzX3NoaWZ0LFxuK1x0XHRcdC5waHlzaWNhbF9ic19zaGlmdFx0PSBwLVx1MDAzZXBoeXNpY2FsX2JzX3NoaWZ0LFxuK1x0XHRcdC5pb19taW5fc2hpZnRcdFx0PSBwLVx1MDAzZWlvX21pbl9zaGlmdCxcbitcdFx0XHQuaW9fb3B0X3NoaWZ0XHRcdD0gcC1cdTAwM2Vpb19vcHRfc2hpZnQsXG4rXHRcdFx0Lm1heF9zZWN0b3JzXHRcdD0gcC1cdTAwM2VtYXhfc2VjdG9ycyxcbitcdFx0XHQuY2h1bmtfc2VjdG9yc1x0XHQ9IHAtXHUwMDNlY2h1bmtfc2VjdG9ycyxcbitcdFx0XHQuZGV2X3NlY3RvcnNcdFx0PSBwLVx1MDAzZWRldl9zZWN0b3JzLFxuK1x0XHR9LFxuK1x0XHQuem9uZWQgPSB7XG4rXHRcdFx0Lm1heF9vcGVuX3pvbmVzXHRcdD0gcC1cdTAwM2VtYXhfb3Blbl96b25lcyxcbitcdFx0XHQubWF4X2FjdGl2ZV96b25lc1x0PSBwLVx1MDAzZW1heF9hY3RpdmVfem9uZXMsXG4rXHRcdFx0Lm1heF96b25lX2FwcGVuZF9zZWN0b3JzID0gcC1cdTAwM2VtYXhfem9uZV9hcHBlbmRfc2VjdG9ycyxcbitcdFx0fSxcbitcdH07XG4rfVxuK1xuIHN0YXRpYyBpbnQgdWJsa19jdHJsX3VwZGF0ZV9zaXplKHN0cnVjdCB1YmxrX2RldiAqZGV2LFxuIFx0XHRfX3U2NCBucl9zZWN0cylcbiB7XG5AQCAtMTc3Miw2ICsxODI4LDUxIEBAIHN0YXRpYyBpbnQgX19jbWRfZGV2X2FkZChjb25zdCBzdHJ1Y3QgZGV2X2N0eCAqY3R4KVxuIFxuIHN0YXRpYyBpbnQgX19jbWRfZGV2X2xpc3Qoc3RydWN0IGRldl9jdHggKmN0eCk7XG4gXG4rc3RhdGljIGludCBjbWRfZGV2X3NldF9wYXJhbXMoc3RydWN0IGRldl9jdHggKmN0eClcbit7XG4rXHRzdHJ1Y3QgdWJsa3Nydl9jdHJsX2Rldl9pbmZvICppbmZvO1xuK1x0c3RydWN0IHVibGtfcGFyYW1zIHBhcmFtcztcbitcdHN0cnVjdCB1YmxrX2RldiAqZGV2O1xuK1x0X191NjQgZmVhdHVyZXM7XG4rXHRpbnQgcmV0LCBkZWxfcmV0O1xuK1xuK1x0ZGV2ID0gdWJsa19jdHJsX2luaXQoKTtcbitcdGlmICghZGV2KVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldCA9IHVibGtfY3RybF9nZXRfZmVhdHVyZXMoZGV2LCBcdTAwMjZmZWF0dXJlcyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghKGZlYXR1cmVzIFx1MDAyNiBVQkxLX0ZfQ01EX0lPQ1RMX0VOQ09ERSkpIHtcbitcdFx0cmV0ID0gLUVOT1RTVVA7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aW5mbyA9IFx1MDAyNmRldi1cdTAwM2VkZXZfaW5mbztcbitcdGluZm8tXHUwMDNlZGV2X2lkID0gY3R4LVx1MDAzZWRldl9pZDtcbitcdGluZm8tXHUwMDNlbnJfaHdfcXVldWVzID0gY3R4LVx1MDAzZW5yX2h3X3F1ZXVlcztcbitcdGluZm8tXHUwMDNlcXVldWVfZGVwdGggPSBjdHgtXHUwMDNlcXVldWVfZGVwdGg7XG4rXHRpbmZvLVx1MDAzZWlvX2Rlc2Nfc2l6ZSA9IGN0eC1cdTAwM2Vpb19kZXNjX3NpemU7XG4rXHRpbmZvLVx1MDAzZWZsYWdzID0gY3R4LVx1MDAzZWZsYWdzO1xuK1xuK1x0cmV0ID0gdWJsa19jdHJsX2FkZF9kZXYoZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0dWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjdHgsIFx1MDAyNnBhcmFtcyk7XG4rXG4rXHRyZXQgPSB1YmxrX2N0cmxfc2V0X3BhcmFtcyhkZXYsIFx1MDAyNnBhcmFtcyk7XG4rXHRwcmludGYoXCJTRVRfUEFSQU1TIHJldHVybmVkICVkXFxuXCIsIHJldCk7XG4rXG4rXHRkZWxfcmV0ID0gdWJsa19jdHJsX2RlbF9kZXYoZGV2KTtcbitcdGlmIChkZWxfcmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgPT0gMClcbitcdFx0cmV0ID0gZGVsX3JldDtcbitvdXQ6XG4rXHR1YmxrX2N0cmxfZGVpbml0KGRldik7XG4rXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogMDtcbit9XG4rXG4gc3RhdGljIGludCBjbWRfZGV2X2FkZChzdHJ1Y3QgZGV2X2N0eCAqY3R4KVxuIHtcbiBcdGludCByZXM7XG5AQCAtMjExNyw2ICsyMjE4LDkgQEAgc3RhdGljIGludCBjbWRfZGV2X2hlbHAoY2hhciAqZXhlKVxuIFx0cHJpbnRmKFwiXFx0IC0tc2FmZSBvbmx5IHN0b3AgaWYgZGV2aWNlIGhhcyBubyBhY3RpdmUgb3BlbmVyc1xcblxcblwiKTtcbiBcdHByaW50ZihcIiVzIGxpc3QgWy1uIGRldl9pZF0gLWEgXFxuXCIsIGV4ZSk7XG4gXHRwcmludGYoXCJcXHQgLWEgbGlzdCBhbGwgZGV2aWNlcywgLW4gbGlzdCBzcGVjaWZpZWQgZGV2aWNlLCBkZWZhdWx0IC1hIFxcblxcblwiKTtcbitcdHByaW50ZihcIiVzIHNldF9wYXJhbXMgWy1uIGRldl9pZF0gWy1xIG5yX3F1ZXVlc10gWy1kIGRlcHRoXSBbLXVdIFstLXpvbmVkXVxcblwiLCBleGUpO1xuK1x0cHJpbnRmKFwiXFx0Wy0tcGFyYW1fdHlwZXMgYmFzaWNbLHpvbmVkXXxub25lXVxcblwiKTtcbitcdHByaW50ZihcIlxcdCBpc3N1ZSBBRERfREVWLCBTRVRfUEFSQU1TIGFuZCBERUxfREVWIHdpdGhvdXQgU1RBUlRfREVWXFxuXFxuXCIpO1xuIFx0cHJpbnRmKFwiJXMgZmVhdHVyZXNcXG5cIiwgZXhlKTtcbiBcdHByaW50ZihcIiVzIHVwZGF0ZV9zaXplIC1uIGRldl9pZCAtc3wtLXNpemUgc2l6ZV9pbl9ieXRlcyBcXG5cIiwgZXhlKTtcbiBcdHByaW50ZihcIiVzIHF1aWVzY2UgLW4gZGV2X2lkXFxuXCIsIGV4ZSk7XG5AQCAtMjE2MCw2ICsyMjY0LDE4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdHsgXCJodGxiXCIsXHRcdDEsXHROVUxMLCAgMCAgfSxcbiBcdFx0eyBcInJkb25seV9zaG1lbV9idWZcIixcdDAsXHROVUxMLCAgMCAgfSxcbiBcdFx0eyBcImlvX2Rlc2Nfc2l6ZVwiLFx0MSxcdE5VTEwsICAwICB9LFxuK1x0XHR7IFwiem9uZWRcIixcdFx0MCxcdE5VTEwsICAwICB9LFxuK1x0XHR7IFwicGFyYW1fdHlwZXNcIixcdDEsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcImxvZ2ljYWxfYnNfc2hpZnRcIixcdDEsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcInBoeXNpY2FsX2JzX3NoaWZ0XCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJpb19taW5fc2hpZnRcIixcdDEsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcImlvX29wdF9zaGlmdFwiLFx0MSxcdE5VTEwsICAwICB9LFxuK1x0XHR7IFwibWF4X3NlY3RvcnNcIixcdDEsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcImNodW5rX3NlY3RvcnNcIixcdDEsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcImRldl9zZWN0b3JzXCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJtYXhfem9uZV9hcHBlbmRfc2VjdG9yc1wiLCAxLCBOVUxMLCAgMCAgfSxcbitcdFx0eyBcIm1heF9vcGVuX3pvbmVzXCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJtYXhfYWN0aXZlX3pvbmVzXCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4gXHRcdHsgMCwgMCwgMCwgMCB9XG4gXHR9O1xuIFx0Y29uc3Qgc3RydWN0IHVibGtfdGd0X29wcyAqb3BzID0gTlVMTDtcbkBAIC0yMTczLDYgKzIyODksMTkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0LnRndF90eXBlXHQ9XHRcInVua25vd25cIixcbiBcdFx0LmNzdW1fdHlwZVx0PVx0TEJNRF9QSV9DU1VNX05PTkUsXG4gXHRcdC5pb19kZXNjX3NpemVcdD1cdHNpemVvZihzdHJ1Y3QgdWJsa3Nydl9pb19kZXNjKSxcbitcdFx0LnBhcmFtcyA9IHtcbitcdFx0XHQudHlwZXNcdFx0XHQ9IFVCTEtfUEFSQU1fVFlQRV9CQVNJQyxcbitcdFx0XHQubG9naWNhbF9ic19zaGlmdFx0PSBLVUJMS19QQVJBTV9MT0dJQ0FMX0JTX1NISUZULFxuK1x0XHRcdC5waHlzaWNhbF9ic19zaGlmdFx0PSBLVUJMS19QQVJBTV9QSFlTSUNBTF9CU19TSElGVCxcbitcdFx0XHQuaW9fbWluX3NoaWZ0XHRcdD0gS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCxcbitcdFx0XHQuaW9fb3B0X3NoaWZ0XHRcdD0gS1VCTEtfUEFSQU1fUEhZU0lDQUxfQlNfU0hJRlQsXG4rXHRcdFx0Lm1heF9zZWN0b3JzXHRcdD1cbitcdFx0XHRcdFVCTEtfSU9fTUFYX0JZVEVTIFx1MDAzZVx1MDAzZSBLVUJMS19QQVJBTV9MT0dJQ0FMX0JTX1NISUZULFxuK1x0XHRcdC5jaHVua19zZWN0b3JzXHRcdD0gS1VCTEtfUEFSQU1fWk9ORV9TRUNUT1JTLFxuK1x0XHRcdC5kZXZfc2VjdG9yc1x0XHQ9IEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTLFxuK1x0XHRcdC5tYXhfem9uZV9hcHBlbmRfc2VjdG9ycyA9XG4rXHRcdFx0XHRLVUJMS19QQVJBTV9aT05FX0FQUEVORF9TRUNUT1JTLFxuK1x0XHR9LFxuIFx0fTtcbiBcdGludCByZXQgPSAtRUlOVkFMLCBpO1xuIFx0aW50IHRndF9hcmdjID0gMTtcbkBAIC0yMjg4LDYgKzI0MTcsMzQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0XHRcdGN0eC5mbGFncyB8PSBVQkxLX0ZfSU9fREVTQ19TSVpFO1xuIFx0XHRcdFx0Y3R4LmlvX2Rlc2Nfc2l6ZSA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbiBcdFx0XHR9XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJ6b25lZFwiKSlcbitcdFx0XHRcdGN0eC5mbGFncyB8PSBVQkxLX0ZfWk9ORUQ7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJwYXJhbV90eXBlc1wiKSkge1xuK1x0XHRcdFx0cmV0ID0gcGFyc2VfcGFyYW1fdHlwZXMob3B0YXJnLCBcdTAwMjZjdHgucGFyYW1zLnR5cGVzKTtcbitcdFx0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0fVxuK1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwibG9naWNhbF9ic19zaGlmdFwiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMubG9naWNhbF9ic19zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcInBoeXNpY2FsX2JzX3NoaWZ0XCIpKVxuK1x0XHRcdFx0Y3R4LnBhcmFtcy5waHlzaWNhbF9ic19zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcImlvX21pbl9zaGlmdFwiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMuaW9fbWluX3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuK1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwiaW9fb3B0X3NoaWZ0XCIpKVxuK1x0XHRcdFx0Y3R4LnBhcmFtcy5pb19vcHRfc2hpZnQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJtYXhfc2VjdG9yc1wiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMubWF4X3NlY3RvcnMgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJjaHVua19zZWN0b3JzXCIpKVxuK1x0XHRcdFx0Y3R4LnBhcmFtcy5jaHVua19zZWN0b3JzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuK1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwiZGV2X3NlY3RvcnNcIikpXG4rXHRcdFx0XHRjdHgucGFyYW1zLmRldl9zZWN0b3JzID0gc3RydG91bGwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcIm1heF96b25lX2FwcGVuZF9zZWN0b3JzXCIpKVxuK1x0XHRcdFx0Y3R4LnBhcmFtcy5tYXhfem9uZV9hcHBlbmRfc2VjdG9ycyA9XG4rXHRcdFx0XHRcdHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcIm1heF9vcGVuX3pvbmVzXCIpKVxuK1x0XHRcdFx0Y3R4LnBhcmFtcy5tYXhfb3Blbl96b25lcyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcIm1heF9hY3RpdmVfem9uZXNcIikpXG4rXHRcdFx0XHRjdHgucGFyYW1zLm1heF9hY3RpdmVfem9uZXMgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJz8nOlxuIFx0XHRcdC8qXG5AQCAtMjM3Nyw3ICsyNTM0LDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcdFx0b3BzLVx1MDAzZXBhcnNlX2NtZF9saW5lKFx1MDAyNmN0eCwgdGd0X2FyZ2MsIHRndF9hcmd2KTtcbiBcdH1cbiBcbi1cdGlmICghc3RyY21wKGNtZCwgXCJhZGRcIikpXG4rXHRpZiAoIXN0cmNtcChjbWQsIFwic2V0X3BhcmFtc1wiKSlcbitcdFx0cmV0ID0gY21kX2Rldl9zZXRfcGFyYW1zKFx1MDAyNmN0eCk7XG4rXHRlbHNlIGlmICghc3RyY21wKGNtZCwgXCJhZGRcIikpXG4gXHRcdHJldCA9IGNtZF9kZXZfYWRkKFx1MDAyNmN0eCk7XG4gXHRlbHNlIGlmICghc3RyY21wKGNtZCwgXCJyZWNvdmVyXCIpKSB7XG4gXHRcdGlmIChjdHguZGV2X2lkIFx1MDAzYyAwKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oXG5pbmRleCBlMjdjMTU0ZmM5MTA4Li5kOThmM2Q2MTJkODg4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL2t1YmxrLmhcbkBAIC02Myw2ICs2MywyMiBAQCBzdHJ1Y3QgZmF1bHRfaW5qZWN0X2N0eCB7XG4gXHRib29sIGRpZV9kdXJpbmdfZmV0Y2g7XG4gfTtcbiBcbitzdHJ1Y3QgcGFyYW1zX2N0eCB7XG4rXHRfX3UzMiB0eXBlcztcbitcbitcdF9fdTMyIGxvZ2ljYWxfYnNfc2hpZnQ7XG4rXHRfX3UzMiBwaHlzaWNhbF9ic19zaGlmdDtcbitcdF9fdTMyIGlvX21pbl9zaGlmdDtcbitcdF9fdTMyIGlvX29wdF9zaGlmdDtcbitcdF9fdTMyIG1heF9zZWN0b3JzO1xuK1x0X191MzIgY2h1bmtfc2VjdG9ycztcbitcdF9fdTY0IGRldl9zZWN0b3JzO1xuK1xuK1x0X191MzIgbWF4X29wZW5fem9uZXM7XG4rXHRfX3UzMiBtYXhfYWN0aXZlX3pvbmVzO1xuK1x0X191MzIgbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnM7XG4rfTtcbitcbiBzdHJ1Y3QgZGV2X2N0eCB7XG4gXHRjaGFyIHRndF90eXBlWzE2XTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtOTksNiArMTE1LDggQEAgc3RydWN0IGRldl9jdHgge1xuIFx0LyogZm9yICd1cGRhdGVfc2l6ZScgY29tbWFuZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBsb25nIHNpemU7XG4gXG4rXHRzdHJ1Y3QgcGFyYW1zX2N0eCBwYXJhbXM7XG4rXG4gXHRjaGFyICpodGxiX3BhdGg7XG4gXG4gXHR1bmlvbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3BhcmFtc18wMS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45MjhlNzJiMTAzNWQyXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcGFyYW1zXzAxLnNoXG5AQCAtMCwwICsxLDExNCBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKy4gXCIkKGNkIFwiJChkaXJuYW1lIFwiJDBcIilcIiBcdTAwMjZcdTAwMjYgcHdkKVwiL3Rlc3RfY29tbW9uLnNoXG4rXG4rRVJSX0NPREU9MFxuK1xuK3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MoKVxuK3tcbitcdGxvY2FsIG5hbWU9JDFcbitcbitcdHNoaWZ0XG4rXG4rXHRlY2hvIFwiJG5hbWVcIlxuK1x0aWYgISBcIiRVQkxLX1BST0dcIiBzZXRfcGFyYW1zIC1xIDEgLWQgMiBcIiRAXCI7IHRoZW5cbitcdFx0ZWNobyBcIiRuYW1lOiBTRVRfUEFSQU1TIGNoZWNrIGZhaWxlZFwiXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK31cbitcbitydW5fc2V0X3BhcmFtc19mYWlsdXJlKClcbit7XG4rXHRsb2NhbCBuYW1lPSQxXG4rXG4rXHRzaGlmdFxuK1xuK1x0ZWNobyBcIiRuYW1lXCJcbitcdGlmIFwiJFVCTEtfUFJPR1wiIHNldF9wYXJhbXMgLXEgMSAtZCAyIFwiJEBcIjsgdGhlblxuK1x0XHRlY2hvIFwiJG5hbWU6IFNFVF9QQVJBTVMgc3VjY2VlZGVkIHVuZXhwZWN0ZWRseVwiXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK31cbitcbitydW5fem9uZWRfc2V0X3BhcmFtc19zdWNjZXNzKClcbit7XG4rXHRsb2NhbCBuYW1lPSQxXG4rXG4rXHRzaGlmdFxuK1xuK1x0ZWNobyBcIiRuYW1lXCJcbitcdGlmICEgXCIkVUJMS19QUk9HXCIgc2V0X3BhcmFtcyAtcSAxIC1kIDIgLXUgLS16b25lZCBcIiRAXCI7IHRoZW5cbitcdFx0ZWNobyBcIiRuYW1lOiBTRVRfUEFSQU1TIGNoZWNrIGZhaWxlZFwiXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK31cbitcbitydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlKClcbit7XG4rXHRsb2NhbCBuYW1lPSQxXG4rXG4rXHRzaGlmdFxuK1xuK1x0ZWNobyBcIiRuYW1lXCJcbitcdGlmIFwiJFVCTEtfUFJPR1wiIHNldF9wYXJhbXMgLXEgMSAtZCAyIC11IC0tem9uZWQgXCIkQFwiOyB0aGVuXG4rXHRcdGVjaG8gXCIkbmFtZTogU0VUX1BBUkFNUyBzdWNjZWVkZWQgdW5leHBlY3RlZGx5XCJcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rfVxuK1xuK19wcmVwX3Rlc3QgXCJwYXJhbXNcIiBcIlNFVF9QQVJBTVMgdmFsaWRhdGlvblwiXG4rXG4raWYgWyAhIC1jIC9kZXYvdWJsay1jb250cm9sIF07IHRoZW5cbitcdF9jbGVhbnVwX3Rlc3RcbitcdF9zaG93X3Jlc3VsdCAkVElEICRVQkxLX1NLSVBfQ09ERVxuK2ZpXG4rXG4rcnVuX3NldF9wYXJhbXNfc3VjY2VzcyBcInZhbGlkIGJhc2ljIHBhcmFtc1wiIHx8XG4rXHRFUlJfQ09ERT0xXG4rXG4rcnVuX3NldF9wYXJhbXNfZmFpbHVyZSBcIm1pc3NpbmcgYmFzaWMgcGFyYW1zXCIgXFxcbitcdC0tcGFyYW1fdHlwZXMgbm9uZSB8fFxuK1x0RVJSX0NPREU9MVxuK1xuK3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUgXCJsb2dpY2FsIGJsb2NrIGxhcmdlciB0aGFuIHBoeXNpY2FsIGJsb2NrXCIgXFxcbitcdC0tbG9naWNhbF9ic19zaGlmdCAxMiAtLXBoeXNpY2FsX2JzX3NoaWZ0IDkgfHxcbitcdEVSUl9DT0RFPTFcbitcbitydW5fc2V0X3BhcmFtc19mYWlsdXJlIFwidG9vIGxhcmdlIG1heCBzZWN0b3JzXCIgXFxcbitcdC0tbWF4X3NlY3RvcnMgMjA0OSB8fFxuK1x0RVJSX0NPREU9MVxuK1xuK2lmIF9oYXZlX2ZlYXR1cmUgXCJaT05FRFwiIFx1MDAyNlx1MDAyNiBfaGF2ZV9mZWF0dXJlIFwiVVNFUl9DT1BZXCI7IHRoZW5cbitcdHJ1bl96b25lZF9zZXRfcGFyYW1zX3N1Y2Nlc3MgXCJ2YWxpZCB6b25lZCBwYXJhbXNcIiBcXFxuK1x0XHQtLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIHx8XG4rXHRcdEVSUl9DT0RFPTFcbitcbitcdHJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgXCJtaXNzaW5nIHpvbmVkIHBhcmFtc1wiIHx8XG4rXHRcdEVSUl9DT0RFPTFcbitcbitcdHJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgXCJub24tcG93ZXItb2YtMiB6b25lIHNpemVcIiBcXFxuK1x0XHQtLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFxcXG4rXHRcdC0tY2h1bmtfc2VjdG9ycyA5NiAtLWRldl9zZWN0b3JzICQoKDk2ICogMTYpKSB8fFxuK1x0XHRFUlJfQ09ERT0xXG4rXG4rXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwiemVybyBtYXggem9uZSBhcHBlbmRcIiBcXFxuK1x0XHQtLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFxcXG4rXHRcdC0tbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgMCB8fFxuK1x0XHRFUlJfQ09ERT0xXG4rXG4rXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwidG9vIG1hbnkgb3BlbiB6b25lc1wiIFxcXG4rXHRcdC0tcGFyYW1fdHlwZXMgYmFzaWMsem9uZWQgXFxcbitcdFx0LS1kZXZfc2VjdG9ycyAkKCgxMjggKiA0KSkgLS1tYXhfb3Blbl96b25lcyA1IHx8XG4rXHRcdEVSUl9DT0RFPTFcbitcbitcdHJ1bl96b25lZF9zZXRfcGFyYW1zX2ZhaWx1cmUgXCJ0b28gbWFueSBhY3RpdmUgem9uZXNcIiBcXFxuK1x0XHQtLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFxcXG4rXHRcdC0tZGV2X3NlY3RvcnMgJCgoMTI4ICogNCkpIC0tbWF4X2FjdGl2ZV96b25lcyA1IHx8XG4rXHRcdEVSUl9DT0RFPTFcbitlbHNlXG4rXHRlY2hvIFwiem9uZWQgdWJsayBmZWF0dXJlIHVuYXZhaWxhYmxlLCBza2lwIHpvbmVkIFNFVF9QQVJBTVMgY2FzZXNcIlxuK2ZpXG4rXG4rX2NsZWFudXBfdGVzdFxuK19zaG93X3Jlc3VsdCAkVElEICRFUlJfQ09ERVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzE6MTUuOTAxNjU1NjY3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQyMjYyMzMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSB1YmxrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0IHR3ZWFrcyB0aGUgYHVibGtfZHJ2LmNgIGZpbGUgYW5kIHNvbWUgYXNzb2NpYXRlZCBzZWxmLXRlc3RzLiBUaGUgY29yZSBjaGFuZ2UgaXMgYSBzaW5nbGUtbGluZSBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBgdWJsa192YWxpZGF0ZV9wYXJhbXNgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHRpZ2h0ZW5pbmcgdXAgYSB2YWxpZGF0aW9uIGNoZWNrLiAgU3BlY2lmaWNhbGx5LCBpbnN0ZWFkIG9mIGp1c3QgbWFraW5nIHN1cmUgYHAtXHUwMDNlY2h1bmtfc2VjdG9yc2AgaXMgKm5vdCogemVybyB3aGVuIGRlYWxpbmcgd2l0aCB6b25lZCBkZXZpY2VzLCB3ZSdyZSBub3cgZW5mb3JjaW5nIHRoYXQgaXQgYmUgYSBwb3dlciBvZiAyLiAgU21hcnQ7IGl0IGhlbHBzIHdpdGggYWxpZ25tZW50IGlzc3VlcywgcHJvYmFibHkuXG5cblRoZSBxdWVzdGlvbiBub3cgaXMsIGlzIHRoaXMgc29tZXRoaW5nIHdlIHNob3VsZCBjb25zaWRlciBmdXp6aW5nPyBMZXQncyBicmVhayBpdCBkb3duLiBUaGUgY2hhbmdlIGlzIGluIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHVibGsgZHJpdmVyLiAgVWJsayBpcyBhIHVzZXItc3BhY2UgYmxvY2sgZGV2aWNlIGRyaXZlciwgd2hpY2ggbWFrZXMgaXQgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB3aGljaCBpcyBnb29kIGZvciB1cy4gVGhlIGNoYW5nZSBpdHNlbGYgaXMgYSBmYWlybHkgbWlub3IgZnVuY3Rpb25hbCBmaXgsIGEgYml0IGxpa2UgZW5zdXJpbmcgdGhhdCB3ZSBhcmUgZ3VhcmRpbmcgYWdhaW5zdCBhIHBhcnRpY3VsYXIgYnVnIHdoZXJlIGEgbm9uLXBvd2VyLW9mLTIgYGNodW5rX3NlY3RvcnNgIHZhbHVlIGNvdWxkIGJlIHBhc3NlZC4gIFRoYXQgY291bGQgZGVmaW5pdGVseSBsZWFkIHRvIHByb2JsZW1zIGxhdGVyIG9uLlxuXG5TbywgeWVhaCwgaXQgc2VlbXMgbGlrZSB0aGlzIGlzIHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgcG90ZW50aWFsLiBXZSB3YW50IHRvIGJlIHN1cmUgdGhhdCB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIG9yIGV4cG9zZSBhbnkgZXhpc3Rpbmcgb25lcy4gSXQncyBhIGtlcm5lbCBmdW5jdGlvbmFsIGNoYW5nZSwgc28gaXQgaXMgcHJvYmFibHkgd29ydGggb3VyIHRpbWUuIExldCdzIGRlbHZlIGRlZXBlciBpbnRvIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AgaXRzZWxmIGFuZCBzZWUgd2hhdCBraW5kIG9mIGlucHV0cyBpdCdzIGV4cG9zZWQgdG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMToyMi4zMjQyODMwNDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MDExNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfdmFsaWRhdGVfcGFyYW1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9OTM0PXN0YXRpYyBlbnVtIGJsa19pbnRlZ3JpdHlfY2hlY2tzdW0gdWJsa19pbnRlZ3JpdHlfY3N1bV90eXBlKHU4IGNzdW1fdHlwZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy05NTAtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjk1MTpzdGF0aWMgaW50IHVibGtfdmFsaWRhdGVfcGFyYW1zKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTk1Mi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTA0Mj1zdGF0aWMgaW50IHVibGtfY3RybF9zZXRfcGFyYW1zKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTA3NC1cXHRcXHR1Yi1cXHUwMDNlcGFyYW1zLnR5cGVzIFxcdTAwMjY9IFVCTEtfUEFSQU1fVFlQRV9BTEw7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjUwNzU6XFx0XFx0cmV0ID0gdWJsa192YWxpZGF0ZV9wYXJhbXModWIpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MDc2LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjIyLjQ1MjI5OTA2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODgyMzM5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdWJsa19jdHJsX3NldF9wYXJhbXNgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBjb2RlIHNob3dzIHRoYXQgYHVibGtfY3RybF9zZXRfcGFyYW1zYCBjYWxscyBgdWJsa192YWxpZGF0ZV9wYXJhbXNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBlbnN1cmluZyBwYXJhbWV0ZXIgaW50ZWdyaXR5LiBOb3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHVibGtfY3RybF9zZXRfcGFyYW1zYCBpdHNlbGYgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjI1Ljc0MDUzNTMwNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE3MDkyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19jdHJsX3NldF9wYXJhbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01MDEyPXN0YXRpYyBpbnQgdWJsa19jdHJsX2dldF9wYXJhbXMoc3RydWN0IHVibGtfZGV2aWNlICp1YixcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MDQxLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1MDQyOnN0YXRpYyBpbnQgdWJsa19jdHJsX3NldF9wYXJhbXMoc3RydWN0IHVibGtfZGV2aWNlICp1YixcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTA0My1cXHRcXHRjb25zdCBzdHJ1Y3QgdWJsa3Nydl9jdHJsX2NtZCAqaGVhZGVyKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU3NjM9c3RhdGljIGludCB1YmxrX2N0cmxfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODM2LVxcdGNhc2UgVUJMS19DTURfU0VUX1BBUkFNUzpcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTgzNzpcXHRcXHRyZXQgPSB1YmxrX2N0cmxfc2V0X3BhcmFtcyh1YiwgXFx1MDAyNmhlYWRlcik7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4MzgtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjI1Ljg0MjI0OTI5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDY4NjYxNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgVWJsayBDb250cm9sIFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBVYmxrIGNvbnRyb2wgcGF0aCwgYW5kIG15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gZWl0aGVyIGB1YmxrX2N0cmxfdXJpbmdfY21kYCBvciBgdWJsa19jdHJsX3NldF9wYXJhbXNgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnRzLCBzbyBsZXQncyBzdGFydCB3aXRoIGB1YmxrX2N0cmxfdXJpbmdfY21kYC4gSSdsbCB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGNvbW1hbmRzIGFyZSBhY3R1YWxseSBwcm9jZXNzZWQgd2hlbiB0aGV5IGNvbWUgaW4gdmlhIHRoZSBVcmluZyBpbnRlcmZhY2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgY29yZSBpbnRlcmFjdGlvbiBtb2RlbC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IGZyb20gdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM0MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjI4Ljg4OTExNzY3M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM4ODg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1YmxrX2N0cmxfdXJpbmdfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTYxNz1zdGF0aWMgYm9vbCB1YmxrX3RyeV9idWZfbWF0Y2goc3RydWN0IHVibGtfZGV2aWNlICp1YixcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NjcwLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NjcxOnN0YXRpYyBpbnQgdWJsa19jdHJsX3VyaW5nX2NtZF9wZXJtaXNzaW9uKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU2NzItXFx0XFx0dTMyIGNtZF9vcCwgc3RydWN0IHVibGtzcnZfY3RybF9jbWQgKmhlYWRlcilcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzQ5LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NzUwOnN0YXRpYyBib29sIHVibGtfY3RybF91cmluZ19jbWRfbWF5X3NsZWVwKHUzMiBjbWRfb3ApXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NTEte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NjItXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU3NjM6c3RhdGljIGludCB1YmxrX2N0cmxfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc2NC1cXHRcXHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc3My1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTc3NDpcXHRpZiAodWJsa19jdHJsX3VyaW5nX2NtZF9tYXlfc2xlZXAoY21kX29wKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01Nzc1LVxcdCAgICBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0spXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTgwMy1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTgwNDpcXHRcXHRyZXQgPSB1YmxrX2N0cmxfdXJpbmdfY21kX3Blcm1pc3Npb24odWIsIGNtZF9vcCwgXFx1MDAyNmhlYWRlcik7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4MDUtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01ODc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY3RsX2ZvcHMgPSB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4NzUtXFx0Lm9wZW5cXHRcXHQ9IG5vbnNlZWthYmxlX29wZW4sXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU4NzY6XFx0LnVyaW5nX2NtZCAgICAgID0gdWJsa19jdHJsX3VyaW5nX2NtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTg3Ny1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMToyOC45NjI1MTI0NjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjE3OTMyNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHVibGtfY3RybF91cmluZ19jbWRgIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHVibGtfY3RybF91cmluZ19jbWRgIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgaG9vay4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGdvaW5nIHRvIGJlIHJlcXVpcmVkIGF0IHRoaXMgcG9pbnQ/IFdoYXQgbGV2ZXJzIGRvIEkgbmVlZCB0byBwdWxsIHRvIGdldCB0aGUgc3lzdGVtIGJlaGF2aW5nIHRoZSB3YXkgSSBuZWVkIGl0IHRvPyBXaGF0IHBhcmFtZXRlcnMgYW0gSSBnb2luZyB0byBleHBvc2UgdGhyb3VnaCB0aGlzIGVudHJ5PyBBcmUgdGhlcmUgc3BlY2lmaWMga25vYnMgcmVsYXRlZCB0byBob3cgSSBoYW5kbGUgdGhlIGNvbW1hbmRzIGhlcmUsIG9yIGlzIHRoaXMgbW9yZSBhYm91dCBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCBiZWZvcmUgdGhlIGNvbW1hbmRzIGJlZ2luIHByb2Nlc3Npbmc/IEkgbmVlZCB0byBtYXAgb3V0IHRoZSBpbXBvcnRhbnQgYXNwZWN0cyB0aGF0IEkgd2FudCB0byBjb25maWd1cmUgaGVyZS4gTGV0J3Mgc3RhcnQgbWFwcGluZyBvdXQgdGhlIHZhcmlvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMTozMy4xODA0NDczMzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0ODg2MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1VCTEtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0zMTU9Y29uZmlnIEJMS19ERVZfUkJEXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI3LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozMjg6Y29uZmlnIEJMS19ERVZfVUJMS1xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjktXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjMzLjI1NTMzODcwN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjEwOTUzMDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgQkxLX0RFVl9VQkxLYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBCTEtfREVWX1VCTEtgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgem9vbSBpbiBvbiB0aGUgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGlzIHRoaXMgdGhpbmcgdGllZCB0bz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJpcHBsZSBlZmZlY3Qgb2YgYW55IGNoYW5nZXMgaGVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgY29yZSBibG9jayBsYXllciBpbnRlcmZhY2VzPyBEZXZpY2UgbWFwcGVyIGludGVncmF0aW9uPyBBbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIHN0b3JhZ2UgZHJpdmVycz8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBwcm9ibGVtcyBsaXZlLiBHb3R0YSBtYWtlIHN1cmUgSSBmdWxseSBncmFzcCB0aGUgZGVwZW5kZW5jaWVzIHRvIGFzc2VzcyB0aGUgc2NvcGUgb2YgdGhpcyB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDYyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzE6NDEuODY2Mjk0MDE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjg6XFx0Y29uZmlnIEJMS19ERVZfVUJMS1xcbiAzMjk6XFx0XFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcXFwiXFxuIDMzMDpcXHRcXHRzZWxlY3QgSU9fVVJJTkdcXG4gMzMxOlxcdFxcdGhlbHBcXG4gMzMyOlxcdFxcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xcbiAzMzM6XFx0XFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXFxuIDMzNDpcXHRcXHQgIGRlZmluaXRpb24gaXNuJ3QgZmluYWxpemVkIHlldCwgYW5kIG1pZ2h0IGNoYW5nZSBhY2NvcmRpbmcgdG8gZnV0dXJlXFxuIDMzNTpcXHRcXHQgIHJlcXVpcmVtZW50LCBzbyBtYXJrIGlzIGFzIGV4cGVyaW1lbnRhbCBub3cuXFxuIDMzNjpcXHRcXG4gMzM3OlxcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xcbiAzMzg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGVcXFwiXFxuIDMzOTpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfVUJMS1xcbiAzNDA6XFx0XFx0ZGVmYXVsdCB5XFxuIDM0MTpcXHRcXHRoZWxwXFxuIDM0MjpcXHRcXHQgIHVibGsgZHJpdmVyIHN0YXJ0ZWQgdG8gdGFrZSBwbGFpbiBjb21tYW5kIGVuY29kaW5nLCB3aGljaCB0dXJucyBvdXRcXG4gMzQzOlxcdFxcdCAgb25lIGJhZCB3YXkuIFRoZSB0cmFkaXRpb25hbCBpb2N0bCBjb21tYW5kIG9wY29kZSBlbmNvZGVzIG1vcmVcXG4gMzQ0OlxcdFxcdCAgaW5mbyBhbmQgYmFzaWNhbGx5IGRlZmluZXMgZWFjaCBjb2RlIHVuaXF1ZWx5LCBzbyBvcGNvZGUgY29uZmxpY3RcXG4gMzQ1OlxcdFxcdCAgaXMgYXZvaWRlZCwgYW5kIGRyaXZlciBjYW4gaGFuZGxlIHdyb25nIGNvbW1hbmQgZWFzaWx5LCBtZWFudGltZSBpdFxcbiAzNDY6XFx0XFx0ICBtYXkgaGVscCBzZWN1cml0eSBzdWJzeXN0ZW0gdG8gYXVkaXQgaW9fdXJpbmcgY29tbWFuZC5cXG4gMzQ3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMTo0MS44NjYzNTkwNzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMDAxNjgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIHVibGsgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBhbmQgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUgaXMgYEJMS19ERVZfVUJMS2AuIFJpZ2h0LCB0aGF0J3MgdGhlIGNvcmUuIEJ1dCB0aGUgY2hhbmdlIGFsc28gbW9kaWZpZXMgYHVibGtfZGV2X2lzX3pvbmVkKHViKWAuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gV2UgbmVlZCB0byBjb25zaWRlcjogaXMgYEJMS19ERVZfWk9ORURgIGFsc28gaW52b2x2ZWQgb3IgcG90ZW50aWFsbHkgbmVlZGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcyBjaGFuZ2U/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBjb25maWd1cmF0aW9ucyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBvcGVyYXRpbmcgYXMgaW50ZW5kZWQgYW5kIHRoYXQgbm8gYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgdGhhdCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgYSBiaXQgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUncyBhbiBpbXBhY3Qgb24gem9uZWQgYmxvY2sgZGV2aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk2OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzE6NDUuOTk2MzgwMTIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU4OTcyMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfZGV2X2lzX3pvbmVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDU1PXN0YXRpYyBpbmxpbmUgYm9vbCB1YmxrX2Rldl9zdXBwb3J0X3VzZXJfY29weShjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ1OS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDYwOnN0YXRpYyBpbmxpbmUgYm9vbCB1YmxrX2Rldl9pc196b25lZChjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00NjEte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU3Mj1zdGF0aWMgaW50IHVibGtfZGV2X3BhcmFtX3pvbmVkX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc2LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1Nzc6XFx0aWYgKCF1YmxrX2Rldl9pc196b25lZCh1YikpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz05NTE9c3RhdGljIGludCB1YmxrX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTk4Mi1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6OTgzOlxcdFxcdGlmICh1YmxrX2Rldl9pc196b25lZCh1YikgXFx1MDAyNlxcdTAwMjYgIWlzX3Bvd2VyX29mXzIocC1cXHUwMDNlY2h1bmtfc2VjdG9ycykpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTk4NC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xMDA0LVxcdFxcdHJldHVybiB1YmxrX2Rldl9wYXJhbV96b25lZF92YWxpZGF0ZSh1Yik7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjEwMDU6XFx0ZWxzZSBpZiAodWJsa19kZXZfaXNfem9uZWQodWIpKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xMDA2LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM4NTI9c3RhdGljIGludCB1YmxrX2NoZWNrX2JhdGNoX2NtZChjb25zdCBzdHJ1Y3QgdWJsa19iYXRjaF9pb19kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM4NjItXFx0aWYgKCh1Yy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBVQkxLX0JBVENIX0ZfSEFTX1pPTkVfTEJBKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozODYzOlxcdFxcdFxcdCF1YmxrX2Rldl9pc196b25lZChkYXRhLVxcdTAwM2V1YikpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM4NjQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDQ0Nz1zdGF0aWMgaW50IHVibGtfY3RybF9zdGFydF9kZXYoc3RydWN0IHVibGtfZGV2aWNlICp1YixcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00NTcwLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0NTcxOlxcdGlmICh1YmxrX2Rldl9pc196b25lZCh1YikpIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDU3Mi1cXHRcXHRyZXQgPSB1YmxrX3JldmFsaWRhdGVfZGlza196b25lcyh1Yik7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDY1Nz1zdGF0aWMgaW50IHVibGtfY3RybF9hZGRfZGV2KGNvbnN0IHN0cnVjdCB1Ymxrc3J2X2N0cmxfY21kICpoZWFkZXIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDgyNS1cXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDgyNjpcXHRpZiAodWJsa19kZXZfaXNfem9uZWQodWIpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ4MjctXFx0ICAgICghSVNfRU5BQkxFRChDT05GSUdfQkxLX0RFVl9aT05FRCkgfHwgISh1Yi1cXHUwMDNlZGV2X2luZm8uZmxhZ3MgXFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMTo0Ny4zNTUzNTg2NzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwNjc3MjkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB1YmxrIFpvbmVkIEJsb2NrIERldmljZSBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHNvIEkgc2VlIGBDT05GSUdfQkxLX0RFVl9aT05FRGAgaXMgYmVpbmcgY2hlY2tlZCB3aXRoaW4gdGhlIGB1YmxrX2N0cmxfYWRkX2RldmAgZnVuY3Rpb24uIFRoYXQncyBnb29kLCB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGZvciBoYW5kbGluZyB6b25lZCBibG9jayBkZXZpY2VzLiBNeSBuZXh0IHN0ZXAgaGVyZSBpcyBkZWZpbml0ZWx5IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoZWNrLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgd2hlbiBhIHpvbmVkIGJsb2NrIGRldmljZSBpcyBkZXRlY3RlZC5cblxuVGhlIGltcG9ydGFudCBmdW5jdGlvbiB0byBmb2N1cyBvbiBub3cgaXMgY2xlYXJseSBgdWJsa19kZXZfaXNfem9uZWRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhhdCBpcyBpbXBsZW1lbnRlZCBhbmQgd2hhdCB0aGUgZGVjaXNpb24gdHJlZSBpbiB0aGF0IGZ1bmN0aW9uIGxvb2tzIGxpa2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzIHRvIGFjdHVhbGx5IGRldGVybWluZSBpZiB0aGUgZGV2aWNlIGlzIHpvbmVkIG9yIG5vdCBhbmQgd2hhdCBmbGFncyBhcmUgc2V0IGJhc2VkIG9uIHRoYXQgZGV0ZXJtaW5hdGlvbi4gSSdtIGd1ZXNzaW5nIGl0IGxvb2tzIGF0IGEgZGV2aWNlJ3MgY2hhcmFjdGVyaXN0aWNzLCBtYXliZSBpdHMgZ2VvbWV0cnkgb3Igc29tZSBzcGVjaWZpYyBmbGFncyBpbiB0aGUgZGV2aWNlJ3MgaW5mb3JtYXRpb24gc3RydWN0dXJlLiBUaGUgY29uZmlndXJhdGlvbiBjaGVjayBoZXJlIHN1Z2dlc3RzIGB1YmxrX2N0cmxfYWRkX2RldmAgaXMgZG9pbmcgc29tZSBzZXR1cCBvciBjb25kaXRpb25hbCBpbml0aWFsaXphdGlvbiB0aGF0IHJlbGllcyBvbiB0aGUgem9uZWQvbm9uLXpvbmVkIGRpc3RpbmN0aW9uLiBOb3csIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGB1YmxrX2Rldl9pc196b25lZGAgYW5kIHNlZSBob3cgaXQncyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA0NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMxOjUyLjM2MjEzNDUzNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgdWJsa19kZXZfaXNfem9uZWQoY29uc3Qgc3RydWN0IHVibGtfZGV2aWNlICp1YilcXG4gNDYxOlxcdHtcXG4gNDYyOlxcdFxcdHJldHVybiB1Yi1cXHUwMDNlZGV2X2luZm8uZmxhZ3MgXFx1MDAyNiBVQkxLX0ZfWk9ORUQ7XFxuIDQ2MzpcXHR9XFxuIDQ2NDpcXHRcXG4gNDY1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB1YmxrX3F1ZXVlX2lzX3pvbmVkKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEpXFxuIDQ2NjpcXHR7XFxuIDQ2NzpcXHRcXHRyZXR1cm4gdWJxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFVCTEtfRl9aT05FRDtcXG4gNDY4OlxcdH1cXG4gNDY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMTo1Mi4zNjIzMTg0OTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMjgzMTUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqWm9uZWQgQmxvY2sgRGV2aWNlIFRlc3RpbmcgU3RyYXRlZ3kqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBpc3N1ZSBoZXJlLCB0aGUgdGhpbmcgSSdtIGltbWVkaWF0ZWx5IGZvY3VzZWQgb24sIGlzIGVuc3VyaW5nIGEgcm9idXN0IHRlc3Qgc3VpdGUgZm9yIHRoaXMgem9uZWQgYmxvY2sgZGV2aWNlIGZ1bmN0aW9uYWxpdHkuIEl0J3MgYmVjb21pbmcgY2xlYXIgdGhhdCBhIHRydWx5IGNvbXByZWhlbnNpdmUgZXZhbHVhdGlvbiBpcyBnb2luZyB0byBoaW5nZSBvbiBwcm9wZXIgaGFuZGxpbmcgb2YgYEJMS19ERVZfWk9ORURgLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYW55IHRlc3RpbmcgSSdtIGRvaW5nIHRha2VzIHRoaXMgaW50byBhY2NvdW50LiBUaGlzIG1lYW5zIGNvbmZpcm1pbmcgYEJMS19ERVZfWk9ORURgIGlzIGFwcHJvcHJpYXRlbHkgZXhwb3NlZCB3aXRoaW4gdGhlIHN5c3RlbSdzIGNvbmZpZ3VyYXRpb24uIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IHZlcmlmeWluZyBpdHMgcHJlc2VuY2UgYXMgYSBjb25maWd1cmFibGUgb3B0aW9uLiBUaGlzIGlzIHRoZSBseW5jaHBpbiBJIG5lZWQgdG8gc2VjdXJlIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU2OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzE6NTYuNDk1MTUyOTEyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjc0OTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9aT05FRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Nzc9Y29uZmlnIEJMS19ERVZfV1JJVEVfTU9VTlRFRFxcbi0tXFxuYmxvY2svS2NvbmZpZy05Ni1cXG5ibG9jay9LY29uZmlnOjk3OmNvbmZpZyBCTEtfREVWX1pPTkVEXFxuYmxvY2svS2NvbmZpZy05OC1cXHRib29sIFxcXCJab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzE6NTYuNTY3OTA2MzUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0ODgyMDA5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFVibGsgRHJpdmVyIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBCTEtfREVWX1pPTkVEYCBjb25maWcsIHJpZ2h0PyBBbmQgYWxvbmdzaWRlIHRoYXQgd2UndmUgZ290IGBCTEtfREVWX1VCTEtgLiBSaWdodCwgZ290IGl0LiBNeSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgYXJlIGdvaW5nIHRvIGJlIGB1YmxrX2N0cmxfc2V0X3BhcmFtc2AgYW5kIGB1YmxrX2N0cmxfdXJpbmdfY21kYC5cblxuRmlyc3QsIGxldCBtZSBjaGVjayBpZiBgdWJsa19jdHJsX3NldF9wYXJhbXNgIGlzIHN0YXRpYy4gWWVzLCBpdCBpcy4gSG1tLCB3YWl0IGEgc2Vjb25kLCB0aGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gcHJlZmVyICpub24tc3RhdGljLCBub24taW5saW5lZCogZW50cnkgcG9pbnRzLiBJbnRlcm5hbCBzdGF0aWMgaGVscGVycywgdGhlIHByb21wdCBzdGF0ZXMsIGdldCBpbmxpbmVkIGFuZCBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuXG5cblJpZ2h0LCBzbyBgdWJsa19jdHJsX3NldF9wYXJhbXNgIGJlaW5nIHN0YXRpYyBpcyBhIHBvdGVudGlhbCBpc3N1ZS4gTGV0J3Mgc2VlLi4uIGV2ZW4gdGhvdWdoIGl0ICppcyogc3RhdGljLCBpdCdzIGNhbGxlZCBmcm9tIHdpdGhpbiBgdWJsa19jdHJsX3VyaW5nX2NtZGAsIHdoaWNoIGlzIGEgc3dpdGNoIGNhc2UsIHNvIGl0ICptaWdodCogbm90IGJlIGlubGluZWQuIEJ1dCwgYHVibGtfY3RybF91cmluZ19jbWRgIGl0c2VsZiBpcyBkZWZpbml0ZWx5IGFuIGVudHJ5IHBvaW50LiBUaGF0J3MgZ29vZC5cblxuU28sIGxldCdzIGxvb2sgYXQgYHVibGtfY3RybF91cmluZ19jbWRgLiBPa2F5LCBpdCdzIGFsc28gc3RhdGljLCBidXQgaXQncyBhc3NpZ25lZCB0byBgdWJsa19jdGxfZm9wcy51cmluZ19jbWRgLiBUaGF0IGFzc2lnbm1lbnQgaW1wbGllcyBpdCBoYXMgYSBkZWZpbmVkIHN5bWJvbCwgcmVnYXJkbGVzcyBvZiB0aGUgYHN0YXRpY2AgZGVjbGFyYXRpb24uIE5vdywgSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUncyBhbnkgKm5vbiotc3RhdGljIGZ1bmN0aW9uIHRoYXQgSSBjYW4gcG9pbnQgdG8uXG5cbkxldCdzIGRpZyBpbnRvIGB1YmxrX2N0cmxfdXJpbmdfY21kYCBhZ2Fpbiwgbm93IGluIGBkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgaXMgYW4gYXBwcm9wcmlhdGUgZW50cnkgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODcyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMyOjA0LjA1NjEwOTg0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEwNzM5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19jdHJsX3VyaW5nX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU2MTc9c3RhdGljIGJvb2wgdWJsa190cnlfYnVmX21hdGNoKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTY3MC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTY3MTpzdGF0aWMgaW50IHVibGtfY3RybF91cmluZ19jbWRfcGVybWlzc2lvbihzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NjcyLVxcdFxcdHUzMiBjbWRfb3AsIHN0cnVjdCB1Ymxrc3J2X2N0cmxfY21kICpoZWFkZXIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc0OS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTc1MDpzdGF0aWMgYm9vbCB1YmxrX2N0cmxfdXJpbmdfY21kX21heV9zbGVlcCh1MzIgY21kX29wKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzUxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NzYyLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1NzYzOnN0YXRpYyBpbnQgdWJsa19jdHJsX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NjQtXFx0XFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU3NzMtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU3NzQ6XFx0aWYgKHVibGtfY3RybF91cmluZ19jbWRfbWF5X3NsZWVwKGNtZF9vcCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTc3NS1cXHQgICAgaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX05PTkJMT0NLKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4MDMtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU4MDQ6XFx0XFx0cmV0ID0gdWJsa19jdHJsX3VyaW5nX2NtZF9wZXJtaXNzaW9uKHViLCBjbWRfb3AsIFxcdTAwMjZoZWFkZXIpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODA1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTg3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2N0bF9mb3BzID0ge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01ODc1LVxcdC5vcGVuXFx0XFx0PSBub25zZWVrYWJsZV9vcGVuLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1ODc2OlxcdC51cmluZ19jbWQgICAgICA9IHVibGtfY3RybF91cmluZ19jbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU4NzctXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzI6MDQuMTQ3MTg4ODgyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzQ4OTQwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgdWJsayBEcml2ZXIgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gYHVibGtfY3RybF91cmluZ19jbWRgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgYSBmdW5jdGlvbiB0aGF0IHNlZW1zIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IGZyb20gdGhlIHVzZXJzcGFjZSByaW5nIGJ1ZmZlci4gVGhhdCdzIGEgYml0IHVudXN1YWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgZHJpdmVyIGFyZSBhbHNvIGRlZmluZWQgYXMgc3RhdGljLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYWNjZXNzIGFuZCBwb3RlbnRpYWwgdmlzaWJpbGl0eSBvZiBkaWZmZXJlbnQgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gbG9vayB0aHJvdWdoIGB1YmxrX2Rydi5jYCBub3cgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCB3b3VsZCBpbmRpY2F0ZSBob3cgdXNlcnNwYWNlIGNvbW11bmljYXRlcyB3aXRoIHRoZSBibG9jayBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTU0LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzI6MDguNjIyMDg2MDA1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY5NjUyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogdWJsa19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xMTMtLyogdWJsayBiYXRjaCBmZXRjaCB1cmluZ19jbWQgKi9cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTE0OnN0cnVjdCB1YmxrX2JhdGNoX2ZldGNoX2NtZCB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTExNS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTE5LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxMjA6c3RydWN0IHVibGtfdXJpbmdfY21kX3BkdSB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTEyMS1cXHQvKlxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE0NS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTQ2OnN0cnVjdCB1YmxrX2JhdGNoX2lvX2RhdGEge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNDctXFx0c3RydWN0IHVibGtfZGV2aWNlICp1YjtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMDMtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIwNDp1bmlvbiB1YmxrX2lvX2J1ZiB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIwNS1cXHRfX3U2NFxcdGFkZHI7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjA4LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMDk6c3RydWN0IHVibGtfaW8ge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTAtXFx0dW5pb24gdWJsa19pb19idWYgYnVmO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI0MS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjQyOnN0cnVjdCB1YmxrX3F1ZXVlIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjQzLVxcdHUxNiBxX2lkO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMwNC0vKiBNYXBsZSB0cmVlIHZhbHVlOiBtYXBzIGEgUEZOIHJhbmdlIHRvIGJ1ZmZlciBsb2NhdGlvbiAqL1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMDU6c3RydWN0IHVibGtfYnVmX3JhbmdlIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzA2LVxcdHVuc2lnbmVkIHNob3J0IGJ1Zl9pbmRleDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMTAtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMxMTpzdHJ1Y3QgdWJsa19kZXZpY2Uge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMTItXFx0c3RydWN0IGdlbmRpc2tcXHRcXHQqdWJfZGlzaztcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTEtLyogaGVhZGVyIG9mIHVibGtfcGFyYW1zICovXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1MjpzdHJ1Y3QgdWJsa19wYXJhbXNfaGVhZGVyIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzLVxcdF9fdTMyXFx0bGVuO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTUwNj1zdGF0aWMgdm9pZCB1YmxrX2luaXRfaW9kKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTMyLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1MzM6c3RydWN0IHVibGtfem9uZWRfcmVwb3J0X2Rlc2Mge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MzQtXFx0X191NjQgc2VjdG9yO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM1NzE9dWJsa19iYXRjaF9hdXRvX2J1Zl9yZWcoY29uc3Qgc3RydWN0IHVibGtfYmF0Y2hfaW8gKnVjLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1ODctI2RlZmluZSBVQkxLX0NNRF9CQVRDSF9UTVBfQlVGX1NaICAoNDggKiAxMClcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzU4ODpzdHJ1Y3QgdWJsa19iYXRjaF9pb19pdGVyIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU4OS1cXHR2b2lkIF9fdXNlciAqdWFkZHI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMyOjA4Ljc0OTA1NTUxNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTE0NTI5Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSByb2xlIG9mIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgdWJsa19kcnYuY2AncyBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgYHVibGtfZHJ2LmNgIGNvZGUsIG15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgbW9zdCBvZiB0aGUgZnVuY3Rpb25zIGFyZSBsaWtlbHkgZGVjbGFyZWQgc3RhdGljLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGRyaXZlciBtb2R1bGVzLCBlc3BlY2lhbGx5IHRoZSBsb3dlci1sZXZlbCBjb21wb25lbnRzLiBUaGlzIGRlc2lnbiBrZWVwcyB0aG9zZSBmdW5jdGlvbnMgaW50ZXJuYWwgdG8gdGhlIGZpbGUsIHByb21vdGluZyBtb2R1bGFyaXR5IGFuZCBwcmV2ZW50aW5nIGFjY2lkZW50YWwgbmFtaW5nIGNvbGxpc2lvbnMuIFRoZSBrZXkgaW50ZXJlc3QgcmlnaHQgbm93IGxpZXMgaW4gdGhlIGVudHJ5IHBvaW50cy4gU28sIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTGV0IG1lIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCBleGl0IHJvdXRpbmVzLiBUaGF0IHdvdWxkIGludm9sdmUgc2VhcmNoaW5nIGZvciBgbW9kdWxlX2luaXRgIChvciwgaW4gb2xkZXIga2VybmVscywgbWF5YmUganVzdCBhbiBgaW5pdGAgZnVuY3Rpb24pIGFuZCBgbW9kdWxlX2V4aXRgIG1hY3JvcyBvciB0aGVpciBlcXVpdmFsZW50LiBUaGF0IHdpbGwgYmUgbXkgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGFuIGlkZWEgb2YgaG93IHRoaXMgbW9kdWxlIGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsLiBJJ2xsIGZvY3VzIG9uIHRoZXNlIGluaXRpYWwgZW50cnkgYW5kIGV4aXQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI3MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMyOjEyLjg2MzU4NzE5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMzMTgwNzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgdWJsa19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMjoxMi45NTY5MTE5NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU5NDQ5NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGp1bXBpbmcgaW50byB0aGlzIGNvZGUgYW5kLCBhcyBhbHdheXMsIHRoZSBmaXJzdCBwbGFjZSBJIHdhbnQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaXMgaG93IHRoZSBvYmplY3RzIGFyZSBjb25zdHJ1Y3RlZC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYF9faW5pdF9fYCBtZXRob2RzLiBUaGV5IGFyZSB0aGUgYmVkcm9jayBvZiBvYmplY3QgaW5pdGlhbGl6YXRpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNsYXNzIGFuZCBpdHMgcG90ZW50aWFsIHN1cGVyY2xhc3NlcyBhcmUgYmVpbmcgc2V0IHVwLiBXaGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgYWNjZXB0ZWQ/IFdoYXQgZGF0YSBpcyBiZWluZyBpbml0aWFsaXplZCBhbmQgaG93PyBBbnkgc2lkZSBlZmZlY3RzIEkgbmVlZCB0byB3YXRjaCBvdXQgZm9yIGluIHRoZSBwcm9jZXNzIG9mIGNvbnN0cnVjdGlvbj8gV2hhdCBjYWxscyBhcmUgbWFkZSB0byBvdGhlciBmdW5jdGlvbnMgZHVyaW5nIGluaXRpYWxpemF0aW9uPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG90ZW50aWFsIGlzc3VlcywgbGlrZSBtdXRhYmxlIGRlZmF1bHQgYXJndW1lbnRzPyBMZXQncyB0cmFjZSBpdCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTU0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzI6MTcuNDE2Mzc0NzMzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzkyNTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01ODgxPXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB1YmxrX21pc2MgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTg4Ni1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTg4NzpzdGF0aWMgaW50IF9faW5pdCB1YmxrX2luaXQodm9pZClcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTg4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMyOjE3LjQ3MDMwNjU2MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzY3Njc3Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHVibGsgQVBJIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIHRhc2tlZCB3aXRoIGlkZW50aWZ5aW5nIHRoZSBiZXN0IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyB0aGUgdWJsayBkcml2ZXIuIFRoZSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGB1YmxrX2N0cmxfdXJpbmdfY21kYCBhbmQgYHVibGtfY3RybF9zZXRfcGFyYW1zYCwgYXNzdW1pbmcgdGhhdCwgZXZlbiBpZiB0aGV5IGFyZSBzdGF0aWMsIHRoZSBmdXp6ZXIgY291bGQgc3RpbGwgbWFrZSB1c2Ugb2YgdGhlaXIgc3ltYm9scyBvciBqdXN0IGZ1enogdGhlIGlvX3VyaW5nIGNvbW1hbmRzLlxuXG5UaGVuIEkgcmVhbGl6ZWQgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbnMuIEkgaW1tZWRpYXRlbHkgY2hlY2tlZCBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBxdWlja2x5IGZvdW5kIHRoYXQgdGhlIGZpcnN0IHR3byBmdW5jdGlvbnMgSSB0aG91Z2h0IG9mIGFyZSBzdGF0aWMuIEkgZG91YmxlLWNoZWNrZWQgYHVibGtfdmFsaWRhdGVfcGFyYW1zYCwgYW5kIGl0IGlzIGFsc28gc3RhdGljLlxuXG5TaW5jZSB0aGVyZSBkb24ndCBzZWVtIHRvIGJlIGFueSBvYnZpb3VzIG5vbi1zdGF0aWMgQVBJIGVudHJ5IHBvaW50cywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgb25lcyBJJ20gcHJvdmlkaW5nIGFyZW4ndCBpbmxpbmVkLiBUaGUgcHJvbXB0IGFsc28gbm90ZXMgdGhhdCBpbmxpbmVkIGZ1bmN0aW9ucyBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEdpdmVuIHRoYXQgaXRzIGFkZHJlc3MgaXMgdGFrZW4sIEknbSBjb25maWRlbnQgdGhhdCBgdWJsa19jdHJsX3VyaW5nX2NtZGAgaXMgbm90IGlubGluZWQsIGFuZCBzaW5jZSBgdWJsa19jdHJsX3NldF9wYXJhbXNgIGlzIGEgc2l6YWJsZSBmdW5jdGlvbiwgSSdtIGdvaW5nIHRvIGFzc3VtZSBpdCBpcyBhbHNvIG5vdCBpbmxpbmVkLlxuXG5UaGUgY2FsbCBzdGFjayBjb25maXJtcyBteSBzdXNwaWNpb25zOyBgdWJsa192YWxpZGF0ZV9wYXJhbXNgIGlzIGNhbGxlZCBmcm9tIGB1YmxrX2N0cmxfc2V0X3BhcmFtc2AgYW5kIGB1YmxrX2N0cmxfYWRkX2RldmAuIEdpdmVuIHRoZSBhZHZpY2UgZnJvbSB0aGUgcHJvbXB0LCB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGB1YmxrX2N0cmxfdXJpbmdfY21kYCBhbmQgYHVibGtfY3RybF9zZXRfcGFyYW1zYC5cblxuRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgbm90ZSB0aGUgY29uZmlncyBJIHdhcyBjb25zaWRlcmluZyB3ZXJlIGBCTEtfREVWX1VCTEtgIGFuZCBgQkxLX0RFVl9aT05FRGAgYW5kIHRoYXQgdGhlIGZvcm1lciBpcyB0aGUgb25lIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBmb3IgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg2MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMjoyNi4yMzc5ODc3MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzI4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzI4OlxcdGNvbmZpZyBCTEtfREVWX1VCTEtcXG4gMzI5OlxcdFxcdHRyaXN0YXRlIFxcXCJVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXFxcIlxcbiAzMzA6XFx0XFx0c2VsZWN0IElPX1VSSU5HXFxuIDMzMTpcXHRcXHRoZWxwXFxuIDMzMjpcXHRcXHQgIGlvX3VyaW5nIGJhc2VkIHVzZXJzcGFjZSBibG9jayBkcml2ZXIuIFRvZ2V0aGVyIHdpdGggdWJsayBzZXJ2ZXIsIHVibGtcXG4gMzMzOlxcdFxcdCAgaGFzIGJlZW4gd29ya2luZyB3ZWxsLCBidXQgaW50ZXJmYWNlIHdpdGggdXNlcnNwYWNlIG9yIGNvbW1hbmQgZGF0YVxcbiAzMzQ6XFx0XFx0ICBkZWZpbml0aW9uIGlzbid0IGZpbmFsaXplZCB5ZXQsIGFuZCBtaWdodCBjaGFuZ2UgYWNjb3JkaW5nIHRvIGZ1dHVyZVxcbiAzMzU6XFx0XFx0ICByZXF1aXJlbWVudCwgc28gbWFyayBpcyBhcyBleHBlcmltZW50YWwgbm93LlxcbiAzMzY6XFx0XFxuIDMzNzpcXHRjb25maWcgQkxLREVWX1VCTEtfTEVHQUNZX09QQ09ERVNcXG4gMzM4OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgbGVnYWN5IGNvbW1hbmQgb3Bjb2RlXFxcIlxcbiAzMzk6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfREVWX1VCTEtcXG4gMzQwOlxcdFxcdGRlZmF1bHQgeVxcbiAzNDE6XFx0XFx0aGVscFxcbiAzNDI6XFx0XFx0ICB1YmxrIGRyaXZlciBzdGFydGVkIHRvIHRha2UgcGxhaW4gY29tbWFuZCBlbmNvZGluZywgd2hpY2ggdHVybnMgb3V0XFxuIDM0MzpcXHRcXHQgIG9uZSBiYWQgd2F5LiBUaGUgdHJhZGl0aW9uYWwgaW9jdGwgY29tbWFuZCBvcGNvZGUgZW5jb2RlcyBtb3JlXFxuIDM0NDpcXHRcXHQgIGluZm8gYW5kIGJhc2ljYWxseSBkZWZpbmVzIGVhY2ggY29kZSB1bmlxdWVseSwgc28gb3Bjb2RlIGNvbmZsaWN0XFxuIDM0NTpcXHRcXHQgIGlzIGF2b2lkZWQsIGFuZCBkcml2ZXIgY2FuIGhhbmRsZSB3cm9uZyBjb21tYW5kIGVhc2lseSwgbWVhbnRpbWUgaXRcXG4gMzQ2OlxcdFxcdCAgbWF5IGhlbHAgc2VjdXJpdHkgc3Vic3lzdGVtIHRvIGF1ZGl0IGlvX3VyaW5nIGNvbW1hbmQuXFxuIDM0NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzI6MjYuMjM4MDc2MDZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ0NTY5MzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSU9fVVJJTkcgYW5kIFpvbmVkIEJsb2NrIERldmljZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gdGhlIHN5c3RlbSBpcyBjaG9vc2luZyBgSU9fVVJJTkdgLiBHb29kLCB0aGF0J3MgZ2VuZXJhbGx5IHRoZSByaWdodCBkaXJlY3Rpb24gZm9yIG1vZGVybiBJL08uIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgQkxLX0RFVl9aT05FRGAgY29udGluZ2VudCBvbiBzb21ldGhpbmcgc3BlY2lmaWM/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzLiBJIGtub3cgaXQgKnNob3VsZG4ndCogYmUgYSBtYWpvciBpc3N1ZSwgYnV0IEkgd2FudCB0byBlbnN1cmUgdGhhdCBteSBhc3N1bXB0aW9ucyByZWdhcmRpbmcgd2hpY2ggb3RoZXIgdGhpbmdzIGFyZSBuZWVkZWQgYXJlIGNvcnJlY3QuIERvbid0IHdhbnQgYW55IHN1cnByaXNlcyBsYXRlci4gR290dGEgc3RheSBzaGFycCBhbmQgbWFrZSBzdXJlIHRoaXMgaXMgc2V0IHVwIGNvcnJlY3RseS4gTGV0J3MgZGlnIGRlZXBlciBhbmQgdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBpcyBsaW5pbmcgdXAgbmljZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk3MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzI6MzMuNjgzNzcyODVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTc6XFx0Y29uZmlnIEJMS19ERVZfWk9ORURcXG4gIDk4OlxcdFxcdGJvb2wgXFxcIlpvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAgOTk6XFx0XFx0aGVscFxcbiAxMDA6XFx0XFx0QmxvY2sgbGF5ZXIgem9uZWQgYmxvY2sgZGV2aWNlIHN1cHBvcnQuIFRoaXMgb3B0aW9uIGVuYWJsZXNcXG4gMTAxOlxcdFxcdHN1cHBvcnQgZm9yIFpBQy9aQkMvWk5TIGhvc3QtbWFuYWdlZCBhbmQgaG9zdC1hd2FyZSB6b25lZCBibG9ja1xcbiAxMDI6XFx0XFx0ZGV2aWNlcy5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0U2F5IHllcyBoZXJlIGlmIHlvdSBoYXZlIGEgWkFDLCBaQkMsIG9yIFpOUyBzdG9yYWdlIGRldmljZS5cXG4gMTA1OlxcdFxcbiAxMDY6XFx0Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xcbiAxMDc6XFx0XFx0Ym9vbCBcXFwiQmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydFxcXCJcXG4gMTA4OlxcdFxcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxcbiAxMDk6XFx0XFx0c2VsZWN0IEJMS19DR1JPVVBfUldTVEFUXFxuIDExMDpcXHRcXHRoZWxwXFxuIDExMTpcXHRcXHRCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0LiBJdCBjYW4gYmUgdXNlZCB0byBsaW1pdFxcbiAxMTI6XFx0XFx0dGhlIElPIHJhdGUgdG8gYSBkZXZpY2UuIElPIHJhdGUgcG9saWNpZXMgYXJlIHBlciBjZ3JvdXAgYW5kXFxuIDExMzpcXHRcXHRvbmUgbmVlZHMgdG8gbW91bnQgYW5kIHVzZSBibGtpbyBjZ3JvdXAgY29udHJvbGxlciBmb3IgY3JlYXRpbmdcXG4gMTE0OlxcdFxcdGNncm91cHMgYW5kIHNwZWNpZnlpbmcgcGVyIGRldmljZSBJTyByYXRlIHBvbGljaWVzLlxcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvYmxraW8tY29udHJvbGxlci5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMyOjMzLjY4MzkzNjU5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTk2Njc1MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFVCTEsgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZXJlIGFyZSBubyBkZXBlbmRlbmNpZXMgZm9yIGBCTEtfREVWX1pPTkVEYCwgd2hpY2ggaW1tZWRpYXRlbHkgc2ltcGxpZmllcyB0aGluZ3MuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYEJMS19ERVZfVUJMS2AgYW5kIGBCTEtfREVWX1pPTkVEYCwgYW5kIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgYHVibGtfY3RybF91cmluZ19jbWRgIGFuZCBgdWJsa19jdHJsX3NldF9wYXJhbXNgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cy5cblxuV2FpdCwgaG9sZCBvbiBhIHNlY29uZOKApiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaXNuJ3QgKmp1c3QqIGNvcmUga2VybmVsIGNvZGUuIEl0IGFsc28gdG91Y2hlcyBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuY2AgYW5kIGFkZHMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2hgLiBTZWxmdGVzdHMgYXJlbid0IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsLCBJIGtub3cgdGhhdCwgYnV0IHRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYC4gVGhpcyBpc24ndCBqdXN0IGEgY29zbWV0aWMgdHdlYWs7IGl0J3MgYSBmaXggdG8gYSB2YWxpZGF0aW9uIGNoZWNrLiBUaGUgcGF0Y2ggaXMgZW5mb3JjaW5nIHRoYXQgYGNodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiB3aGVuIGNvbmZpZ3VyaW5nIGEgem9uZWQgdWJsayBkZXZpY2UuXG5cbkNydWNpYWxseSwgdGhpcyBjaGFuZ2UgaXMgdHJpZ2dlcmVkIGJ5IHVzZXItc3VwcGxpZWQgcGFyYW1ldGVycyB0aHJvdWdoIGlvX3VyaW5nIGNvbW1hbmRzIG9uIGAvZGV2L3VibGstY29udHJvbGAuIFNvLCBpdCdzIHVzZXItYWNjZXNzaWJsZSBrZXJuZWwgY29kZSwgYW5kIGl04oCZcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBjYW4gYmUgZXhlY3V0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBHaXZlbiB0aGlzIHJlYWNoYWJpbGl0eSBhbmQgdGhlIGZhY3QgdGhhdCBpdCdzIGEgdmFsaWRhdGlvbiBmaXgsIGFuZCB0aHVzIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgdG8gbWlzZm9ybWVkIGlucHV0IEkgY29uY2x1ZGUgaXQncyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBnb2FsIG9mIGZ1enppbmcgd2lsbCBiZSB0byBwcm9iZSB0aGlzIHBhcmFtZXRlciB2YWxpZGF0aW9uLlxuXG5UaGVyZWZvcmUsIGZvciB0aGUgZnV6emluZyBzZXR1cCwgbXkgY29uZmlncyB3aWxsIGJlIGBCTEtfREVWX1VCTEtgLCBgQkxLX0RFVl9aT05FRGAsIGFuZCBteSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYHVibGtfY3RybF91cmluZ19jbWRgLCBgdWJsa19jdHJsX3NldF9wYXJhbXNgLiBJIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlc2UgdmFsdWVzLiBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIGBjaHVua19zZWN0b3JzYCB2YWxpZGF0aW9uIGluIG15IGZ1enppbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTEyLCJPdXRwdXRUb2tlbnMiOjE1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMyOjQ1LjY4MDYxNTYzM1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTE5NTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9VQkxLXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWJsa19jdHJsX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19jdHJsX3NldF9wYXJhbXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdWJsayBkcml2ZXIgdG8gZW5mb3JjZSB0aGF0IGBjaHVua19zZWN0b3JzYCBpcyBhIHBvd2VyIG9mIDIgd2hlbiBjb25maWd1cmluZyBhIHpvbmVkIHVibGsgZGV2aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGtlcm5lbCdzIHZhbGlkYXRpb24gbG9naWMgZm9yIHVzZXItcHJvdmlkZWQgcGFyYW1ldGVycywgcmVhY2hhYmxlIHZpYSBpb191cmluZyBjb21tYW5kcyBvbiBgL2Rldi91YmxrLWNvbnRyb2xgLiBUaGUgY29kZSBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfVUJMS1wiLFxuICAgIFwiQkxLX0RFVl9aT05FRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVibGtfY3RybF91cmluZ19jbWRcIixcbiAgICBcInVibGtfY3RybF9zZXRfcGFyYW1zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHVibGsgZHJpdmVyIHRvIGVuZm9yY2UgdGhhdCBgY2h1bmtfc2VjdG9yc2AgaXMgYSBwb3dlciBvZiAyIHdoZW4gY29uZmlndXJpbmcgYSB6b25lZCB1YmxrIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwncyB2YWxpZGF0aW9uIGxvZ2ljIGZvciB1c2VyLXByb3ZpZGVkIHBhcmFtZXRlcnMsIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgY29tbWFuZHMgb24gYC9kZXYvdWJsay1jb250cm9sYC4gVGhlIGNvZGUgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzI6NDUuODQ1ODE3NTkxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDcwNDI3MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MzI6NDUuODQ2MzAwMzYxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk0Njk5Mzg2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AgaW4gYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AgdG8gZW5zdXJlIHRoYXQgYGNodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiBmb3Igem9uZWQgZGV2aWNlcy4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIG9mIHVwZGF0ZXMgdG8gdGhlIHVzZXItc3BhY2Ugc2VsZnRlc3RzIChgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9gKS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBrZXJuZWwgY2hhbmdlIGlzIHB1cmVseSBhIHZhbGlkYXRpb24gY2hlY2sgb24gYW4gZXhpc3RpbmcgcGFyYW1ldGVyLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4YzIzY2Y0NDk5NzU4NmMwZjhkM2EyYjZjMGU1ODE5MGQ1NTQyODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwMzozMToxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuaW5kZXggODUzY2Q0MGEzNDAzYy4uMTkzZjZlYmMzYjM3YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5AQCAtOTgwLDcgKzk4MCw3IEBAIHN0YXRpYyBpbnQgdWJsa192YWxpZGF0ZV9wYXJhbXMoY29uc3Qgc3RydWN0IHVibGtfZGV2aWNlICp1YilcbiBcdFx0aWYgKHAtXHUwMDNlbWF4X3NlY3RvcnMgXHUwMDNjIFBBR0VfU0VDVE9SUylcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSBcdTAwMjZcdTAwMjYgIXAtXHUwMDNlY2h1bmtfc2VjdG9ycylcbitcdFx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSBcdTAwMjZcdTAwMjYgIWlzX3Bvd2VyX29mXzIocC1cdTAwM2VjaHVua19zZWN0b3JzKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH0gZWxzZVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9NYWtlZmlsZVxuaW5kZXggYTNjZWM3YjM1ZGI3Ny4uNWRhZjM2YzZjMzZjNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvTWFrZWZpbGVcbkBAIC01NSw2ICs1NSw4IEBAIFRFU1RfUFJPR1MgKz0gdGVzdF9zdHJpcGVfMDYuc2hcbiBURVNUX1BST0dTICs9IHRlc3RfcGFydF8wMS5zaFxuIFRFU1RfUFJPR1MgKz0gdGVzdF9wYXJ0XzAyLnNoXG4gXG4rVEVTVF9QUk9HUyArPSB0ZXN0X3BhcmFtc18wMS5zaFxuK1xuIFRFU1RfUFJPR1MgKz0gdGVzdF9zaG1lbXpjXzAxLnNoXG4gVEVTVF9QUk9HUyArPSB0ZXN0X3NobWVtemNfMDIuc2hcbiBURVNUX1BST0dTICs9IHRlc3Rfc2htZW16Y18wMy5zaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuY1xuaW5kZXggYmU1YTBkNzc1OTUyYy4uMjQwMGI0NjE1NzY2NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5jXG5AQCAtOCw2ICs4LDEzIEBAXG4gI2luY2x1ZGUgXCJrdWJsay5oXCJcbiBcbiAjZGVmaW5lIE1BWF9OUl9UR1RfQVJHIFx0NjRcbisjZGVmaW5lIEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlRcdFx0OVxuKyNkZWZpbmUgS1VCTEtfUEFSQU1fUEhZU0lDQUxfQlNfU0hJRlRcdFx0MTJcbisjZGVmaW5lIEtVQkxLX1BBUkFNX1pPTkVfU0VDVE9SU1x0XHQxMjhcbisjZGVmaW5lIEtVQkxLX1BBUkFNX05SX1pPTkVTXHRcdFx0MTZcbisjZGVmaW5lIEtVQkxLX1BBUkFNX0RFVl9TRUNUT1JTXHRcdFx0XFxcbitcdChLVUJMS19QQVJBTV9aT05FX1NFQ1RPUlMgKiBLVUJMS19QQVJBTV9OUl9aT05FUylcbisjZGVmaW5lIEtVQkxLX1BBUkFNX1pPTkVfQVBQRU5EX1NFQ1RPUlNcdFx0OFxuIFxuIHVuc2lnbmVkIGludCB1YmxrX2RiZ19tYXNrID0gVUJMS19MT0c7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCB1YmxrX3RndF9vcHMgKnRndF9vcHNfbGlzdFtdID0ge1xuQEAgLTIyNyw2ICsyMzQsNTUgQEAgc3RhdGljIGludCB1YmxrX2N0cmxfZ2V0X2ZlYXR1cmVzKHN0cnVjdCB1YmxrX2RldiAqZGV2LFxuIFx0cmV0dXJuIF9fdWJsa19jdHJsX2NtZChkZXYsIFx1MDAyNmRhdGEpO1xuIH1cbiBcbitzdGF0aWMgaW50IHBhcnNlX3BhcmFtX3R5cGVzKGNvbnN0IGNoYXIgKmFyZywgX191MzIgKnR5cGVzKVxuK3tcbitcdGNoYXIgYnVmWzEyOF0sICpzYXZlID0gTlVMTCwgKnRvaztcbitcbitcdGlmIChzdHJsZW4oYXJnKSBcdTAwM2U9IHNpemVvZihidWYpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHN0cmNweShidWYsIGFyZyk7XG4rXHQqdHlwZXMgPSAwO1xuK1x0dG9rID0gc3RydG9rX3IoYnVmLCBcIixcIiwgXHUwMDI2c2F2ZSk7XG4rXHR3aGlsZSAodG9rKSB7XG4rXHRcdGlmICghc3RyY21wKHRvaywgXCJub25lXCIpKVxuK1x0XHRcdDtcbitcdFx0ZWxzZSBpZiAoIXN0cmNtcCh0b2ssIFwiYmFzaWNcIikpXG4rXHRcdFx0KnR5cGVzIHw9IFVCTEtfUEFSQU1fVFlQRV9CQVNJQztcbitcdFx0ZWxzZSBpZiAoIXN0cmNtcCh0b2ssIFwiem9uZWRcIikpXG4rXHRcdFx0KnR5cGVzIHw9IFVCTEtfUEFSQU1fVFlQRV9aT05FRDtcbitcdFx0ZWxzZVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR0b2sgPSBzdHJ0b2tfcihOVUxMLCBcIixcIiwgXHUwMDI2c2F2ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgdWJsa19pbml0X3BhcmFtc19mcm9tX2N0eChjb25zdCBzdHJ1Y3QgZGV2X2N0eCAqY3R4LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHVibGtfcGFyYW1zICpwYXJhbXMpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHBhcmFtc19jdHggKnAgPSBcdTAwMjZjdHgtXHUwMDNlcGFyYW1zO1xuK1xuK1x0KnBhcmFtcyA9IChzdHJ1Y3QgdWJsa19wYXJhbXMpIHtcbitcdFx0LnR5cGVzID0gcC1cdTAwM2V0eXBlcyxcbitcdFx0LmJhc2ljID0ge1xuK1x0XHRcdC5sb2dpY2FsX2JzX3NoaWZ0XHQ9IHAtXHUwMDNlbG9naWNhbF9ic19zaGlmdCxcbitcdFx0XHQucGh5c2ljYWxfYnNfc2hpZnRcdD0gcC1cdTAwM2VwaHlzaWNhbF9ic19zaGlmdCxcbitcdFx0XHQuaW9fbWluX3NoaWZ0XHRcdD0gcC1cdTAwM2Vpb19taW5fc2hpZnQsXG4rXHRcdFx0LmlvX29wdF9zaGlmdFx0XHQ9IHAtXHUwMDNlaW9fb3B0X3NoaWZ0LFxuK1x0XHRcdC5tYXhfc2VjdG9yc1x0XHQ9IHAtXHUwMDNlbWF4X3NlY3RvcnMsXG4rXHRcdFx0LmNodW5rX3NlY3RvcnNcdFx0PSBwLVx1MDAzZWNodW5rX3NlY3RvcnMsXG4rXHRcdFx0LmRldl9zZWN0b3JzXHRcdD0gcC1cdTAwM2VkZXZfc2VjdG9ycyxcbitcdFx0fSxcbitcdFx0LnpvbmVkID0ge1xuK1x0XHRcdC5tYXhfb3Blbl96b25lc1x0XHQ9IHAtXHUwMDNlbWF4X29wZW5fem9uZXMsXG4rXHRcdFx0Lm1heF9hY3RpdmVfem9uZXNcdD0gcC1cdTAwM2VtYXhfYWN0aXZlX3pvbmVzLFxuK1x0XHRcdC5tYXhfem9uZV9hcHBlbmRfc2VjdG9ycyA9IHAtXHUwMDNlbWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMsXG4rXHRcdH0sXG4rXHR9O1xuK31cbitcbiBzdGF0aWMgaW50IHVibGtfY3RybF91cGRhdGVfc2l6ZShzdHJ1Y3QgdWJsa19kZXYgKmRldixcbiBcdFx0X191NjQgbnJfc2VjdHMpXG4ge1xuQEAgLTE3NzIsNiArMTgyOCw1MSBAQCBzdGF0aWMgaW50IF9fY21kX2Rldl9hZGQoY29uc3Qgc3RydWN0IGRldl9jdHggKmN0eClcbiBcbiBzdGF0aWMgaW50IF9fY21kX2Rldl9saXN0KHN0cnVjdCBkZXZfY3R4ICpjdHgpO1xuIFxuK3N0YXRpYyBpbnQgY21kX2Rldl9zZXRfcGFyYW1zKHN0cnVjdCBkZXZfY3R4ICpjdHgpXG4re1xuK1x0c3RydWN0IHVibGtzcnZfY3RybF9kZXZfaW5mbyAqaW5mbztcbitcdHN0cnVjdCB1YmxrX3BhcmFtcyBwYXJhbXM7XG4rXHRzdHJ1Y3QgdWJsa19kZXYgKmRldjtcbitcdF9fdTY0IGZlYXR1cmVzO1xuK1x0aW50IHJldCwgZGVsX3JldDtcbitcbitcdGRldiA9IHVibGtfY3RybF9pbml0KCk7XG4rXHRpZiAoIWRldilcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRyZXQgPSB1YmxrX2N0cmxfZ2V0X2ZlYXR1cmVzKGRldiwgXHUwMDI2ZmVhdHVyZXMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoIShmZWF0dXJlcyBcdTAwMjYgVUJMS19GX0NNRF9JT0NUTF9FTkNPREUpKSB7XG4rXHRcdHJldCA9IC1FTk9UU1VQO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGluZm8gPSBcdTAwMjZkZXYtXHUwMDNlZGV2X2luZm87XG4rXHRpbmZvLVx1MDAzZWRldl9pZCA9IGN0eC1cdTAwM2VkZXZfaWQ7XG4rXHRpbmZvLVx1MDAzZW5yX2h3X3F1ZXVlcyA9IGN0eC1cdTAwM2Vucl9od19xdWV1ZXM7XG4rXHRpbmZvLVx1MDAzZXF1ZXVlX2RlcHRoID0gY3R4LVx1MDAzZXF1ZXVlX2RlcHRoO1xuK1x0aW5mby1cdTAwM2Vpb19kZXNjX3NpemUgPSBjdHgtXHUwMDNlaW9fZGVzY19zaXplO1xuK1x0aW5mby1cdTAwM2VmbGFncyA9IGN0eC1cdTAwM2VmbGFncztcbitcbitcdHJldCA9IHVibGtfY3RybF9hZGRfZGV2KGRldik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHVibGtfaW5pdF9wYXJhbXNfZnJvbV9jdHgoY3R4LCBcdTAwMjZwYXJhbXMpO1xuK1xuK1x0cmV0ID0gdWJsa19jdHJsX3NldF9wYXJhbXMoZGV2LCBcdTAwMjZwYXJhbXMpO1xuK1x0cHJpbnRmKFwiU0VUX1BBUkFNUyByZXR1cm5lZCAlZFxcblwiLCByZXQpO1xuK1xuK1x0ZGVsX3JldCA9IHVibGtfY3RybF9kZWxfZGV2KGRldik7XG4rXHRpZiAoZGVsX3JldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgcmV0ID09IDApXG4rXHRcdHJldCA9IGRlbF9yZXQ7XG4rb3V0OlxuK1x0dWJsa19jdHJsX2RlaW5pdChkZXYpO1xuK1x0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgY21kX2Rldl9hZGQoc3RydWN0IGRldl9jdHggKmN0eClcbiB7XG4gXHRpbnQgcmVzO1xuQEAgLTIxMTcsNiArMjIxOCw5IEBAIHN0YXRpYyBpbnQgY21kX2Rldl9oZWxwKGNoYXIgKmV4ZSlcbiBcdHByaW50ZihcIlxcdCAtLXNhZmUgb25seSBzdG9wIGlmIGRldmljZSBoYXMgbm8gYWN0aXZlIG9wZW5lcnNcXG5cXG5cIik7XG4gXHRwcmludGYoXCIlcyBsaXN0IFstbiBkZXZfaWRdIC1hIFxcblwiLCBleGUpO1xuIFx0cHJpbnRmKFwiXFx0IC1hIGxpc3QgYWxsIGRldmljZXMsIC1uIGxpc3Qgc3BlY2lmaWVkIGRldmljZSwgZGVmYXVsdCAtYSBcXG5cXG5cIik7XG4rXHRwcmludGYoXCIlcyBzZXRfcGFyYW1zIFstbiBkZXZfaWRdIFstcSBucl9xdWV1ZXNdIFstZCBkZXB0aF0gWy11XSBbLS16b25lZF1cXG5cIiwgZXhlKTtcbitcdHByaW50ZihcIlxcdFstLXBhcmFtX3R5cGVzIGJhc2ljWyx6b25lZF18bm9uZV1cXG5cIik7XG4rXHRwcmludGYoXCJcXHQgaXNzdWUgQUREX0RFViwgU0VUX1BBUkFNUyBhbmQgREVMX0RFViB3aXRob3V0IFNUQVJUX0RFVlxcblxcblwiKTtcbiBcdHByaW50ZihcIiVzIGZlYXR1cmVzXFxuXCIsIGV4ZSk7XG4gXHRwcmludGYoXCIlcyB1cGRhdGVfc2l6ZSAtbiBkZXZfaWQgLXN8LS1zaXplIHNpemVfaW5fYnl0ZXMgXFxuXCIsIGV4ZSk7XG4gXHRwcmludGYoXCIlcyBxdWllc2NlIC1uIGRldl9pZFxcblwiLCBleGUpO1xuQEAgLTIxNjAsNiArMjI2NCwxOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHR7IFwiaHRsYlwiLFx0XHQxLFx0TlVMTCwgIDAgIH0sXG4gXHRcdHsgXCJyZG9ubHlfc2htZW1fYnVmXCIsXHQwLFx0TlVMTCwgIDAgIH0sXG4gXHRcdHsgXCJpb19kZXNjX3NpemVcIixcdDEsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcInpvbmVkXCIsXHRcdDAsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcInBhcmFtX3R5cGVzXCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJsb2dpY2FsX2JzX3NoaWZ0XCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJwaHlzaWNhbF9ic19zaGlmdFwiLFx0MSxcdE5VTEwsICAwICB9LFxuK1x0XHR7IFwiaW9fbWluX3NoaWZ0XCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJpb19vcHRfc2hpZnRcIixcdDEsXHROVUxMLCAgMCAgfSxcbitcdFx0eyBcIm1heF9zZWN0b3JzXCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJjaHVua19zZWN0b3JzXCIsXHQxLFx0TlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJkZXZfc2VjdG9yc1wiLFx0MSxcdE5VTEwsICAwICB9LFxuK1x0XHR7IFwibWF4X3pvbmVfYXBwZW5kX3NlY3RvcnNcIiwgMSwgTlVMTCwgIDAgIH0sXG4rXHRcdHsgXCJtYXhfb3Blbl96b25lc1wiLFx0MSxcdE5VTEwsICAwICB9LFxuK1x0XHR7IFwibWF4X2FjdGl2ZV96b25lc1wiLFx0MSxcdE5VTEwsICAwICB9LFxuIFx0XHR7IDAsIDAsIDAsIDAgfVxuIFx0fTtcbiBcdGNvbnN0IHN0cnVjdCB1YmxrX3RndF9vcHMgKm9wcyA9IE5VTEw7XG5AQCAtMjE3Myw2ICsyMjg5LDE5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdC50Z3RfdHlwZVx0PVx0XCJ1bmtub3duXCIsXG4gXHRcdC5jc3VtX3R5cGVcdD1cdExCTURfUElfQ1NVTV9OT05FLFxuIFx0XHQuaW9fZGVzY19zaXplXHQ9XHRzaXplb2Yoc3RydWN0IHVibGtzcnZfaW9fZGVzYyksXG4rXHRcdC5wYXJhbXMgPSB7XG4rXHRcdFx0LnR5cGVzXHRcdFx0PSBVQkxLX1BBUkFNX1RZUEVfQkFTSUMsXG4rXHRcdFx0LmxvZ2ljYWxfYnNfc2hpZnRcdD0gS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCxcbitcdFx0XHQucGh5c2ljYWxfYnNfc2hpZnRcdD0gS1VCTEtfUEFSQU1fUEhZU0lDQUxfQlNfU0hJRlQsXG4rXHRcdFx0LmlvX21pbl9zaGlmdFx0XHQ9IEtVQkxLX1BBUkFNX0xPR0lDQUxfQlNfU0hJRlQsXG4rXHRcdFx0LmlvX29wdF9zaGlmdFx0XHQ9IEtVQkxLX1BBUkFNX1BIWVNJQ0FMX0JTX1NISUZULFxuK1x0XHRcdC5tYXhfc2VjdG9yc1x0XHQ9XG4rXHRcdFx0XHRVQkxLX0lPX01BWF9CWVRFUyBcdTAwM2VcdTAwM2UgS1VCTEtfUEFSQU1fTE9HSUNBTF9CU19TSElGVCxcbitcdFx0XHQuY2h1bmtfc2VjdG9yc1x0XHQ9IEtVQkxLX1BBUkFNX1pPTkVfU0VDVE9SUyxcbitcdFx0XHQuZGV2X3NlY3RvcnNcdFx0PSBLVUJMS19QQVJBTV9ERVZfU0VDVE9SUyxcbitcdFx0XHQubWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgPVxuK1x0XHRcdFx0S1VCTEtfUEFSQU1fWk9ORV9BUFBFTkRfU0VDVE9SUyxcbitcdFx0fSxcbiBcdH07XG4gXHRpbnQgcmV0ID0gLUVJTlZBTCwgaTtcbiBcdGludCB0Z3RfYXJnYyA9IDE7XG5AQCAtMjI4OCw2ICsyNDE3LDM0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdFx0XHRjdHguZmxhZ3MgfD0gVUJMS19GX0lPX0RFU0NfU0laRTtcbiBcdFx0XHRcdGN0eC5pb19kZXNjX3NpemUgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4gXHRcdFx0fVxuK1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwiem9uZWRcIikpXG4rXHRcdFx0XHRjdHguZmxhZ3MgfD0gVUJMS19GX1pPTkVEO1xuK1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwicGFyYW1fdHlwZXNcIikpIHtcbitcdFx0XHRcdHJldCA9IHBhcnNlX3BhcmFtX3R5cGVzKG9wdGFyZywgXHUwMDI2Y3R4LnBhcmFtcy50eXBlcyk7XG4rXHRcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcImxvZ2ljYWxfYnNfc2hpZnRcIikpXG4rXHRcdFx0XHRjdHgucGFyYW1zLmxvZ2ljYWxfYnNfc2hpZnQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJwaHlzaWNhbF9ic19zaGlmdFwiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMucGh5c2ljYWxfYnNfc2hpZnQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJpb19taW5fc2hpZnRcIikpXG4rXHRcdFx0XHRjdHgucGFyYW1zLmlvX21pbl9zaGlmdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcImlvX29wdF9zaGlmdFwiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMuaW9fb3B0X3NoaWZ0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuK1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwibWF4X3NlY3RvcnNcIikpXG4rXHRcdFx0XHRjdHgucGFyYW1zLm1heF9zZWN0b3JzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuK1x0XHRcdGlmICghc3RyY21wKGxvbmdvcHRzW29wdGlvbl9pZHhdLm5hbWUsIFwiY2h1bmtfc2VjdG9yc1wiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMuY2h1bmtfc2VjdG9ycyA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRpZiAoIXN0cmNtcChsb25nb3B0c1tvcHRpb25faWR4XS5uYW1lLCBcImRldl9zZWN0b3JzXCIpKVxuK1x0XHRcdFx0Y3R4LnBhcmFtcy5kZXZfc2VjdG9ycyA9IHN0cnRvdWxsKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJtYXhfem9uZV9hcHBlbmRfc2VjdG9yc1wiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMubWF4X3pvbmVfYXBwZW5kX3NlY3RvcnMgPVxuK1x0XHRcdFx0XHRzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJtYXhfb3Blbl96b25lc1wiKSlcbitcdFx0XHRcdGN0eC5wYXJhbXMubWF4X29wZW5fem9uZXMgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0aWYgKCFzdHJjbXAobG9uZ29wdHNbb3B0aW9uX2lkeF0ubmFtZSwgXCJtYXhfYWN0aXZlX3pvbmVzXCIpKVxuK1x0XHRcdFx0Y3R4LnBhcmFtcy5tYXhfYWN0aXZlX3pvbmVzID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICc/JzpcbiBcdFx0XHQvKlxuQEAgLTIzNzcsNyArMjUzNCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdG9wcy1cdTAwM2VwYXJzZV9jbWRfbGluZShcdTAwMjZjdHgsIHRndF9hcmdjLCB0Z3RfYXJndik7XG4gXHR9XG4gXG4tXHRpZiAoIXN0cmNtcChjbWQsIFwiYWRkXCIpKVxuK1x0aWYgKCFzdHJjbXAoY21kLCBcInNldF9wYXJhbXNcIikpXG4rXHRcdHJldCA9IGNtZF9kZXZfc2V0X3BhcmFtcyhcdTAwMjZjdHgpO1xuK1x0ZWxzZSBpZiAoIXN0cmNtcChjbWQsIFwiYWRkXCIpKVxuIFx0XHRyZXQgPSBjbWRfZGV2X2FkZChcdTAwMjZjdHgpO1xuIFx0ZWxzZSBpZiAoIXN0cmNtcChjbWQsIFwicmVjb3ZlclwiKSkge1xuIFx0XHRpZiAoY3R4LmRldl9pZCBcdTAwM2MgMCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaFxuaW5kZXggZTI3YzE1NGZjOTEwOC4uZDk4ZjNkNjEyZDg4OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsva3VibGsuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9rdWJsay5oXG5AQCAtNjMsNiArNjMsMjIgQEAgc3RydWN0IGZhdWx0X2luamVjdF9jdHgge1xuIFx0Ym9vbCBkaWVfZHVyaW5nX2ZldGNoO1xuIH07XG4gXG4rc3RydWN0IHBhcmFtc19jdHgge1xuK1x0X191MzIgdHlwZXM7XG4rXG4rXHRfX3UzMiBsb2dpY2FsX2JzX3NoaWZ0O1xuK1x0X191MzIgcGh5c2ljYWxfYnNfc2hpZnQ7XG4rXHRfX3UzMiBpb19taW5fc2hpZnQ7XG4rXHRfX3UzMiBpb19vcHRfc2hpZnQ7XG4rXHRfX3UzMiBtYXhfc2VjdG9ycztcbitcdF9fdTMyIGNodW5rX3NlY3RvcnM7XG4rXHRfX3U2NCBkZXZfc2VjdG9ycztcbitcbitcdF9fdTMyIG1heF9vcGVuX3pvbmVzO1xuK1x0X191MzIgbWF4X2FjdGl2ZV96b25lcztcbitcdF9fdTMyIG1heF96b25lX2FwcGVuZF9zZWN0b3JzO1xuK307XG4rXG4gc3RydWN0IGRldl9jdHgge1xuIFx0Y2hhciB0Z3RfdHlwZVsxNl07XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuQEAgLTk5LDYgKzExNSw4IEBAIHN0cnVjdCBkZXZfY3R4IHtcbiBcdC8qIGZvciAndXBkYXRlX3NpemUnIGNvbW1hbmQgKi9cbiBcdHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplO1xuIFxuK1x0c3RydWN0IHBhcmFtc19jdHggcGFyYW1zO1xuK1xuIFx0Y2hhciAqaHRsYl9wYXRoO1xuIFxuIFx0dW5pb24ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3VibGsvdGVzdF9wYXJhbXNfMDEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy91YmxrL3Rlc3RfcGFyYW1zXzAxLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTI4ZTcyYjEwMzVkMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay90ZXN0X3BhcmFtc18wMS5zaFxuQEAgLTAsMCArMSwxMTQgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisuIFwiJChjZCBcIiQoZGlybmFtZSBcIiQwXCIpXCIgXHUwMDI2XHUwMDI2IHB3ZClcIi90ZXN0X2NvbW1vbi5zaFxuK1xuK0VSUl9DT0RFPTBcbitcbitydW5fc2V0X3BhcmFtc19zdWNjZXNzKClcbit7XG4rXHRsb2NhbCBuYW1lPSQxXG4rXG4rXHRzaGlmdFxuK1xuK1x0ZWNobyBcIiRuYW1lXCJcbitcdGlmICEgXCIkVUJMS19QUk9HXCIgc2V0X3BhcmFtcyAtcSAxIC1kIDIgXCIkQFwiOyB0aGVuXG4rXHRcdGVjaG8gXCIkbmFtZTogU0VUX1BBUkFNUyBjaGVjayBmYWlsZWRcIlxuK1x0XHRyZXR1cm4gMVxuK1x0Zmlcbit9XG4rXG4rcnVuX3NldF9wYXJhbXNfZmFpbHVyZSgpXG4re1xuK1x0bG9jYWwgbmFtZT0kMVxuK1xuK1x0c2hpZnRcbitcbitcdGVjaG8gXCIkbmFtZVwiXG4rXHRpZiBcIiRVQkxLX1BST0dcIiBzZXRfcGFyYW1zIC1xIDEgLWQgMiBcIiRAXCI7IHRoZW5cbitcdFx0ZWNobyBcIiRuYW1lOiBTRVRfUEFSQU1TIHN1Y2NlZWRlZCB1bmV4cGVjdGVkbHlcIlxuK1x0XHRyZXR1cm4gMVxuK1x0Zmlcbit9XG4rXG4rcnVuX3pvbmVkX3NldF9wYXJhbXNfc3VjY2VzcygpXG4re1xuK1x0bG9jYWwgbmFtZT0kMVxuK1xuK1x0c2hpZnRcbitcbitcdGVjaG8gXCIkbmFtZVwiXG4rXHRpZiAhIFwiJFVCTEtfUFJPR1wiIHNldF9wYXJhbXMgLXEgMSAtZCAyIC11IC0tem9uZWQgXCIkQFwiOyB0aGVuXG4rXHRcdGVjaG8gXCIkbmFtZTogU0VUX1BBUkFNUyBjaGVjayBmYWlsZWRcIlxuK1x0XHRyZXR1cm4gMVxuK1x0Zmlcbit9XG4rXG4rcnVuX3pvbmVkX3NldF9wYXJhbXNfZmFpbHVyZSgpXG4re1xuK1x0bG9jYWwgbmFtZT0kMVxuK1xuK1x0c2hpZnRcbitcbitcdGVjaG8gXCIkbmFtZVwiXG4rXHRpZiBcIiRVQkxLX1BST0dcIiBzZXRfcGFyYW1zIC1xIDEgLWQgMiAtdSAtLXpvbmVkIFwiJEBcIjsgdGhlblxuK1x0XHRlY2hvIFwiJG5hbWU6IFNFVF9QQVJBTVMgc3VjY2VlZGVkIHVuZXhwZWN0ZWRseVwiXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK31cbitcbitfcHJlcF90ZXN0IFwicGFyYW1zXCIgXCJTRVRfUEFSQU1TIHZhbGlkYXRpb25cIlxuK1xuK2lmIFsgISAtYyAvZGV2L3VibGstY29udHJvbCBdOyB0aGVuXG4rXHRfY2xlYW51cF90ZXN0XG4rXHRfc2hvd19yZXN1bHQgJFRJRCAkVUJMS19TS0lQX0NPREVcbitmaVxuK1xuK3J1bl9zZXRfcGFyYW1zX3N1Y2Nlc3MgXCJ2YWxpZCBiYXNpYyBwYXJhbXNcIiB8fFxuK1x0RVJSX0NPREU9MVxuK1xuK3J1bl9zZXRfcGFyYW1zX2ZhaWx1cmUgXCJtaXNzaW5nIGJhc2ljIHBhcmFtc1wiIFxcXG4rXHQtLXBhcmFtX3R5cGVzIG5vbmUgfHxcbitcdEVSUl9DT0RFPTFcbitcbitydW5fc2V0X3BhcmFtc19mYWlsdXJlIFwibG9naWNhbCBibG9jayBsYXJnZXIgdGhhbiBwaHlzaWNhbCBibG9ja1wiIFxcXG4rXHQtLWxvZ2ljYWxfYnNfc2hpZnQgMTIgLS1waHlzaWNhbF9ic19zaGlmdCA5IHx8XG4rXHRFUlJfQ09ERT0xXG4rXG4rcnVuX3NldF9wYXJhbXNfZmFpbHVyZSBcInRvbyBsYXJnZSBtYXggc2VjdG9yc1wiIFxcXG4rXHQtLW1heF9zZWN0b3JzIDIwNDkgfHxcbitcdEVSUl9DT0RFPTFcbitcbitpZiBfaGF2ZV9mZWF0dXJlIFwiWk9ORURcIiBcdTAwMjZcdTAwMjYgX2hhdmVfZmVhdHVyZSBcIlVTRVJfQ09QWVwiOyB0aGVuXG4rXHRydW5fem9uZWRfc2V0X3BhcmFtc19zdWNjZXNzIFwidmFsaWQgem9uZWQgcGFyYW1zXCIgXFxcbitcdFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCB8fFxuK1x0XHRFUlJfQ09ERT0xXG4rXG4rXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwibWlzc2luZyB6b25lZCBwYXJhbXNcIiB8fFxuK1x0XHRFUlJfQ09ERT0xXG4rXG4rXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwibm9uLXBvd2VyLW9mLTIgem9uZSBzaXplXCIgXFxcbitcdFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxuK1x0XHQtLWNodW5rX3NlY3RvcnMgOTYgLS1kZXZfc2VjdG9ycyAkKCg5NiAqIDE2KSkgfHxcbitcdFx0RVJSX0NPREU9MVxuK1xuK1x0cnVuX3pvbmVkX3NldF9wYXJhbXNfZmFpbHVyZSBcInplcm8gbWF4IHpvbmUgYXBwZW5kXCIgXFxcbitcdFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxuK1x0XHQtLW1heF96b25lX2FwcGVuZF9zZWN0b3JzIDAgfHxcbitcdFx0RVJSX0NPREU9MVxuK1xuK1x0cnVuX3pvbmVkX3NldF9wYXJhbXNfZmFpbHVyZSBcInRvbyBtYW55IG9wZW4gem9uZXNcIiBcXFxuK1x0XHQtLXBhcmFtX3R5cGVzIGJhc2ljLHpvbmVkIFxcXG4rXHRcdC0tZGV2X3NlY3RvcnMgJCgoMTI4ICogNCkpIC0tbWF4X29wZW5fem9uZXMgNSB8fFxuK1x0XHRFUlJfQ09ERT0xXG4rXG4rXHRydW5fem9uZWRfc2V0X3BhcmFtc19mYWlsdXJlIFwidG9vIG1hbnkgYWN0aXZlIHpvbmVzXCIgXFxcbitcdFx0LS1wYXJhbV90eXBlcyBiYXNpYyx6b25lZCBcXFxuK1x0XHQtLWRldl9zZWN0b3JzICQoKDEyOCAqIDQpKSAtLW1heF9hY3RpdmVfem9uZXMgNSB8fFxuK1x0XHRFUlJfQ09ERT0xXG4rZWxzZVxuK1x0ZWNobyBcInpvbmVkIHVibGsgZmVhdHVyZSB1bmF2YWlsYWJsZSwgc2tpcCB6b25lZCBTRVRfUEFSQU1TIGNhc2VzXCJcbitmaVxuK1xuK19jbGVhbnVwX3Rlc3Rcbitfc2hvd19yZXN1bHQgJFRJRCAkRVJSX0NPREVcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjMyOjQ1Ljg0NjMwMTI3MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDY5OTExNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdWJsayBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaGl0cyBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYCBhbmQgYWRkcyBzb21lIHRlc3RzIHRvIHRoZSBgc2VsZnRlc3RzL3VibGsvYCBhcmVhLiBUaGUgY29yZSBrZXJuZWwgY2hhbmdlIGlzIGEgc2ltcGxlIHZhbGlkYXRpb24gY2hlY2s6IHdlJ3JlIGNoYW5naW5nIHRoZSBsb2dpYyBpbiBgdWJsa192YWxpZGF0ZV9wYXJhbXNgIHRvIGVuc3VyZSBgcC1cdTAwM2VjaHVua19zZWN0b3JzYCBpcyBhIHBvd2VyIG9mIDIgd2hlbiB0aGUgdWJsayBkZXZpY2UgaXMgem9uZWQuIFNwZWNpZmljYWxseSwgaXQncyBhIGNvZGUgbW9kaWZpY2F0aW9uIGZyb20gYCFwLVx1MDAzZWNodW5rX3NlY3RvcnNgIHRvIGAhaXNfcG93ZXJfb2ZfMihwLVx1MDAzZWNodW5rX3NlY3RvcnMpYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHByb2JlIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoaXMgaXMgYSBjb21tb24gcGl0ZmFsbCBpbiBrZXJuZWwgcGF0Y2hlcywgYnV0LCBsb29raW5nIGF0IHRoZSBjb2RlLCB0aGlzIG9uZSBzZWVtcyBwcmV0dHkgY2xlYW4uIFRoZSBwYXRjaCBpcyBzaW1wbHkgcmVmaW5pbmcgYW4gZXhpc3RpbmcgdmFsaWRhdGlvbiBzdGVwLiBOb3csIGlmIGBwLVx1MDAzZWNodW5rX3NlY3RvcnNgIHdlcmUgMCwgdGhlbiBgaXNfcG93ZXJfb2ZfMigwKWAgZXZhbHVhdGVzIHRvIGZhbHNlLCB0aHVzIG5lZ2F0aW5nIHRvIHRydWUuIFNvIGl0IGlzIHN0aWxsIGNhdWdodCBhbmQgcmVqZWN0ZWQuIFRoZXJlZm9yZSwgdGhlcmUncyBubyB3YXkgd2UncmUgYWNjaWRlbnRhbGx5IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyBpbmZvcm1hdGlvbiBoZXJlLCBiZWNhdXNlIGl0IGlzIG9ubHkgY2hlY2tpbmcgYSB2YWxpZGF0aW9uIHJldHVybi4gSSB3YXMgc2xpZ2h0bHkgY29uY2VybmVkIHRoYXQgdGhpcyBjb3VsZCBoYXZlIGludHJvZHVjZWQgc29tZSBraW5kIG9mIGV4cGxvaXRhYmxlIG1lbW9yeSBjb25kaXRpb24gYnV0IHRoYXQgaXMgbm90IHRoZSBjYXNlLiBUaGlzIGlzIGEgc2ltcGxlIHBvd2VyLW9mLTIgdmFsaWRhdGlvbiB0byBwcmV2ZW50IHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIG9yIG90aGVyIGlzc3VlcyB3aXRoIHpvbmVkIGRldmljZXMuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYnV0IHRoZSBkaWZmIGNvbmZpcm1zIGl0LiBUaGUgcGF0Y2gncyBpbXBhY3QgaXMgbWluaW1hbC4gVGhlIHJlc3Qgb2YgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGp1c3QgcmVsYXRlZCB0byB0aGUgdXNlci1zcGFjZSBzZWxmdGVzdHM7IHNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgYWRkZWQgdGVzdCBzdXBwb3J0IGZvciB0aGUgYHNldF9wYXJhbXNgIGNvbW1hbmQgYW5kIHZhcmlvdXMgcGFyYW1ldGVycy5cblxuU28sIGZyb20gYSBzZWN1cml0eSBzdGFuZHBvaW50LCB0aGlzIGlzIGEgbG93LXJpc2sgY2hhbmdlLiBUaGVyZSdzIG5vIG1hbmlwdWxhdGlvbiBvZiBtZW1vcnkgYWxsb2NhdGlvbiwgbm8gY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBiZSBhYnVzZWQsIGFuZCBubyBtb2RpZmljYXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzLiBUaGUga2VybmVsIGNoYW5nZSBpcyBleGNsdXNpdmVseSBhIHZhbGlkYXRpb24gY2hlY2sgb24gYW4gZXhpc3RpbmcgcGFyYW1ldGVyLiBJIGRvbid0IHNlZSBhbnkgcmVhc29uIHRvIHdvcnJ5IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8gbGVha3MuIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGlzc3Vlcy4gV2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkzOSwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzozMjo1NS4zMTYyMTY4NDJaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AgaW4gYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AgdG8gZW5zdXJlIHRoYXQgYGNodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiBmb3Igem9uZWQgZGV2aWNlcy4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIG9mIHVwZGF0ZXMgdG8gdGhlIHVzZXItc3BhY2Ugc2VsZnRlc3RzIChgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9gKS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBrZXJuZWwgY2hhbmdlIGlzIHB1cmVseSBhIHZhbGlkYXRpb24gY2hlY2sgb24gYW4gZXhpc3RpbmcgcGFyYW1ldGVyLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB1YmxrX3ZhbGlkYXRlX3BhcmFtc2AgaW4gYGRyaXZlcnMvYmxvY2svdWJsa19kcnYuY2AgdG8gZW5zdXJlIHRoYXQgYGNodW5rX3NlY3RvcnNgIGlzIGEgcG93ZXIgb2YgMiBmb3Igem9uZWQgZGV2aWNlcy4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIG9mIHVwZGF0ZXMgdG8gdGhlIHVzZXItc3BhY2Ugc2VsZnRlc3RzIChgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdWJsay9gKS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBrZXJuZWwgY2hhbmdlIGlzIHB1cmVseSBhIHZhbGlkYXRpb24gY2hlY2sgb24gYW4gZXhpc3RpbmcgcGFyYW1ldGVyLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq5bx4[1] Phase: Succeeded StartedAt: 2026-08-14 03:33:06 +0000 UTC FinishedAt: 2026-08-14 03:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 03:33:06 +0000 UTC FinishedAt: 2026-08-14 03:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2] Phase: Succeeded StartedAt: 2026-08-14 03:33:06 +0000 UTC FinishedAt: 2026-08-14 05:01:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 03:33:06 +0000 UTC FinishedAt: 2026-08-14 05:01:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 03:33:06 +0000 UTC FinishedAt: 2026-08-14 03:33:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 03:33:06 +0000 UTC FinishedAt: 2026-08-14 03:33:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq5bx4/series-workflowq5bx4-convert-artifact-1529116177/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 03:33:16 +0000 UTC FinishedAt: 2026-08-14 03:51:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 03:33:16 +0000 UTC FinishedAt: 2026-08-14 03:51:23 +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:*3e763e62-eeeb-4d2f-a749-50c329748f5f,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-workflowq5bx4/series-workflowq5bx4-convert-artifact-1529116177/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": "ab86688d-b5d6-4093-8b31-63d1a95e1a08", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq5bx4/series-workflowq5bx4-build-action-1750489023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 03:33:16 +0000 UTC FinishedAt: 2026-08-14 03:51:13 +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:*3e763e62-eeeb-4d2f-a749-50c329748f5f,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-workflowq5bx4/series-workflowq5bx4-convert-artifact-1529116177/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": "ab86688d-b5d6-4093-8b31-63d1a95e1a08", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq5bx4/series-workflowq5bx4-build-action-1750489023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 03:51:23 +0000 UTC FinishedAt: 2026-08-14 03:51:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 03:51:23 +0000 UTC FinishedAt: 2026-08-14 03:51:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 03:51:23 +0000 UTC FinishedAt: 2026-08-14 03:51:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 03:51:23 +0000 UTC FinishedAt: 2026-08-14 03:51:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq5bx4/series-workflowq5bx4-convert-artifact-147793636/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 03:51:33 +0000 UTC FinishedAt: 2026-08-14 03:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 03:51:33 +0000 UTC FinishedAt: 2026-08-14 03:53:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ab86688d-b5d6-4093-8b31-63d1a95e1a08,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq5bx4/series-workflowq5bx4-build-action-1750489023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 03:53:26 +0000 UTC FinishedAt: 2026-08-14 03:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 03:53:26 +0000 UTC FinishedAt: 2026-08-14 03:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 03:53:26 +0000 UTC FinishedAt: 2026-08-14 04:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 03:53:26 +0000 UTC FinishedAt: 2026-08-14 04:11:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3e763e62-eeeb-4d2f-a749-50c329748f5f,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-workflowq5bx4/series-workflowq5bx4-convert-artifact-147793636/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": "0c795055-1ffd-429b-926b-652efcd9041e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq5bx4/series-workflowq5bx4-build-action-3888984176/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 03:53:26 +0000 UTC FinishedAt: 2026-08-14 04:11:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3e763e62-eeeb-4d2f-a749-50c329748f5f,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-workflowq5bx4/series-workflowq5bx4-convert-artifact-147793636/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": "0c795055-1ffd-429b-926b-652efcd9041e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq5bx4/series-workflowq5bx4-build-action-3888984176/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 04:11:40 +0000 UTC FinishedAt: 2026-08-14 04:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 04:11:40 +0000 UTC FinishedAt: 2026-08-14 04:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 04:11:40 +0000 UTC FinishedAt: 2026-08-14 04:13:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 04:11:40 +0000 UTC FinishedAt: 2026-08-14 04:13:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0c795055-1ffd-429b-926b-652efcd9041e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq5bx4/series-workflowq5bx4-build-action-3888984176/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 04:13:44 +0000 UTC FinishedAt: 2026-08-14 05:01:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 04:13:44 +0000 UTC FinishedAt: 2026-08-14 05:01:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*ab86688d-b5d6-4093-8b31-63d1a95e1a08,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0c795055-1ffd-429b-926b-652efcd9041e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq5bx4/series-workflowq5bx4-build-action-1750489023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq5bx4/series-workflowq5bx4-build-action-3888984176/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 04:13:44 +0000 UTC FinishedAt: 2026-08-14 04:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 04:13:44 +0000 UTC FinishedAt: 2026-08-14 04:13:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq5bx4/series-workflowq5bx4-convert-artifact-597871981/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 04:13:44 +0000 UTC FinishedAt: 2026-08-14 04:13:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 04:13:44 +0000 UTC FinishedAt: 2026-08-14 04:13:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 04:13:44 +0000 UTC FinishedAt: 2026-08-14 04:13:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 04:13:54 +0000 UTC FinishedAt: 2026-08-14 05:01:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq5bx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ctrl_uring_cmd","ublk_ctrl_set_params"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK","BLK_DEV_ZONED"],"series_id":"7a818ae2-a5d5-4f08-bb0b-5532ba5db1f6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 04:13:54 +0000 UTC FinishedAt: 2026-08-14 05:01:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ab86688d-b5d6-4093-8b31-63d1a95e1a08,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0c795055-1ffd-429b-926b-652efcd9041e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq5bx4/series-workflowq5bx4-build-action-1750489023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq5bx4/series-workflowq5bx4-build-action-3888984176/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq5bx4/series-workflowq5bx4-convert-artifact-597871981/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}