Name: series-workflowv94wz Phase: Succeeded StartedAt: 2026-08-02 18:32:36 +0000 UTC FinishedAt: 2026-08-02 22:46:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[0] Phase: Succeeded StartedAt: 2026-08-02 18:32:36 +0000 UTC FinishedAt: 2026-08-02 18:53:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 18:32:36 +0000 UTC FinishedAt: 2026-08-02 18:53:37 +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": "b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "BLK_CGROUP", "BLK_DEV_THROTTLING", "BLK_CGROUP_IOLATENCY", "BLK_CGROUP_IOCOST", "IOSCHED_BFQ", "BFQ_GROUP_IOSCHED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "BLK_CGROUP", "BLK_DEV_THROTTLING", "BLK_CGROUP_IOLATENCY", "BLK_CGROUP_IOCOST", "IOSCHED_BFQ", "BFQ_GROUP_IOSCHED" ], "series_id": "f8dcdb2a-7098-48f2-b459-b3553fd4e76e" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blkcg_activate_policy", "blkcg_deactivate_policy", "blkcg_exit_disk" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1RIUk9UVExJTkcmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0xBVEVOQ1kmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0NPU1QmIzM0OywKICAgICYjMzQ7SU9TQ0hFRF9CRlEmIzM0OywKICAgICYjMzQ7QkZRX0dST1VQX0lPU0NIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtjZ19hY3RpdmF0ZV9wb2xpY3kmIzM0OywKICAgICYjMzQ7YmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kmIzM0OywKICAgICYjMzQ7YmxrY2dfZXhpdF9kaXNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYmxvY2sgY2dyb3VwIHBvbGljeSBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiBhbmQgZGlzayB0ZWFyZG93biBieSBhZGRpbmcgYSBtdXRleCBsb2NrLiBUaGVzZSBhcmUgY29yZSBibG9jayBjZ3JvdXAgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBkeW5hbWljYWxseSB3aGVuIGVuYWJsaW5nL2Rpc2FibGluZyBjZ3JvdXAgcG9saWNpZXMgb3IgZGVzdHJveWluZyBibG9jayBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzA1ZDgxZGNhMmJkYjk0NTk5Y2UzM2IwYjJmYWE1ODJiMGJkYjQ1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTg6NTE6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jXG5pbmRleCBkOTY3NjEyNmM1YjVkLi4zNTQ2MzdmM2IxNThjIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNncm91cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY2dyb3VwLmNcbkBAIC01NjksNiAmIzQzOzU2OSw3IEBAIHN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveV9hbGwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRpbnQgaTtcbiBcbiByZXN0YXJ0OlxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cS1cdTAwM2VibGtjZ19tdXRleCk7XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsa2csIFx1MDAyNnEtXHUwMDNlYmxrZ19saXN0LCBxX25vZGUpIHtcbiBcdFx0c3RydWN0IGJsa2NnICpibGtjZyA9IGJsa2ctXHUwMDNlYmxrY2c7XG5AQCAtNTg3LDYgJiM0Mzs1ODgsNyBAQCBzdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3lfYWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0XHRpZiAoISgtLWNvdW50KSkge1xuIFx0XHRcdGNvdW50ID0gQkxLR19ERVNUUk9ZX0JBVENIX1NJWkU7XG4gXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4mIzQzO1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZxLVx1MDAzZWJsa2NnX211dGV4KTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0XHRnb3RvIHJlc3RhcnQ7XG4gXHRcdH1cbkBAIC02MDYsNiAmIzQzOzYwOCw3IEBAIHN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveV9hbGwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXG4gXHRxLVx1MDAzZXJvb3RfYmxrZyA9IE5VTEw7XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2cS1cdTAwM2VxdWV1ZV9sb2NrKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cS1cdTAwM2VibGtjZ19tdXRleCk7XG4gXG4gXHR3YWtlX3VwX3ZhcihcdTAwMjZxLVx1MDAzZXJvb3RfYmxrZyk7XG4gfVxuQEAgLTE1MjYsNiAmIzQzOzE1MjksMzEgQEAgc3RydWN0IGNncm91cF9zdWJzeXMgaW9fY2dycF9zdWJzeXMgPSB7XG4gfTtcbiBFWFBPUlRfU1lNQk9MX0dQTChpb19jZ3JwX3N1YnN5cyk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRlYXIgZG93biBwZXItYmxrZyBwb2xpY3kgZGF0YSBmb3IgQHBvbCBvbiBAcS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJsa2NnX2dxICpibGtnO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsa2csIFx1MDAyNnEtXHUwMDNlYmxrZ19saXN0LCBxX25vZGUpIHtcbiYjNDM7XHRcdHN0cnVjdCBibGtjZyAqYmxrY2cgPSBibGtnLVx1MDAzZWJsa2NnO1xuJiM0MztcdFx0c3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkO1xuJiM0MztcbiYjNDM7XHRcdHNwaW5fbG9jayhcdTAwMjZibGtjZy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHBkID0gYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF07XG4mIzQzO1x0XHRpZiAocGQpIHtcbiYjNDM7XHRcdFx0aWYgKHBkLVx1MDAzZW9ubGluZSBcdTAwMjZcdTAwMjYgcG9sLVx1MDAzZXBkX29mZmxpbmVfZm4pXG4mIzQzO1x0XHRcdFx0cG9sLVx1MDAzZXBkX29mZmxpbmVfZm4ocGQpO1xuJiM0MztcdFx0XHRwZC1cdTAwM2VvbmxpbmUgPSBmYWxzZTtcbiYjNDM7XHRcdFx0cG9sLVx1MDAzZXBkX2ZyZWVfZm4ocGQpO1xuJiM0MztcdFx0XHRXUklURV9PTkNFKGJsa2ctXHUwMDNlcGRbcG9sLVx1MDAzZXBsaWRdLCBOVUxMKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmJsa2NnLVx1MDAzZWxvY2spO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBibGtjZ19hY3RpdmF0ZV9wb2xpY3kgLSBhY3RpdmF0ZSBhIGJsa2NnIHBvbGljeSBvbiBhIGdlbmRpc2tcbiAgKiBAZGlzazogZ2VuZGlzayBvZiBpbnRlcmVzdFxuQEAgLTE1NjMsNiAmIzQzOzE1OTEsOCBAQCBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG4gXG4gXHRpZiAocXVldWVfaXNfbXEocSkpXG4gXHRcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZxLVx1MDAzZWJsa2NnX211dGV4KTtcbiByZXRyeTpcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2cS1cdTAwM2VxdWV1ZV9sb2NrKTtcbiBcbkBAIC0xNTcyLDYgJiM0MzsxNjAyLDggQEAgaW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuIFxuIFx0XHRpZiAoYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF0pXG4gXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoaGxpc3RfdW5oYXNoZWQoXHUwMDI2YmxrZy1cdTAwM2VibGtjZ19ub2RlKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdC8qIElmIHByZWFsbG9jIG1hdGNoZXMsIHVzZSBpdDsgb3RoZXJ3aXNlIHRyeSBHRlBfTk9XQUlUICovXG4gXHRcdGlmIChibGtnID09IHBpbm5lZF9ibGtnKSB7XG5AQCAtMTYyNSw2ICYjNDM7MTY1Nyw3IEBAIGludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcbiBcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIG91dDpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cS1cdTAwM2VibGtjZ19tdXRleCk7XG4gXHRpZiAocXVldWVfaXNfbXEocSkpXG4gXHRcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4gXHRpZiAocGlubmVkX2Jsa2cpXG5AQCAtMTYzNiwyMSAmIzQzOzE2NjksNyBAQCBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG4gZW5vbWVtOlxuIFx0LyogYWxsb2MgZmFpbGVkLCB0YWtlIGRvd24gZXZlcnl0aGluZyAqL1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShibGtnLCBcdTAwMjZxLVx1MDAzZWJsa2dfbGlzdCwgcV9ub2RlKSB7XG4tXHRcdHN0cnVjdCBibGtjZyAqYmxrY2cgPSBibGtnLVx1MDAzZWJsa2NnO1xuLVx0XHRzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQ7XG4tXG4tXHRcdHNwaW5fbG9jayhcdTAwMjZibGtjZy1cdTAwM2Vsb2NrKTtcbi1cdFx0cGQgPSBibGtnLVx1MDAzZXBkW3BvbC1cdTAwM2VwbGlkXTtcbi1cdFx0aWYgKHBkKSB7XG4tXHRcdFx0aWYgKHBkLVx1MDAzZW9ubGluZSBcdTAwMjZcdTAwMjYgcG9sLVx1MDAzZXBkX29mZmxpbmVfZm4pXG4tXHRcdFx0XHRwb2wtXHUwMDNlcGRfb2ZmbGluZV9mbihwZCk7XG4tXHRcdFx0cGQtXHUwMDNlb25saW5lID0gZmFsc2U7XG4tXHRcdFx0cG9sLVx1MDAzZXBkX2ZyZWVfZm4ocGQpO1xuLVx0XHRcdFdSSVRFX09OQ0UoYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF0sIE5VTEwpO1xuLVx0XHR9XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmJsa2NnLVx1MDAzZWxvY2spO1xuLVx0fVxuJiM0MztcdGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMocSwgcG9sKTtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFx0cmV0ID0gLUVOT01FTTtcbiBcdGdvdG8gb3V0O1xuQEAgLTE2NjksNyAmIzQzOzE2ODgsNiBAQCB2b2lkIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuIHtcbiBcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGlzay1cdTAwM2VxdWV1ZTtcbi1cdHN0cnVjdCBibGtjZ19ncSAqYmxrZztcbiBcdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiBcbiBcdGlmICghYmxrY2dfcG9saWN5X2VuYWJsZWQocSwgcG9sKSlcbkBAIC0xNjgyLDIwICYjNDM7MTcwMCw3IEBAIHZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4gXG4gXHRfX2NsZWFyX2JpdChwb2wtXHUwMDNlcGxpZCwgcS1cdTAwM2VibGtjZ19wb2xzKTtcbi1cbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoYmxrZywgXHUwMDI2cS1cdTAwM2VibGtnX2xpc3QsIHFfbm9kZSkge1xuLVx0XHRzdHJ1Y3QgYmxrY2cgKmJsa2NnID0gYmxrZy1cdTAwM2VibGtjZztcbi1cbi1cdFx0c3Bpbl9sb2NrKFx1MDAyNmJsa2NnLVx1MDAzZWxvY2spO1xuLVx0XHRpZiAoYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF0pIHtcbi1cdFx0XHRpZiAoYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF0tXHUwMDNlb25saW5lIFx1MDAyNlx1MDAyNiBwb2wtXHUwMDNlcGRfb2ZmbGluZV9mbilcbi1cdFx0XHRcdHBvbC1cdTAwM2VwZF9vZmZsaW5lX2ZuKGJsa2ctXHUwMDNlcGRbcG9sLVx1MDAzZXBsaWRdKTtcbi1cdFx0XHRwb2wtXHUwMDNlcGRfZnJlZV9mbihibGtnLVx1MDAzZXBkW3BvbC1cdTAwM2VwbGlkXSk7XG4tXHRcdFx0YmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF0gPSBOVUxMO1xuLVx0XHR9XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmJsa2NnLVx1MDAzZWxvY2spO1xuLVx0fVxuLVxuJiM0MztcdGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMocSwgcG9sKTtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnEtXHUwMDNlYmxrY2dfbXV0ZXgpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUJiMzNDssCiAgICAmIzM0O0lPU0NIRURfQkZRJiMzNDssCiAgICAmIzM0O0JGUV9HUk9VUF9JT1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrY2dfYWN0aXZhdGVfcG9saWN5JiMzNDssCiAgICAmIzM0O2Jsa2NnX2RlYWN0aXZhdGVfcG9saWN5JiMzNDssCiAgICAmIzM0O2Jsa2NnX2V4aXRfZGlzayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGJsb2NrIGNncm91cCBwb2xpY3kgYWN0aXZhdGlvbi9kZWFjdGl2YXRpb24gYW5kIGRpc2sgdGVhcmRvd24gYnkgYWRkaW5nIGEgbXV0ZXggbG9jay4gVGhlc2UgYXJlIGNvcmUgYmxvY2sgY2dyb3VwIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZHluYW1pY2FsbHkgd2hlbiBlbmFibGluZy9kaXNhYmxpbmcgY2dyb3VwIHBvbGljaWVzIG9yIGRlc3Ryb3lpbmcgYmxvY2sgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMwNWQ4MWRjYTJiZGI5NDU5OWNlMzNiMGIyZmFhNTgyYjBiZGI0NTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDE4OjUxOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jCmluZGV4IGQ5Njc2MTI2YzViNWQuLjM1NDYzN2YzYjE1OGMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTU2OSw2ICYjNDM7NTY5LDcgQEAgc3RhdGljIHZvaWQgYmxrZ19kZXN0cm95X2FsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAlpbnQgaTsKIAogcmVzdGFydDoKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3EtJmd0O2Jsa2NnX211dGV4KTsKIAlzcGluX2xvY2tfaXJxKCZhbXA7cS0mZ3Q7cXVldWVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShibGtnLCAmYW1wO3EtJmd0O2Jsa2dfbGlzdCwgcV9ub2RlKSB7CiAJCXN0cnVjdCBibGtjZyAqYmxrY2cgPSBibGtnLSZndDtibGtjZzsKQEAgLTU4Nyw2ICYjNDM7NTg4LDcgQEAgc3RhdGljIHZvaWQgYmxrZ19kZXN0cm95X2FsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAkJaWYgKCEoLS1jb3VudCkpIHsKIAkJCWNvdW50ID0gQkxLR19ERVNUUk9ZX0JBVENIX1NJWkU7CiAJCQlzcGluX3VubG9ja19pcnEoJmFtcDtxLSZndDtxdWV1ZV9sb2NrKTsKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDtxLSZndDtibGtjZ19tdXRleCk7CiAJCQljb25kX3Jlc2NoZWQoKTsKIAkJCWdvdG8gcmVzdGFydDsKIAkJfQpAQCAtNjA2LDYgJiM0Mzs2MDgsNyBAQCBzdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3lfYWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogCiAJcS0mZ3Q7cm9vdF9ibGtnID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnEoJmFtcDtxLSZndDtxdWV1ZV9sb2NrKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cS0mZ3Q7YmxrY2dfbXV0ZXgpOwogCiAJd2FrZV91cF92YXIoJmFtcDtxLSZndDtyb290X2Jsa2cpOwogfQpAQCAtMTUyNiw2ICYjNDM7MTUyOSwzMSBAQCBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBpb19jZ3JwX3N1YnN5cyA9IHsKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChpb19jZ3JwX3N1YnN5cyk7CiAKJiM0MzsvKgomIzQzOyAqIFRlYXIgZG93biBwZXItYmxrZyBwb2xpY3kgZGF0YSBmb3IgQHBvbCBvbiBAcS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2c7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoYmxrZywgJmFtcDtxLSZndDtibGtnX2xpc3QsIHFfbm9kZSkgewomIzQzOwkJc3RydWN0IGJsa2NnICpibGtjZyA9IGJsa2ctJmd0O2Jsa2NnOwomIzQzOwkJc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7YmxrY2ctJmd0O2xvY2spOwomIzQzOwkJcGQgPSBibGtnLSZndDtwZFtwb2wtJmd0O3BsaWRdOwomIzQzOwkJaWYgKHBkKSB7CiYjNDM7CQkJaWYgKHBkLSZndDtvbmxpbmUgJmFtcDsmYW1wOyBwb2wtJmd0O3BkX29mZmxpbmVfZm4pCiYjNDM7CQkJCXBvbC0mZ3Q7cGRfb2ZmbGluZV9mbihwZCk7CiYjNDM7CQkJcGQtJmd0O29ubGluZSA9IGZhbHNlOwomIzQzOwkJCXBvbC0mZ3Q7cGRfZnJlZV9mbihwZCk7CiYjNDM7CQkJV1JJVEVfT05DRShibGtnLSZndDtwZFtwb2wtJmd0O3BsaWRdLCBOVUxMKTsKJiM0MzsJCX0KJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7YmxrY2ctJmd0O2xvY2spOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoqCiAgKiBibGtjZ19hY3RpdmF0ZV9wb2xpY3kgLSBhY3RpdmF0ZSBhIGJsa2NnIHBvbGljeSBvbiBhIGdlbmRpc2sKICAqIEBkaXNrOiBnZW5kaXNrIG9mIGludGVyZXN0CkBAIC0xNTYzLDYgJiM0MzsxNTkxLDggQEAgaW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKQogCiAJaWYgKHF1ZXVlX2lzX21xKHEpKQogCQltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUocSk7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtxLSZndDtibGtjZ19tdXRleCk7CiByZXRyeToKIAlzcGluX2xvY2tfaXJxKCZhbXA7cS0mZ3Q7cXVldWVfbG9jayk7CiAKQEAgLTE1NzIsNiAmIzQzOzE2MDIsOCBAQCBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpCiAKIAkJaWYgKGJsa2ctJmd0O3BkW3BvbC0mZ3Q7cGxpZF0pCiAJCQljb250aW51ZTsKJiM0MzsJCWlmIChobGlzdF91bmhhc2hlZCgmYW1wO2Jsa2ctJmd0O2Jsa2NnX25vZGUpKQomIzQzOwkJCWNvbnRpbnVlOwogCiAJCS8qIElmIHByZWFsbG9jIG1hdGNoZXMsIHVzZSBpdDsgb3RoZXJ3aXNlIHRyeSBHRlBfTk9XQUlUICovCiAJCWlmIChibGtnID09IHBpbm5lZF9ibGtnKSB7CkBAIC0xNjI1LDYgJiM0MzsxNjU3LDcgQEAgaW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKQogCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cS0mZ3Q7cXVldWVfbG9jayk7CiBvdXQ6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3EtJmd0O2Jsa2NnX211dGV4KTsKIAlpZiAocXVldWVfaXNfbXEocSkpCiAJCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7CiAJaWYgKHBpbm5lZF9ibGtnKQpAQCAtMTYzNiwyMSAmIzQzOzE2NjksNyBAQCBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpCiBlbm9tZW06CiAJLyogYWxsb2MgZmFpbGVkLCB0YWtlIGRvd24gZXZlcnl0aGluZyAqLwogCXNwaW5fbG9ja19pcnEoJmFtcDtxLSZndDtxdWV1ZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsa2csICZhbXA7cS0mZ3Q7YmxrZ19saXN0LCBxX25vZGUpIHsKLQkJc3RydWN0IGJsa2NnICpibGtjZyA9IGJsa2ctJmd0O2Jsa2NnOwotCQlzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQ7Ci0KLQkJc3Bpbl9sb2NrKCZhbXA7YmxrY2ctJmd0O2xvY2spOwotCQlwZCA9IGJsa2ctJmd0O3BkW3BvbC0mZ3Q7cGxpZF07Ci0JCWlmIChwZCkgewotCQkJaWYgKHBkLSZndDtvbmxpbmUgJmFtcDsmYW1wOyBwb2wtJmd0O3BkX29mZmxpbmVfZm4pCi0JCQkJcG9sLSZndDtwZF9vZmZsaW5lX2ZuKHBkKTsKLQkJCXBkLSZndDtvbmxpbmUgPSBmYWxzZTsKLQkJCXBvbC0mZ3Q7cGRfZnJlZV9mbihwZCk7Ci0JCQlXUklURV9PTkNFKGJsa2ctJmd0O3BkW3BvbC0mZ3Q7cGxpZF0sIE5VTEwpOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZhbXA7YmxrY2ctJmd0O2xvY2spOwotCX0KJiM0MzsJYmxrY2dfcG9saWN5X3RlYXJkb3duX3BkcyhxLCBwb2wpOwogCXNwaW5fdW5sb2NrX2lycSgmYW1wO3EtJmd0O3F1ZXVlX2xvY2spOwogCXJldCA9IC1FTk9NRU07CiAJZ290byBvdXQ7CkBAIC0xNjY5LDcgJiM0MzsxNjg4LDYgQEAgdm9pZCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAkJCSAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKQogewogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGlzay0mZ3Q7cXVldWU7Ci0Jc3RydWN0IGJsa2NnX2dxICpibGtnOwogCXVuc2lnbmVkIGludCBtZW1mbGFnczsKIAogCWlmICghYmxrY2dfcG9saWN5X2VuYWJsZWQocSwgcG9sKSkKQEAgLTE2ODIsMjAgJiM0MzsxNzAwLDcgQEAgdm9pZCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlzcGluX2xvY2tfaXJxKCZhbXA7cS0mZ3Q7cXVldWVfbG9jayk7CiAKIAlfX2NsZWFyX2JpdChwb2wtJmd0O3BsaWQsIHEtJmd0O2Jsa2NnX3BvbHMpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShibGtnLCAmYW1wO3EtJmd0O2Jsa2dfbGlzdCwgcV9ub2RlKSB7Ci0JCXN0cnVjdCBibGtjZyAqYmxrY2cgPSBibGtnLSZndDtibGtjZzsKLQotCQlzcGluX2xvY2soJmFtcDtibGtjZy0mZ3Q7bG9jayk7Ci0JCWlmIChibGtnLSZndDtwZFtwb2wtJmd0O3BsaWRdKSB7Ci0JCQlpZiAoYmxrZy0mZ3Q7cGRbcG9sLSZndDtwbGlkXS0mZ3Q7b25saW5lICZhbXA7JmFtcDsgcG9sLSZndDtwZF9vZmZsaW5lX2ZuKQotCQkJCXBvbC0mZ3Q7cGRfb2ZmbGluZV9mbihibGtnLSZndDtwZFtwb2wtJmd0O3BsaWRdKTsKLQkJCXBvbC0mZ3Q7cGRfZnJlZV9mbihibGtnLSZndDtwZFtwb2wtJmd0O3BsaWRdKTsKLQkJCWJsa2ctJmd0O3BkW3BvbC0mZ3Q7cGxpZF0gPSBOVUxMOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZhbXA7YmxrY2ctJmd0O2xvY2spOwotCX0KLQomIzQzOwlibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzKHEsIHBvbCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cS0mZ3Q7cXVldWVfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cS0mZ3Q7YmxrY2dfbXV0ZXgpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQmxvY2sgQ2dyb3VwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYmxvY2svYmxrLWNncm91cC5jYC4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBjb3JlIGZ1bmN0aW9uczogYGJsa2dfZGVzdHJveV9hbGxgLCBgYmxrY2dfYWN0aXZhdGVfcG9saWN5YCwgYW5kIGBibGtjZ19kZWFjdGl2YXRlX3BvbGljeWAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBhIG5ldyBmdW5jdGlvbiwgYGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHNgLCB3aGljaCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlZW4gcHVsbGVkIG91dCBvZiB0aGUgYWN0aXZhdGlvbiBhbmQgZGVhY3RpdmF0aW9uIHJvdXRpbmVzIOKAkyBwcm9iYWJseSBmb3IgYmV0dGVyIGNvZGUgcmV1c2UgYW5kIG9yZ2FuaXphdGlvbiwgc21hcnQuCgpUaGUgYWRkaXRpb24gb2YgdGhvc2UgYG11dGV4X2xvY2tgIGFuZCBgbXV0ZXhfdW5sb2NrYCBjYWxscyBhcm91bmQgYHEtJmd0O2Jsa2NnX211dGV4YCBpbiBgYmxrZ19kZXN0cm95X2FsbGAgYW5kIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBUaGlzIHN1Z2dlc3RzIGEgcmFjZSBjb25kaXRpb24gb3IgY29uY3VycmVudCBhY2Nlc3MgaXNzdWUgd2FzIGFkZHJlc3NlZC4gUHJvdGVjdGluZyBzaGFyZWQgZGF0YSB3aXRoIG11dGV4ZXMgaXMgYWx3YXlzIGEgZ29vZCBzaWduIG9mIGNhcmVmdWxuZXNzLiBBbHNvIHRoYXQgYGlmIChobGlzdF91bmhhc2hlZCgmYW1wO2Jsa2ctJmd0O2Jsa2NnX25vZGUpKSBjb250aW51ZTtgIGluIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGltcGxpZXMgdGhlIGNvZGUgaXMgcHJldmVudGluZyB3b3JrIG9uIHVuaGFzaGVkIGVsZW1lbnRzLiBGaW5lLWdyYWluZWQgY29udHJvbCwgSSBsaWtlIGl0LgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBibG9jayBjZ3JvdXAgc3Vic3lzdGVtLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIHJlYWNoYWJsZSBjb2RlIHBhdGggYW5kIHNob3VsZCBiZSBmdXp6ZWQgdGhvcm91Z2hseS4gVGltZSB0byBzdGFydCB0aGlua2luZyBhYm91dCB0ZXN0IGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSBpbiBteSB0ZXN0aW5nIGVudmlyb25tZW50LiBMZXQmIzM5O3Mgc2VlLi4uIGEgcXVpY2sgc2VhcmNoIGZvciBgYmxrLWNncm91cC5jYCBpbiB0aGUgYGJsb2NrL01ha2VmaWxlYCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29uZmlndXJhdGlvbiBjbHVlcyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGstY2dyb3VwLmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpcmVjdGluZyBNeSBBdHRlbnRpb246IFRoZSBgYmxvY2svTWFrZWZpbGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgcmlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIExldCYjMzk7cyBjdXQgdGhyb3VnaCBhbnkgbGF5ZXJzIG9mIGFic3RyYWN0aW9uIGFuZCBnbyBzdHJhaWdodCB0byB0aGUgYGJsb2NrL01ha2VmaWxlYC4gTm8gbmVlZCB0byBiZWF0IGFyb3VuZCB0aGUgYnVzaDsgSSYjMzk7bSBnb2luZyB0byBleGFtaW5lIHRoaXMgZGlyZWN0bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGF0IGl0cyBtb3N0IGZ1bmRhbWVudGFsIGxldmVsLCBzbyB0aGUgYE1ha2VmaWxlYCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhpbmdzIGFyZSBiZWluZyBvcmNoZXN0cmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgYmxvY2sgbGF5ZXJcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Q09OVEVYVF9BTkFMWVNJUyA6PSB5XG4gICA3Olx0XG4gICA4Olx0b2JqLXlcdFx0Oj0gYmRldi5vIGZvcHMubyBiaW8ubyBlbGV2YXRvci5vIGJsay1jb3JlLm8gYmxrLXN5c2ZzLm8gXFxcbiAgIDk6XHRcdFx0XHRibGstZmx1c2gubyBibGstc2V0dGluZ3MubyBibGstaW9jLm8gYmxrLW1hcC5vIFxcXG4gIDEwOlx0XHRcdFx0YmxrLW1lcmdlLm8gYmxrLXRpbWVvdXQubyBibGstbGliLm8gYmxrLW1xLm8gXFxcbiAgMTE6XHRcdFx0XHRibGstbXEtdGFnLm8gYmxrLW1xLWRtYS5vIGJsay1zdGF0Lm8gXFxcbiAgMTI6XHRcdFx0XHRibGstbXEtc3lzZnMubyBibGstbXEtY3B1bWFwLm8gYmxrLW1xLXNjaGVkLm8gaW9jdGwubyBcXFxuICAxMzpcdFx0XHRcdGdlbmhkLm8gaW9wcmlvLm8gYmFkYmxvY2tzLm8gcGFydGl0aW9ucy8gYmxrLXJxLXFvcy5vIFxcXG4gIDE0Olx0XHRcdFx0ZGlzay1ldmVudHMubyBibGstaWEtcmFuZ2VzLm8gZWFybHktbG9va3VwLm9cbiAgMTU6XHRcbiAgMTY6XHRvYmotJChDT05GSUdfQkxLX0VSUk9SX0lOSkVDVElPTikgJiM0Mzs9IGVycm9yLWluamVjdGlvbi5vXG4gIDE3Olx0b2JqLSQoQ09ORklHX0JMS19ERVZfQlNHX0NPTU1PTikgJiM0Mzs9IGJzZy5vXG4gIDE4Olx0b2JqLSQoQ09ORklHX0JMS19ERVZfQlNHTElCKVx0JiM0Mzs9IGJzZy1saWIub1xuICAxOTpcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQKVx0JiM0Mzs9IGJsay1jZ3JvdXAub1xuICAyMDpcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX1JXU1RBVClcdCYjNDM7PSBibGstY2dyb3VwLXJ3c3RhdC5vXG4gIDIxOlx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICYjNDM7PSBibGstY2dyb3VwLWZjLWFwcGlkLm9cbiAgMjI6XHRvYmotJChDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HKVx0JiM0Mzs9IGJsay10aHJvdHRsZS5vXG4gIDIzOlx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9QUklPKVx0JiM0Mzs9IGJsay1pb3ByaW8ub1xuICAyNDpcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWSlcdCYjNDM7PSBibGstaW9sYXRlbmN5Lm9cbiAgMjU6XHRvYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1QpXHQmIzQzOz0gYmxrLWlvY29zdC5vXG4gIDI2Olx0b2JqLSQoQ09ORklHX01RX0lPU0NIRURfREVBRExJTkUpXHQmIzQzOz0gbXEtZGVhZGxpbmUub1xuICAyNzpcdG9iai0kKENPTkZJR19NUV9JT1NDSEVEX0tZQkVSKVx0JiM0Mzs9IGt5YmVyLWlvc2NoZWQub1xuICAyODpcdGJmcS15XHRcdFx0XHQ6PSBiZnEtaW9zY2hlZC5vIGJmcS13ZjJxLm8gYmZxLWNncm91cC5vXG4gIDI5Olx0b2JqLSQoQ09ORklHX0lPU0NIRURfQkZRKVx0JiM0Mzs9IGJmcS5vXG4gIDMwOlx0XG4gIDMxOlx0b2JqLSQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKSAmIzQzOz0gYmlvLWludGVncml0eS5vIGJsay1pbnRlZ3JpdHkubyB0MTAtcGkubyBcXFxuICAzMjpcdFx0XHRcdFx0ICAgYmlvLWludGVncml0eS1hdXRvLm8gYmlvLWludGVncml0eS1mcy5vXG4gIDMzOlx0b2JqLSQoQ09ORklHX0JMS19ERVZfWk9ORUQpXHQmIzQzOz0gYmxrLXpvbmVkLm9cbiAgMzQ6XHRvYmotJChDT05GSUdfQkxLX1dCVClcdFx0JiM0Mzs9IGJsay13YnQub1xuICAzNTpcdG9iai0kKENPTkZJR19CTEtfREVCVUdfRlMpXHQmIzQzOz0gYmxrLW1xLWRlYnVnZnMub1xuICAzNjpcdG9iai0kKENPTkZJR19CTEtfU0VEX09QQUwpXHQmIzQzOz0gc2VkLW9wYWwub1xuICAzNzpcdG9iai0kKENPTkZJR19CTEtfUE0pXHRcdCYjNDM7PSBibGstcG0ub1xuICAzODpcdG9iai0kKENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT04pXHQmIzQzOz0gYmxrLWNyeXB0by5vIGJsay1jcnlwdG8tcHJvZmlsZS5vIFxcXG4gIDM5Olx0XHRcdFx0XHRcdCAgIGJsay1jcnlwdG8tc3lzZnMub1xuICA0MDpcdG9iai0kKENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0spXHQmIzQzOz0gYmxrLWNyeXB0by1mYWxsYmFjay5vXG4gIDQxOlx0b2JqLSQoQ09ORklHX0JMT0NLX0hPTERFUl9ERVBSRUNBVEVEKVx0JiM0Mzs9IGhvbGRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQxOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBCbG9jayBJTyBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gdGhlIGFyY2hpdGVjdHVyZSBJJiMzOTttIHdvcmtpbmcgd2l0aCAqZGVtYW5kcyogYENPTkZJR19CTEtfQ0dST1VQYC4gTm8gd2F5IGFyb3VuZCB0aGF0LCBpdCBzZWVtcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgbm93IGdvZXMgc3RyYWlnaHQgdG8gZGVwZW5kZW5jaWVzLiBCZWZvcmUgSSBkaXZlIGludG8gYW55IGNvZGUsIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGF0KiB0aGlzIHNldHRpbmcgZnVuZGFtZW50YWxseSByZWxpZXMgb24uIEFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgYXV0b21hdGljYWxseSBlbmFibGVkIG9yIHRoYXQgSSAqbXVzdCogc2V0IHRvIGF2b2lkIGEgY2F0YXN0cm9waGljIG1lbHRkb3duPyBPciwgY29udmVyc2VseSwgd2hhdCBmZWF0dXJlcyBtaWdodCBJIGxvc2UgaWYgdGhpcyBjb25maWcgZmxhZyBpcyBzb21laG93IG1pc3Npbmc/IFRpbWUgdG8gcGVlbCBiYWNrIHRoZSBsYXllcnMgYW5kIGdldCBhIHNvbGlkIGdyYXNwIG9mIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbSBhcyBhIHdob2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfQ0dST1VQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXG4tLVxuYmxvY2svS2NvbmZpZy00MS1cbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXG5ibG9jay9LY29uZmlnLTQzLVx0Ym9vbFxuYmxvY2svS2NvbmZpZy00NC1cbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cbmJsb2NrL0tjb25maWctNDYtXHRib29sXG4tLVxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcbi0tXG5ibG9jay9LY29uZmlnLTEzMy1cbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxuYmxvY2svS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNDQtXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuYmxvY2svS2NvbmZpZy0xNDYtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNTMtXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcbmJsb2NrL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTYzLVxuYmxvY2svS2NvbmZpZzoxNjQ6Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXG5ibG9jay9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7Q2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxMgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipTZWFyY2hpbmcgZm9yIGEgTWlzc2luZyBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpPa2F5LCBzbyBJIHdhcyBsb29raW5nIGZvciBgY29uZmlnIEJMS19DR1JPVVBgIHdpdGhpbiB0aGUgYGJsb2NrL0tjb25maWdgIGZpbGUsIGJ1dCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIG5vdCBwcmVzZW50IHRoZXJlLiBIbW0sIHRoYXQmIzM5O3MgdW51c3VhbC4gV2hlcmUgY291bGQgaXQgYmUgZGVmaW5lZD8gVGltZSB0byBicm9hZGVuIHRoZSBzZWFyY2guIExldCYjMzk7cyBkbyBhIGdsb2JhbCBzZWFyY2ggYWNyb3NzIHRoZSBlbnRpcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gdHJlZS4gTWF5YmUgaXQmIzM5O3MgZGVmaW5lZCBpbiBhIGRpZmZlcmVudCwgcmVsYXRlZCBzdWJzeXN0ZW0gb3IgZmlsZS4gVGhpcyBpcyBjb21tb247IHNvbWV0aW1lcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGxvZ2ljYWxseSBncm91cGVkIGVsc2V3aGVyZSBmb3Igb3JnYW5pemF0aW9uYWwgcmVhc29ucy4gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBjcnVjaWFsIGZsYWcgaXMgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTM5PWNvbmZpZyBCTEtfUlFfQUxMT0NfVElNRVxuLS1cbmJsb2NrL0tjb25maWctNDEtXG5ibG9jay9LY29uZmlnOjQyOmNvbmZpZyBCTEtfQ0dST1VQX1JXU1RBVFxuYmxvY2svS2NvbmZpZy00My1cdGJvb2xcbmJsb2NrL0tjb25maWctNDQtXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXG5ibG9jay9LY29uZmlnLTQ2LVx0Ym9vbFxuLS1cbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXG4tLVxuYmxvY2svS2NvbmZpZy0xMzMtXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcbmJsb2NrL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTQ0LVxuYmxvY2svS2NvbmZpZzoxNDU6Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcbmJsb2NrL0tjb25maWctMTQ2LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1wmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTUzLVxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXG5ibG9jay9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE2My1cbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xuYmxvY2svS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O0Nncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1wmIzM0O1xuLS1cbmluaXQvS2NvbmZpZz0xMDk5PWNvbmZpZyBNRU1DR19WMVxuLS1cbmluaXQvS2NvbmZpZy0xMTE1LVxuaW5pdC9LY29uZmlnOjExMTY6Y29uZmlnIEJMS19DR1JPVVBcbmluaXQvS2NvbmZpZy0xMTE3LVx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyB0aHJvdWdoIHRoaXMga2VybmVsIHNvdXJjZS4gQWgsIHRoZSBsaWtlbHkgY3VscHJpdCBpcyBpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBpbml0aWFsaXphdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBqdW1wIHJpZ2h0IHRvIGFyb3VuZCBsaW5lIDExMTYgaW4gYGluaXQvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rLiBUaGF0IHNob3VsZCBnZXQgbWUgc3RhcnRlZC4gS25vd2luZyB0aGUgS2NvbmZpZyBsYXlvdXQgYXMgSSBkbywgdGhpcyBmZWVscyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlLiBOb3csIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBkZWZpbmVkIHRoZXJlLi4uIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBvZiB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMsIG9yIG1heWJlIHNvbWUgcmVsZXZhbnQgZGVmYXVsdHMgb3IgZGVwZW5kZW5jaWVzIGRlZmluZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTEwOlx0XHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcbjExMTE6XHRcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxuMTExMjpcdFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXG4xMTEzOlx0XG4xMTE0Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjExMTU6XHRcbjExMTY6XHRjb25maWcgQkxLX0NHUk9VUFxuMTExNzpcdFx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4xMTE4Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4xMTE5Olx0XHRkZWZhdWx0IG5cbjExMjA6XHRcdGhlbHBcbjExMjE6XHRcdEdlbmVyaWMgYmxvY2sgSU8gY29udHJvbGxlciBjZ3JvdXAgaW50ZXJmYWNlLiBUaGlzIGlzIHRoZSBjb21tb25cbjExMjI6XHRcdGNncm91cCBpbnRlcmZhY2Ugd2hpY2ggc2hvdWxkIGJlIHVzZWQgYnkgdmFyaW91cyBJTyBjb250cm9sbGluZ1xuMTEyMzpcdFx0cG9saWNpZXMuXG4xMTI0Olx0XG4xMTI1Olx0XHRDdXJyZW50bHksIENGUSBJTyBzY2hlZHVsZXIgdXNlcyBpdCB0byByZWNvZ25pemUgdGFzayBncm91cHMgYW5kXG4xMTI2Olx0XHRjb250cm9sIGRpc2sgYmFuZHdpZHRoIGFsbG9jYXRpb24gKHByb3BvcnRpb25hbCB0aW1lIHNsaWNlIGFsbG9jYXRpb24pXG4xMTI3Olx0XHR0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCBpcyBhbHNvIHVzZWQgYnkgYmlvIHRocm90dGxpbmcgbG9naWMgaW5cbjExMjg6XHRcdGJsb2NrIGxheWVyIHRvIGltcGxlbWVudCB1cHBlciBsaW1pdCBpbiBJTyByYXRlcyBvbiBhIGRldmljZS5cbjExMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE0OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBoZXJlLgoKKipEZXBlbmRlbmNpZXMgYW5kIEZ1bmN0aW9uIEFuYWx5c2lzOiBCTEtfQ0dST1VQIGFuZCBCTE9DSyoqCgpSaWdodCwgc28gaXQgbG9va3MgbGlrZSBgQkxLX0NHUk9VUGAgaXMgZnVuZGFtZW50YWxseSByZWxpYW50IG9uIGBCTE9DS2AuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgZGVwZW5kZW5jeSBtYW5pZmVzdHMgaXRzZWxmIGF0IHRoZSBmdW5jdGlvbiBsZXZlbC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuCgpUaGUgb25lcyBmbGFnZ2VkIGFyZTogYGJsa2dfZGVzdHJveV9hbGxgLCBgYmxrY2dfYWN0aXZhdGVfcG9saWN5YCwgYW5kIGBibGtjZ19kZWFjdGl2YXRlX3BvbGljeWAuIE9rYXksIHRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHNldCB0byBzdGFydCB3aXRoLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBuYW1lcy4gTm93IEkgaGF2ZSB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgc291cmNlIGNvZGU7IGFyZSB0aGV5IGV4cG9ydGVkLCBvciBhcmUgdGhleSBzdGF0aWMuCgpBbHJpZ2h0LCBhIHF1aWNrIGNoZWNrIHNob3dzIHRoYXQgYGJsa2dfZGVzdHJveV9hbGxgIGlzIHN0YXRpYyDigJMgbWVhbmluZyBpdCYjMzk7cyBjb25maW5lZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0IGFuZCBub3QgYXZhaWxhYmxlIGZvciBleHRlcm5hbCBsaW5raW5nLiBCdXQsIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGFuZCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgIGFyZSBleHBvcnRlZCwgd2hpY2ggaW1wbGllcyB0aGF0IG90aGVyIG1vZHVsZXMgb3IgY29tcG9uZW50cyBjYW4gY2FsbCBhbmQgZGVwZW5kIG9uIHRoZWlyIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtjZ19hY3RpdmF0ZV9wb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWNncm91cC5jPTEyNTQ9c3RydWN0IGJmcV9ncm91cCAqYmZxX2NyZWF0ZV9ncm91cF9oaWVyYXJjaHkoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBpbnQgbm9kZSlcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtMTI1Ny1cbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMjU4Olx0cmV0ID0gYmxrY2dfYWN0aXZhdGVfcG9saWN5KGJmcWQtXHUwMDNlcXVldWUtXHUwMDNlZGlzaywgXHUwMDI2YmxrY2dfcG9saWN5X2JmcSk7XG5ibG9jay9iZnEtY2dyb3VwLmMtMTI1OS1cdGlmIChyZXQpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz03MTk2PXN0YXRpYyBpbnQgYmZxX2luaXRfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZXEpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy03MzI4LVx0ICogZnVuY3Rpb24gaXMgdGhlIGhlYWQgb2YgYSBjaGFpbiBvZiBmdW5jdGlvbiBjYWxsc1xuYmxvY2svYmZxLWlvc2NoZWQuYzo3MzI5Olx0ICogKGJmcV9jcmVhdGVfZ3JvdXBfaGllcmFyY2h5LVx1MDAzZWJsa2NnX2FjdGl2YXRlX3BvbGljeS1cdTAwM2VcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNzMzMC1cdCAqIGJsa19tcV9mcmVlemVfcXVldWUpIHRoYXQgbWF5IGxlYWQgdG8gdGhlIGludm9jYXRpb24gb2YgdGhlXG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTE1MzU9c3RhdGljIHZvaWQgYmxrY2dfcG9saWN5X3RlYXJkb3duX3BkcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTU1Ny0vKipcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNTU4OiAqIGJsa2NnX2FjdGl2YXRlX3BvbGljeSAtIGFjdGl2YXRlIGEgYmxrY2cgcG9saWN5IG9uIGEgZ2VuZGlza1xuYmxvY2svYmxrLWNncm91cC5jLTE1NTktICogQGRpc2s6IGdlbmRpc2sgb2YgaW50ZXJlc3Rcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTU3Mi0gKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNTczOmludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTc0LXtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTY3Ni19XG5ibG9jay9ibGstY2dyb3VwLmM6MTY3NzpFWFBPUlRfU1lNQk9MX0dQTChibGtjZ19hY3RpdmF0ZV9wb2xpY3kpO1xuYmxvY2svYmxrLWNncm91cC5jLTE2NzgtXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTE2ODQtICogRGVhY3RpdmF0ZSBAcG9sIG9uIEBkaXNrLiAgRm9sbG93cyB0aGUgc2FtZSBzeW5jaHJvbml6YXRpb24gcnVsZXMgYXNcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNjg1OiAqIGJsa2NnX2FjdGl2YXRlX3BvbGljeSgpLlxuYmxvY2svYmxrLWNncm91cC5jLTE2ODYtICovXG4tLVxuYmxvY2svYmxrLWNncm91cC5oPTIwMj12b2lkIGJsa2NnX3BvbGljeV91bnJlZ2lzdGVyKHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCk7XG5ibG9jay9ibGstY2dyb3VwLmg6MjAzOmludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCk7XG5ibG9jay9ibGstY2dyb3VwLmgtMjA0LXZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuYmxvY2svYmxrLWNncm91cC5oPTQ4OT1zdGF0aWMgaW5saW5lIHZvaWQgYmxrY2dfcG9saWN5X3VucmVnaXN0ZXIoc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKSB7IH1cbmJsb2NrL2Jsay1jZ3JvdXAuaDo0OTA6c3RhdGljIGlubGluZSBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svYmxrLWNncm91cC5oLTQ5MS1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKSB7IHJldHVybiAwOyB9XG4tLVxuYmxvY2svYmxrLWlvY29zdC5jPTI5MTU9c3RhdGljIGludCBibGtfaW9jb3N0X2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jLTI5NjYtXG5ibG9jay9ibGstaW9jb3N0LmM6Mjk2NzpcdHJldCA9IGJsa2NnX2FjdGl2YXRlX3BvbGljeShkaXNrLCBcdTAwMjZibGtjZ19wb2xpY3lfaW9jb3N0KTtcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTY4LVx0aWYgKHJldClcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9NzU4PXN0YXRpYyBpbnQgYmxrX2lvbGF0ZW5jeV9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy03NzAtXHRcdGdvdG8gZXJyX2ZyZWU7XG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NzcxOlx0cmV0ID0gYmxrY2dfYWN0aXZhdGVfcG9saWN5KGRpc2ssIFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3kpO1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTc3Mi1cdGlmIChyZXQpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTMxOD1zdGF0aWMgaW50IGJsa190aHJvdGxfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzM4LVx0LyogYWN0aXZhdGUgcG9saWN5LCBibGtfdGhyb3RsX2FjdGl2YXRlZCgpIHdpbGwgcmV0dXJuIHRydWUgKi9cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjEzMzk6XHRyZXQgPSBibGtjZ19hY3RpdmF0ZV9wb2xpY3koZGlzaywgXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCk7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzQwLVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjUwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gUG9saWN5IEFjdGl2YXRpb24gYW5kIERlYWN0aXZhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBgYmxrY2dfYWN0aXZhdGVfcG9saWN5YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIHRoZSBiYWxsIHJvbGxpbmcgd2hlbiBhIGJsb2NrIEkvTyBjb250cm9sIGdyb3VwIHBvbGljeSBpcyBlbmFibGVkLiBJJiMzOTttIG5vdGluZyB0aGF0IGBiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeWAsIGBibGtfaW9jb3N0X2luaXRgLCBgYmxrX2lvbGF0ZW5jeV9pbml0YCwgYW5kIGBibGtfdGhyb3RsX2luaXRgIGFsbCBjYWxsIGl0LiBUaGF0IG1ha2VzIHNlbnNlOyB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFuZCBpbml0aWFsIHN0YXRlcyBmb3IgdGhlIHZhcmlvdXMgSS9PIHNjaGVkdWxlcnMgYW5kIHJlc291cmNlIGNvbnRyb2xsZXJzLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoaXMgYWN0aXZhdGlvbiBoYXBwZW5zIHdoZW4gd2UgaGF2ZSBgQ09ORklHX0lPU0NIRURfQkZRYCwgYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVGAsIGBDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBvciBgQ09ORklHX0JMS19ERVZfVEhST1RUTElOR2Agc2V0LCBhcyB0aGVzZSBhcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuYWJsZSB0aGUgY29ycmVzcG9uZGluZyBwb2xpY2llcy4gV2XigJlyZSB0YWxraW5nIEJGUSBzY2hlZHVsZXIsIEkvTyBjb3N0IGFjY291bnRpbmcsIEkvTyBsYXRlbmN5IG1vbml0b3JpbmcsIGFuZCB0aGUgdHJhZGl0aW9uYWwgdGhyb3R0bGluZyBtZWNoYW5pc20sIHJlc3BlY3RpdmVseS4gSSBuZWVkIHRvIGJlIHN1cmUgdG8gY29uc2lkZXIgdGhhdCByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb21waWxlLXRpbWUgb3B0aW9ucyBhbmQgcnVudGltZSBiZWhhdmlvci4KCldoaWxlIEkmIzM5O20gaGVyZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgY291bnRlcnBhcnQsIGBibGtjZ19kZWFjdGl2YXRlX3BvbGljeWAsIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBvbGljaWVzIGFyZSBzaHV0IGRvd24gd2hlbiB0aGV5JiMzOTtyZSBubyBsb25nZXIgbmVlZGVkLiBBIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgcmVxdWlyZXMgY29uc2lkZXJpbmcgbm90IG9ubHkgaW5pdGlhbGl6YXRpb24gYnV0IGFsc28gZGUtaW5pdGlhbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa2NnX2RlYWN0aXZhdGVfcG9saWN5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JmcS1pb3NjaGVkLmM9NzE0Mj1zdGF0aWMgdm9pZCBiZnFfZXhpdF9xdWV1ZShzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy03MTY0LSNpZmRlZiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRURcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NzE2NTpcdGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KGJmcWQtXHUwMDNlcXVldWUtXHUwMDNlZGlzaywgXHUwMDI2YmxrY2dfcG9saWN5X2JmcSk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTcxNjYtI2Vsc2Vcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTE0PXN0YXRpYyB2b2lkIGJsa2dfZnJlZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMjEtXHQvKlxuYmxvY2svYmxrLWNncm91cC5jOjEyMjpcdCAqIHBkX2ZyZWVfZm4oKSBjYW4gYWxzbyBiZSBjYWxsZWQgZnJvbSBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpLFxuYmxvY2svYmxrLWNncm91cC5jLTEyMy1cdCAqIGluIG9yZGVyIHRvIG1ha2Ugc3VyZSBwZF9mcmVlX2ZuKCkgaXMgY2FsbGVkIGluIG9yZGVyLCB0aGUgZGVsZXRpb25cbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTI1LVx0ICogYmxrY2dfbXV0ZXggaXMgdXNlZCB0byBzeW5jaHJvbml6ZSBibGtnX2ZyZWVfd29ya2ZuKCkgYW5kXG5ibG9jay9ibGstY2dyb3VwLmM6MTI2Olx0ICogYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKS5cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMjctXHQgKi9cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9NTY0PXN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveV9hbGwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTU5OC1cdCAqIE1hcmsgcG9saWN5IGRlYWN0aXZhdGVkIHNpbmNlIHBvbGljeSBvZmZsaW5lIGhhcyBiZWVuIGRvbmUsIGFuZFxuYmxvY2svYmxrLWNncm91cC5jOjU5OTpcdCAqIHRoZSBmcmVlIGlzIHNjaGVkdWxlZCwgc28gZnV0dXJlIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KCkgY2FuXG5ibG9jay9ibGstY2dyb3VwLmMtNjAwLVx0ICogYmUgYnlwYXNzZWRcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9ODMxPWludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTg0NC1cbmJsb2NrL2Jsay1jZ3JvdXAuYzo4NDU6XHQvKiBQcmV2ZW50IGNvbmN1cnJlbnQgd2l0aCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpICovXG5ibG9jay9ibGstY2dyb3VwLmMtODQ2LVx0bXV0ZXhfbG9jayhcdTAwMjZxLVx1MDAzZWJsa2NnX211dGV4KTtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTY3Nz1FWFBPUlRfU1lNQk9MX0dQTChibGtjZ19hY3RpdmF0ZV9wb2xpY3kpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNjc5LS8qKlxuYmxvY2svYmxrLWNncm91cC5jOjE2ODA6ICogYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kgLSBkZWFjdGl2YXRlIGEgYmxrY2cgcG9saWN5IG9uIGEgZ2VuZGlza1xuYmxvY2svYmxrLWNncm91cC5jLTE2ODEtICogQGRpc2s6IGdlbmRpc2sgb2YgaW50ZXJlc3Rcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTY4Ni0gKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNjg3OnZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9ibGstY2dyb3VwLmMtMTY4OC1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTcwOS19XG5ibG9jay9ibGstY2dyb3VwLmM6MTcxMDpFWFBPUlRfU1lNQk9MX0dQTChibGtjZ19kZWFjdGl2YXRlX3BvbGljeSk7XG5ibG9jay9ibGstY2dyb3VwLmMtMTcxMS1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmg9MjAzPWludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCk7XG5ibG9jay9ibGstY2dyb3VwLmg6MjA0OnZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9ibGstY2dyb3VwLmgtMjA1LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmg9NDkwPXN0YXRpYyBpbmxpbmUgaW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbmJsb2NrL2Jsay1jZ3JvdXAuaC00OTEtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCkgeyByZXR1cm4gMDsgfVxuYmxvY2svYmxrLWNncm91cC5oOjQ5MjpzdGF0aWMgaW5saW5lIHZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9ibGstY2dyb3VwLmgtNDkzLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgfVxuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYz0yODkxPXN0YXRpYyB2b2lkIGlvY19ycW9zX2V4aXQoc3RydWN0IHJxX3FvcyAqcnFvcylcbi0tXG5ibG9jay9ibGstaW9jb3N0LmMtMjg5NC1cbmJsb2NrL2Jsay1pb2Nvc3QuYzoyODk1Olx0YmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kocnFvcy1cdTAwM2VkaXNrLCBcdTAwMjZibGtjZ19wb2xpY3lfaW9jb3N0KTtcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yODk2LVxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz02MzU9c3RhdGljIHZvaWQgYmxrY2dfaW9sYXRlbmN5X2V4aXQoc3RydWN0IHJxX3FvcyAqcnFvcylcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjQwLVx0Zmx1c2hfd29yayhcdTAwMjZibGtpb2xhdC1cdTAwM2VlbmFibGVfd29yayk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NjQxOlx0YmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kocnFvcy1cdTAwM2VkaXNrLCBcdTAwMjZibGtjZ19wb2xpY3lfaW9sYXRlbmN5KTtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02NDItXHRrZnJlZShibGtpb2xhdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbG9jayBDZ3JvdXAgUG9saWN5IFRlYXJkb3duKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgYmxvY2sgY2dyb3VwIGZ1bmN0aW9ucy4gSXQgc2VlbXMgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YCBnZXRzIGNhbGxlZCBmcm9tIGBiZnFfZXhpdF9xdWV1ZWAsIGBpb2NfcnFvc19leGl0YCwgYW5kIGBibGtjZ19pb2xhdGVuY3lfZXhpdGAuIEFuZCBjcnVjaWFsbHksIGBibGtnX2Rlc3Ryb3lfYWxsYCBpcyBwYXJ0IG9mIHRoZSBjbGVhbi11cCBwcm9jZXNzIHRyaWdnZXJlZCBieSB0aGUgZGVzdHJ1Y3Rpb24gb2YgYSBkaXNrIHZpYSBgYmxrY2dfZXhpdF9kaXNrYC4gVGhhdCBtYWtlcyBzZW5zZSAtIHdlIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGUgYmxvY2sgY2dyb3VwIGlzIHByb3Blcmx5IGNsZWFuZWQgdXAgd2hlbiB0aGUgYmFja2luZyBzdG9yYWdlIGdvZXMgYXdheS4KClRoZSBwYXRjaCBpdHNlbGYgaXMgdG91Y2hpbmcgc29tZSBrZXkgYXJlYXM6IGBibGtnX2Rlc3Ryb3lfYWxsYCwgYGJsa2NnX2FjdGl2YXRlX3BvbGljeWAsIGFuZCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIGJsb2NrIGNncm91cCBwb2xpY2llcy4gQmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uLCBpdCBzZWVtcyBsaWtlIGEgcmFjZSBjb25kaXRpb24gaXMgYmVpbmcgZml4ZWQsIGFuZCB0aGV5JiMzOTtyZSB1c2luZyBhIGBtdXRleF9sb2NrKCZhbXA7cS0mZ3Q7YmxrY2dfbXV0ZXgpYCBpbiBgYmxrZ19kZXN0cm95X2FsbGAgYW5kIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlIGZvciBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgcXVldWUmIzM5O3MgZGF0YSBzdHJ1Y3R1cmVzLiBUaGV5JiMzOTtyZSBhbHNvIGV4dHJhY3RpbmcgYGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHNgLCB3aGljaCBpcyB1c2VkIGluIGJvdGggYGJsa2NnX2FjdGl2YXRlX3BvbGljeWAgYW5kIGBibGtjZ19kZWFjdGl2YXRlX3BvbGljeWAgd2hpY2ggaW5kaWNhdGVzIHNoYXJlZCB0ZWFyZG93biBsb2dpYy4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgY3JpdGljYWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zLCBmaW5kaW5nIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIHdvdWxkIGJlIGltcG9ydGFudC4gSSBzaG91bGQgZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0cyBvbiBgYmxrZ19kZXN0cm95X2FsbGAsIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YCBhcyB0aGVzZSBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzLgoKSG9sZCBvbi4uLiBgYmxrZ19kZXN0cm95X2FsbGAgaXMgKnN0YXRpYyouIFRoYXQmIzM5O3MgYSBsaXR0bGUgY29uY2VybmluZy4gSXMgaXQgaW5saW5lZD8gTGV0IG1lIHF1aWNrbHkgY2hlY2sgYGJsay1jZ3JvdXAuY2AgdG8gc2VlIGlmIHRoYXQmIzM5O3MgdGhlIGNhc2UuIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGNvbXBsZXRlbHkgYmVmb3JlIGJlZ2lubmluZyBmdXp6aW5nLiBJZiBpdCYjMzk7cyBpbmxpbmVkLCBJJiMzOTtsbCBuZWVkIHRvIGFkanVzdCBteSBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrZ19kZXN0cm95X2FsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmM9NTE3PXN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveShzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTUyNy1cdCAqIGJsa2dfZnJlZV93b3JrZm4oKSwgaGVuY2UgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb21cbmJsb2NrL2Jsay1jZ3JvdXAuYzo1Mjg6XHQgKiBibGtjZ19kZXN0cm95X2Jsa2dzKCkgZmlyc3QgYW5kIGFnYWluIGZyb20gYmxrZ19kZXN0cm95X2FsbCgpIGJlZm9yZVxuYmxvY2svYmxrLWNncm91cC5jLTUyOS1cdCAqIGJsa2dfZnJlZV93b3JrZm4oKS5cbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtNTYzLVxuYmxvY2svYmxrLWNncm91cC5jOjU2NDpzdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3lfYWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuYmxvY2svYmxrLWNncm91cC5jLTU2NS17XG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTE0OTg9dm9pZCBibGtjZ19leGl0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9ibGstY2dyb3VwLmMtMTQ5OS17XG5ibG9jay9ibGstY2dyb3VwLmM6MTUwMDpcdGJsa2dfZGVzdHJveV9hbGwoZGlzayk7XG5ibG9jay9ibGstY2dyb3VwLmMtMTUwMS1cdGJsa190aHJvdGxfZXhpdChkaXNrKTtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xODg2PXZvaWQgYmxrX3Rocm90bF9leGl0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE4OTAtXHQvKlxuYmxvY2svYmxrLXRocm90dGxlLmM6MTg5MTpcdCAqIGJsa2dfZGVzdHJveV9hbGwoKSBhbHJlYWR5IGRlYWN0aXZhdGUgdGhyb3RsIHBvbGljeSwganVzdCBjaGVjayBhbmRcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE4OTItXHQgKiBmcmVlIHRocm90bCBkYXRhLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUwOQoJCQkJCQkJb3V0cHV0OiA2OQoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQmxvY2sgSS9PIENncm91cCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVsYXRpb25zaGlwcyBoZXJlLCBzcGVjaWZpY2FsbHkgZm9yIGJsb2NrIEkvTyBjZ3JvdXBzLiBUaGUgZnVuY3Rpb24gYGJsa2dfZGVzdHJveV9hbGxgIGlzIHN0YXRpYyBidXQgbm90IGlubGluZWQsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGxpa2VseSBhIGNyaXRpY2FsIHBpZWNlIGFuZCBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgYGJsa2NnX2V4aXRfZGlza2AuIEkgY291bGQgZm9jdXMgbXkgYW5hbHlzaXMgb24gYGJsa2NnX2V4aXRfZGlza2AsIG9yIEkgY291bGQgaW5jbHVkZSBib3RoLCBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQgZHVyaW5nIGRlZXBlciBkaXZlcy4gQWxzbywgYGJsa2NnX2FjdGl2YXRlX3BvbGljeWAgYW5kIGBibGtjZ19kZWFjdGl2YXRlX3BvbGljeWAgYXJlIGV4cG9ydGVkIGZ1bmN0aW9ucywgc28gY2xlYXJseSwgdGhleSYjMzk7cmUgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgbG9vayBhdCB0aGUgYmlnZ2VyIHBpY3R1cmUg4oCTIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYEJMS19DR1JPVVBgIGlzIGVzc2VudGlhbCwgbm8gc3VycHJpc2VzIHRoZXJlLiBMZXQgbWUgc2VlIHdoYXQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB3ZSBoYXZlLiBBaCwgaGVyZSB3ZSBnbzogYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYEJMS19ERVZfVEhST1RUTElOR2AsIGBJT1NDSEVEX0JGUWAsIGFuZCBgQkZRX0dST1VQX0lPU0NIRURgLgoKVG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBGaXJzdCwgSSYjMzk7bGwgY2hlY2sgYGluaXQvS2NvbmZpZ2AgdG8gc2VlIHdoYXQgYEJMS19DR1JPVVBgIGRlcGVuZHMgb24uIEl0JiMzOTtzIGxpc3RlZCBhcyBkZXBlbmRpbmcgb24gYEJMT0NLYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4sIEkmIzM5O2xsIG1vdmUgb24gdG8gYGJsb2NrL0tjb25maWdgIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBvZiB0aGUgbW9yZSBzcGVjaWZpYyBvcHRpb25zOiBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBgQkxLX0RFVl9USFJPVFRMSU5HYCwgYElPU0NIRURfQkZRYCwgYW5kIGBCRlFfR1JPVVBfSU9TQ0hFRGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBjb25maWdzIHJlbGF0ZSB0byBlYWNoIG90aGVyIHRvIGhhdmUgYSBjbGVhciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgKEJMS19DR1JPVVBfSU9DT1NUfEJMS19DR1JPVVBfSU9MQVRFTkNZfEJMS19ERVZfVEhST1RUTElOR3xJT1NDSEVEX0JGUXxCRlFfR1JPVVBfSU9TQ0hFRCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz05Nz1jb25maWcgQkxLX0RFVl9aT05FRFxuLS1cbmJsb2NrL0tjb25maWctMTA1LVxuYmxvY2svS2NvbmZpZzoxMDY6Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xuYmxvY2svS2NvbmZpZy0xMDctXHRib29sIFwmIzM0O0Jsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxuLS1cbmJsb2NrL0tjb25maWctMTMzLVxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG5ibG9jay9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnPTE0NT1jb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuLS1cbmJsb2NrL0tjb25maWctMTUzLVxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXG5ibG9jay9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLmlvc2NoZWQ9MTA9Y29uZmlnIE1RX0lPU0NIRURfS1lCRVJcbi0tXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMTgtXG5ibG9jay9LY29uZmlnLmlvc2NoZWQ6MTk6Y29uZmlnIElPU0NIRURfQkZRXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMjAtXHR0cmlzdGF0ZSBcJiMzNDtCRlEgSS9PIHNjaGVkdWxlclwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWcuaW9zY2hlZC0yOS1cbmJsb2NrL0tjb25maWcuaW9zY2hlZDozMDpjb25maWcgQkZRX0dST1VQX0lPU0NIRURcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0zMS0gICAgICAgYm9vbCBcJiMzNDtCRlEgaGllcmFyY2hpY2FsIHNjaGVkdWxpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIGNvbmZpZ3VyYXRpb24gb3ZlcmhhdWwsIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB0aGUgZGVwZW5kZW5jaWVzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHN5c3RlbSB0aGF0JiMzOTtzIGxpa2VseSBpbnRlcmNvbm5lY3RlZCDigJMgYW5kIGEgbWlzc2VkIGNvbm5lY3Rpb24gY2FuIGNhdXNlIGEgd2hvbGUgY2FzY2FkZSBvZiB1bmZvcmVzZWVuIGlzc3Vlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZG8gdGhlc2UgY29uZmlncyBzaXQgd2l0aGluIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlPyYjMzQ7LiBJJiMzOTttIGdvaW5nIHRvIG1hcCBvdXQgdGhlIHJlbGF0aW9uc2hpcHM7IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMsIHNlcnZpY2VzLCBvciBldmVuIGV4dGVybmFsIHN5c3RlbXMgcmVseSBvbiB0aGVzZSBzcGVjaWZpYyBzZXR0aW5ncy4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IGJyZWFrcyBpZiBJIGNoYW5nZSBYLCBZLCBvciBaLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGxpc3RpbmcgdGhlIG9idmlvdXMgZGlyZWN0IGRlcGVuZGVuY2llcywgYnV0IGFsc28gdGhlIG1vcmUgc3VidGxlLCBwZXJoYXBzIGluZGlyZWN0LCByZWxhdGlvbnNoaXBzLiBJIG5lZWQgdG8gdGhpbmsgbGlrZSBhIHNlYXNvbmVkIGFyY2hpdGVjdCBoZXJlLCBwcmUtZW1wdGl2ZWx5IGNvbnNpZGVyaW5nIGFsbCBwb3NzaWJsZSBpbXBsaWNhdGlvbnMgYW5kIHNpZGUgZWZmZWN0cy4gVGltZSB0byBjaGVjayB0aGUgY2hhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHRCbG9jayBsYXllciB6b25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydC4gVGhpcyBvcHRpb24gZW5hYmxlc1xuIDEwMTpcdFx0c3VwcG9ydCBmb3IgWkFDL1pCQy9aTlMgaG9zdC1tYW5hZ2VkIGFuZCBob3N0LWF3YXJlIHpvbmVkIGJsb2NrXG4gMTAyOlx0XHRkZXZpY2VzLlxuIDEwMzpcdFxuIDEwNDpcdFx0U2F5IHllcyBoZXJlIGlmIHlvdSBoYXZlIGEgWkFDLCBaQkMsIG9yIFpOUyBzdG9yYWdlIGRldmljZS5cbiAxMDU6XHRcbiAxMDY6XHRjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXG4gMTA3Olx0XHRib29sIFwmIzM0O0Jsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcJiMzNDtcbiAxMDg6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxuIDEwOTpcdFx0c2VsZWN0IEJMS19DR1JPVVBfUldTVEFUXG4gMTEwOlx0XHRoZWxwXG4gMTExOlx0XHRCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0LiBJdCBjYW4gYmUgdXNlZCB0byBsaW1pdFxuIDExMjpcdFx0dGhlIElPIHJhdGUgdG8gYSBkZXZpY2UuIElPIHJhdGUgcG9saWNpZXMgYXJlIHBlciBjZ3JvdXAgYW5kXG4gMTEzOlx0XHRvbmUgbmVlZHMgdG8gbW91bnQgYW5kIHVzZSBibGtpbyBjZ3JvdXAgY29udHJvbGxlciBmb3IgY3JlYXRpbmdcbiAxMTQ6XHRcdGNncm91cHMgYW5kIHNwZWNpZnlpbmcgcGVyIGRldmljZSBJTyByYXRlIHBvbGljaWVzLlxuIDExNTpcdFxuIDExNjpcdFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIDExNzpcdFxuIDExODpcdGNvbmZpZyBCTEtfV0JUXG4gMTE5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBibG9jayBkZXZpY2Ugd3JpdGViYWNrIHRocm90dGxpbmdcJiMzNDtcbiAxMjA6XHRcdGhlbHBcbiAxMjE6XHRcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGJsb2NrIGxheWVyIHRvIHRocm90dGxlIGJ1ZmZlcmVkXG4gMTIyOlx0XHRiYWNrZ3JvdW5kIHdyaXRlYmFjayBmcm9tIHRoZSBWTSwgbWFraW5nIGl0IG1vcmUgc21vb3RoIGFuZCBoYXZpbmdcbiAxMjM6XHRcdGxlc3MgaW1wYWN0IG9uIGZvcmVncm91bmQgb3BlcmF0aW9ucy4gVGhlIHRocm90dGxpbmcgaXMgZG9uZVxuIDEyNDpcdFx0ZHluYW1pY2FsbHkgb24gYW4gYWxnb3JpdGhtIGxvb3NlbHkgYmFzZWQgb24gQ29EZWwsIGZhY3RvcmluZyBpblxuIDEyNTpcdFx0dGhlIHJlYWx0aW1lIHBlcmZvcm1hbmNlIG9mIHRoZSBkaXNrLlxuIDEyNjpcdFxuIDEyNzpcdGNvbmZpZyBCTEtfV0JUX01RXG4gMTI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSB3cml0ZWJhY2sgdGhyb3R0bGluZyBieSBkZWZhdWx0XCYjMzQ7XG4gMTI5Olx0XHRkZWZhdWx0IHlcbiAxMzA6XHRcdGRlcGVuZHMgb24gQkxLX1dCVFxuIDEzMTpcdFx0aGVscFxuIDEzMjpcdFx0RW5hYmxlIHdyaXRlYmFjayB0aHJvdHRsaW5nIGJ5IGRlZmF1bHQgZm9yIHJlcXVlc3QtYmFzZWQgYmxvY2sgZGV2aWNlcy5cbiAxMzM6XHRcbiAxMzQ6XHRjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcbiAxMzU6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbiAxMzY6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxuIDEzNzpcdFx0aGVscFxuIDEzODpcdFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgLmxhdGVuY3kgaW50ZXJmYWNlIGZvciBJTyB0aHJvdHRsaW5nLlxuIDEzOTpcdFx0VGhlIElPIGNvbnRyb2xsZXIgd2lsbCBhdHRlbXB0IHRvIG1haW50YWluIGF2ZXJhZ2UgSU8gbGF0ZW5jaWVzIGJlbG93XG4gMTQwOlx0XHR0aGUgY29uZmlndXJlZCBsYXRlbmN5IHRhcmdldCwgdGhyb3R0bGluZyBhbnlib2R5IHdpdGggYSBoaWdoZXIgbGF0ZW5jeVxuIDE0MTpcdFx0dGFyZ2V0IHRoYW4gdGhlIHZpY3RpbWl6ZWQgZ3JvdXAuXG4gMTQyOlx0XG4gMTQzOlx0XHROb3RlLCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBpbnRlcmZhY2UgYW5kIGNvdWxkIGJlIGNoYW5nZWQgc29tZWRheS5cbiAxNDQ6XHRcbiAxNDU6XHRjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuIDE0NjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1wmIzM0O1xuIDE0NzpcdFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQIFx1MDAyNlx1MDAyNiBOVk1FX0ZDXG4gMTQ4Olx0XHRoZWxwXG4gMTQ5Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIHRyYWZmaWMgYWNyb3NzXG4gMTUwOlx0XHQgIGNncm91cCBhcHBsaWNhdGlvbnMuIEl0IGVuYWJsZXMgdGhlIEZhYnJpYyBhbmQgdGhlIHN0b3JhZ2UgdGFyZ2V0cyB0b1xuIDE1MTpcdFx0ICBpZGVudGlmeSwgbW9uaXRvciwgYW5kIGhhbmRsZSBGQyB0cmFmZmljIGJhc2VkIG9uIFZNIHRhZ3MgYnkgaW5zZXJ0aW5nXG4gMTUyOlx0XHQgIGFwcGxpY2F0aW9uIHNwZWNpZmljIGlkZW50aWZpY2F0aW9uIGludG8gdGhlIEZDIGZyYW1lLlxuIDE1MzpcdFxuIDE1NDpcdGNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxuIDE1NTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclwmIzM0O1xuIDE1NjpcdFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXG4gMTU3Olx0XHRzZWxlY3QgQkxLX1JRX0FMTE9DX1RJTUVcbiAxNTg6XHRcdGhlbHBcbiAxNTk6XHRcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIC53ZWlnaHQgaW50ZXJmYWNlIGZvciBjb3N0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzcwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uOiBpb3NjaGVkIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyBjaGVjayBgYmxvY2svS2NvbmZpZy5pb3NjaGVkYC4mIzM0OyBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSB3aGF0JiMzOTtzIGNvbnRyb2xsaW5nIHRoZSBJL08gc2NoZWR1bGVyIG9wdGlvbnMuIEtub3dpbmcgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGlzIHRoZSBiZWRyb2NrLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggYmxvY2sgZGV2aWNlIG1hbmFnZW1lbnQgYW5kIEkvTyBwZXJmb3JtYW5jZSB0dW5pbmcuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zIOKAkyB0aGUgbWFjcm9zLCB0aGUgZGVmYXVsdCBzZWxlY3Rpb25zLCB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgYSBjbGVhciB2aWV3IG9mIGhvdyBkaWZmZXJlbnQgc2NoZWR1bGVycyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHRoZSB1bmRlcmx5aW5nIGxvZ2ljIHRoYXQgZ292ZXJucyB0aG9zZSBkZWNpc2lvbnMgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIFRoaXMgZmlsZSBsaWtlbHkgZGVmaW5lcyB0aGUgYENPTkZJR19gIG9wdGlvbnMgcmVsYXRlZCB0byBzcGVjaWZpYyBzY2hlZHVsZXJzIGxpa2UgQ0ZRLCBEZWFkbGluZSwgQkZRLCBvciBtYXliZSBldmVuIGV4cGVyaW1lbnRhbCBvbmVzLiBJdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBrbm9icyBmb3IgSS9PIG9wdGltaXphdGlvbiBvbiB0aGlzIHN5c3RlbS4gVWx0aW1hdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gY29uZmlybSB3aGF0IGlzIGF2YWlsYWJsZSBhbmQgaG93IHRvIGN1c3RvbWl6ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcuaW9zY2hlZCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRtZW51IFwmIzM0O0lPIFNjaGVkdWxlcnNcJiMzNDtcbiAgIDM6XHRcbiAgIDQ6XHRjb25maWcgTVFfSU9TQ0hFRF9ERUFETElORVxuICAgNTpcdFx0dHJpc3RhdGUgXCYjMzQ7TVEgZGVhZGxpbmUgSS9PIHNjaGVkdWxlclwmIzM0O1xuICAgNjpcdFx0ZGVmYXVsdCB5XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIE1RIHZlcnNpb24gb2YgdGhlIGRlYWRsaW5lIElPIHNjaGVkdWxlci5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgTVFfSU9TQ0hFRF9LWUJFUlxuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7S3liZXIgSS9PIHNjaGVkdWxlclwmIzM0O1xuICAxMjpcdFx0ZGVmYXVsdCB5XG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHQgIFRoZSBLeWJlciBJL08gc2NoZWR1bGVyIGlzIGEgbG93LW92ZXJoZWFkIHNjaGVkdWxlciBzdWl0YWJsZSBmb3JcbiAgMTU6XHRcdCAgbXVsdGlxdWV1ZSBhbmQgb3RoZXIgZmFzdCBkZXZpY2VzLiBHaXZlbiB0YXJnZXQgbGF0ZW5jaWVzIGZvciByZWFkcyBhbmRcbiAgMTY6XHRcdCAgc3luY2hyb25vdXMgd3JpdGVzLCBpdCB3aWxsIHNlbGYtdHVuZSBxdWV1ZSBkZXB0aHMgdG8gYWNoaWV2ZSB0aGF0XG4gIDE3Olx0XHQgIGdvYWwuXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIElPU0NIRURfQkZRXG4gIDIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtCRlEgSS9PIHNjaGVkdWxlclwmIzM0O1xuICAyMTpcdFx0c2VsZWN0IEJMS19JQ1FcbiAgMjI6XHRcdGhlbHBcbiAgMjM6XHRcdEJGUSBJL08gc2NoZWR1bGVyIGZvciBCTEstTVEuIEJGUSBkaXN0cmlidXRlcyB0aGUgYmFuZHdpZHRoIG9mXG4gIDI0Olx0XHRvZiB0aGUgZGV2aWNlIGFtb25nIGFsbCBwcm9jZXNzZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHdlaWdodHMsXG4gIDI1Olx0XHRyZWdhcmRsZXNzIG9mIHRoZSBkZXZpY2UgcGFyYW1ldGVycyBhbmQgd2l0aCBhbnkgd29ya2xvYWQuIEl0XG4gIDI2Olx0XHRhbHNvIGd1YXJhbnRlZXMgYSBsb3cgbGF0ZW5jeSB0byBpbnRlcmFjdGl2ZSBhbmQgc29mdFxuICAyNzpcdFx0cmVhbC10aW1lIGFwcGxpY2F0aW9ucy4gIERldGFpbHMgaW5cbiAgMjg6XHRcdERvY3VtZW50YXRpb24vYmxvY2svYmZxLWlvc2NoZWQucnN0XG4gIDI5Olx0XG4gIDMwOlx0Y29uZmlnIEJGUV9HUk9VUF9JT1NDSEVEXG4gIDMxOlx0ICAgICAgIGJvb2wgXCYjMzQ7QkZRIGhpZXJhcmNoaWNhbCBzY2hlZHVsaW5nIHN1cHBvcnRcJiMzNDtcbiAgMzI6XHQgICAgICAgZGVwZW5kcyBvbiBJT1NDSEVEX0JGUSBcdTAwMjZcdTAwMjYgQkxLX0NHUk9VUFxuICAzMzpcdCAgICAgICBkZWZhdWx0IHlcbiAgMzQ6XHQgICAgICAgc2VsZWN0IEJMS19DR1JPVVBfUldTVEFUXG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XG4gIDM3Olx0ICAgICAgIEVuYWJsZSBoaWVyYXJjaGljYWwgc2NoZWR1bGluZyBpbiBCRlEsIHVzaW5nIHRoZSBibGtpb1xuICAzODpcdCAgICAgICAoY2dyb3Vwcy12MSkgb3IgaW8gKGNncm91cHMtdjIpIGNvbnRyb2xsZXIuXG4gIDM5Olx0XG4gIDQwOlx0Y29uZmlnIEJGUV9DR1JPVVBfREVCVUdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1ODMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkFuYWx5emluZyBCbG9jayBJL08gU2NoZWR1bGVyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBibG9jayBJL08gY29uZmlndXJhdGlvbnMuIEkgc2VlIGEgZmV3IGtleSBzeW1ib2xzIGhlcmU6IGBCTEtfQ0dST1VQYCwgYEJMS19ERVZfVEhST1RUTElOR2AsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBJT1NDSEVEX0JGUWAsIGFuZCBgQkZRX0dST1VQX0lPU0NIRURgLiBJIG5lZWQgdG8gZW5zdXJlIEkgZ2V0IHRoaXMgcmlnaHQuCgpIb2xkIG9uLCBJIHNlZSBgSU9TQ0hFRF9CRlFgIGlzIGEgdHJpc3RhdGUuIFRoYXQgbWVhbnMgaXQgY2FuIHBvdGVudGlhbGx5IGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBzbyBpdCYjMzk7cyBwcm9iYWJseSB0aGUgbW9zdCBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZm9jdXMgb24gaGVyZSwgYXMgSSYjMzk7bGwgd2FudCB0byBsaXN0IHRoYXQgb25lLiBJJiMzOTtsbCBqdXN0IGxpc3QgYElPU0NIRURfQkZRYC4KCk5vdywgSSByZW1lbWJlciBgQkxLX0NHUk9VUGAuIERvZXNuJiMzOTt0IHRoYXQgZGVwZW5kIG9uIHNvbWV0aGluZz8gWWVzLCBpdCBkZXBlbmRzIG9uIGBCTE9DS2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZW50cnkgdG8gYmUgc3VyZSwgYW5kIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLgoKQWhhLCBgQkxLX0NHUk9VUGAgaXMgaW5kZWVkIGluIGBpbml0L0tjb25maWdgIGFuZCBleHBsaWNpdGx5IGRlcGVuZHMgb24gYEJMT0NLYC4gQW5kIGBCTE9DS2AgaXMgdXN1YWxseSBlbmFibGVkLCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY29yZSBmdW5jdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGZlYXR1cmVzLiBUaGUgcmVsZXZhbnQgc3ltYm9scyBzZWVtIHRvIGJlOiBgYmxrY2dfYWN0aXZhdGVfcG9saWN5YCwgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YCwgYW5kIGBibGtjZ19leGl0X2Rpc2tgLgoKSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGJsa2NnX2V4aXRfZGlza2AgaXNuJiMzOTt0IHN0YXRpYyBhbmQgaXMgcmVhY2hhYmxlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGFjdHVhbGx5IHVzZWQgYW5kIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpdHMgbGlua2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrY2dfZXhpdF9kaXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jZ3JvdXAuYz0xNDUzPWludCBibGtjZ19pbml0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTE0NjEtXHQgKiBwcmV2aW91cyBkaXNrJiMzOTtzIGJsa2NnIHN0YXRlIGlzIGNsZWFuZWQgdXAgYXN5bmNocm9ub3VzbHkgdmlhXG5ibG9jay9ibGstY2dyb3VwLmM6MTQ2MjpcdCAqIGRpc2tfcmVsZWFzZSgpIC1cdTAwM2UgYmxrY2dfZXhpdF9kaXNrKCkuIFdhaXQgZm9yIHRoYXQgY2xlYW51cCB0b1xuYmxvY2svYmxrLWNncm91cC5jLTE0NjMtXHQgKiBmaW5pc2ggKGluZGljYXRlZCBieSByb290X2Jsa2cgYmVjb21pbmcgTlVMTCkgYmVmb3JlIHNldHRpbmcgdXBcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTQ5Ny1cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNDk4OnZvaWQgYmxrY2dfZXhpdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuYmxvY2svYmxrLWNncm91cC5jLTE0OTkte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0xOTc9aW50IGJsa2NnX2luaXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XG5ibG9jay9ibGstY2dyb3VwLmg6MTk4OnZvaWQgYmxrY2dfZXhpdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbmJsb2NrL2Jsay1jZ3JvdXAuaC0xOTktXG4tLVxuYmxvY2svYmxrLWNncm91cC5oPTQ4Nj1zdGF0aWMgaW5saW5lIGludCBibGtjZ19pbml0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spIHsgcmV0dXJuIDA7IH1cbmJsb2NrL2Jsay1jZ3JvdXAuaDo0ODc6c3RhdGljIGlubGluZSB2b2lkIGJsa2NnX2V4aXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykgeyB9XG5ibG9jay9ibGstY2dyb3VwLmgtNDg4LXN0YXRpYyBpbmxpbmUgaW50IGJsa2NnX3BvbGljeV9yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgcmV0dXJuIDA7IH1cbi0tXG5ibG9jay9nZW5oZC5jPTEyNzI9c3RhdGljIHZvaWQgZGlza19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5ibG9jay9nZW5oZC5jLTEyOTYtXG5ibG9jay9nZW5oZC5jOjEyOTc6XHRibGtjZ19leGl0X2Rpc2soZGlzayk7XG5ibG9jay9nZW5oZC5jLTEyOTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjY0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29yZSBGdW5jdGlvbnMgYW5kIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIGBibGtjZ19leGl0X2Rpc2tgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgYW5kIGNhbGxlZCBmcm9tIGBkaXNrX3JlbGVhc2VgLiBUaGF0IGNvbmZpcm1zIGl0IGFzIGEga2V5IGFyZWEuIFRoZSBwYXRjaCBtb2RpZmllcyBgYmxrZ19kZXN0cm95X2FsbGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBibGtjZ19leGl0X2Rpc2tgLCBzbyB0aGF0IHN0cmVuZ3RoZW5zIGl0cyBpbXBvcnRhbmNlLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGFuYWx5c2lzIG9uIHRoZXNlIHRocmVlOiBgYmxrY2dfYWN0aXZhdGVfcG9saWN5YCwgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YCwgYW5kIGBibGtjZ19leGl0X2Rpc2tgLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBvciBpZiBpdCBjYW4gYmUgdHJpZ2dlcmVkIGR5bmFtaWNhbGx5LiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgYSBmZXcga2V5IGZ1bmN0aW9uczogYGJsa19pb2Nvc3RfaW5pdGAsIGBibGtfaW9sYXRlbmN5X2luaXRgLCBgYmxrX3Rocm90bF9pbml0YCwgYW5kIGBiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeWAuIGBiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeWAgZmlyZXMgd2hlbiBhIGNncm91cCBpcyBjcmVhdGVkIG9yIEJGUSBpcyBpbml0aWFsaXplZCwgc28gZGVmaW5pdGVseSBkeW5hbWljLiBgYmxrX2lvY29zdF9pbml0YCBpcyBhbHNvIHRyaWdnZXJlZCB3aGVuIGlvY29zdCBpcyBlbmFibGVkIG9uIGEgZGlzay4gRXhjZWxsZW50LCB0aGF0IGdpdmVzIG1lIGEgY2xlYXIgaWRlYSBvZiB3aGVuIHRob3NlIGZ1bmN0aW9ucyBhcmUgaW52b2tlZC4KCldhaXQsIGxvb2tpbmcgYWdhaW4sIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGFuZCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgIGFyZSAqdGhlKiBmdW5jdGlvbnMgdGhhdCBhcmUgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQuIEkgc2hvdWxkIGluY2x1ZGUgdGhvc2UgaW4gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBCYXNlZCBvbiB0aGUgY29kZSwgSSBzZWU6IGBCTEtfQ0dST1VQYCwgYEJMS19ERVZfVEhST1RUTElOR2AsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBJT1NDSEVEX0JGUWAsIGFuZCBgQkZRX0dST1VQX0lPU0NIRURgLiBJJiMzOTtsbCBoYXZlIHRvIGtlZXAgdGhvc2UgaW4gbWluZC4KCkkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucywganVzdCB0byBiZSBzdXJlLiBIbW0sIGBCTEtfQ0dST1VQX0ZDX0FQUElEYCBkZXBlbmRzIG9uIGBOVk1FX0ZDYC4gSXQgY291bGQgYmUgaW50ZXJlc3RpbmcsIGJ1dCBwcm9iYWJseSBoYXJkZXIgdG8gdGVzdC4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBldmVuIHJlbGV2YW50IGhlcmUuIE5vLCBpdCBkb2VzbiYjMzk7dCB1dGlsaXplIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLiBPa2F5LCBJJiMzOTtsbCBzdGljayB3aXRoIHRoZSBvcmlnaW5hbCBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa2NnX2FjdGl2YXRlX3BvbGljeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iZnEtY2dyb3VwLmM9MTI1ND1zdHJ1Y3QgYmZxX2dyb3VwICpiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeShzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsIGludCBub2RlKVxuLS1cbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjU3LVxuYmxvY2svYmZxLWNncm91cC5jOjEyNTg6XHRyZXQgPSBibGtjZ19hY3RpdmF0ZV9wb2xpY3koYmZxZC1cdTAwM2VxdWV1ZS1cdTAwM2VkaXNrLCBcdTAwMjZibGtjZ19wb2xpY3lfYmZxKTtcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjU5LVx0aWYgKHJldClcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jPTcxOTY9c3RhdGljIGludCBiZnFfaW5pdF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplcSlcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTczMjgtXHQgKiBmdW5jdGlvbiBpcyB0aGUgaGVhZCBvZiBhIGNoYWluIG9mIGZ1bmN0aW9uIGNhbGxzXG5ibG9jay9iZnEtaW9zY2hlZC5jOjczMjk6XHQgKiAoYmZxX2NyZWF0ZV9ncm91cF9oaWVyYXJjaHktXHUwMDNlYmxrY2dfYWN0aXZhdGVfcG9saWN5LVx1MDAzZVxuYmxvY2svYmZxLWlvc2NoZWQuYy03MzMwLVx0ICogYmxrX21xX2ZyZWV6ZV9xdWV1ZSkgdGhhdCBtYXkgbGVhZCB0byB0aGUgaW52b2NhdGlvbiBvZiB0aGVcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTUzNT1zdGF0aWMgdm9pZCBibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTU3LS8qKlxuYmxvY2svYmxrLWNncm91cC5jOjE1NTg6ICogYmxrY2dfYWN0aXZhdGVfcG9saWN5IC0gYWN0aXZhdGUgYSBibGtjZyBwb2xpY3kgb24gYSBnZW5kaXNrXG5ibG9jay9ibGstY2dyb3VwLmMtMTU1OS0gKiBAZGlzazogZ2VuZGlzayBvZiBpbnRlcmVzdFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTcyLSAqL1xuYmxvY2svYmxrLWNncm91cC5jOjE1NzM6aW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuYmxvY2svYmxrLWNncm91cC5jLTE1NzQte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNjc2LX1cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNjc3OkVYUE9SVF9TWU1CT0xfR1BMKGJsa2NnX2FjdGl2YXRlX3BvbGljeSk7XG5ibG9jay9ibGstY2dyb3VwLmMtMTY3OC1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTY4NC0gKiBEZWFjdGl2YXRlIEBwb2wgb24gQGRpc2suICBGb2xsb3dzIHRoZSBzYW1lIHN5bmNocm9uaXphdGlvbiBydWxlcyBhc1xuYmxvY2svYmxrLWNncm91cC5jOjE2ODU6ICogYmxrY2dfYWN0aXZhdGVfcG9saWN5KCkuXG5ibG9jay9ibGstY2dyb3VwLmMtMTY4Ni0gKi9cbi0tXG5ibG9jay9ibGstY2dyb3VwLmg9MjAyPXZvaWQgYmxrY2dfcG9saWN5X3VucmVnaXN0ZXIoc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMDM6aW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMDQtdm9pZCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmg9NDg5PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgfVxuYmxvY2svYmxrLWNncm91cC5oOjQ5MDpzdGF0aWMgaW5saW5lIGludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9ibGstY2dyb3VwLmgtNDkxLVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgcmV0dXJuIDA7IH1cbi0tXG5ibG9jay9ibGstaW9jb3N0LmM9MjkxNT1zdGF0aWMgaW50IGJsa19pb2Nvc3RfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstaW9jb3N0LmMtMjk2Ni1cbmJsb2NrL2Jsay1pb2Nvc3QuYzoyOTY3Olx0cmV0ID0gYmxrY2dfYWN0aXZhdGVfcG9saWN5KGRpc2ssIFx1MDAyNmJsa2NnX3BvbGljeV9pb2Nvc3QpO1xuYmxvY2svYmxrLWlvY29zdC5jLTI5NjgtXHRpZiAocmV0KVxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz03NTg9c3RhdGljIGludCBibGtfaW9sYXRlbmN5X2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTc3MC1cdFx0Z290byBlcnJfZnJlZTtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo3NzE6XHRyZXQgPSBibGtjZ19hY3RpdmF0ZV9wb2xpY3koZGlzaywgXHUwMDI2YmxrY2dfcG9saWN5X2lvbGF0ZW5jeSk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNzcyLVx0aWYgKHJldClcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xMzE4PXN0YXRpYyBpbnQgYmxrX3Rocm90bF9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzMzgtXHQvKiBhY3RpdmF0ZSBwb2xpY3ksIGJsa190aHJvdGxfYWN0aXZhdGVkKCkgd2lsbCByZXR1cm4gdHJ1ZSAqL1xuYmxvY2svYmxrLXRocm90dGxlLmM6MTMzOTpcdHJldCA9IGJsa2NnX2FjdGl2YXRlX3BvbGljeShkaXNrLCBcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsKTtcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNDAtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzM1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbG9jayBJL08gQ2dyb3VwIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBibG9jayBJL08gY2dyb3VwIHN0dWZmLCBhbmQgaXQgbG9va3MgbGlrZSBgQkxLX0NHUk9VUF9GQ19BUFBJRGAgaXNuJiMzOTt0IHJlbGV2YW50IGhlcmUuIE15IGZvY3VzIGlzIG9uIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0ICpkbyogY29tZSBpbnRvIHBsYXkuIExldCBtZSBzZWUuLi4gdGhlIGtleSBwbGF5ZXJzIGFyZSBjbGVhcmx5IGBCTEtfQ0dST1VQYCwgYEJMS19ERVZfVEhST1RUTElOR2AsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBJT1NDSEVEX0JGUWAsIGFuZCBgQkZRX0dST1VQX0lPU0NIRURgLiBJJiMzOTttIGFscmVhZHkgZmFtaWxpYXIgd2l0aCBhIGZldyBvZiB0aGVzZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhleSBpbnRlcmFjdC4gTm93LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHNoaWZ0IG15IGF0dGVudGlvbiB0byBgQkxLX0NHUk9VUF9JT1BSSU9gIGFuZCBzZWUgd2hlcmUgdGhhdCBmaXRzIGludG8gdGhlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrY2dfYWN0aXZhdGVfcG9saWN5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWlvcHJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwODMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5IG9mIHRoZXNlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gdGhlIGBCTEtfQ0dST1VQX0lPUFJJT2AgY29uZmlndXJhdGlvbiBvcHRpb24gYXBwZWFycyB0byBiZSBhIHJlZCBoZXJyaW5nOyBpdCBkb2VzbiYjMzk7dCB1dGlsaXplIHdoYXRldmVyIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBleHBsb3JpbmcuIFRpbWUgdG8gYnJvYWRlbiB0aGUgc2VhcmNoLiBJIG5lZWQgdG8gc3lzdGVtYXRpY2FsbHkgbG9vayBmb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gU2luY2UgSSYjMzk7bSBkaWdnaW5nIGludG8gYGNncm91cGAtcmVsYXRlZCBpdGVtcywgdGhlIGBDR1JPVVBTYCBvcHRpb24gaXRzZWxmIGlzIGRlZmluaXRlbHkgd29ydGggaW5jbHVkaW5nIGluIG15IHNlYXJjaCwganVzdCB0byBiZSBjb21wcmVoZW5zaXZlLiBXaGlsZSBgQkxLX0NHUk9VUGAgbGlrZWx5IHB1bGxzIGl0IGluIGFzIGEgZGVwZW5kZW5jeSwgSSB3YW50IHRvIGJlICpjZXJ0YWluKi4gVG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzLCBJJiMzOTtsbCBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlOiBgaW5pdC9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBvZiBgQkxLX0NHUk9VUGAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGV2ZXJ5dGhpbmcgaXMgY29ubmVjdGVkIGFuZCBlbnN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwOTk9Y29uZmlnIE1FTUNHX1YxXG4tLVxuaW5pdC9LY29uZmlnLTExMTUtXG5pbml0L0tjb25maWc6MTExNjpjb25maWcgQkxLX0NHUk9VUFxuaW5pdC9LY29uZmlnLTExMTctXHRib29sIFwmIzM0O0lPIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJldmlzaXRpbmcgYGluaXQvS2NvbmZpZ2AgTGluZSAxMTE2KioKCk9rYXksIHRpbWUgdG8gcmUtZXhhbWluZSBgaW5pdC9LY29uZmlnYCBhcm91bmQgbGluZSAxMTE2LiBJIGhhdmUgYSBodW5jaCwgYmFzZWQgb24gdGhlIHJlY2VudCBkZWJ1Z2dpbmcgSSYjMzk7dmUgYmVlbiBkb2luZyB3aXRoIFtzcGVjaWZpYyBhcmVhLCBhc3N1bWluZyBleHBlcnQgaGFzIGtub3dsZWRnZSBvZiByZWxldmFudCBhcmVhXS4gSSBrbm93IHRoZSBtb2R1bGUmIzM5O3MgaW50ZXJhY3Rpb25zIHdpdGggaXRzIGVudmlyb25tZW50IGNhbiBiZSB0cmlja3kgYW5kIHN1YnRsZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IHNwZWNpZmljIGxpbmUgYmVjYXVzZSBpdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgYXJlYSB0aGF0IEkgdGhpbmsgbWlnaHQgbmVlZCBhdHRlbnRpb24uIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCB0aGF0IGxpbmUuIFBlcmhhcHMgdGhlcmUgaXMgYSBmb3Jnb3R0ZW4gZGVwZW5kZW5jeT8gT3IgbWF5YmUgdGhlcmUmIzM5O3MgYSBtaXNzZWQgaW50ZXJhY3Rpb24gd2l0aCBhbm90aGVyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGU/IEkmIzM5O20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIHJvb3QgY2F1c2Ugb2YgW2JyaWVmbHkgc3RhdGUgcHJvYmxlbV0gdGhyb3VnaCB0aGlzIGZvY3VzZWQgcmV2aWV3LiBJJiMzOTtsbCBiZSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBhbnkgY2x1ZXMgb3IgYW5vbWFsaWVzIGFuZCBjb25zaWRlcmluZyBhbnkgcmVjZW50IGNvbW1pdHMgaW4gdGhhdCBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExMDpcdFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XG4xMTExOlx0XHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcbjExMTI6XHRcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxuMTExMzpcdFxuMTExNDpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMTE1Olx0XG4xMTE2Olx0Y29uZmlnIEJMS19DR1JPVVBcbjExMTc6XHRcdGJvb2wgXCYjMzQ7SU8gY29udHJvbGxlclwmIzM0O1xuMTExODpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuMTExOTpcdFx0ZGVmYXVsdCBuXG4xMTIwOlx0XHRoZWxwXG4xMTIxOlx0XHRHZW5lcmljIGJsb2NrIElPIGNvbnRyb2xsZXIgY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyB0aGUgY29tbW9uXG4xMTIyOlx0XHRjZ3JvdXAgaW50ZXJmYWNlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHZhcmlvdXMgSU8gY29udHJvbGxpbmdcbjExMjM6XHRcdHBvbGljaWVzLlxuMTEyNDpcdFxuMTEyNTpcdFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxuMTEyNjpcdFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxuMTEyNzpcdFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXG4xMTI4Olx0XHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXG4xMTI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTk3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBIaWVyYXJjaHkqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgQkxLX0NHUk9VUGAgYWN0dWFsbHkgbmVzdGVkICp3aXRoaW4qIHRoZSBgbWVudWNvbmZpZyBDR1JPVVBTYCBzdHJ1Y3R1cmUgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uPyBUaGF0IHNlZW1zIGEgYml0IHVudXN1YWwsIGFuZCB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgcmVsYXRpb25zaGlwIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBsaW5rZWQsIGFzIHRoaXMgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJJiMzOTttIGVuYWJsaW5nIG9yIGRpc2FibGluZyBjZ3JvdXAtcmVsYXRlZCBibG9jayBJL08gZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgQ0dST1VQUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA0ND1jb25maWcgU0xBQl9PQkpfRVhUXG4tLVxuaW5pdC9LY29uZmlnLTEwNDYtXG5pbml0L0tjb25maWc6MTA0NzptZW51Y29uZmlnIENHUk9VUFNcbmluaXQvS2NvbmZpZy0xMDQ4LVx0Ym9vbCBcJiMzNDtDb250cm9sIEdyb3VwIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNDkKCQkJCQkJCW91dHB1dDogMTc2CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBDZ3JvdXAgUmFjZSBDb25kaXRpb24gRml4KioKCk9rYXksIHNvIHRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgKmRlZmluaXRlbHkqIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgYENHUk9VUFNgLiBUaGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZSwgc28gaXQgZ29lcyByaWdodCBhdCB0aGUgdG9wIG9mIG15IG1lbnRhbCBsaXN0LgoKUmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gSSYjMzk7dmUgZ290IHRvIGNvbnNpZGVyOiBgQ0dST1VQU2AsIG9mIGNvdXJzZSwgdGhlbiBgQkxLX0NHUk9VUGAsIGBCTEtfREVWX1RIUk9UVExJTkdgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgSU9TQ0hFRF9CRlFgLCBhbmQgYEJGUV9HUk9VUF9JT1NDSEVEYC4gVGhvc2UgYXJlIHRoZSBrZXkgcGllY2VzIGNvbmZpZ3VyaW5nIHRoZSBibG9jayBjZ3JvdXAgZnVuY3Rpb25hbGl0eS4KCk5vdywgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnM6IGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2V4aXRfZGlza2AuIFRob3NlIGFyZSB0aGUgc3ltYm9saWMgZm9jaSBvZiB0aGUgZml4LiBUaGUgcmVhc29uaW5nLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgYSByYWNlIGNvbmRpdGlvbiBleGlzdHMgZHVyaW5nIHRoZSBhY3RpdmF0aW9uIGFuZCBkZWFjdGl2YXRpb24gb2YgYmxvY2sgY2dyb3VwIHBvbGljaWVzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBkaXNrIHRlYXJkb3duLiBUaGUgZml4IGludHJvZHVjZXMgYSBtdXRleCBsb2NrIHRvIGFkZHJlc3MgdGhpcy4gVGhvc2UgYXJlIGNvcmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGR5bmFtaWNhbGx5IHRyaWdnZXJlZCB3aGVuIGVuYWJsaW5nL2Rpc2FibGluZyBjZ3JvdXAgcG9saWNpZXMgb3IgZGVzdHJveWluZyBibG9jayBkZXZpY2VzLgoKSSBuZWVkIHRvIGNvbmZpcm0gYGJsa2NnX2V4aXRfZGlza2AgaXMgdGhlIHJpZ2h0IGZ1bmN0aW9uIGhlcmUuIExldCBtZSB0cmFjZSB0aGF0LiBBaCwgeWVzLCBgYmxrZ19kZXN0cm95X2FsbGAgaXMgY2FsbGVkIGJ5IGBibGtjZ19leGl0X2Rpc2tgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBkaXNrX3JlbGVhc2VgLiBTbyBpdCAqaXMqIHJlYWNoYWJsZSBhcyBwYXJ0IG9mIHRoZSBkaXNrIHJlbGVhc2UgcHJvY2Vzcy4gVGhhdCBjb25maXJtcyBpdC4KCk5vdyBJIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUJiMzNDssCiAgICAmIzM0O0lPU0NIRURfQkZRJiMzNDssCiAgICAmIzM0O0JGUV9HUk9VUF9JT1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrY2dfYWN0aXZhdGVfcG9saWN5JiMzNDssCiAgICAmIzM0O2Jsa2NnX2RlYWN0aXZhdGVfcG9saWN5JiMzNDssCiAgICAmIzM0O2Jsa2NnX2V4aXRfZGlzayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGJsb2NrIGNncm91cCBwb2xpY3kgYWN0aXZhdGlvbi9kZWFjdGl2YXRpb24gYW5kIGRpc2sgdGVhcmRvd24gYnkgYWRkaW5nIGEgbXV0ZXggbG9jay4gVGhlc2UgYXJlIGNvcmUgYmxvY2sgY2dyb3VwIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZHluYW1pY2FsbHkgd2hlbiBlbmFibGluZy9kaXNhYmxpbmcgY2dyb3VwIHBvbGljaWVzIG9yIGRlc3Ryb3lpbmcgYmxvY2sgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0JMS19ERVZfVEhST1RUTElORyYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtJT1NDSEVEX0JGUSYjMzQ7LAogICAgJiMzNDtCRlFfR1JPVVBfSU9TQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa2NnX2FjdGl2YXRlX3BvbGljeSYjMzQ7LAogICAgJiMzNDtibGtjZ19kZWFjdGl2YXRlX3BvbGljeSYjMzQ7LAogICAgJiMzNDtibGtjZ19leGl0X2Rpc2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBibG9jayBjZ3JvdXAgcG9saWN5IGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uIGFuZCBkaXNrIHRlYXJkb3duIGJ5IGFkZGluZyBhIG11dGV4IGxvY2suIFRoZXNlIGFyZSBjb3JlIGJsb2NrIGNncm91cCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGR5bmFtaWNhbGx5IHdoZW4gZW5hYmxpbmcvZGlzYWJsaW5nIGNncm91cCBwb2xpY2llcyBvciBkZXN0cm95aW5nIGJsb2NrIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MTo1Ny42NDEzMDgyN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODg2NTQ4ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJMS19ERVZfVEhST1RUTElOR1wiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCIsXG4gICAgXCJJT1NDSEVEX0JGUVwiLFxuICAgIFwiQkZRX0dST1VQX0lPU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtjZ19hY3RpdmF0ZV9wb2xpY3lcIixcbiAgICBcImJsa2NnX2RlYWN0aXZhdGVfcG9saWN5XCIsXG4gICAgXCJibGtjZ19leGl0X2Rpc2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGJsb2NrIGNncm91cCBwb2xpY3kgYWN0aXZhdGlvbi9kZWFjdGl2YXRpb24gYW5kIGRpc2sgdGVhcmRvd24gYnkgYWRkaW5nIGEgbXV0ZXggbG9jay4gVGhlc2UgYXJlIGNvcmUgYmxvY2sgY2dyb3VwIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZHluYW1pY2FsbHkgd2hlbiBlbmFibGluZy9kaXNhYmxpbmcgY2dyb3VwIHBvbGljaWVzIG9yIGRlc3Ryb3lpbmcgYmxvY2sgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTE6NTcuNjQxMzE3MzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDIwNzI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMwNWQ4MWRjYTJiZGI5NDU5OWNlMzNiMGIyZmFhNTgyYjBiZGI0NTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAxODo1MTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcXG5pbmRleCBkOTY3NjEyNmM1YjVkLi4zNTQ2MzdmM2IxNThjIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuY1xcbisrKyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xcbkBAIC01NjksNiArNTY5LDcgQEAgc3RhdGljIHZvaWQgYmxrZ19kZXN0cm95X2FsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gXFx0aW50IGk7XFxuIFxcbiByZXN0YXJ0OlxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZxLVxcdTAwM2VibGtjZ19tdXRleCk7XFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsa2csIFxcdTAwMjZxLVxcdTAwM2VibGtnX2xpc3QsIHFfbm9kZSkge1xcbiBcXHRcXHRzdHJ1Y3QgYmxrY2cgKmJsa2NnID0gYmxrZy1cXHUwMDNlYmxrY2c7XFxuQEAgLTU4Nyw2ICs1ODgsNyBAQCBzdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3lfYWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiBcXHRcXHRpZiAoISgtLWNvdW50KSkge1xcbiBcXHRcXHRcXHRjb3VudCA9IEJMS0dfREVTVFJPWV9CQVRDSF9TSVpFO1xcbiBcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbitcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnEtXFx1MDAzZWJsa2NnX211dGV4KTtcXG4gXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdFxcdFxcdGdvdG8gcmVzdGFydDtcXG4gXFx0XFx0fVxcbkBAIC02MDYsNiArNjA4LDcgQEAgc3RhdGljIHZvaWQgYmxrZ19kZXN0cm95X2FsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gXFxuIFxcdHEtXFx1MDAzZXJvb3RfYmxrZyA9IE5VTEw7XFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cS1cXHUwMDNlcXVldWVfbG9jayk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cS1cXHUwMDNlYmxrY2dfbXV0ZXgpO1xcbiBcXG4gXFx0d2FrZV91cF92YXIoXFx1MDAyNnEtXFx1MDAzZXJvb3RfYmxrZyk7XFxuIH1cXG5AQCAtMTUyNiw2ICsxNTI5LDMxIEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIGlvX2NncnBfc3Vic3lzID0ge1xcbiB9O1xcbiBFWFBPUlRfU1lNQk9MX0dQTChpb19jZ3JwX3N1YnN5cyk7XFxuIFxcbisvKlxcbisgKiBUZWFyIGRvd24gcGVyLWJsa2cgcG9saWN5IGRhdGEgZm9yIEBwb2wgb24gQHEuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXFxuK3tcXG4rXFx0c3RydWN0IGJsa2NnX2dxICpibGtnO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShibGtnLCBcXHUwMDI2cS1cXHUwMDNlYmxrZ19saXN0LCBxX25vZGUpIHtcXG4rXFx0XFx0c3RydWN0IGJsa2NnICpibGtjZyA9IGJsa2ctXFx1MDAzZWJsa2NnO1xcbitcXHRcXHRzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQ7XFxuK1xcbitcXHRcXHRzcGluX2xvY2soXFx1MDAyNmJsa2NnLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cGQgPSBibGtnLVxcdTAwM2VwZFtwb2wtXFx1MDAzZXBsaWRdO1xcbitcXHRcXHRpZiAocGQpIHtcXG4rXFx0XFx0XFx0aWYgKHBkLVxcdTAwM2VvbmxpbmUgXFx1MDAyNlxcdTAwMjYgcG9sLVxcdTAwM2VwZF9vZmZsaW5lX2ZuKVxcbitcXHRcXHRcXHRcXHRwb2wtXFx1MDAzZXBkX29mZmxpbmVfZm4ocGQpO1xcbitcXHRcXHRcXHRwZC1cXHUwMDNlb25saW5lID0gZmFsc2U7XFxuK1xcdFxcdFxcdHBvbC1cXHUwMDNlcGRfZnJlZV9mbihwZCk7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UoYmxrZy1cXHUwMDNlcGRbcG9sLVxcdTAwM2VwbGlkXSwgTlVMTCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmJsa2NnLVxcdTAwM2Vsb2NrKTtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKipcXG4gICogYmxrY2dfYWN0aXZhdGVfcG9saWN5IC0gYWN0aXZhdGUgYSBibGtjZyBwb2xpY3kgb24gYSBnZW5kaXNrXFxuICAqIEBkaXNrOiBnZW5kaXNrIG9mIGludGVyZXN0XFxuQEAgLTE1NjMsNiArMTU5MSw4IEBAIGludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG4gXFxuIFxcdGlmIChxdWV1ZV9pc19tcShxKSlcXG4gXFx0XFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cS1cXHUwMDNlYmxrY2dfbXV0ZXgpO1xcbiByZXRyeTpcXG4gXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cS1cXHUwMDNlcXVldWVfbG9jayk7XFxuIFxcbkBAIC0xNTcyLDYgKzE2MDIsOCBAQCBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXFxuIFxcbiBcXHRcXHRpZiAoYmxrZy1cXHUwMDNlcGRbcG9sLVxcdTAwM2VwbGlkXSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChobGlzdF91bmhhc2hlZChcXHUwMDI2YmxrZy1cXHUwMDNlYmxrY2dfbm9kZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0LyogSWYgcHJlYWxsb2MgbWF0Y2hlcywgdXNlIGl0OyBvdGhlcndpc2UgdHJ5IEdGUF9OT1dBSVQgKi9cXG4gXFx0XFx0aWYgKGJsa2cgPT0gcGlubmVkX2Jsa2cpIHtcXG5AQCAtMTYyNSw2ICsxNjU3LDcgQEAgaW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxcbiBcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZxLVxcdTAwM2VxdWV1ZV9sb2NrKTtcXG4gb3V0OlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnEtXFx1MDAzZWJsa2NnX211dGV4KTtcXG4gXFx0aWYgKHF1ZXVlX2lzX21xKHEpKVxcbiBcXHRcXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xcbiBcXHRpZiAocGlubmVkX2Jsa2cpXFxuQEAgLTE2MzYsMjEgKzE2NjksNyBAQCBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXFxuIGVub21lbTpcXG4gXFx0LyogYWxsb2MgZmFpbGVkLCB0YWtlIGRvd24gZXZlcnl0aGluZyAqL1xcbiBcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZxLVxcdTAwM2VxdWV1ZV9sb2NrKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShibGtnLCBcXHUwMDI2cS1cXHUwMDNlYmxrZ19saXN0LCBxX25vZGUpIHtcXG4tXFx0XFx0c3RydWN0IGJsa2NnICpibGtjZyA9IGJsa2ctXFx1MDAzZWJsa2NnO1xcbi1cXHRcXHRzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQ7XFxuLVxcbi1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmJsa2NnLVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0cGQgPSBibGtnLVxcdTAwM2VwZFtwb2wtXFx1MDAzZXBsaWRdO1xcbi1cXHRcXHRpZiAocGQpIHtcXG4tXFx0XFx0XFx0aWYgKHBkLVxcdTAwM2VvbmxpbmUgXFx1MDAyNlxcdTAwMjYgcG9sLVxcdTAwM2VwZF9vZmZsaW5lX2ZuKVxcbi1cXHRcXHRcXHRcXHRwb2wtXFx1MDAzZXBkX29mZmxpbmVfZm4ocGQpO1xcbi1cXHRcXHRcXHRwZC1cXHUwMDNlb25saW5lID0gZmFsc2U7XFxuLVxcdFxcdFxcdHBvbC1cXHUwMDNlcGRfZnJlZV9mbihwZCk7XFxuLVxcdFxcdFxcdFdSSVRFX09OQ0UoYmxrZy1cXHUwMDNlcGRbcG9sLVxcdTAwM2VwbGlkXSwgTlVMTCk7XFxuLVxcdFxcdH1cXG4tXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmJsa2NnLVxcdTAwM2Vsb2NrKTtcXG4tXFx0fVxcbitcXHRibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzKHEsIHBvbCk7XFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cS1cXHUwMDNlcXVldWVfbG9jayk7XFxuIFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdGdvdG8gb3V0O1xcbkBAIC0xNjY5LDcgKzE2ODgsNiBAQCB2b2lkIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbiBcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG4ge1xcbiBcXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stXFx1MDAzZXF1ZXVlO1xcbi1cXHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2c7XFxuIFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4gXFxuIFxcdGlmICghYmxrY2dfcG9saWN5X2VuYWJsZWQocSwgcG9sKSlcXG5AQCAtMTY4MiwyMCArMTcwMCw3IEBAIHZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbiBcXG4gXFx0X19jbGVhcl9iaXQocG9sLVxcdTAwM2VwbGlkLCBxLVxcdTAwM2VibGtjZ19wb2xzKTtcXG4tXFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoYmxrZywgXFx1MDAyNnEtXFx1MDAzZWJsa2dfbGlzdCwgcV9ub2RlKSB7XFxuLVxcdFxcdHN0cnVjdCBibGtjZyAqYmxrY2cgPSBibGtnLVxcdTAwM2VibGtjZztcXG4tXFxuLVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2YmxrY2ctXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRpZiAoYmxrZy1cXHUwMDNlcGRbcG9sLVxcdTAwM2VwbGlkXSkge1xcbi1cXHRcXHRcXHRpZiAoYmxrZy1cXHUwMDNlcGRbcG9sLVxcdTAwM2VwbGlkXS1cXHUwMDNlb25saW5lIFxcdTAwMjZcXHUwMDI2IHBvbC1cXHUwMDNlcGRfb2ZmbGluZV9mbilcXG4tXFx0XFx0XFx0XFx0cG9sLVxcdTAwM2VwZF9vZmZsaW5lX2ZuKGJsa2ctXFx1MDAzZXBkW3BvbC1cXHUwMDNlcGxpZF0pO1xcbi1cXHRcXHRcXHRwb2wtXFx1MDAzZXBkX2ZyZWVfZm4oYmxrZy1cXHUwMDNlcGRbcG9sLVxcdTAwM2VwbGlkXSk7XFxuLVxcdFxcdFxcdGJsa2ctXFx1MDAzZXBkW3BvbC1cXHUwMDNlcGxpZF0gPSBOVUxMO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZibGtjZy1cXHUwMDNlbG9jayk7XFxuLVxcdH1cXG4tXFxuK1xcdGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMocSwgcG9sKTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZxLVxcdTAwM2VxdWV1ZV9sb2NrKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZxLVxcdTAwM2VibGtjZ19tdXRleCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MTo1OC4xMDI0ODk0MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NjQyNTM1OTM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCTEtfREVWX1RIUk9UVExJTkdcIixcbiAgICBcIkJMS19DR1JPVVBfSU9MQVRFTkNZXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVFwiLFxuICAgIFwiSU9TQ0hFRF9CRlFcIixcbiAgICBcIkJGUV9HUk9VUF9JT1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrY2dfYWN0aXZhdGVfcG9saWN5XCIsXG4gICAgXCJibGtjZ19kZWFjdGl2YXRlX3BvbGljeVwiLFxuICAgIFwiYmxrY2dfZXhpdF9kaXNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBibG9jayBjZ3JvdXAgcG9saWN5IGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uIGFuZCBkaXNrIHRlYXJkb3duIGJ5IGFkZGluZyBhIG11dGV4IGxvY2suIFRoZXNlIGFyZSBjb3JlIGJsb2NrIGNncm91cCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGR5bmFtaWNhbGx5IHdoZW4gZW5hYmxpbmcvZGlzYWJsaW5nIGNncm91cCBwb2xpY2llcyBvciBkZXN0cm95aW5nIGJsb2NrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMwNWQ4MWRjYTJiZGI5NDU5OWNlMzNiMGIyZmFhNTgyYjBiZGI0NTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDE4OjUxOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jXG5pbmRleCBkOTY3NjEyNmM1YjVkLi4zNTQ2MzdmM2IxNThjIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNncm91cC5jXG4rKysgYi9ibG9jay9ibGstY2dyb3VwLmNcbkBAIC01NjksNiArNTY5LDcgQEAgc3RhdGljIHZvaWQgYmxrZ19kZXN0cm95X2FsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdGludCBpO1xuIFxuIHJlc3RhcnQ6XG4rXHRtdXRleF9sb2NrKFx1MDAyNnEtXHUwMDNlYmxrY2dfbXV0ZXgpO1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShibGtnLCBcdTAwMjZxLVx1MDAzZWJsa2dfbGlzdCwgcV9ub2RlKSB7XG4gXHRcdHN0cnVjdCBibGtjZyAqYmxrY2cgPSBibGtnLVx1MDAzZWJsa2NnO1xuQEAgLTU4Nyw2ICs1ODgsNyBAQCBzdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3lfYWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0XHRpZiAoISgtLWNvdW50KSkge1xuIFx0XHRcdGNvdW50ID0gQkxLR19ERVNUUk9ZX0JBVENIX1NJWkU7XG4gXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnEtXHUwMDNlYmxrY2dfbXV0ZXgpO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHRcdGdvdG8gcmVzdGFydDtcbiBcdFx0fVxuQEAgLTYwNiw2ICs2MDgsNyBAQCBzdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3lfYWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFxuIFx0cS1cdTAwM2Vyb290X2Jsa2cgPSBOVUxMO1xuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cS1cdTAwM2VibGtjZ19tdXRleCk7XG4gXG4gXHR3YWtlX3VwX3ZhcihcdTAwMjZxLVx1MDAzZXJvb3RfYmxrZyk7XG4gfVxuQEAgLTE1MjYsNiArMTUyOSwzMSBAQCBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBpb19jZ3JwX3N1YnN5cyA9IHtcbiB9O1xuIEVYUE9SVF9TWU1CT0xfR1BMKGlvX2NncnBfc3Vic3lzKTtcbiBcbisvKlxuKyAqIFRlYXIgZG93biBwZXItYmxrZyBwb2xpY3kgZGF0YSBmb3IgQHBvbCBvbiBAcS5cbisgKi9cbitzdGF0aWMgdm9pZCBibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuK3tcbitcdHN0cnVjdCBibGtjZ19ncSAqYmxrZztcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoYmxrZywgXHUwMDI2cS1cdTAwM2VibGtnX2xpc3QsIHFfbm9kZSkge1xuK1x0XHRzdHJ1Y3QgYmxrY2cgKmJsa2NnID0gYmxrZy1cdTAwM2VibGtjZztcbitcdFx0c3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkO1xuK1xuK1x0XHRzcGluX2xvY2soXHUwMDI2YmxrY2ctXHUwMDNlbG9jayk7XG4rXHRcdHBkID0gYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF07XG4rXHRcdGlmIChwZCkge1xuK1x0XHRcdGlmIChwZC1cdTAwM2VvbmxpbmUgXHUwMDI2XHUwMDI2IHBvbC1cdTAwM2VwZF9vZmZsaW5lX2ZuKVxuK1x0XHRcdFx0cG9sLVx1MDAzZXBkX29mZmxpbmVfZm4ocGQpO1xuK1x0XHRcdHBkLVx1MDAzZW9ubGluZSA9IGZhbHNlO1xuK1x0XHRcdHBvbC1cdTAwM2VwZF9mcmVlX2ZuKHBkKTtcbitcdFx0XHRXUklURV9PTkNFKGJsa2ctXHUwMDNlcGRbcG9sLVx1MDAzZXBsaWRdLCBOVUxMKTtcbitcdFx0fVxuK1x0XHRzcGluX3VubG9jayhcdTAwMjZibGtjZy1cdTAwM2Vsb2NrKTtcbitcdH1cbit9XG4rXG4gLyoqXG4gICogYmxrY2dfYWN0aXZhdGVfcG9saWN5IC0gYWN0aXZhdGUgYSBibGtjZyBwb2xpY3kgb24gYSBnZW5kaXNrXG4gICogQGRpc2s6IGdlbmRpc2sgb2YgaW50ZXJlc3RcbkBAIC0xNTYzLDYgKzE1OTEsOCBAQCBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG4gXG4gXHRpZiAocXVldWVfaXNfbXEocSkpXG4gXHRcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cS1cdTAwM2VibGtjZ19tdXRleCk7XG4gcmV0cnk6XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4gXG5AQCAtMTU3Miw2ICsxNjAyLDggQEAgaW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuIFxuIFx0XHRpZiAoYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF0pXG4gXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChobGlzdF91bmhhc2hlZChcdTAwMjZibGtnLVx1MDAzZWJsa2NnX25vZGUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHQvKiBJZiBwcmVhbGxvYyBtYXRjaGVzLCB1c2UgaXQ7IG90aGVyd2lzZSB0cnkgR0ZQX05PV0FJVCAqL1xuIFx0XHRpZiAoYmxrZyA9PSBwaW5uZWRfYmxrZykge1xuQEAgLTE2MjUsNiArMTY1Nyw3IEBAIGludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcbiBcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIG91dDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZxLVx1MDAzZWJsa2NnX211dGV4KTtcbiBcdGlmIChxdWV1ZV9pc19tcShxKSlcbiBcdFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcbiBcdGlmIChwaW5uZWRfYmxrZylcbkBAIC0xNjM2LDIxICsxNjY5LDcgQEAgaW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuIGVub21lbTpcbiBcdC8qIGFsbG9jIGZhaWxlZCwgdGFrZSBkb3duIGV2ZXJ5dGhpbmcgKi9cbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2cS1cdTAwM2VxdWV1ZV9sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoYmxrZywgXHUwMDI2cS1cdTAwM2VibGtnX2xpc3QsIHFfbm9kZSkge1xuLVx0XHRzdHJ1Y3QgYmxrY2cgKmJsa2NnID0gYmxrZy1cdTAwM2VibGtjZztcbi1cdFx0c3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkO1xuLVxuLVx0XHRzcGluX2xvY2soXHUwMDI2YmxrY2ctXHUwMDNlbG9jayk7XG4tXHRcdHBkID0gYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF07XG4tXHRcdGlmIChwZCkge1xuLVx0XHRcdGlmIChwZC1cdTAwM2VvbmxpbmUgXHUwMDI2XHUwMDI2IHBvbC1cdTAwM2VwZF9vZmZsaW5lX2ZuKVxuLVx0XHRcdFx0cG9sLVx1MDAzZXBkX29mZmxpbmVfZm4ocGQpO1xuLVx0XHRcdHBkLVx1MDAzZW9ubGluZSA9IGZhbHNlO1xuLVx0XHRcdHBvbC1cdTAwM2VwZF9mcmVlX2ZuKHBkKTtcbi1cdFx0XHRXUklURV9PTkNFKGJsa2ctXHUwMDNlcGRbcG9sLVx1MDAzZXBsaWRdLCBOVUxMKTtcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9jayhcdTAwMjZibGtjZy1cdTAwM2Vsb2NrKTtcbi1cdH1cbitcdGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMocSwgcG9sKTtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFx0cmV0ID0gLUVOT01FTTtcbiBcdGdvdG8gb3V0O1xuQEAgLTE2NjksNyArMTY4OCw2IEBAIHZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG4ge1xuIFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkaXNrLVx1MDAzZXF1ZXVlO1xuLVx0c3RydWN0IGJsa2NnX2dxICpibGtnO1xuIFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuIFxuIFx0aWYgKCFibGtjZ19wb2xpY3lfZW5hYmxlZChxLCBwb2wpKVxuQEAgLTE2ODIsMjAgKzE3MDAsNyBAQCB2b2lkIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFxuIFx0X19jbGVhcl9iaXQocG9sLVx1MDAzZXBsaWQsIHEtXHUwMDNlYmxrY2dfcG9scyk7XG4tXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsa2csIFx1MDAyNnEtXHUwMDNlYmxrZ19saXN0LCBxX25vZGUpIHtcbi1cdFx0c3RydWN0IGJsa2NnICpibGtjZyA9IGJsa2ctXHUwMDNlYmxrY2c7XG4tXG4tXHRcdHNwaW5fbG9jayhcdTAwMjZibGtjZy1cdTAwM2Vsb2NrKTtcbi1cdFx0aWYgKGJsa2ctXHUwMDNlcGRbcG9sLVx1MDAzZXBsaWRdKSB7XG4tXHRcdFx0aWYgKGJsa2ctXHUwMDNlcGRbcG9sLVx1MDAzZXBsaWRdLVx1MDAzZW9ubGluZSBcdTAwMjZcdTAwMjYgcG9sLVx1MDAzZXBkX29mZmxpbmVfZm4pXG4tXHRcdFx0XHRwb2wtXHUwMDNlcGRfb2ZmbGluZV9mbihibGtnLVx1MDAzZXBkW3BvbC1cdTAwM2VwbGlkXSk7XG4tXHRcdFx0cG9sLVx1MDAzZXBkX2ZyZWVfZm4oYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF0pO1xuLVx0XHRcdGJsa2ctXHUwMDNlcGRbcG9sLVx1MDAzZXBsaWRdID0gTlVMTDtcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9jayhcdTAwMjZibGtjZy1cdTAwM2Vsb2NrKTtcbi1cdH1cbi1cbitcdGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMocSwgcG9sKTtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnEtXHUwMDNlYmxrY2dfbXV0ZXgpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTE6NTguMTAyNDkyNjY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExMDE2MDc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCbG9jayBDZ3JvdXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYmxvY2svYmxrLWNncm91cC5jYC4gSXQncyB0b3VjaGluZyBzb21lIGNvcmUgZnVuY3Rpb25zOiBgYmxrZ19kZXN0cm95X2FsbGAsIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgbmV3IGZ1bmN0aW9uLCBgYmxrY2dfcG9saWN5X3RlYXJkb3duX3Bkc2AsIHdoaWNoIGxvb2tzIGxpa2UgaXQncyBiZWVuIHB1bGxlZCBvdXQgb2YgdGhlIGFjdGl2YXRpb24gYW5kIGRlYWN0aXZhdGlvbiByb3V0aW5lcyDigJMgcHJvYmFibHkgZm9yIGJldHRlciBjb2RlIHJldXNlIGFuZCBvcmdhbml6YXRpb24sIHNtYXJ0LlxuXG5UaGUgYWRkaXRpb24gb2YgdGhvc2UgYG11dGV4X2xvY2tgIGFuZCBgbXV0ZXhfdW5sb2NrYCBjYWxscyBhcm91bmQgYHEtXHUwMDNlYmxrY2dfbXV0ZXhgIGluIGBibGtnX2Rlc3Ryb3lfYWxsYCBhbmQgYGJsa2NnX2FjdGl2YXRlX3BvbGljeWAgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoaXMgc3VnZ2VzdHMgYSByYWNlIGNvbmRpdGlvbiBvciBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZSB3YXMgYWRkcmVzc2VkLiBQcm90ZWN0aW5nIHNoYXJlZCBkYXRhIHdpdGggbXV0ZXhlcyBpcyBhbHdheXMgYSBnb29kIHNpZ24gb2YgY2FyZWZ1bG5lc3MuIEFsc28gdGhhdCBgaWYgKGhsaXN0X3VuaGFzaGVkKFx1MDAyNmJsa2ctXHUwMDNlYmxrY2dfbm9kZSkpIGNvbnRpbnVlO2AgaW4gYGJsa2NnX2FjdGl2YXRlX3BvbGljeWAgaW1wbGllcyB0aGUgY29kZSBpcyBwcmV2ZW50aW5nIHdvcmsgb24gdW5oYXNoZWQgZWxlbWVudHMuIEZpbmUtZ3JhaW5lZCBjb250cm9sLCBJIGxpa2UgaXQuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYmxvY2sgY2dyb3VwIHN1YnN5c3RlbSwgd2hpY2ggbWVhbnMgaXQncyBhIHJlYWNoYWJsZSBjb2RlIHBhdGggYW5kIHNob3VsZCBiZSBmdXp6ZWQgdGhvcm91Z2hseS4gVGltZSB0byBzdGFydCB0aGlua2luZyBhYm91dCB0ZXN0IGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIEknbGwgbmVlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGluIG15IHRlc3RpbmcgZW52aXJvbm1lbnQuIExldCdzIHNlZS4uLiBhIHF1aWNrIHNlYXJjaCBmb3IgYGJsay1jZ3JvdXAuY2AgaW4gdGhlIGBibG9jay9NYWtlZmlsZWAgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gY2x1ZXMgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTI6MDMuMjEyNjU2MTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUyMDgyMzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsay1jZ3JvdXAuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjAzLjI5Nzg3MzQ2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MzE1MzY2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGlyZWN0aW5nIE15IEF0dGVudGlvbjogVGhlIGBibG9jay9NYWtlZmlsZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHJpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBMZXQncyBjdXQgdGhyb3VnaCBhbnkgbGF5ZXJzIG9mIGFic3RyYWN0aW9uIGFuZCBnbyBzdHJhaWdodCB0byB0aGUgYGJsb2NrL01ha2VmaWxlYC4gTm8gbmVlZCB0byBiZWF0IGFyb3VuZCB0aGUgYnVzaDsgSSdtIGdvaW5nIHRvIGV4YW1pbmUgdGhpcyBkaXJlY3RseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgYXQgaXRzIG1vc3QgZnVuZGFtZW50YWwgbGV2ZWwsIHNvIHRoZSBgTWFrZWZpbGVgIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGluZ3MgYXJlIGJlaW5nIG9yY2hlc3RyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI2MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjA1LjgyOTQxMjc1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIGJsb2NrIGxheWVyXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdENPTlRFWFRfQU5BTFlTSVMgOj0geVxcbiAgIDc6XFx0XFxuICAgODpcXHRvYmoteVxcdFxcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdGJsay1mbHVzaC5vIGJsay1zZXR0aW5ncy5vIGJsay1pb2MubyBibGstbWFwLm8gXFxcXFxcbiAgMTA6XFx0XFx0XFx0XFx0YmxrLW1lcmdlLm8gYmxrLXRpbWVvdXQubyBibGstbGliLm8gYmxrLW1xLm8gXFxcXFxcbiAgMTE6XFx0XFx0XFx0XFx0YmxrLW1xLXRhZy5vIGJsay1tcS1kbWEubyBibGstc3RhdC5vIFxcXFxcXG4gIDEyOlxcdFxcdFxcdFxcdGJsay1tcS1zeXNmcy5vIGJsay1tcS1jcHVtYXAubyBibGstbXEtc2NoZWQubyBpb2N0bC5vIFxcXFxcXG4gIDEzOlxcdFxcdFxcdFxcdGdlbmhkLm8gaW9wcmlvLm8gYmFkYmxvY2tzLm8gcGFydGl0aW9ucy8gYmxrLXJxLXFvcy5vIFxcXFxcXG4gIDE0OlxcdFxcdFxcdFxcdGRpc2stZXZlbnRzLm8gYmxrLWlhLXJhbmdlcy5vIGVhcmx5LWxvb2t1cC5vXFxuICAxNTpcXHRcXG4gIDE2OlxcdG9iai0kKENPTkZJR19CTEtfRVJST1JfSU5KRUNUSU9OKSArPSBlcnJvci1pbmplY3Rpb24ub1xcbiAgMTc6XFx0b2JqLSQoQ09ORklHX0JMS19ERVZfQlNHX0NPTU1PTikgKz0gYnNnLm9cXG4gIDE4OlxcdG9iai0kKENPTkZJR19CTEtfREVWX0JTR0xJQilcXHQrPSBic2ctbGliLm9cXG4gIDE5OlxcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQKVxcdCs9IGJsay1jZ3JvdXAub1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfUldTVEFUKVxcdCs9IGJsay1jZ3JvdXAtcndzdGF0Lm9cXG4gIDIxOlxcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX0ZDX0FQUElEKSArPSBibGstY2dyb3VwLWZjLWFwcGlkLm9cXG4gIDIyOlxcdG9iai0kKENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcpXFx0Kz0gYmxrLXRocm90dGxlLm9cXG4gIDIzOlxcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcXHQrPSBibGstaW9wcmlvLm9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWSlcXHQrPSBibGstaW9sYXRlbmN5Lm9cXG4gIDI1OlxcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVClcXHQrPSBibGstaW9jb3N0Lm9cXG4gIDI2OlxcdG9iai0kKENPTkZJR19NUV9JT1NDSEVEX0RFQURMSU5FKVxcdCs9IG1xLWRlYWRsaW5lLm9cXG4gIDI3OlxcdG9iai0kKENPTkZJR19NUV9JT1NDSEVEX0tZQkVSKVxcdCs9IGt5YmVyLWlvc2NoZWQub1xcbiAgMjg6XFx0YmZxLXlcXHRcXHRcXHRcXHQ6PSBiZnEtaW9zY2hlZC5vIGJmcS13ZjJxLm8gYmZxLWNncm91cC5vXFxuICAyOTpcXHRvYmotJChDT05GSUdfSU9TQ0hFRF9CRlEpXFx0Kz0gYmZxLm9cXG4gIDMwOlxcdFxcbiAgMzE6XFx0b2JqLSQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKSArPSBiaW8taW50ZWdyaXR5Lm8gYmxrLWludGVncml0eS5vIHQxMC1waS5vIFxcXFxcXG4gIDMyOlxcdFxcdFxcdFxcdFxcdCAgIGJpby1pbnRlZ3JpdHktYXV0by5vIGJpby1pbnRlZ3JpdHktZnMub1xcbiAgMzM6XFx0b2JqLSQoQ09ORklHX0JMS19ERVZfWk9ORUQpXFx0Kz0gYmxrLXpvbmVkLm9cXG4gIDM0OlxcdG9iai0kKENPTkZJR19CTEtfV0JUKVxcdFxcdCs9IGJsay13YnQub1xcbiAgMzU6XFx0b2JqLSQoQ09ORklHX0JMS19ERUJVR19GUylcXHQrPSBibGstbXEtZGVidWdmcy5vXFxuICAzNjpcXHRvYmotJChDT05GSUdfQkxLX1NFRF9PUEFMKVxcdCs9IHNlZC1vcGFsLm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19CTEtfUE0pXFx0XFx0Kz0gYmxrLXBtLm9cXG4gIDM4OlxcdG9iai0kKENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT04pXFx0Kz0gYmxrLWNyeXB0by5vIGJsay1jcnlwdG8tcHJvZmlsZS5vIFxcXFxcXG4gIDM5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGJsay1jcnlwdG8tc3lzZnMub1xcbiAgNDA6XFx0b2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSylcXHQrPSBibGstY3J5cHRvLWZhbGxiYWNrLm9cXG4gIDQxOlxcdG9iai0kKENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRClcXHQrPSBob2xkZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MjowNS44Mjk1NzA3MzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTcyNTA2MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgQmxvY2sgSU8gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gdGhlIGFyY2hpdGVjdHVyZSBJJ20gd29ya2luZyB3aXRoICpkZW1hbmRzKiBgQ09ORklHX0JMS19DR1JPVVBgLiBObyB3YXkgYXJvdW5kIHRoYXQsIGl0IHNlZW1zLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBub3cgZ29lcyBzdHJhaWdodCB0byBkZXBlbmRlbmNpZXMuIEJlZm9yZSBJIGRpdmUgaW50byBhbnkgY29kZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoYXQqIHRoaXMgc2V0dGluZyBmdW5kYW1lbnRhbGx5IHJlbGllcyBvbi4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgb3IgdGhhdCBJICptdXN0KiBzZXQgdG8gYXZvaWQgYSBjYXRhc3Ryb3BoaWMgbWVsdGRvd24/IE9yLCBjb252ZXJzZWx5LCB3aGF0IGZlYXR1cmVzIG1pZ2h0IEkgbG9zZSBpZiB0aGlzIGNvbmZpZyBmbGFnIGlzIHNvbWVob3cgbWlzc2luZz8gVGltZSB0byBwZWVsIGJhY2sgdGhlIGxheWVycyBhbmQgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaXRzIGltcGFjdCBvbiB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjA5LjAwMjA3OTU0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM0MTU1MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19DR1JPVVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXFxuLS1cXG5ibG9jay9LY29uZmlnLTQxLVxcbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXFxuYmxvY2svS2NvbmZpZy00My1cXHRib29sXFxuYmxvY2svS2NvbmZpZy00NC1cXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXFxuYmxvY2svS2NvbmZpZy00Ni1cXHRib29sXFxuLS1cXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMzMtXFxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXFxuYmxvY2svS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE0NC1cXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxcbmJsb2NrL0tjb25maWctMTQ2LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNTMtXFxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXFxuYmxvY2svS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE2My1cXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cXG5ibG9jay9LY29uZmlnLTE2NS1cXHRib29sIFxcXCJDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjA5LjE2NTQ5OTYwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MzM1NDk3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipTZWFyY2hpbmcgZm9yIGEgTWlzc2luZyBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbk9rYXksIHNvIEkgd2FzIGxvb2tpbmcgZm9yIGBjb25maWcgQkxLX0NHUk9VUGAgd2l0aGluIHRoZSBgYmxvY2svS2NvbmZpZ2AgZmlsZSwgYnV0IGl0IGxvb2tzIGxpa2UgaXQncyBub3QgcHJlc2VudCB0aGVyZS4gSG1tLCB0aGF0J3MgdW51c3VhbC4gV2hlcmUgY291bGQgaXQgYmUgZGVmaW5lZD8gVGltZSB0byBicm9hZGVuIHRoZSBzZWFyY2guIExldCdzIGRvIGEgZ2xvYmFsIHNlYXJjaCBhY3Jvc3MgdGhlIGVudGlyZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0cmVlLiBNYXliZSBpdCdzIGRlZmluZWQgaW4gYSBkaWZmZXJlbnQsIHJlbGF0ZWQgc3Vic3lzdGVtIG9yIGZpbGUuIFRoaXMgaXMgY29tbW9uOyBzb21ldGltZXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBsb2dpY2FsbHkgZ3JvdXBlZCBlbHNld2hlcmUgZm9yIG9yZ2FuaXphdGlvbmFsIHJlYXNvbnMuIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgY3J1Y2lhbCBmbGFnIGlzIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAxMiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjExLjc5OTA1MjM4N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAxNzU1NjQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcXG4tLVxcbmJsb2NrL0tjb25maWctNDEtXFxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcXG5ibG9jay9LY29uZmlnLTQzLVxcdGJvb2xcXG5ibG9jay9LY29uZmlnLTQ0LVxcbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG5ibG9jay9LY29uZmlnLTQ2LVxcdGJvb2xcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTQ0LVxcbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuYmxvY2svS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTYzLVxcbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbmJsb2NrL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIkNncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1xcXCJcXG4tLVxcbmluaXQvS2NvbmZpZz0xMDk5PWNvbmZpZyBNRU1DR19WMVxcbi0tXFxuaW5pdC9LY29uZmlnLTExMTUtXFxuaW5pdC9LY29uZmlnOjExMTY6Y29uZmlnIEJMS19DR1JPVVBcXG5pbml0L0tjb25maWctMTExNy1cXHRib29sIFxcXCJJTyBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MjoxNS44MTY2NjI1NjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3MjkyOTQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIHRocm91Z2ggdGhpcyBrZXJuZWwgc291cmNlLiBBaCwgdGhlIGxpa2VseSBjdWxwcml0IGlzIGluIGBpbml0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBpbml0aWFsaXphdGlvbi4gTGV0J3Mgc2VlLi4uIEknbGwganVtcCByaWdodCB0byBhcm91bmQgbGluZSAxMTE2IGluIGBpbml0L0tjb25maWdgIGFuZCB0YWtlIGEgbG9vay4gVGhhdCBzaG91bGQgZ2V0IG1lIHN0YXJ0ZWQuIEtub3dpbmcgdGhlIEtjb25maWcgbGF5b3V0IGFzIEkgZG8sIHRoaXMgZmVlbHMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgZm9yIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gTm93LCBsZXQncyBzZWUgd2hhdCdzIGRlZmluZWQgdGhlcmUuLi4gSSBleHBlY3QgdG8gZmluZCBzb21lIG9mIHRoZSB0b3AtbGV2ZWwgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucywgb3IgbWF5YmUgc29tZSByZWxldmFudCBkZWZhdWx0cyBvciBkZXBlbmRlbmNpZXMgZGVmaW5lZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYzNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjE4LjY4OTU5NDY4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMTA6XFx0XFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XFxuMTExMTpcXHRcXHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcXG4xMTEyOlxcdFxcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxcbjExMTM6XFx0XFxuMTExNDpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMTE1OlxcdFxcbjExMTY6XFx0Y29uZmlnIEJMS19DR1JPVVBcXG4xMTE3OlxcdFxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuMTExODpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLXFxuMTExOTpcXHRcXHRkZWZhdWx0IG5cXG4xMTIwOlxcdFxcdGhlbHBcXG4xMTIxOlxcdFxcdEdlbmVyaWMgYmxvY2sgSU8gY29udHJvbGxlciBjZ3JvdXAgaW50ZXJmYWNlLiBUaGlzIGlzIHRoZSBjb21tb25cXG4xMTIyOlxcdFxcdGNncm91cCBpbnRlcmZhY2Ugd2hpY2ggc2hvdWxkIGJlIHVzZWQgYnkgdmFyaW91cyBJTyBjb250cm9sbGluZ1xcbjExMjM6XFx0XFx0cG9saWNpZXMuXFxuMTEyNDpcXHRcXG4xMTI1OlxcdFxcdEN1cnJlbnRseSwgQ0ZRIElPIHNjaGVkdWxlciB1c2VzIGl0IHRvIHJlY29nbml6ZSB0YXNrIGdyb3VwcyBhbmRcXG4xMTI2OlxcdFxcdGNvbnRyb2wgZGlzayBiYW5kd2lkdGggYWxsb2NhdGlvbiAocHJvcG9ydGlvbmFsIHRpbWUgc2xpY2UgYWxsb2NhdGlvbilcXG4xMTI3OlxcdFxcdHRvIHN1Y2ggdGFzayBncm91cHMuIEl0IGlzIGFsc28gdXNlZCBieSBiaW8gdGhyb3R0bGluZyBsb2dpYyBpblxcbjExMjg6XFx0XFx0YmxvY2sgbGF5ZXIgdG8gaW1wbGVtZW50IHVwcGVyIGxpbWl0IGluIElPIHJhdGVzIG9uIGEgZGV2aWNlLlxcbjExMjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjE4LjY4OTc2Njc4OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA2Nzg3NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QgaGVyZS5cblxuKipEZXBlbmRlbmNpZXMgYW5kIEZ1bmN0aW9uIEFuYWx5c2lzOiBCTEtfQ0dST1VQIGFuZCBCTE9DSyoqXG5cblJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIGBCTEtfQ0dST1VQYCBpcyBmdW5kYW1lbnRhbGx5IHJlbGlhbnQgb24gYEJMT0NLYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGRlcGVuZGVuY3kgbWFuaWZlc3RzIGl0c2VsZiBhdCB0aGUgZnVuY3Rpb24gbGV2ZWwuIExldCdzIGRpZyBpbnRvIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuXG5cblRoZSBvbmVzIGZsYWdnZWQgYXJlOiBgYmxrZ19kZXN0cm95X2FsbGAsIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YC4gT2theSwgdGhhdCdzIGEgcmVhc29uYWJsZSBzZXQgdG8gc3RhcnQgd2l0aCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgbmFtZXMuIE5vdyBJIGhhdmUgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIHNvdXJjZSBjb2RlOyBhcmUgdGhleSBleHBvcnRlZCwgb3IgYXJlIHRoZXkgc3RhdGljLlxuXG5BbHJpZ2h0LCBhIHF1aWNrIGNoZWNrIHNob3dzIHRoYXQgYGJsa2dfZGVzdHJveV9hbGxgIGlzIHN0YXRpYyDigJMgbWVhbmluZyBpdCdzIGNvbmZpbmVkIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQgYW5kIG5vdCBhdmFpbGFibGUgZm9yIGV4dGVybmFsIGxpbmtpbmcuIEJ1dCwgYGJsa2NnX2FjdGl2YXRlX3BvbGljeWAgYW5kIGBibGtjZ19kZWFjdGl2YXRlX3BvbGljeWAgYXJlIGV4cG9ydGVkLCB3aGljaCBpbXBsaWVzIHRoYXQgb3RoZXIgbW9kdWxlcyBvciBjb21wb25lbnRzIGNhbiBjYWxsIGFuZCBkZXBlbmQgb24gdGhlaXIgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNDgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjIyLjI5NjU1NzU4NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwOTIxNzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2NnX2FjdGl2YXRlX3BvbGljeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmZxLWNncm91cC5jPTEyNTQ9c3RydWN0IGJmcV9ncm91cCAqYmZxX2NyZWF0ZV9ncm91cF9oaWVyYXJjaHkoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBpbnQgbm9kZSlcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjU3LVxcbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMjU4OlxcdHJldCA9IGJsa2NnX2FjdGl2YXRlX3BvbGljeShiZnFkLVxcdTAwM2VxdWV1ZS1cXHUwMDNlZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV9iZnEpO1xcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjU5LVxcdGlmIChyZXQpXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTcxOTY9c3RhdGljIGludCBiZnFfaW5pdF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplcSlcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNzMyOC1cXHQgKiBmdW5jdGlvbiBpcyB0aGUgaGVhZCBvZiBhIGNoYWluIG9mIGZ1bmN0aW9uIGNhbGxzXFxuYmxvY2svYmZxLWlvc2NoZWQuYzo3MzI5OlxcdCAqIChiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeS1cXHUwMDNlYmxrY2dfYWN0aXZhdGVfcG9saWN5LVxcdTAwM2VcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTczMzAtXFx0ICogYmxrX21xX2ZyZWV6ZV9xdWV1ZSkgdGhhdCBtYXkgbGVhZCB0byB0aGUgaW52b2NhdGlvbiBvZiB0aGVcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xNTM1PXN0YXRpYyB2b2lkIGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTU1Ny0vKipcXG5ibG9jay9ibGstY2dyb3VwLmM6MTU1ODogKiBibGtjZ19hY3RpdmF0ZV9wb2xpY3kgLSBhY3RpdmF0ZSBhIGJsa2NnIHBvbGljeSBvbiBhIGdlbmRpc2tcXG5ibG9jay9ibGstY2dyb3VwLmMtMTU1OS0gKiBAZGlzazogZ2VuZGlzayBvZiBpbnRlcmVzdFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE1NzItICovXFxuYmxvY2svYmxrLWNncm91cC5jOjE1NzM6aW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTc0LXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNjc2LX1cXG5ibG9jay9ibGstY2dyb3VwLmM6MTY3NzpFWFBPUlRfU1lNQk9MX0dQTChibGtjZ19hY3RpdmF0ZV9wb2xpY3kpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNjc4LVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE2ODQtICogRGVhY3RpdmF0ZSBAcG9sIG9uIEBkaXNrLiAgRm9sbG93cyB0aGUgc2FtZSBzeW5jaHJvbml6YXRpb24gcnVsZXMgYXNcXG5ibG9jay9ibGstY2dyb3VwLmM6MTY4NTogKiBibGtjZ19hY3RpdmF0ZV9wb2xpY3koKS5cXG5ibG9jay9ibGstY2dyb3VwLmMtMTY4Ni0gKi9cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMDI9dm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMDM6aW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcXG5ibG9jay9ibGstY2dyb3VwLmgtMjA0LXZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9NDg5PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgfVxcbmJsb2NrL2Jsay1jZ3JvdXAuaDo0OTA6c3RhdGljIGlubGluZSBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay1jZ3JvdXAuaC00OTEtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKSB7IHJldHVybiAwOyB9XFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmM9MjkxNT1zdGF0aWMgaW50IGJsa19pb2Nvc3RfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTY2LVxcbmJsb2NrL2Jsay1pb2Nvc3QuYzoyOTY3OlxcdHJldCA9IGJsa2NnX2FjdGl2YXRlX3BvbGljeShkaXNrLCBcXHUwMDI2YmxrY2dfcG9saWN5X2lvY29zdCk7XFxuYmxvY2svYmxrLWlvY29zdC5jLTI5NjgtXFx0aWYgKHJldClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz03NTg9c3RhdGljIGludCBibGtfaW9sYXRlbmN5X2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNzcwLVxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjc3MTpcXHRyZXQgPSBibGtjZ19hY3RpdmF0ZV9wb2xpY3koZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3kpO1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy03NzItXFx0aWYgKHJldClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTEzMTg9c3RhdGljIGludCBibGtfdGhyb3RsX2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzM4LVxcdC8qIGFjdGl2YXRlIHBvbGljeSwgYmxrX3Rocm90bF9hY3RpdmF0ZWQoKSB3aWxsIHJldHVybiB0cnVlICovXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTMzOTpcXHRyZXQgPSBibGtjZ19hY3RpdmF0ZV9wb2xpY3koZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwpO1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNDAtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MjoyMi40Mjc0ODUxODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NDAxOTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFBvbGljeSBBY3RpdmF0aW9uIGFuZCBEZWFjdGl2YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgdGhlIGJhbGwgcm9sbGluZyB3aGVuIGEgYmxvY2sgSS9PIGNvbnRyb2wgZ3JvdXAgcG9saWN5IGlzIGVuYWJsZWQuIEknbSBub3RpbmcgdGhhdCBgYmZxX2NyZWF0ZV9ncm91cF9oaWVyYXJjaHlgLCBgYmxrX2lvY29zdF9pbml0YCwgYGJsa19pb2xhdGVuY3lfaW5pdGAsIGFuZCBgYmxrX3Rocm90bF9pbml0YCBhbGwgY2FsbCBpdC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhlc2UgZnVuY3Rpb25zIGFyZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBhbmQgaW5pdGlhbCBzdGF0ZXMgZm9yIHRoZSB2YXJpb3VzIEkvTyBzY2hlZHVsZXJzIGFuZCByZXNvdXJjZSBjb250cm9sbGVycy5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoaXMgYWN0aXZhdGlvbiBoYXBwZW5zIHdoZW4gd2UgaGF2ZSBgQ09ORklHX0lPU0NIRURfQkZRYCwgYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVGAsIGBDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBvciBgQ09ORklHX0JMS19ERVZfVEhST1RUTElOR2Agc2V0LCBhcyB0aGVzZSBhcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuYWJsZSB0aGUgY29ycmVzcG9uZGluZyBwb2xpY2llcy4gV2XigJlyZSB0YWxraW5nIEJGUSBzY2hlZHVsZXIsIEkvTyBjb3N0IGFjY291bnRpbmcsIEkvTyBsYXRlbmN5IG1vbml0b3JpbmcsIGFuZCB0aGUgdHJhZGl0aW9uYWwgdGhyb3R0bGluZyBtZWNoYW5pc20sIHJlc3BlY3RpdmVseS4gSSBuZWVkIHRvIGJlIHN1cmUgdG8gY29uc2lkZXIgdGhhdCByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb21waWxlLXRpbWUgb3B0aW9ucyBhbmQgcnVudGltZSBiZWhhdmlvci5cblxuV2hpbGUgSSdtIGhlcmUsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGNvdW50ZXJwYXJ0LCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgLCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwb2xpY2llcyBhcmUgc2h1dCBkb3duIHdoZW4gdGhleSdyZSBubyBsb25nZXIgbmVlZGVkLiBBIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgcmVxdWlyZXMgY29uc2lkZXJpbmcgbm90IG9ubHkgaW5pdGlhbGl6YXRpb24gYnV0IGFsc28gZGUtaW5pdGlhbGl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTI6MjYuNzIxNTA3NTQzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk5MzQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtjZ19kZWFjdGl2YXRlX3BvbGljeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmZxLWlvc2NoZWQuYz03MTQyPXN0YXRpYyB2b2lkIGJmcV9leGl0X3F1ZXVlKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSlcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNzE2NC0jaWZkZWYgQ09ORklHX0JGUV9HUk9VUF9JT1NDSEVEXFxuYmxvY2svYmZxLWlvc2NoZWQuYzo3MTY1OlxcdGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KGJmcWQtXFx1MDAzZXF1ZXVlLVxcdTAwM2VkaXNrLCBcXHUwMDI2YmxrY2dfcG9saWN5X2JmcSk7XFxuYmxvY2svYmZxLWlvc2NoZWQuYy03MTY2LSNlbHNlXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MTE0PXN0YXRpYyB2b2lkIGJsa2dfZnJlZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTEyMS1cXHQvKlxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMjI6XFx0ICogcGRfZnJlZV9mbigpIGNhbiBhbHNvIGJlIGNhbGxlZCBmcm9tIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KCksXFxuYmxvY2svYmxrLWNncm91cC5jLTEyMy1cXHQgKiBpbiBvcmRlciB0byBtYWtlIHN1cmUgcGRfZnJlZV9mbigpIGlzIGNhbGxlZCBpbiBvcmRlciwgdGhlIGRlbGV0aW9uXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTI1LVxcdCAqIGJsa2NnX211dGV4IGlzIHVzZWQgdG8gc3luY2hyb25pemUgYmxrZ19mcmVlX3dvcmtmbigpIGFuZFxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMjY6XFx0ICogYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKS5cXG5ibG9jay9ibGstY2dyb3VwLmMtMTI3LVxcdCAqL1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTU2ND1zdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3lfYWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTU5OC1cXHQgKiBNYXJrIHBvbGljeSBkZWFjdGl2YXRlZCBzaW5jZSBwb2xpY3kgb2ZmbGluZSBoYXMgYmVlbiBkb25lLCBhbmRcXG5ibG9jay9ibGstY2dyb3VwLmM6NTk5OlxcdCAqIHRoZSBmcmVlIGlzIHNjaGVkdWxlZCwgc28gZnV0dXJlIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KCkgY2FuXFxuYmxvY2svYmxrLWNncm91cC5jLTYwMC1cXHQgKiBiZSBieXBhc3NlZFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTgzMT1pbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTg0NC1cXG5ibG9jay9ibGstY2dyb3VwLmM6ODQ1OlxcdC8qIFByZXZlbnQgY29uY3VycmVudCB3aXRoIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KCkgKi9cXG5ibG9jay9ibGstY2dyb3VwLmMtODQ2LVxcdG11dGV4X2xvY2soXFx1MDAyNnEtXFx1MDAzZWJsa2NnX211dGV4KTtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xNjc3PUVYUE9SVF9TWU1CT0xfR1BMKGJsa2NnX2FjdGl2YXRlX3BvbGljeSk7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTY3OS0vKipcXG5ibG9jay9ibGstY2dyb3VwLmM6MTY4MDogKiBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSAtIGRlYWN0aXZhdGUgYSBibGtjZyBwb2xpY3kgb24gYSBnZW5kaXNrXFxuYmxvY2svYmxrLWNncm91cC5jLTE2ODEtICogQGRpc2s6IGdlbmRpc2sgb2YgaW50ZXJlc3RcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNjg2LSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNjg3OnZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuYmxvY2svYmxrLWNncm91cC5jLTE2ODgtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTcwOS19XFxuYmxvY2svYmxrLWNncm91cC5jOjE3MTA6RVhQT1JUX1NZTUJPTF9HUEwoYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNzExLVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5oPTIwMz1pbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMDQ6dm9pZCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG5ibG9jay9ibGstY2dyb3VwLmgtMjA1LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD00OTA9c3RhdGljIGlubGluZSBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay1jZ3JvdXAuaC00OTEtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKSB7IHJldHVybiAwOyB9XFxuYmxvY2svYmxrLWNncm91cC5oOjQ5MjpzdGF0aWMgaW5saW5lIHZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuYmxvY2svYmxrLWNncm91cC5oLTQ5My1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgfVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jPTI4OTE9c3RhdGljIHZvaWQgaW9jX3Jxb3NfZXhpdChzdHJ1Y3QgcnFfcW9zICpycW9zKVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTI4OTQtXFxuYmxvY2svYmxrLWlvY29zdC5jOjI4OTU6XFx0YmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kocnFvcy1cXHUwMDNlZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV9pb2Nvc3QpO1xcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yODk2LVxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTYzNT1zdGF0aWMgdm9pZCBibGtjZ19pb2xhdGVuY3lfZXhpdChzdHJ1Y3QgcnFfcW9zICpycW9zKVxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTY0MC1cXHRmbHVzaF93b3JrKFxcdTAwMjZibGtpb2xhdC1cXHUwMDNlZW5hYmxlX3dvcmspO1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo2NDE6XFx0YmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kocnFvcy1cXHUwMDNlZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3kpO1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02NDItXFx0a2ZyZWUoYmxraW9sYXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MjoyNi44MDU1MDg5OTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ2MDI1MDY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgQ2dyb3VwIFBvbGljeSBUZWFyZG93bioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBibG9jayBjZ3JvdXAgZnVuY3Rpb25zLiBJdCBzZWVtcyBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgIGdldHMgY2FsbGVkIGZyb20gYGJmcV9leGl0X3F1ZXVlYCwgYGlvY19ycW9zX2V4aXRgLCBhbmQgYGJsa2NnX2lvbGF0ZW5jeV9leGl0YC4gQW5kIGNydWNpYWxseSwgYGJsa2dfZGVzdHJveV9hbGxgIGlzIHBhcnQgb2YgdGhlIGNsZWFuLXVwIHByb2Nlc3MgdHJpZ2dlcmVkIGJ5IHRoZSBkZXN0cnVjdGlvbiBvZiBhIGRpc2sgdmlhIGBibGtjZ19leGl0X2Rpc2tgLiBUaGF0IG1ha2VzIHNlbnNlIC0gd2UgbmVlZCB0byBlbnN1cmUgZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoZSBibG9jayBjZ3JvdXAgaXMgcHJvcGVybHkgY2xlYW5lZCB1cCB3aGVuIHRoZSBiYWNraW5nIHN0b3JhZ2UgZ29lcyBhd2F5LlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIHRvdWNoaW5nIHNvbWUga2V5IGFyZWFzOiBgYmxrZ19kZXN0cm95X2FsbGAsIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YC4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IG1hbmFnZSBibG9jayBjZ3JvdXAgcG9saWNpZXMuIEJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgaXQgc2VlbXMgbGlrZSBhIHJhY2UgY29uZGl0aW9uIGlzIGJlaW5nIGZpeGVkLCBhbmQgdGhleSdyZSB1c2luZyBhIGBtdXRleF9sb2NrKFx1MDAyNnEtXHUwMDNlYmxrY2dfbXV0ZXgpYCBpbiBgYmxrZ19kZXN0cm95X2FsbGAgYW5kIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlIGZvciBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgcXVldWUncyBkYXRhIHN0cnVjdHVyZXMuIFRoZXkncmUgYWxzbyBleHRyYWN0aW5nIGBibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzYCwgd2hpY2ggaXMgdXNlZCBpbiBib3RoIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGFuZCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgIHdoaWNoIGluZGljYXRlcyBzaGFyZWQgdGVhcmRvd24gbG9naWMuXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgY3JpdGljYWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zLCBmaW5kaW5nIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIHdvdWxkIGJlIGltcG9ydGFudC4gSSBzaG91bGQgZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0cyBvbiBgYmxrZ19kZXN0cm95X2FsbGAsIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YCBhcyB0aGVzZSBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzLlxuXG5Ib2xkIG9uLi4uIGBibGtnX2Rlc3Ryb3lfYWxsYCBpcyAqc3RhdGljKi4gVGhhdCdzIGEgbGl0dGxlIGNvbmNlcm5pbmcuIElzIGl0IGlubGluZWQ/IExldCBtZSBxdWlja2x5IGNoZWNrIGBibGstY2dyb3VwLmNgIHRvIHNlZSBpZiB0aGF0J3MgdGhlIGNhc2UuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggY29tcGxldGVseSBiZWZvcmUgYmVnaW5uaW5nIGZ1enppbmcuIElmIGl0J3MgaW5saW5lZCwgSSdsbCBuZWVkIHRvIGFkanVzdCBteSBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTI6MzIuMjY1NzYzNjIzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTc3MjIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtnX2Rlc3Ryb3lfYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstY2dyb3VwLmM9NTE3PXN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveShzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNTI3LVxcdCAqIGJsa2dfZnJlZV93b3JrZm4oKSwgaGVuY2UgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb21cXG5ibG9jay9ibGstY2dyb3VwLmM6NTI4OlxcdCAqIGJsa2NnX2Rlc3Ryb3lfYmxrZ3MoKSBmaXJzdCBhbmQgYWdhaW4gZnJvbSBibGtnX2Rlc3Ryb3lfYWxsKCkgYmVmb3JlXFxuYmxvY2svYmxrLWNncm91cC5jLTUyOS1cXHQgKiBibGtnX2ZyZWVfd29ya2ZuKCkuXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNTYzLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo1NjQ6c3RhdGljIHZvaWQgYmxrZ19kZXN0cm95X2FsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9ibGstY2dyb3VwLmMtNTY1LXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xNDk4PXZvaWQgYmxrY2dfZXhpdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNDk5LXtcXG5ibG9jay9ibGstY2dyb3VwLmM6MTUwMDpcXHRibGtnX2Rlc3Ryb3lfYWxsKGRpc2spO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTAxLVxcdGJsa190aHJvdGxfZXhpdChkaXNrKTtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE4ODY9dm9pZCBibGtfdGhyb3RsX2V4aXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xODkwLVxcdC8qXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTg5MTpcXHQgKiBibGtnX2Rlc3Ryb3lfYWxsKCkgYWxyZWFkeSBkZWFjdGl2YXRlIHRocm90bCBwb2xpY3ksIGp1c3QgY2hlY2sgYW5kXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTg5Mi1cXHQgKiBmcmVlIHRocm90bCBkYXRhLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MjozMi4zNjE1NDQ2OTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIwMjQ2NTc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgSS9PIENncm91cCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlbGF0aW9uc2hpcHMgaGVyZSwgc3BlY2lmaWNhbGx5IGZvciBibG9jayBJL08gY2dyb3Vwcy4gVGhlIGZ1bmN0aW9uIGBibGtnX2Rlc3Ryb3lfYWxsYCBpcyBzdGF0aWMgYnV0IG5vdCBpbmxpbmVkLCB3aGljaCBtZWFucyBpdCdzIGxpa2VseSBhIGNyaXRpY2FsIHBpZWNlIGFuZCBJIHNlZSBpdCdzIGNhbGxlZCBieSBgYmxrY2dfZXhpdF9kaXNrYC4gSSBjb3VsZCBmb2N1cyBteSBhbmFseXNpcyBvbiBgYmxrY2dfZXhpdF9kaXNrYCwgb3IgSSBjb3VsZCBpbmNsdWRlIGJvdGgsIGRlcGVuZGluZyBvbiB3aGF0IEkgZmluZCBkdXJpbmcgZGVlcGVyIGRpdmVzLiBBbHNvLCBgYmxrY2dfYWN0aXZhdGVfcG9saWN5YCBhbmQgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YCBhcmUgZXhwb3J0ZWQgZnVuY3Rpb25zLCBzbyBjbGVhcmx5LCB0aGV5J3JlIHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSBiaWdnZXIgcGljdHVyZSDigJMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyBjbGVhciB0aGF0IGBCTEtfQ0dST1VQYCBpcyBlc3NlbnRpYWwsIG5vIHN1cnByaXNlcyB0aGVyZS4gTGV0IG1lIHNlZSB3aGF0IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgd2UgaGF2ZS4gQWgsIGhlcmUgd2UgZ286IGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfREVWX1RIUk9UVExJTkdgLCBgSU9TQ0hFRF9CRlFgLCBhbmQgYEJGUV9HUk9VUF9JT1NDSEVEYC5cblxuVG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEZpcnN0LCBJJ2xsIGNoZWNrIGBpbml0L0tjb25maWdgIHRvIHNlZSB3aGF0IGBCTEtfQ0dST1VQYCBkZXBlbmRzIG9uLiBJdCdzIGxpc3RlZCBhcyBkZXBlbmRpbmcgb24gYEJMT0NLYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4sIEknbGwgbW92ZSBvbiB0byBgYmxvY2svS2NvbmZpZ2AgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIG9mIHRoZSBtb3JlIHNwZWNpZmljIG9wdGlvbnM6IGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfREVWX1RIUk9UVExJTkdgLCBgSU9TQ0hFRF9CRlFgLCBhbmQgYEJGUV9HUk9VUF9JT1NDSEVEYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGNvbmZpZ3MgcmVsYXRlIHRvIGVhY2ggb3RoZXIgdG8gaGF2ZSBhIGNsZWFyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTA5LCJPdXRwdXRUb2tlbnMiOjY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjM3LjU2NDAxMzQzN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1MTcyODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChCTEtfQ0dST1VQX0lPQ09TVHxCTEtfQ0dST1VQX0lPTEFURU5DWXxCTEtfREVWX1RIUk9UVExJTkd8SU9TQ0hFRF9CRlF8QkZRX0dST1VQX0lPU0NIRUQpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnPTk3PWNvbmZpZyBCTEtfREVWX1pPTkVEXFxuLS1cXG5ibG9jay9LY29uZmlnLTEwNS1cXG5ibG9jay9LY29uZmlnOjEwNjpjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXFxuYmxvY2svS2NvbmZpZy0xMDctXFx0Ym9vbCBcXFwiQmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWc9MTQ1PWNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWcuaW9zY2hlZD0xMD1jb25maWcgTVFfSU9TQ0hFRF9LWUJFUlxcbi0tXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTE4LVxcbmJsb2NrL0tjb25maWcuaW9zY2hlZDoxOTpjb25maWcgSU9TQ0hFRF9CRlFcXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMjAtXFx0dHJpc3RhdGUgXFxcIkJGUSBJL08gc2NoZWR1bGVyXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTI5LVxcbmJsb2NrL0tjb25maWcuaW9zY2hlZDozMDpjb25maWcgQkZRX0dST1VQX0lPU0NIRURcXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMzEtICAgICAgIGJvb2wgXFxcIkJGUSBoaWVyYXJjaGljYWwgc2NoZWR1bGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MjozNy42NTk1MzYyNjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3ODQwNzgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBjb25maWd1cmF0aW9uIG92ZXJoYXVsLCBJIG5lZWQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gdGhlIGRlcGVuZGVuY2llcy4gV2UncmUgdGFsa2luZyBhYm91dCBhIHN5c3RlbSB0aGF0J3MgbGlrZWx5IGludGVyY29ubmVjdGVkIOKAkyBhbmQgYSBtaXNzZWQgY29ubmVjdGlvbiBjYW4gY2F1c2UgYSB3aG9sZSBjYXNjYWRlIG9mIHVuZm9yZXNlZW4gaXNzdWVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBkbyB0aGVzZSBjb25maWdzIHNpdCB3aXRoaW4gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmU/XCIuIEknbSBnb2luZyB0byBtYXAgb3V0IHRoZSByZWxhdGlvbnNoaXBzOyB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBzZXJ2aWNlcywgb3IgZXZlbiBleHRlcm5hbCBzeXN0ZW1zIHJlbHkgb24gdGhlc2Ugc3BlY2lmaWMgc2V0dGluZ3MuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBicmVha3MgaWYgSSBjaGFuZ2UgWCwgWSwgb3IgWi4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGxpc3RpbmcgdGhlIG9idmlvdXMgZGlyZWN0IGRlcGVuZGVuY2llcywgYnV0IGFsc28gdGhlIG1vcmUgc3VidGxlLCBwZXJoYXBzIGluZGlyZWN0LCByZWxhdGlvbnNoaXBzLiBJIG5lZWQgdG8gdGhpbmsgbGlrZSBhIHNlYXNvbmVkIGFyY2hpdGVjdCBoZXJlLCBwcmUtZW1wdGl2ZWx5IGNvbnNpZGVyaW5nIGFsbCBwb3NzaWJsZSBpbXBsaWNhdGlvbnMgYW5kIHNpZGUgZWZmZWN0cy4gVGltZSB0byBjaGVjayB0aGUgY2hhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjAwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTI6NDAuNTM3OTQ3MDc0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRCbG9jayBsYXllciB6b25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydC4gVGhpcyBvcHRpb24gZW5hYmxlc1xcbiAxMDE6XFx0XFx0c3VwcG9ydCBmb3IgWkFDL1pCQy9aTlMgaG9zdC1tYW5hZ2VkIGFuZCBob3N0LWF3YXJlIHpvbmVkIGJsb2NrXFxuIDEwMjpcXHRcXHRkZXZpY2VzLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHRTYXkgeWVzIGhlcmUgaWYgeW91IGhhdmUgYSBaQUMsIFpCQywgb3IgWk5TIHN0b3JhZ2UgZGV2aWNlLlxcbiAxMDU6XFx0XFxuIDEwNjpcXHRjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXFxuIDEwNzpcXHRcXHRib29sIFxcXCJCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XFxcIlxcbiAxMDg6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXFxuIDEwOTpcXHRcXHRzZWxlY3QgQkxLX0NHUk9VUF9SV1NUQVRcXG4gMTEwOlxcdFxcdGhlbHBcXG4gMTExOlxcdFxcdEJsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnQuIEl0IGNhbiBiZSB1c2VkIHRvIGxpbWl0XFxuIDExMjpcXHRcXHR0aGUgSU8gcmF0ZSB0byBhIGRldmljZS4gSU8gcmF0ZSBwb2xpY2llcyBhcmUgcGVyIGNncm91cCBhbmRcXG4gMTEzOlxcdFxcdG9uZSBuZWVkcyB0byBtb3VudCBhbmQgdXNlIGJsa2lvIGNncm91cCBjb250cm9sbGVyIGZvciBjcmVhdGluZ1xcbiAxMTQ6XFx0XFx0Y2dyb3VwcyBhbmQgc3BlY2lmeWluZyBwZXIgZGV2aWNlIElPIHJhdGUgcG9saWNpZXMuXFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gMTE3OlxcdFxcbiAxMTg6XFx0Y29uZmlnIEJMS19XQlRcXG4gMTE5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBibG9jayBkZXZpY2Ugd3JpdGViYWNrIHRocm90dGxpbmdcXFwiXFxuIDEyMDpcXHRcXHRoZWxwXFxuIDEyMTpcXHRcXHRFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBibG9jayBsYXllciB0byB0aHJvdHRsZSBidWZmZXJlZFxcbiAxMjI6XFx0XFx0YmFja2dyb3VuZCB3cml0ZWJhY2sgZnJvbSB0aGUgVk0sIG1ha2luZyBpdCBtb3JlIHNtb290aCBhbmQgaGF2aW5nXFxuIDEyMzpcXHRcXHRsZXNzIGltcGFjdCBvbiBmb3JlZ3JvdW5kIG9wZXJhdGlvbnMuIFRoZSB0aHJvdHRsaW5nIGlzIGRvbmVcXG4gMTI0OlxcdFxcdGR5bmFtaWNhbGx5IG9uIGFuIGFsZ29yaXRobSBsb29zZWx5IGJhc2VkIG9uIENvRGVsLCBmYWN0b3JpbmcgaW5cXG4gMTI1OlxcdFxcdHRoZSByZWFsdGltZSBwZXJmb3JtYW5jZSBvZiB0aGUgZGlzay5cXG4gMTI2OlxcdFxcbiAxMjc6XFx0Y29uZmlnIEJMS19XQlRfTVFcXG4gMTI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB3cml0ZWJhY2sgdGhyb3R0bGluZyBieSBkZWZhdWx0XFxcIlxcbiAxMjk6XFx0XFx0ZGVmYXVsdCB5XFxuIDEzMDpcXHRcXHRkZXBlbmRzIG9uIEJMS19XQlRcXG4gMTMxOlxcdFxcdGhlbHBcXG4gMTMyOlxcdFxcdEVuYWJsZSB3cml0ZWJhY2sgdGhyb3R0bGluZyBieSBkZWZhdWx0IGZvciByZXF1ZXN0LWJhc2VkIGJsb2NrIGRldmljZXMuXFxuIDEzMzpcXHRcXG4gMTM0OlxcdGNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxcbiAxMzU6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cXFwiXFxuIDEzNjpcXHRcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcXG4gMTM3OlxcdFxcdGhlbHBcXG4gMTM4OlxcdFxcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIC5sYXRlbmN5IGludGVyZmFjZSBmb3IgSU8gdGhyb3R0bGluZy5cXG4gMTM5OlxcdFxcdFRoZSBJTyBjb250cm9sbGVyIHdpbGwgYXR0ZW1wdCB0byBtYWludGFpbiBhdmVyYWdlIElPIGxhdGVuY2llcyBiZWxvd1xcbiAxNDA6XFx0XFx0dGhlIGNvbmZpZ3VyZWQgbGF0ZW5jeSB0YXJnZXQsIHRocm90dGxpbmcgYW55Ym9keSB3aXRoIGEgaGlnaGVyIGxhdGVuY3lcXG4gMTQxOlxcdFxcdHRhcmdldCB0aGFuIHRoZSB2aWN0aW1pemVkIGdyb3VwLlxcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHROb3RlLCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBpbnRlcmZhY2UgYW5kIGNvdWxkIGJlIGNoYW5nZWQgc29tZWRheS5cXG4gMTQ0OlxcdFxcbiAxNDU6XFx0Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcXG4gMTQ2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXFxcIlxcbiAxNDc6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQIFxcdTAwMjZcXHUwMDI2IE5WTUVfRkNcXG4gMTQ4OlxcdFxcdGhlbHBcXG4gMTQ5OlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gdHJhZmZpYyBhY3Jvc3NcXG4gMTUwOlxcdFxcdCAgY2dyb3VwIGFwcGxpY2F0aW9ucy4gSXQgZW5hYmxlcyB0aGUgRmFicmljIGFuZCB0aGUgc3RvcmFnZSB0YXJnZXRzIHRvXFxuIDE1MTpcXHRcXHQgIGlkZW50aWZ5LCBtb25pdG9yLCBhbmQgaGFuZGxlIEZDIHRyYWZmaWMgYmFzZWQgb24gVk0gdGFncyBieSBpbnNlcnRpbmdcXG4gMTUyOlxcdFxcdCAgYXBwbGljYXRpb24gc3BlY2lmaWMgaWRlbnRpZmljYXRpb24gaW50byB0aGUgRkMgZnJhbWUuXFxuIDE1MzpcXHRcXG4gMTU0OlxcdGNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxcbiAxNTU6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcXFwiXFxuIDE1NjpcXHRcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcXG4gMTU3OlxcdFxcdHNlbGVjdCBCTEtfUlFfQUxMT0NfVElNRVxcbiAxNTg6XFx0XFx0aGVscFxcbiAxNTk6XFx0XFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgLndlaWdodCBpbnRlcmZhY2UgZm9yIGNvc3RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTI6NDAuNTM4MDY4MDI0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTI5NDk1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbjogaW9zY2hlZCBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIGNoZWNrIGBibG9jay9LY29uZmlnLmlvc2NoZWRgLlwiIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IHdoYXQncyBjb250cm9sbGluZyB0aGUgSS9PIHNjaGVkdWxlciBvcHRpb25zLiBLbm93aW5nIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBpcyB0aGUgYmVkcm9jaywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIGJsb2NrIGRldmljZSBtYW5hZ2VtZW50IGFuZCBJL08gcGVyZm9ybWFuY2UgdHVuaW5nLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zIOKAkyB0aGUgbWFjcm9zLCB0aGUgZGVmYXVsdCBzZWxlY3Rpb25zLCB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgYSBjbGVhciB2aWV3IG9mIGhvdyBkaWZmZXJlbnQgc2NoZWR1bGVycyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHRoZSB1bmRlcmx5aW5nIGxvZ2ljIHRoYXQgZ292ZXJucyB0aG9zZSBkZWNpc2lvbnMgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIFRoaXMgZmlsZSBsaWtlbHkgZGVmaW5lcyB0aGUgYENPTkZJR19gIG9wdGlvbnMgcmVsYXRlZCB0byBzcGVjaWZpYyBzY2hlZHVsZXJzIGxpa2UgQ0ZRLCBEZWFkbGluZSwgQkZRLCBvciBtYXliZSBldmVuIGV4cGVyaW1lbnRhbCBvbmVzLiBJdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBrbm9icyBmb3IgSS9PIG9wdGltaXphdGlvbiBvbiB0aGlzIHN5c3RlbS4gVWx0aW1hdGVseSwgSSdtIGV4cGVjdGluZyB0byBjb25maXJtIHdoYXQgaXMgYXZhaWxhYmxlIGFuZCBob3cgdG8gY3VzdG9taXplIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzcwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1Mjo0My45MzEwMjExMzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svS2NvbmZpZy5pb3NjaGVkXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0bWVudSBcXFwiSU8gU2NoZWR1bGVyc1xcXCJcXG4gICAzOlxcdFxcbiAgIDQ6XFx0Y29uZmlnIE1RX0lPU0NIRURfREVBRExJTkVcXG4gICA1OlxcdFxcdHRyaXN0YXRlIFxcXCJNUSBkZWFkbGluZSBJL08gc2NoZWR1bGVyXFxcIlxcbiAgIDY6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIE1RIHZlcnNpb24gb2YgdGhlIGRlYWRsaW5lIElPIHNjaGVkdWxlci5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE1RX0lPU0NIRURfS1lCRVJcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJLeWJlciBJL08gc2NoZWR1bGVyXFxcIlxcbiAgMTI6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIFRoZSBLeWJlciBJL08gc2NoZWR1bGVyIGlzIGEgbG93LW92ZXJoZWFkIHNjaGVkdWxlciBzdWl0YWJsZSBmb3JcXG4gIDE1OlxcdFxcdCAgbXVsdGlxdWV1ZSBhbmQgb3RoZXIgZmFzdCBkZXZpY2VzLiBHaXZlbiB0YXJnZXQgbGF0ZW5jaWVzIGZvciByZWFkcyBhbmRcXG4gIDE2OlxcdFxcdCAgc3luY2hyb25vdXMgd3JpdGVzLCBpdCB3aWxsIHNlbGYtdHVuZSBxdWV1ZSBkZXB0aHMgdG8gYWNoaWV2ZSB0aGF0XFxuICAxNzpcXHRcXHQgIGdvYWwuXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBJT1NDSEVEX0JGUVxcbiAgMjA6XFx0XFx0dHJpc3RhdGUgXFxcIkJGUSBJL08gc2NoZWR1bGVyXFxcIlxcbiAgMjE6XFx0XFx0c2VsZWN0IEJMS19JQ1FcXG4gIDIyOlxcdFxcdGhlbHBcXG4gIDIzOlxcdFxcdEJGUSBJL08gc2NoZWR1bGVyIGZvciBCTEstTVEuIEJGUSBkaXN0cmlidXRlcyB0aGUgYmFuZHdpZHRoIG9mXFxuICAyNDpcXHRcXHRvZiB0aGUgZGV2aWNlIGFtb25nIGFsbCBwcm9jZXNzZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHdlaWdodHMsXFxuICAyNTpcXHRcXHRyZWdhcmRsZXNzIG9mIHRoZSBkZXZpY2UgcGFyYW1ldGVycyBhbmQgd2l0aCBhbnkgd29ya2xvYWQuIEl0XFxuICAyNjpcXHRcXHRhbHNvIGd1YXJhbnRlZXMgYSBsb3cgbGF0ZW5jeSB0byBpbnRlcmFjdGl2ZSBhbmQgc29mdFxcbiAgMjc6XFx0XFx0cmVhbC10aW1lIGFwcGxpY2F0aW9ucy4gIERldGFpbHMgaW5cXG4gIDI4OlxcdFxcdERvY3VtZW50YXRpb24vYmxvY2svYmZxLWlvc2NoZWQucnN0XFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBCRlFfR1JPVVBfSU9TQ0hFRFxcbiAgMzE6XFx0ICAgICAgIGJvb2wgXFxcIkJGUSBoaWVyYXJjaGljYWwgc2NoZWR1bGluZyBzdXBwb3J0XFxcIlxcbiAgMzI6XFx0ICAgICAgIGRlcGVuZHMgb24gSU9TQ0hFRF9CRlEgXFx1MDAyNlxcdTAwMjYgQkxLX0NHUk9VUFxcbiAgMzM6XFx0ICAgICAgIGRlZmF1bHQgeVxcbiAgMzQ6XFx0ICAgICAgIHNlbGVjdCBCTEtfQ0dST1VQX1JXU1RBVFxcbiAgMzU6XFx0XFx0aGVscFxcbiAgMzY6XFx0XFxuICAzNzpcXHQgICAgICAgRW5hYmxlIGhpZXJhcmNoaWNhbCBzY2hlZHVsaW5nIGluIEJGUSwgdXNpbmcgdGhlIGJsa2lvXFxuICAzODpcXHQgICAgICAgKGNncm91cHMtdjEpIG9yIGlvIChjZ3JvdXBzLXYyKSBjb250cm9sbGVyLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRjb25maWcgQkZRX0NHUk9VUF9ERUJVR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1Mjo0My45MzExMjI5OTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4MzI3ODY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkFuYWx5emluZyBCbG9jayBJL08gU2NoZWR1bGVyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgYmxvY2sgSS9PIGNvbmZpZ3VyYXRpb25zLiBJIHNlZSBhIGZldyBrZXkgc3ltYm9scyBoZXJlOiBgQkxLX0NHUk9VUGAsIGBCTEtfREVWX1RIUk9UVExJTkdgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgSU9TQ0hFRF9CRlFgLCBhbmQgYEJGUV9HUk9VUF9JT1NDSEVEYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGdldCB0aGlzIHJpZ2h0LlxuXG5Ib2xkIG9uLCBJIHNlZSBgSU9TQ0hFRF9CRlFgIGlzIGEgdHJpc3RhdGUuIFRoYXQgbWVhbnMgaXQgY2FuIHBvdGVudGlhbGx5IGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBzbyBpdCdzIHByb2JhYmx5IHRoZSBtb3N0IGltcG9ydGFudCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBmb2N1cyBvbiBoZXJlLCBhcyBJJ2xsIHdhbnQgdG8gbGlzdCB0aGF0IG9uZS4gSSdsbCBqdXN0IGxpc3QgYElPU0NIRURfQkZRYC5cblxuTm93LCBJIHJlbWVtYmVyIGBCTEtfQ0dST1VQYC4gRG9lc24ndCB0aGF0IGRlcGVuZCBvbiBzb21ldGhpbmc/IFllcywgaXQgZGVwZW5kcyBvbiBgQkxPQ0tgLiBUaGF0J3MgaW1wb3J0YW50LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZW50cnkgdG8gYmUgc3VyZSwgYW5kIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLlxuXG5BaGEsIGBCTEtfQ0dST1VQYCBpcyBpbmRlZWQgaW4gYGluaXQvS2NvbmZpZ2AgYW5kIGV4cGxpY2l0bHkgZGVwZW5kcyBvbiBgQkxPQ0tgLiBBbmQgYEJMT0NLYCBpcyB1c3VhbGx5IGVuYWJsZWQsIHNvIHRoYXQncyBnb29kLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBjb3JlIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgZmVhdHVyZXMuIFRoZSByZWxldmFudCBzeW1ib2xzIHNlZW0gdG8gYmU6IGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2V4aXRfZGlza2AuXG5cbkkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBibGtjZ19leGl0X2Rpc2tgIGlzbid0IHN0YXRpYyBhbmQgaXMgcmVhY2hhYmxlLiBJdCdzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgaXQncyBhY3R1YWxseSB1c2VkIGFuZCB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpdHMgbGlua2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1ODMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1Mjo0OS4wMTQ0MDQyMzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMDY4ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2NnX2V4aXRfZGlza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNncm91cC5jPTE0NTM9aW50IGJsa2NnX2luaXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNDYxLVxcdCAqIHByZXZpb3VzIGRpc2sncyBibGtjZyBzdGF0ZSBpcyBjbGVhbmVkIHVwIGFzeW5jaHJvbm91c2x5IHZpYVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNDYyOlxcdCAqIGRpc2tfcmVsZWFzZSgpIC1cXHUwMDNlIGJsa2NnX2V4aXRfZGlzaygpLiBXYWl0IGZvciB0aGF0IGNsZWFudXAgdG9cXG5ibG9jay9ibGstY2dyb3VwLmMtMTQ2My1cXHQgKiBmaW5pc2ggKGluZGljYXRlZCBieSByb290X2Jsa2cgYmVjb21pbmcgTlVMTCkgYmVmb3JlIHNldHRpbmcgdXBcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNDk3LVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNDk4OnZvaWQgYmxrY2dfZXhpdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNDk5LXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0xOTc9aW50IGJsa2NnX2luaXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XFxuYmxvY2svYmxrLWNncm91cC5oOjE5ODp2b2lkIGJsa2NnX2V4aXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XFxuYmxvY2svYmxrLWNncm91cC5oLTE5OS1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD00ODY9c3RhdGljIGlubGluZSBpbnQgYmxrY2dfaW5pdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKSB7IHJldHVybiAwOyB9XFxuYmxvY2svYmxrLWNncm91cC5oOjQ4NzpzdGF0aWMgaW5saW5lIHZvaWQgYmxrY2dfZXhpdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKSB7IH1cXG5ibG9jay9ibGstY2dyb3VwLmgtNDg4LXN0YXRpYyBpbmxpbmUgaW50IGJsa2NnX3BvbGljeV9yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTI3Mj1zdGF0aWMgdm9pZCBkaXNrX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMjk2LVxcbmJsb2NrL2dlbmhkLmM6MTI5NzpcXHRibGtjZ19leGl0X2Rpc2soZGlzayk7XFxuYmxvY2svZ2VuaGQuYy0xMjk4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1Mjo0OS4wODY0NzkwNjJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgwMTUxNzU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvcmUgRnVuY3Rpb25zIGFuZCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIGBibGtjZ19leGl0X2Rpc2tgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgYW5kIGNhbGxlZCBmcm9tIGBkaXNrX3JlbGVhc2VgLiBUaGF0IGNvbmZpcm1zIGl0IGFzIGEga2V5IGFyZWEuIFRoZSBwYXRjaCBtb2RpZmllcyBgYmxrZ19kZXN0cm95X2FsbGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBibGtjZ19leGl0X2Rpc2tgLCBzbyB0aGF0IHN0cmVuZ3RoZW5zIGl0cyBpbXBvcnRhbmNlLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYW5hbHlzaXMgb24gdGhlc2UgdGhyZWU6IGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2V4aXRfZGlza2AuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGlmIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBvciBpZiBpdCBjYW4gYmUgdHJpZ2dlcmVkIGR5bmFtaWNhbGx5LiBJIHNlZSBpdCdzIGNhbGxlZCBieSBhIGZldyBrZXkgZnVuY3Rpb25zOiBgYmxrX2lvY29zdF9pbml0YCwgYGJsa19pb2xhdGVuY3lfaW5pdGAsIGBibGtfdGhyb3RsX2luaXRgLCBhbmQgYGJmcV9jcmVhdGVfZ3JvdXBfaGllcmFyY2h5YC4gYGJmcV9jcmVhdGVfZ3JvdXBfaGllcmFyY2h5YCBmaXJlcyB3aGVuIGEgY2dyb3VwIGlzIGNyZWF0ZWQgb3IgQkZRIGlzIGluaXRpYWxpemVkLCBzbyBkZWZpbml0ZWx5IGR5bmFtaWMuIGBibGtfaW9jb3N0X2luaXRgIGlzIGFsc28gdHJpZ2dlcmVkIHdoZW4gaW9jb3N0IGlzIGVuYWJsZWQgb24gYSBkaXNrLiBFeGNlbGxlbnQsIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBpZGVhIG9mIHdoZW4gdGhvc2UgZnVuY3Rpb25zIGFyZSBpbnZva2VkLlxuXG5XYWl0LCBsb29raW5nIGFnYWluLCBgYmxrY2dfYWN0aXZhdGVfcG9saWN5YCBhbmQgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YCBhcmUgKnRoZSogZnVuY3Rpb25zIHRoYXQgYXJlIGFjdHVhbGx5IGJlaW5nIG1vZGlmaWVkLiBJIHNob3VsZCBpbmNsdWRlIHRob3NlIGluIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIHRoZSBjb2RlLCBJIHNlZTogYEJMS19DR1JPVVBgLCBgQkxLX0RFVl9USFJPVFRMSU5HYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYElPU0NIRURfQkZRYCwgYW5kIGBCRlFfR1JPVVBfSU9TQ0hFRGAuIEknbGwgaGF2ZSB0byBrZWVwIHRob3NlIGluIG1pbmQuXG5cbkknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBqdXN0IHRvIGJlIHN1cmUuIEhtbSwgYEJMS19DR1JPVVBfRkNfQVBQSURgIGRlcGVuZHMgb24gYE5WTUVfRkNgLiBJdCBjb3VsZCBiZSBpbnRlcmVzdGluZywgYnV0IHByb2JhYmx5IGhhcmRlciB0byB0ZXN0LiBMZXQncyBzZWUgaWYgaXQncyBldmVuIHJlbGV2YW50IGhlcmUuIE5vLCBpdCBkb2Vzbid0IHV0aWxpemUgYGJsa2NnX2FjdGl2YXRlX3BvbGljeWAuIE9rYXksIEknbGwgc3RpY2sgd2l0aCB0aGUgb3JpZ2luYWwgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY2NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1Mjo1NS44ODc5OTk3MDRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDQ3MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2NnX2FjdGl2YXRlX3BvbGljeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmZxLWNncm91cC5jPTEyNTQ9c3RydWN0IGJmcV9ncm91cCAqYmZxX2NyZWF0ZV9ncm91cF9oaWVyYXJjaHkoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBpbnQgbm9kZSlcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjU3LVxcbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMjU4OlxcdHJldCA9IGJsa2NnX2FjdGl2YXRlX3BvbGljeShiZnFkLVxcdTAwM2VxdWV1ZS1cXHUwMDNlZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV9iZnEpO1xcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjU5LVxcdGlmIChyZXQpXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTcxOTY9c3RhdGljIGludCBiZnFfaW5pdF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplcSlcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNzMyOC1cXHQgKiBmdW5jdGlvbiBpcyB0aGUgaGVhZCBvZiBhIGNoYWluIG9mIGZ1bmN0aW9uIGNhbGxzXFxuYmxvY2svYmZxLWlvc2NoZWQuYzo3MzI5OlxcdCAqIChiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeS1cXHUwMDNlYmxrY2dfYWN0aXZhdGVfcG9saWN5LVxcdTAwM2VcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTczMzAtXFx0ICogYmxrX21xX2ZyZWV6ZV9xdWV1ZSkgdGhhdCBtYXkgbGVhZCB0byB0aGUgaW52b2NhdGlvbiBvZiB0aGVcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xNTM1PXN0YXRpYyB2b2lkIGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTU1Ny0vKipcXG5ibG9jay9ibGstY2dyb3VwLmM6MTU1ODogKiBibGtjZ19hY3RpdmF0ZV9wb2xpY3kgLSBhY3RpdmF0ZSBhIGJsa2NnIHBvbGljeSBvbiBhIGdlbmRpc2tcXG5ibG9jay9ibGstY2dyb3VwLmMtMTU1OS0gKiBAZGlzazogZ2VuZGlzayBvZiBpbnRlcmVzdFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE1NzItICovXFxuYmxvY2svYmxrLWNncm91cC5jOjE1NzM6aW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTc0LXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNjc2LX1cXG5ibG9jay9ibGstY2dyb3VwLmM6MTY3NzpFWFBPUlRfU1lNQk9MX0dQTChibGtjZ19hY3RpdmF0ZV9wb2xpY3kpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNjc4LVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE2ODQtICogRGVhY3RpdmF0ZSBAcG9sIG9uIEBkaXNrLiAgRm9sbG93cyB0aGUgc2FtZSBzeW5jaHJvbml6YXRpb24gcnVsZXMgYXNcXG5ibG9jay9ibGstY2dyb3VwLmM6MTY4NTogKiBibGtjZ19hY3RpdmF0ZV9wb2xpY3koKS5cXG5ibG9jay9ibGstY2dyb3VwLmMtMTY4Ni0gKi9cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMDI9dm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMDM6aW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcXG5ibG9jay9ibGstY2dyb3VwLmgtMjA0LXZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9NDg5PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgfVxcbmJsb2NrL2Jsay1jZ3JvdXAuaDo0OTA6c3RhdGljIGlubGluZSBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay1jZ3JvdXAuaC00OTEtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKSB7IHJldHVybiAwOyB9XFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmM9MjkxNT1zdGF0aWMgaW50IGJsa19pb2Nvc3RfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTY2LVxcbmJsb2NrL2Jsay1pb2Nvc3QuYzoyOTY3OlxcdHJldCA9IGJsa2NnX2FjdGl2YXRlX3BvbGljeShkaXNrLCBcXHUwMDI2YmxrY2dfcG9saWN5X2lvY29zdCk7XFxuYmxvY2svYmxrLWlvY29zdC5jLTI5NjgtXFx0aWYgKHJldClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz03NTg9c3RhdGljIGludCBibGtfaW9sYXRlbmN5X2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNzcwLVxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjc3MTpcXHRyZXQgPSBibGtjZ19hY3RpdmF0ZV9wb2xpY3koZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3kpO1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy03NzItXFx0aWYgKHJldClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTEzMTg9c3RhdGljIGludCBibGtfdGhyb3RsX2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzM4LVxcdC8qIGFjdGl2YXRlIHBvbGljeSwgYmxrX3Rocm90bF9hY3RpdmF0ZWQoKSB3aWxsIHJldHVybiB0cnVlICovXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTMzOTpcXHRyZXQgPSBibGtjZ19hY3RpdmF0ZV9wb2xpY3koZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwpO1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNDAtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1Mjo1NS45NDY0NTE3MjNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNjQyNjcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgSS9PIENncm91cCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGJsb2NrIEkvTyBjZ3JvdXAgc3R1ZmYsIGFuZCBpdCBsb29rcyBsaWtlIGBCTEtfQ0dST1VQX0ZDX0FQUElEYCBpc24ndCByZWxldmFudCBoZXJlLiBNeSBmb2N1cyBpcyBvbiB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCAqZG8qIGNvbWUgaW50byBwbGF5LiBMZXQgbWUgc2VlLi4uIHRoZSBrZXkgcGxheWVycyBhcmUgY2xlYXJseSBgQkxLX0NHUk9VUGAsIGBCTEtfREVWX1RIUk9UVExJTkdgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgSU9TQ0hFRF9CRlFgLCBhbmQgYEJGUV9HUk9VUF9JT1NDSEVEYC4gSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCBhIGZldyBvZiB0aGVzZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhleSBpbnRlcmFjdC4gTm93LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGBCTEtfQ0dST1VQX0lPUFJJT2AgYW5kIHNlZSB3aGVyZSB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MzUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTI6NTkuMTUyODgyNDY3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDM5NjA4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrY2dfYWN0aXZhdGVfcG9saWN5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay1pb3ByaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTI6NTkuMjIzMjg2MTk2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDAyNjU1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5IG9mIHRoZXNlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBgQkxLX0NHUk9VUF9JT1BSSU9gIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFwcGVhcnMgdG8gYmUgYSByZWQgaGVycmluZzsgaXQgZG9lc24ndCB1dGlsaXplIHdoYXRldmVyIGZ1bmN0aW9uYWxpdHkgSSdtIGV4cGxvcmluZy4gVGltZSB0byBicm9hZGVuIHRoZSBzZWFyY2guIEkgbmVlZCB0byBzeXN0ZW1hdGljYWxseSBsb29rIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBTaW5jZSBJJ20gZGlnZ2luZyBpbnRvIGBjZ3JvdXBgLXJlbGF0ZWQgaXRlbXMsIHRoZSBgQ0dST1VQU2Agb3B0aW9uIGl0c2VsZiBpcyBkZWZpbml0ZWx5IHdvcnRoIGluY2x1ZGluZyBpbiBteSBzZWFyY2gsIGp1c3QgdG8gYmUgY29tcHJlaGVuc2l2ZS4gV2hpbGUgYEJMS19DR1JPVVBgIGxpa2VseSBwdWxscyBpdCBpbiBhcyBhIGRlcGVuZGVuY3ksIEkgd2FudCB0byBiZSAqY2VydGFpbiouIFRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcywgSSdsbCBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlOiBgaW5pdC9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBvZiBgQkxLX0NHUk9VUGAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGV2ZXJ5dGhpbmcgaXMgY29ubmVjdGVkIGFuZCBlbnN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA4MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUzOjAyLjUyMzU1NDA5OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYzNDY0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19DR1JPVVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDk5PWNvbmZpZyBNRU1DR19WMVxcbi0tXFxuaW5pdC9LY29uZmlnLTExMTUtXFxuaW5pdC9LY29uZmlnOjExMTY6Y29uZmlnIEJMS19DR1JPVVBcXG5pbml0L0tjb25maWctMTExNy1cXHRib29sIFxcXCJJTyBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MzowMi42MTk5MDQ2MzdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2OTgxMzI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipSZXZpc2l0aW5nIGBpbml0L0tjb25maWdgIExpbmUgMTExNioqXG5cbk9rYXksIHRpbWUgdG8gcmUtZXhhbWluZSBgaW5pdC9LY29uZmlnYCBhcm91bmQgbGluZSAxMTE2LiBJIGhhdmUgYSBodW5jaCwgYmFzZWQgb24gdGhlIHJlY2VudCBkZWJ1Z2dpbmcgSSd2ZSBiZWVuIGRvaW5nIHdpdGggW3NwZWNpZmljIGFyZWEsIGFzc3VtaW5nIGV4cGVydCBoYXMga25vd2xlZGdlIG9mIHJlbGV2YW50IGFyZWFdLiBJIGtub3cgdGhlIG1vZHVsZSdzIGludGVyYWN0aW9ucyB3aXRoIGl0cyBlbnZpcm9ubWVudCBjYW4gYmUgdHJpY2t5IGFuZCBzdWJ0bGUuIEknbSBmb2N1c2luZyBvbiB0aGF0IHNwZWNpZmljIGxpbmUgYmVjYXVzZSBpdCdzIHRoZSBtb3N0IGxpa2VseSBhcmVhIHRoYXQgSSB0aGluayBtaWdodCBuZWVkIGF0dGVudGlvbi4gSSdtIGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgdGhhdCBsaW5lLiBQZXJoYXBzIHRoZXJlIGlzIGEgZm9yZ290dGVuIGRlcGVuZGVuY3k/IE9yIG1heWJlIHRoZXJlJ3MgYSBtaXNzZWQgaW50ZXJhY3Rpb24gd2l0aCBhbm90aGVyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGU/IEknbSBhbnRpY2lwYXRpbmcgZmluZGluZyB0aGUgcm9vdCBjYXVzZSBvZiBbYnJpZWZseSBzdGF0ZSBwcm9ibGVtXSB0aHJvdWdoIHRoaXMgZm9jdXNlZCByZXZpZXcuIEknbGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYW55IGNsdWVzIG9yIGFub21hbGllcyBhbmQgY29uc2lkZXJpbmcgYW55IHJlY2VudCBjb21taXRzIGluIHRoYXQgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MzowNS41ODk3MjA4NzRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTEwOlxcdFxcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxcbjExMTE6XFx0XFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXFxuMTExMjpcXHRcXHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cXG4xMTEzOlxcdFxcbjExMTQ6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTExNTpcXHRcXG4xMTE2OlxcdGNvbmZpZyBCTEtfQ0dST1VQXFxuMTExNzpcXHRcXHRib29sIFxcXCJJTyBjb250cm9sbGVyXFxcIlxcbjExMTg6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbjExMTk6XFx0XFx0ZGVmYXVsdCBuXFxuMTEyMDpcXHRcXHRoZWxwXFxuMTEyMTpcXHRcXHRHZW5lcmljIGJsb2NrIElPIGNvbnRyb2xsZXIgY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyB0aGUgY29tbW9uXFxuMTEyMjpcXHRcXHRjZ3JvdXAgaW50ZXJmYWNlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHZhcmlvdXMgSU8gY29udHJvbGxpbmdcXG4xMTIzOlxcdFxcdHBvbGljaWVzLlxcbjExMjQ6XFx0XFxuMTEyNTpcXHRcXHRDdXJyZW50bHksIENGUSBJTyBzY2hlZHVsZXIgdXNlcyBpdCB0byByZWNvZ25pemUgdGFzayBncm91cHMgYW5kXFxuMTEyNjpcXHRcXHRjb250cm9sIGRpc2sgYmFuZHdpZHRoIGFsbG9jYXRpb24gKHByb3BvcnRpb25hbCB0aW1lIHNsaWNlIGFsbG9jYXRpb24pXFxuMTEyNzpcXHRcXHR0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCBpcyBhbHNvIHVzZWQgYnkgYmlvIHRocm90dGxpbmcgbG9naWMgaW5cXG4xMTI4OlxcdFxcdGJsb2NrIGxheWVyIHRvIGltcGxlbWVudCB1cHBlciBsaW1pdCBpbiBJTyByYXRlcyBvbiBhIGRldmljZS5cXG4xMTI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MzowNS41ODk4ODczMzRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5OTEwMTk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBIaWVyYXJjaHkqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBCTEtfQ0dST1VQYCBhY3R1YWxseSBuZXN0ZWQgKndpdGhpbiogdGhlIGBtZW51Y29uZmlnIENHUk9VUFNgIHN0cnVjdHVyZSBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24/IFRoYXQgc2VlbXMgYSBiaXQgdW51c3VhbCwgYW5kIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyByZWxhdGlvbnNoaXAgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXNlIG9wdGlvbnMgYXJlIGxpbmtlZCwgYXMgdGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaG93IEknbSBlbmFibGluZyBvciBkaXNhYmxpbmcgY2dyb3VwLXJlbGF0ZWQgYmxvY2sgSS9PIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk5NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTM6MDguNDg4OTkxOTMzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjA2MTQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIENHUk9VUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDQ0PWNvbmZpZyBTTEFCX09CSl9FWFRcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDQ2LVxcbmluaXQvS2NvbmZpZzoxMDQ3Om1lbnVjb25maWcgQ0dST1VQU1xcbmluaXQvS2NvbmZpZy0xMDQ4LVxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTM6MDguNTQ1MDU4NDAyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NjExMDIxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJsb2NrIENncm91cCBSYWNlIENvbmRpdGlvbiBGaXgqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgKmRlZmluaXRlbHkqIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgYENHUk9VUFNgLiBUaGF0J3MgdGhlIGZvdW5kYXRpb24gd2UncmUgd29ya2luZyB3aXRoIGhlcmUsIHNvIGl0IGdvZXMgcmlnaHQgYXQgdGhlIHRvcCBvZiBteSBtZW50YWwgbGlzdC5cblxuUmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLiBJJ3ZlIGdvdCB0byBjb25zaWRlcjogYENHUk9VUFNgLCBvZiBjb3Vyc2UsIHRoZW4gYEJMS19DR1JPVVBgLCBgQkxLX0RFVl9USFJPVFRMSU5HYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYElPU0NIRURfQkZRYCwgYW5kIGBCRlFfR1JPVVBfSU9TQ0hFRGAuIFRob3NlIGFyZSB0aGUga2V5IHBpZWNlcyBjb25maWd1cmluZyB0aGUgYmxvY2sgY2dyb3VwIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnM6IGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2V4aXRfZGlza2AuIFRob3NlIGFyZSB0aGUgc3ltYm9saWMgZm9jaSBvZiB0aGUgZml4LiBUaGUgcmVhc29uaW5nLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgYSByYWNlIGNvbmRpdGlvbiBleGlzdHMgZHVyaW5nIHRoZSBhY3RpdmF0aW9uIGFuZCBkZWFjdGl2YXRpb24gb2YgYmxvY2sgY2dyb3VwIHBvbGljaWVzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBkaXNrIHRlYXJkb3duLiBUaGUgZml4IGludHJvZHVjZXMgYSBtdXRleCBsb2NrIHRvIGFkZHJlc3MgdGhpcy4gVGhvc2UgYXJlIGNvcmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGR5bmFtaWNhbGx5IHRyaWdnZXJlZCB3aGVuIGVuYWJsaW5nL2Rpc2FibGluZyBjZ3JvdXAgcG9saWNpZXMgb3IgZGVzdHJveWluZyBibG9jayBkZXZpY2VzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBgYmxrY2dfZXhpdF9kaXNrYCBpcyB0aGUgcmlnaHQgZnVuY3Rpb24gaGVyZS4gTGV0IG1lIHRyYWNlIHRoYXQuIEFoLCB5ZXMsIGBibGtnX2Rlc3Ryb3lfYWxsYCBpcyBjYWxsZWQgYnkgYGJsa2NnX2V4aXRfZGlza2AsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGRpc2tfcmVsZWFzZWAuIFNvIGl0ICppcyogcmVhY2hhYmxlIGFzIHBhcnQgb2YgdGhlIGRpc2sgcmVsZWFzZSBwcm9jZXNzLiBUaGF0IGNvbmZpcm1zIGl0LlxuXG5Ob3cgSSBjYW4gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI0OSwiT3V0cHV0VG9rZW5zIjoxNzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTM6MTQuNDA2MTYyOTI4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNjgyODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCTEtfREVWX1RIUk9UVExJTkdcIixcbiAgICBcIkJMS19DR1JPVVBfSU9MQVRFTkNZXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVFwiLFxuICAgIFwiSU9TQ0hFRF9CRlFcIixcbiAgICBcIkJGUV9HUk9VUF9JT1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrY2dfYWN0aXZhdGVfcG9saWN5XCIsXG4gICAgXCJibGtjZ19kZWFjdGl2YXRlX3BvbGljeVwiLFxuICAgIFwiYmxrY2dfZXhpdF9kaXNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBibG9jayBjZ3JvdXAgcG9saWN5IGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uIGFuZCBkaXNrIHRlYXJkb3duIGJ5IGFkZGluZyBhIG11dGV4IGxvY2suIFRoZXNlIGFyZSBjb3JlIGJsb2NrIGNncm91cCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGR5bmFtaWNhbGx5IHdoZW4gZW5hYmxpbmcvZGlzYWJsaW5nIGNncm91cCBwb2xpY2llcyBvciBkZXN0cm95aW5nIGJsb2NrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiQkxLX0NHUk9VUFwiLFxuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0NPU1RcIixcbiAgICBcIklPU0NIRURfQkZRXCIsXG4gICAgXCJCRlFfR1JPVVBfSU9TQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa2NnX2FjdGl2YXRlX3BvbGljeVwiLFxuICAgIFwiYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lcIixcbiAgICBcImJsa2NnX2V4aXRfZGlza1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYmxvY2sgY2dyb3VwIHBvbGljeSBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiBhbmQgZGlzayB0ZWFyZG93biBieSBhZGRpbmcgYSBtdXRleCBsb2NrLiBUaGVzZSBhcmUgY29yZSBibG9jayBjZ3JvdXAgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBkeW5hbWljYWxseSB3aGVuIGVuYWJsaW5nL2Rpc2FibGluZyBjZ3JvdXAgcG9saWNpZXMgb3IgZGVzdHJveWluZyBibG9jayBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowv94wz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 18:32:36 +0000 UTC FinishedAt: 2026-08-02 18:53:15 +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": "b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "BLK_CGROUP", "BLK_DEV_THROTTLING", "BLK_CGROUP_IOLATENCY", "BLK_CGROUP_IOCOST", "IOSCHED_BFQ", "BFQ_GROUP_IOSCHED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "BLK_CGROUP", "BLK_DEV_THROTTLING", "BLK_CGROUP_IOLATENCY", "BLK_CGROUP_IOCOST", "IOSCHED_BFQ", "BFQ_GROUP_IOSCHED" ], "series_id": "f8dcdb2a-7098-48f2-b459-b3553fd4e76e" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blkcg_activate_policy", "blkcg_deactivate_policy", "blkcg_exit_disk" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1RIUk9UVExJTkcmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0xBVEVOQ1kmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUF9JT0NPU1QmIzM0OywKICAgICYjMzQ7SU9TQ0hFRF9CRlEmIzM0OywKICAgICYjMzQ7QkZRX0dST1VQX0lPU0NIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibGtjZ19hY3RpdmF0ZV9wb2xpY3kmIzM0OywKICAgICYjMzQ7YmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kmIzM0OywKICAgICYjMzQ7YmxrY2dfZXhpdF9kaXNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYmxvY2sgY2dyb3VwIHBvbGljeSBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiBhbmQgZGlzayB0ZWFyZG93biBieSBhZGRpbmcgYSBtdXRleCBsb2NrLiBUaGVzZSBhcmUgY29yZSBibG9jayBjZ3JvdXAgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBkeW5hbWljYWxseSB3aGVuIGVuYWJsaW5nL2Rpc2FibGluZyBjZ3JvdXAgcG9saWNpZXMgb3IgZGVzdHJveWluZyBibG9jayBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzA1ZDgxZGNhMmJkYjk0NTk5Y2UzM2IwYjJmYWE1ODJiMGJkYjQ1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTg6NTE6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jXG5pbmRleCBkOTY3NjEyNmM1YjVkLi4zNTQ2MzdmM2IxNThjIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNncm91cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY2dyb3VwLmNcbkBAIC01NjksNiAmIzQzOzU2OSw3IEBAIHN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveV9hbGwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRpbnQgaTtcbiBcbiByZXN0YXJ0OlxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cS1cdTAwM2VibGtjZ19tdXRleCk7XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsa2csIFx1MDAyNnEtXHUwMDNlYmxrZ19saXN0LCBxX25vZGUpIHtcbiBcdFx0c3RydWN0IGJsa2NnICpibGtjZyA9IGJsa2ctXHUwMDNlYmxrY2c7XG5AQCAtNTg3LDYgJiM0Mzs1ODgsNyBAQCBzdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3lfYWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0XHRpZiAoISgtLWNvdW50KSkge1xuIFx0XHRcdGNvdW50ID0gQkxLR19ERVNUUk9ZX0JBVENIX1NJWkU7XG4gXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4mIzQzO1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZxLVx1MDAzZWJsa2NnX211dGV4KTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0XHRnb3RvIHJlc3RhcnQ7XG4gXHRcdH1cbkBAIC02MDYsNiAmIzQzOzYwOCw3IEBAIHN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveV9hbGwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXG4gXHRxLVx1MDAzZXJvb3RfYmxrZyA9IE5VTEw7XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2cS1cdTAwM2VxdWV1ZV9sb2NrKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cS1cdTAwM2VibGtjZ19tdXRleCk7XG4gXG4gXHR3YWtlX3VwX3ZhcihcdTAwMjZxLVx1MDAzZXJvb3RfYmxrZyk7XG4gfVxuQEAgLTE1MjYsNiAmIzQzOzE1MjksMzEgQEAgc3RydWN0IGNncm91cF9zdWJzeXMgaW9fY2dycF9zdWJzeXMgPSB7XG4gfTtcbiBFWFBPUlRfU1lNQk9MX0dQTChpb19jZ3JwX3N1YnN5cyk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRlYXIgZG93biBwZXItYmxrZyBwb2xpY3kgZGF0YSBmb3IgQHBvbCBvbiBAcS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJsa2NnX2dxICpibGtnO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsa2csIFx1MDAyNnEtXHUwMDNlYmxrZ19saXN0LCBxX25vZGUpIHtcbiYjNDM7XHRcdHN0cnVjdCBibGtjZyAqYmxrY2cgPSBibGtnLVx1MDAzZWJsa2NnO1xuJiM0MztcdFx0c3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkO1xuJiM0MztcbiYjNDM7XHRcdHNwaW5fbG9jayhcdTAwMjZibGtjZy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHBkID0gYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF07XG4mIzQzO1x0XHRpZiAocGQpIHtcbiYjNDM7XHRcdFx0aWYgKHBkLVx1MDAzZW9ubGluZSBcdTAwMjZcdTAwMjYgcG9sLVx1MDAzZXBkX29mZmxpbmVfZm4pXG4mIzQzO1x0XHRcdFx0cG9sLVx1MDAzZXBkX29mZmxpbmVfZm4ocGQpO1xuJiM0MztcdFx0XHRwZC1cdTAwM2VvbmxpbmUgPSBmYWxzZTtcbiYjNDM7XHRcdFx0cG9sLVx1MDAzZXBkX2ZyZWVfZm4ocGQpO1xuJiM0MztcdFx0XHRXUklURV9PTkNFKGJsa2ctXHUwMDNlcGRbcG9sLVx1MDAzZXBsaWRdLCBOVUxMKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmJsa2NnLVx1MDAzZWxvY2spO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBibGtjZ19hY3RpdmF0ZV9wb2xpY3kgLSBhY3RpdmF0ZSBhIGJsa2NnIHBvbGljeSBvbiBhIGdlbmRpc2tcbiAgKiBAZGlzazogZ2VuZGlzayBvZiBpbnRlcmVzdFxuQEAgLTE1NjMsNiAmIzQzOzE1OTEsOCBAQCBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG4gXG4gXHRpZiAocXVldWVfaXNfbXEocSkpXG4gXHRcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZxLVx1MDAzZWJsa2NnX211dGV4KTtcbiByZXRyeTpcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2cS1cdTAwM2VxdWV1ZV9sb2NrKTtcbiBcbkBAIC0xNTcyLDYgJiM0MzsxNjAyLDggQEAgaW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuIFxuIFx0XHRpZiAoYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF0pXG4gXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoaGxpc3RfdW5oYXNoZWQoXHUwMDI2YmxrZy1cdTAwM2VibGtjZ19ub2RlKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdC8qIElmIHByZWFsbG9jIG1hdGNoZXMsIHVzZSBpdDsgb3RoZXJ3aXNlIHRyeSBHRlBfTk9XQUlUICovXG4gXHRcdGlmIChibGtnID09IHBpbm5lZF9ibGtnKSB7XG5AQCAtMTYyNSw2ICYjNDM7MTY1Nyw3IEBAIGludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcbiBcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIG91dDpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cS1cdTAwM2VibGtjZ19tdXRleCk7XG4gXHRpZiAocXVldWVfaXNfbXEocSkpXG4gXHRcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4gXHRpZiAocGlubmVkX2Jsa2cpXG5AQCAtMTYzNiwyMSAmIzQzOzE2NjksNyBAQCBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG4gZW5vbWVtOlxuIFx0LyogYWxsb2MgZmFpbGVkLCB0YWtlIGRvd24gZXZlcnl0aGluZyAqL1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShibGtnLCBcdTAwMjZxLVx1MDAzZWJsa2dfbGlzdCwgcV9ub2RlKSB7XG4tXHRcdHN0cnVjdCBibGtjZyAqYmxrY2cgPSBibGtnLVx1MDAzZWJsa2NnO1xuLVx0XHRzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQ7XG4tXG4tXHRcdHNwaW5fbG9jayhcdTAwMjZibGtjZy1cdTAwM2Vsb2NrKTtcbi1cdFx0cGQgPSBibGtnLVx1MDAzZXBkW3BvbC1cdTAwM2VwbGlkXTtcbi1cdFx0aWYgKHBkKSB7XG4tXHRcdFx0aWYgKHBkLVx1MDAzZW9ubGluZSBcdTAwMjZcdTAwMjYgcG9sLVx1MDAzZXBkX29mZmxpbmVfZm4pXG4tXHRcdFx0XHRwb2wtXHUwMDNlcGRfb2ZmbGluZV9mbihwZCk7XG4tXHRcdFx0cGQtXHUwMDNlb25saW5lID0gZmFsc2U7XG4tXHRcdFx0cG9sLVx1MDAzZXBkX2ZyZWVfZm4ocGQpO1xuLVx0XHRcdFdSSVRFX09OQ0UoYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF0sIE5VTEwpO1xuLVx0XHR9XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmJsa2NnLVx1MDAzZWxvY2spO1xuLVx0fVxuJiM0MztcdGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMocSwgcG9sKTtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFx0cmV0ID0gLUVOT01FTTtcbiBcdGdvdG8gb3V0O1xuQEAgLTE2NjksNyAmIzQzOzE2ODgsNiBAQCB2b2lkIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuIHtcbiBcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGlzay1cdTAwM2VxdWV1ZTtcbi1cdHN0cnVjdCBibGtjZ19ncSAqYmxrZztcbiBcdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiBcbiBcdGlmICghYmxrY2dfcG9saWN5X2VuYWJsZWQocSwgcG9sKSlcbkBAIC0xNjgyLDIwICYjNDM7MTcwMCw3IEBAIHZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4gXG4gXHRfX2NsZWFyX2JpdChwb2wtXHUwMDNlcGxpZCwgcS1cdTAwM2VibGtjZ19wb2xzKTtcbi1cbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoYmxrZywgXHUwMDI2cS1cdTAwM2VibGtnX2xpc3QsIHFfbm9kZSkge1xuLVx0XHRzdHJ1Y3QgYmxrY2cgKmJsa2NnID0gYmxrZy1cdTAwM2VibGtjZztcbi1cbi1cdFx0c3Bpbl9sb2NrKFx1MDAyNmJsa2NnLVx1MDAzZWxvY2spO1xuLVx0XHRpZiAoYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF0pIHtcbi1cdFx0XHRpZiAoYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF0tXHUwMDNlb25saW5lIFx1MDAyNlx1MDAyNiBwb2wtXHUwMDNlcGRfb2ZmbGluZV9mbilcbi1cdFx0XHRcdHBvbC1cdTAwM2VwZF9vZmZsaW5lX2ZuKGJsa2ctXHUwMDNlcGRbcG9sLVx1MDAzZXBsaWRdKTtcbi1cdFx0XHRwb2wtXHUwMDNlcGRfZnJlZV9mbihibGtnLVx1MDAzZXBkW3BvbC1cdTAwM2VwbGlkXSk7XG4tXHRcdFx0YmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF0gPSBOVUxMO1xuLVx0XHR9XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmJsa2NnLVx1MDAzZWxvY2spO1xuLVx0fVxuLVxuJiM0MztcdGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMocSwgcG9sKTtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnEtXHUwMDNlYmxrY2dfbXV0ZXgpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUJiMzNDssCiAgICAmIzM0O0lPU0NIRURfQkZRJiMzNDssCiAgICAmIzM0O0JGUV9HUk9VUF9JT1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrY2dfYWN0aXZhdGVfcG9saWN5JiMzNDssCiAgICAmIzM0O2Jsa2NnX2RlYWN0aXZhdGVfcG9saWN5JiMzNDssCiAgICAmIzM0O2Jsa2NnX2V4aXRfZGlzayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGJsb2NrIGNncm91cCBwb2xpY3kgYWN0aXZhdGlvbi9kZWFjdGl2YXRpb24gYW5kIGRpc2sgdGVhcmRvd24gYnkgYWRkaW5nIGEgbXV0ZXggbG9jay4gVGhlc2UgYXJlIGNvcmUgYmxvY2sgY2dyb3VwIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZHluYW1pY2FsbHkgd2hlbiBlbmFibGluZy9kaXNhYmxpbmcgY2dyb3VwIHBvbGljaWVzIG9yIGRlc3Ryb3lpbmcgYmxvY2sgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMwNWQ4MWRjYTJiZGI5NDU5OWNlMzNiMGIyZmFhNTgyYjBiZGI0NTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDE4OjUxOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jCmluZGV4IGQ5Njc2MTI2YzViNWQuLjM1NDYzN2YzYjE1OGMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTU2OSw2ICYjNDM7NTY5LDcgQEAgc3RhdGljIHZvaWQgYmxrZ19kZXN0cm95X2FsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAlpbnQgaTsKIAogcmVzdGFydDoKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3EtJmd0O2Jsa2NnX211dGV4KTsKIAlzcGluX2xvY2tfaXJxKCZhbXA7cS0mZ3Q7cXVldWVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShibGtnLCAmYW1wO3EtJmd0O2Jsa2dfbGlzdCwgcV9ub2RlKSB7CiAJCXN0cnVjdCBibGtjZyAqYmxrY2cgPSBibGtnLSZndDtibGtjZzsKQEAgLTU4Nyw2ICYjNDM7NTg4LDcgQEAgc3RhdGljIHZvaWQgYmxrZ19kZXN0cm95X2FsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAkJaWYgKCEoLS1jb3VudCkpIHsKIAkJCWNvdW50ID0gQkxLR19ERVNUUk9ZX0JBVENIX1NJWkU7CiAJCQlzcGluX3VubG9ja19pcnEoJmFtcDtxLSZndDtxdWV1ZV9sb2NrKTsKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDtxLSZndDtibGtjZ19tdXRleCk7CiAJCQljb25kX3Jlc2NoZWQoKTsKIAkJCWdvdG8gcmVzdGFydDsKIAkJfQpAQCAtNjA2LDYgJiM0Mzs2MDgsNyBAQCBzdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3lfYWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogCiAJcS0mZ3Q7cm9vdF9ibGtnID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnEoJmFtcDtxLSZndDtxdWV1ZV9sb2NrKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cS0mZ3Q7YmxrY2dfbXV0ZXgpOwogCiAJd2FrZV91cF92YXIoJmFtcDtxLSZndDtyb290X2Jsa2cpOwogfQpAQCAtMTUyNiw2ICYjNDM7MTUyOSwzMSBAQCBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBpb19jZ3JwX3N1YnN5cyA9IHsKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChpb19jZ3JwX3N1YnN5cyk7CiAKJiM0MzsvKgomIzQzOyAqIFRlYXIgZG93biBwZXItYmxrZyBwb2xpY3kgZGF0YSBmb3IgQHBvbCBvbiBAcS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2c7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoYmxrZywgJmFtcDtxLSZndDtibGtnX2xpc3QsIHFfbm9kZSkgewomIzQzOwkJc3RydWN0IGJsa2NnICpibGtjZyA9IGJsa2ctJmd0O2Jsa2NnOwomIzQzOwkJc3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7YmxrY2ctJmd0O2xvY2spOwomIzQzOwkJcGQgPSBibGtnLSZndDtwZFtwb2wtJmd0O3BsaWRdOwomIzQzOwkJaWYgKHBkKSB7CiYjNDM7CQkJaWYgKHBkLSZndDtvbmxpbmUgJmFtcDsmYW1wOyBwb2wtJmd0O3BkX29mZmxpbmVfZm4pCiYjNDM7CQkJCXBvbC0mZ3Q7cGRfb2ZmbGluZV9mbihwZCk7CiYjNDM7CQkJcGQtJmd0O29ubGluZSA9IGZhbHNlOwomIzQzOwkJCXBvbC0mZ3Q7cGRfZnJlZV9mbihwZCk7CiYjNDM7CQkJV1JJVEVfT05DRShibGtnLSZndDtwZFtwb2wtJmd0O3BsaWRdLCBOVUxMKTsKJiM0MzsJCX0KJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7YmxrY2ctJmd0O2xvY2spOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoqCiAgKiBibGtjZ19hY3RpdmF0ZV9wb2xpY3kgLSBhY3RpdmF0ZSBhIGJsa2NnIHBvbGljeSBvbiBhIGdlbmRpc2sKICAqIEBkaXNrOiBnZW5kaXNrIG9mIGludGVyZXN0CkBAIC0xNTYzLDYgJiM0MzsxNTkxLDggQEAgaW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKQogCiAJaWYgKHF1ZXVlX2lzX21xKHEpKQogCQltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUocSk7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtxLSZndDtibGtjZ19tdXRleCk7CiByZXRyeToKIAlzcGluX2xvY2tfaXJxKCZhbXA7cS0mZ3Q7cXVldWVfbG9jayk7CiAKQEAgLTE1NzIsNiAmIzQzOzE2MDIsOCBAQCBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpCiAKIAkJaWYgKGJsa2ctJmd0O3BkW3BvbC0mZ3Q7cGxpZF0pCiAJCQljb250aW51ZTsKJiM0MzsJCWlmIChobGlzdF91bmhhc2hlZCgmYW1wO2Jsa2ctJmd0O2Jsa2NnX25vZGUpKQomIzQzOwkJCWNvbnRpbnVlOwogCiAJCS8qIElmIHByZWFsbG9jIG1hdGNoZXMsIHVzZSBpdDsgb3RoZXJ3aXNlIHRyeSBHRlBfTk9XQUlUICovCiAJCWlmIChibGtnID09IHBpbm5lZF9ibGtnKSB7CkBAIC0xNjI1LDYgJiM0MzsxNjU3LDcgQEAgaW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKQogCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cS0mZ3Q7cXVldWVfbG9jayk7CiBvdXQ6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3EtJmd0O2Jsa2NnX211dGV4KTsKIAlpZiAocXVldWVfaXNfbXEocSkpCiAJCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7CiAJaWYgKHBpbm5lZF9ibGtnKQpAQCAtMTYzNiwyMSAmIzQzOzE2NjksNyBAQCBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpCiBlbm9tZW06CiAJLyogYWxsb2MgZmFpbGVkLCB0YWtlIGRvd24gZXZlcnl0aGluZyAqLwogCXNwaW5fbG9ja19pcnEoJmFtcDtxLSZndDtxdWV1ZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsa2csICZhbXA7cS0mZ3Q7YmxrZ19saXN0LCBxX25vZGUpIHsKLQkJc3RydWN0IGJsa2NnICpibGtjZyA9IGJsa2ctJmd0O2Jsa2NnOwotCQlzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQ7Ci0KLQkJc3Bpbl9sb2NrKCZhbXA7YmxrY2ctJmd0O2xvY2spOwotCQlwZCA9IGJsa2ctJmd0O3BkW3BvbC0mZ3Q7cGxpZF07Ci0JCWlmIChwZCkgewotCQkJaWYgKHBkLSZndDtvbmxpbmUgJmFtcDsmYW1wOyBwb2wtJmd0O3BkX29mZmxpbmVfZm4pCi0JCQkJcG9sLSZndDtwZF9vZmZsaW5lX2ZuKHBkKTsKLQkJCXBkLSZndDtvbmxpbmUgPSBmYWxzZTsKLQkJCXBvbC0mZ3Q7cGRfZnJlZV9mbihwZCk7Ci0JCQlXUklURV9PTkNFKGJsa2ctJmd0O3BkW3BvbC0mZ3Q7cGxpZF0sIE5VTEwpOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZhbXA7YmxrY2ctJmd0O2xvY2spOwotCX0KJiM0MzsJYmxrY2dfcG9saWN5X3RlYXJkb3duX3BkcyhxLCBwb2wpOwogCXNwaW5fdW5sb2NrX2lycSgmYW1wO3EtJmd0O3F1ZXVlX2xvY2spOwogCXJldCA9IC1FTk9NRU07CiAJZ290byBvdXQ7CkBAIC0xNjY5LDcgJiM0MzsxNjg4LDYgQEAgdm9pZCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAkJCSAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKQogewogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGlzay0mZ3Q7cXVldWU7Ci0Jc3RydWN0IGJsa2NnX2dxICpibGtnOwogCXVuc2lnbmVkIGludCBtZW1mbGFnczsKIAogCWlmICghYmxrY2dfcG9saWN5X2VuYWJsZWQocSwgcG9sKSkKQEAgLTE2ODIsMjAgJiM0MzsxNzAwLDcgQEAgdm9pZCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlzcGluX2xvY2tfaXJxKCZhbXA7cS0mZ3Q7cXVldWVfbG9jayk7CiAKIAlfX2NsZWFyX2JpdChwb2wtJmd0O3BsaWQsIHEtJmd0O2Jsa2NnX3BvbHMpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShibGtnLCAmYW1wO3EtJmd0O2Jsa2dfbGlzdCwgcV9ub2RlKSB7Ci0JCXN0cnVjdCBibGtjZyAqYmxrY2cgPSBibGtnLSZndDtibGtjZzsKLQotCQlzcGluX2xvY2soJmFtcDtibGtjZy0mZ3Q7bG9jayk7Ci0JCWlmIChibGtnLSZndDtwZFtwb2wtJmd0O3BsaWRdKSB7Ci0JCQlpZiAoYmxrZy0mZ3Q7cGRbcG9sLSZndDtwbGlkXS0mZ3Q7b25saW5lICZhbXA7JmFtcDsgcG9sLSZndDtwZF9vZmZsaW5lX2ZuKQotCQkJCXBvbC0mZ3Q7cGRfb2ZmbGluZV9mbihibGtnLSZndDtwZFtwb2wtJmd0O3BsaWRdKTsKLQkJCXBvbC0mZ3Q7cGRfZnJlZV9mbihibGtnLSZndDtwZFtwb2wtJmd0O3BsaWRdKTsKLQkJCWJsa2ctJmd0O3BkW3BvbC0mZ3Q7cGxpZF0gPSBOVUxMOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZhbXA7YmxrY2ctJmd0O2xvY2spOwotCX0KLQomIzQzOwlibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzKHEsIHBvbCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cS0mZ3Q7cXVldWVfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cS0mZ3Q7YmxrY2dfbXV0ZXgpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQmxvY2sgQ2dyb3VwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYmxvY2svYmxrLWNncm91cC5jYC4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBjb3JlIGZ1bmN0aW9uczogYGJsa2dfZGVzdHJveV9hbGxgLCBgYmxrY2dfYWN0aXZhdGVfcG9saWN5YCwgYW5kIGBibGtjZ19kZWFjdGl2YXRlX3BvbGljeWAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBhIG5ldyBmdW5jdGlvbiwgYGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHNgLCB3aGljaCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlZW4gcHVsbGVkIG91dCBvZiB0aGUgYWN0aXZhdGlvbiBhbmQgZGVhY3RpdmF0aW9uIHJvdXRpbmVzIOKAkyBwcm9iYWJseSBmb3IgYmV0dGVyIGNvZGUgcmV1c2UgYW5kIG9yZ2FuaXphdGlvbiwgc21hcnQuCgpUaGUgYWRkaXRpb24gb2YgdGhvc2UgYG11dGV4X2xvY2tgIGFuZCBgbXV0ZXhfdW5sb2NrYCBjYWxscyBhcm91bmQgYHEtJmd0O2Jsa2NnX211dGV4YCBpbiBgYmxrZ19kZXN0cm95X2FsbGAgYW5kIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBUaGlzIHN1Z2dlc3RzIGEgcmFjZSBjb25kaXRpb24gb3IgY29uY3VycmVudCBhY2Nlc3MgaXNzdWUgd2FzIGFkZHJlc3NlZC4gUHJvdGVjdGluZyBzaGFyZWQgZGF0YSB3aXRoIG11dGV4ZXMgaXMgYWx3YXlzIGEgZ29vZCBzaWduIG9mIGNhcmVmdWxuZXNzLiBBbHNvIHRoYXQgYGlmIChobGlzdF91bmhhc2hlZCgmYW1wO2Jsa2ctJmd0O2Jsa2NnX25vZGUpKSBjb250aW51ZTtgIGluIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGltcGxpZXMgdGhlIGNvZGUgaXMgcHJldmVudGluZyB3b3JrIG9uIHVuaGFzaGVkIGVsZW1lbnRzLiBGaW5lLWdyYWluZWQgY29udHJvbCwgSSBsaWtlIGl0LgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBibG9jayBjZ3JvdXAgc3Vic3lzdGVtLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIHJlYWNoYWJsZSBjb2RlIHBhdGggYW5kIHNob3VsZCBiZSBmdXp6ZWQgdGhvcm91Z2hseS4gVGltZSB0byBzdGFydCB0aGlua2luZyBhYm91dCB0ZXN0IGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSBpbiBteSB0ZXN0aW5nIGVudmlyb25tZW50LiBMZXQmIzM5O3Mgc2VlLi4uIGEgcXVpY2sgc2VhcmNoIGZvciBgYmxrLWNncm91cC5jYCBpbiB0aGUgYGJsb2NrL01ha2VmaWxlYCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29uZmlndXJhdGlvbiBjbHVlcyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGstY2dyb3VwLmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpcmVjdGluZyBNeSBBdHRlbnRpb246IFRoZSBgYmxvY2svTWFrZWZpbGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgcmlnaHQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIExldCYjMzk7cyBjdXQgdGhyb3VnaCBhbnkgbGF5ZXJzIG9mIGFic3RyYWN0aW9uIGFuZCBnbyBzdHJhaWdodCB0byB0aGUgYGJsb2NrL01ha2VmaWxlYC4gTm8gbmVlZCB0byBiZWF0IGFyb3VuZCB0aGUgYnVzaDsgSSYjMzk7bSBnb2luZyB0byBleGFtaW5lIHRoaXMgZGlyZWN0bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGF0IGl0cyBtb3N0IGZ1bmRhbWVudGFsIGxldmVsLCBzbyB0aGUgYE1ha2VmaWxlYCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhpbmdzIGFyZSBiZWluZyBvcmNoZXN0cmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgYmxvY2sgbGF5ZXJcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Q09OVEVYVF9BTkFMWVNJUyA6PSB5XG4gICA3Olx0XG4gICA4Olx0b2JqLXlcdFx0Oj0gYmRldi5vIGZvcHMubyBiaW8ubyBlbGV2YXRvci5vIGJsay1jb3JlLm8gYmxrLXN5c2ZzLm8gXFxcbiAgIDk6XHRcdFx0XHRibGstZmx1c2gubyBibGstc2V0dGluZ3MubyBibGstaW9jLm8gYmxrLW1hcC5vIFxcXG4gIDEwOlx0XHRcdFx0YmxrLW1lcmdlLm8gYmxrLXRpbWVvdXQubyBibGstbGliLm8gYmxrLW1xLm8gXFxcbiAgMTE6XHRcdFx0XHRibGstbXEtdGFnLm8gYmxrLW1xLWRtYS5vIGJsay1zdGF0Lm8gXFxcbiAgMTI6XHRcdFx0XHRibGstbXEtc3lzZnMubyBibGstbXEtY3B1bWFwLm8gYmxrLW1xLXNjaGVkLm8gaW9jdGwubyBcXFxuICAxMzpcdFx0XHRcdGdlbmhkLm8gaW9wcmlvLm8gYmFkYmxvY2tzLm8gcGFydGl0aW9ucy8gYmxrLXJxLXFvcy5vIFxcXG4gIDE0Olx0XHRcdFx0ZGlzay1ldmVudHMubyBibGstaWEtcmFuZ2VzLm8gZWFybHktbG9va3VwLm9cbiAgMTU6XHRcbiAgMTY6XHRvYmotJChDT05GSUdfQkxLX0VSUk9SX0lOSkVDVElPTikgJiM0Mzs9IGVycm9yLWluamVjdGlvbi5vXG4gIDE3Olx0b2JqLSQoQ09ORklHX0JMS19ERVZfQlNHX0NPTU1PTikgJiM0Mzs9IGJzZy5vXG4gIDE4Olx0b2JqLSQoQ09ORklHX0JMS19ERVZfQlNHTElCKVx0JiM0Mzs9IGJzZy1saWIub1xuICAxOTpcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQKVx0JiM0Mzs9IGJsay1jZ3JvdXAub1xuICAyMDpcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX1JXU1RBVClcdCYjNDM7PSBibGstY2dyb3VwLXJ3c3RhdC5vXG4gIDIxOlx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfRkNfQVBQSUQpICYjNDM7PSBibGstY2dyb3VwLWZjLWFwcGlkLm9cbiAgMjI6XHRvYmotJChDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HKVx0JiM0Mzs9IGJsay10aHJvdHRsZS5vXG4gIDIzOlx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfSU9QUklPKVx0JiM0Mzs9IGJsay1pb3ByaW8ub1xuICAyNDpcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWSlcdCYjNDM7PSBibGstaW9sYXRlbmN5Lm9cbiAgMjU6XHRvYmotJChDT05GSUdfQkxLX0NHUk9VUF9JT0NPU1QpXHQmIzQzOz0gYmxrLWlvY29zdC5vXG4gIDI2Olx0b2JqLSQoQ09ORklHX01RX0lPU0NIRURfREVBRExJTkUpXHQmIzQzOz0gbXEtZGVhZGxpbmUub1xuICAyNzpcdG9iai0kKENPTkZJR19NUV9JT1NDSEVEX0tZQkVSKVx0JiM0Mzs9IGt5YmVyLWlvc2NoZWQub1xuICAyODpcdGJmcS15XHRcdFx0XHQ6PSBiZnEtaW9zY2hlZC5vIGJmcS13ZjJxLm8gYmZxLWNncm91cC5vXG4gIDI5Olx0b2JqLSQoQ09ORklHX0lPU0NIRURfQkZRKVx0JiM0Mzs9IGJmcS5vXG4gIDMwOlx0XG4gIDMxOlx0b2JqLSQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKSAmIzQzOz0gYmlvLWludGVncml0eS5vIGJsay1pbnRlZ3JpdHkubyB0MTAtcGkubyBcXFxuICAzMjpcdFx0XHRcdFx0ICAgYmlvLWludGVncml0eS1hdXRvLm8gYmlvLWludGVncml0eS1mcy5vXG4gIDMzOlx0b2JqLSQoQ09ORklHX0JMS19ERVZfWk9ORUQpXHQmIzQzOz0gYmxrLXpvbmVkLm9cbiAgMzQ6XHRvYmotJChDT05GSUdfQkxLX1dCVClcdFx0JiM0Mzs9IGJsay13YnQub1xuICAzNTpcdG9iai0kKENPTkZJR19CTEtfREVCVUdfRlMpXHQmIzQzOz0gYmxrLW1xLWRlYnVnZnMub1xuICAzNjpcdG9iai0kKENPTkZJR19CTEtfU0VEX09QQUwpXHQmIzQzOz0gc2VkLW9wYWwub1xuICAzNzpcdG9iai0kKENPTkZJR19CTEtfUE0pXHRcdCYjNDM7PSBibGstcG0ub1xuICAzODpcdG9iai0kKENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT04pXHQmIzQzOz0gYmxrLWNyeXB0by5vIGJsay1jcnlwdG8tcHJvZmlsZS5vIFxcXG4gIDM5Olx0XHRcdFx0XHRcdCAgIGJsay1jcnlwdG8tc3lzZnMub1xuICA0MDpcdG9iai0kKENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0spXHQmIzQzOz0gYmxrLWNyeXB0by1mYWxsYmFjay5vXG4gIDQxOlx0b2JqLSQoQ09ORklHX0JMT0NLX0hPTERFUl9ERVBSRUNBVEVEKVx0JiM0Mzs9IGhvbGRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQxOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBCbG9jayBJTyBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gdGhlIGFyY2hpdGVjdHVyZSBJJiMzOTttIHdvcmtpbmcgd2l0aCAqZGVtYW5kcyogYENPTkZJR19CTEtfQ0dST1VQYC4gTm8gd2F5IGFyb3VuZCB0aGF0LCBpdCBzZWVtcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgbm93IGdvZXMgc3RyYWlnaHQgdG8gZGVwZW5kZW5jaWVzLiBCZWZvcmUgSSBkaXZlIGludG8gYW55IGNvZGUsIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGF0KiB0aGlzIHNldHRpbmcgZnVuZGFtZW50YWxseSByZWxpZXMgb24uIEFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgYXV0b21hdGljYWxseSBlbmFibGVkIG9yIHRoYXQgSSAqbXVzdCogc2V0IHRvIGF2b2lkIGEgY2F0YXN0cm9waGljIG1lbHRkb3duPyBPciwgY29udmVyc2VseSwgd2hhdCBmZWF0dXJlcyBtaWdodCBJIGxvc2UgaWYgdGhpcyBjb25maWcgZmxhZyBpcyBzb21laG93IG1pc3Npbmc/IFRpbWUgdG8gcGVlbCBiYWNrIHRoZSBsYXllcnMgYW5kIGdldCBhIHNvbGlkIGdyYXNwIG9mIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbSBhcyBhIHdob2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfQ0dST1VQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXG4tLVxuYmxvY2svS2NvbmZpZy00MS1cbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXG5ibG9jay9LY29uZmlnLTQzLVx0Ym9vbFxuYmxvY2svS2NvbmZpZy00NC1cbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cbmJsb2NrL0tjb25maWctNDYtXHRib29sXG4tLVxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcbi0tXG5ibG9jay9LY29uZmlnLTEzMy1cbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxuYmxvY2svS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNDQtXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuYmxvY2svS2NvbmZpZy0xNDYtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNTMtXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcbmJsb2NrL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTYzLVxuYmxvY2svS2NvbmZpZzoxNjQ6Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXG5ibG9jay9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7Q2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxMgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipTZWFyY2hpbmcgZm9yIGEgTWlzc2luZyBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpPa2F5LCBzbyBJIHdhcyBsb29raW5nIGZvciBgY29uZmlnIEJMS19DR1JPVVBgIHdpdGhpbiB0aGUgYGJsb2NrL0tjb25maWdgIGZpbGUsIGJ1dCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIG5vdCBwcmVzZW50IHRoZXJlLiBIbW0sIHRoYXQmIzM5O3MgdW51c3VhbC4gV2hlcmUgY291bGQgaXQgYmUgZGVmaW5lZD8gVGltZSB0byBicm9hZGVuIHRoZSBzZWFyY2guIExldCYjMzk7cyBkbyBhIGdsb2JhbCBzZWFyY2ggYWNyb3NzIHRoZSBlbnRpcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gdHJlZS4gTWF5YmUgaXQmIzM5O3MgZGVmaW5lZCBpbiBhIGRpZmZlcmVudCwgcmVsYXRlZCBzdWJzeXN0ZW0gb3IgZmlsZS4gVGhpcyBpcyBjb21tb247IHNvbWV0aW1lcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGxvZ2ljYWxseSBncm91cGVkIGVsc2V3aGVyZSBmb3Igb3JnYW5pemF0aW9uYWwgcmVhc29ucy4gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBjcnVjaWFsIGZsYWcgaXMgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTM5PWNvbmZpZyBCTEtfUlFfQUxMT0NfVElNRVxuLS1cbmJsb2NrL0tjb25maWctNDEtXG5ibG9jay9LY29uZmlnOjQyOmNvbmZpZyBCTEtfQ0dST1VQX1JXU1RBVFxuYmxvY2svS2NvbmZpZy00My1cdGJvb2xcbmJsb2NrL0tjb25maWctNDQtXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXG5ibG9jay9LY29uZmlnLTQ2LVx0Ym9vbFxuLS1cbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXG4tLVxuYmxvY2svS2NvbmZpZy0xMzMtXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcbmJsb2NrL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTQ0LVxuYmxvY2svS2NvbmZpZzoxNDU6Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcbmJsb2NrL0tjb25maWctMTQ2LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1wmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTUzLVxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXG5ibG9jay9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE2My1cbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xuYmxvY2svS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O0Nncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1wmIzM0O1xuLS1cbmluaXQvS2NvbmZpZz0xMDk5PWNvbmZpZyBNRU1DR19WMVxuLS1cbmluaXQvS2NvbmZpZy0xMTE1LVxuaW5pdC9LY29uZmlnOjExMTY6Y29uZmlnIEJMS19DR1JPVVBcbmluaXQvS2NvbmZpZy0xMTE3LVx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyB0aHJvdWdoIHRoaXMga2VybmVsIHNvdXJjZS4gQWgsIHRoZSBsaWtlbHkgY3VscHJpdCBpcyBpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBpbml0aWFsaXphdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBqdW1wIHJpZ2h0IHRvIGFyb3VuZCBsaW5lIDExMTYgaW4gYGluaXQvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rLiBUaGF0IHNob3VsZCBnZXQgbWUgc3RhcnRlZC4gS25vd2luZyB0aGUgS2NvbmZpZyBsYXlvdXQgYXMgSSBkbywgdGhpcyBmZWVscyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlLiBOb3csIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBkZWZpbmVkIHRoZXJlLi4uIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBvZiB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMsIG9yIG1heWJlIHNvbWUgcmVsZXZhbnQgZGVmYXVsdHMgb3IgZGVwZW5kZW5jaWVzIGRlZmluZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTEwOlx0XHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcbjExMTE6XHRcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxuMTExMjpcdFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXG4xMTEzOlx0XG4xMTE0Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjExMTU6XHRcbjExMTY6XHRjb25maWcgQkxLX0NHUk9VUFxuMTExNzpcdFx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4xMTE4Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4xMTE5Olx0XHRkZWZhdWx0IG5cbjExMjA6XHRcdGhlbHBcbjExMjE6XHRcdEdlbmVyaWMgYmxvY2sgSU8gY29udHJvbGxlciBjZ3JvdXAgaW50ZXJmYWNlLiBUaGlzIGlzIHRoZSBjb21tb25cbjExMjI6XHRcdGNncm91cCBpbnRlcmZhY2Ugd2hpY2ggc2hvdWxkIGJlIHVzZWQgYnkgdmFyaW91cyBJTyBjb250cm9sbGluZ1xuMTEyMzpcdFx0cG9saWNpZXMuXG4xMTI0Olx0XG4xMTI1Olx0XHRDdXJyZW50bHksIENGUSBJTyBzY2hlZHVsZXIgdXNlcyBpdCB0byByZWNvZ25pemUgdGFzayBncm91cHMgYW5kXG4xMTI2Olx0XHRjb250cm9sIGRpc2sgYmFuZHdpZHRoIGFsbG9jYXRpb24gKHByb3BvcnRpb25hbCB0aW1lIHNsaWNlIGFsbG9jYXRpb24pXG4xMTI3Olx0XHR0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCBpcyBhbHNvIHVzZWQgYnkgYmlvIHRocm90dGxpbmcgbG9naWMgaW5cbjExMjg6XHRcdGJsb2NrIGxheWVyIHRvIGltcGxlbWVudCB1cHBlciBsaW1pdCBpbiBJTyByYXRlcyBvbiBhIGRldmljZS5cbjExMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE0OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBoZXJlLgoKKipEZXBlbmRlbmNpZXMgYW5kIEZ1bmN0aW9uIEFuYWx5c2lzOiBCTEtfQ0dST1VQIGFuZCBCTE9DSyoqCgpSaWdodCwgc28gaXQgbG9va3MgbGlrZSBgQkxLX0NHUk9VUGAgaXMgZnVuZGFtZW50YWxseSByZWxpYW50IG9uIGBCTE9DS2AuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgZGVwZW5kZW5jeSBtYW5pZmVzdHMgaXRzZWxmIGF0IHRoZSBmdW5jdGlvbiBsZXZlbC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuCgpUaGUgb25lcyBmbGFnZ2VkIGFyZTogYGJsa2dfZGVzdHJveV9hbGxgLCBgYmxrY2dfYWN0aXZhdGVfcG9saWN5YCwgYW5kIGBibGtjZ19kZWFjdGl2YXRlX3BvbGljeWAuIE9rYXksIHRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHNldCB0byBzdGFydCB3aXRoLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBuYW1lcy4gTm93IEkgaGF2ZSB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgc291cmNlIGNvZGU7IGFyZSB0aGV5IGV4cG9ydGVkLCBvciBhcmUgdGhleSBzdGF0aWMuCgpBbHJpZ2h0LCBhIHF1aWNrIGNoZWNrIHNob3dzIHRoYXQgYGJsa2dfZGVzdHJveV9hbGxgIGlzIHN0YXRpYyDigJMgbWVhbmluZyBpdCYjMzk7cyBjb25maW5lZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0IGFuZCBub3QgYXZhaWxhYmxlIGZvciBleHRlcm5hbCBsaW5raW5nLiBCdXQsIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGFuZCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgIGFyZSBleHBvcnRlZCwgd2hpY2ggaW1wbGllcyB0aGF0IG90aGVyIG1vZHVsZXMgb3IgY29tcG9uZW50cyBjYW4gY2FsbCBhbmQgZGVwZW5kIG9uIHRoZWlyIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtjZ19hY3RpdmF0ZV9wb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWNncm91cC5jPTEyNTQ9c3RydWN0IGJmcV9ncm91cCAqYmZxX2NyZWF0ZV9ncm91cF9oaWVyYXJjaHkoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBpbnQgbm9kZSlcbi0tXG5ibG9jay9iZnEtY2dyb3VwLmMtMTI1Ny1cbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMjU4Olx0cmV0ID0gYmxrY2dfYWN0aXZhdGVfcG9saWN5KGJmcWQtXHUwMDNlcXVldWUtXHUwMDNlZGlzaywgXHUwMDI2YmxrY2dfcG9saWN5X2JmcSk7XG5ibG9jay9iZnEtY2dyb3VwLmMtMTI1OS1cdGlmIChyZXQpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz03MTk2PXN0YXRpYyBpbnQgYmZxX2luaXRfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZXEpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy03MzI4LVx0ICogZnVuY3Rpb24gaXMgdGhlIGhlYWQgb2YgYSBjaGFpbiBvZiBmdW5jdGlvbiBjYWxsc1xuYmxvY2svYmZxLWlvc2NoZWQuYzo3MzI5Olx0ICogKGJmcV9jcmVhdGVfZ3JvdXBfaGllcmFyY2h5LVx1MDAzZWJsa2NnX2FjdGl2YXRlX3BvbGljeS1cdTAwM2VcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNzMzMC1cdCAqIGJsa19tcV9mcmVlemVfcXVldWUpIHRoYXQgbWF5IGxlYWQgdG8gdGhlIGludm9jYXRpb24gb2YgdGhlXG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTE1MzU9c3RhdGljIHZvaWQgYmxrY2dfcG9saWN5X3RlYXJkb3duX3BkcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTU1Ny0vKipcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNTU4OiAqIGJsa2NnX2FjdGl2YXRlX3BvbGljeSAtIGFjdGl2YXRlIGEgYmxrY2cgcG9saWN5IG9uIGEgZ2VuZGlza1xuYmxvY2svYmxrLWNncm91cC5jLTE1NTktICogQGRpc2s6IGdlbmRpc2sgb2YgaW50ZXJlc3Rcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTU3Mi0gKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNTczOmludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTc0LXtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTY3Ni19XG5ibG9jay9ibGstY2dyb3VwLmM6MTY3NzpFWFBPUlRfU1lNQk9MX0dQTChibGtjZ19hY3RpdmF0ZV9wb2xpY3kpO1xuYmxvY2svYmxrLWNncm91cC5jLTE2NzgtXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTE2ODQtICogRGVhY3RpdmF0ZSBAcG9sIG9uIEBkaXNrLiAgRm9sbG93cyB0aGUgc2FtZSBzeW5jaHJvbml6YXRpb24gcnVsZXMgYXNcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNjg1OiAqIGJsa2NnX2FjdGl2YXRlX3BvbGljeSgpLlxuYmxvY2svYmxrLWNncm91cC5jLTE2ODYtICovXG4tLVxuYmxvY2svYmxrLWNncm91cC5oPTIwMj12b2lkIGJsa2NnX3BvbGljeV91bnJlZ2lzdGVyKHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCk7XG5ibG9jay9ibGstY2dyb3VwLmg6MjAzOmludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCk7XG5ibG9jay9ibGstY2dyb3VwLmgtMjA0LXZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuYmxvY2svYmxrLWNncm91cC5oPTQ4OT1zdGF0aWMgaW5saW5lIHZvaWQgYmxrY2dfcG9saWN5X3VucmVnaXN0ZXIoc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKSB7IH1cbmJsb2NrL2Jsay1jZ3JvdXAuaDo0OTA6c3RhdGljIGlubGluZSBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svYmxrLWNncm91cC5oLTQ5MS1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKSB7IHJldHVybiAwOyB9XG4tLVxuYmxvY2svYmxrLWlvY29zdC5jPTI5MTU9c3RhdGljIGludCBibGtfaW9jb3N0X2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jLTI5NjYtXG5ibG9jay9ibGstaW9jb3N0LmM6Mjk2NzpcdHJldCA9IGJsa2NnX2FjdGl2YXRlX3BvbGljeShkaXNrLCBcdTAwMjZibGtjZ19wb2xpY3lfaW9jb3N0KTtcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTY4LVx0aWYgKHJldClcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9NzU4PXN0YXRpYyBpbnQgYmxrX2lvbGF0ZW5jeV9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy03NzAtXHRcdGdvdG8gZXJyX2ZyZWU7XG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NzcxOlx0cmV0ID0gYmxrY2dfYWN0aXZhdGVfcG9saWN5KGRpc2ssIFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3kpO1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTc3Mi1cdGlmIChyZXQpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTMxOD1zdGF0aWMgaW50IGJsa190aHJvdGxfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzM4LVx0LyogYWN0aXZhdGUgcG9saWN5LCBibGtfdGhyb3RsX2FjdGl2YXRlZCgpIHdpbGwgcmV0dXJuIHRydWUgKi9cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjEzMzk6XHRyZXQgPSBibGtjZ19hY3RpdmF0ZV9wb2xpY3koZGlzaywgXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCk7XG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzQwLVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjUwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gUG9saWN5IEFjdGl2YXRpb24gYW5kIERlYWN0aXZhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBgYmxrY2dfYWN0aXZhdGVfcG9saWN5YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIHRoZSBiYWxsIHJvbGxpbmcgd2hlbiBhIGJsb2NrIEkvTyBjb250cm9sIGdyb3VwIHBvbGljeSBpcyBlbmFibGVkLiBJJiMzOTttIG5vdGluZyB0aGF0IGBiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeWAsIGBibGtfaW9jb3N0X2luaXRgLCBgYmxrX2lvbGF0ZW5jeV9pbml0YCwgYW5kIGBibGtfdGhyb3RsX2luaXRgIGFsbCBjYWxsIGl0LiBUaGF0IG1ha2VzIHNlbnNlOyB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFuZCBpbml0aWFsIHN0YXRlcyBmb3IgdGhlIHZhcmlvdXMgSS9PIHNjaGVkdWxlcnMgYW5kIHJlc291cmNlIGNvbnRyb2xsZXJzLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoaXMgYWN0aXZhdGlvbiBoYXBwZW5zIHdoZW4gd2UgaGF2ZSBgQ09ORklHX0lPU0NIRURfQkZRYCwgYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVGAsIGBDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBvciBgQ09ORklHX0JMS19ERVZfVEhST1RUTElOR2Agc2V0LCBhcyB0aGVzZSBhcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuYWJsZSB0aGUgY29ycmVzcG9uZGluZyBwb2xpY2llcy4gV2XigJlyZSB0YWxraW5nIEJGUSBzY2hlZHVsZXIsIEkvTyBjb3N0IGFjY291bnRpbmcsIEkvTyBsYXRlbmN5IG1vbml0b3JpbmcsIGFuZCB0aGUgdHJhZGl0aW9uYWwgdGhyb3R0bGluZyBtZWNoYW5pc20sIHJlc3BlY3RpdmVseS4gSSBuZWVkIHRvIGJlIHN1cmUgdG8gY29uc2lkZXIgdGhhdCByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb21waWxlLXRpbWUgb3B0aW9ucyBhbmQgcnVudGltZSBiZWhhdmlvci4KCldoaWxlIEkmIzM5O20gaGVyZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgY291bnRlcnBhcnQsIGBibGtjZ19kZWFjdGl2YXRlX3BvbGljeWAsIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBvbGljaWVzIGFyZSBzaHV0IGRvd24gd2hlbiB0aGV5JiMzOTtyZSBubyBsb25nZXIgbmVlZGVkLiBBIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgcmVxdWlyZXMgY29uc2lkZXJpbmcgbm90IG9ubHkgaW5pdGlhbGl6YXRpb24gYnV0IGFsc28gZGUtaW5pdGlhbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa2NnX2RlYWN0aXZhdGVfcG9saWN5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JmcS1pb3NjaGVkLmM9NzE0Mj1zdGF0aWMgdm9pZCBiZnFfZXhpdF9xdWV1ZShzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYy03MTY0LSNpZmRlZiBDT05GSUdfQkZRX0dST1VQX0lPU0NIRURcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NzE2NTpcdGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KGJmcWQtXHUwMDNlcXVldWUtXHUwMDNlZGlzaywgXHUwMDI2YmxrY2dfcG9saWN5X2JmcSk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTcxNjYtI2Vsc2Vcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTE0PXN0YXRpYyB2b2lkIGJsa2dfZnJlZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMjEtXHQvKlxuYmxvY2svYmxrLWNncm91cC5jOjEyMjpcdCAqIHBkX2ZyZWVfZm4oKSBjYW4gYWxzbyBiZSBjYWxsZWQgZnJvbSBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpLFxuYmxvY2svYmxrLWNncm91cC5jLTEyMy1cdCAqIGluIG9yZGVyIHRvIG1ha2Ugc3VyZSBwZF9mcmVlX2ZuKCkgaXMgY2FsbGVkIGluIG9yZGVyLCB0aGUgZGVsZXRpb25cbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTI1LVx0ICogYmxrY2dfbXV0ZXggaXMgdXNlZCB0byBzeW5jaHJvbml6ZSBibGtnX2ZyZWVfd29ya2ZuKCkgYW5kXG5ibG9jay9ibGstY2dyb3VwLmM6MTI2Olx0ICogYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKS5cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xMjctXHQgKi9cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9NTY0PXN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveV9hbGwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTU5OC1cdCAqIE1hcmsgcG9saWN5IGRlYWN0aXZhdGVkIHNpbmNlIHBvbGljeSBvZmZsaW5lIGhhcyBiZWVuIGRvbmUsIGFuZFxuYmxvY2svYmxrLWNncm91cC5jOjU5OTpcdCAqIHRoZSBmcmVlIGlzIHNjaGVkdWxlZCwgc28gZnV0dXJlIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KCkgY2FuXG5ibG9jay9ibGstY2dyb3VwLmMtNjAwLVx0ICogYmUgYnlwYXNzZWRcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9ODMxPWludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTg0NC1cbmJsb2NrL2Jsay1jZ3JvdXAuYzo4NDU6XHQvKiBQcmV2ZW50IGNvbmN1cnJlbnQgd2l0aCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpICovXG5ibG9jay9ibGstY2dyb3VwLmMtODQ2LVx0bXV0ZXhfbG9jayhcdTAwMjZxLVx1MDAzZWJsa2NnX211dGV4KTtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTY3Nz1FWFBPUlRfU1lNQk9MX0dQTChibGtjZ19hY3RpdmF0ZV9wb2xpY3kpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNjc5LS8qKlxuYmxvY2svYmxrLWNncm91cC5jOjE2ODA6ICogYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kgLSBkZWFjdGl2YXRlIGEgYmxrY2cgcG9saWN5IG9uIGEgZ2VuZGlza1xuYmxvY2svYmxrLWNncm91cC5jLTE2ODEtICogQGRpc2s6IGdlbmRpc2sgb2YgaW50ZXJlc3Rcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTY4Ni0gKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNjg3OnZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9ibGstY2dyb3VwLmMtMTY4OC1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTcwOS19XG5ibG9jay9ibGstY2dyb3VwLmM6MTcxMDpFWFBPUlRfU1lNQk9MX0dQTChibGtjZ19kZWFjdGl2YXRlX3BvbGljeSk7XG5ibG9jay9ibGstY2dyb3VwLmMtMTcxMS1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmg9MjAzPWludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCk7XG5ibG9jay9ibGstY2dyb3VwLmg6MjA0OnZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9ibGstY2dyb3VwLmgtMjA1LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmg9NDkwPXN0YXRpYyBpbmxpbmUgaW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbmJsb2NrL2Jsay1jZ3JvdXAuaC00OTEtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCkgeyByZXR1cm4gMDsgfVxuYmxvY2svYmxrLWNncm91cC5oOjQ5MjpzdGF0aWMgaW5saW5lIHZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9ibGstY2dyb3VwLmgtNDkzLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgfVxuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYz0yODkxPXN0YXRpYyB2b2lkIGlvY19ycW9zX2V4aXQoc3RydWN0IHJxX3FvcyAqcnFvcylcbi0tXG5ibG9jay9ibGstaW9jb3N0LmMtMjg5NC1cbmJsb2NrL2Jsay1pb2Nvc3QuYzoyODk1Olx0YmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kocnFvcy1cdTAwM2VkaXNrLCBcdTAwMjZibGtjZ19wb2xpY3lfaW9jb3N0KTtcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yODk2LVxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz02MzU9c3RhdGljIHZvaWQgYmxrY2dfaW9sYXRlbmN5X2V4aXQoc3RydWN0IHJxX3FvcyAqcnFvcylcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNjQwLVx0Zmx1c2hfd29yayhcdTAwMjZibGtpb2xhdC1cdTAwM2VlbmFibGVfd29yayk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmM6NjQxOlx0YmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kocnFvcy1cdTAwM2VkaXNrLCBcdTAwMjZibGtjZ19wb2xpY3lfaW9sYXRlbmN5KTtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02NDItXHRrZnJlZShibGtpb2xhdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbG9jayBDZ3JvdXAgUG9saWN5IFRlYXJkb3duKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgYmxvY2sgY2dyb3VwIGZ1bmN0aW9ucy4gSXQgc2VlbXMgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YCBnZXRzIGNhbGxlZCBmcm9tIGBiZnFfZXhpdF9xdWV1ZWAsIGBpb2NfcnFvc19leGl0YCwgYW5kIGBibGtjZ19pb2xhdGVuY3lfZXhpdGAuIEFuZCBjcnVjaWFsbHksIGBibGtnX2Rlc3Ryb3lfYWxsYCBpcyBwYXJ0IG9mIHRoZSBjbGVhbi11cCBwcm9jZXNzIHRyaWdnZXJlZCBieSB0aGUgZGVzdHJ1Y3Rpb24gb2YgYSBkaXNrIHZpYSBgYmxrY2dfZXhpdF9kaXNrYC4gVGhhdCBtYWtlcyBzZW5zZSAtIHdlIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGUgYmxvY2sgY2dyb3VwIGlzIHByb3Blcmx5IGNsZWFuZWQgdXAgd2hlbiB0aGUgYmFja2luZyBzdG9yYWdlIGdvZXMgYXdheS4KClRoZSBwYXRjaCBpdHNlbGYgaXMgdG91Y2hpbmcgc29tZSBrZXkgYXJlYXM6IGBibGtnX2Rlc3Ryb3lfYWxsYCwgYGJsa2NnX2FjdGl2YXRlX3BvbGljeWAsIGFuZCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIGJsb2NrIGNncm91cCBwb2xpY2llcy4gQmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uLCBpdCBzZWVtcyBsaWtlIGEgcmFjZSBjb25kaXRpb24gaXMgYmVpbmcgZml4ZWQsIGFuZCB0aGV5JiMzOTtyZSB1c2luZyBhIGBtdXRleF9sb2NrKCZhbXA7cS0mZ3Q7YmxrY2dfbXV0ZXgpYCBpbiBgYmxrZ19kZXN0cm95X2FsbGAgYW5kIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlIGZvciBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgcXVldWUmIzM5O3MgZGF0YSBzdHJ1Y3R1cmVzLiBUaGV5JiMzOTtyZSBhbHNvIGV4dHJhY3RpbmcgYGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHNgLCB3aGljaCBpcyB1c2VkIGluIGJvdGggYGJsa2NnX2FjdGl2YXRlX3BvbGljeWAgYW5kIGBibGtjZ19kZWFjdGl2YXRlX3BvbGljeWAgd2hpY2ggaW5kaWNhdGVzIHNoYXJlZCB0ZWFyZG93biBsb2dpYy4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgY3JpdGljYWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zLCBmaW5kaW5nIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIHdvdWxkIGJlIGltcG9ydGFudC4gSSBzaG91bGQgZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0cyBvbiBgYmxrZ19kZXN0cm95X2FsbGAsIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YCBhcyB0aGVzZSBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzLgoKSG9sZCBvbi4uLiBgYmxrZ19kZXN0cm95X2FsbGAgaXMgKnN0YXRpYyouIFRoYXQmIzM5O3MgYSBsaXR0bGUgY29uY2VybmluZy4gSXMgaXQgaW5saW5lZD8gTGV0IG1lIHF1aWNrbHkgY2hlY2sgYGJsay1jZ3JvdXAuY2AgdG8gc2VlIGlmIHRoYXQmIzM5O3MgdGhlIGNhc2UuIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGNvbXBsZXRlbHkgYmVmb3JlIGJlZ2lubmluZyBmdXp6aW5nLiBJZiBpdCYjMzk7cyBpbmxpbmVkLCBJJiMzOTtsbCBuZWVkIHRvIGFkanVzdCBteSBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrZ19kZXN0cm95X2FsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmM9NTE3PXN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveShzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTUyNy1cdCAqIGJsa2dfZnJlZV93b3JrZm4oKSwgaGVuY2UgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb21cbmJsb2NrL2Jsay1jZ3JvdXAuYzo1Mjg6XHQgKiBibGtjZ19kZXN0cm95X2Jsa2dzKCkgZmlyc3QgYW5kIGFnYWluIGZyb20gYmxrZ19kZXN0cm95X2FsbCgpIGJlZm9yZVxuYmxvY2svYmxrLWNncm91cC5jLTUyOS1cdCAqIGJsa2dfZnJlZV93b3JrZm4oKS5cbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtNTYzLVxuYmxvY2svYmxrLWNncm91cC5jOjU2NDpzdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3lfYWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuYmxvY2svYmxrLWNncm91cC5jLTU2NS17XG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTE0OTg9dm9pZCBibGtjZ19leGl0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9ibGstY2dyb3VwLmMtMTQ5OS17XG5ibG9jay9ibGstY2dyb3VwLmM6MTUwMDpcdGJsa2dfZGVzdHJveV9hbGwoZGlzayk7XG5ibG9jay9ibGstY2dyb3VwLmMtMTUwMS1cdGJsa190aHJvdGxfZXhpdChkaXNrKTtcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xODg2PXZvaWQgYmxrX3Rocm90bF9leGl0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE4OTAtXHQvKlxuYmxvY2svYmxrLXRocm90dGxlLmM6MTg5MTpcdCAqIGJsa2dfZGVzdHJveV9hbGwoKSBhbHJlYWR5IGRlYWN0aXZhdGUgdGhyb3RsIHBvbGljeSwganVzdCBjaGVjayBhbmRcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE4OTItXHQgKiBmcmVlIHRocm90bCBkYXRhLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUwOQoJCQkJCQkJb3V0cHV0OiA2OQoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQmxvY2sgSS9PIENncm91cCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVsYXRpb25zaGlwcyBoZXJlLCBzcGVjaWZpY2FsbHkgZm9yIGJsb2NrIEkvTyBjZ3JvdXBzLiBUaGUgZnVuY3Rpb24gYGJsa2dfZGVzdHJveV9hbGxgIGlzIHN0YXRpYyBidXQgbm90IGlubGluZWQsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGxpa2VseSBhIGNyaXRpY2FsIHBpZWNlIGFuZCBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgYGJsa2NnX2V4aXRfZGlza2AuIEkgY291bGQgZm9jdXMgbXkgYW5hbHlzaXMgb24gYGJsa2NnX2V4aXRfZGlza2AsIG9yIEkgY291bGQgaW5jbHVkZSBib3RoLCBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQgZHVyaW5nIGRlZXBlciBkaXZlcy4gQWxzbywgYGJsa2NnX2FjdGl2YXRlX3BvbGljeWAgYW5kIGBibGtjZ19kZWFjdGl2YXRlX3BvbGljeWAgYXJlIGV4cG9ydGVkIGZ1bmN0aW9ucywgc28gY2xlYXJseSwgdGhleSYjMzk7cmUgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgbG9vayBhdCB0aGUgYmlnZ2VyIHBpY3R1cmUg4oCTIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYEJMS19DR1JPVVBgIGlzIGVzc2VudGlhbCwgbm8gc3VycHJpc2VzIHRoZXJlLiBMZXQgbWUgc2VlIHdoYXQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB3ZSBoYXZlLiBBaCwgaGVyZSB3ZSBnbzogYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYEJMS19ERVZfVEhST1RUTElOR2AsIGBJT1NDSEVEX0JGUWAsIGFuZCBgQkZRX0dST1VQX0lPU0NIRURgLgoKVG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBGaXJzdCwgSSYjMzk7bGwgY2hlY2sgYGluaXQvS2NvbmZpZ2AgdG8gc2VlIHdoYXQgYEJMS19DR1JPVVBgIGRlcGVuZHMgb24uIEl0JiMzOTtzIGxpc3RlZCBhcyBkZXBlbmRpbmcgb24gYEJMT0NLYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4sIEkmIzM5O2xsIG1vdmUgb24gdG8gYGJsb2NrL0tjb25maWdgIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBvZiB0aGUgbW9yZSBzcGVjaWZpYyBvcHRpb25zOiBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBgQkxLX0RFVl9USFJPVFRMSU5HYCwgYElPU0NIRURfQkZRYCwgYW5kIGBCRlFfR1JPVVBfSU9TQ0hFRGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBjb25maWdzIHJlbGF0ZSB0byBlYWNoIG90aGVyIHRvIGhhdmUgYSBjbGVhciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgKEJMS19DR1JPVVBfSU9DT1NUfEJMS19DR1JPVVBfSU9MQVRFTkNZfEJMS19ERVZfVEhST1RUTElOR3xJT1NDSEVEX0JGUXxCRlFfR1JPVVBfSU9TQ0hFRCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz05Nz1jb25maWcgQkxLX0RFVl9aT05FRFxuLS1cbmJsb2NrL0tjb25maWctMTA1LVxuYmxvY2svS2NvbmZpZzoxMDY6Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xuYmxvY2svS2NvbmZpZy0xMDctXHRib29sIFwmIzM0O0Jsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxuLS1cbmJsb2NrL0tjb25maWctMTMzLVxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG5ibG9jay9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnPTE0NT1jb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuLS1cbmJsb2NrL0tjb25maWctMTUzLVxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXG5ibG9jay9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLmlvc2NoZWQ9MTA9Y29uZmlnIE1RX0lPU0NIRURfS1lCRVJcbi0tXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMTgtXG5ibG9jay9LY29uZmlnLmlvc2NoZWQ6MTk6Y29uZmlnIElPU0NIRURfQkZRXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMjAtXHR0cmlzdGF0ZSBcJiMzNDtCRlEgSS9PIHNjaGVkdWxlclwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWcuaW9zY2hlZC0yOS1cbmJsb2NrL0tjb25maWcuaW9zY2hlZDozMDpjb25maWcgQkZRX0dST1VQX0lPU0NIRURcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0zMS0gICAgICAgYm9vbCBcJiMzNDtCRlEgaGllcmFyY2hpY2FsIHNjaGVkdWxpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIGNvbmZpZ3VyYXRpb24gb3ZlcmhhdWwsIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB0aGUgZGVwZW5kZW5jaWVzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHN5c3RlbSB0aGF0JiMzOTtzIGxpa2VseSBpbnRlcmNvbm5lY3RlZCDigJMgYW5kIGEgbWlzc2VkIGNvbm5lY3Rpb24gY2FuIGNhdXNlIGEgd2hvbGUgY2FzY2FkZSBvZiB1bmZvcmVzZWVuIGlzc3Vlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZG8gdGhlc2UgY29uZmlncyBzaXQgd2l0aGluIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlPyYjMzQ7LiBJJiMzOTttIGdvaW5nIHRvIG1hcCBvdXQgdGhlIHJlbGF0aW9uc2hpcHM7IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMsIHNlcnZpY2VzLCBvciBldmVuIGV4dGVybmFsIHN5c3RlbXMgcmVseSBvbiB0aGVzZSBzcGVjaWZpYyBzZXR0aW5ncy4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IGJyZWFrcyBpZiBJIGNoYW5nZSBYLCBZLCBvciBaLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGxpc3RpbmcgdGhlIG9idmlvdXMgZGlyZWN0IGRlcGVuZGVuY2llcywgYnV0IGFsc28gdGhlIG1vcmUgc3VidGxlLCBwZXJoYXBzIGluZGlyZWN0LCByZWxhdGlvbnNoaXBzLiBJIG5lZWQgdG8gdGhpbmsgbGlrZSBhIHNlYXNvbmVkIGFyY2hpdGVjdCBoZXJlLCBwcmUtZW1wdGl2ZWx5IGNvbnNpZGVyaW5nIGFsbCBwb3NzaWJsZSBpbXBsaWNhdGlvbnMgYW5kIHNpZGUgZWZmZWN0cy4gVGltZSB0byBjaGVjayB0aGUgY2hhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHRCbG9jayBsYXllciB6b25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydC4gVGhpcyBvcHRpb24gZW5hYmxlc1xuIDEwMTpcdFx0c3VwcG9ydCBmb3IgWkFDL1pCQy9aTlMgaG9zdC1tYW5hZ2VkIGFuZCBob3N0LWF3YXJlIHpvbmVkIGJsb2NrXG4gMTAyOlx0XHRkZXZpY2VzLlxuIDEwMzpcdFxuIDEwNDpcdFx0U2F5IHllcyBoZXJlIGlmIHlvdSBoYXZlIGEgWkFDLCBaQkMsIG9yIFpOUyBzdG9yYWdlIGRldmljZS5cbiAxMDU6XHRcbiAxMDY6XHRjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXG4gMTA3Olx0XHRib29sIFwmIzM0O0Jsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcJiMzNDtcbiAxMDg6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxuIDEwOTpcdFx0c2VsZWN0IEJMS19DR1JPVVBfUldTVEFUXG4gMTEwOlx0XHRoZWxwXG4gMTExOlx0XHRCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0LiBJdCBjYW4gYmUgdXNlZCB0byBsaW1pdFxuIDExMjpcdFx0dGhlIElPIHJhdGUgdG8gYSBkZXZpY2UuIElPIHJhdGUgcG9saWNpZXMgYXJlIHBlciBjZ3JvdXAgYW5kXG4gMTEzOlx0XHRvbmUgbmVlZHMgdG8gbW91bnQgYW5kIHVzZSBibGtpbyBjZ3JvdXAgY29udHJvbGxlciBmb3IgY3JlYXRpbmdcbiAxMTQ6XHRcdGNncm91cHMgYW5kIHNwZWNpZnlpbmcgcGVyIGRldmljZSBJTyByYXRlIHBvbGljaWVzLlxuIDExNTpcdFxuIDExNjpcdFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIDExNzpcdFxuIDExODpcdGNvbmZpZyBCTEtfV0JUXG4gMTE5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBibG9jayBkZXZpY2Ugd3JpdGViYWNrIHRocm90dGxpbmdcJiMzNDtcbiAxMjA6XHRcdGhlbHBcbiAxMjE6XHRcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGJsb2NrIGxheWVyIHRvIHRocm90dGxlIGJ1ZmZlcmVkXG4gMTIyOlx0XHRiYWNrZ3JvdW5kIHdyaXRlYmFjayBmcm9tIHRoZSBWTSwgbWFraW5nIGl0IG1vcmUgc21vb3RoIGFuZCBoYXZpbmdcbiAxMjM6XHRcdGxlc3MgaW1wYWN0IG9uIGZvcmVncm91bmQgb3BlcmF0aW9ucy4gVGhlIHRocm90dGxpbmcgaXMgZG9uZVxuIDEyNDpcdFx0ZHluYW1pY2FsbHkgb24gYW4gYWxnb3JpdGhtIGxvb3NlbHkgYmFzZWQgb24gQ29EZWwsIGZhY3RvcmluZyBpblxuIDEyNTpcdFx0dGhlIHJlYWx0aW1lIHBlcmZvcm1hbmNlIG9mIHRoZSBkaXNrLlxuIDEyNjpcdFxuIDEyNzpcdGNvbmZpZyBCTEtfV0JUX01RXG4gMTI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSB3cml0ZWJhY2sgdGhyb3R0bGluZyBieSBkZWZhdWx0XCYjMzQ7XG4gMTI5Olx0XHRkZWZhdWx0IHlcbiAxMzA6XHRcdGRlcGVuZHMgb24gQkxLX1dCVFxuIDEzMTpcdFx0aGVscFxuIDEzMjpcdFx0RW5hYmxlIHdyaXRlYmFjayB0aHJvdHRsaW5nIGJ5IGRlZmF1bHQgZm9yIHJlcXVlc3QtYmFzZWQgYmxvY2sgZGV2aWNlcy5cbiAxMzM6XHRcbiAxMzQ6XHRjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcbiAxMzU6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbiAxMzY6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxuIDEzNzpcdFx0aGVscFxuIDEzODpcdFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgLmxhdGVuY3kgaW50ZXJmYWNlIGZvciBJTyB0aHJvdHRsaW5nLlxuIDEzOTpcdFx0VGhlIElPIGNvbnRyb2xsZXIgd2lsbCBhdHRlbXB0IHRvIG1haW50YWluIGF2ZXJhZ2UgSU8gbGF0ZW5jaWVzIGJlbG93XG4gMTQwOlx0XHR0aGUgY29uZmlndXJlZCBsYXRlbmN5IHRhcmdldCwgdGhyb3R0bGluZyBhbnlib2R5IHdpdGggYSBoaWdoZXIgbGF0ZW5jeVxuIDE0MTpcdFx0dGFyZ2V0IHRoYW4gdGhlIHZpY3RpbWl6ZWQgZ3JvdXAuXG4gMTQyOlx0XG4gMTQzOlx0XHROb3RlLCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBpbnRlcmZhY2UgYW5kIGNvdWxkIGJlIGNoYW5nZWQgc29tZWRheS5cbiAxNDQ6XHRcbiAxNDU6XHRjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuIDE0NjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1wmIzM0O1xuIDE0NzpcdFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQIFx1MDAyNlx1MDAyNiBOVk1FX0ZDXG4gMTQ4Olx0XHRoZWxwXG4gMTQ5Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIHRyYWZmaWMgYWNyb3NzXG4gMTUwOlx0XHQgIGNncm91cCBhcHBsaWNhdGlvbnMuIEl0IGVuYWJsZXMgdGhlIEZhYnJpYyBhbmQgdGhlIHN0b3JhZ2UgdGFyZ2V0cyB0b1xuIDE1MTpcdFx0ICBpZGVudGlmeSwgbW9uaXRvciwgYW5kIGhhbmRsZSBGQyB0cmFmZmljIGJhc2VkIG9uIFZNIHRhZ3MgYnkgaW5zZXJ0aW5nXG4gMTUyOlx0XHQgIGFwcGxpY2F0aW9uIHNwZWNpZmljIGlkZW50aWZpY2F0aW9uIGludG8gdGhlIEZDIGZyYW1lLlxuIDE1MzpcdFxuIDE1NDpcdGNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxuIDE1NTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclwmIzM0O1xuIDE1NjpcdFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXG4gMTU3Olx0XHRzZWxlY3QgQkxLX1JRX0FMTE9DX1RJTUVcbiAxNTg6XHRcdGhlbHBcbiAxNTk6XHRcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIC53ZWlnaHQgaW50ZXJmYWNlIGZvciBjb3N0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzcwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uOiBpb3NjaGVkIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyBjaGVjayBgYmxvY2svS2NvbmZpZy5pb3NjaGVkYC4mIzM0OyBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSB3aGF0JiMzOTtzIGNvbnRyb2xsaW5nIHRoZSBJL08gc2NoZWR1bGVyIG9wdGlvbnMuIEtub3dpbmcgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGlzIHRoZSBiZWRyb2NrLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggYmxvY2sgZGV2aWNlIG1hbmFnZW1lbnQgYW5kIEkvTyBwZXJmb3JtYW5jZSB0dW5pbmcuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zIOKAkyB0aGUgbWFjcm9zLCB0aGUgZGVmYXVsdCBzZWxlY3Rpb25zLCB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgYSBjbGVhciB2aWV3IG9mIGhvdyBkaWZmZXJlbnQgc2NoZWR1bGVycyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHRoZSB1bmRlcmx5aW5nIGxvZ2ljIHRoYXQgZ292ZXJucyB0aG9zZSBkZWNpc2lvbnMgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIFRoaXMgZmlsZSBsaWtlbHkgZGVmaW5lcyB0aGUgYENPTkZJR19gIG9wdGlvbnMgcmVsYXRlZCB0byBzcGVjaWZpYyBzY2hlZHVsZXJzIGxpa2UgQ0ZRLCBEZWFkbGluZSwgQkZRLCBvciBtYXliZSBldmVuIGV4cGVyaW1lbnRhbCBvbmVzLiBJdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBrbm9icyBmb3IgSS9PIG9wdGltaXphdGlvbiBvbiB0aGlzIHN5c3RlbS4gVWx0aW1hdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gY29uZmlybSB3aGF0IGlzIGF2YWlsYWJsZSBhbmQgaG93IHRvIGN1c3RvbWl6ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcuaW9zY2hlZCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRtZW51IFwmIzM0O0lPIFNjaGVkdWxlcnNcJiMzNDtcbiAgIDM6XHRcbiAgIDQ6XHRjb25maWcgTVFfSU9TQ0hFRF9ERUFETElORVxuICAgNTpcdFx0dHJpc3RhdGUgXCYjMzQ7TVEgZGVhZGxpbmUgSS9PIHNjaGVkdWxlclwmIzM0O1xuICAgNjpcdFx0ZGVmYXVsdCB5XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIE1RIHZlcnNpb24gb2YgdGhlIGRlYWRsaW5lIElPIHNjaGVkdWxlci5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgTVFfSU9TQ0hFRF9LWUJFUlxuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7S3liZXIgSS9PIHNjaGVkdWxlclwmIzM0O1xuICAxMjpcdFx0ZGVmYXVsdCB5XG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHQgIFRoZSBLeWJlciBJL08gc2NoZWR1bGVyIGlzIGEgbG93LW92ZXJoZWFkIHNjaGVkdWxlciBzdWl0YWJsZSBmb3JcbiAgMTU6XHRcdCAgbXVsdGlxdWV1ZSBhbmQgb3RoZXIgZmFzdCBkZXZpY2VzLiBHaXZlbiB0YXJnZXQgbGF0ZW5jaWVzIGZvciByZWFkcyBhbmRcbiAgMTY6XHRcdCAgc3luY2hyb25vdXMgd3JpdGVzLCBpdCB3aWxsIHNlbGYtdHVuZSBxdWV1ZSBkZXB0aHMgdG8gYWNoaWV2ZSB0aGF0XG4gIDE3Olx0XHQgIGdvYWwuXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIElPU0NIRURfQkZRXG4gIDIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtCRlEgSS9PIHNjaGVkdWxlclwmIzM0O1xuICAyMTpcdFx0c2VsZWN0IEJMS19JQ1FcbiAgMjI6XHRcdGhlbHBcbiAgMjM6XHRcdEJGUSBJL08gc2NoZWR1bGVyIGZvciBCTEstTVEuIEJGUSBkaXN0cmlidXRlcyB0aGUgYmFuZHdpZHRoIG9mXG4gIDI0Olx0XHRvZiB0aGUgZGV2aWNlIGFtb25nIGFsbCBwcm9jZXNzZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHdlaWdodHMsXG4gIDI1Olx0XHRyZWdhcmRsZXNzIG9mIHRoZSBkZXZpY2UgcGFyYW1ldGVycyBhbmQgd2l0aCBhbnkgd29ya2xvYWQuIEl0XG4gIDI2Olx0XHRhbHNvIGd1YXJhbnRlZXMgYSBsb3cgbGF0ZW5jeSB0byBpbnRlcmFjdGl2ZSBhbmQgc29mdFxuICAyNzpcdFx0cmVhbC10aW1lIGFwcGxpY2F0aW9ucy4gIERldGFpbHMgaW5cbiAgMjg6XHRcdERvY3VtZW50YXRpb24vYmxvY2svYmZxLWlvc2NoZWQucnN0XG4gIDI5Olx0XG4gIDMwOlx0Y29uZmlnIEJGUV9HUk9VUF9JT1NDSEVEXG4gIDMxOlx0ICAgICAgIGJvb2wgXCYjMzQ7QkZRIGhpZXJhcmNoaWNhbCBzY2hlZHVsaW5nIHN1cHBvcnRcJiMzNDtcbiAgMzI6XHQgICAgICAgZGVwZW5kcyBvbiBJT1NDSEVEX0JGUSBcdTAwMjZcdTAwMjYgQkxLX0NHUk9VUFxuICAzMzpcdCAgICAgICBkZWZhdWx0IHlcbiAgMzQ6XHQgICAgICAgc2VsZWN0IEJMS19DR1JPVVBfUldTVEFUXG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XG4gIDM3Olx0ICAgICAgIEVuYWJsZSBoaWVyYXJjaGljYWwgc2NoZWR1bGluZyBpbiBCRlEsIHVzaW5nIHRoZSBibGtpb1xuICAzODpcdCAgICAgICAoY2dyb3Vwcy12MSkgb3IgaW8gKGNncm91cHMtdjIpIGNvbnRyb2xsZXIuXG4gIDM5Olx0XG4gIDQwOlx0Y29uZmlnIEJGUV9DR1JPVVBfREVCVUdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1ODMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkFuYWx5emluZyBCbG9jayBJL08gU2NoZWR1bGVyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBibG9jayBJL08gY29uZmlndXJhdGlvbnMuIEkgc2VlIGEgZmV3IGtleSBzeW1ib2xzIGhlcmU6IGBCTEtfQ0dST1VQYCwgYEJMS19ERVZfVEhST1RUTElOR2AsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBJT1NDSEVEX0JGUWAsIGFuZCBgQkZRX0dST1VQX0lPU0NIRURgLiBJIG5lZWQgdG8gZW5zdXJlIEkgZ2V0IHRoaXMgcmlnaHQuCgpIb2xkIG9uLCBJIHNlZSBgSU9TQ0hFRF9CRlFgIGlzIGEgdHJpc3RhdGUuIFRoYXQgbWVhbnMgaXQgY2FuIHBvdGVudGlhbGx5IGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBzbyBpdCYjMzk7cyBwcm9iYWJseSB0aGUgbW9zdCBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZm9jdXMgb24gaGVyZSwgYXMgSSYjMzk7bGwgd2FudCB0byBsaXN0IHRoYXQgb25lLiBJJiMzOTtsbCBqdXN0IGxpc3QgYElPU0NIRURfQkZRYC4KCk5vdywgSSByZW1lbWJlciBgQkxLX0NHUk9VUGAuIERvZXNuJiMzOTt0IHRoYXQgZGVwZW5kIG9uIHNvbWV0aGluZz8gWWVzLCBpdCBkZXBlbmRzIG9uIGBCTE9DS2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZW50cnkgdG8gYmUgc3VyZSwgYW5kIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLgoKQWhhLCBgQkxLX0NHUk9VUGAgaXMgaW5kZWVkIGluIGBpbml0L0tjb25maWdgIGFuZCBleHBsaWNpdGx5IGRlcGVuZHMgb24gYEJMT0NLYC4gQW5kIGBCTE9DS2AgaXMgdXN1YWxseSBlbmFibGVkLCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY29yZSBmdW5jdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGZlYXR1cmVzLiBUaGUgcmVsZXZhbnQgc3ltYm9scyBzZWVtIHRvIGJlOiBgYmxrY2dfYWN0aXZhdGVfcG9saWN5YCwgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YCwgYW5kIGBibGtjZ19leGl0X2Rpc2tgLgoKSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGJsa2NnX2V4aXRfZGlza2AgaXNuJiMzOTt0IHN0YXRpYyBhbmQgaXMgcmVhY2hhYmxlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGFjdHVhbGx5IHVzZWQgYW5kIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpdHMgbGlua2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrY2dfZXhpdF9kaXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jZ3JvdXAuYz0xNDUzPWludCBibGtjZ19pbml0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTE0NjEtXHQgKiBwcmV2aW91cyBkaXNrJiMzOTtzIGJsa2NnIHN0YXRlIGlzIGNsZWFuZWQgdXAgYXN5bmNocm9ub3VzbHkgdmlhXG5ibG9jay9ibGstY2dyb3VwLmM6MTQ2MjpcdCAqIGRpc2tfcmVsZWFzZSgpIC1cdTAwM2UgYmxrY2dfZXhpdF9kaXNrKCkuIFdhaXQgZm9yIHRoYXQgY2xlYW51cCB0b1xuYmxvY2svYmxrLWNncm91cC5jLTE0NjMtXHQgKiBmaW5pc2ggKGluZGljYXRlZCBieSByb290X2Jsa2cgYmVjb21pbmcgTlVMTCkgYmVmb3JlIHNldHRpbmcgdXBcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTQ5Ny1cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNDk4OnZvaWQgYmxrY2dfZXhpdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuYmxvY2svYmxrLWNncm91cC5jLTE0OTkte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0xOTc9aW50IGJsa2NnX2luaXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XG5ibG9jay9ibGstY2dyb3VwLmg6MTk4OnZvaWQgYmxrY2dfZXhpdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbmJsb2NrL2Jsay1jZ3JvdXAuaC0xOTktXG4tLVxuYmxvY2svYmxrLWNncm91cC5oPTQ4Nj1zdGF0aWMgaW5saW5lIGludCBibGtjZ19pbml0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spIHsgcmV0dXJuIDA7IH1cbmJsb2NrL2Jsay1jZ3JvdXAuaDo0ODc6c3RhdGljIGlubGluZSB2b2lkIGJsa2NnX2V4aXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykgeyB9XG5ibG9jay9ibGstY2dyb3VwLmgtNDg4LXN0YXRpYyBpbmxpbmUgaW50IGJsa2NnX3BvbGljeV9yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgcmV0dXJuIDA7IH1cbi0tXG5ibG9jay9nZW5oZC5jPTEyNzI9c3RhdGljIHZvaWQgZGlza19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5ibG9jay9nZW5oZC5jLTEyOTYtXG5ibG9jay9nZW5oZC5jOjEyOTc6XHRibGtjZ19leGl0X2Rpc2soZGlzayk7XG5ibG9jay9nZW5oZC5jLTEyOTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjY0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29yZSBGdW5jdGlvbnMgYW5kIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIGBibGtjZ19leGl0X2Rpc2tgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgYW5kIGNhbGxlZCBmcm9tIGBkaXNrX3JlbGVhc2VgLiBUaGF0IGNvbmZpcm1zIGl0IGFzIGEga2V5IGFyZWEuIFRoZSBwYXRjaCBtb2RpZmllcyBgYmxrZ19kZXN0cm95X2FsbGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBibGtjZ19leGl0X2Rpc2tgLCBzbyB0aGF0IHN0cmVuZ3RoZW5zIGl0cyBpbXBvcnRhbmNlLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGFuYWx5c2lzIG9uIHRoZXNlIHRocmVlOiBgYmxrY2dfYWN0aXZhdGVfcG9saWN5YCwgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YCwgYW5kIGBibGtjZ19leGl0X2Rpc2tgLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBvciBpZiBpdCBjYW4gYmUgdHJpZ2dlcmVkIGR5bmFtaWNhbGx5LiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgYSBmZXcga2V5IGZ1bmN0aW9uczogYGJsa19pb2Nvc3RfaW5pdGAsIGBibGtfaW9sYXRlbmN5X2luaXRgLCBgYmxrX3Rocm90bF9pbml0YCwgYW5kIGBiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeWAuIGBiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeWAgZmlyZXMgd2hlbiBhIGNncm91cCBpcyBjcmVhdGVkIG9yIEJGUSBpcyBpbml0aWFsaXplZCwgc28gZGVmaW5pdGVseSBkeW5hbWljLiBgYmxrX2lvY29zdF9pbml0YCBpcyBhbHNvIHRyaWdnZXJlZCB3aGVuIGlvY29zdCBpcyBlbmFibGVkIG9uIGEgZGlzay4gRXhjZWxsZW50LCB0aGF0IGdpdmVzIG1lIGEgY2xlYXIgaWRlYSBvZiB3aGVuIHRob3NlIGZ1bmN0aW9ucyBhcmUgaW52b2tlZC4KCldhaXQsIGxvb2tpbmcgYWdhaW4sIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGFuZCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgIGFyZSAqdGhlKiBmdW5jdGlvbnMgdGhhdCBhcmUgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQuIEkgc2hvdWxkIGluY2x1ZGUgdGhvc2UgaW4gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBCYXNlZCBvbiB0aGUgY29kZSwgSSBzZWU6IGBCTEtfQ0dST1VQYCwgYEJMS19ERVZfVEhST1RUTElOR2AsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBJT1NDSEVEX0JGUWAsIGFuZCBgQkZRX0dST1VQX0lPU0NIRURgLiBJJiMzOTtsbCBoYXZlIHRvIGtlZXAgdGhvc2UgaW4gbWluZC4KCkkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucywganVzdCB0byBiZSBzdXJlLiBIbW0sIGBCTEtfQ0dST1VQX0ZDX0FQUElEYCBkZXBlbmRzIG9uIGBOVk1FX0ZDYC4gSXQgY291bGQgYmUgaW50ZXJlc3RpbmcsIGJ1dCBwcm9iYWJseSBoYXJkZXIgdG8gdGVzdC4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBldmVuIHJlbGV2YW50IGhlcmUuIE5vLCBpdCBkb2VzbiYjMzk7dCB1dGlsaXplIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLiBPa2F5LCBJJiMzOTtsbCBzdGljayB3aXRoIHRoZSBvcmlnaW5hbCBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa2NnX2FjdGl2YXRlX3BvbGljeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iZnEtY2dyb3VwLmM9MTI1ND1zdHJ1Y3QgYmZxX2dyb3VwICpiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeShzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsIGludCBub2RlKVxuLS1cbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjU3LVxuYmxvY2svYmZxLWNncm91cC5jOjEyNTg6XHRyZXQgPSBibGtjZ19hY3RpdmF0ZV9wb2xpY3koYmZxZC1cdTAwM2VxdWV1ZS1cdTAwM2VkaXNrLCBcdTAwMjZibGtjZ19wb2xpY3lfYmZxKTtcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjU5LVx0aWYgKHJldClcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jPTcxOTY9c3RhdGljIGludCBiZnFfaW5pdF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplcSlcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTczMjgtXHQgKiBmdW5jdGlvbiBpcyB0aGUgaGVhZCBvZiBhIGNoYWluIG9mIGZ1bmN0aW9uIGNhbGxzXG5ibG9jay9iZnEtaW9zY2hlZC5jOjczMjk6XHQgKiAoYmZxX2NyZWF0ZV9ncm91cF9oaWVyYXJjaHktXHUwMDNlYmxrY2dfYWN0aXZhdGVfcG9saWN5LVx1MDAzZVxuYmxvY2svYmZxLWlvc2NoZWQuYy03MzMwLVx0ICogYmxrX21xX2ZyZWV6ZV9xdWV1ZSkgdGhhdCBtYXkgbGVhZCB0byB0aGUgaW52b2NhdGlvbiBvZiB0aGVcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTUzNT1zdGF0aWMgdm9pZCBibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTU3LS8qKlxuYmxvY2svYmxrLWNncm91cC5jOjE1NTg6ICogYmxrY2dfYWN0aXZhdGVfcG9saWN5IC0gYWN0aXZhdGUgYSBibGtjZyBwb2xpY3kgb24gYSBnZW5kaXNrXG5ibG9jay9ibGstY2dyb3VwLmMtMTU1OS0gKiBAZGlzazogZ2VuZGlzayBvZiBpbnRlcmVzdFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTcyLSAqL1xuYmxvY2svYmxrLWNncm91cC5jOjE1NzM6aW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuYmxvY2svYmxrLWNncm91cC5jLTE1NzQte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNjc2LX1cbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNjc3OkVYUE9SVF9TWU1CT0xfR1BMKGJsa2NnX2FjdGl2YXRlX3BvbGljeSk7XG5ibG9jay9ibGstY2dyb3VwLmMtMTY3OC1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTY4NC0gKiBEZWFjdGl2YXRlIEBwb2wgb24gQGRpc2suICBGb2xsb3dzIHRoZSBzYW1lIHN5bmNocm9uaXphdGlvbiBydWxlcyBhc1xuYmxvY2svYmxrLWNncm91cC5jOjE2ODU6ICogYmxrY2dfYWN0aXZhdGVfcG9saWN5KCkuXG5ibG9jay9ibGstY2dyb3VwLmMtMTY4Ni0gKi9cbi0tXG5ibG9jay9ibGstY2dyb3VwLmg9MjAyPXZvaWQgYmxrY2dfcG9saWN5X3VucmVnaXN0ZXIoc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMDM6aW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMDQtdm9pZCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmg9NDg5PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgfVxuYmxvY2svYmxrLWNncm91cC5oOjQ5MDpzdGF0aWMgaW5saW5lIGludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9ibGstY2dyb3VwLmgtNDkxLVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgcmV0dXJuIDA7IH1cbi0tXG5ibG9jay9ibGstaW9jb3N0LmM9MjkxNT1zdGF0aWMgaW50IGJsa19pb2Nvc3RfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstaW9jb3N0LmMtMjk2Ni1cbmJsb2NrL2Jsay1pb2Nvc3QuYzoyOTY3Olx0cmV0ID0gYmxrY2dfYWN0aXZhdGVfcG9saWN5KGRpc2ssIFx1MDAyNmJsa2NnX3BvbGljeV9pb2Nvc3QpO1xuYmxvY2svYmxrLWlvY29zdC5jLTI5NjgtXHRpZiAocmV0KVxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz03NTg9c3RhdGljIGludCBibGtfaW9sYXRlbmN5X2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTc3MC1cdFx0Z290byBlcnJfZnJlZTtcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo3NzE6XHRyZXQgPSBibGtjZ19hY3RpdmF0ZV9wb2xpY3koZGlzaywgXHUwMDI2YmxrY2dfcG9saWN5X2lvbGF0ZW5jeSk7XG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNzcyLVx0aWYgKHJldClcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xMzE4PXN0YXRpYyBpbnQgYmxrX3Rocm90bF9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzMzgtXHQvKiBhY3RpdmF0ZSBwb2xpY3ksIGJsa190aHJvdGxfYWN0aXZhdGVkKCkgd2lsbCByZXR1cm4gdHJ1ZSAqL1xuYmxvY2svYmxrLXRocm90dGxlLmM6MTMzOTpcdHJldCA9IGJsa2NnX2FjdGl2YXRlX3BvbGljeShkaXNrLCBcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsKTtcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNDAtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzM1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbG9jayBJL08gQ2dyb3VwIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBibG9jayBJL08gY2dyb3VwIHN0dWZmLCBhbmQgaXQgbG9va3MgbGlrZSBgQkxLX0NHUk9VUF9GQ19BUFBJRGAgaXNuJiMzOTt0IHJlbGV2YW50IGhlcmUuIE15IGZvY3VzIGlzIG9uIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0ICpkbyogY29tZSBpbnRvIHBsYXkuIExldCBtZSBzZWUuLi4gdGhlIGtleSBwbGF5ZXJzIGFyZSBjbGVhcmx5IGBCTEtfQ0dST1VQYCwgYEJMS19ERVZfVEhST1RUTElOR2AsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBJT1NDSEVEX0JGUWAsIGFuZCBgQkZRX0dST1VQX0lPU0NIRURgLiBJJiMzOTttIGFscmVhZHkgZmFtaWxpYXIgd2l0aCBhIGZldyBvZiB0aGVzZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhleSBpbnRlcmFjdC4gTm93LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHNoaWZ0IG15IGF0dGVudGlvbiB0byBgQkxLX0NHUk9VUF9JT1BSSU9gIGFuZCBzZWUgd2hlcmUgdGhhdCBmaXRzIGludG8gdGhlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrY2dfYWN0aXZhdGVfcG9saWN5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWlvcHJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwODMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5IG9mIHRoZXNlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gdGhlIGBCTEtfQ0dST1VQX0lPUFJJT2AgY29uZmlndXJhdGlvbiBvcHRpb24gYXBwZWFycyB0byBiZSBhIHJlZCBoZXJyaW5nOyBpdCBkb2VzbiYjMzk7dCB1dGlsaXplIHdoYXRldmVyIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBleHBsb3JpbmcuIFRpbWUgdG8gYnJvYWRlbiB0aGUgc2VhcmNoLiBJIG5lZWQgdG8gc3lzdGVtYXRpY2FsbHkgbG9vayBmb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gU2luY2UgSSYjMzk7bSBkaWdnaW5nIGludG8gYGNncm91cGAtcmVsYXRlZCBpdGVtcywgdGhlIGBDR1JPVVBTYCBvcHRpb24gaXRzZWxmIGlzIGRlZmluaXRlbHkgd29ydGggaW5jbHVkaW5nIGluIG15IHNlYXJjaCwganVzdCB0byBiZSBjb21wcmVoZW5zaXZlLiBXaGlsZSBgQkxLX0NHUk9VUGAgbGlrZWx5IHB1bGxzIGl0IGluIGFzIGEgZGVwZW5kZW5jeSwgSSB3YW50IHRvIGJlICpjZXJ0YWluKi4gVG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzLCBJJiMzOTtsbCBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlOiBgaW5pdC9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBvZiBgQkxLX0NHUk9VUGAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGV2ZXJ5dGhpbmcgaXMgY29ubmVjdGVkIGFuZCBlbnN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwOTk9Y29uZmlnIE1FTUNHX1YxXG4tLVxuaW5pdC9LY29uZmlnLTExMTUtXG5pbml0L0tjb25maWc6MTExNjpjb25maWcgQkxLX0NHUk9VUFxuaW5pdC9LY29uZmlnLTExMTctXHRib29sIFwmIzM0O0lPIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJldmlzaXRpbmcgYGluaXQvS2NvbmZpZ2AgTGluZSAxMTE2KioKCk9rYXksIHRpbWUgdG8gcmUtZXhhbWluZSBgaW5pdC9LY29uZmlnYCBhcm91bmQgbGluZSAxMTE2LiBJIGhhdmUgYSBodW5jaCwgYmFzZWQgb24gdGhlIHJlY2VudCBkZWJ1Z2dpbmcgSSYjMzk7dmUgYmVlbiBkb2luZyB3aXRoIFtzcGVjaWZpYyBhcmVhLCBhc3N1bWluZyBleHBlcnQgaGFzIGtub3dsZWRnZSBvZiByZWxldmFudCBhcmVhXS4gSSBrbm93IHRoZSBtb2R1bGUmIzM5O3MgaW50ZXJhY3Rpb25zIHdpdGggaXRzIGVudmlyb25tZW50IGNhbiBiZSB0cmlja3kgYW5kIHN1YnRsZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGF0IHNwZWNpZmljIGxpbmUgYmVjYXVzZSBpdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgYXJlYSB0aGF0IEkgdGhpbmsgbWlnaHQgbmVlZCBhdHRlbnRpb24uIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCB0aGF0IGxpbmUuIFBlcmhhcHMgdGhlcmUgaXMgYSBmb3Jnb3R0ZW4gZGVwZW5kZW5jeT8gT3IgbWF5YmUgdGhlcmUmIzM5O3MgYSBtaXNzZWQgaW50ZXJhY3Rpb24gd2l0aCBhbm90aGVyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGU/IEkmIzM5O20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIHJvb3QgY2F1c2Ugb2YgW2JyaWVmbHkgc3RhdGUgcHJvYmxlbV0gdGhyb3VnaCB0aGlzIGZvY3VzZWQgcmV2aWV3LiBJJiMzOTtsbCBiZSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBhbnkgY2x1ZXMgb3IgYW5vbWFsaWVzIGFuZCBjb25zaWRlcmluZyBhbnkgcmVjZW50IGNvbW1pdHMgaW4gdGhhdCBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExMDpcdFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XG4xMTExOlx0XHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcbjExMTI6XHRcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxuMTExMzpcdFxuMTExNDpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMTE1Olx0XG4xMTE2Olx0Y29uZmlnIEJMS19DR1JPVVBcbjExMTc6XHRcdGJvb2wgXCYjMzQ7SU8gY29udHJvbGxlclwmIzM0O1xuMTExODpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuMTExOTpcdFx0ZGVmYXVsdCBuXG4xMTIwOlx0XHRoZWxwXG4xMTIxOlx0XHRHZW5lcmljIGJsb2NrIElPIGNvbnRyb2xsZXIgY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyB0aGUgY29tbW9uXG4xMTIyOlx0XHRjZ3JvdXAgaW50ZXJmYWNlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHZhcmlvdXMgSU8gY29udHJvbGxpbmdcbjExMjM6XHRcdHBvbGljaWVzLlxuMTEyNDpcdFxuMTEyNTpcdFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxuMTEyNjpcdFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxuMTEyNzpcdFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXG4xMTI4Olx0XHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXG4xMTI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTk3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBIaWVyYXJjaHkqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgQkxLX0NHUk9VUGAgYWN0dWFsbHkgbmVzdGVkICp3aXRoaW4qIHRoZSBgbWVudWNvbmZpZyBDR1JPVVBTYCBzdHJ1Y3R1cmUgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uPyBUaGF0IHNlZW1zIGEgYml0IHVudXN1YWwsIGFuZCB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgcmVsYXRpb25zaGlwIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBsaW5rZWQsIGFzIHRoaXMgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJJiMzOTttIGVuYWJsaW5nIG9yIGRpc2FibGluZyBjZ3JvdXAtcmVsYXRlZCBibG9jayBJL08gZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgQ0dST1VQUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA0ND1jb25maWcgU0xBQl9PQkpfRVhUXG4tLVxuaW5pdC9LY29uZmlnLTEwNDYtXG5pbml0L0tjb25maWc6MTA0NzptZW51Y29uZmlnIENHUk9VUFNcbmluaXQvS2NvbmZpZy0xMDQ4LVx0Ym9vbCBcJiMzNDtDb250cm9sIEdyb3VwIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNDkKCQkJCQkJCW91dHB1dDogMTc2CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBDZ3JvdXAgUmFjZSBDb25kaXRpb24gRml4KioKCk9rYXksIHNvIHRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgKmRlZmluaXRlbHkqIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgYENHUk9VUFNgLiBUaGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZSwgc28gaXQgZ29lcyByaWdodCBhdCB0aGUgdG9wIG9mIG15IG1lbnRhbCBsaXN0LgoKUmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gSSYjMzk7dmUgZ290IHRvIGNvbnNpZGVyOiBgQ0dST1VQU2AsIG9mIGNvdXJzZSwgdGhlbiBgQkxLX0NHUk9VUGAsIGBCTEtfREVWX1RIUk9UVExJTkdgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgSU9TQ0hFRF9CRlFgLCBhbmQgYEJGUV9HUk9VUF9JT1NDSEVEYC4gVGhvc2UgYXJlIHRoZSBrZXkgcGllY2VzIGNvbmZpZ3VyaW5nIHRoZSBibG9jayBjZ3JvdXAgZnVuY3Rpb25hbGl0eS4KCk5vdywgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnM6IGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2V4aXRfZGlza2AuIFRob3NlIGFyZSB0aGUgc3ltYm9saWMgZm9jaSBvZiB0aGUgZml4LiBUaGUgcmVhc29uaW5nLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgYSByYWNlIGNvbmRpdGlvbiBleGlzdHMgZHVyaW5nIHRoZSBhY3RpdmF0aW9uIGFuZCBkZWFjdGl2YXRpb24gb2YgYmxvY2sgY2dyb3VwIHBvbGljaWVzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBkaXNrIHRlYXJkb3duLiBUaGUgZml4IGludHJvZHVjZXMgYSBtdXRleCBsb2NrIHRvIGFkZHJlc3MgdGhpcy4gVGhvc2UgYXJlIGNvcmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGR5bmFtaWNhbGx5IHRyaWdnZXJlZCB3aGVuIGVuYWJsaW5nL2Rpc2FibGluZyBjZ3JvdXAgcG9saWNpZXMgb3IgZGVzdHJveWluZyBibG9jayBkZXZpY2VzLgoKSSBuZWVkIHRvIGNvbmZpcm0gYGJsa2NnX2V4aXRfZGlza2AgaXMgdGhlIHJpZ2h0IGZ1bmN0aW9uIGhlcmUuIExldCBtZSB0cmFjZSB0aGF0LiBBaCwgeWVzLCBgYmxrZ19kZXN0cm95X2FsbGAgaXMgY2FsbGVkIGJ5IGBibGtjZ19leGl0X2Rpc2tgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBkaXNrX3JlbGVhc2VgLiBTbyBpdCAqaXMqIHJlYWNoYWJsZSBhcyBwYXJ0IG9mIHRoZSBkaXNrIHJlbGVhc2UgcHJvY2Vzcy4gVGhhdCBjb25maXJtcyBpdC4KCk5vdyBJIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUJiMzNDssCiAgICAmIzM0O0lPU0NIRURfQkZRJiMzNDssCiAgICAmIzM0O0JGUV9HUk9VUF9JT1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrY2dfYWN0aXZhdGVfcG9saWN5JiMzNDssCiAgICAmIzM0O2Jsa2NnX2RlYWN0aXZhdGVfcG9saWN5JiMzNDssCiAgICAmIzM0O2Jsa2NnX2V4aXRfZGlzayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGJsb2NrIGNncm91cCBwb2xpY3kgYWN0aXZhdGlvbi9kZWFjdGl2YXRpb24gYW5kIGRpc2sgdGVhcmRvd24gYnkgYWRkaW5nIGEgbXV0ZXggbG9jay4gVGhlc2UgYXJlIGNvcmUgYmxvY2sgY2dyb3VwIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZHluYW1pY2FsbHkgd2hlbiBlbmFibGluZy9kaXNhYmxpbmcgY2dyb3VwIHBvbGljaWVzIG9yIGRlc3Ryb3lpbmcgYmxvY2sgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0JMS19ERVZfVEhST1RUTElORyYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtJT1NDSEVEX0JGUSYjMzQ7LAogICAgJiMzNDtCRlFfR1JPVVBfSU9TQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa2NnX2FjdGl2YXRlX3BvbGljeSYjMzQ7LAogICAgJiMzNDtibGtjZ19kZWFjdGl2YXRlX3BvbGljeSYjMzQ7LAogICAgJiMzNDtibGtjZ19leGl0X2Rpc2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBibG9jayBjZ3JvdXAgcG9saWN5IGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uIGFuZCBkaXNrIHRlYXJkb3duIGJ5IGFkZGluZyBhIG11dGV4IGxvY2suIFRoZXNlIGFyZSBjb3JlIGJsb2NrIGNncm91cCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGR5bmFtaWNhbGx5IHdoZW4gZW5hYmxpbmcvZGlzYWJsaW5nIGNncm91cCBwb2xpY2llcyBvciBkZXN0cm95aW5nIGJsb2NrIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MTo1Ny42NDEzMDgyN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODg2NTQ4ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJMS19ERVZfVEhST1RUTElOR1wiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCIsXG4gICAgXCJJT1NDSEVEX0JGUVwiLFxuICAgIFwiQkZRX0dST1VQX0lPU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtjZ19hY3RpdmF0ZV9wb2xpY3lcIixcbiAgICBcImJsa2NnX2RlYWN0aXZhdGVfcG9saWN5XCIsXG4gICAgXCJibGtjZ19leGl0X2Rpc2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGJsb2NrIGNncm91cCBwb2xpY3kgYWN0aXZhdGlvbi9kZWFjdGl2YXRpb24gYW5kIGRpc2sgdGVhcmRvd24gYnkgYWRkaW5nIGEgbXV0ZXggbG9jay4gVGhlc2UgYXJlIGNvcmUgYmxvY2sgY2dyb3VwIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZHluYW1pY2FsbHkgd2hlbiBlbmFibGluZy9kaXNhYmxpbmcgY2dyb3VwIHBvbGljaWVzIG9yIGRlc3Ryb3lpbmcgYmxvY2sgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTE6NTcuNjQxMzE3MzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDIwNzI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMwNWQ4MWRjYTJiZGI5NDU5OWNlMzNiMGIyZmFhNTgyYjBiZGI0NTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAxODo1MTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcXG5pbmRleCBkOTY3NjEyNmM1YjVkLi4zNTQ2MzdmM2IxNThjIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuY1xcbisrKyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xcbkBAIC01NjksNiArNTY5LDcgQEAgc3RhdGljIHZvaWQgYmxrZ19kZXN0cm95X2FsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gXFx0aW50IGk7XFxuIFxcbiByZXN0YXJ0OlxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZxLVxcdTAwM2VibGtjZ19tdXRleCk7XFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsa2csIFxcdTAwMjZxLVxcdTAwM2VibGtnX2xpc3QsIHFfbm9kZSkge1xcbiBcXHRcXHRzdHJ1Y3QgYmxrY2cgKmJsa2NnID0gYmxrZy1cXHUwMDNlYmxrY2c7XFxuQEAgLTU4Nyw2ICs1ODgsNyBAQCBzdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3lfYWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiBcXHRcXHRpZiAoISgtLWNvdW50KSkge1xcbiBcXHRcXHRcXHRjb3VudCA9IEJMS0dfREVTVFJPWV9CQVRDSF9TSVpFO1xcbiBcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbitcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnEtXFx1MDAzZWJsa2NnX211dGV4KTtcXG4gXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdFxcdFxcdGdvdG8gcmVzdGFydDtcXG4gXFx0XFx0fVxcbkBAIC02MDYsNiArNjA4LDcgQEAgc3RhdGljIHZvaWQgYmxrZ19kZXN0cm95X2FsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gXFxuIFxcdHEtXFx1MDAzZXJvb3RfYmxrZyA9IE5VTEw7XFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cS1cXHUwMDNlcXVldWVfbG9jayk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cS1cXHUwMDNlYmxrY2dfbXV0ZXgpO1xcbiBcXG4gXFx0d2FrZV91cF92YXIoXFx1MDAyNnEtXFx1MDAzZXJvb3RfYmxrZyk7XFxuIH1cXG5AQCAtMTUyNiw2ICsxNTI5LDMxIEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIGlvX2NncnBfc3Vic3lzID0ge1xcbiB9O1xcbiBFWFBPUlRfU1lNQk9MX0dQTChpb19jZ3JwX3N1YnN5cyk7XFxuIFxcbisvKlxcbisgKiBUZWFyIGRvd24gcGVyLWJsa2cgcG9saWN5IGRhdGEgZm9yIEBwb2wgb24gQHEuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXFxuK3tcXG4rXFx0c3RydWN0IGJsa2NnX2dxICpibGtnO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShibGtnLCBcXHUwMDI2cS1cXHUwMDNlYmxrZ19saXN0LCBxX25vZGUpIHtcXG4rXFx0XFx0c3RydWN0IGJsa2NnICpibGtjZyA9IGJsa2ctXFx1MDAzZWJsa2NnO1xcbitcXHRcXHRzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQ7XFxuK1xcbitcXHRcXHRzcGluX2xvY2soXFx1MDAyNmJsa2NnLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cGQgPSBibGtnLVxcdTAwM2VwZFtwb2wtXFx1MDAzZXBsaWRdO1xcbitcXHRcXHRpZiAocGQpIHtcXG4rXFx0XFx0XFx0aWYgKHBkLVxcdTAwM2VvbmxpbmUgXFx1MDAyNlxcdTAwMjYgcG9sLVxcdTAwM2VwZF9vZmZsaW5lX2ZuKVxcbitcXHRcXHRcXHRcXHRwb2wtXFx1MDAzZXBkX29mZmxpbmVfZm4ocGQpO1xcbitcXHRcXHRcXHRwZC1cXHUwMDNlb25saW5lID0gZmFsc2U7XFxuK1xcdFxcdFxcdHBvbC1cXHUwMDNlcGRfZnJlZV9mbihwZCk7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UoYmxrZy1cXHUwMDNlcGRbcG9sLVxcdTAwM2VwbGlkXSwgTlVMTCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmJsa2NnLVxcdTAwM2Vsb2NrKTtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKipcXG4gICogYmxrY2dfYWN0aXZhdGVfcG9saWN5IC0gYWN0aXZhdGUgYSBibGtjZyBwb2xpY3kgb24gYSBnZW5kaXNrXFxuICAqIEBkaXNrOiBnZW5kaXNrIG9mIGludGVyZXN0XFxuQEAgLTE1NjMsNiArMTU5MSw4IEBAIGludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG4gXFxuIFxcdGlmIChxdWV1ZV9pc19tcShxKSlcXG4gXFx0XFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cS1cXHUwMDNlYmxrY2dfbXV0ZXgpO1xcbiByZXRyeTpcXG4gXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cS1cXHUwMDNlcXVldWVfbG9jayk7XFxuIFxcbkBAIC0xNTcyLDYgKzE2MDIsOCBAQCBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXFxuIFxcbiBcXHRcXHRpZiAoYmxrZy1cXHUwMDNlcGRbcG9sLVxcdTAwM2VwbGlkXSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChobGlzdF91bmhhc2hlZChcXHUwMDI2YmxrZy1cXHUwMDNlYmxrY2dfbm9kZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0LyogSWYgcHJlYWxsb2MgbWF0Y2hlcywgdXNlIGl0OyBvdGhlcndpc2UgdHJ5IEdGUF9OT1dBSVQgKi9cXG4gXFx0XFx0aWYgKGJsa2cgPT0gcGlubmVkX2Jsa2cpIHtcXG5AQCAtMTYyNSw2ICsxNjU3LDcgQEAgaW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxcbiBcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZxLVxcdTAwM2VxdWV1ZV9sb2NrKTtcXG4gb3V0OlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnEtXFx1MDAzZWJsa2NnX211dGV4KTtcXG4gXFx0aWYgKHF1ZXVlX2lzX21xKHEpKVxcbiBcXHRcXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xcbiBcXHRpZiAocGlubmVkX2Jsa2cpXFxuQEAgLTE2MzYsMjEgKzE2NjksNyBAQCBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXFxuIGVub21lbTpcXG4gXFx0LyogYWxsb2MgZmFpbGVkLCB0YWtlIGRvd24gZXZlcnl0aGluZyAqL1xcbiBcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZxLVxcdTAwM2VxdWV1ZV9sb2NrKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShibGtnLCBcXHUwMDI2cS1cXHUwMDNlYmxrZ19saXN0LCBxX25vZGUpIHtcXG4tXFx0XFx0c3RydWN0IGJsa2NnICpibGtjZyA9IGJsa2ctXFx1MDAzZWJsa2NnO1xcbi1cXHRcXHRzdHJ1Y3QgYmxrZ19wb2xpY3lfZGF0YSAqcGQ7XFxuLVxcbi1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmJsa2NnLVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0cGQgPSBibGtnLVxcdTAwM2VwZFtwb2wtXFx1MDAzZXBsaWRdO1xcbi1cXHRcXHRpZiAocGQpIHtcXG4tXFx0XFx0XFx0aWYgKHBkLVxcdTAwM2VvbmxpbmUgXFx1MDAyNlxcdTAwMjYgcG9sLVxcdTAwM2VwZF9vZmZsaW5lX2ZuKVxcbi1cXHRcXHRcXHRcXHRwb2wtXFx1MDAzZXBkX29mZmxpbmVfZm4ocGQpO1xcbi1cXHRcXHRcXHRwZC1cXHUwMDNlb25saW5lID0gZmFsc2U7XFxuLVxcdFxcdFxcdHBvbC1cXHUwMDNlcGRfZnJlZV9mbihwZCk7XFxuLVxcdFxcdFxcdFdSSVRFX09OQ0UoYmxrZy1cXHUwMDNlcGRbcG9sLVxcdTAwM2VwbGlkXSwgTlVMTCk7XFxuLVxcdFxcdH1cXG4tXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmJsa2NnLVxcdTAwM2Vsb2NrKTtcXG4tXFx0fVxcbitcXHRibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzKHEsIHBvbCk7XFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cS1cXHUwMDNlcXVldWVfbG9jayk7XFxuIFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdGdvdG8gb3V0O1xcbkBAIC0xNjY5LDcgKzE2ODgsNiBAQCB2b2lkIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbiBcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcXG4ge1xcbiBcXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stXFx1MDAzZXF1ZXVlO1xcbi1cXHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2c7XFxuIFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4gXFxuIFxcdGlmICghYmxrY2dfcG9saWN5X2VuYWJsZWQocSwgcG9sKSlcXG5AQCAtMTY4MiwyMCArMTcwMCw3IEBAIHZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbiBcXG4gXFx0X19jbGVhcl9iaXQocG9sLVxcdTAwM2VwbGlkLCBxLVxcdTAwM2VibGtjZ19wb2xzKTtcXG4tXFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoYmxrZywgXFx1MDAyNnEtXFx1MDAzZWJsa2dfbGlzdCwgcV9ub2RlKSB7XFxuLVxcdFxcdHN0cnVjdCBibGtjZyAqYmxrY2cgPSBibGtnLVxcdTAwM2VibGtjZztcXG4tXFxuLVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2YmxrY2ctXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRpZiAoYmxrZy1cXHUwMDNlcGRbcG9sLVxcdTAwM2VwbGlkXSkge1xcbi1cXHRcXHRcXHRpZiAoYmxrZy1cXHUwMDNlcGRbcG9sLVxcdTAwM2VwbGlkXS1cXHUwMDNlb25saW5lIFxcdTAwMjZcXHUwMDI2IHBvbC1cXHUwMDNlcGRfb2ZmbGluZV9mbilcXG4tXFx0XFx0XFx0XFx0cG9sLVxcdTAwM2VwZF9vZmZsaW5lX2ZuKGJsa2ctXFx1MDAzZXBkW3BvbC1cXHUwMDNlcGxpZF0pO1xcbi1cXHRcXHRcXHRwb2wtXFx1MDAzZXBkX2ZyZWVfZm4oYmxrZy1cXHUwMDNlcGRbcG9sLVxcdTAwM2VwbGlkXSk7XFxuLVxcdFxcdFxcdGJsa2ctXFx1MDAzZXBkW3BvbC1cXHUwMDNlcGxpZF0gPSBOVUxMO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZibGtjZy1cXHUwMDNlbG9jayk7XFxuLVxcdH1cXG4tXFxuK1xcdGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMocSwgcG9sKTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZxLVxcdTAwM2VxdWV1ZV9sb2NrKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZxLVxcdTAwM2VibGtjZ19tdXRleCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MTo1OC4xMDI0ODk0MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NjQyNTM1OTM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCTEtfREVWX1RIUk9UVExJTkdcIixcbiAgICBcIkJMS19DR1JPVVBfSU9MQVRFTkNZXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVFwiLFxuICAgIFwiSU9TQ0hFRF9CRlFcIixcbiAgICBcIkJGUV9HUk9VUF9JT1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrY2dfYWN0aXZhdGVfcG9saWN5XCIsXG4gICAgXCJibGtjZ19kZWFjdGl2YXRlX3BvbGljeVwiLFxuICAgIFwiYmxrY2dfZXhpdF9kaXNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBibG9jayBjZ3JvdXAgcG9saWN5IGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uIGFuZCBkaXNrIHRlYXJkb3duIGJ5IGFkZGluZyBhIG11dGV4IGxvY2suIFRoZXNlIGFyZSBjb3JlIGJsb2NrIGNncm91cCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGR5bmFtaWNhbGx5IHdoZW4gZW5hYmxpbmcvZGlzYWJsaW5nIGNncm91cCBwb2xpY2llcyBvciBkZXN0cm95aW5nIGJsb2NrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMwNWQ4MWRjYTJiZGI5NDU5OWNlMzNiMGIyZmFhNTgyYjBiZGI0NTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDE4OjUxOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jXG5pbmRleCBkOTY3NjEyNmM1YjVkLi4zNTQ2MzdmM2IxNThjIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNncm91cC5jXG4rKysgYi9ibG9jay9ibGstY2dyb3VwLmNcbkBAIC01NjksNiArNTY5LDcgQEAgc3RhdGljIHZvaWQgYmxrZ19kZXN0cm95X2FsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdGludCBpO1xuIFxuIHJlc3RhcnQ6XG4rXHRtdXRleF9sb2NrKFx1MDAyNnEtXHUwMDNlYmxrY2dfbXV0ZXgpO1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShibGtnLCBcdTAwMjZxLVx1MDAzZWJsa2dfbGlzdCwgcV9ub2RlKSB7XG4gXHRcdHN0cnVjdCBibGtjZyAqYmxrY2cgPSBibGtnLVx1MDAzZWJsa2NnO1xuQEAgLTU4Nyw2ICs1ODgsNyBAQCBzdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3lfYWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0XHRpZiAoISgtLWNvdW50KSkge1xuIFx0XHRcdGNvdW50ID0gQkxLR19ERVNUUk9ZX0JBVENIX1NJWkU7XG4gXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnEtXHUwMDNlYmxrY2dfbXV0ZXgpO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHRcdGdvdG8gcmVzdGFydDtcbiBcdFx0fVxuQEAgLTYwNiw2ICs2MDgsNyBAQCBzdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3lfYWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFxuIFx0cS1cdTAwM2Vyb290X2Jsa2cgPSBOVUxMO1xuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cS1cdTAwM2VibGtjZ19tdXRleCk7XG4gXG4gXHR3YWtlX3VwX3ZhcihcdTAwMjZxLVx1MDAzZXJvb3RfYmxrZyk7XG4gfVxuQEAgLTE1MjYsNiArMTUyOSwzMSBAQCBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBpb19jZ3JwX3N1YnN5cyA9IHtcbiB9O1xuIEVYUE9SVF9TWU1CT0xfR1BMKGlvX2NncnBfc3Vic3lzKTtcbiBcbisvKlxuKyAqIFRlYXIgZG93biBwZXItYmxrZyBwb2xpY3kgZGF0YSBmb3IgQHBvbCBvbiBAcS5cbisgKi9cbitzdGF0aWMgdm9pZCBibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuK3tcbitcdHN0cnVjdCBibGtjZ19ncSAqYmxrZztcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoYmxrZywgXHUwMDI2cS1cdTAwM2VibGtnX2xpc3QsIHFfbm9kZSkge1xuK1x0XHRzdHJ1Y3QgYmxrY2cgKmJsa2NnID0gYmxrZy1cdTAwM2VibGtjZztcbitcdFx0c3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkO1xuK1xuK1x0XHRzcGluX2xvY2soXHUwMDI2YmxrY2ctXHUwMDNlbG9jayk7XG4rXHRcdHBkID0gYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF07XG4rXHRcdGlmIChwZCkge1xuK1x0XHRcdGlmIChwZC1cdTAwM2VvbmxpbmUgXHUwMDI2XHUwMDI2IHBvbC1cdTAwM2VwZF9vZmZsaW5lX2ZuKVxuK1x0XHRcdFx0cG9sLVx1MDAzZXBkX29mZmxpbmVfZm4ocGQpO1xuK1x0XHRcdHBkLVx1MDAzZW9ubGluZSA9IGZhbHNlO1xuK1x0XHRcdHBvbC1cdTAwM2VwZF9mcmVlX2ZuKHBkKTtcbitcdFx0XHRXUklURV9PTkNFKGJsa2ctXHUwMDNlcGRbcG9sLVx1MDAzZXBsaWRdLCBOVUxMKTtcbitcdFx0fVxuK1x0XHRzcGluX3VubG9jayhcdTAwMjZibGtjZy1cdTAwM2Vsb2NrKTtcbitcdH1cbit9XG4rXG4gLyoqXG4gICogYmxrY2dfYWN0aXZhdGVfcG9saWN5IC0gYWN0aXZhdGUgYSBibGtjZyBwb2xpY3kgb24gYSBnZW5kaXNrXG4gICogQGRpc2s6IGdlbmRpc2sgb2YgaW50ZXJlc3RcbkBAIC0xNTYzLDYgKzE1OTEsOCBAQCBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG4gXG4gXHRpZiAocXVldWVfaXNfbXEocSkpXG4gXHRcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cS1cdTAwM2VibGtjZ19tdXRleCk7XG4gcmV0cnk6XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG4gXG5AQCAtMTU3Miw2ICsxNjAyLDggQEAgaW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuIFxuIFx0XHRpZiAoYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF0pXG4gXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChobGlzdF91bmhhc2hlZChcdTAwMjZibGtnLVx1MDAzZWJsa2NnX25vZGUpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHQvKiBJZiBwcmVhbGxvYyBtYXRjaGVzLCB1c2UgaXQ7IG90aGVyd2lzZSB0cnkgR0ZQX05PV0FJVCAqL1xuIFx0XHRpZiAoYmxrZyA9PSBwaW5uZWRfYmxrZykge1xuQEAgLTE2MjUsNiArMTY1Nyw3IEBAIGludCBibGtjZ19hY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbClcbiBcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIG91dDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZxLVx1MDAzZWJsa2NnX211dGV4KTtcbiBcdGlmIChxdWV1ZV9pc19tcShxKSlcbiBcdFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcbiBcdGlmIChwaW5uZWRfYmxrZylcbkBAIC0xNjM2LDIxICsxNjY5LDcgQEAgaW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxuIGVub21lbTpcbiBcdC8qIGFsbG9jIGZhaWxlZCwgdGFrZSBkb3duIGV2ZXJ5dGhpbmcgKi9cbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2cS1cdTAwM2VxdWV1ZV9sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoYmxrZywgXHUwMDI2cS1cdTAwM2VibGtnX2xpc3QsIHFfbm9kZSkge1xuLVx0XHRzdHJ1Y3QgYmxrY2cgKmJsa2NnID0gYmxrZy1cdTAwM2VibGtjZztcbi1cdFx0c3RydWN0IGJsa2dfcG9saWN5X2RhdGEgKnBkO1xuLVxuLVx0XHRzcGluX2xvY2soXHUwMDI2YmxrY2ctXHUwMDNlbG9jayk7XG4tXHRcdHBkID0gYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF07XG4tXHRcdGlmIChwZCkge1xuLVx0XHRcdGlmIChwZC1cdTAwM2VvbmxpbmUgXHUwMDI2XHUwMDI2IHBvbC1cdTAwM2VwZF9vZmZsaW5lX2ZuKVxuLVx0XHRcdFx0cG9sLVx1MDAzZXBkX29mZmxpbmVfZm4ocGQpO1xuLVx0XHRcdHBkLVx1MDAzZW9ubGluZSA9IGZhbHNlO1xuLVx0XHRcdHBvbC1cdTAwM2VwZF9mcmVlX2ZuKHBkKTtcbi1cdFx0XHRXUklURV9PTkNFKGJsa2ctXHUwMDNlcGRbcG9sLVx1MDAzZXBsaWRdLCBOVUxMKTtcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9jayhcdTAwMjZibGtjZy1cdTAwM2Vsb2NrKTtcbi1cdH1cbitcdGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMocSwgcG9sKTtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFx0cmV0ID0gLUVOT01FTTtcbiBcdGdvdG8gb3V0O1xuQEAgLTE2NjksNyArMTY4OCw2IEBAIHZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXG4ge1xuIFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkaXNrLVx1MDAzZXF1ZXVlO1xuLVx0c3RydWN0IGJsa2NnX2dxICpibGtnO1xuIFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuIFxuIFx0aWYgKCFibGtjZ19wb2xpY3lfZW5hYmxlZChxLCBwb2wpKVxuQEAgLTE2ODIsMjAgKzE3MDAsNyBAQCB2b2lkIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFxuIFx0X19jbGVhcl9iaXQocG9sLVx1MDAzZXBsaWQsIHEtXHUwMDNlYmxrY2dfcG9scyk7XG4tXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsa2csIFx1MDAyNnEtXHUwMDNlYmxrZ19saXN0LCBxX25vZGUpIHtcbi1cdFx0c3RydWN0IGJsa2NnICpibGtjZyA9IGJsa2ctXHUwMDNlYmxrY2c7XG4tXG4tXHRcdHNwaW5fbG9jayhcdTAwMjZibGtjZy1cdTAwM2Vsb2NrKTtcbi1cdFx0aWYgKGJsa2ctXHUwMDNlcGRbcG9sLVx1MDAzZXBsaWRdKSB7XG4tXHRcdFx0aWYgKGJsa2ctXHUwMDNlcGRbcG9sLVx1MDAzZXBsaWRdLVx1MDAzZW9ubGluZSBcdTAwMjZcdTAwMjYgcG9sLVx1MDAzZXBkX29mZmxpbmVfZm4pXG4tXHRcdFx0XHRwb2wtXHUwMDNlcGRfb2ZmbGluZV9mbihibGtnLVx1MDAzZXBkW3BvbC1cdTAwM2VwbGlkXSk7XG4tXHRcdFx0cG9sLVx1MDAzZXBkX2ZyZWVfZm4oYmxrZy1cdTAwM2VwZFtwb2wtXHUwMDNlcGxpZF0pO1xuLVx0XHRcdGJsa2ctXHUwMDNlcGRbcG9sLVx1MDAzZXBsaWRdID0gTlVMTDtcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9jayhcdTAwMjZibGtjZy1cdTAwM2Vsb2NrKTtcbi1cdH1cbi1cbitcdGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMocSwgcG9sKTtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZxLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnEtXHUwMDNlYmxrY2dfbXV0ZXgpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTE6NTguMTAyNDkyNjY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExMDE2MDc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCbG9jayBDZ3JvdXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYmxvY2svYmxrLWNncm91cC5jYC4gSXQncyB0b3VjaGluZyBzb21lIGNvcmUgZnVuY3Rpb25zOiBgYmxrZ19kZXN0cm95X2FsbGAsIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgbmV3IGZ1bmN0aW9uLCBgYmxrY2dfcG9saWN5X3RlYXJkb3duX3Bkc2AsIHdoaWNoIGxvb2tzIGxpa2UgaXQncyBiZWVuIHB1bGxlZCBvdXQgb2YgdGhlIGFjdGl2YXRpb24gYW5kIGRlYWN0aXZhdGlvbiByb3V0aW5lcyDigJMgcHJvYmFibHkgZm9yIGJldHRlciBjb2RlIHJldXNlIGFuZCBvcmdhbml6YXRpb24sIHNtYXJ0LlxuXG5UaGUgYWRkaXRpb24gb2YgdGhvc2UgYG11dGV4X2xvY2tgIGFuZCBgbXV0ZXhfdW5sb2NrYCBjYWxscyBhcm91bmQgYHEtXHUwMDNlYmxrY2dfbXV0ZXhgIGluIGBibGtnX2Rlc3Ryb3lfYWxsYCBhbmQgYGJsa2NnX2FjdGl2YXRlX3BvbGljeWAgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoaXMgc3VnZ2VzdHMgYSByYWNlIGNvbmRpdGlvbiBvciBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZSB3YXMgYWRkcmVzc2VkLiBQcm90ZWN0aW5nIHNoYXJlZCBkYXRhIHdpdGggbXV0ZXhlcyBpcyBhbHdheXMgYSBnb29kIHNpZ24gb2YgY2FyZWZ1bG5lc3MuIEFsc28gdGhhdCBgaWYgKGhsaXN0X3VuaGFzaGVkKFx1MDAyNmJsa2ctXHUwMDNlYmxrY2dfbm9kZSkpIGNvbnRpbnVlO2AgaW4gYGJsa2NnX2FjdGl2YXRlX3BvbGljeWAgaW1wbGllcyB0aGUgY29kZSBpcyBwcmV2ZW50aW5nIHdvcmsgb24gdW5oYXNoZWQgZWxlbWVudHMuIEZpbmUtZ3JhaW5lZCBjb250cm9sLCBJIGxpa2UgaXQuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgYmxvY2sgY2dyb3VwIHN1YnN5c3RlbSwgd2hpY2ggbWVhbnMgaXQncyBhIHJlYWNoYWJsZSBjb2RlIHBhdGggYW5kIHNob3VsZCBiZSBmdXp6ZWQgdGhvcm91Z2hseS4gVGltZSB0byBzdGFydCB0aGlua2luZyBhYm91dCB0ZXN0IGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIEknbGwgbmVlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGluIG15IHRlc3RpbmcgZW52aXJvbm1lbnQuIExldCdzIHNlZS4uLiBhIHF1aWNrIHNlYXJjaCBmb3IgYGJsay1jZ3JvdXAuY2AgaW4gdGhlIGBibG9jay9NYWtlZmlsZWAgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gY2x1ZXMgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTI6MDMuMjEyNjU2MTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUyMDgyMzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsay1jZ3JvdXAuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjAzLjI5Nzg3MzQ2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MzE1MzY2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGlyZWN0aW5nIE15IEF0dGVudGlvbjogVGhlIGBibG9jay9NYWtlZmlsZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHJpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBMZXQncyBjdXQgdGhyb3VnaCBhbnkgbGF5ZXJzIG9mIGFic3RyYWN0aW9uIGFuZCBnbyBzdHJhaWdodCB0byB0aGUgYGJsb2NrL01ha2VmaWxlYC4gTm8gbmVlZCB0byBiZWF0IGFyb3VuZCB0aGUgYnVzaDsgSSdtIGdvaW5nIHRvIGV4YW1pbmUgdGhpcyBkaXJlY3RseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgYXQgaXRzIG1vc3QgZnVuZGFtZW50YWwgbGV2ZWwsIHNvIHRoZSBgTWFrZWZpbGVgIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGluZ3MgYXJlIGJlaW5nIG9yY2hlc3RyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI2MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjA1LjgyOTQxMjc1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIGJsb2NrIGxheWVyXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdENPTlRFWFRfQU5BTFlTSVMgOj0geVxcbiAgIDc6XFx0XFxuICAgODpcXHRvYmoteVxcdFxcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdGJsay1mbHVzaC5vIGJsay1zZXR0aW5ncy5vIGJsay1pb2MubyBibGstbWFwLm8gXFxcXFxcbiAgMTA6XFx0XFx0XFx0XFx0YmxrLW1lcmdlLm8gYmxrLXRpbWVvdXQubyBibGstbGliLm8gYmxrLW1xLm8gXFxcXFxcbiAgMTE6XFx0XFx0XFx0XFx0YmxrLW1xLXRhZy5vIGJsay1tcS1kbWEubyBibGstc3RhdC5vIFxcXFxcXG4gIDEyOlxcdFxcdFxcdFxcdGJsay1tcS1zeXNmcy5vIGJsay1tcS1jcHVtYXAubyBibGstbXEtc2NoZWQubyBpb2N0bC5vIFxcXFxcXG4gIDEzOlxcdFxcdFxcdFxcdGdlbmhkLm8gaW9wcmlvLm8gYmFkYmxvY2tzLm8gcGFydGl0aW9ucy8gYmxrLXJxLXFvcy5vIFxcXFxcXG4gIDE0OlxcdFxcdFxcdFxcdGRpc2stZXZlbnRzLm8gYmxrLWlhLXJhbmdlcy5vIGVhcmx5LWxvb2t1cC5vXFxuICAxNTpcXHRcXG4gIDE2OlxcdG9iai0kKENPTkZJR19CTEtfRVJST1JfSU5KRUNUSU9OKSArPSBlcnJvci1pbmplY3Rpb24ub1xcbiAgMTc6XFx0b2JqLSQoQ09ORklHX0JMS19ERVZfQlNHX0NPTU1PTikgKz0gYnNnLm9cXG4gIDE4OlxcdG9iai0kKENPTkZJR19CTEtfREVWX0JTR0xJQilcXHQrPSBic2ctbGliLm9cXG4gIDE5OlxcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQKVxcdCs9IGJsay1jZ3JvdXAub1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX0JMS19DR1JPVVBfUldTVEFUKVxcdCs9IGJsay1jZ3JvdXAtcndzdGF0Lm9cXG4gIDIxOlxcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX0ZDX0FQUElEKSArPSBibGstY2dyb3VwLWZjLWFwcGlkLm9cXG4gIDIyOlxcdG9iai0kKENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcpXFx0Kz0gYmxrLXRocm90dGxlLm9cXG4gIDIzOlxcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPUFJJTylcXHQrPSBibGstaW9wcmlvLm9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWSlcXHQrPSBibGstaW9sYXRlbmN5Lm9cXG4gIDI1OlxcdG9iai0kKENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVClcXHQrPSBibGstaW9jb3N0Lm9cXG4gIDI2OlxcdG9iai0kKENPTkZJR19NUV9JT1NDSEVEX0RFQURMSU5FKVxcdCs9IG1xLWRlYWRsaW5lLm9cXG4gIDI3OlxcdG9iai0kKENPTkZJR19NUV9JT1NDSEVEX0tZQkVSKVxcdCs9IGt5YmVyLWlvc2NoZWQub1xcbiAgMjg6XFx0YmZxLXlcXHRcXHRcXHRcXHQ6PSBiZnEtaW9zY2hlZC5vIGJmcS13ZjJxLm8gYmZxLWNncm91cC5vXFxuICAyOTpcXHRvYmotJChDT05GSUdfSU9TQ0hFRF9CRlEpXFx0Kz0gYmZxLm9cXG4gIDMwOlxcdFxcbiAgMzE6XFx0b2JqLSQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKSArPSBiaW8taW50ZWdyaXR5Lm8gYmxrLWludGVncml0eS5vIHQxMC1waS5vIFxcXFxcXG4gIDMyOlxcdFxcdFxcdFxcdFxcdCAgIGJpby1pbnRlZ3JpdHktYXV0by5vIGJpby1pbnRlZ3JpdHktZnMub1xcbiAgMzM6XFx0b2JqLSQoQ09ORklHX0JMS19ERVZfWk9ORUQpXFx0Kz0gYmxrLXpvbmVkLm9cXG4gIDM0OlxcdG9iai0kKENPTkZJR19CTEtfV0JUKVxcdFxcdCs9IGJsay13YnQub1xcbiAgMzU6XFx0b2JqLSQoQ09ORklHX0JMS19ERUJVR19GUylcXHQrPSBibGstbXEtZGVidWdmcy5vXFxuICAzNjpcXHRvYmotJChDT05GSUdfQkxLX1NFRF9PUEFMKVxcdCs9IHNlZC1vcGFsLm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19CTEtfUE0pXFx0XFx0Kz0gYmxrLXBtLm9cXG4gIDM4OlxcdG9iai0kKENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT04pXFx0Kz0gYmxrLWNyeXB0by5vIGJsay1jcnlwdG8tcHJvZmlsZS5vIFxcXFxcXG4gIDM5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGJsay1jcnlwdG8tc3lzZnMub1xcbiAgNDA6XFx0b2JqLSQoQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSylcXHQrPSBibGstY3J5cHRvLWZhbGxiYWNrLm9cXG4gIDQxOlxcdG9iai0kKENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRClcXHQrPSBob2xkZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MjowNS44Mjk1NzA3MzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTcyNTA2MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgQmxvY2sgSU8gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gdGhlIGFyY2hpdGVjdHVyZSBJJ20gd29ya2luZyB3aXRoICpkZW1hbmRzKiBgQ09ORklHX0JMS19DR1JPVVBgLiBObyB3YXkgYXJvdW5kIHRoYXQsIGl0IHNlZW1zLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBub3cgZ29lcyBzdHJhaWdodCB0byBkZXBlbmRlbmNpZXMuIEJlZm9yZSBJIGRpdmUgaW50byBhbnkgY29kZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoYXQqIHRoaXMgc2V0dGluZyBmdW5kYW1lbnRhbGx5IHJlbGllcyBvbi4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgb3IgdGhhdCBJICptdXN0KiBzZXQgdG8gYXZvaWQgYSBjYXRhc3Ryb3BoaWMgbWVsdGRvd24/IE9yLCBjb252ZXJzZWx5LCB3aGF0IGZlYXR1cmVzIG1pZ2h0IEkgbG9zZSBpZiB0aGlzIGNvbmZpZyBmbGFnIGlzIHNvbWVob3cgbWlzc2luZz8gVGltZSB0byBwZWVsIGJhY2sgdGhlIGxheWVycyBhbmQgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaXRzIGltcGFjdCBvbiB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjA5LjAwMjA3OTU0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM0MTU1MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19DR1JPVVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXFxuLS1cXG5ibG9jay9LY29uZmlnLTQxLVxcbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXFxuYmxvY2svS2NvbmZpZy00My1cXHRib29sXFxuYmxvY2svS2NvbmZpZy00NC1cXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXFxuYmxvY2svS2NvbmZpZy00Ni1cXHRib29sXFxuLS1cXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMzMtXFxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXFxuYmxvY2svS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE0NC1cXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxcbmJsb2NrL0tjb25maWctMTQ2LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNTMtXFxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXFxuYmxvY2svS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE2My1cXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cXG5ibG9jay9LY29uZmlnLTE2NS1cXHRib29sIFxcXCJDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjA5LjE2NTQ5OTYwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MzM1NDk3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipTZWFyY2hpbmcgZm9yIGEgTWlzc2luZyBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbk9rYXksIHNvIEkgd2FzIGxvb2tpbmcgZm9yIGBjb25maWcgQkxLX0NHUk9VUGAgd2l0aGluIHRoZSBgYmxvY2svS2NvbmZpZ2AgZmlsZSwgYnV0IGl0IGxvb2tzIGxpa2UgaXQncyBub3QgcHJlc2VudCB0aGVyZS4gSG1tLCB0aGF0J3MgdW51c3VhbC4gV2hlcmUgY291bGQgaXQgYmUgZGVmaW5lZD8gVGltZSB0byBicm9hZGVuIHRoZSBzZWFyY2guIExldCdzIGRvIGEgZ2xvYmFsIHNlYXJjaCBhY3Jvc3MgdGhlIGVudGlyZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0cmVlLiBNYXliZSBpdCdzIGRlZmluZWQgaW4gYSBkaWZmZXJlbnQsIHJlbGF0ZWQgc3Vic3lzdGVtIG9yIGZpbGUuIFRoaXMgaXMgY29tbW9uOyBzb21ldGltZXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBsb2dpY2FsbHkgZ3JvdXBlZCBlbHNld2hlcmUgZm9yIG9yZ2FuaXphdGlvbmFsIHJlYXNvbnMuIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgY3J1Y2lhbCBmbGFnIGlzIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAxMiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjExLjc5OTA1MjM4N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAxNzU1NjQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcXG4tLVxcbmJsb2NrL0tjb25maWctNDEtXFxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcXG5ibG9jay9LY29uZmlnLTQzLVxcdGJvb2xcXG5ibG9jay9LY29uZmlnLTQ0LVxcbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG5ibG9jay9LY29uZmlnLTQ2LVxcdGJvb2xcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTQ0LVxcbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuYmxvY2svS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTYzLVxcbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbmJsb2NrL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIkNncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1xcXCJcXG4tLVxcbmluaXQvS2NvbmZpZz0xMDk5PWNvbmZpZyBNRU1DR19WMVxcbi0tXFxuaW5pdC9LY29uZmlnLTExMTUtXFxuaW5pdC9LY29uZmlnOjExMTY6Y29uZmlnIEJMS19DR1JPVVBcXG5pbml0L0tjb25maWctMTExNy1cXHRib29sIFxcXCJJTyBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MjoxNS44MTY2NjI1NjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3MjkyOTQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIHRocm91Z2ggdGhpcyBrZXJuZWwgc291cmNlLiBBaCwgdGhlIGxpa2VseSBjdWxwcml0IGlzIGluIGBpbml0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBpbml0aWFsaXphdGlvbi4gTGV0J3Mgc2VlLi4uIEknbGwganVtcCByaWdodCB0byBhcm91bmQgbGluZSAxMTE2IGluIGBpbml0L0tjb25maWdgIGFuZCB0YWtlIGEgbG9vay4gVGhhdCBzaG91bGQgZ2V0IG1lIHN0YXJ0ZWQuIEtub3dpbmcgdGhlIEtjb25maWcgbGF5b3V0IGFzIEkgZG8sIHRoaXMgZmVlbHMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgZm9yIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gTm93LCBsZXQncyBzZWUgd2hhdCdzIGRlZmluZWQgdGhlcmUuLi4gSSBleHBlY3QgdG8gZmluZCBzb21lIG9mIHRoZSB0b3AtbGV2ZWwgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucywgb3IgbWF5YmUgc29tZSByZWxldmFudCBkZWZhdWx0cyBvciBkZXBlbmRlbmNpZXMgZGVmaW5lZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYzNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjE4LjY4OTU5NDY4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMTA6XFx0XFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XFxuMTExMTpcXHRcXHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcXG4xMTEyOlxcdFxcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxcbjExMTM6XFx0XFxuMTExNDpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMTE1OlxcdFxcbjExMTY6XFx0Y29uZmlnIEJMS19DR1JPVVBcXG4xMTE3OlxcdFxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuMTExODpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLXFxuMTExOTpcXHRcXHRkZWZhdWx0IG5cXG4xMTIwOlxcdFxcdGhlbHBcXG4xMTIxOlxcdFxcdEdlbmVyaWMgYmxvY2sgSU8gY29udHJvbGxlciBjZ3JvdXAgaW50ZXJmYWNlLiBUaGlzIGlzIHRoZSBjb21tb25cXG4xMTIyOlxcdFxcdGNncm91cCBpbnRlcmZhY2Ugd2hpY2ggc2hvdWxkIGJlIHVzZWQgYnkgdmFyaW91cyBJTyBjb250cm9sbGluZ1xcbjExMjM6XFx0XFx0cG9saWNpZXMuXFxuMTEyNDpcXHRcXG4xMTI1OlxcdFxcdEN1cnJlbnRseSwgQ0ZRIElPIHNjaGVkdWxlciB1c2VzIGl0IHRvIHJlY29nbml6ZSB0YXNrIGdyb3VwcyBhbmRcXG4xMTI2OlxcdFxcdGNvbnRyb2wgZGlzayBiYW5kd2lkdGggYWxsb2NhdGlvbiAocHJvcG9ydGlvbmFsIHRpbWUgc2xpY2UgYWxsb2NhdGlvbilcXG4xMTI3OlxcdFxcdHRvIHN1Y2ggdGFzayBncm91cHMuIEl0IGlzIGFsc28gdXNlZCBieSBiaW8gdGhyb3R0bGluZyBsb2dpYyBpblxcbjExMjg6XFx0XFx0YmxvY2sgbGF5ZXIgdG8gaW1wbGVtZW50IHVwcGVyIGxpbWl0IGluIElPIHJhdGVzIG9uIGEgZGV2aWNlLlxcbjExMjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjE4LjY4OTc2Njc4OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA2Nzg3NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QgaGVyZS5cblxuKipEZXBlbmRlbmNpZXMgYW5kIEZ1bmN0aW9uIEFuYWx5c2lzOiBCTEtfQ0dST1VQIGFuZCBCTE9DSyoqXG5cblJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIGBCTEtfQ0dST1VQYCBpcyBmdW5kYW1lbnRhbGx5IHJlbGlhbnQgb24gYEJMT0NLYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGRlcGVuZGVuY3kgbWFuaWZlc3RzIGl0c2VsZiBhdCB0aGUgZnVuY3Rpb24gbGV2ZWwuIExldCdzIGRpZyBpbnRvIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuXG5cblRoZSBvbmVzIGZsYWdnZWQgYXJlOiBgYmxrZ19kZXN0cm95X2FsbGAsIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YC4gT2theSwgdGhhdCdzIGEgcmVhc29uYWJsZSBzZXQgdG8gc3RhcnQgd2l0aCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgbmFtZXMuIE5vdyBJIGhhdmUgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIHNvdXJjZSBjb2RlOyBhcmUgdGhleSBleHBvcnRlZCwgb3IgYXJlIHRoZXkgc3RhdGljLlxuXG5BbHJpZ2h0LCBhIHF1aWNrIGNoZWNrIHNob3dzIHRoYXQgYGJsa2dfZGVzdHJveV9hbGxgIGlzIHN0YXRpYyDigJMgbWVhbmluZyBpdCdzIGNvbmZpbmVkIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQgYW5kIG5vdCBhdmFpbGFibGUgZm9yIGV4dGVybmFsIGxpbmtpbmcuIEJ1dCwgYGJsa2NnX2FjdGl2YXRlX3BvbGljeWAgYW5kIGBibGtjZ19kZWFjdGl2YXRlX3BvbGljeWAgYXJlIGV4cG9ydGVkLCB3aGljaCBpbXBsaWVzIHRoYXQgb3RoZXIgbW9kdWxlcyBvciBjb21wb25lbnRzIGNhbiBjYWxsIGFuZCBkZXBlbmQgb24gdGhlaXIgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNDgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjIyLjI5NjU1NzU4NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwOTIxNzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2NnX2FjdGl2YXRlX3BvbGljeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmZxLWNncm91cC5jPTEyNTQ9c3RydWN0IGJmcV9ncm91cCAqYmZxX2NyZWF0ZV9ncm91cF9oaWVyYXJjaHkoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBpbnQgbm9kZSlcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjU3LVxcbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMjU4OlxcdHJldCA9IGJsa2NnX2FjdGl2YXRlX3BvbGljeShiZnFkLVxcdTAwM2VxdWV1ZS1cXHUwMDNlZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV9iZnEpO1xcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjU5LVxcdGlmIChyZXQpXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTcxOTY9c3RhdGljIGludCBiZnFfaW5pdF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplcSlcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNzMyOC1cXHQgKiBmdW5jdGlvbiBpcyB0aGUgaGVhZCBvZiBhIGNoYWluIG9mIGZ1bmN0aW9uIGNhbGxzXFxuYmxvY2svYmZxLWlvc2NoZWQuYzo3MzI5OlxcdCAqIChiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeS1cXHUwMDNlYmxrY2dfYWN0aXZhdGVfcG9saWN5LVxcdTAwM2VcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTczMzAtXFx0ICogYmxrX21xX2ZyZWV6ZV9xdWV1ZSkgdGhhdCBtYXkgbGVhZCB0byB0aGUgaW52b2NhdGlvbiBvZiB0aGVcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xNTM1PXN0YXRpYyB2b2lkIGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTU1Ny0vKipcXG5ibG9jay9ibGstY2dyb3VwLmM6MTU1ODogKiBibGtjZ19hY3RpdmF0ZV9wb2xpY3kgLSBhY3RpdmF0ZSBhIGJsa2NnIHBvbGljeSBvbiBhIGdlbmRpc2tcXG5ibG9jay9ibGstY2dyb3VwLmMtMTU1OS0gKiBAZGlzazogZ2VuZGlzayBvZiBpbnRlcmVzdFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE1NzItICovXFxuYmxvY2svYmxrLWNncm91cC5jOjE1NzM6aW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTc0LXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNjc2LX1cXG5ibG9jay9ibGstY2dyb3VwLmM6MTY3NzpFWFBPUlRfU1lNQk9MX0dQTChibGtjZ19hY3RpdmF0ZV9wb2xpY3kpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNjc4LVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE2ODQtICogRGVhY3RpdmF0ZSBAcG9sIG9uIEBkaXNrLiAgRm9sbG93cyB0aGUgc2FtZSBzeW5jaHJvbml6YXRpb24gcnVsZXMgYXNcXG5ibG9jay9ibGstY2dyb3VwLmM6MTY4NTogKiBibGtjZ19hY3RpdmF0ZV9wb2xpY3koKS5cXG5ibG9jay9ibGstY2dyb3VwLmMtMTY4Ni0gKi9cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMDI9dm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMDM6aW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcXG5ibG9jay9ibGstY2dyb3VwLmgtMjA0LXZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9NDg5PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgfVxcbmJsb2NrL2Jsay1jZ3JvdXAuaDo0OTA6c3RhdGljIGlubGluZSBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay1jZ3JvdXAuaC00OTEtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKSB7IHJldHVybiAwOyB9XFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmM9MjkxNT1zdGF0aWMgaW50IGJsa19pb2Nvc3RfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTY2LVxcbmJsb2NrL2Jsay1pb2Nvc3QuYzoyOTY3OlxcdHJldCA9IGJsa2NnX2FjdGl2YXRlX3BvbGljeShkaXNrLCBcXHUwMDI2YmxrY2dfcG9saWN5X2lvY29zdCk7XFxuYmxvY2svYmxrLWlvY29zdC5jLTI5NjgtXFx0aWYgKHJldClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz03NTg9c3RhdGljIGludCBibGtfaW9sYXRlbmN5X2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNzcwLVxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjc3MTpcXHRyZXQgPSBibGtjZ19hY3RpdmF0ZV9wb2xpY3koZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3kpO1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy03NzItXFx0aWYgKHJldClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTEzMTg9c3RhdGljIGludCBibGtfdGhyb3RsX2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzM4LVxcdC8qIGFjdGl2YXRlIHBvbGljeSwgYmxrX3Rocm90bF9hY3RpdmF0ZWQoKSB3aWxsIHJldHVybiB0cnVlICovXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTMzOTpcXHRyZXQgPSBibGtjZ19hY3RpdmF0ZV9wb2xpY3koZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwpO1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNDAtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MjoyMi40Mjc0ODUxODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NDAxOTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFBvbGljeSBBY3RpdmF0aW9uIGFuZCBEZWFjdGl2YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgdGhlIGJhbGwgcm9sbGluZyB3aGVuIGEgYmxvY2sgSS9PIGNvbnRyb2wgZ3JvdXAgcG9saWN5IGlzIGVuYWJsZWQuIEknbSBub3RpbmcgdGhhdCBgYmZxX2NyZWF0ZV9ncm91cF9oaWVyYXJjaHlgLCBgYmxrX2lvY29zdF9pbml0YCwgYGJsa19pb2xhdGVuY3lfaW5pdGAsIGFuZCBgYmxrX3Rocm90bF9pbml0YCBhbGwgY2FsbCBpdC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhlc2UgZnVuY3Rpb25zIGFyZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBhbmQgaW5pdGlhbCBzdGF0ZXMgZm9yIHRoZSB2YXJpb3VzIEkvTyBzY2hlZHVsZXJzIGFuZCByZXNvdXJjZSBjb250cm9sbGVycy5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoaXMgYWN0aXZhdGlvbiBoYXBwZW5zIHdoZW4gd2UgaGF2ZSBgQ09ORklHX0lPU0NIRURfQkZRYCwgYENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVGAsIGBDT05GSUdfQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBvciBgQ09ORklHX0JMS19ERVZfVEhST1RUTElOR2Agc2V0LCBhcyB0aGVzZSBhcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuYWJsZSB0aGUgY29ycmVzcG9uZGluZyBwb2xpY2llcy4gV2XigJlyZSB0YWxraW5nIEJGUSBzY2hlZHVsZXIsIEkvTyBjb3N0IGFjY291bnRpbmcsIEkvTyBsYXRlbmN5IG1vbml0b3JpbmcsIGFuZCB0aGUgdHJhZGl0aW9uYWwgdGhyb3R0bGluZyBtZWNoYW5pc20sIHJlc3BlY3RpdmVseS4gSSBuZWVkIHRvIGJlIHN1cmUgdG8gY29uc2lkZXIgdGhhdCByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb21waWxlLXRpbWUgb3B0aW9ucyBhbmQgcnVudGltZSBiZWhhdmlvci5cblxuV2hpbGUgSSdtIGhlcmUsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGNvdW50ZXJwYXJ0LCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgLCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwb2xpY2llcyBhcmUgc2h1dCBkb3duIHdoZW4gdGhleSdyZSBubyBsb25nZXIgbmVlZGVkLiBBIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgcmVxdWlyZXMgY29uc2lkZXJpbmcgbm90IG9ubHkgaW5pdGlhbGl6YXRpb24gYnV0IGFsc28gZGUtaW5pdGlhbGl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTI6MjYuNzIxNTA3NTQzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk5MzQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtjZ19kZWFjdGl2YXRlX3BvbGljeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmZxLWlvc2NoZWQuYz03MTQyPXN0YXRpYyB2b2lkIGJmcV9leGl0X3F1ZXVlKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSlcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNzE2NC0jaWZkZWYgQ09ORklHX0JGUV9HUk9VUF9JT1NDSEVEXFxuYmxvY2svYmZxLWlvc2NoZWQuYzo3MTY1OlxcdGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KGJmcWQtXFx1MDAzZXF1ZXVlLVxcdTAwM2VkaXNrLCBcXHUwMDI2YmxrY2dfcG9saWN5X2JmcSk7XFxuYmxvY2svYmZxLWlvc2NoZWQuYy03MTY2LSNlbHNlXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MTE0PXN0YXRpYyB2b2lkIGJsa2dfZnJlZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTEyMS1cXHQvKlxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMjI6XFx0ICogcGRfZnJlZV9mbigpIGNhbiBhbHNvIGJlIGNhbGxlZCBmcm9tIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KCksXFxuYmxvY2svYmxrLWNncm91cC5jLTEyMy1cXHQgKiBpbiBvcmRlciB0byBtYWtlIHN1cmUgcGRfZnJlZV9mbigpIGlzIGNhbGxlZCBpbiBvcmRlciwgdGhlIGRlbGV0aW9uXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTI1LVxcdCAqIGJsa2NnX211dGV4IGlzIHVzZWQgdG8gc3luY2hyb25pemUgYmxrZ19mcmVlX3dvcmtmbigpIGFuZFxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxMjY6XFx0ICogYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKS5cXG5ibG9jay9ibGstY2dyb3VwLmMtMTI3LVxcdCAqL1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTU2ND1zdGF0aWMgdm9pZCBibGtnX2Rlc3Ryb3lfYWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTU5OC1cXHQgKiBNYXJrIHBvbGljeSBkZWFjdGl2YXRlZCBzaW5jZSBwb2xpY3kgb2ZmbGluZSBoYXMgYmVlbiBkb25lLCBhbmRcXG5ibG9jay9ibGstY2dyb3VwLmM6NTk5OlxcdCAqIHRoZSBmcmVlIGlzIHNjaGVkdWxlZCwgc28gZnV0dXJlIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KCkgY2FuXFxuYmxvY2svYmxrLWNncm91cC5jLTYwMC1cXHQgKiBiZSBieXBhc3NlZFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTgzMT1pbnQgYmxrZ19jb25mX3ByZXAoc3RydWN0IGJsa2NnICpibGtjZywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sLFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTg0NC1cXG5ibG9jay9ibGstY2dyb3VwLmM6ODQ1OlxcdC8qIFByZXZlbnQgY29uY3VycmVudCB3aXRoIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KCkgKi9cXG5ibG9jay9ibGstY2dyb3VwLmMtODQ2LVxcdG11dGV4X2xvY2soXFx1MDAyNnEtXFx1MDAzZWJsa2NnX211dGV4KTtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xNjc3PUVYUE9SVF9TWU1CT0xfR1BMKGJsa2NnX2FjdGl2YXRlX3BvbGljeSk7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTY3OS0vKipcXG5ibG9jay9ibGstY2dyb3VwLmM6MTY4MDogKiBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSAtIGRlYWN0aXZhdGUgYSBibGtjZyBwb2xpY3kgb24gYSBnZW5kaXNrXFxuYmxvY2svYmxrLWNncm91cC5jLTE2ODEtICogQGRpc2s6IGdlbmRpc2sgb2YgaW50ZXJlc3RcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNjg2LSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNjg3OnZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuYmxvY2svYmxrLWNncm91cC5jLTE2ODgtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTcwOS19XFxuYmxvY2svYmxrLWNncm91cC5jOjE3MTA6RVhQT1JUX1NZTUJPTF9HUEwoYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNzExLVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5oPTIwMz1pbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMDQ6dm9pZCBibGtjZ19kZWFjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG5ibG9jay9ibGstY2dyb3VwLmgtMjA1LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD00OTA9c3RhdGljIGlubGluZSBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay1jZ3JvdXAuaC00OTEtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKSB7IHJldHVybiAwOyB9XFxuYmxvY2svYmxrLWNncm91cC5oOjQ5MjpzdGF0aWMgaW5saW5lIHZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuYmxvY2svYmxrLWNncm91cC5oLTQ5My1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgfVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jPTI4OTE9c3RhdGljIHZvaWQgaW9jX3Jxb3NfZXhpdChzdHJ1Y3QgcnFfcW9zICpycW9zKVxcbi0tXFxuYmxvY2svYmxrLWlvY29zdC5jLTI4OTQtXFxuYmxvY2svYmxrLWlvY29zdC5jOjI4OTU6XFx0YmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kocnFvcy1cXHUwMDNlZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV9pb2Nvc3QpO1xcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yODk2LVxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jPTYzNT1zdGF0aWMgdm9pZCBibGtjZ19pb2xhdGVuY3lfZXhpdChzdHJ1Y3QgcnFfcW9zICpycW9zKVxcbi0tXFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTY0MC1cXHRmbHVzaF93b3JrKFxcdTAwMjZibGtpb2xhdC1cXHUwMDNlZW5hYmxlX3dvcmspO1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo2NDE6XFx0YmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3kocnFvcy1cXHUwMDNlZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3kpO1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy02NDItXFx0a2ZyZWUoYmxraW9sYXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MjoyNi44MDU1MDg5OTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ2MDI1MDY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgQ2dyb3VwIFBvbGljeSBUZWFyZG93bioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBibG9jayBjZ3JvdXAgZnVuY3Rpb25zLiBJdCBzZWVtcyBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgIGdldHMgY2FsbGVkIGZyb20gYGJmcV9leGl0X3F1ZXVlYCwgYGlvY19ycW9zX2V4aXRgLCBhbmQgYGJsa2NnX2lvbGF0ZW5jeV9leGl0YC4gQW5kIGNydWNpYWxseSwgYGJsa2dfZGVzdHJveV9hbGxgIGlzIHBhcnQgb2YgdGhlIGNsZWFuLXVwIHByb2Nlc3MgdHJpZ2dlcmVkIGJ5IHRoZSBkZXN0cnVjdGlvbiBvZiBhIGRpc2sgdmlhIGBibGtjZ19leGl0X2Rpc2tgLiBUaGF0IG1ha2VzIHNlbnNlIC0gd2UgbmVlZCB0byBlbnN1cmUgZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoZSBibG9jayBjZ3JvdXAgaXMgcHJvcGVybHkgY2xlYW5lZCB1cCB3aGVuIHRoZSBiYWNraW5nIHN0b3JhZ2UgZ29lcyBhd2F5LlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIHRvdWNoaW5nIHNvbWUga2V5IGFyZWFzOiBgYmxrZ19kZXN0cm95X2FsbGAsIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YC4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IG1hbmFnZSBibG9jayBjZ3JvdXAgcG9saWNpZXMuIEJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgaXQgc2VlbXMgbGlrZSBhIHJhY2UgY29uZGl0aW9uIGlzIGJlaW5nIGZpeGVkLCBhbmQgdGhleSdyZSB1c2luZyBhIGBtdXRleF9sb2NrKFx1MDAyNnEtXHUwMDNlYmxrY2dfbXV0ZXgpYCBpbiBgYmxrZ19kZXN0cm95X2FsbGAgYW5kIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlIGZvciBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgcXVldWUncyBkYXRhIHN0cnVjdHVyZXMuIFRoZXkncmUgYWxzbyBleHRyYWN0aW5nIGBibGtjZ19wb2xpY3lfdGVhcmRvd25fcGRzYCwgd2hpY2ggaXMgdXNlZCBpbiBib3RoIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGFuZCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgIHdoaWNoIGluZGljYXRlcyBzaGFyZWQgdGVhcmRvd24gbG9naWMuXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgY3JpdGljYWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zLCBmaW5kaW5nIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIHdvdWxkIGJlIGltcG9ydGFudC4gSSBzaG91bGQgZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0cyBvbiBgYmxrZ19kZXN0cm95X2FsbGAsIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YCBhcyB0aGVzZSBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzLlxuXG5Ib2xkIG9uLi4uIGBibGtnX2Rlc3Ryb3lfYWxsYCBpcyAqc3RhdGljKi4gVGhhdCdzIGEgbGl0dGxlIGNvbmNlcm5pbmcuIElzIGl0IGlubGluZWQ/IExldCBtZSBxdWlja2x5IGNoZWNrIGBibGstY2dyb3VwLmNgIHRvIHNlZSBpZiB0aGF0J3MgdGhlIGNhc2UuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggY29tcGxldGVseSBiZWZvcmUgYmVnaW5uaW5nIGZ1enppbmcuIElmIGl0J3MgaW5saW5lZCwgSSdsbCBuZWVkIHRvIGFkanVzdCBteSBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTI6MzIuMjY1NzYzNjIzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTc3MjIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtnX2Rlc3Ryb3lfYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstY2dyb3VwLmM9NTE3PXN0YXRpYyB2b2lkIGJsa2dfZGVzdHJveShzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNTI3LVxcdCAqIGJsa2dfZnJlZV93b3JrZm4oKSwgaGVuY2UgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb21cXG5ibG9jay9ibGstY2dyb3VwLmM6NTI4OlxcdCAqIGJsa2NnX2Rlc3Ryb3lfYmxrZ3MoKSBmaXJzdCBhbmQgYWdhaW4gZnJvbSBibGtnX2Rlc3Ryb3lfYWxsKCkgYmVmb3JlXFxuYmxvY2svYmxrLWNncm91cC5jLTUyOS1cXHQgKiBibGtnX2ZyZWVfd29ya2ZuKCkuXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNTYzLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo1NjQ6c3RhdGljIHZvaWQgYmxrZ19kZXN0cm95X2FsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9ibGstY2dyb3VwLmMtNTY1LXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xNDk4PXZvaWQgYmxrY2dfZXhpdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNDk5LXtcXG5ibG9jay9ibGstY2dyb3VwLmM6MTUwMDpcXHRibGtnX2Rlc3Ryb3lfYWxsKGRpc2spO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTAxLVxcdGJsa190aHJvdGxfZXhpdChkaXNrKTtcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE4ODY9dm9pZCBibGtfdGhyb3RsX2V4aXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xODkwLVxcdC8qXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTg5MTpcXHQgKiBibGtnX2Rlc3Ryb3lfYWxsKCkgYWxyZWFkeSBkZWFjdGl2YXRlIHRocm90bCBwb2xpY3ksIGp1c3QgY2hlY2sgYW5kXFxuYmxvY2svYmxrLXRocm90dGxlLmMtMTg5Mi1cXHQgKiBmcmVlIHRocm90bCBkYXRhLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MjozMi4zNjE1NDQ2OTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIwMjQ2NTc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgSS9PIENncm91cCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlbGF0aW9uc2hpcHMgaGVyZSwgc3BlY2lmaWNhbGx5IGZvciBibG9jayBJL08gY2dyb3Vwcy4gVGhlIGZ1bmN0aW9uIGBibGtnX2Rlc3Ryb3lfYWxsYCBpcyBzdGF0aWMgYnV0IG5vdCBpbmxpbmVkLCB3aGljaCBtZWFucyBpdCdzIGxpa2VseSBhIGNyaXRpY2FsIHBpZWNlIGFuZCBJIHNlZSBpdCdzIGNhbGxlZCBieSBgYmxrY2dfZXhpdF9kaXNrYC4gSSBjb3VsZCBmb2N1cyBteSBhbmFseXNpcyBvbiBgYmxrY2dfZXhpdF9kaXNrYCwgb3IgSSBjb3VsZCBpbmNsdWRlIGJvdGgsIGRlcGVuZGluZyBvbiB3aGF0IEkgZmluZCBkdXJpbmcgZGVlcGVyIGRpdmVzLiBBbHNvLCBgYmxrY2dfYWN0aXZhdGVfcG9saWN5YCBhbmQgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YCBhcmUgZXhwb3J0ZWQgZnVuY3Rpb25zLCBzbyBjbGVhcmx5LCB0aGV5J3JlIHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSBiaWdnZXIgcGljdHVyZSDigJMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyBjbGVhciB0aGF0IGBCTEtfQ0dST1VQYCBpcyBlc3NlbnRpYWwsIG5vIHN1cnByaXNlcyB0aGVyZS4gTGV0IG1lIHNlZSB3aGF0IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgd2UgaGF2ZS4gQWgsIGhlcmUgd2UgZ286IGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfREVWX1RIUk9UVExJTkdgLCBgSU9TQ0hFRF9CRlFgLCBhbmQgYEJGUV9HUk9VUF9JT1NDSEVEYC5cblxuVG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEZpcnN0LCBJJ2xsIGNoZWNrIGBpbml0L0tjb25maWdgIHRvIHNlZSB3aGF0IGBCTEtfQ0dST1VQYCBkZXBlbmRzIG9uLiBJdCdzIGxpc3RlZCBhcyBkZXBlbmRpbmcgb24gYEJMT0NLYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4sIEknbGwgbW92ZSBvbiB0byBgYmxvY2svS2NvbmZpZ2AgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIG9mIHRoZSBtb3JlIHNwZWNpZmljIG9wdGlvbnM6IGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfREVWX1RIUk9UVExJTkdgLCBgSU9TQ0hFRF9CRlFgLCBhbmQgYEJGUV9HUk9VUF9JT1NDSEVEYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGNvbmZpZ3MgcmVsYXRlIHRvIGVhY2ggb3RoZXIgdG8gaGF2ZSBhIGNsZWFyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTA5LCJPdXRwdXRUb2tlbnMiOjY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUyOjM3LjU2NDAxMzQzN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1MTcyODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChCTEtfQ0dST1VQX0lPQ09TVHxCTEtfQ0dST1VQX0lPTEFURU5DWXxCTEtfREVWX1RIUk9UVExJTkd8SU9TQ0hFRF9CRlF8QkZRX0dST1VQX0lPU0NIRUQpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnPTk3PWNvbmZpZyBCTEtfREVWX1pPTkVEXFxuLS1cXG5ibG9jay9LY29uZmlnLTEwNS1cXG5ibG9jay9LY29uZmlnOjEwNjpjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXFxuYmxvY2svS2NvbmZpZy0xMDctXFx0Ym9vbCBcXFwiQmxvY2sgbGF5ZXIgYmlvIHRocm90dGxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWc9MTQ1PWNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWcuaW9zY2hlZD0xMD1jb25maWcgTVFfSU9TQ0hFRF9LWUJFUlxcbi0tXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTE4LVxcbmJsb2NrL0tjb25maWcuaW9zY2hlZDoxOTpjb25maWcgSU9TQ0hFRF9CRlFcXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMjAtXFx0dHJpc3RhdGUgXFxcIkJGUSBJL08gc2NoZWR1bGVyXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTI5LVxcbmJsb2NrL0tjb25maWcuaW9zY2hlZDozMDpjb25maWcgQkZRX0dST1VQX0lPU0NIRURcXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMzEtICAgICAgIGJvb2wgXFxcIkJGUSBoaWVyYXJjaGljYWwgc2NoZWR1bGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MjozNy42NTk1MzYyNjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3ODQwNzgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBjb25maWd1cmF0aW9uIG92ZXJoYXVsLCBJIG5lZWQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gdGhlIGRlcGVuZGVuY2llcy4gV2UncmUgdGFsa2luZyBhYm91dCBhIHN5c3RlbSB0aGF0J3MgbGlrZWx5IGludGVyY29ubmVjdGVkIOKAkyBhbmQgYSBtaXNzZWQgY29ubmVjdGlvbiBjYW4gY2F1c2UgYSB3aG9sZSBjYXNjYWRlIG9mIHVuZm9yZXNlZW4gaXNzdWVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBkbyB0aGVzZSBjb25maWdzIHNpdCB3aXRoaW4gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmU/XCIuIEknbSBnb2luZyB0byBtYXAgb3V0IHRoZSByZWxhdGlvbnNoaXBzOyB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBzZXJ2aWNlcywgb3IgZXZlbiBleHRlcm5hbCBzeXN0ZW1zIHJlbHkgb24gdGhlc2Ugc3BlY2lmaWMgc2V0dGluZ3MuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBicmVha3MgaWYgSSBjaGFuZ2UgWCwgWSwgb3IgWi4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGxpc3RpbmcgdGhlIG9idmlvdXMgZGlyZWN0IGRlcGVuZGVuY2llcywgYnV0IGFsc28gdGhlIG1vcmUgc3VidGxlLCBwZXJoYXBzIGluZGlyZWN0LCByZWxhdGlvbnNoaXBzLiBJIG5lZWQgdG8gdGhpbmsgbGlrZSBhIHNlYXNvbmVkIGFyY2hpdGVjdCBoZXJlLCBwcmUtZW1wdGl2ZWx5IGNvbnNpZGVyaW5nIGFsbCBwb3NzaWJsZSBpbXBsaWNhdGlvbnMgYW5kIHNpZGUgZWZmZWN0cy4gVGltZSB0byBjaGVjayB0aGUgY2hhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjAwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTI6NDAuNTM3OTQ3MDc0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRCbG9jayBsYXllciB6b25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydC4gVGhpcyBvcHRpb24gZW5hYmxlc1xcbiAxMDE6XFx0XFx0c3VwcG9ydCBmb3IgWkFDL1pCQy9aTlMgaG9zdC1tYW5hZ2VkIGFuZCBob3N0LWF3YXJlIHpvbmVkIGJsb2NrXFxuIDEwMjpcXHRcXHRkZXZpY2VzLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHRTYXkgeWVzIGhlcmUgaWYgeW91IGhhdmUgYSBaQUMsIFpCQywgb3IgWk5TIHN0b3JhZ2UgZGV2aWNlLlxcbiAxMDU6XFx0XFxuIDEwNjpcXHRjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXFxuIDEwNzpcXHRcXHRib29sIFxcXCJCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XFxcIlxcbiAxMDg6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQXFxuIDEwOTpcXHRcXHRzZWxlY3QgQkxLX0NHUk9VUF9SV1NUQVRcXG4gMTEwOlxcdFxcdGhlbHBcXG4gMTExOlxcdFxcdEJsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnQuIEl0IGNhbiBiZSB1c2VkIHRvIGxpbWl0XFxuIDExMjpcXHRcXHR0aGUgSU8gcmF0ZSB0byBhIGRldmljZS4gSU8gcmF0ZSBwb2xpY2llcyBhcmUgcGVyIGNncm91cCBhbmRcXG4gMTEzOlxcdFxcdG9uZSBuZWVkcyB0byBtb3VudCBhbmQgdXNlIGJsa2lvIGNncm91cCBjb250cm9sbGVyIGZvciBjcmVhdGluZ1xcbiAxMTQ6XFx0XFx0Y2dyb3VwcyBhbmQgc3BlY2lmeWluZyBwZXIgZGV2aWNlIElPIHJhdGUgcG9saWNpZXMuXFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gMTE3OlxcdFxcbiAxMTg6XFx0Y29uZmlnIEJMS19XQlRcXG4gMTE5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBibG9jayBkZXZpY2Ugd3JpdGViYWNrIHRocm90dGxpbmdcXFwiXFxuIDEyMDpcXHRcXHRoZWxwXFxuIDEyMTpcXHRcXHRFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBibG9jayBsYXllciB0byB0aHJvdHRsZSBidWZmZXJlZFxcbiAxMjI6XFx0XFx0YmFja2dyb3VuZCB3cml0ZWJhY2sgZnJvbSB0aGUgVk0sIG1ha2luZyBpdCBtb3JlIHNtb290aCBhbmQgaGF2aW5nXFxuIDEyMzpcXHRcXHRsZXNzIGltcGFjdCBvbiBmb3JlZ3JvdW5kIG9wZXJhdGlvbnMuIFRoZSB0aHJvdHRsaW5nIGlzIGRvbmVcXG4gMTI0OlxcdFxcdGR5bmFtaWNhbGx5IG9uIGFuIGFsZ29yaXRobSBsb29zZWx5IGJhc2VkIG9uIENvRGVsLCBmYWN0b3JpbmcgaW5cXG4gMTI1OlxcdFxcdHRoZSByZWFsdGltZSBwZXJmb3JtYW5jZSBvZiB0aGUgZGlzay5cXG4gMTI2OlxcdFxcbiAxMjc6XFx0Y29uZmlnIEJMS19XQlRfTVFcXG4gMTI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB3cml0ZWJhY2sgdGhyb3R0bGluZyBieSBkZWZhdWx0XFxcIlxcbiAxMjk6XFx0XFx0ZGVmYXVsdCB5XFxuIDEzMDpcXHRcXHRkZXBlbmRzIG9uIEJMS19XQlRcXG4gMTMxOlxcdFxcdGhlbHBcXG4gMTMyOlxcdFxcdEVuYWJsZSB3cml0ZWJhY2sgdGhyb3R0bGluZyBieSBkZWZhdWx0IGZvciByZXF1ZXN0LWJhc2VkIGJsb2NrIGRldmljZXMuXFxuIDEzMzpcXHRcXG4gMTM0OlxcdGNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxcbiAxMzU6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cXFwiXFxuIDEzNjpcXHRcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcXG4gMTM3OlxcdFxcdGhlbHBcXG4gMTM4OlxcdFxcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIC5sYXRlbmN5IGludGVyZmFjZSBmb3IgSU8gdGhyb3R0bGluZy5cXG4gMTM5OlxcdFxcdFRoZSBJTyBjb250cm9sbGVyIHdpbGwgYXR0ZW1wdCB0byBtYWludGFpbiBhdmVyYWdlIElPIGxhdGVuY2llcyBiZWxvd1xcbiAxNDA6XFx0XFx0dGhlIGNvbmZpZ3VyZWQgbGF0ZW5jeSB0YXJnZXQsIHRocm90dGxpbmcgYW55Ym9keSB3aXRoIGEgaGlnaGVyIGxhdGVuY3lcXG4gMTQxOlxcdFxcdHRhcmdldCB0aGFuIHRoZSB2aWN0aW1pemVkIGdyb3VwLlxcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHROb3RlLCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBpbnRlcmZhY2UgYW5kIGNvdWxkIGJlIGNoYW5nZWQgc29tZWRheS5cXG4gMTQ0OlxcdFxcbiAxNDU6XFx0Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcXG4gMTQ2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXFxcIlxcbiAxNDc6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfQ0dST1VQIFxcdTAwMjZcXHUwMDI2IE5WTUVfRkNcXG4gMTQ4OlxcdFxcdGhlbHBcXG4gMTQ5OlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gdHJhZmZpYyBhY3Jvc3NcXG4gMTUwOlxcdFxcdCAgY2dyb3VwIGFwcGxpY2F0aW9ucy4gSXQgZW5hYmxlcyB0aGUgRmFicmljIGFuZCB0aGUgc3RvcmFnZSB0YXJnZXRzIHRvXFxuIDE1MTpcXHRcXHQgIGlkZW50aWZ5LCBtb25pdG9yLCBhbmQgaGFuZGxlIEZDIHRyYWZmaWMgYmFzZWQgb24gVk0gdGFncyBieSBpbnNlcnRpbmdcXG4gMTUyOlxcdFxcdCAgYXBwbGljYXRpb24gc3BlY2lmaWMgaWRlbnRpZmljYXRpb24gaW50byB0aGUgRkMgZnJhbWUuXFxuIDE1MzpcXHRcXG4gMTU0OlxcdGNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxcbiAxNTU6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcXFwiXFxuIDE1NjpcXHRcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcXG4gMTU3OlxcdFxcdHNlbGVjdCBCTEtfUlFfQUxMT0NfVElNRVxcbiAxNTg6XFx0XFx0aGVscFxcbiAxNTk6XFx0XFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgLndlaWdodCBpbnRlcmZhY2UgZm9yIGNvc3RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTI6NDAuNTM4MDY4MDI0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTI5NDk1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbjogaW9zY2hlZCBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIGNoZWNrIGBibG9jay9LY29uZmlnLmlvc2NoZWRgLlwiIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IHdoYXQncyBjb250cm9sbGluZyB0aGUgSS9PIHNjaGVkdWxlciBvcHRpb25zLiBLbm93aW5nIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBpcyB0aGUgYmVkcm9jaywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIGJsb2NrIGRldmljZSBtYW5hZ2VtZW50IGFuZCBJL08gcGVyZm9ybWFuY2UgdHVuaW5nLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zIOKAkyB0aGUgbWFjcm9zLCB0aGUgZGVmYXVsdCBzZWxlY3Rpb25zLCB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgYSBjbGVhciB2aWV3IG9mIGhvdyBkaWZmZXJlbnQgc2NoZWR1bGVycyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHRoZSB1bmRlcmx5aW5nIGxvZ2ljIHRoYXQgZ292ZXJucyB0aG9zZSBkZWNpc2lvbnMgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIFRoaXMgZmlsZSBsaWtlbHkgZGVmaW5lcyB0aGUgYENPTkZJR19gIG9wdGlvbnMgcmVsYXRlZCB0byBzcGVjaWZpYyBzY2hlZHVsZXJzIGxpa2UgQ0ZRLCBEZWFkbGluZSwgQkZRLCBvciBtYXliZSBldmVuIGV4cGVyaW1lbnRhbCBvbmVzLiBJdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBrbm9icyBmb3IgSS9PIG9wdGltaXphdGlvbiBvbiB0aGlzIHN5c3RlbS4gVWx0aW1hdGVseSwgSSdtIGV4cGVjdGluZyB0byBjb25maXJtIHdoYXQgaXMgYXZhaWxhYmxlIGFuZCBob3cgdG8gY3VzdG9taXplIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzcwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1Mjo0My45MzEwMjExMzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svS2NvbmZpZy5pb3NjaGVkXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0bWVudSBcXFwiSU8gU2NoZWR1bGVyc1xcXCJcXG4gICAzOlxcdFxcbiAgIDQ6XFx0Y29uZmlnIE1RX0lPU0NIRURfREVBRExJTkVcXG4gICA1OlxcdFxcdHRyaXN0YXRlIFxcXCJNUSBkZWFkbGluZSBJL08gc2NoZWR1bGVyXFxcIlxcbiAgIDY6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIE1RIHZlcnNpb24gb2YgdGhlIGRlYWRsaW5lIElPIHNjaGVkdWxlci5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE1RX0lPU0NIRURfS1lCRVJcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJLeWJlciBJL08gc2NoZWR1bGVyXFxcIlxcbiAgMTI6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIFRoZSBLeWJlciBJL08gc2NoZWR1bGVyIGlzIGEgbG93LW92ZXJoZWFkIHNjaGVkdWxlciBzdWl0YWJsZSBmb3JcXG4gIDE1OlxcdFxcdCAgbXVsdGlxdWV1ZSBhbmQgb3RoZXIgZmFzdCBkZXZpY2VzLiBHaXZlbiB0YXJnZXQgbGF0ZW5jaWVzIGZvciByZWFkcyBhbmRcXG4gIDE2OlxcdFxcdCAgc3luY2hyb25vdXMgd3JpdGVzLCBpdCB3aWxsIHNlbGYtdHVuZSBxdWV1ZSBkZXB0aHMgdG8gYWNoaWV2ZSB0aGF0XFxuICAxNzpcXHRcXHQgIGdvYWwuXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBJT1NDSEVEX0JGUVxcbiAgMjA6XFx0XFx0dHJpc3RhdGUgXFxcIkJGUSBJL08gc2NoZWR1bGVyXFxcIlxcbiAgMjE6XFx0XFx0c2VsZWN0IEJMS19JQ1FcXG4gIDIyOlxcdFxcdGhlbHBcXG4gIDIzOlxcdFxcdEJGUSBJL08gc2NoZWR1bGVyIGZvciBCTEstTVEuIEJGUSBkaXN0cmlidXRlcyB0aGUgYmFuZHdpZHRoIG9mXFxuICAyNDpcXHRcXHRvZiB0aGUgZGV2aWNlIGFtb25nIGFsbCBwcm9jZXNzZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHdlaWdodHMsXFxuICAyNTpcXHRcXHRyZWdhcmRsZXNzIG9mIHRoZSBkZXZpY2UgcGFyYW1ldGVycyBhbmQgd2l0aCBhbnkgd29ya2xvYWQuIEl0XFxuICAyNjpcXHRcXHRhbHNvIGd1YXJhbnRlZXMgYSBsb3cgbGF0ZW5jeSB0byBpbnRlcmFjdGl2ZSBhbmQgc29mdFxcbiAgMjc6XFx0XFx0cmVhbC10aW1lIGFwcGxpY2F0aW9ucy4gIERldGFpbHMgaW5cXG4gIDI4OlxcdFxcdERvY3VtZW50YXRpb24vYmxvY2svYmZxLWlvc2NoZWQucnN0XFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBCRlFfR1JPVVBfSU9TQ0hFRFxcbiAgMzE6XFx0ICAgICAgIGJvb2wgXFxcIkJGUSBoaWVyYXJjaGljYWwgc2NoZWR1bGluZyBzdXBwb3J0XFxcIlxcbiAgMzI6XFx0ICAgICAgIGRlcGVuZHMgb24gSU9TQ0hFRF9CRlEgXFx1MDAyNlxcdTAwMjYgQkxLX0NHUk9VUFxcbiAgMzM6XFx0ICAgICAgIGRlZmF1bHQgeVxcbiAgMzQ6XFx0ICAgICAgIHNlbGVjdCBCTEtfQ0dST1VQX1JXU1RBVFxcbiAgMzU6XFx0XFx0aGVscFxcbiAgMzY6XFx0XFxuICAzNzpcXHQgICAgICAgRW5hYmxlIGhpZXJhcmNoaWNhbCBzY2hlZHVsaW5nIGluIEJGUSwgdXNpbmcgdGhlIGJsa2lvXFxuICAzODpcXHQgICAgICAgKGNncm91cHMtdjEpIG9yIGlvIChjZ3JvdXBzLXYyKSBjb250cm9sbGVyLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRjb25maWcgQkZRX0NHUk9VUF9ERUJVR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1Mjo0My45MzExMjI5OTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4MzI3ODY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkFuYWx5emluZyBCbG9jayBJL08gU2NoZWR1bGVyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgYmxvY2sgSS9PIGNvbmZpZ3VyYXRpb25zLiBJIHNlZSBhIGZldyBrZXkgc3ltYm9scyBoZXJlOiBgQkxLX0NHUk9VUGAsIGBCTEtfREVWX1RIUk9UVExJTkdgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgSU9TQ0hFRF9CRlFgLCBhbmQgYEJGUV9HUk9VUF9JT1NDSEVEYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGdldCB0aGlzIHJpZ2h0LlxuXG5Ib2xkIG9uLCBJIHNlZSBgSU9TQ0hFRF9CRlFgIGlzIGEgdHJpc3RhdGUuIFRoYXQgbWVhbnMgaXQgY2FuIHBvdGVudGlhbGx5IGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBzbyBpdCdzIHByb2JhYmx5IHRoZSBtb3N0IGltcG9ydGFudCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBmb2N1cyBvbiBoZXJlLCBhcyBJJ2xsIHdhbnQgdG8gbGlzdCB0aGF0IG9uZS4gSSdsbCBqdXN0IGxpc3QgYElPU0NIRURfQkZRYC5cblxuTm93LCBJIHJlbWVtYmVyIGBCTEtfQ0dST1VQYC4gRG9lc24ndCB0aGF0IGRlcGVuZCBvbiBzb21ldGhpbmc/IFllcywgaXQgZGVwZW5kcyBvbiBgQkxPQ0tgLiBUaGF0J3MgaW1wb3J0YW50LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZW50cnkgdG8gYmUgc3VyZSwgYW5kIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLlxuXG5BaGEsIGBCTEtfQ0dST1VQYCBpcyBpbmRlZWQgaW4gYGluaXQvS2NvbmZpZ2AgYW5kIGV4cGxpY2l0bHkgZGVwZW5kcyBvbiBgQkxPQ0tgLiBBbmQgYEJMT0NLYCBpcyB1c3VhbGx5IGVuYWJsZWQsIHNvIHRoYXQncyBnb29kLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBjb3JlIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgZmVhdHVyZXMuIFRoZSByZWxldmFudCBzeW1ib2xzIHNlZW0gdG8gYmU6IGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2V4aXRfZGlza2AuXG5cbkkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBibGtjZ19leGl0X2Rpc2tgIGlzbid0IHN0YXRpYyBhbmQgaXMgcmVhY2hhYmxlLiBJdCdzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgaXQncyBhY3R1YWxseSB1c2VkIGFuZCB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBpdHMgbGlua2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1ODMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1Mjo0OS4wMTQ0MDQyMzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMDY4ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2NnX2V4aXRfZGlza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNncm91cC5jPTE0NTM9aW50IGJsa2NnX2luaXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNDYxLVxcdCAqIHByZXZpb3VzIGRpc2sncyBibGtjZyBzdGF0ZSBpcyBjbGVhbmVkIHVwIGFzeW5jaHJvbm91c2x5IHZpYVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNDYyOlxcdCAqIGRpc2tfcmVsZWFzZSgpIC1cXHUwMDNlIGJsa2NnX2V4aXRfZGlzaygpLiBXYWl0IGZvciB0aGF0IGNsZWFudXAgdG9cXG5ibG9jay9ibGstY2dyb3VwLmMtMTQ2My1cXHQgKiBmaW5pc2ggKGluZGljYXRlZCBieSByb290X2Jsa2cgYmVjb21pbmcgTlVMTCkgYmVmb3JlIHNldHRpbmcgdXBcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNDk3LVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNDk4OnZvaWQgYmxrY2dfZXhpdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNDk5LXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0xOTc9aW50IGJsa2NnX2luaXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XFxuYmxvY2svYmxrLWNncm91cC5oOjE5ODp2b2lkIGJsa2NnX2V4aXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XFxuYmxvY2svYmxrLWNncm91cC5oLTE5OS1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD00ODY9c3RhdGljIGlubGluZSBpbnQgYmxrY2dfaW5pdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKSB7IHJldHVybiAwOyB9XFxuYmxvY2svYmxrLWNncm91cC5oOjQ4NzpzdGF0aWMgaW5saW5lIHZvaWQgYmxrY2dfZXhpdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKSB7IH1cXG5ibG9jay9ibGstY2dyb3VwLmgtNDg4LXN0YXRpYyBpbmxpbmUgaW50IGJsa2NnX3BvbGljeV9yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTI3Mj1zdGF0aWMgdm9pZCBkaXNrX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMjk2LVxcbmJsb2NrL2dlbmhkLmM6MTI5NzpcXHRibGtjZ19leGl0X2Rpc2soZGlzayk7XFxuYmxvY2svZ2VuaGQuYy0xMjk4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1Mjo0OS4wODY0NzkwNjJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgwMTUxNzU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvcmUgRnVuY3Rpb25zIGFuZCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIGBibGtjZ19leGl0X2Rpc2tgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgYW5kIGNhbGxlZCBmcm9tIGBkaXNrX3JlbGVhc2VgLiBUaGF0IGNvbmZpcm1zIGl0IGFzIGEga2V5IGFyZWEuIFRoZSBwYXRjaCBtb2RpZmllcyBgYmxrZ19kZXN0cm95X2FsbGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBibGtjZ19leGl0X2Rpc2tgLCBzbyB0aGF0IHN0cmVuZ3RoZW5zIGl0cyBpbXBvcnRhbmNlLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYW5hbHlzaXMgb24gdGhlc2UgdGhyZWU6IGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2V4aXRfZGlza2AuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGlmIGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBvciBpZiBpdCBjYW4gYmUgdHJpZ2dlcmVkIGR5bmFtaWNhbGx5LiBJIHNlZSBpdCdzIGNhbGxlZCBieSBhIGZldyBrZXkgZnVuY3Rpb25zOiBgYmxrX2lvY29zdF9pbml0YCwgYGJsa19pb2xhdGVuY3lfaW5pdGAsIGBibGtfdGhyb3RsX2luaXRgLCBhbmQgYGJmcV9jcmVhdGVfZ3JvdXBfaGllcmFyY2h5YC4gYGJmcV9jcmVhdGVfZ3JvdXBfaGllcmFyY2h5YCBmaXJlcyB3aGVuIGEgY2dyb3VwIGlzIGNyZWF0ZWQgb3IgQkZRIGlzIGluaXRpYWxpemVkLCBzbyBkZWZpbml0ZWx5IGR5bmFtaWMuIGBibGtfaW9jb3N0X2luaXRgIGlzIGFsc28gdHJpZ2dlcmVkIHdoZW4gaW9jb3N0IGlzIGVuYWJsZWQgb24gYSBkaXNrLiBFeGNlbGxlbnQsIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBpZGVhIG9mIHdoZW4gdGhvc2UgZnVuY3Rpb25zIGFyZSBpbnZva2VkLlxuXG5XYWl0LCBsb29raW5nIGFnYWluLCBgYmxrY2dfYWN0aXZhdGVfcG9saWN5YCBhbmQgYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5YCBhcmUgKnRoZSogZnVuY3Rpb25zIHRoYXQgYXJlIGFjdHVhbGx5IGJlaW5nIG1vZGlmaWVkLiBJIHNob3VsZCBpbmNsdWRlIHRob3NlIGluIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIHRoZSBjb2RlLCBJIHNlZTogYEJMS19DR1JPVVBgLCBgQkxLX0RFVl9USFJPVFRMSU5HYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYElPU0NIRURfQkZRYCwgYW5kIGBCRlFfR1JPVVBfSU9TQ0hFRGAuIEknbGwgaGF2ZSB0byBrZWVwIHRob3NlIGluIG1pbmQuXG5cbkknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBqdXN0IHRvIGJlIHN1cmUuIEhtbSwgYEJMS19DR1JPVVBfRkNfQVBQSURgIGRlcGVuZHMgb24gYE5WTUVfRkNgLiBJdCBjb3VsZCBiZSBpbnRlcmVzdGluZywgYnV0IHByb2JhYmx5IGhhcmRlciB0byB0ZXN0LiBMZXQncyBzZWUgaWYgaXQncyBldmVuIHJlbGV2YW50IGhlcmUuIE5vLCBpdCBkb2Vzbid0IHV0aWxpemUgYGJsa2NnX2FjdGl2YXRlX3BvbGljeWAuIE9rYXksIEknbGwgc3RpY2sgd2l0aCB0aGUgb3JpZ2luYWwgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY2NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1Mjo1NS44ODc5OTk3MDRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDQ3MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2NnX2FjdGl2YXRlX3BvbGljeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmZxLWNncm91cC5jPTEyNTQ9c3RydWN0IGJmcV9ncm91cCAqYmZxX2NyZWF0ZV9ncm91cF9oaWVyYXJjaHkoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBpbnQgbm9kZSlcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjU3LVxcbmJsb2NrL2JmcS1jZ3JvdXAuYzoxMjU4OlxcdHJldCA9IGJsa2NnX2FjdGl2YXRlX3BvbGljeShiZnFkLVxcdTAwM2VxdWV1ZS1cXHUwMDNlZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV9iZnEpO1xcbmJsb2NrL2JmcS1jZ3JvdXAuYy0xMjU5LVxcdGlmIChyZXQpXFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTcxOTY9c3RhdGljIGludCBiZnFfaW5pdF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplcSlcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNzMyOC1cXHQgKiBmdW5jdGlvbiBpcyB0aGUgaGVhZCBvZiBhIGNoYWluIG9mIGZ1bmN0aW9uIGNhbGxzXFxuYmxvY2svYmZxLWlvc2NoZWQuYzo3MzI5OlxcdCAqIChiZnFfY3JlYXRlX2dyb3VwX2hpZXJhcmNoeS1cXHUwMDNlYmxrY2dfYWN0aXZhdGVfcG9saWN5LVxcdTAwM2VcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTczMzAtXFx0ICogYmxrX21xX2ZyZWV6ZV9xdWV1ZSkgdGhhdCBtYXkgbGVhZCB0byB0aGUgaW52b2NhdGlvbiBvZiB0aGVcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xNTM1PXN0YXRpYyB2b2lkIGJsa2NnX3BvbGljeV90ZWFyZG93bl9wZHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTU1Ny0vKipcXG5ibG9jay9ibGstY2dyb3VwLmM6MTU1ODogKiBibGtjZ19hY3RpdmF0ZV9wb2xpY3kgLSBhY3RpdmF0ZSBhIGJsa2NnIHBvbGljeSBvbiBhIGdlbmRpc2tcXG5ibG9jay9ibGstY2dyb3VwLmMtMTU1OS0gKiBAZGlzazogZ2VuZGlzayBvZiBpbnRlcmVzdFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE1NzItICovXFxuYmxvY2svYmxrLWNncm91cC5jOjE1NzM6aW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTc0LXtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNjc2LX1cXG5ibG9jay9ibGstY2dyb3VwLmM6MTY3NzpFWFBPUlRfU1lNQk9MX0dQTChibGtjZ19hY3RpdmF0ZV9wb2xpY3kpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNjc4LVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE2ODQtICogRGVhY3RpdmF0ZSBAcG9sIG9uIEBkaXNrLiAgRm9sbG93cyB0aGUgc2FtZSBzeW5jaHJvbml6YXRpb24gcnVsZXMgYXNcXG5ibG9jay9ibGstY2dyb3VwLmM6MTY4NTogKiBibGtjZ19hY3RpdmF0ZV9wb2xpY3koKS5cXG5ibG9jay9ibGstY2dyb3VwLmMtMTY4Ni0gKi9cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMDI9dm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMDM6aW50IGJsa2NnX2FjdGl2YXRlX3BvbGljeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKTtcXG5ibG9jay9ibGstY2dyb3VwLmgtMjA0LXZvaWQgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9NDg5PXN0YXRpYyBpbmxpbmUgdm9pZCBibGtjZ19wb2xpY3lfdW5yZWdpc3RlcihzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wpIHsgfVxcbmJsb2NrL2Jsay1jZ3JvdXAuaDo0OTA6c3RhdGljIGlubGluZSBpbnQgYmxrY2dfYWN0aXZhdGVfcG9saWN5KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay1jZ3JvdXAuaC00OTEtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJsa2NnX3BvbGljeSAqcG9sKSB7IHJldHVybiAwOyB9XFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmM9MjkxNT1zdGF0aWMgaW50IGJsa19pb2Nvc3RfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYy0yOTY2LVxcbmJsb2NrL2Jsay1pb2Nvc3QuYzoyOTY3OlxcdHJldCA9IGJsa2NnX2FjdGl2YXRlX3BvbGljeShkaXNrLCBcXHUwMDI2YmxrY2dfcG9saWN5X2lvY29zdCk7XFxuYmxvY2svYmxrLWlvY29zdC5jLTI5NjgtXFx0aWYgKHJldClcXG4tLVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz03NTg9c3RhdGljIGludCBibGtfaW9sYXRlbmN5X2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtNzcwLVxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjc3MTpcXHRyZXQgPSBibGtjZ19hY3RpdmF0ZV9wb2xpY3koZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV9pb2xhdGVuY3kpO1xcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYy03NzItXFx0aWYgKHJldClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTEzMTg9c3RhdGljIGludCBibGtfdGhyb3RsX2luaXQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xMzM4LVxcdC8qIGFjdGl2YXRlIHBvbGljeSwgYmxrX3Rocm90bF9hY3RpdmF0ZWQoKSB3aWxsIHJldHVybiB0cnVlICovXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTMzOTpcXHRyZXQgPSBibGtjZ19hY3RpdmF0ZV9wb2xpY3koZGlzaywgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwpO1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNDAtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1Mjo1NS45NDY0NTE3MjNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNjQyNjcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgSS9PIENncm91cCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGJsb2NrIEkvTyBjZ3JvdXAgc3R1ZmYsIGFuZCBpdCBsb29rcyBsaWtlIGBCTEtfQ0dST1VQX0ZDX0FQUElEYCBpc24ndCByZWxldmFudCBoZXJlLiBNeSBmb2N1cyBpcyBvbiB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCAqZG8qIGNvbWUgaW50byBwbGF5LiBMZXQgbWUgc2VlLi4uIHRoZSBrZXkgcGxheWVycyBhcmUgY2xlYXJseSBgQkxLX0NHUk9VUGAsIGBCTEtfREVWX1RIUk9UVExJTkdgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgSU9TQ0hFRF9CRlFgLCBhbmQgYEJGUV9HUk9VUF9JT1NDSEVEYC4gSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCBhIGZldyBvZiB0aGVzZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhleSBpbnRlcmFjdC4gTm93LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGBCTEtfQ0dST1VQX0lPUFJJT2AgYW5kIHNlZSB3aGVyZSB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MzUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTI6NTkuMTUyODgyNDY3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDM5NjA4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrY2dfYWN0aXZhdGVfcG9saWN5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay1pb3ByaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTI6NTkuMjIzMjg2MTk2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDAyNjU1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5IG9mIHRoZXNlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBgQkxLX0NHUk9VUF9JT1BSSU9gIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFwcGVhcnMgdG8gYmUgYSByZWQgaGVycmluZzsgaXQgZG9lc24ndCB1dGlsaXplIHdoYXRldmVyIGZ1bmN0aW9uYWxpdHkgSSdtIGV4cGxvcmluZy4gVGltZSB0byBicm9hZGVuIHRoZSBzZWFyY2guIEkgbmVlZCB0byBzeXN0ZW1hdGljYWxseSBsb29rIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBTaW5jZSBJJ20gZGlnZ2luZyBpbnRvIGBjZ3JvdXBgLXJlbGF0ZWQgaXRlbXMsIHRoZSBgQ0dST1VQU2Agb3B0aW9uIGl0c2VsZiBpcyBkZWZpbml0ZWx5IHdvcnRoIGluY2x1ZGluZyBpbiBteSBzZWFyY2gsIGp1c3QgdG8gYmUgY29tcHJlaGVuc2l2ZS4gV2hpbGUgYEJMS19DR1JPVVBgIGxpa2VseSBwdWxscyBpdCBpbiBhcyBhIGRlcGVuZGVuY3ksIEkgd2FudCB0byBiZSAqY2VydGFpbiouIFRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcywgSSdsbCBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlOiBgaW5pdC9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBvZiBgQkxLX0NHUk9VUGAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGV2ZXJ5dGhpbmcgaXMgY29ubmVjdGVkIGFuZCBlbnN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA4MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUzOjAyLjUyMzU1NDA5OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYzNDY0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19DR1JPVVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDk5PWNvbmZpZyBNRU1DR19WMVxcbi0tXFxuaW5pdC9LY29uZmlnLTExMTUtXFxuaW5pdC9LY29uZmlnOjExMTY6Y29uZmlnIEJMS19DR1JPVVBcXG5pbml0L0tjb25maWctMTExNy1cXHRib29sIFxcXCJJTyBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MzowMi42MTk5MDQ2MzdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2OTgxMzI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipSZXZpc2l0aW5nIGBpbml0L0tjb25maWdgIExpbmUgMTExNioqXG5cbk9rYXksIHRpbWUgdG8gcmUtZXhhbWluZSBgaW5pdC9LY29uZmlnYCBhcm91bmQgbGluZSAxMTE2LiBJIGhhdmUgYSBodW5jaCwgYmFzZWQgb24gdGhlIHJlY2VudCBkZWJ1Z2dpbmcgSSd2ZSBiZWVuIGRvaW5nIHdpdGggW3NwZWNpZmljIGFyZWEsIGFzc3VtaW5nIGV4cGVydCBoYXMga25vd2xlZGdlIG9mIHJlbGV2YW50IGFyZWFdLiBJIGtub3cgdGhlIG1vZHVsZSdzIGludGVyYWN0aW9ucyB3aXRoIGl0cyBlbnZpcm9ubWVudCBjYW4gYmUgdHJpY2t5IGFuZCBzdWJ0bGUuIEknbSBmb2N1c2luZyBvbiB0aGF0IHNwZWNpZmljIGxpbmUgYmVjYXVzZSBpdCdzIHRoZSBtb3N0IGxpa2VseSBhcmVhIHRoYXQgSSB0aGluayBtaWdodCBuZWVkIGF0dGVudGlvbi4gSSdtIGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgdGhhdCBsaW5lLiBQZXJoYXBzIHRoZXJlIGlzIGEgZm9yZ290dGVuIGRlcGVuZGVuY3k/IE9yIG1heWJlIHRoZXJlJ3MgYSBtaXNzZWQgaW50ZXJhY3Rpb24gd2l0aCBhbm90aGVyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGU/IEknbSBhbnRpY2lwYXRpbmcgZmluZGluZyB0aGUgcm9vdCBjYXVzZSBvZiBbYnJpZWZseSBzdGF0ZSBwcm9ibGVtXSB0aHJvdWdoIHRoaXMgZm9jdXNlZCByZXZpZXcuIEknbGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYW55IGNsdWVzIG9yIGFub21hbGllcyBhbmQgY29uc2lkZXJpbmcgYW55IHJlY2VudCBjb21taXRzIGluIHRoYXQgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MzowNS41ODk3MjA4NzRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTEwOlxcdFxcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxcbjExMTE6XFx0XFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXFxuMTExMjpcXHRcXHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cXG4xMTEzOlxcdFxcbjExMTQ6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTExNTpcXHRcXG4xMTE2OlxcdGNvbmZpZyBCTEtfQ0dST1VQXFxuMTExNzpcXHRcXHRib29sIFxcXCJJTyBjb250cm9sbGVyXFxcIlxcbjExMTg6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbjExMTk6XFx0XFx0ZGVmYXVsdCBuXFxuMTEyMDpcXHRcXHRoZWxwXFxuMTEyMTpcXHRcXHRHZW5lcmljIGJsb2NrIElPIGNvbnRyb2xsZXIgY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyB0aGUgY29tbW9uXFxuMTEyMjpcXHRcXHRjZ3JvdXAgaW50ZXJmYWNlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHZhcmlvdXMgSU8gY29udHJvbGxpbmdcXG4xMTIzOlxcdFxcdHBvbGljaWVzLlxcbjExMjQ6XFx0XFxuMTEyNTpcXHRcXHRDdXJyZW50bHksIENGUSBJTyBzY2hlZHVsZXIgdXNlcyBpdCB0byByZWNvZ25pemUgdGFzayBncm91cHMgYW5kXFxuMTEyNjpcXHRcXHRjb250cm9sIGRpc2sgYmFuZHdpZHRoIGFsbG9jYXRpb24gKHByb3BvcnRpb25hbCB0aW1lIHNsaWNlIGFsbG9jYXRpb24pXFxuMTEyNzpcXHRcXHR0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCBpcyBhbHNvIHVzZWQgYnkgYmlvIHRocm90dGxpbmcgbG9naWMgaW5cXG4xMTI4OlxcdFxcdGJsb2NrIGxheWVyIHRvIGltcGxlbWVudCB1cHBlciBsaW1pdCBpbiBJTyByYXRlcyBvbiBhIGRldmljZS5cXG4xMTI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MzowNS41ODk4ODczMzRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5OTEwMTk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBIaWVyYXJjaHkqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBCTEtfQ0dST1VQYCBhY3R1YWxseSBuZXN0ZWQgKndpdGhpbiogdGhlIGBtZW51Y29uZmlnIENHUk9VUFNgIHN0cnVjdHVyZSBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24/IFRoYXQgc2VlbXMgYSBiaXQgdW51c3VhbCwgYW5kIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyByZWxhdGlvbnNoaXAgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXNlIG9wdGlvbnMgYXJlIGxpbmtlZCwgYXMgdGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaG93IEknbSBlbmFibGluZyBvciBkaXNhYmxpbmcgY2dyb3VwLXJlbGF0ZWQgYmxvY2sgSS9PIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk5NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTM6MDguNDg4OTkxOTMzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjA2MTQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIENHUk9VUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDQ0PWNvbmZpZyBTTEFCX09CSl9FWFRcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDQ2LVxcbmluaXQvS2NvbmZpZzoxMDQ3Om1lbnVjb25maWcgQ0dST1VQU1xcbmluaXQvS2NvbmZpZy0xMDQ4LVxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTM6MDguNTQ1MDU4NDAyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NjExMDIxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJsb2NrIENncm91cCBSYWNlIENvbmRpdGlvbiBGaXgqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgKmRlZmluaXRlbHkqIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgYENHUk9VUFNgLiBUaGF0J3MgdGhlIGZvdW5kYXRpb24gd2UncmUgd29ya2luZyB3aXRoIGhlcmUsIHNvIGl0IGdvZXMgcmlnaHQgYXQgdGhlIHRvcCBvZiBteSBtZW50YWwgbGlzdC5cblxuUmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLiBJJ3ZlIGdvdCB0byBjb25zaWRlcjogYENHUk9VUFNgLCBvZiBjb3Vyc2UsIHRoZW4gYEJMS19DR1JPVVBgLCBgQkxLX0RFVl9USFJPVFRMSU5HYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYElPU0NIRURfQkZRYCwgYW5kIGBCRlFfR1JPVVBfSU9TQ0hFRGAuIFRob3NlIGFyZSB0aGUga2V5IHBpZWNlcyBjb25maWd1cmluZyB0aGUgYmxvY2sgY2dyb3VwIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnM6IGBibGtjZ19hY3RpdmF0ZV9wb2xpY3lgLCBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lgLCBhbmQgYGJsa2NnX2V4aXRfZGlza2AuIFRob3NlIGFyZSB0aGUgc3ltYm9saWMgZm9jaSBvZiB0aGUgZml4LiBUaGUgcmVhc29uaW5nLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgYSByYWNlIGNvbmRpdGlvbiBleGlzdHMgZHVyaW5nIHRoZSBhY3RpdmF0aW9uIGFuZCBkZWFjdGl2YXRpb24gb2YgYmxvY2sgY2dyb3VwIHBvbGljaWVzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBkaXNrIHRlYXJkb3duLiBUaGUgZml4IGludHJvZHVjZXMgYSBtdXRleCBsb2NrIHRvIGFkZHJlc3MgdGhpcy4gVGhvc2UgYXJlIGNvcmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGR5bmFtaWNhbGx5IHRyaWdnZXJlZCB3aGVuIGVuYWJsaW5nL2Rpc2FibGluZyBjZ3JvdXAgcG9saWNpZXMgb3IgZGVzdHJveWluZyBibG9jayBkZXZpY2VzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBgYmxrY2dfZXhpdF9kaXNrYCBpcyB0aGUgcmlnaHQgZnVuY3Rpb24gaGVyZS4gTGV0IG1lIHRyYWNlIHRoYXQuIEFoLCB5ZXMsIGBibGtnX2Rlc3Ryb3lfYWxsYCBpcyBjYWxsZWQgYnkgYGJsa2NnX2V4aXRfZGlza2AsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGRpc2tfcmVsZWFzZWAuIFNvIGl0ICppcyogcmVhY2hhYmxlIGFzIHBhcnQgb2YgdGhlIGRpc2sgcmVsZWFzZSBwcm9jZXNzLiBUaGF0IGNvbmZpcm1zIGl0LlxuXG5Ob3cgSSBjYW4gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI0OSwiT3V0cHV0VG9rZW5zIjoxNzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTM6MTQuNDA2MTYyOTI4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNjgyODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCTEtfREVWX1RIUk9UVExJTkdcIixcbiAgICBcIkJMS19DR1JPVVBfSU9MQVRFTkNZXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVFwiLFxuICAgIFwiSU9TQ0hFRF9CRlFcIixcbiAgICBcIkJGUV9HUk9VUF9JT1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrY2dfYWN0aXZhdGVfcG9saWN5XCIsXG4gICAgXCJibGtjZ19kZWFjdGl2YXRlX3BvbGljeVwiLFxuICAgIFwiYmxrY2dfZXhpdF9kaXNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBibG9jayBjZ3JvdXAgcG9saWN5IGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uIGFuZCBkaXNrIHRlYXJkb3duIGJ5IGFkZGluZyBhIG11dGV4IGxvY2suIFRoZXNlIGFyZSBjb3JlIGJsb2NrIGNncm91cCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGR5bmFtaWNhbGx5IHdoZW4gZW5hYmxpbmcvZGlzYWJsaW5nIGNncm91cCBwb2xpY2llcyBvciBkZXN0cm95aW5nIGJsb2NrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiQkxLX0NHUk9VUFwiLFxuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0NPU1RcIixcbiAgICBcIklPU0NIRURfQkZRXCIsXG4gICAgXCJCRlFfR1JPVVBfSU9TQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa2NnX2FjdGl2YXRlX3BvbGljeVwiLFxuICAgIFwiYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3lcIixcbiAgICBcImJsa2NnX2V4aXRfZGlza1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYmxvY2sgY2dyb3VwIHBvbGljeSBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiBhbmQgZGlzayB0ZWFyZG93biBieSBhZGRpbmcgYSBtdXRleCBsb2NrLiBUaGVzZSBhcmUgY29yZSBibG9jayBjZ3JvdXAgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBkeW5hbWljYWxseSB3aGVuIGVuYWJsaW5nL2Rpc2FibGluZyBjZ3JvdXAgcG9saWNpZXMgb3IgZGVzdHJveWluZyBibG9jayBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowv94wz[1] Phase: Succeeded StartedAt: 2026-08-02 18:53:37 +0000 UTC FinishedAt: 2026-08-02 18:53:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 18:53:37 +0000 UTC FinishedAt: 2026-08-02 18:53:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2] Phase: Succeeded StartedAt: 2026-08-02 18:53:37 +0000 UTC FinishedAt: 2026-08-02 22:46:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 18:53:37 +0000 UTC FinishedAt: 2026-08-02 22:46:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 18:53:37 +0000 UTC FinishedAt: 2026-08-02 18:53:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 18:53:37 +0000 UTC FinishedAt: 2026-08-02 18:53:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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-workflowv94wz/series-workflowv94wz-convert-artifact-2533229766/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 18:53:59 +0000 UTC FinishedAt: 2026-08-02 19:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 18:53:59 +0000 UTC FinishedAt: 2026-08-02 19:20:44 +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:*95c9f4bd-2a65-40e0-9cbf-1a42d485270f,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-workflowv94wz/series-workflowv94wz-convert-artifact-2533229766/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": "ed45ee44-270b-4e1c-9932-ea2f3c7f3c33", "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-workflowv94wz/series-workflowv94wz-build-action-3807040092/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 18:53:59 +0000 UTC FinishedAt: 2026-08-02 19:20:25 +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:*95c9f4bd-2a65-40e0-9cbf-1a42d485270f,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-workflowv94wz/series-workflowv94wz-convert-artifact-2533229766/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": "ed45ee44-270b-4e1c-9932-ea2f3c7f3c33", "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-workflowv94wz/series-workflowv94wz-build-action-3807040092/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:20:44 +0000 UTC FinishedAt: 2026-08-02 19:20:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:20:44 +0000 UTC FinishedAt: 2026-08-02 19:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:20:45 +0000 UTC FinishedAt: 2026-08-02 19:21:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:20:45 +0000 UTC FinishedAt: 2026-08-02 19:21:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-workflowv94wz/series-workflowv94wz-convert-artifact-833158425/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:21:16 +0000 UTC FinishedAt: 2026-08-02 19:23:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:21:16 +0000 UTC FinishedAt: 2026-08-02 19:22:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ed45ee44-270b-4e1c-9932-ea2f3c7f3c33,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-workflowv94wz/series-workflowv94wz-build-action-3807040092/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-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:23:02 +0000 UTC FinishedAt: 2026-08-02 19:23:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:23:02 +0000 UTC FinishedAt: 2026-08-02 19:23:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:23:02 +0000 UTC FinishedAt: 2026-08-02 19:42:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:23:02 +0000 UTC FinishedAt: 2026-08-02 19:42:27 +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:*95c9f4bd-2a65-40e0-9cbf-1a42d485270f,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-workflowv94wz/series-workflowv94wz-convert-artifact-833158425/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": "8658a741-c78d-4795-8f64-d5f0e5c8b2f5", "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-workflowv94wz/series-workflowv94wz-build-action-2777877621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:23:02 +0000 UTC FinishedAt: 2026-08-02 19:42:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*95c9f4bd-2a65-40e0-9cbf-1a42d485270f,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-workflowv94wz/series-workflowv94wz-convert-artifact-833158425/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": "8658a741-c78d-4795-8f64-d5f0e5c8b2f5", "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-workflowv94wz/series-workflowv94wz-build-action-2777877621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:42:27 +0000 UTC FinishedAt: 2026-08-02 19:42:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:42:27 +0000 UTC FinishedAt: 2026-08-02 19:42:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:42:27 +0000 UTC FinishedAt: 2026-08-02 19:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:42:27 +0000 UTC FinishedAt: 2026-08-02 19:44:07 +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:*8658a741-c78d-4795-8f64-d5f0e5c8b2f5,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-workflowv94wz/series-workflowv94wz-build-action-2777877621/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-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:44:19 +0000 UTC FinishedAt: 2026-08-02 22:46:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:44:19 +0000 UTC FinishedAt: 2026-08-02 22:46:23 +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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"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:*ed45ee44-270b-4e1c-9932-ea2f3c7f3c33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8658a741-c78d-4795-8f64-d5f0e5c8b2f5,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-workflowv94wz/series-workflowv94wz-build-action-3807040092/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-workflowv94wz/series-workflowv94wz-build-action-2777877621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:44:19 +0000 UTC FinishedAt: 2026-08-02 19:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:44:19 +0000 UTC FinishedAt: 2026-08-02 19:44:39 +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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"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-workflowv94wz/series-workflowv94wz-convert-artifact-3818219022/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:44:19 +0000 UTC FinishedAt: 2026-08-02 19:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:44:19 +0000 UTC FinishedAt: 2026-08-02 19:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:44:19 +0000 UTC FinishedAt: 2026-08-02 19:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:44:52 +0000 UTC FinishedAt: 2026-08-02 22:46:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv94wz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"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":["blkcg_activate_policy","blkcg_deactivate_policy","blkcg_exit_disk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"f8dcdb2a-7098-48f2-b459-b3553fd4e76e","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-02 19:44:52 +0000 UTC FinishedAt: 2026-08-02 22:46:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ed45ee44-270b-4e1c-9932-ea2f3c7f3c33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8658a741-c78d-4795-8f64-d5f0e5c8b2f5,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-workflowv94wz/series-workflowv94wz-build-action-3807040092/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-workflowv94wz/series-workflowv94wz-build-action-2777877621/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-workflowv94wz/series-workflowv94wz-convert-artifact-3818219022/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,}