Name: series-workflows57vp Phase: Succeeded StartedAt: 2026-09-02 19:19:58 +0000 UTC FinishedAt: 2026-09-02 23:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[0] Phase: Succeeded StartedAt: 2026-09-02 19:19:58 +0000 UTC FinishedAt: 2026-09-02 19:37:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 19:19:58 +0000 UTC FinishedAt: 2026-09-02 19:37:57 +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": "96c8ea3c5add7920b3c43840d1ea76b3354c8d2d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "96c8ea3c5add7920b3c43840d1ea76b3354c8d2d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "30acce16-60ce-442b-bc57-a1684c13593e" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "loop_clear_limits_workfn", "loop_clear_limits", "lo_fallocate", "loop_configure" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BfY2xlYXJfbGltaXRzX3dvcmtmbiYjMzQ7LAogICAgJiMzNDtsb29wX2NsZWFyX2xpbWl0cyYjMzQ7LAogICAgJiMzNDtsb19mYWxsb2NhdGUmIzM0OywKICAgICYjMzQ7bG9vcF9jb25maWd1cmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0cmFuc2l0aW9ucyB0aGUgbG9vcCBkcml2ZXImIzM5O3MgcXVldWUgbGltaXRzIGNsZWFyaW5nIGxvZ2ljIGZyb20gc3luY2hyb25vdXMgZXhlY3V0aW9uIGluc2lkZSByZXF1ZXN0IGhhbmRsaW5nIHRvIGFuIGFzeW5jaHJvbm91cyB3b3JrcXVldWUgKGBjbGVhcl9saW1pdHNfd29ya2ApIHVzaW5nIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oKWAuXG5cbkFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdCBmaWVsZHMgKGBjbGVhcl9saW1pdHNfd29ya2AgYW5kIGBjbGVhcl9saW1pdHNfbW9kZWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZDogdGhlIGBsb29wX2RldmljZWAgc3RydWN0IGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCB0aGUgd29yayBpdGVtIGlzIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SSygpYCwgYW5kIHRoZSBhdG9taWMgdmFyaWFibGUgaXMgZXhwbGljaXRseSByZXNldCB3aXRoIGBhdG9taWNfc2V0YCAvIGF0b21pYyBvcGVyYXRpb25zLiBUaGUgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIHVzZWQgaW4gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCAod2hpY2ggcmV0dXJucyB0aGUgY3VycmVudCBxdWV1ZSBsaW1pdHMpLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgcXVldWUgZnJlZXppbmcgbG9ja2luZyBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvYmxvY2svbG9vcC5jIHRvIGhhbmRsZSBjbGVhcmluZyBxdWV1ZSBsaW1pdHMgYXN5bmNocm9ub3VzbHkgdmlhIGEgd29ya3F1ZXVlIChjbGVhcl9saW1pdHNfd29yaykgaW5zdGVhZCBvZiBkaXJlY3RseSBpbnNpZGUgcXVldWVfcnEgY29udGV4dC4gVGhpcyBwcm9wZXJseSB1c2VzIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbiB0byBmb2xsb3cgdGhlIHF1ZXVlIGxpbWl0cyBsb2NraW5nIHByb3RvY29sIHdoZW4gZmFsbG9jYXRlIG9wZXJhdGlvbnMgZmFpbCBvbiBsb29wIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTk6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzODM3OGQ4ZGJmODliODFhNDgyMDZmNzk2OWMxOGRkZmNmYjBlNjExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxOTozNjo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA2ZjEyOTc2MDM1YjA5Li4zNjhlYTg1Nzg5NWNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNjcsNiAmIzQzOzY3LDggQEAgc3RydWN0IGxvb3BfZGV2aWNlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHJvb3RjZ19jbWRfbGlzdDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGlkbGVfd29ya2VyX2xpc3Q7XG4gXHRzdHJ1Y3QgcmJfcm9vdCAgICAgICAgICB3b3JrZXJfdHJlZTtcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICBjbGVhcl9saW1pdHNfd29yaztcbiYjNDM7XHRhdG9taWNfdFx0XHRjbGVhcl9saW1pdHNfbW9kZTtcbiBcdHN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHRpbWVyO1xuIFx0Ym9vbFx0XHRcdHN5c2ZzX2luaXRlZDtcbiBcbkBAIC0yMjIsOSAmIzQzOzIyNCwxMiBAQCBzdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxuIFx0XHRrb2JqZWN0X3VldmVudChcdTAwMjZkaXNrX3RvX2Rldihsby1cdTAwM2Vsb19kaXNrKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuJiM0MztzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGNsZWFyX2xpbWl0c193b3JrKTtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4mIzQzO1x0aW50IG1vZGUgPSBhdG9taWNfeGNoZyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gXG4gXHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpXG4gXHRcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuQEAgLTIzNCwxNCAmIzQzOzIzOSwxMyBAQCBzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbiBcdFx0bGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIFhYWDogdGhpcyB1cGRhdGVzIHRoZSBxdWV1ZSBsaW1pdHMgd2l0aG91dCBmcmVlemluZyB0aGUgcXVldWUsIHdoaWNoXG4tXHQgKiBpcyBhZ2FpbnN0IHRoZSBsb2NraW5nIHByb3RvY29sIGFuZCBkYW5nZXJvdXMuICBCdXQgd2UgY2FuJiMzOTt0IGp1c3Rcbi1cdCAqIGZyZWV6ZSB0aGUgcXVldWUgYXMgd2UmIzM5O3JlIGluc2lkZSB0aGUgLVx1MDAzZXF1ZXVlX3JxIG1ldGhvZCBoZXJlLiAgU28gdGhpc1xuLVx0ICogc2hvdWxkIG1vdmUgb3V0IGludG8gYSB3b3JrcXVldWUgdW5sZXNzIHdlIGdldCB0aGUgZmlsZSBvcGVyYXRpb25zIHRvXG4tXHQgKiBhZHZlcnRpc2UgaWYgdGhleSBzdXBwb3J0IHNwZWNpZmljIGZhbGxvY2F0ZSBvcGVyYXRpb25zLlxuLVx0ICovXG4tXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbiYjNDM7XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obG8tXHUwMDNlbG9fcXVldWUsIFx1MDAyNmxpbSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuJiM0Mzt7XG4mIzQzO1x0YXRvbWljX29yKG1vZGUsIFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlKTtcbiYjNDM7XHRzY2hlZHVsZV93b3JrKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbiB9XG4gXG4gc3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxuQEAgLTUxNiw2ICYjNDM7NTIwLDcgQEAgc3RhdGljIGludCBsb29wX3ZhbGlkYXRlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4gc3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IGZpbGU7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gXHRsby1cdTAwM2VvbGRfZ2ZwX21hc2sgPSBtYXBwaW5nX2dmcF9tYXNrKGZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbiBcdG1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbGUtXHUwMDNlZl9tYXBwaW5nLFxuIFx0XHRcdGxvLVx1MDAzZW9sZF9nZnBfbWFzayBcdTAwMjYgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7XG5AQCAtMTc4MSw2ICYjNDM7MTc4Niw3IEBAIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbiBcdGxvb3BfZnJlZV9pZGxlX3dvcmtlcnMobG8sIHRydWUpO1xuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZsby1cdTAwM2V0aW1lcik7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yayk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcdGtmcmVlKGxvKTtcbiB9XG5AQCAtMjEwMCw2ICYjNDM7MjEwNiw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsby1cdTAwM2Vsb19sb2NrKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxvLVx1MDAzZWxvX3dvcmtfbG9jayk7XG4gXHRJTklUX1dPUksoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcbiBcdGRpc2stXHUwMDNlbWFqb3JcdFx0PSBMT09QX01BSk9SO1xuIFx0ZGlzay1cdTAwM2VmaXJzdF9taW5vclx0PSBpIFx1MDAzY1x1MDAzYyBwYXJ0X3NoaWZ0O1xuQEAgLTIxMzgsNiAmIzQzOzIxNDUsMTAgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcbiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIHtcbiYjNDM7XHQvKiBDYW5jZWwgZWFybHk6IHRoZSBxdWV1ZSBtYXkgYmUgaW4gUkNVLWRlbGF5ZWQgZnJlZWluZ1xuJiM0MztcdCAqIGJ5IHRoZSB0aW1lIGxvX2ZyZWVfZGlzaygpIHJ1bnMuICovXG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yayk7XG4mIzQzO1xuIFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4gXHRkZWxfZ2VuZGlzayhsby1cdTAwM2Vsb19kaXNrKTtcbiBcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTk6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuJiMzNDssCiAgICAmIzM0O2xvb3BfY2xlYXJfbGltaXRzJiMzNDssCiAgICAmIzM0O2xvX2ZhbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDtsb29wX2NvbmZpZ3VyZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBoYW5kbGUgY2xlYXJpbmcgcXVldWUgbGltaXRzIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoY2xlYXJfbGltaXRzX3dvcmspIGluc3RlYWQgb2YgZGlyZWN0bHkgaW5zaWRlIHF1ZXVlX3JxIGNvbnRleHQuIFRoaXMgcHJvcGVybHkgdXNlcyBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4gdG8gZm9sbG93IHRoZSBxdWV1ZSBsaW1pdHMgbG9ja2luZyBwcm90b2NvbCB3aGVuIGZhbGxvY2F0ZSBvcGVyYXRpb25zIGZhaWwgb24gbG9vcCBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzgzNzhkOGRiZjg5YjgxYTQ4MjA2Zjc5NjljMThkZGZjZmIwZTYxMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMTk6MzY6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDZmMTI5NzYwMzViMDkuLjM2OGVhODU3ODk1Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC02Nyw2ICYjNDM7NjcsOCBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHJvb3RjZ19jbWRfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBpZGxlX3dvcmtlcl9saXN0OwogCXN0cnVjdCByYl9yb290ICAgICAgICAgIHdvcmtlcl90cmVlOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICBjbGVhcl9saW1pdHNfd29yazsKJiM0MzsJYXRvbWljX3QJCWNsZWFyX2xpbWl0c19tb2RlOwogCXN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHRpbWVyOwogCWJvb2wJCQlzeXNmc19pbml0ZWQ7CiAKQEAgLTIyMiw5ICYjNDM7MjI0LDEyIEBAIHN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpCiAJCWtvYmplY3RfdWV2ZW50KCZhbXA7ZGlza190b19kZXYobG8tJmd0O2xvX2Rpc2spLSZndDtrb2JqLCBLT0JKX0NIQU5HRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKQomIzQzO3N0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiYjNDM7CXN0cnVjdCBsb29wX2RldmljZSAqbG8gPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgY2xlYXJfbGltaXRzX3dvcmspOwogCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUpOwomIzQzOwlpbnQgbW9kZSA9IGF0b21pY194Y2hnKCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c19tb2RlLCAwKTsKIAogCWlmIChtb2RlICZhbXA7IEZBTExPQ19GTF9aRVJPX1JBTkdFKQogCQlsaW0ubWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gMDsKQEAgLTIzNCwxNCAmIzQzOzIzOSwxMyBAQCBzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSkKIAkJbGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwOwogCX0KIAotCS8qCi0JICogWFhYOiB0aGlzIHVwZGF0ZXMgdGhlIHF1ZXVlIGxpbWl0cyB3aXRob3V0IGZyZWV6aW5nIHRoZSBxdWV1ZSwgd2hpY2gKLQkgKiBpcyBhZ2FpbnN0IHRoZSBsb2NraW5nIHByb3RvY29sIGFuZCBkYW5nZXJvdXMuICBCdXQgd2UgY2FuJiMzOTt0IGp1c3QKLQkgKiBmcmVlemUgdGhlIHF1ZXVlIGFzIHdlJiMzOTtyZSBpbnNpZGUgdGhlIC0mZ3Q7cXVldWVfcnEgbWV0aG9kIGhlcmUuICBTbyB0aGlzCi0JICogc2hvdWxkIG1vdmUgb3V0IGludG8gYSB3b3JrcXVldWUgdW5sZXNzIHdlIGdldCB0aGUgZmlsZSBvcGVyYXRpb25zIHRvCi0JICogYWR2ZXJ0aXNlIGlmIHRoZXkgc3VwcG9ydCBzcGVjaWZpYyBmYWxsb2NhdGUgb3BlcmF0aW9ucy4KLQkgKi8KLQlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUsICZhbXA7bGltKTsKJiM0MzsJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKGxvLSZndDtsb19xdWV1ZSwgJmFtcDtsaW0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSkKJiM0Mzt7CiYjNDM7CWF0b21pY19vcihtb2RlLCAmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfbW9kZSk7CiYjNDM7CXNjaGVkdWxlX3dvcmsoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmspOwogfQogCiBzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsCkBAIC01MTYsNiAmIzQzOzUyMCw3IEBAIHN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogc3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWxvLSZndDtsb19iYWNraW5nX2ZpbGUgPSBmaWxlOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c19tb2RlLCAwKTsKIAlsby0mZ3Q7b2xkX2dmcF9tYXNrID0gbWFwcGluZ19nZnBfbWFzayhmaWxlLSZndDtmX21hcHBpbmcpOwogCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbGUtJmd0O2ZfbWFwcGluZywKIAkJCWxvLSZndDtvbGRfZ2ZwX21hc2sgJmFtcDsgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7CkBAIC0xNzgxLDYgJiM0MzsxNzg2LDcgQEAgc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogCQlkZXN0cm95X3dvcmtxdWV1ZShsby0mZ3Q7d29ya3F1ZXVlKTsKIAlsb29wX2ZyZWVfaWRsZV93b3JrZXJzKGxvLCB0cnVlKTsKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7bG8tJmd0O3RpbWVyKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yayk7CiAJbXV0ZXhfZGVzdHJveSgmYW1wO2xvLSZndDtsb19tdXRleCk7CiAJa2ZyZWUobG8pOwogfQpAQCAtMjEwMCw2ICYjNDM7MjEwNiw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtsby0mZ3Q7bG9fbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtsby0mZ3Q7bG9fd29ya19sb2NrKTsKIAlJTklUX1dPUksoJmFtcDtsby0mZ3Q7cm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7CiYjNDM7CUlOSVRfV09SSygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2xvLSZndDtyb290Y2dfY21kX2xpc3QpOwogCWRpc2stJmd0O21ham9yCQk9IExPT1BfTUFKT1I7CiAJZGlzay0mZ3Q7Zmlyc3RfbWlub3IJPSBpICZsdDsmbHQ7IHBhcnRfc2hpZnQ7CkBAIC0yMTM4LDYgJiM0MzsyMTQ1LDEwIEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAKIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiB7CiYjNDM7CS8qIENhbmNlbCBlYXJseTogdGhlIHF1ZXVlIG1heSBiZSBpbiBSQ1UtZGVsYXllZCBmcmVlaW5nCiYjNDM7CSAqIGJ5IHRoZSB0aW1lIGxvX2ZyZWVfZGlzaygpIHJ1bnMuICovCiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmspOwomIzQzOwogCS8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqLwogCWRlbF9nZW5kaXNrKGxvLSZndDtsb19kaXNrKTsKIAlibGtfbXFfZnJlZV90YWdfc2V0KCZhbXA7bG8tJmd0O3RhZ19zZXQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTI3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9vcCBEZXZpY2UgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyB0byB0aGUgYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBmaWxlLiBUaGUgY29yZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBhZGRpbmcgYGNsZWFyX2xpbWl0c193b3JrYCBhbmQgYGNsZWFyX2xpbWl0c19tb2RlYCB0byB0aGUgYHN0cnVjdCBsb29wX2RldmljZWAuIEludHVpdGl2ZWx5LCBJJiMzOTttIGFscmVhZHkgZ3Vlc3NpbmcgdGhpcyBpcyByZWxhdGVkIHRvIGhvdyB0aGUgbG9vcCBkZXZpY2UgaGFuZGxlcyBhbmQgbWFuYWdlcyBpdHMgcXVldWUgbGltaXRzLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdWJzeXN0ZW0uCgpJdCBsb29rcyBsaWtlIHRoZSBgbG9vcF9jbGVhcl9saW1pdHNgIGZ1bmN0aW9uIGhhcyBiZWVuIHJld29ya2VkLiBJbnN0ZWFkIG9mIGRpcmVjdGx5IGNsZWFyaW5nIHRoZSBsaW1pdHMsIGl0IG5vdyBzY2hlZHVsZXMgdGhlIGBsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmtgIHVzaW5nIGEgd29ya3F1ZXVlIGFuZCBhdG9taWMgb3BlcmF0aW9uIHRvIGZldGNoIHRoZSBgY2xlYXJfbGltaXRzX21vZGVgIGJlZm9yZSBjYWxsaW5nIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW5gLiBDYW5jZWxsYXRpb24gb2YgdGhpcyB3b3JrIG9jY3VycyBpbiBgbG9vcF9yZW1vdmVgIGFuZCBgbG9fZnJlZV9kaXNrYCwgd2hpY2ggYXJlIGV4cGVjdGVkIGxvY2F0aW9ucywgd2hpbGUgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSBpbiBgbG9vcF9hZGRgLCBhbmQgYSByZXNldCBvZiBgY2xlYXJfbGltaXRzX21vZGVgIGluIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciBteSB3b3JrIGlzOiBpcyB0aGlzIGFyZWEgb2YgdGhlIGNvZGUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nPyBCYXNlZCBvbiBteSBleHBlcmllbmNlIHdpdGgga2VybmVsIGludGVybmFscywgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9ibG9jay9sb29wLmNgIGFuZCBpdHMgdXNlIGluIHN0YW5kYXJkIGJsb2NrIGRldmljZXMgKGFuZCBrbm93aW5nIHRoZSBwcmV2YWxlbmNlIG9mIGBDT05GSUdfQkxLX0RFVl9MT09QYCksIGluY2x1ZGluZyBpdHMgaGVhdnkgdXNlIGluIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFRoaXMgaXMgYSBjb3JlIHBhcnQgb2YgdGhlIHN5c3RlbSBhbmQgd2lsbCBiZSB0b3VjaGVkIGJ5IHZhcmlvdXMgdGVzdCBzdWl0ZXMuIFRoZSBwYXRjaCYjMzk7cyBpbXBhY3Qgb24gaG93IHF1ZXVlIGxpbWl0cyBhcmUgbWFuYWdlZCBhZnRlciBvcGVyYXRpb25zIGxpa2UgZmFsbG9jYXRlIGZhaWx1cmVzIGNvbmZpcm1zIGl0JiMzOTtzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL2Jsb2NrL2AgYW5kIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gZ2V0IGEgYmV0dGVyIGNvbnRleHQgZm9yIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCB1c2UgdG9vbHMgbGlrZSBncmVwcGVyIGFuZCBmaWxlLXJlYWRpbmcgY29tbWFuZHMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBibG9jayBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTk6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QkxLX0RFVl9MT09QJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTQwPWNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE0NDpjb25maWcgQkxLX0RFVl9MT09QXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQ1LVx0dHJpc3RhdGUgXCYjMzQ7TG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTc4LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE3OTpjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cdGludCBcJiMzNDtOdW1iZXIgb2YgbG9vcCBkZXZpY2VzIHRvIHByZS1jcmVhdGUgYXQgaW5pdCB0aW1lXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTgxOlx0ZGVwZW5kcyBvbiBCTEtfREVWX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODItXHRkZWZhdWx0IDhcbi0tXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR19CTEtfREVWX1JBTSlcdCYjNDM7PSBicmQub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZToyMjpvYmotJChDT05GSUdfQkxLX0RFVl9MT09QKVx0JiM0Mzs9IGxvb3Aub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0yMy1vYmotJChDT05GSUdfU1VOVkRDKVx0XHQmIzQzOz0gc3VudmRjLm9cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNzk0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODEzLSAqIGNoYW5nZWQgdGhlIGRlZmF1bHQgdmFsdWUgZnJvbSAwIGZvciBtYXhfbG9vcD0wIHJlYXNvbnMpLCBqdXN0XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODE0OiAqIGNyZWF0ZSBDT05GSUdfQkxLX0RFVl9MT09QX01JTl9DT1VOVCBsb29wIGRldmljZXMgYXQgbW9kdWxlXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODE1LSAqIGluaXQgdGltZS4gTG9vcCBkZXZpY2VzIGNhbiBiZSByZXF1ZXN0ZWQgb24tZGVtYW5kIHdpdGggdGhlXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgxOC0gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4MTk6c3RhdGljIGludCBtYXhfbG9vcCA9IENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTgyMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzUwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEJsb2NrIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG9vcCBkZXZpY2UgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJsb2NrIGRyaXZlciBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgZHJpdmVycy9ibG9jay9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGJsb2NrIGRldmljZXMgaW4gZ2VuZXJhbCwgYW5kIEnigJltIHByZXR0eSBzdXJlIHRoZSBsb29wIGRldmljZSB3aWxsIGJlIGRlZmluZWQgb3IgYXQgbGVhc3QgcmVmZXJlbmNlZCBhcm91bmQgdGhlIGBDT05GSUdfQkxLX0RFVl9MT09QYCBzeW1ib2wuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IG90aGVyIHJlbGF0ZWQgb3B0aW9ucyBhcmUgcHJlc2VudC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgbG9vcCBkZXZpY2U7IHRoaXMgYEtjb25maWdgIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhhdCBpbmZvcm1hdGlvbi4gTm93LCBsZXQmIzM5O3MgZ28gcG9rZSBhcm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTk6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdGNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cbiAxNDE6XHRcdGJvb2xcbiAxNDI6XHRcdGRlZmF1bHQgQkxLX0RFVl9VQkRcbiAxNDM6XHRcbiAxNDQ6XHRjb25maWcgQkxLX0RFVl9MT09QXG4gMTQ1Olx0XHR0cmlzdGF0ZSBcJiMzNDtMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuIDE0NjpcdFx0aGVscFxuIDE0NzpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIHVzZSBhIHJlZ3VsYXIgZmlsZSBhcyBhIGJsb2NrXG4gMTQ4Olx0XHQgIGRldmljZTsgeW91IGNhbiB0aGVuIGNyZWF0ZSBhIGZpbGUgc3lzdGVtIG9uIHRoYXQgYmxvY2sgZGV2aWNlIGFuZFxuIDE0OTpcdFx0ICBtb3VudCBpdCBqdXN0IGFzIHlvdSB3b3VsZCBtb3VudCBvdGhlciBibG9jayBkZXZpY2VzIHN1Y2ggYXMgaGFyZFxuIDE1MDpcdFx0ICBkcml2ZSBwYXJ0aXRpb25zLCBDRC1ST00gZHJpdmVzIG9yIGZsb3BweSBkcml2ZXMuIFRoZSBsb29wIGRldmljZXNcbiAxNTE6XHRcdCAgYXJlIGJsb2NrIHNwZWNpYWwgZGV2aWNlIGZpbGVzIHdpdGggbWFqb3IgbnVtYmVyIDcgYW5kIHR5cGljYWxseVxuIDE1MjpcdFx0ICBjYWxsZWQgL2Rldi9sb29wMCwgL2Rldi9sb29wMSBldGMuXG4gMTUzOlx0XG4gMTU0Olx0XHQgIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNoZWNrIGFuIElTTyA5NjYwIGZpbGUgc3lzdGVtIGJlZm9yZVxuIDE1NTpcdFx0ICBidXJuaW5nIHRoZSBDRCwgb3IgaWYgeW91IHdhbnQgdG8gdXNlIGZsb3BweSBpbWFnZXMgd2l0aG91dCBmaXJzdFxuIDE1NjpcdFx0ICB3cml0aW5nIHRoZW0gdG8gZmxvcHB5LiBGdXJ0aGVybW9yZSwgc29tZSBMaW51eCBkaXN0cmlidXRpb25zIGF2b2lkXG4gMTU3Olx0XHQgIHRoZSBuZWVkIGZvciBhIGRlZGljYXRlZCBMaW51eCBwYXJ0aXRpb24gYnkga2VlcGluZyB0aGVpciBjb21wbGV0ZVxuIDE1ODpcdFx0ICByb290IGZpbGUgc3lzdGVtIGluc2lkZSBhIERPUyBGQVQgZmlsZSB1c2luZyB0aGlzIGxvb3AgZGV2aWNlXG4gMTU5Olx0XHQgIGRyaXZlci5cbiAxNjA6XHRcbiAxNjE6XHRcdCAgVG8gdXNlIHRoZSBsb29wIGRldmljZSwgeW91IG5lZWQgdGhlIGxvc2V0dXAgdXRpbGl0eSwgZm91bmQgaW4gdGhlXG4gMTYyOlx0XHQgIHV0aWwtbGludXggcGFja2FnZSwgc2VlXG4gMTYzOlx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL3V0aWwtbGludXgvXHUwMDNlLlxuIDE2NDpcdFxuIDE2NTpcdFx0ICBUaGUgbG9vcCBkZXZpY2UgZHJpdmVyIGNhbiBhbHNvIGJlIHVzZWQgdG8gXCYjMzQ7aGlkZVwmIzM0OyBhIGZpbGUgc3lzdGVtIGluXG4gMTY2Olx0XHQgIGEgZGlzayBwYXJ0aXRpb24sIGZsb3BweSwgb3IgcmVndWxhciBmaWxlLCBlaXRoZXIgdXNpbmcgZW5jcnlwdGlvblxuIDE2NzpcdFx0ICAoc2NyYW1ibGluZyB0aGUgZGF0YSkgb3Igc3RlZ2Fub2dyYXBoeSAoaGlkaW5nIHRoZSBkYXRhIGluIHRoZSBsb3dcbiAxNjg6XHRcdCAgYml0cyBvZiwgc2F5LCBhIHNvdW5kIGZpbGUpLiBUaGlzIGlzIGFsc28gc2FmZSBpZiB0aGUgZmlsZSByZXNpZGVzXG4gMTY5Olx0XHQgIG9uIGEgcmVtb3RlIGZpbGUgc2VydmVyLlxuIDE3MDpcdFxuIDE3MTpcdFx0ICBOb3RlIHRoYXQgdGhpcyBsb29wIGRldmljZSBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBsb29wYmFja1xuIDE3MjpcdFx0ICBkZXZpY2UgdXNlZCBmb3IgbmV0d29yayBjb25uZWN0aW9ucyBmcm9tIHRoZSBtYWNoaW5lIHRvIGl0c2VsZi5cbiAxNzM6XHRcbiAxNzQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMTc1Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsb29wLlxuIDE3NjpcdFxuIDE3NzpcdFx0ICBNb3N0IHVzZXJzIHdpbGwgYW5zd2VyIE4gaGVyZS5cbiAxNzg6XHRcbiAxNzk6XHRjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGxvb3AuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBlc3BlY2lhbGx5IHRoZSBmdW5jdGlvbnMgYXQgcGxheSBhbmQgd2hlcmUgdGhleSYjMzk7cmUgYmVpbmcgY2FsbGVkIGZyb20uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYGxvb3AuY2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHNlZSB0aGUga2V5IGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiBpdCwgYW5kIHRoZW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIGhvdyB0aGV5IGFyZSB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8gaXMgY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgYW5kIHdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgaW52b2tpbmcgdGhpcyBsb29wIGxvZ2ljLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHRzIHdpbGwgZ2l2ZSBtZSBpbXBvcnRhbnQgY2x1ZXMgYWJvdXQgdGhlIGRhdGEgYmVpbmcgcHJvY2Vzc2VkIGFuZCB0aGUgb3ZlcmFsbCBvYmplY3RpdmUgb2YgdGhpcyBjb2RlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wX2NsZWFyX2xpbWl0c3xsb19mYWxsb2NhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMjE9c3RhdGljIHZvaWQgbG9vcF9zZXRfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBsb2ZmX3Qgc2l6ZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjYtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjc6c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyOC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQ0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjQ1OnN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQ2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNTAtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyNTE6c3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjUyLVx0XHRcdGludCBtb2RlKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI3NC1cdGlmICh1bmxpa2VseShyZXQgPT0gLUVPUE5PVFNVUFApKVxuZHJpdmVycy9ibG9jay9sb29wLmM6Mjc1Olx0XHRsb29wX2NsZWFyX2xpbWl0cyhsbywgbW9kZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNzYtXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9NDE0PXN0YXRpYyBpbnQgZG9fcmVxX2ZpbGViYWNrZWQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQyNi1cdFx0ICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0Mjc6XHRcdHJldHVybiBsb19mYWxsb2NhdGUobG8sIHJxLCBwb3MsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MjgtXHRcdFx0KHJxLVx1MDAzZWNtZF9mbGFncyBcdTAwMjYgUkVRX05PVU5NQVApID9cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MzEtXHRjYXNlIFJFUV9PUF9ESVNDQVJEOlxuZHJpdmVycy9ibG9jay9sb29wLmM6NDMyOlx0XHRyZXR1cm4gbG9fZmFsbG9jYXRlKGxvLCBycSwgcG9zLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MzMtXHRjYXNlIFJFUV9PUF9XUklURTpcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDI3PXN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjEwOC1cdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2Vyb290Y2dfd29yaywgbG9vcF9yb290Y2dfd29ya2ZuKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIxMDk6XHRJTklUX1dPUksoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmssIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbik7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTEwLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDkzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9vcCBCbG9jayBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBJIG5lZWQgdG8gcGlucG9pbnQgc29tZSByb2J1c3QgYEZvY3VzU3ltYm9sc2Agd2l0aGluIHRoaXMgZmlsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9ucyBhcm91bmQgYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAsIGBsb29wX2NsZWFyX2xpbWl0c2AsIGBsb19mYWxsb2NhdGVgLCBgbG9vcF9jb25maWd1cmVgLCBhbmQgYGxvb3Bfc2V0X3N0YXR1c2AgYXMgd2VsbCBhcyBgbG9vcF9jb250cm9sX2lvY3RsYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzLiBOZXh0LCBJJiMzOTtsbCBzeXN0ZW1hdGljYWxseSBzZWFyY2ggZm9yIGFueSBub24tc3RhdGljIG9yIGVudHJ5LXBvaW50IGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBhbnkgd29yayBxdWV1ZSBmdW5jdGlvbnMgd2l0aGluIGBsb29wLmNgLiBUaGF0IHNob3VsZCBnaXZlIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBmaWxlJiMzOTtzIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jPTgyPXN0cnVjdCBsb29wX2NtZCB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtOTUtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5NjpzdGF0aWMgREVGSU5FX0lEUihsb29wX2luZGV4X2lkcik7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5NzpzdGF0aWMgREVGSU5FX01VVEVYKGxvb3BfY3RsX211dGV4KTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk4OnN0YXRpYyBERUZJTkVfTVVURVgobG9vcF92YWxpZGF0ZV9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05OS1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTEtICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTI6c3RhdGljIGludCBsb29wX2dsb2JhbF9sb2NrX2tpbGxhYmxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJvb2wgZ2xvYmFsKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMzItICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMzM6c3RhdGljIHZvaWQgbG9vcF9nbG9iYWxfdW5sb2NrKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJvb2wgZ2xvYmFsKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTM0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDE9c3RhdGljIGludCBwYXJ0X3NoaWZ0O1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTQyLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQzOnN0YXRpYyBsb2ZmX3QgbG9fY2FsY3VsYXRlX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDQte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4My0gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NDpzdGF0aWMgYm9vbCBsb19jYW5fdXNlX2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDItICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDM6c3RhdGljIGlubGluZSB2b2lkIGxvb3BfdXBkYXRlX2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjAtICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjE6c3RhdGljIHZvaWQgbG9vcF9zZXRfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBsb2ZmX3Qgc2l6ZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyMi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI2LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI3OnN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI0NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI0NTpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI0Ni17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjUwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjUxOnN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcyxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI1Mi1cdFx0XHRpbnQgbW9kZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNzktXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyODA6c3RhdGljIGludCBsb19yZXFfZmx1c2goc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjgxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yODgtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyODk6c3RhdGljIHZvaWQgbG9fY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjkwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMjItXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzozMjM6c3RhdGljIHZvaWQgbG9fcndfYWlvX2RvX2NvbXBsZXRpb24oc3RydWN0IGxvb3BfY21kICpjbWQpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMjQte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTMzNi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjMzNzpzdGF0aWMgdm9pZCBsb19yd19haW9fY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJldClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTMzOC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMzQ0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MzQ1OnN0YXRpYyBpbnQgbG9fcndfYWlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2NtZCAqY21kLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMzQ2LVx0XHQgICAgIGxvZmZfdCBwb3MsIGludCBydylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MTMtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0MTQ6c3RhdGljIGludCBkb19yZXFfZmlsZWJhY2tlZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MTUte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ0Mi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ0MzpzdGF0aWMgdm9pZCBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NDQte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ1NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ1NTpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTYte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ4Ny1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ4ODpzdGF0aWMgaW5saW5lIGludCBpc19sb29wX2RldmljZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ4OS17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDk0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6NDk1OnN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDk2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MTktXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MjA6c3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTIxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MzEtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MzI6c3RhdGljIGludCBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUzMy17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTUwLSAqL1xuZHJpdmVycy9ibG9jay9sb29wLmM6NTUxOnN0YXRpYyBpbnQgbG9vcF9jaGFuZ2VfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTU1Mi1cdFx0XHQgIHVuc2lnbmVkIGludCBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNjQ3LVxuZHJpdmVycy9ibG9jay9sb29wLmM6NjQ4OnN0YXRpYyBzc2l6ZV90IGxvb3BfYXR0cl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqcGFnZSxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY0OS1cdFx0XHQgICAgICBzc2l6ZV90ICgqY2FsbGJhY2spKHN0cnVjdCBsb29wX2RldmljZSAqLCBjaGFyICopKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY1Ny0jZGVmaW5lIExPT1BfQVRUUl9STyhfbmFtZSlcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NjU4OnN0YXRpYyBzc2l6ZV90IGxvb3BfYXR0cl8jI19uYW1lIyNfc2hvdyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKiwgY2hhciAqKTtcdFxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo2NTk6c3RhdGljIHNzaXplX3QgbG9vcF9hdHRyX2RvX3Nob3dfIyNfbmFtZShzdHJ1Y3QgZGV2aWNlICpkLFx0XHRcXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNjYwLVx0XHRcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmIpXHRcXFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTY2ND1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgbG9vcF9hdHRyXyMjX25hbWUgPVx0XHRcdFxcXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNjY2LVxuZHJpdmVycy9ibG9jay9sb29wLmM6NjY3OnN0YXRpYyBzc2l6ZV90IGxvb3BfYXR0cl9iYWNraW5nX2ZpbGVfc2hvdyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjaGFyICpidWYpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02Njgte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY4OC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjY4OTpzdGF0aWMgc3NpemVfdCBsb29wX2F0dHJfb2Zmc2V0X3Nob3coc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY2hhciAqYnVmKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNjkwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02OTMtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo2OTQ6c3RhdGljIHNzaXplX3QgbG9vcF9hdHRyX3NpemVsaW1pdF9zaG93KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY5NS17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNjk4LVxuZHJpdmVycy9ibG9jay9sb29wLmM6Njk5OnN0YXRpYyBzc2l6ZV90IGxvb3BfYXR0cl9hdXRvY2xlYXJfc2hvdyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjaGFyICpidWYpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03MDAte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTcwNS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjcwNjpzdGF0aWMgc3NpemVfdCBsb29wX2F0dHJfcGFydHNjYW5fc2hvdyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjaGFyICpidWYpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03MDcte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTcxMi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjcxMzpzdGF0aWMgc3NpemVfdCBsb29wX2F0dHJfZGlvX3Nob3coc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY2hhciAqYnVmKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNzE0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03MTktXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3MjA6TE9PUF9BVFRSX1JPKGJhY2tpbmdfZmlsZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3MjE6TE9PUF9BVFRSX1JPKG9mZnNldCk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3MjI6TE9PUF9BVFRSX1JPKHNpemVsaW1pdCk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3MjM6TE9PUF9BVFRSX1JPKGF1dG9jbGVhcik7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3MjQ6TE9PUF9BVFRSX1JPKHBhcnRzY2FuKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjcyNTpMT09QX0FUVFJfUk8oZGlvKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTcyNi1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz03Mzc9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG9vcF9hdHRyaWJ1dGVfZ3JvdXAgPSB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNzQxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6NzQyOnN0YXRpYyB2b2lkIGxvb3Bfc3lzZnNfaW5pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNzQzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03NDctXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3NDg6c3RhdGljIHZvaWQgbG9vcF9zeXNmc19leGl0KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03NDkte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc1NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjc1NTpzdGF0aWMgdm9pZCBsb29wX2dldF9kaXNjYXJkX2NvbmZpZyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxuZHJpdmVycy9ibG9jay9sb29wLmMtNzU2LVx0XHRcdFx0ICAgIHUzMiAqZ3JhbnVsYXJpdHksIHUzMiAqbWF4X2Rpc2NhcmRfc2VjdG9ycylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz03ODU9c3RydWN0IGxvb3Bfd29ya2VyIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03OTQtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3OTU6c3RhdGljIHZvaWQgbG9vcF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc5Ni1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc5Ny0jaWZkZWYgQ09ORklHX0JMS19DR1JPVVBcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjc5ODpzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9vbl9yb290X3dvcmtlcihzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNzk5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04MDItI2Vsc2VcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjgwMzpzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9vbl9yb290X3dvcmtlcihzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuZHJpdmVycy9ibG9jay9sb29wLmMtODA0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04MDgtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo4MDk6c3RhdGljIHZvaWQgbG9vcF9xdWV1ZV93b3JrKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay9sb29wLmMtODEwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04NzgtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo4Nzk6c3RhdGljIHZvaWQgbG9vcF9zZXRfdGltZXIoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTg4MC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtODgzLVxuZHJpdmVycy9ibG9jay9sb29wLmM6ODg0OnN0YXRpYyB2b2lkIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYm9vbCBkZWxldGVfYWxsKVxuZHJpdmVycy9ibG9jay9sb29wLmMtODg1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05MDQtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5MDU6c3RhdGljIHZvaWQgbG9vcF9mcmVlX2lkbGVfd29ya2Vyc190aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05MDYte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTkyMD1zdGF0aWMgaW50XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5MjE6bG9vcF9zZXRfc3RhdHVzX2Zyb21faW5mbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTIyLVx0XHRcdCAgY29uc3Qgc3RydWN0IGxvb3BfaW5mbzY0ICppbmZvKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk1MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk1MjpzdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfZGVmYXVsdF9ibG9ja3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk1My17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtOTU5LVxuZHJpdmVycy9ibG9jay9sb29wLmM6OTYwOnN0YXRpYyB2b2lkIGxvb3Bfc2V0X2RtYV9saW1pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NjEte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk3Mi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk3MzpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTc0LVx0XHR1bnNpZ25lZCBpbnQgYnNpemUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTAwNy1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwMDg6c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDA5LVx0XHRcdCAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTQxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTE0MjpzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTQzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxNTpzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMjQ5PXN0YXRpYyBpbnRcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyNTA6bG9vcF9zZXRfc3RhdHVzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGNvbnN0IHN0cnVjdCBsb29wX2luZm82NCAqaW5mbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyNTEte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEzMDQ9c3RhdGljIGludFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTMwNTpsb29wX2dldF9zdGF0dXMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfaW5mbzY0ICppbmZvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTMwNi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTM0MD1zdGF0aWMgdm9pZFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTM0MTpsb29wX2luZm82NF9mcm9tX29sZChjb25zdCBzdHJ1Y3QgbG9vcF9pbmZvICppbmZvLCBzdHJ1Y3QgbG9vcF9pbmZvNjQgKmluZm82NClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEzNDIte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEzNTQ9c3RhdGljIGludFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTM1NTpsb29wX2luZm82NF90b19vbGQoY29uc3Qgc3RydWN0IGxvb3BfaW5mbzY0ICppbmZvNjQsIHN0cnVjdCBsb29wX2luZm8gKmluZm8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMzU2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMzc2PXN0YXRpYyBpbnRcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEzNzc6bG9vcF9zZXRfc3RhdHVzX29sZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjb25zdCBzdHJ1Y3QgbG9vcF9pbmZvIF9fdXNlciAqYXJnKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTM3OC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTM4OD1zdGF0aWMgaW50XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMzg5Omxvb3Bfc2V0X3N0YXR1czY0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGNvbnN0IHN0cnVjdCBsb29wX2luZm82NCBfX3VzZXIgKmFyZylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEzOTAte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEzOTg9c3RhdGljIGludFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTM5OTpsb29wX2dldF9zdGF0dXNfb2xkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2luZm8gX191c2VyICphcmcpIHtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0MDAtXHRzdHJ1Y3QgbG9vcF9pbmZvIGluZm87XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTQxNT1zdGF0aWMgaW50XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDE2Omxvb3BfZ2V0X3N0YXR1czY0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2luZm82NCBfX3VzZXIgKmFyZykge1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTQxNy1cdHN0cnVjdCBsb29wX2luZm82NCBpbmZvNjQ7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQyOC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0Mjk6c3RhdGljIGludCBsb29wX3NldF9jYXBhY2l0eShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQzMC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ0MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0NDI6c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDQzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDcxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ3MjpzdGF0aWMgaW50IGxvb3Bfc2V0X2Jsb2NrX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ3My1cdFx0XHQgICAgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUxOS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1MjA6c3RhdGljIGludCBsb19zaW1wbGVfaW9jdGwoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgaW50IGNtZCxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MjEtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1NDI6c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTQzLVx0dW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTYyNj1zdGF0aWMgbm9pbmxpbmUgaW50XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNjI3Omxvb3BfaW5mbzY0X2Zyb21fY29tcGF0KGNvbnN0IHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqYXJnLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTYyOC1cdFx0XHRzdHJ1Y3QgbG9vcF9pbmZvNjQgKmluZm82NClcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNjUxPXN0YXRpYyBub2lubGluZSBpbnRcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE2NTI6bG9vcF9pbmZvNjRfdG9fY29tcGF0KGNvbnN0IHN0cnVjdCBsb29wX2luZm82NCAqaW5mbzY0LFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTY1My1cdFx0ICAgICAgc3RydWN0IGNvbXBhdF9sb29wX2luZm8gX191c2VyICphcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTY3OD1zdGF0aWMgaW50XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNjc5Omxvb3Bfc2V0X3N0YXR1c19jb21wYXQoc3RydWN0IGxvb3BfZGV2aWNlICpsbyxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE2ODAtXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBfX3VzZXIgKmFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNjkxPXN0YXRpYyBpbnRcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE2OTI6bG9vcF9nZXRfc3RhdHVzX2NvbXBhdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTY5My1cdFx0ICAgICAgIHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MDUtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzA2OnN0YXRpYyBpbnQgbG9fY29tcGF0X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MDctXHRcdFx0ICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc0MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3NDI6c3RhdGljIGludCBsb19vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzQzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzU2LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTc1NzpzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc1OC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc4MC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3ODE6c3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc4Mi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTgyMj1zdGF0aWMgYm9vbCBtYXhfbG9vcF9zcGVjaWZpZWQ7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODIzLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgyNDpzdGF0aWMgaW50IG1heF9sb29wX3BhcmFtX3NldF9pbnQoY29uc3QgY2hhciAqdmFsLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgyNS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTgzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgbWF4X2xvb3BfcGFyYW1fb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NDEtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODQyOm1vZHVsZV9wYXJhbV9jYihtYXhfbG9vcCwgXHUwMDI2bWF4X2xvb3BfcGFyYW1fb3BzLCBcdTAwMjZtYXhfbG9vcCwgMDQ0NCk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODQzOk1PRFVMRV9QQVJNX0RFU0MobWF4X2xvb3AsIFwmIzM0O01heGltdW0gbnVtYmVyIG9mIGxvb3AgZGV2aWNlc1wmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQ0LSNlbHNlXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODQ1Om1vZHVsZV9wYXJhbShtYXhfbG9vcCwgaW50LCAwNDQ0KTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NDY6TU9EVUxFX1BBUk1fREVTQyhtYXhfbG9vcCwgXCYjMzQ7SW5pdGlhbCBudW1iZXIgb2YgbG9vcCBkZXZpY2VzXCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NDctI2VuZGlmXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQ4LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg0OTptb2R1bGVfcGFyYW0obWF4X3BhcnQsIGludCwgMDQ0NCk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODUwOk1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsIFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGxvb3AgZGV2aWNlXCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTEtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODUyPXN0YXRpYyBpbnQgaHdfcXVldWVfZGVwdGggPSBMT09QX0RFRkFVTFRfSFdfUV9ERVBUSDtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTMtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODU0OnN0YXRpYyBpbnQgbG9vcF9zZXRfaHdfcXVldWVfZGVwdGgoY29uc3QgY2hhciAqcywgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqcClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTUte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGxvb3BfaHdfcWRlcHRoX3BhcmFtX29wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODcxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3MjpkZXZpY2VfcGFyYW1fY2IoaHdfcXVldWVfZGVwdGgsIFx1MDAyNmxvb3BfaHdfcWRlcHRoX3BhcmFtX29wcywgXHUwMDI2aHdfcXVldWVfZGVwdGgsIDA0NDQpO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3MzpNT0RVTEVfUEFSTV9ERVNDKGh3X3F1ZXVlX2RlcHRoLCBcJiMzNDtRdWV1ZSBkZXB0aCBmb3IgZWFjaCBoYXJkd2FyZSBxdWV1ZS4gRGVmYXVsdDogXCYjMzQ7IF9fc3RyaW5naWZ5KExPT1BfREVGQVVMVF9IV19RX0RFUFRIKSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODc0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3NTpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDspO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3NjpNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3NzpNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoTE9PUF9NQUpPUik7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODc4LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3OTpzdGF0aWMgYmxrX3N0YXR1c190IGxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODgwLVx0XHRjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5MjEtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxOTIyOnN0YXRpYyB2b2lkIGxvb3BfaGFuZGxlX2NtZChzdHJ1Y3QgbG9vcF9jbWQgKmNtZClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5MjMte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5NzMtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxOTc0OnN0YXRpYyB2b2lkIGxvb3BfcHJvY2Vzc193b3JrKHN0cnVjdCBsb29wX3dvcmtlciAqd29ya2VyLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTk3NS1cdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpjbWRfbGlzdCwgc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDA3LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjAwODpzdGF0aWMgdm9pZCBsb29wX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDA5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDE0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjAxNTpzdGF0aWMgdm9pZCBsb29wX3Jvb3RjZ193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjAxNi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjAyMj1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbG9vcF9tcV9vcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjAyNi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIwMjc6c3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwMjgte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxNDUtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTQ2OnN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTQ3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTYzLSNpZmRlZiBDT05GSUdfQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTY0OnN0YXRpYyB2b2lkIGxvb3BfcHJvYmUoZGV2X3QgZGV2KVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE2NS17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE3NS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIxNzY6c3RhdGljIGludCBsb29wX2NvbnRyb2xfcmVtb3ZlKGludCBpZHgpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTc3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjIyLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjIyMzpzdGF0aWMgaW50IGxvb3BfY29udHJvbF9nZXRfZnJlZShpbnQgaWR4KVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjIyNC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI0Ni1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNDc6c3RhdGljIGxvbmcgbG9vcF9jb250cm9sX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI0OC1cdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBwYXJtKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIyNzA9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGxvb3BfbWlzYyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjc1LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI3NjpNT0RVTEVfQUxJQVNfTUlTQ0RFVihMT09QX0NUUkxfTUlOT1IpO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MjI3NzpNT0RVTEVfQUxJQVMoXCYjMzQ7ZGV2bmFtZTpsb29wLWNvbnRyb2xcJiMzNDspO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjI3OC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNzk6c3RhdGljIGludCBfX2luaXQgbG9vcF9pbml0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzMxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjMzMjpzdGF0aWMgdm9pZCBfX2V4aXQgbG9vcF9leGl0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzMzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzUxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjM1Mjptb2R1bGVfaW5pdChsb29wX2luaXQpO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MjM1Mzptb2R1bGVfZXhpdChsb29wX2V4aXQpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjM1NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzNTUtI2lmbmRlZiBNT0RVTEVcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzNTY6c3RhdGljIGludCBfX2luaXQgbWF4X2xvb3Bfc2V0dXAoY2hhciAqc3RyKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjM1Ny17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjM2NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzNjU6X19zZXR1cChcJiMzNDttYXhfbG9vcD1cJiMzNDssIG1heF9sb29wX3NldHVwKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzNjYtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTY1CgkJCQkJCQlvdXRwdXQ6IDEzMwoJCQkJCQkJdGhvdWdodHM6IDQ0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTG9vcCBEZXZpY2UgRHJpdmVyIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaXMgb24gdGhpcyBzcGVjaWZpYyBwYXRjaCB0b3VjaGluZyB0aGUgbG9vcCBkZXZpY2UgZHJpdmVyLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBzeW1ib2xzLiBJJiMzOTttIHplcm9pbmcgaW4gb24gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAsIGBsb29wX2NsZWFyX2xpbWl0c2AsIGBsb19mYWxsb2NhdGVgLCBgbG9vcF9jb25maWd1cmVgLCBgbG9faW9jdGxgLCBhbmQgYGxvb3BfY29udHJvbF9pb2N0bGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfTE9PUGAuIERpdmluZyBpbnRvIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgLCBpdCBsb29rcyBsaWtlIGBCTEtfREVWX0xPT1BgIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQgZGVwZW5kcyBvbiB0aGUgYmxvY2sgZGV2aWNlIGluZnJhc3RydWN0dXJlIGl0c2VsZiAoYEJMT0NLYCksIHdoaWNoIGlzIGhhbmRsZWQgYnkgYENPTkZJR19CTE9DS2AuIFRoYXQmIzM5O3MgZ29vZC4gTm8gb2JzY3VyZSBkZXBlbmRlbmNpZXMgdG8gd29ycnkgYWJvdXQuCgpMZXQmIzM5O3MgZG8gYSBmaW5hbCBzYW5pdHkgY2hlY2ssIHB1bGxpbmcgaXQgYWxsIHRvZ2V0aGVyOiBJJiMzOTt2ZSBnb3QgYFdvcnRoRnV6emluZ2Agc2V0IHRvIHRydWUsIGBFbmFibGVDb25maWdzYCB3aXRoIGAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7YCwgYW5kIGBGb2N1c1N5bWJvbHNgIHNldCB0byBgJiMzNDtsb29wX2NsZWFyX2xpbWl0c193b3JrZm4mIzM0OywgJiMzNDtsb29wX2NsZWFyX2xpbWl0cyYjMzQ7LCAmIzM0O2xvX2ZhbGxvY2F0ZSYjMzQ7LCAmIzM0O2xvb3BfY29uZmlndXJlJiMzNDtgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBUaGlzIHBhdGNoJiMzOTtzIHB1cnBvc2UgaXMgdG8gZGVmZXIgcXVldWUgbGltaXQgdXBkYXRlcyB3aGVuIGBmYWxsb2NhdGVgIG9wZXJhdGlvbnMgZmFpbCwgdXNpbmcgYSB3b3JrcXVldWUgKGBjbGVhcl9saW1pdHNfd29ya2ApIGFuZCBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKClgLiBUaGlzIGRpcmVjdGx5IGFkZHJlc3NlcyBxdWV1ZSBsb2NraW5nIGlzc3VlcyBkdXJpbmcgcmVxdWVzdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBkaXNjYXJkIGFuZCB6ZXJvLXJhbmdlIHF1ZXVlIGxpbWl0IHVwZGF0ZXMuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgYWxsIHRoZSB0b29sIGNhbGxzIGFuZCBwYXJhbWV0ZXJzLiBJdCBsb29rcyBsaWtlIGl0IGlzIHJlYWR5IHRvIGV4ZWN1dGUgd2l0aCBgc2V0LXJlc3VsdHNgLiBFdmVyeXRoaW5nIGlzIGNvcnJlY3QuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGl0IGluIG1vdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTk6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BfY2xlYXJfbGltaXRzX3dvcmtmbiYjMzQ7LAogICAgJiMzNDtsb29wX2NsZWFyX2xpbWl0cyYjMzQ7LAogICAgJiMzNDtsb19mYWxsb2NhdGUmIzM0OywKICAgICYjMzQ7bG9vcF9jb25maWd1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9ibG9jay9sb29wLmMgdG8gaGFuZGxlIGNsZWFyaW5nIHF1ZXVlIGxpbWl0cyBhc3luY2hyb25vdXNseSB2aWEgYSB3b3JrcXVldWUgKGNsZWFyX2xpbWl0c193b3JrKSBpbnN0ZWFkIG9mIGRpcmVjdGx5IGluc2lkZSBxdWV1ZV9ycSBjb250ZXh0LiBUaGlzIHByb3Blcmx5IHVzZXMgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuIHRvIGZvbGxvdyB0aGUgcXVldWUgbGltaXRzIGxvY2tpbmcgcHJvdG9jb2wgd2hlbiBmYWxsb2NhdGUgb3BlcmF0aW9ucyBmYWlsIG9uIGxvb3AgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuJiMzNDssCiAgICAmIzM0O2xvb3BfY2xlYXJfbGltaXRzJiMzNDssCiAgICAmIzM0O2xvX2ZhbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDtsb29wX2NvbmZpZ3VyZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBoYW5kbGUgY2xlYXJpbmcgcXVldWUgbGltaXRzIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoY2xlYXJfbGltaXRzX3dvcmspIGluc3RlYWQgb2YgZGlyZWN0bHkgaW5zaWRlIHF1ZXVlX3JxIGNvbnRleHQuIFRoaXMgcHJvcGVybHkgdXNlcyBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4gdG8gZm9sbG93IHRoZSBxdWV1ZSBsaW1pdHMgbG9ja2luZyBwcm90b2NvbCB3aGVuIGZhbGxvY2F0ZSBvcGVyYXRpb25zIGZhaWwgb24gbG9vcCBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdHJhbnNpdGlvbnMgdGhlIGxvb3AgZHJpdmVyJiMzOTtzIHF1ZXVlIGxpbWl0cyBjbGVhcmluZyBsb2dpYyBmcm9tIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiBpbnNpZGUgcmVxdWVzdCBoYW5kbGluZyB0byBhbiBhc3luY2hyb25vdXMgd29ya3F1ZXVlIChgY2xlYXJfbGltaXRzX3dvcmtgKSB1c2luZyBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKClgLlxuXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3QgZmllbGRzIChgY2xlYXJfbGltaXRzX3dvcmtgIGFuZCBgY2xlYXJfbGltaXRzX21vZGVgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IHRoZSBgbG9vcF9kZXZpY2VgIHN0cnVjdCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgdGhlIHdvcmsgaXRlbSBpcyBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUksoKWAsIGFuZCB0aGUgYXRvbWljIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgcmVzZXQgd2l0aCBgYXRvbWljX3NldGAgLyBhdG9taWMgb3BlcmF0aW9ucy4gVGhlIGBzdHJ1Y3QgcXVldWVfbGltaXRzYCB1c2VkIGluIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gIGlzIGluaXRpYWxpemVkIGZyb20gYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgKHdoaWNoIHJldHVybnMgdGhlIGN1cnJlbnQgcXVldWUgbGltaXRzKS5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIHF1ZXVlIGZyZWV6aW5nIGxvY2tpbmcgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzODM3OGQ4ZGJmODliODFhNDgyMDZmNzk2OWMxOGRkZmNmYjBlNjExCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxOTozNjo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggNmYxMjk3NjAzNWIwOS4uMzY4ZWE4NTc4OTVjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTY3LDYgJiM0Mzs2Nyw4IEBAIHN0cnVjdCBsb29wX2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgcm9vdGNnX2NtZF9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGlkbGVfd29ya2VyX2xpc3Q7CiAJc3RydWN0IHJiX3Jvb3QgICAgICAgICAgd29ya2VyX3RyZWU7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgIGNsZWFyX2xpbWl0c193b3JrOwomIzQzOwlhdG9taWNfdAkJY2xlYXJfbGltaXRzX21vZGU7CiAJc3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7CiAJYm9vbAkJCXN5c2ZzX2luaXRlZDsKIApAQCAtMjIyLDkgJiM0MzsyMjQsMTIgQEAgc3RhdGljIHZvaWQgbG9vcF9zZXRfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBsb2ZmX3Qgc2l6ZSkKIAkJa29iamVjdF91ZXZlbnQoJmFtcDtkaXNrX3RvX2Rldihsby0mZ3Q7bG9fZGlzayktJmd0O2tvYmosIEtPQkpfQ0hBTkdFKTsKIH0KIAotc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpCiYjNDM7c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKJiM0MzsJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9CiYjNDM7CQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBjbGVhcl9saW1pdHNfd29yayk7CiAJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLSZndDtsb19xdWV1ZSk7CiYjNDM7CWludCBtb2RlID0gYXRvbWljX3hjaGcoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX21vZGUsIDApOwogCiAJaWYgKG1vZGUgJmFtcDsgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpCiAJCWxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwOwpAQCAtMjM0LDE0ICYjNDM7MjM5LDEzIEBAIHN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKQogCQlsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7CiAJfQogCi0JLyoKLQkgKiBYWFg6IHRoaXMgdXBkYXRlcyB0aGUgcXVldWUgbGltaXRzIHdpdGhvdXQgZnJlZXppbmcgdGhlIHF1ZXVlLCB3aGljaAotCSAqIGlzIGFnYWluc3QgdGhlIGxvY2tpbmcgcHJvdG9jb2wgYW5kIGRhbmdlcm91cy4gIEJ1dCB3ZSBjYW4mIzM5O3QganVzdAotCSAqIGZyZWV6ZSB0aGUgcXVldWUgYXMgd2UmIzM5O3JlIGluc2lkZSB0aGUgLSZndDtxdWV1ZV9ycSBtZXRob2QgaGVyZS4gIFNvIHRoaXMKLQkgKiBzaG91bGQgbW92ZSBvdXQgaW50byBhIHdvcmtxdWV1ZSB1bmxlc3Mgd2UgZ2V0IHRoZSBmaWxlIG9wZXJhdGlvbnMgdG8KLQkgKiBhZHZlcnRpc2UgaWYgdGhleSBzdXBwb3J0IHNwZWNpZmljIGZhbGxvY2F0ZSBvcGVyYXRpb25zLgotCSAqLwotCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLSZndDtsb19xdWV1ZSwgJmFtcDtsaW0pOwomIzQzOwlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obG8tJmd0O2xvX3F1ZXVlLCAmYW1wO2xpbSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKQomIzQzO3sKJiM0MzsJYXRvbWljX29yKG1vZGUsICZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c19tb2RlKTsKJiM0MzsJc2NoZWR1bGVfd29yaygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yayk7CiB9CiAKIHN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcywKQEAgLTUxNiw2ICYjNDM7NTIwLDcgQEAgc3RhdGljIGludCBsb29wX3ZhbGlkYXRlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCiBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJbG8tJmd0O2xvX2JhY2tpbmdfZmlsZSA9IGZpbGU7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX21vZGUsIDApOwogCWxvLSZndDtvbGRfZ2ZwX21hc2sgPSBtYXBwaW5nX2dmcF9tYXNrKGZpbGUtJmd0O2ZfbWFwcGluZyk7CiAJbWFwcGluZ19zZXRfZ2ZwX21hc2soZmlsZS0mZ3Q7Zl9tYXBwaW5nLAogCQkJbG8tJmd0O29sZF9nZnBfbWFzayAmYW1wOyB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpKTsKQEAgLTE3ODEsNiAmIzQzOzE3ODYsNyBAQCBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spCiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGxvLSZndDt3b3JrcXVldWUpOwogCWxvb3BfZnJlZV9pZGxlX3dvcmtlcnMobG8sIHRydWUpOwogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtsby0mZ3Q7dGltZXIpOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c193b3JrKTsKIAltdXRleF9kZXN0cm95KCZhbXA7bG8tJmd0O2xvX211dGV4KTsKIAlrZnJlZShsbyk7CiB9CkBAIC0yMTAwLDYgJiM0MzsyMTA2LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSkKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2xvLSZndDtsb19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2xvLSZndDtsb193b3JrX2xvY2spOwogCUlOSVRfV09SSygmYW1wO2xvLSZndDtyb290Y2dfd29yaywgbG9vcF9yb290Y2dfd29ya2ZuKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bG8tJmd0O3Jvb3RjZ19jbWRfbGlzdCk7CiAJZGlzay0mZ3Q7bWFqb3IJCT0gTE9PUF9NQUpPUjsKIAlkaXNrLSZndDtmaXJzdF9taW5vcgk9IGkgJmx0OyZsdDsgcGFydF9zaGlmdDsKQEAgLTIxMzgsNiAmIzQzOzIxNDUsMTAgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSkKIAogc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIHsKJiM0MzsJLyogQ2FuY2VsIGVhcmx5OiB0aGUgcXVldWUgbWF5IGJlIGluIFJDVS1kZWxheWVkIGZyZWVpbmcKJiM0MzsJICogYnkgdGhlIHRpbWUgbG9fZnJlZV9kaXNrKCkgcnVucy4gKi8KJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yayk7CiYjNDM7CiAJLyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovCiAJZGVsX2dlbmRpc2sobG8tJmd0O2xvX2Rpc2spOwogCWJsa19tcV9mcmVlX3RhZ19zZXQoJmFtcDtsby0mZ3Q7dGFnX3NldCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTI0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9vcCBEZXZpY2UgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBMZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0JiMzOTtzIGhhcHBlbmluZyBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSYjMzk7cmUgYWRkcmVzc2luZyBzb21lIGNvbmN1cnJlbmN5IGlzc3VlcyByZWxhdGVkIHRvIHF1ZXVlIGxpbWl0cy4KCkZpcnN0LCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgdHdvIG5ldyBtZW1iZXJzIHRvIHRoZSBgc3RydWN0IGxvb3BfZGV2aWNlYDogYSBgc3RydWN0IHdvcmtfc3RydWN0IGNsZWFyX2xpbWl0c193b3JrO2AgYW5kIGFuIGBhdG9taWNfdCBjbGVhcl9saW1pdHNfbW9kZTtgLiBTZWVtcyBsaWtlIHdlJiMzOTtyZSBtb3ZpbmcgdG93YXJkcyBhc3luY2hyb25vdXMgbGltaXQgdXBkYXRlcywgd2hpY2ggaXMgdXN1YWxseSBhIGdvb2Qgc2lnbiBmb3IgYXZvaWRpbmcgdGhvc2UgcGVza3kgcXVldWUgZnJlZXppbmcgcHJvYmxlbXMuCgpTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIHRoZSBzeW5jaHJvbm91cyBjYWxsIHRvIGBsb29wX2NsZWFyX2xpbWl0cyhsbywgbW9kZSlgIHdpdGggYW4gYXN5bmNocm9ub3VzIGFwcHJvYWNoLiBUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gY2FsbGVkIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBhbmQgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlYCBkaXJlY3RseSwgd2hpY2gsIGdpdmVuIHRoZSAmIzM0O2luc2lkZSBgLSZndDtxdWV1ZV9ycWAmIzM0OyBjb250ZXh0LCBwcm9iYWJseSB2aW9sYXRlZCB0aGUgcXVldWUgZnJlZXppbmcgcnVsZXMuCgpOb3csIGBsb29wX2NsZWFyX2xpbWl0c2AgYXRvbWljYWxseSBPUnMgdGhlIGBtb2RlYCBpbnRvIGBsby0mZ3Q7Y2xlYXJfbGltaXRzX21vZGVgIGFuZCBzY2hlZHVsZXMgdGhlIGBsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmtgLiBUaGUgYWN0dWFsIHdvcmsgaXMgZG9uZSBieSBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCwgd2hpY2ggcnVucyBhc3luY2hyb25vdXNseS4gSXQgcmV0cmlldmVzIGFuZCByZXNldHMgYGxvLSZndDtjbGVhcl9saW1pdHNfbW9kZWAgdXNpbmcgYGF0b21pY194Y2hnKCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c19tb2RlLCAwKWAuIFRoZW4gaXQgZmV0Y2hlcyB0aGUgY3VycmVudCBxdWV1ZSBsaW1pdHMgdXNpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKWAsIG1vZGlmaWVzIHRoZW0sIGFuZCBjb21taXRzIHRoZSB1cGRhdGVzIHVzaW5nIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obG8tJmd0O2xvX3F1ZXVlLCAmYW1wO2xpbSlgLiBNYWtlcyBzZW5zZTsgaXQmIzM5O3MgYSBzdGFuZGFyZCBwYXR0ZXJuIGZvciBkZWZlcnJpbmcgd29yayBhbmQgYXZvaWRpbmcgbG9jayBjb250ZW50aW9uLgoKSSBzZWUgYElOSVRfV09SSygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKWAgYmVpbmcgY2FsbGVkIGR1cmluZyBgbG9vcF9hZGRgIGZvciBpbml0aWFsaXphdGlvbiwgYW5kIGBhdG9taWNfc2V0KCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c19tb2RlLCAwKWAgaXMgc2V0IGR1cmluZyBgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlYCwgc28gd2UmIzM5O3JlIGluaXRpYWxpemluZyB0aGUgd29yayBzdHJ1Y3QgYW5kIHRoZSBtb2RlIGFwcHJvcHJpYXRlbHkuIEFuZCBmaW5hbGx5LCB0aGUgcGF0Y2ggYWRkcyBgY2FuY2VsX3dvcmtfc3luYygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yaylgIGluIGBsb19mcmVlX2Rpc2tgIGFuZCBgbG9vcF9yZW1vdmVgIHRvIGVuc3VyZSB3ZSBkb24mIzM5O3QgbGVhayBhbnl0aGluZyB3aGVuIHRoZSBkZXZpY2UgaXMgdG9ybiBkb3duLiBHb29kIGhvdXNla2VlcGluZy4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgaXNzdWVzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGlzIGxpbmU6IGBzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTtgLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBjb3B5aW5nIHF1ZXVlIGxpbWl0cywgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGludG8gYSBsb2NhbCB2YXJpYWJsZS4gU28sIHRoZSBxdWVzdGlvbiBpcywgaG93IGlzIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBpbXBsZW1lbnRlZD8gTGV0JiMzOTtzIGNoZWNrIHRoZSBibG9jayBsYXllciBpbXBsZW1lbnRhdGlvbiB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgdGhlcmUuIFdlIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IHRoZSByZXR1cm5lZCBgcXVldWVfbGltaXRzYCBzdHJ1Y3QgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pbnRlZ3JpdHkuYz0yMjY9c3RhdGljIHNzaXplX3QgZmxhZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCxcbi0tXG5ibG9jay9ibGstaW50ZWdyaXR5LmMtMjM4LVx0Lyogbm90ZSB0aGF0IHRoZSBmbGFncyBhcmUgaW52ZXJ0ZWQgdnMgdGhlIHZhbHVlcyBpbiB0aGUgc3lzZnMgZmlsZXMgKi9cbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYzoyMzk6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuYmxvY2svYmxrLWludGVncml0eS5jLTI0MC1cdGlmICh2YWwpXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmM9NTIyPWludCBibGtfc2V0X2RlZmF1bHRfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbi0tXG5ibG9jay9ibGstc2V0dGluZ3MuYy01MzgtICpcbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjUzOTogKiBBcHBseSB0aGUgbGltaXRzIGluIEBsaW0gdGhhdCB3ZXJlIG9idGFpbmVkIGZyb20gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NDAtICogYW5kIHVwZGF0ZWQgYnkgdGhlIGNhbGxlciB0byBAcS4gIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGZyb3plbiB0aGUgcXVldWUgb3Jcbi0tXG5ibG9jay9ibGstc2V0dGluZ3MuYz01NzE9RVhQT1JUX1NZTUJPTF9HUEwocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUpO1xuLS1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU3Ny0gKlxuYmxvY2svYmxrLXNldHRpbmdzLmM6NTc4OiAqIEFwcGx5IHRoZSBsaW1pdHMgaW4gQGxpbSB0aGF0IHdlcmUgb2J0YWluZWQgZnJvbSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU3OS0gKiBhbmQgdXBkYXRlZCB3aXRoIHRoZSBuZXcgdmFsdWVzIGJ5IHRoZSBjYWxsZXIgdG8gQHEuICBGcmVlemVzIHRoZSBxdWV1ZVxuLS1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jPTU5Nj1FWFBPUlRfU1lNQk9MX0dQTChxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4pO1xuLS1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTYwMy0gKiBBcHBseSB0aGUgbGltaXRzIGluIEBsaW0gdGhhdCB3ZXJlIGZyZXNobHkgaW5pdGlhbGl6ZWQgdG8gQHEuXG5ibG9jay9ibGstc2V0dGluZ3MuYzo2MDQ6ICogVG8gdXBkYXRlIGV4aXN0aW5nIGxpbWl0cyB1c2UgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpIGFuZFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNjA1LSAqIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKCkgaW5zdGVhZC5cbi0tXG5ibG9jay9ibGstc3lzZnMuYz04Nzk9cXVldWVfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbi0tXG5ibG9jay9ibGstc3lzZnMuYy04OTEtXG5ibG9jay9ibGstc3lzZnMuYzo4OTI6XHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbmJsb2NrL2Jsay1zeXNmcy5jLTg5My1cbi0tXG5ibG9jay9ibGstem9uZWQuYz0yMDU4PXN0YXRpYyBpbnQgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMjA2Ni1cbmJsb2NrL2Jsay16b25lZC5jOjIwNjc6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuYmxvY2svYmxrLXpvbmVkLmMtMjA2OC1cbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTEzMDE9dm9pZCBkcmJkX3JlY29uc2lkZXJfcXVldWVfcGFyYW1ldGVycyhzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTEzMzQtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjEzMzU6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0xMzM2LVx0aWYgKGJkZXYpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMjc9c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzAtXHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGNsZWFyX2xpbWl0c193b3JrKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzMTpcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzItXHRpbnQgbW9kZSA9IGF0b21pY194Y2hnKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMDA4PXN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwODctXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMDg4Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDg5LVx0bG9vcF91cGRhdGVfbGltaXRzKGxvLCBcdTAwMjZsaW0sIGNvbmZpZy1cdTAwM2VibG9ja19zaXplKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMTQyPXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTY0LVx0ICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTY1Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTY2LVx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0NDI9c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ1OS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0NjA6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NjEtXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0NzI9c3RhdGljIGludCBsb29wX3NldF9ibG9ja19zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTAzLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUwNDpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTUwNS1cdGxvb3BfdXBkYXRlX2xpbWl0cyhsbywgXHUwMDI2bGltLCBhcmcpO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MzU1PXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0zNzQtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjM3NTpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0zNzYtXHRuYmRfYXBwbHlfbGltaXRzKFx1MDAyNmxpbSwgbmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VmbGFncyk7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xNDY4PXN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDc2LVx0XHQvKiByZXNldCBxdWV1ZSBsaW1pdHMgdG8gZGVmYXVsdCAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzoxNDc3Olx0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ3OC1cdFx0bmJkX2FwcGx5X2xpbWl0cyhcdTAwMjZsaW0sIDApO1xuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTEwOTQ9Y2FjaGVfdHlwZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTExMDktXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxMTEwOlx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTExMTEtXHRpZiAodmlydGJsa19nZXRfY2FjaGVfbW9kZSh2ZGV2KSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jPTIwMDY9c3RhdGljIGludCBibGtpZl9yZWNvdmVyKHN0cnVjdCBibGtmcm9udF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMtMjAxNC1cbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmM6MjAxNTpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoaW5mby1cdTAwM2VycSk7XG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jLTIwMTYtXHRibGtmcm9udF9nYXRoZXJfYmFja2VuZF9mZWF0dXJlcyhpbmZvKTtcbi0tXG5kcml2ZXJzL21kL2RtLXRhYmxlLmM9MjAyOD1pbnQgZG1fdGFibGVfc2V0X3Jlc3RyaWN0aW9ucyhzdHJ1Y3QgZG1fdGFibGUgKnQsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmRyaXZlcnMvbWQvZG0tdGFibGUuYy0yMDgyLVxuZHJpdmVycy9tZC9kbS10YWJsZS5jOjIwODM6XHRvbGRfbGltaXRzID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbmRyaXZlcnMvbWQvZG0tdGFibGUuYy0yMDg0LVx0ciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbWl0cyk7XG4tLVxuZHJpdmVycy9tZC9tZC5jPTU5ODA9c3RhdGljIGludCBtZGRldl9zZXRfbG9naWNhbF9ibG9ja19zaXplKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4tLVxuZHJpdmVycy9tZC9tZC5jLTU5OTEtXG5kcml2ZXJzL21kL21kLmM6NTk5MjpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZSk7XG5kcml2ZXJzL21kL21kLmMtNTk5My1cdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBsYnM7XG4tLVxuZHJpdmVycy9tZC9tZC5jPTYyNDk9aW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuLS1cbmRyaXZlcnMvbWQvbWQuYy02MjYyLVxuZHJpdmVycy9tZC9tZC5jOjYyNjM6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9tZC9tZC5jLTYyNjQtXHRxdWV1ZV9saW1pdHNfc3RhY2tfYmRldihcdTAwMjZsaW0sIHJkZXYtXHUwMDNlYmRldiwgcmRldi1cdTAwM2VkYXRhX29mZnNldCxcbi0tXG5kcml2ZXJzL21kL21kLmM9NjI3OT12b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTYyODgtXHRcdHJldHVybjtcbmRyaXZlcnMvbWQvbWQuYzo2Mjg5Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvbWQvbWQuYy02MjkwLVx0bGltLmlvX29wdCA9IGxpbS5pb19taW4gKiBucl9zdHJpcGVzO1xuLS1cbmRyaXZlcnMvbWQvcmFpZDUuYz03Mjg4PXJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDUuYy03MzA3LVx0XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG5kcml2ZXJzL21kL3JhaWQ1LmM6NzMwODpcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuZHJpdmVycy9tZC9yYWlkNS5jLTczMDktXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIyMzg9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2dlbmVyaWMoc3RydWN0IG52bWVfbnMgKm5zLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjQ0LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjIyNDU6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTIyNDYtXHRudm1lX3NldF9jdHJsX2xpbWl0cyhucy1cdTAwM2VjdHJsLCBcdTAwMjZsaW0sIGZhbHNlKTtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjQwOD1zdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soc3RydWN0IG52bWVfbnMgKm5zLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDU5LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI0NjA6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI0NjEtXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTI1NDE9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU4My1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTg0Olx0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU4NS1cdFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTM2MTc9c3RhdGljIGludCBudm1lX2luaXRfaWRlbnRpZnkoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMzY4NS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzozNjg2Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShjdHJsLVx1MDAzZWFkbWluX3EpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTM2ODctXHRudm1lX3NldF9jdHJsX2xpbWl0cyhjdHJsLCBcdTAwMjZsaW0sIHRydWUpO1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM9MzI0PXN0YXRpYyBpbnQgZGFzZF9zdGF0ZV9iYXNpY190b19yZWFkeShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSlcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jLTM0Ni1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM6MzQ3Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShibG9jay1cdTAwM2VnZHAtXHUwMDNlcXVldWUpO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zNDgtXHRsaW0ubWF4X2Rldl9zZWN0b3JzID0gZGV2aWNlLVx1MDAzZWRpc2NpcGxpbmUtXHUwMDNlbWF4X3NlY3RvcnMoYmxvY2spO1xuLS1cbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmM9MTA2Nz1tcGkzbXJfdXBkYXRlX3NkZXYoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmMtMTA3Ny1cbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmM6MTA3ODpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2Rldi1cdTAwM2VyZXF1ZXN0X3F1ZXVlKTtcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmMtMTA3OS1cdG1waTNtcl9jb25maWd1cmVfdGd0X2Rldih0Z3RkZXYsIFx1MDAyNmxpbSk7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jPTg4MD1zdGF0aWMgaW50IHNjc2lfYWRkX2x1bihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHVuc2lnbmVkIGNoYXIgKmlucV9yZXN1bHQsXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jLTEwODktXHQgKi9cbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYzoxMDkwOlx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGV2LVx1MDAzZXJlcXVlc3RfcXVldWUpO1xuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jLTEwOTEtXHRpZiAoKmJmbGFncyBcdTAwMjYgQkxJU1RfTUFYXzUxMilcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYz0yMjA9Y2FjaGVfdHlwZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvc2NzaS9zZC5jLTI1OC1cbmRyaXZlcnMvc2NzaS9zZC5jOjI1OTpcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGtwLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9zY3NpL3NkLmMtMjYwLVx0XHRzZF9zZXRfZmx1c2hfZmxhZyhzZGtwLCBcdTAwMjZsaW0pO1xuLS1cbmRyaXZlcnMvc2NzaS9zZC5jPTU3NT1wcm92aXNpb25pbmdfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvc2NzaS9zZC5jLTU5Mi1cbmRyaXZlcnMvc2NzaS9zZC5jOjU5MzpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2RrcC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvc2NzaS9zZC5jLTU5NC1cdHNkX2NvbmZpZ19kaXNjYXJkKHNka3AsIFx1MDAyNmxpbSwgbW9kZSk7XG4tLVxuZHJpdmVycy9zY3NpL3NkLmM9Njc1PW1heF93cml0ZV9zYW1lX2Jsb2Nrc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvc2NzaS9zZC5jLTcwMS1cbmRyaXZlcnMvc2NzaS9zZC5jOjcwMjpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2RrcC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvc2NzaS9zZC5jLTcwMy1cdHNkX2NvbmZpZ193cml0ZV9zYW1lKHNka3AsIFx1MDAyNmxpbSk7XG4tLVxuZHJpdmVycy9zY3NpL3NkLmM9Mzc3Mz1zdGF0aWMgdm9pZCBzZF9yZXZhbGlkYXRlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuZHJpdmVycy9zY3NpL3NkLmMtMzgwMi1cbmRyaXZlcnMvc2NzaS9zZC5jOjM4MDM6XHQqbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGtwLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9zY3NpL3NkLmMtMzgwNC1cbi0tXG5kcml2ZXJzL3Njc2kvc3IuYz00NzY9c3RhdGljIGludCBzcl9yZXZhbGlkYXRlX2Rpc2soc3RydWN0IHNjc2lfY2QgKmNkKVxuLS1cbmRyaXZlcnMvc2NzaS9zci5jLTQ4OC1cbmRyaXZlcnMvc2NzaS9zci5jOjQ4OTpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG5kcml2ZXJzL3Njc2kvc3IuYy00OTAtXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gc2VjdG9yX3NpemU7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jPTU4ND1zdGF0aWMgc3NpemVfdCBtYXhfc2VjdG9yc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jLTU5NC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYzo1OTU6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNkZXYtXHUwMDNlcmVxdWVzdF9xdWV1ZSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMtNTk2LVx0bGltLm1heF9od19zZWN0b3JzID0gbXM7XG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMDc4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJsa19ib3VuZGFyeV9zZWN0b3JzX2xlZnQoc2VjdG9yX3Qgb2Zmc2V0LFxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTA4Ni0vKipcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTA4NzogKiBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlIC0gc3RhcnQgYW4gYXRvbWljIHVwZGF0ZSBvZiBxdWV1ZSBsaW1pdHNcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTA4OC0gKiBAcTpcdFx0cXVldWUgdG8gdXBkYXRlXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMDk3PXN0YXRpYyBpbmxpbmUgc3RydWN0IHF1ZXVlX2xpbWl0c1xuaW5jbHVkZS9saW51eC9ibGtkZXYuaDoxMDk4OnF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEwOTktXHRfX2FjcXVpcmVzKFx1MDAyNnEtXHUwMDNlbGltaXRzX2xvY2spXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMTEwPWludCBibGtfdmFsaWRhdGVfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTE2LSAqIFRoaXMgZnVuY3Rpb25zIGNhbmNlbHMgYW4gYXRvbWljIHVwZGF0ZSBvZiB0aGUgcXVldWUgbGltaXRzIHN0YXJ0ZWQgYnlcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTExNzogKiBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCkgYW5kIHNob3VsZCBiZSB1c2VkIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGFmdGVyXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTExMTgtICogc3RhcnRpbmcgdXBkYXRlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTc1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBEZWVwIGludG8gdGhlIExvb3AgRGV2aWNlIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZXNlIGNoYW5nZXMgaW50aW1hdGVseS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IG1ldGhvZGljYWxseSBleGFtaW5pbmcgdGhlIG1vZGlmaWNhdGlvbnMuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgZHJpdmVycy9ibG9jay9sb29wLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBjb2RlIGFyb3VuZCB0aGUgYGxvb3BfY2xlYXJfbGltaXRzYCBmdW5jdGlvbiBhbmQgdGhlIGBsb19mYWxsb2NhdGVgIGltcGxlbWVudGF0aW9uLiBJIGtub3cgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgcGFyYW1ldGVycyBhbmQgcG90ZW50aWFsIGFsbG9jYXRpb24gaXNzdWVzIGxpdmUuIFRoYXQgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZXZhbHVhdGluZyB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZmFsbG9jYXRlIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggbGltaXQgY29uc3RyYWludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyMDpcdCAqL1xuIDIyMTpcdHN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpXG4gMjIyOlx0e1xuIDIyMzpcdFx0aWYgKCFzZXRfY2FwYWNpdHlfYW5kX25vdGlmeShsby1cdTAwM2Vsb19kaXNrLCBzaXplKSlcbiAyMjQ6XHRcdFx0a29iamVjdF91ZXZlbnQoXHUwMDI2ZGlza190b19kZXYobG8tXHUwMDNlbG9fZGlzayktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIDIyNTpcdH1cbiAyMjY6XHRcbiAyMjc6XHRzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDIyODpcdHtcbiAyMjk6XHRcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPVxuIDIzMDpcdFx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBjbGVhcl9saW1pdHNfd29yayk7XG4gMjMxOlx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuIDIzMjpcdFx0aW50IG1vZGUgPSBhdG9taWNfeGNoZyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gMjMzOlx0XG4gMjM0Olx0XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpXG4gMjM1Olx0XHRcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuIDIzNjpcdFxuIDIzNzpcdFx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XG4gMjM4Olx0XHRcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDtcbiAyMzk6XHRcdFx0bGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwO1xuIDI0MDpcdFx0fVxuIDI0MTpcdFxuIDI0MjpcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKGxvLVx1MDAzZWxvX3F1ZXVlLCBcdTAwMjZsaW0pO1xuIDI0MzpcdH1cbiAyNDQ6XHRcbiAyNDU6XHRzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbiAyNDY6XHR7XG4gMjQ3Olx0XHRhdG9taWNfb3IobW9kZSwgXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX21vZGUpO1xuIDI0ODpcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yayk7XG4gMjQ5Olx0fVxuIDI1MDpcdFxuIDI1MTpcdHN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcyxcbiAyNTI6XHRcdFx0XHRpbnQgbW9kZSlcbiAyNTM6XHR7XG4gMjU0Olx0XHQvKlxuIDI1NTpcdFx0ICogV2UgdXNlIGZhbGxvY2F0ZSB0byBtYW5pcHVsYXRlIHRoZSBzcGFjZSBtYXBwaW5ncyB1c2VkIGJ5IHRoZSBpbWFnZVxuIDI1NjpcdFx0ICogYS5rLmEuIGRpc2NhcmQvemVyb3JhbmdlLlxuIDI1NzpcdFx0ICovXG4gMjU4Olx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiAyNTk6XHRcdGludCByZXQ7XG4gMjYwOlx0XG4gMjYxOlx0XHRtb2RlIHw9IEZBTExPQ19GTF9LRUVQX1NJWkU7XG4gMjYyOlx0XG4gMjYzOlx0XHRpZiAoIWJkZXZfbWF4X2Rpc2NhcmRfc2VjdG9ycyhsby1cdTAwM2Vsb19kZXZpY2UpKVxuIDI2NDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gMjY1Olx0XG4gMjY2Olx0XHRyZXQgPSBmaWxlLVx1MDAzZWZfb3AtXHUwMDNlZmFsbG9jYXRlKGZpbGUsIG1vZGUsIHBvcywgYmxrX3JxX2J5dGVzKHJxKSk7XG4gMjY3Olx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlZBTCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKSlcbiAyNjg6XHRcdFx0cmV0dXJuIC1FSU87XG4gMjY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MjYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIGZvY3VzaW5nIG9uIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zOgoKKipBbmFseXppbmcgYGxvX2ZhbGxvY2F0ZWAgYW5kIExvb3AgRGV2aWNlIExpbWl0cyoqCgpBbHJpZ2h0LCBzbyB0aGUgYGxvX2ZhbGxvY2F0ZWAgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGhhbmRsZSB0aGUgYGZhbGxvY2F0ZWAgc3lzdGVtIGNhbGwsIHdoaWNoIGlzIGEgY29tbW9uIG1ldGhvZCBmb3IgcHJlYWxsb2NhdGluZyBkaXNrIHNwYWNlLiBUaGUgaW50ZXJlc3RpbmcgYml0IGNvbWVzIHdoZW4gYGZhbGxvY2F0ZWAgdGhyb3dzIGFuIGVycm9yLCBwYXJ0aWN1bGFybHkgYC1FT1BOT1RTVVBQYCBvciBhIHNpbWlsYXIgaW5kaWNhdGlvbiB0aGF0IHRoZSBvcGVyYXRpb24gaXNuJiMzOTt0IHN1cHBvcnRlZC4gTXkgdW5kZXJzdGFuZGluZyBpcywgYXQgdGhpcyBwb2ludCBgbG9vcF9jbGVhcl9saW1pdHNgIGdldHMgY2FsbGVkLiBOb3csIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGBsb29wX2NsZWFyX2xpbWl0c2AgYWN0dWFsbHkgKmRvZXMqLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gbGluZXMgMjcwLTI5MCB0byBsb29rIGNsb3NlbHkgYXQgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTG9vcCBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZmFsbGJhY2sgbWVjaGFuaXNtIGhhcyBhbnkgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkgcmFtaWZpY2F0aW9ucy4gSXMgdGhpcyBjYWxsIGNsZWFyaW5nIHNvbWUgc29ydCBvZiBwcmUtY29uZmlndXJlZCBzaXplIGxpbWl0YXRpb24gYW5kIHBvdGVudGlhbGx5IGNyZWF0aW5nIHZ1bG5lcmFiaWxpdGllcywgb3IgaXMgdGhpcyBjbGVhcmluZyBkZXZpY2UgbGltaXRzIHRvIGFsbG93IHRoZSBvcGVyYXRpb24gdG8gYmUgcGVyZm9ybWVkIGluIGFub3RoZXIgd2F5PyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhpcyBjbGVhcmluZyBvZiBsaW1pdHMgd2lsbCBpbXBhY3QgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgc3RhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdC8qXG4gMjcxOlx0XHQgKiBXZSBpbml0aWFsbHkgY29uZmlndXJlIHRoZSBsaW1pdHMgaW4gYSBob3BlIHRoYXQgZmFsbG9jYXRlIGlzXG4gMjcyOlx0XHQgKiBzdXBwb3J0ZWQgYW5kIGNsZWFyIHRoZW0gaGVyZSBpZiB0aGF0IHR1cm5zIG91dCBub3QgdG8gYmUgdHJ1ZS5cbiAyNzM6XHRcdCAqL1xuIDI3NDpcdFx0aWYgKHVubGlrZWx5KHJldCA9PSAtRU9QTk9UU1VQUCkpXG4gMjc1Olx0XHRcdGxvb3BfY2xlYXJfbGltaXRzKGxvLCBtb2RlKTtcbiAyNzY6XHRcbiAyNzc6XHRcdHJldHVybiByZXQ7XG4gMjc4Olx0fVxuIDI3OTpcdFxuIDI4MDpcdHN0YXRpYyBpbnQgbG9fcmVxX2ZsdXNoKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSlcbiAyODE6XHR7XG4gMjgyOlx0XHRpbnQgcmV0ID0gdmZzX2ZzeW5jKGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSwgMCk7XG4gMjgzOlx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlZBTCkpXG4gMjg0Olx0XHRcdHJldCA9IC1FSU87XG4gMjg1Olx0XG4gMjg2Olx0XHRyZXR1cm4gcmV0O1xuIDI4NzpcdH1cbiAyODg6XHRcbiAyODk6XHRzdGF0aWMgdm9pZCBsb19jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4gMjkwOlx0e1xuIDI5MTpcdFx0c3RydWN0IGxvb3BfY21kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcbiAyOTI6XHRcdGJsa19zdGF0dXNfdCByZXQgPSBCTEtfU1RTX09LO1xuIDI5MzpcdFxuIDI5NDpcdFx0aWYgKGNtZC1cdTAwM2VyZXQgXHUwMDNjIDAgfHwgY21kLVx1MDAzZXJldCA9PSBibGtfcnFfYnl0ZXMocnEpIHx8XG4gMjk1Olx0XHQgICAgcmVxX29wKHJxKSAhPSBSRVFfT1BfUkVBRCkge1xuIDI5NjpcdFx0XHRpZiAoY21kLVx1MDAzZXJldCBcdTAwM2MgMClcbiAyOTc6XHRcdFx0XHRyZXQgPSBlcnJub190b19ibGtfc3RhdHVzKGNtZC1cdTAwM2VyZXQpO1xuIDI5ODpcdFx0XHRnb3RvIGVuZF9pbztcbiAyOTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTk6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIExvZ2ljYWwgVm9sdW1lIChMTykgQWxsb2NhdGlvbiBhbmQgRGVhbGxvY2F0aW9uKioKClJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBhIGBsb2AgZGV2aWNlIGZyb20gYWxsb2NhdGlvbiB0byBkZXN0cnVjdGlvbiwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBzdG9yYWdlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBgbG9vcF9hZGRgLCBgbG9vcF9yZW1vdmVgLCBhbmQgYGxvX2ZyZWVfZGlza2AgZnVuY3Rpb25zLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGluIHRoaXMgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSBwYXRoIGZvciBlYWNoIG9mIHRob3NlIGFuZCBkZXRlcm1pbmU6CgoqICAgKipgbG9vcF9hZGRgKio6IEhvdyBpcyB0aGUgYGxvYCBkZXZpY2UgaW5pdGlhbGx5IGNyZWF0ZWQgYW5kIGFzc29jaWF0ZWQgd2l0aCBhIGJhY2tpbmcgZmlsZSBvciBibG9jayBkZXZpY2U/IFdoYXQgbWV0YWRhdGEgaXMgaW5pdGlhbGl6ZWQ/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQuCiogICAqKmBsb29wX3JlbW92ZWAqKjogVGhpcyBzaG91bGQgYmUgdGhlIGNvdW50ZXJwYXJ0IHRvIGBsb29wX2FkZGAuIEkmIzM5O2xsIGhhdmUgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBgbG9gIGRldmljZSBhbmQgdGhlIGJhY2tpbmcgc3RvcmUgaXMgc2V2ZXJlZCwgd2hhdCBjbGVhbnVwIG9jY3VycywgYW5kIGhvdyBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMgYXJlIHJlbGVhc2VkLiBJcyB0aGlzIGdyYWNlZnVsLCBvciBwcm9uZSB0byBsZWF2aW5nIGdhcmJhZ2UgYmVoaW5kPwoqICAgKipgbG9fZnJlZV9kaXNrYCoqOiBUaGlzIHNvdW5kcyBsaWtlIGEgZnVuY3Rpb24gdGhhdCBzcGVjaWZpY2FsbHkgZGVhbHMgd2l0aCBmcmVlaW5nIHRoZSBwaHlzaWNhbCBkaXNrIHNwYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGxvYCBkZXZpY2Ugb3IgdW5tYXBwaW5nIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHVubWFwcGluZyB0aGUgYmFja2luZyBkaXNrLCBjbGVhcmluZyByZXNvdXJjZXMsIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgYGxvb3BfcmVtb3ZlYC4gQXJlIHRoZXkgY2FsbGVkIGluIHNlcXVlbmNlLCBvciBkb2VzIG9uZSBjYWxsIHRoZSBvdGhlcj8KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHJlc291cmNlIGxlYWtzLCBvciBpbmVmZmljaWVudCB1c2Ugb2Ygc3RvcmFnZSBkdXJpbmcgdGhpcyBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB3aWxsIGJlIGNydWNpYWwgZm9yIGNvbmZpcm1pbmcgbXkgdW5kZXJzdGFuZGluZy4gVGhpcyBpbnZlc3RpZ2F0aW9uIHNob3VsZCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgYGxvYCBkZXZpY2VzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbG9vcF9hZGRgLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDc1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwODA6XHRcdFx0Z290byBvdXRfY2xlYW51cF90YWdzO1xuMjA4MTpcdFx0fVxuMjA4MjpcdFx0bG8tXHUwMDNlbG9fcXVldWUgPSBsby1cdTAwM2Vsb19kaXNrLVx1MDAzZXF1ZXVlO1xuMjA4MzpcdFxuMjA4NDpcdFx0LypcbjIwODU6XHRcdCAqIERpc2FibGUgcGFydGl0aW9uIHNjYW5uaW5nIGJ5IGRlZmF1bHQuIFRoZSBpbi1rZXJuZWwgcGFydGl0aW9uXG4yMDg2Olx0XHQgKiBzY2FubmluZyBjYW4gYmUgcmVxdWVzdGVkIGluZGl2aWR1YWxseSBwZXItZGV2aWNlIGR1cmluZyBpdHNcbjIwODc6XHRcdCAqIHNldHVwLiBVc2Vyc3BhY2UgY2FuIGFsd2F5cyBhZGQgYW5kIHJlbW92ZSBwYXJ0aXRpb25zIGZyb20gYWxsXG4yMDg4Olx0XHQgKiBkZXZpY2VzLiBUaGUgbmVlZGVkIHBhcnRpdGlvbiBtaW5vcnMgYXJlIGFsbG9jYXRlZCBmcm9tIHRoZVxuMjA4OTpcdFx0ICogZXh0ZW5kZWQgbWlub3Igc3BhY2UsIHRoZSBtYWluIGxvb3AgZGV2aWNlIG51bWJlcnMgd2lsbCBjb250aW51ZVxuMjA5MDpcdFx0ICogdG8gbWF0Y2ggdGhlIGxvb3AgbWlub3JzLCByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgcGFydGl0aW9uc1xuMjA5MTpcdFx0ICogdXNlZC5cbjIwOTI6XHRcdCAqXG4yMDkzOlx0XHQgKiBJZiBtYXhfcGFydCBpcyBnaXZlbiwgcGFydGl0aW9uIHNjYW5uaW5nIGlzIGdsb2JhbGx5IGVuYWJsZWQgZm9yXG4yMDk0Olx0XHQgKiBhbGwgbG9vcCBkZXZpY2VzLiBUaGUgbWlub3JzIGZvciB0aGUgbWFpbiBsb29wIGRldmljZXMgd2lsbCBiZVxuMjA5NTpcdFx0ICogbXVsdGlwbGVzIG9mIG1heF9wYXJ0LlxuMjA5NjpcdFx0ICpcbjIwOTc6XHRcdCAqIE5vdGU6IEdsb2JhbC1mb3ItYWxsLWRldmljZXMsIHNldC1vbmx5LWF0LWluaXQsIHJlYWQtb25seSBtb2R1bGVcbjIwOTg6XHRcdCAqIHBhcmFtZXRldGVycyBsaWtlICYjMzk7bWF4X2xvb3AmIzM5OyBhbmQgJiMzOTttYXhfcGFydCYjMzk7IG1ha2UgdGhpbmdzIG5lZWRsZXNzbHlcbjIwOTk6XHRcdCAqIGNvbXBsaWNhdGVkLCBhcmUgdG9vIHN0YXRpYywgaW5mbGV4aWJsZSBhbmQgbWF5IHN1cnByaXNlXG4yMTAwOlx0XHQgKiB1c2Vyc3BhY2UgdG9vbHMuIFBhcmFtZXRlcnMgbGlrZSB0aGlzIGluIGdlbmVyYWwgc2hvdWxkIGJlIGF2b2lkZWQuXG4yMTAxOlx0XHQgKi9cbjIxMDI6XHRcdGlmICghcGFydF9zaGlmdClcbjIxMDM6XHRcdFx0c2V0X2JpdChHRF9TVVBQUkVTU19QQVJUX1NDQU4sIFx1MDAyNmRpc2stXHUwMDNlc3RhdGUpO1xuMjEwNDpcdFx0bXV0ZXhfaW5pdChcdTAwMjZsby1cdTAwM2Vsb19tdXRleCk7XG4yMTA1Olx0XHRsby1cdTAwM2Vsb19udW1iZXJcdFx0PSBpO1xuMjEwNjpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4yMTA3Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZsby1cdTAwM2Vsb193b3JrX2xvY2spO1xuMjEwODpcdFx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pO1xuMjEwOTpcdFx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xuMjExMDpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcbjIxMTE6XHRcdGRpc2stXHUwMDNlbWFqb3JcdFx0PSBMT09QX01BSk9SO1xuMjExMjpcdFx0ZGlzay1cdTAwM2VmaXJzdF9taW5vclx0PSBpIFx1MDAzY1x1MDAzYyBwYXJ0X3NoaWZ0O1xuMjExMzpcdFx0ZGlzay1cdTAwM2VtaW5vcnNcdFx0PSAxIFx1MDAzY1x1MDAzYyBwYXJ0X3NoaWZ0O1xuMjExNDpcdFx0ZGlzay1cdTAwM2Vmb3BzXHRcdD0gXHUwMDI2bG9fZm9wcztcbjIxMTU6XHRcdGRpc2stXHUwMDNlcHJpdmF0ZV9kYXRhXHQ9IGxvO1xuMjExNjpcdFx0ZGlzay1cdTAwM2VxdWV1ZVx0XHQ9IGxvLVx1MDAzZWxvX3F1ZXVlO1xuMjExNzpcdFx0ZGlzay1cdTAwM2VldmVudHNcdFx0PSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTtcbjIxMTg6XHRcdGRpc2stXHUwMDNlZXZlbnRfZmxhZ3NcdD0gRElTS19FVkVOVF9GTEFHX1VFVkVOVDtcbjIxMTk6XHRcdHNwcmludGYoZGlzay1cdTAwM2VkaXNrX25hbWUsIFwmIzM0O2xvb3AlZFwmIzM0OywgaSk7XG4yMTIwOlx0XHQvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgcmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4yMTIxOlx0XHRlcnIgPSBhZGRfZGlzayhkaXNrKTtcbjIxMjI6XHRcdGlmIChlcnIpXG4yMTIzOlx0XHRcdGdvdG8gb3V0X2NsZWFudXBfZGlzaztcbjIxMjQ6XHRcbjIxMjU6XHRcdC8qIFNob3cgdGhpcyBsb29wIGRldmljZS4gKi9cbjIxMjY6XHRcdG11dGV4X2xvY2soXHUwMDI2bG9vcF9jdGxfbXV0ZXgpO1xuMjEyNzpcdFx0bG8tXHUwMDNlaWRyX3Zpc2libGUgPSB0cnVlO1xuMjEyODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvb3BfY3RsX211dGV4KTtcbjIxMjk6XHRcbjIxMzA6XHRcdHJldHVybiBpO1xuMjEzMTpcdFxuMjEzMjpcdG91dF9jbGVhbnVwX2Rpc2s6XG4yMTMzOlx0XHRwdXRfZGlzayhkaXNrKTtcbjIxMzQ6XHRvdXRfY2xlYW51cF90YWdzOlxuMjEzNTpcdFx0YmxrX21xX2ZyZWVfdGFnX3NldChcdTAwMjZsby1cdTAwM2V0YWdfc2V0KTtcbjIxMzY6XHRvdXRfZnJlZV9pZHI6XG4yMTM3Olx0XHRtdXRleF9sb2NrKFx1MDAyNmxvb3BfY3RsX211dGV4KTtcbjIxMzg6XHRcdGlkcl9yZW1vdmUoXHUwMDI2bG9vcF9pbmRleF9pZHIsIGkpO1xuMjEzOTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvb3BfY3RsX211dGV4KTtcbjIxNDA6XHRvdXRfZnJlZV9kZXY6XG4yMTQxOlx0XHRrZnJlZShsbyk7XG4yMTQyOlx0b3V0OlxuMjE0MzpcdFx0cmV0dXJuIGVycjtcbjIxNDQ6XHR9XG4yMTQ1Olx0XG4yMTQ2Olx0c3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbjIxNDc6XHR7XG4yMTQ4Olx0XHQvKiBDYW5jZWwgZWFybHk6IHRoZSBxdWV1ZSBtYXkgYmUgaW4gUkNVLWRlbGF5ZWQgZnJlZWluZ1xuMjE0OTpcdFx0ICogYnkgdGhlIHRpbWUgbG9fZnJlZV9kaXNrKCkgcnVucy4gKi9cbjIxNTA6XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuMjE1MTpcdFxuMjE1MjpcdFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4yMTUzOlx0XHRkZWxfZ2VuZGlzayhsby1cdTAwM2Vsb19kaXNrKTtcbjIxNTQ6XHRcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTE4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGluIGBsb29wX2FkZGAqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgaW50ZXJuYWxzIG9mIHRoaXMgYGxvb3BfYWRkYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZhcmlhYmxlIGBsb2AgaXMgYmVpbmcgaGFuZGxlZCBtZW1vcnktd2lzZSB3aXRoaW4gdGhhdCBsb29wLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBpbmVmZmljaWVuY2llcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gaXRzIGFsbG9jYXRpb24uIElzIGl0IGJlaW5nIHJlLWFsbG9jYXRlZCBvbiBlYWNoIGl0ZXJhdGlvbiwgb3IgaXMgaXQgYXBwcm9wcmlhdGVseSBiZWluZyByZXVzZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIG1lbW9yeSBmb290cHJpbnQgaGVyZSBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBhbmQgcG90ZW50aWFsIGRlYnVnZ2luZyBkb3duIHRoZSBsaW5lLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHdpdGggdGhhdCB2YXJpYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTk6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA0MDpcdFx0bG8gPSBremFsbG9jX29iaigqbG8pO1xuMjA0MTpcdFx0aWYgKCFsbylcbjIwNDI6XHRcdFx0Z290byBvdXQ7XG4yMDQzOlx0XHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4yMDQ0Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcbjIwNDU6XHRcdHRpbWVyX3NldHVwKFx1MDAyNmxvLVx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcbjIwNDY6XHRcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xuMjA0NzpcdFxuMjA0ODpcdFx0ZXJyID0gbXV0ZXhfbG9ja19raWxsYWJsZShcdTAwMjZsb29wX2N0bF9tdXRleCk7XG4yMDQ5Olx0XHRpZiAoZXJyKVxuMjA1MDpcdFx0XHRnb3RvIG91dF9mcmVlX2RldjtcbjIwNTE6XHRcbjIwNTI6XHRcdC8qIGFsbG9jYXRlIGlkLCBpZiBAaWQgXHUwMDNlPSAwLCB3ZSYjMzk7cmUgcmVxdWVzdGluZyB0aGF0IHNwZWNpZmljIGlkICovXG4yMDUzOlx0XHRpZiAoaSBcdTAwM2U9IDApIHtcbjIwNTQ6XHRcdFx0ZXJyID0gaWRyX2FsbG9jKFx1MDAyNmxvb3BfaW5kZXhfaWRyLCBsbywgaSwgaSAmIzQzOyAxLCBHRlBfS0VSTkVMKTtcbjIwNTU6XHRcdFx0aWYgKGVyciA9PSAtRU5PU1BDKVxuMjA1NjpcdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4yMDU3Olx0XHR9IGVsc2Uge1xuMjA1ODpcdFx0XHRlcnIgPSBpZHJfYWxsb2MoXHUwMDI2bG9vcF9pbmRleF9pZHIsIGxvLCAwLCAwLCBHRlBfS0VSTkVMKTtcbjIwNTk6XHRcdH1cbjIwNjA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZsb29wX2N0bF9tdXRleCk7XG4yMDYxOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMjA2MjpcdFx0XHRnb3RvIG91dF9mcmVlX2RldjtcbjIwNjM6XHRcdGkgPSBlcnI7XG4yMDY0Olx0XG4yMDY1Olx0XHRsby1cdTAwM2V0YWdfc2V0Lm9wcyA9IFx1MDAyNmxvb3BfbXFfb3BzO1xuMjA2NjpcdFx0bG8tXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xuMjA2NzpcdFx0bG8tXHUwMDNldGFnX3NldC5xdWV1ZV9kZXB0aCA9IGh3X3F1ZXVlX2RlcHRoO1xuMjA2ODpcdFx0bG8tXHUwMDNldGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7XG4yMDY5Olx0XHRsby1cdTAwM2V0YWdfc2V0LmNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBsb29wX2NtZCk7XG4yMDcwOlx0XHRsby1cdTAwM2V0YWdfc2V0LmZsYWdzID0gQkxLX01RX0ZfU1RBQ0tJTkcgfCBCTEtfTVFfRl9OT19TQ0hFRF9CWV9ERUZBVUxUO1xuMjA3MTpcdFx0bG8tXHUwMDNldGFnX3NldC5kcml2ZXJfZGF0YSA9IGxvO1xuMjA3MjpcdFxuMjA3MzpcdFx0ZXJyID0gYmxrX21xX2FsbG9jX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4yMDc0Olx0XHRpZiAoZXJyKVxuMjA3NTpcdFx0XHRnb3RvIG91dF9mcmVlX2lkcjtcbjIwNzY6XHRcbjIwNzc6XHRcdGRpc2sgPSBsby1cdTAwM2Vsb19kaXNrID0gYmxrX21xX2FsbG9jX2Rpc2soXHUwMDI2bG8tXHUwMDNldGFnX3NldCwgXHUwMDI2bGltLCBsbyk7XG4yMDc4Olx0XHRpZiAoSVNfRVJSKGRpc2spKSB7XG4yMDc5Olx0XHRcdGVyciA9IFBUUl9FUlIoZGlzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDQ1CgkJCQkJCQlvdXRwdXQ6IDI0MgoJCQkJCQkJdGhvdWdodHM6IDQ4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBBIEtNU0FOIFBlcnNwZWN0aXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZnJvbSBhIG1lbW9yeSBzYWZldHkgc3RhbmRwb2ludCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHdoZXRoZXIgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyByZXF1aXJlZC4gSSYjMzk7dmUgZ290IHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLgoKRmlyc3QsIHRoZSBrZXkgb3BlcmF0aW9ucyBqdW1wIG91dDogd2UgaGF2ZSBhIGBsb2Agc3RydWN0dXJlIGFsbG9jYXRlZCBhbmQgemVyb2VkLCB3b3JrIGlzIGluaXRpYWxpemVkLCBhdG9taWMgb3BlcmF0aW9ucyBhcmUgdXNlZCB0byBtb2RpZnkgYGNsZWFyX2xpbWl0c19tb2RlYCwgYW5kIHRoZSBgcXVldWVfbGltaXRzYCBzdHJ1Y3R1cmUgaXMgaGFuZGxlZCB2aWEgYHN0YXJ0X3VwZGF0ZWAgYW5kIGBjb21taXRfdXBkYXRlX2Zyb3plbmAuIEkmIzM5O20gc2VlaW5nIGludGVnZXIgZmllbGRzIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkIHdpdGhpbiB0aGUgYHF1ZXVlX2xpbWl0c2Agc3RydWN0IGFmdGVyIGl0JiMzOTtzIGNvcGllZC4gVGhlcmUmIzM5O3MgYWxzbyBzeW5jaHJvbm91cyB3b3JrIGNhbmNlbGxhdGlvbiBvbiB0ZWFyZG93biwgYW5kIGltcG9ydGFudGx5LCBubyBkaXJlY3QgdXNlci1zcGFjZSBkYXRhIGludGVyYWN0aW9uIGhlcmUuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlIHBvdGVudGlhbCB0cm91YmxlIHNwb3RzLiBEZWFkbG9jayByaXNrcyBkdXJpbmcgcXVldWUgZnJlZXppbmcgYXJlIGEgY29uY2VybiwgYXMgaXMgdGhlIHBvc3NpYmlsaXR5IG9mIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3IgcmFjZXMgYmV0d2VlbiB0aGUgd29ya2VyIHRocmVhZCBhbmQgbG9vcCBkZXZpY2UgZGVzdHJ1Y3Rpb24uIFRoZXNlIGFyZSBjbGFzc2ljYWwgcmFjZSBjb25kaXRpb25zLiBXb3JrcXVldWUgY2FuY2VsbGF0aW9uIHJhY2VzIGFsc28gbmVlZCB0byBiZSBjb25zaWRlcmVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzeW5jaHJvbm91cyBjYWxsLgoKSSYjMzk7bSBub3cgZ29pbmcgdG8gZGl2ZSBkZWVwZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgS01TQU4gaXMgbmVjZXNzYXJ5LiBJJiMzOTt2ZSBnb3QgdG8gY2FyZWZ1bGx5IGFzc2VzcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQsIGFmdGVyIHNjcnV0aW5pemluZyB0aGUgY29kZSwgSSBzZWUgbm8gaW5kaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgb3IgdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMuIEV2ZXJ5dGhpbmcgbG9va3MgZWl0aGVyIGF0b21pYyBvciBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBmdW5jdGlvbiBwcm92aWRlcyBhIGZ1bGx5IGluaXRpYWxpemVkIGNvcHkuCgpUaGVyZWZvcmUsIGdpdmVuIG15IGV4cGVydCBhbmFseXNpcyBhbmQgYSByaWdvcm91cyBhc3Nlc3NtZW50IG9mIGFsbCB0aGUgbW9kaWZpZWQgZmllbGRzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzbiYjMzk7dCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhpcyBwYXRjaC4gTXkgYW5hbHlzaXMgYW5kIGV4cGVyaWVuY2UgYXJlIGluZGljYXRpbmcgdGhhdCB0aGUgcmlza3MgaGVyZSBhcmUgcHJpbWFyaWx5IGluIHJhY2UgY29uZGl0aW9ucyBhbmQgbG9ja2luZyBvcmRlciwgd2hpY2ggYXJlIGJlc3QgYWRkcmVzc2VkIHdpdGggS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgYW5kIExPQ0tERVAgKExvY2sgRGVwZW5kZW5jeSBWYWxpZGF0b3IpLiBLTVNBTiBpcyBjb25jZXJuZWQgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIGJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiwgaXQmIzM5O3Mgbm90IG5lZWRlZCBoZXJlLgoKU28sIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOID0gZmFsc2VgIGFuZCBwcm92aWRlIHRoZSBkZXRhaWxlZCBLTVNBTiByZWFzb25pbmcgdG8gcmVmbGVjdCBteSBhbmFseXNpcy4gTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0cmFuc2l0aW9ucyB0aGUgbG9vcCBkcml2ZXImIzM5O3MgcXVldWUgbGltaXRzIGNsZWFyaW5nIGxvZ2ljIGZyb20gc3luY2hyb25vdXMgZXhlY3V0aW9uIGluc2lkZSByZXF1ZXN0IGhhbmRsaW5nIHRvIGFuIGFzeW5jaHJvbm91cyB3b3JrcXVldWUgKGBjbGVhcl9saW1pdHNfd29ya2ApIHVzaW5nIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oKWAuXG5cbkFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdCBmaWVsZHMgKGBjbGVhcl9saW1pdHNfd29ya2AgYW5kIGBjbGVhcl9saW1pdHNfbW9kZWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZDogdGhlIGBsb29wX2RldmljZWAgc3RydWN0IGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCB0aGUgd29yayBpdGVtIGlzIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SSygpYCwgYW5kIHRoZSBhdG9taWMgdmFyaWFibGUgaXMgZXhwbGljaXRseSByZXNldCB3aXRoIGBhdG9taWNfc2V0YCAvIGF0b21pYyBvcGVyYXRpb25zLiBUaGUgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIHVzZWQgaW4gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCAod2hpY2ggcmV0dXJucyB0aGUgY3VycmVudCBxdWV1ZSBsaW1pdHMpLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgcXVldWUgZnJlZXppbmcgbG9ja2luZyBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0cmFuc2l0aW9ucyB0aGUgbG9vcCBkcml2ZXImIzM5O3MgcXVldWUgbGltaXRzIGNsZWFyaW5nIGxvZ2ljIGZyb20gc3luY2hyb25vdXMgZXhlY3V0aW9uIGluc2lkZSByZXF1ZXN0IGhhbmRsaW5nIHRvIGFuIGFzeW5jaHJvbm91cyB3b3JrcXVldWUgKGBjbGVhcl9saW1pdHNfd29ya2ApIHVzaW5nIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oKWAuXG5cbkFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdCBmaWVsZHMgKGBjbGVhcl9saW1pdHNfd29ya2AgYW5kIGBjbGVhcl9saW1pdHNfbW9kZWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZDogdGhlIGBsb29wX2RldmljZWAgc3RydWN0IGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCB0aGUgd29yayBpdGVtIGlzIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SSygpYCwgYW5kIHRoZSBhdG9taWMgdmFyaWFibGUgaXMgZXhwbGljaXRseSByZXNldCB3aXRoIGBhdG9taWNfc2V0YCAvIGF0b21pYyBvcGVyYXRpb25zLiBUaGUgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIHVzZWQgaW4gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCAod2hpY2ggcmV0dXJucyB0aGUgY3VycmVudCBxdWV1ZSBsaW1pdHMpLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgcXVldWUgZnJlZXppbmcgbG9ja2luZyBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE5OjM2OjUyLjI2OTA0NDYxOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NzU1OTk2MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzX3dvcmtmblwiLFxuICAgIFwibG9vcF9jbGVhcl9saW1pdHNcIixcbiAgICBcImxvX2ZhbGxvY2F0ZVwiLFxuICAgIFwibG9vcF9jb25maWd1cmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRyYW5zaXRpb25zIHRoZSBsb29wIGRyaXZlcidzIHF1ZXVlIGxpbWl0cyBjbGVhcmluZyBsb2dpYyBmcm9tIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiBpbnNpZGUgcmVxdWVzdCBoYW5kbGluZyB0byBhbiBhc3luY2hyb25vdXMgd29ya3F1ZXVlIChgY2xlYXJfbGltaXRzX3dvcmtgKSB1c2luZyBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKClgLlxcblxcbkFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdCBmaWVsZHMgKGBjbGVhcl9saW1pdHNfd29ya2AgYW5kIGBjbGVhcl9saW1pdHNfbW9kZWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZDogdGhlIGBsb29wX2RldmljZWAgc3RydWN0IGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCB0aGUgd29yayBpdGVtIGlzIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SSygpYCwgYW5kIHRoZSBhdG9taWMgdmFyaWFibGUgaXMgZXhwbGljaXRseSByZXNldCB3aXRoIGBhdG9taWNfc2V0YCAvIGF0b21pYyBvcGVyYXRpb25zLiBUaGUgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIHVzZWQgaW4gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCAod2hpY2ggcmV0dXJucyB0aGUgY3VycmVudCBxdWV1ZSBsaW1pdHMpLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBBbnkgY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBvciBxdWV1ZSBmcmVlemluZyBsb2NraW5nIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBhc3luY2hyb25vdXMgd29yayBzY2hlZHVsaW5nIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBoYW5kbGUgY2xlYXJpbmcgcXVldWUgbGltaXRzIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoY2xlYXJfbGltaXRzX3dvcmspIGluc3RlYWQgb2YgZGlyZWN0bHkgaW5zaWRlIHF1ZXVlX3JxIGNvbnRleHQuIFRoaXMgcHJvcGVybHkgdXNlcyBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4gdG8gZm9sbG93IHRoZSBxdWV1ZSBsaW1pdHMgbG9ja2luZyBwcm90b2NvbCB3aGVuIGZhbGxvY2F0ZSBvcGVyYXRpb25zIGZhaWwgb24gbG9vcCBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNjo1Mi4yNjkwNTE2NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MTczNTIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM4Mzc4ZDhkYmY4OWI4MWE0ODIwNmY3OTY5YzE4ZGRmY2ZiMGU2MTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAxOTozNjo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuaW5kZXggNmYxMjk3NjAzNWIwOS4uMzY4ZWE4NTc4OTVjZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuQEAgLTY3LDYgKzY3LDggQEAgc3RydWN0IGxvb3BfZGV2aWNlIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgcm9vdGNnX2NtZF9saXN0O1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBpZGxlX3dvcmtlcl9saXN0O1xcbiBcXHRzdHJ1Y3QgcmJfcm9vdCAgICAgICAgICB3b3JrZXJfdHJlZTtcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0ICAgICAgY2xlYXJfbGltaXRzX3dvcms7XFxuK1xcdGF0b21pY190XFx0XFx0Y2xlYXJfbGltaXRzX21vZGU7XFxuIFxcdHN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHRpbWVyO1xcbiBcXHRib29sXFx0XFx0XFx0c3lzZnNfaW5pdGVkO1xcbiBcXG5AQCAtMjIyLDkgKzIyNCwxMiBAQCBzdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxcbiBcXHRcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2ZGlza190b19kZXYobG8tXFx1MDAzZWxvX2Rpc2spLVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxcbitzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuK1xcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPVxcbitcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBjbGVhcl9saW1pdHNfd29yayk7XFxuIFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbitcXHRpbnQgbW9kZSA9IGF0b21pY194Y2hnKFxcdTAwMjZsby1cXHUwMDNlY2xlYXJfbGltaXRzX21vZGUsIDApO1xcbiBcXG4gXFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcXG4gXFx0XFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7XFxuQEAgLTIzNCwxNCArMjM5LDEzIEBAIHN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxcbiBcXHRcXHRsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7XFxuIFxcdH1cXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFhYWDogdGhpcyB1cGRhdGVzIHRoZSBxdWV1ZSBsaW1pdHMgd2l0aG91dCBmcmVlemluZyB0aGUgcXVldWUsIHdoaWNoXFxuLVxcdCAqIGlzIGFnYWluc3QgdGhlIGxvY2tpbmcgcHJvdG9jb2wgYW5kIGRhbmdlcm91cy4gIEJ1dCB3ZSBjYW4ndCBqdXN0XFxuLVxcdCAqIGZyZWV6ZSB0aGUgcXVldWUgYXMgd2UncmUgaW5zaWRlIHRoZSAtXFx1MDAzZXF1ZXVlX3JxIG1ldGhvZCBoZXJlLiAgU28gdGhpc1xcbi1cXHQgKiBzaG91bGQgbW92ZSBvdXQgaW50byBhIHdvcmtxdWV1ZSB1bmxlc3Mgd2UgZ2V0IHRoZSBmaWxlIG9wZXJhdGlvbnMgdG9cXG4tXFx0ICogYWR2ZXJ0aXNlIGlmIHRoZXkgc3VwcG9ydCBzcGVjaWZpYyBmYWxsb2NhdGUgb3BlcmF0aW9ucy5cXG4tXFx0ICovXFxuLVxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgXFx1MDAyNmxpbSk7XFxuK1xcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihsby1cXHUwMDNlbG9fcXVldWUsIFxcdTAwMjZsaW0pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcXG4re1xcbitcXHRhdG9taWNfb3IobW9kZSwgXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfbW9kZSk7XFxuK1xcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfd29yayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcyxcXG5AQCAtNTE2LDYgKzUyMCw3IEBAIHN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbiBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuIHtcXG4gXFx0bG8tXFx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IGZpbGU7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XFxuIFxcdGxvLVxcdTAwM2VvbGRfZ2ZwX21hc2sgPSBtYXBwaW5nX2dmcF9tYXNrKGZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuIFxcdG1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbGUtXFx1MDAzZWZfbWFwcGluZyxcXG4gXFx0XFx0XFx0bG8tXFx1MDAzZW9sZF9nZnBfbWFzayBcXHUwMDI2IH4oX19HRlBfSU8gfCBfX0dGUF9GUykpO1xcbkBAIC0xNzgxLDYgKzE3ODYsNyBAQCBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuIFxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGxvLVxcdTAwM2V3b3JrcXVldWUpO1xcbiBcXHRsb29wX2ZyZWVfaWRsZV93b3JrZXJzKGxvLCB0cnVlKTtcXG4gXFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2bG8tXFx1MDAzZXRpbWVyKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4gXFx0a2ZyZWUobG8pO1xcbiB9XFxuQEAgLTIxMDAsNiArMjEwNiw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZsby1cXHUwMDNlbG9fbG9jayk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZsby1cXHUwMDNlbG9fd29ya19sb2NrKTtcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZsby1cXHUwMDNlcm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7XFxuK1xcdElOSVRfV09SSyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bG8tXFx1MDAzZXJvb3RjZ19jbWRfbGlzdCk7XFxuIFxcdGRpc2stXFx1MDAzZW1ham9yXFx0XFx0PSBMT09QX01BSk9SO1xcbiBcXHRkaXNrLVxcdTAwM2VmaXJzdF9taW5vclxcdD0gaSBcXHUwMDNjXFx1MDAzYyBwYXJ0X3NoaWZ0O1xcbkBAIC0yMTM4LDYgKzIxNDUsMTAgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcXG4gXFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIHtcXG4rXFx0LyogQ2FuY2VsIGVhcmx5OiB0aGUgcXVldWUgbWF5IGJlIGluIFJDVS1kZWxheWVkIGZyZWVpbmdcXG4rXFx0ICogYnkgdGhlIHRpbWUgbG9fZnJlZV9kaXNrKCkgcnVucy4gKi9cXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcXG4rXFxuIFxcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xcbiBcXHRkZWxfZ2VuZGlzayhsby1cXHUwMDNlbG9fZGlzayk7XFxuIFxcdGJsa19tcV9mcmVlX3RhZ19zZXQoXFx1MDAyNmxvLVxcdTAwM2V0YWdfc2V0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6MzY6NTIuOTQxNDQ4OTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0NzI1MzI1OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzX3dvcmtmblwiLFxuICAgIFwibG9vcF9jbGVhcl9saW1pdHNcIixcbiAgICBcImxvX2ZhbGxvY2F0ZVwiLFxuICAgIFwibG9vcF9jb25maWd1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBoYW5kbGUgY2xlYXJpbmcgcXVldWUgbGltaXRzIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoY2xlYXJfbGltaXRzX3dvcmspIGluc3RlYWQgb2YgZGlyZWN0bHkgaW5zaWRlIHF1ZXVlX3JxIGNvbnRleHQuIFRoaXMgcHJvcGVybHkgdXNlcyBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4gdG8gZm9sbG93IHRoZSBxdWV1ZSBsaW1pdHMgbG9ja2luZyBwcm90b2NvbCB3aGVuIGZhbGxvY2F0ZSBvcGVyYXRpb25zIGZhaWwgb24gbG9vcCBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzODM3OGQ4ZGJmODliODFhNDgyMDZmNzk2OWMxOGRkZmNmYjBlNjExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxOTozNjo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDZmMTI5NzYwMzViMDkuLjM2OGVhODU3ODk1Y2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC02Nyw2ICs2Nyw4IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICByb290Y2dfY21kX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBpZGxlX3dvcmtlcl9saXN0O1xuIFx0c3RydWN0IHJiX3Jvb3QgICAgICAgICAgd29ya2VyX3RyZWU7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICBjbGVhcl9saW1pdHNfd29yaztcbitcdGF0b21pY190XHRcdGNsZWFyX2xpbWl0c19tb2RlO1xuIFx0c3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7XG4gXHRib29sXHRcdFx0c3lzZnNfaW5pdGVkO1xuIFxuQEAgLTIyMiw5ICsyMjQsMTIgQEAgc3RhdGljIHZvaWQgbG9vcF9zZXRfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBsb2ZmX3Qgc2l6ZSlcbiBcdFx0a29iamVjdF91ZXZlbnQoXHUwMDI2ZGlza190b19kZXYobG8tXHUwMDNlbG9fZGlzayktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbitzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbitcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPVxuK1x0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBjbGVhcl9saW1pdHNfd29yayk7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuK1x0aW50IG1vZGUgPSBhdG9taWNfeGNoZyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gXG4gXHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpXG4gXHRcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuQEAgLTIzNCwxNCArMjM5LDEzIEBAIHN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuIFx0XHRsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogWFhYOiB0aGlzIHVwZGF0ZXMgdGhlIHF1ZXVlIGxpbWl0cyB3aXRob3V0IGZyZWV6aW5nIHRoZSBxdWV1ZSwgd2hpY2hcbi1cdCAqIGlzIGFnYWluc3QgdGhlIGxvY2tpbmcgcHJvdG9jb2wgYW5kIGRhbmdlcm91cy4gIEJ1dCB3ZSBjYW4ndCBqdXN0XG4tXHQgKiBmcmVlemUgdGhlIHF1ZXVlIGFzIHdlJ3JlIGluc2lkZSB0aGUgLVx1MDAzZXF1ZXVlX3JxIG1ldGhvZCBoZXJlLiAgU28gdGhpc1xuLVx0ICogc2hvdWxkIG1vdmUgb3V0IGludG8gYSB3b3JrcXVldWUgdW5sZXNzIHdlIGdldCB0aGUgZmlsZSBvcGVyYXRpb25zIHRvXG4tXHQgKiBhZHZlcnRpc2UgaWYgdGhleSBzdXBwb3J0IHNwZWNpZmljIGZhbGxvY2F0ZSBvcGVyYXRpb25zLlxuLVx0ICovXG4tXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbitcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXG4re1xuK1x0YXRvbWljX29yKG1vZGUsIFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlKTtcbitcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuIH1cbiBcbiBzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXG5AQCAtNTE2LDYgKzUyMCw3IEBAIHN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4gXHRsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUgPSBmaWxlO1xuK1x0YXRvbWljX3NldChcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gXHRsby1cdTAwM2VvbGRfZ2ZwX21hc2sgPSBtYXBwaW5nX2dmcF9tYXNrKGZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbiBcdG1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbGUtXHUwMDNlZl9tYXBwaW5nLFxuIFx0XHRcdGxvLVx1MDAzZW9sZF9nZnBfbWFzayBcdTAwMjYgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7XG5AQCAtMTc4MSw2ICsxNzg2LDcgQEAgc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShsby1cdTAwM2V3b3JrcXVldWUpO1xuIFx0bG9vcF9mcmVlX2lkbGVfd29ya2VycyhsbywgdHJ1ZSk7XG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmxvLVx1MDAzZXRpbWVyKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZsby1cdTAwM2Vsb19tdXRleCk7XG4gXHRrZnJlZShsbyk7XG4gfVxuQEAgLTIxMDAsNiArMjEwNiw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsby1cdTAwM2Vsb19sb2NrKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxvLVx1MDAzZWxvX3dvcmtfbG9jayk7XG4gXHRJTklUX1dPUksoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7XG4rXHRJTklUX1dPUksoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmssIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbik7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2Vyb290Y2dfY21kX2xpc3QpO1xuIFx0ZGlzay1cdTAwM2VtYWpvclx0XHQ9IExPT1BfTUFKT1I7XG4gXHRkaXNrLVx1MDAzZWZpcnN0X21pbm9yXHQ9IGkgXHUwMDNjXHUwMDNjIHBhcnRfc2hpZnQ7XG5AQCAtMjEzOCw2ICsyMTQ1LDEwIEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXG4gc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiB7XG4rXHQvKiBDYW5jZWwgZWFybHk6IHRoZSBxdWV1ZSBtYXkgYmUgaW4gUkNVLWRlbGF5ZWQgZnJlZWluZ1xuK1x0ICogYnkgdGhlIHRpbWUgbG9fZnJlZV9kaXNrKCkgcnVucy4gKi9cbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuK1xuIFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4gXHRkZWxfZ2VuZGlzayhsby1cdTAwM2Vsb19kaXNrKTtcbiBcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNjo1Mi45NDE0NTAzNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMzcxNDAxNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9vcCBEZXZpY2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgdG8gdGhlIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AgZmlsZS4gVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYWRkaW5nIGBjbGVhcl9saW1pdHNfd29ya2AgYW5kIGBjbGVhcl9saW1pdHNfbW9kZWAgdG8gdGhlIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgLiBJbnR1aXRpdmVseSwgSSdtIGFscmVhZHkgZ3Vlc3NpbmcgdGhpcyBpcyByZWxhdGVkIHRvIGhvdyB0aGUgbG9vcCBkZXZpY2UgaGFuZGxlcyBhbmQgbWFuYWdlcyBpdHMgcXVldWUgbGltaXRzLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdWJzeXN0ZW0uXG5cbkl0IGxvb2tzIGxpa2UgdGhlIGBsb29wX2NsZWFyX2xpbWl0c2AgZnVuY3Rpb24gaGFzIGJlZW4gcmV3b3JrZWQuIEluc3RlYWQgb2YgZGlyZWN0bHkgY2xlYXJpbmcgdGhlIGxpbWl0cywgaXQgbm93IHNjaGVkdWxlcyB0aGUgYGxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrYCB1c2luZyBhIHdvcmtxdWV1ZSBhbmQgYXRvbWljIG9wZXJhdGlvbiB0byBmZXRjaCB0aGUgYGNsZWFyX2xpbWl0c19tb2RlYCBiZWZvcmUgY2FsbGluZyBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuYC4gQ2FuY2VsbGF0aW9uIG9mIHRoaXMgd29yayBvY2N1cnMgaW4gYGxvb3BfcmVtb3ZlYCBhbmQgYGxvX2ZyZWVfZGlza2AsIHdoaWNoIGFyZSBleHBlY3RlZCBsb2NhdGlvbnMsIHdoaWxlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgaW4gYGxvb3BfYWRkYCwgYW5kIGEgcmVzZXQgb2YgYGNsZWFyX2xpbWl0c19tb2RlYCBpbiBgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciBteSB3b3JrIGlzOiBpcyB0aGlzIGFyZWEgb2YgdGhlIGNvZGUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nPyBCYXNlZCBvbiBteSBleHBlcmllbmNlIHdpdGgga2VybmVsIGludGVybmFscywgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9ibG9jay9sb29wLmNgIGFuZCBpdHMgdXNlIGluIHN0YW5kYXJkIGJsb2NrIGRldmljZXMgKGFuZCBrbm93aW5nIHRoZSBwcmV2YWxlbmNlIG9mIGBDT05GSUdfQkxLX0RFVl9MT09QYCksIGluY2x1ZGluZyBpdHMgaGVhdnkgdXNlIGluIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFRoaXMgaXMgYSBjb3JlIHBhcnQgb2YgdGhlIHN5c3RlbSBhbmQgd2lsbCBiZSB0b3VjaGVkIGJ5IHZhcmlvdXMgdGVzdCBzdWl0ZXMuIFRoZSBwYXRjaCdzIGltcGFjdCBvbiBob3cgcXVldWUgbGltaXRzIGFyZSBtYW5hZ2VkIGFmdGVyIG9wZXJhdGlvbnMgbGlrZSBmYWxsb2NhdGUgZmFpbHVyZXMgY29uZmlybXMgaXQncyBhIHBvdGVudGlhbCBhcmVhIGZvciBmdXp6aW5nLlxuXG5NeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL2Jsb2NrL2AgYW5kIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gZ2V0IGEgYmV0dGVyIGNvbnRleHQgZm9yIHRoaXMgY2hhbmdlLiBJJ2xsIHVzZSB0b29scyBsaWtlIGdyZXBwZXIgYW5kIGZpbGUtcmVhZGluZyBjb21tYW5kcyB0byBxdWlja2x5IHVuZGVyc3RhbmQgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGJsb2NrIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE5OjM3OjA2LjMxMjg1NTc1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY3OTA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCTEtfREVWX0xPT1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTQwPWNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDMtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE0NDpjb25maWcgQkxLX0RFVl9MT09QXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0NS1cXHR0cmlzdGF0ZSBcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTc4LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNzk6Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTgwLVxcdGludCBcXFwiTnVtYmVyIG9mIGxvb3AgZGV2aWNlcyB0byBwcmUtY3JlYXRlIGF0IGluaXQgdGltZVxcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTgxOlxcdGRlcGVuZHMgb24gQkxLX0RFVl9MT09QXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4Mi1cXHRkZWZhdWx0IDhcXG4tLVxcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU9MjE9b2JqLSQoQ09ORklHX0JMS19ERVZfUkFNKVxcdCs9IGJyZC5vXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZToyMjpvYmotJChDT05GSUdfQkxLX0RFVl9MT09QKVxcdCs9IGxvb3Aub1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMjMtb2JqLSQoQ09ORklHX1NVTlZEQylcXHRcXHQrPSBzdW52ZGMub1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTc5ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODEzLSAqIGNoYW5nZWQgdGhlIGRlZmF1bHQgdmFsdWUgZnJvbSAwIGZvciBtYXhfbG9vcD0wIHJlYXNvbnMpLCBqdXN0XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgxNDogKiBjcmVhdGUgQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQgbG9vcCBkZXZpY2VzIGF0IG1vZHVsZVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MTUtICogaW5pdCB0aW1lLiBMb29wIGRldmljZXMgY2FuIGJlIHJlcXVlc3RlZCBvbi1kZW1hbmQgd2l0aCB0aGVcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MTgtICovXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgxOTpzdGF0aWMgaW50IG1heF9sb29wID0gQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQ7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgyMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MDYuMzczNTQxNzQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2ODkzMTkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEJsb2NrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb29wIGRldmljZSBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUgYmxvY2sgZHJpdmVyIHN1YnN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGJsb2NrIGRldmljZXMgaW4gZ2VuZXJhbCwgYW5kIEnigJltIHByZXR0eSBzdXJlIHRoZSBsb29wIGRldmljZSB3aWxsIGJlIGRlZmluZWQgb3IgYXQgbGVhc3QgcmVmZXJlbmNlZCBhcm91bmQgdGhlIGBDT05GSUdfQkxLX0RFVl9MT09QYCBzeW1ib2wuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IG90aGVyIHJlbGF0ZWQgb3B0aW9ucyBhcmUgcHJlc2VudC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgbG9vcCBkZXZpY2U7IHRoaXMgYEtjb25maWdgIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhhdCBpbmZvcm1hdGlvbi4gTm93LCBsZXQncyBnbyBwb2tlIGFyb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE5OjM3OjA4Ljg0MjQ3NTk2NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0Y29uZmlnIEJMS19ERVZfQ09XX0NPTU1PTlxcbiAxNDE6XFx0XFx0Ym9vbFxcbiAxNDI6XFx0XFx0ZGVmYXVsdCBCTEtfREVWX1VCRFxcbiAxNDM6XFx0XFxuIDE0NDpcXHRjb25maWcgQkxLX0RFVl9MT09QXFxuIDE0NTpcXHRcXHR0cmlzdGF0ZSBcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuIDE0NjpcXHRcXHRoZWxwXFxuIDE0NzpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGEgcmVndWxhciBmaWxlIGFzIGEgYmxvY2tcXG4gMTQ4OlxcdFxcdCAgZGV2aWNlOyB5b3UgY2FuIHRoZW4gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gb24gdGhhdCBibG9jayBkZXZpY2UgYW5kXFxuIDE0OTpcXHRcXHQgIG1vdW50IGl0IGp1c3QgYXMgeW91IHdvdWxkIG1vdW50IG90aGVyIGJsb2NrIGRldmljZXMgc3VjaCBhcyBoYXJkXFxuIDE1MDpcXHRcXHQgIGRyaXZlIHBhcnRpdGlvbnMsIENELVJPTSBkcml2ZXMgb3IgZmxvcHB5IGRyaXZlcy4gVGhlIGxvb3AgZGV2aWNlc1xcbiAxNTE6XFx0XFx0ICBhcmUgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZXMgd2l0aCBtYWpvciBudW1iZXIgNyBhbmQgdHlwaWNhbGx5XFxuIDE1MjpcXHRcXHQgIGNhbGxlZCAvZGV2L2xvb3AwLCAvZGV2L2xvb3AxIGV0Yy5cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0ICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGVjayBhbiBJU08gOTY2MCBmaWxlIHN5c3RlbSBiZWZvcmVcXG4gMTU1OlxcdFxcdCAgYnVybmluZyB0aGUgQ0QsIG9yIGlmIHlvdSB3YW50IHRvIHVzZSBmbG9wcHkgaW1hZ2VzIHdpdGhvdXQgZmlyc3RcXG4gMTU2OlxcdFxcdCAgd3JpdGluZyB0aGVtIHRvIGZsb3BweS4gRnVydGhlcm1vcmUsIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyBhdm9pZFxcbiAxNTc6XFx0XFx0ICB0aGUgbmVlZCBmb3IgYSBkZWRpY2F0ZWQgTGludXggcGFydGl0aW9uIGJ5IGtlZXBpbmcgdGhlaXIgY29tcGxldGVcXG4gMTU4OlxcdFxcdCAgcm9vdCBmaWxlIHN5c3RlbSBpbnNpZGUgYSBET1MgRkFUIGZpbGUgdXNpbmcgdGhpcyBsb29wIGRldmljZVxcbiAxNTk6XFx0XFx0ICBkcml2ZXIuXFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdCAgVG8gdXNlIHRoZSBsb29wIGRldmljZSwgeW91IG5lZWQgdGhlIGxvc2V0dXAgdXRpbGl0eSwgZm91bmQgaW4gdGhlXFxuIDE2MjpcXHRcXHQgIHV0aWwtbGludXggcGFja2FnZSwgc2VlXFxuIDE2MzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4L1xcdTAwM2UuXFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdCAgVGhlIGxvb3AgZGV2aWNlIGRyaXZlciBjYW4gYWxzbyBiZSB1c2VkIHRvIFxcXCJoaWRlXFxcIiBhIGZpbGUgc3lzdGVtIGluXFxuIDE2NjpcXHRcXHQgIGEgZGlzayBwYXJ0aXRpb24sIGZsb3BweSwgb3IgcmVndWxhciBmaWxlLCBlaXRoZXIgdXNpbmcgZW5jcnlwdGlvblxcbiAxNjc6XFx0XFx0ICAoc2NyYW1ibGluZyB0aGUgZGF0YSkgb3Igc3RlZ2Fub2dyYXBoeSAoaGlkaW5nIHRoZSBkYXRhIGluIHRoZSBsb3dcXG4gMTY4OlxcdFxcdCAgYml0cyBvZiwgc2F5LCBhIHNvdW5kIGZpbGUpLiBUaGlzIGlzIGFsc28gc2FmZSBpZiB0aGUgZmlsZSByZXNpZGVzXFxuIDE2OTpcXHRcXHQgIG9uIGEgcmVtb3RlIGZpbGUgc2VydmVyLlxcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHQgIE5vdGUgdGhhdCB0aGlzIGxvb3AgZGV2aWNlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGxvb3BiYWNrXFxuIDE3MjpcXHRcXHQgIGRldmljZSB1c2VkIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zIGZyb20gdGhlIG1hY2hpbmUgdG8gaXRzZWxmLlxcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxNzU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbG9vcC5cXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0ICBNb3N0IHVzZXJzIHdpbGwgYW5zd2VyIE4gaGVyZS5cXG4gMTc4OlxcdFxcbiAxNzk6XFx0Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MDguODQyNTQ3ODA0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzMzc3MzQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBsb29wLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBlc3BlY2lhbGx5IHRoZSBmdW5jdGlvbnMgYXQgcGxheSBhbmQgd2hlcmUgdGhleSdyZSBiZWluZyBjYWxsZWQgZnJvbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbG9vcC5jYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkgd2FudCB0byBzZWUgdGhlIGtleSBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gaXQsIGFuZCB0aGVuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dCBvZiBob3cgdGhleSBhcmUgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvIGlzIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGludm9raW5nIHRoaXMgbG9vcCBsb2dpYy4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0cyB3aWxsIGdpdmUgbWUgaW1wb3J0YW50IGNsdWVzIGFib3V0IHRoZSBkYXRhIGJlaW5nIHByb2Nlc3NlZCBhbmQgdGhlIG92ZXJhbGwgb2JqZWN0aXZlIG9mIHRoaXMgY29kZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI2NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MTAuNjc2MzIzODc2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODIzNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3BfY2xlYXJfbGltaXRzfGxvX2ZhbGxvY2F0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMjE9c3RhdGljIHZvaWQgbG9vcF9zZXRfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBsb2ZmX3Qgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjc6c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQ0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI0NTpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNDYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjUwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI1MTpzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjUyLVxcdFxcdFxcdGludCBtb2RlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjc0LVxcdGlmICh1bmxpa2VseShyZXQgPT0gLUVPUE5PVFNVUFApKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI3NTpcXHRcXHRsb29wX2NsZWFyX2xpbWl0cyhsbywgbW9kZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjc2LVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9NDE0PXN0YXRpYyBpbnQgZG9fcmVxX2ZpbGViYWNrZWQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDI2LVxcdFxcdCAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQyNzpcXHRcXHRyZXR1cm4gbG9fZmFsbG9jYXRlKGxvLCBycSwgcG9zLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQyOC1cXHRcXHRcXHQocnEtXFx1MDAzZWNtZF9mbGFncyBcXHUwMDI2IFJFUV9OT1VOTUFQKSA/XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MzEtXFx0Y2FzZSBSRVFfT1BfRElTQ0FSRDpcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0MzI6XFx0XFx0cmV0dXJuIGxvX2ZhbGxvY2F0ZShsbywgcnEsIHBvcywgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQzMy1cXHRjYXNlIFJFUV9PUF9XUklURTpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIwMjc9c3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxMDgtXFx0SU5JVF9XT1JLKFxcdTAwMjZsby1cXHUwMDNlcm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjEwOTpcXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTEwLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZsby1cXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MTAuNzI1MTU2NTg0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NTU5ODUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvb3AgQmxvY2sgRHJpdmVyKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuIEkgbmVlZCB0byBwaW5wb2ludCBzb21lIHJvYnVzdCBgRm9jdXNTeW1ib2xzYCB3aXRoaW4gdGhpcyBmaWxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb25zIGFyb3VuZCBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCwgYGxvb3BfY2xlYXJfbGltaXRzYCwgYGxvX2ZhbGxvY2F0ZWAsIGBsb29wX2NvbmZpZ3VyZWAsIGFuZCBgbG9vcF9zZXRfc3RhdHVzYCBhcyB3ZWxsIGFzIGBsb29wX2NvbnRyb2xfaW9jdGxgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYW5hbHlzaXMuIE5leHQsIEknbGwgc3lzdGVtYXRpY2FsbHkgc2VhcmNoIGZvciBhbnkgbm9uLXN0YXRpYyBvciBlbnRyeS1wb2ludCBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgYW55IHdvcmsgcXVldWUgZnVuY3Rpb25zIHdpdGhpbiBgbG9vcC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZmlsZSdzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwOTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MTIuOTgwNzU4NTI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ3NDIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuYz04Mj1zdHJ1Y3QgbG9vcF9jbWQge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTUtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6OTY6c3RhdGljIERFRklORV9JRFIobG9vcF9pbmRleF9pZHIpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk3OnN0YXRpYyBERUZJTkVfTVVURVgobG9vcF9jdGxfbXV0ZXgpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk4OnN0YXRpYyBERUZJTkVfTVVURVgobG9vcF92YWxpZGF0ZV9tdXRleCk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTEtICovXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTEyOnN0YXRpYyBpbnQgbG9vcF9nbG9iYWxfbG9ja19raWxsYWJsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBib29sIGdsb2JhbClcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTMyLSAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEzMzpzdGF0aWMgdm9pZCBsb29wX2dsb2JhbF91bmxvY2soc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYm9vbCBnbG9iYWwpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTM0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0MT1zdGF0aWMgaW50IHBhcnRfc2hpZnQ7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQyLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0MzpzdGF0aWMgbG9mZl90IGxvX2NhbGN1bGF0ZV9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODMtICovXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg0OnN0YXRpYyBib29sIGxvX2Nhbl91c2VfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwMi0gKi9cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDM6c3RhdGljIGlubGluZSB2b2lkIGxvb3BfdXBkYXRlX2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjAtICovXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjIxOnN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjIyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjc6c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQ0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI0NTpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNDYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjUwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI1MTpzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjUyLVxcdFxcdFxcdGludCBtb2RlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjc5LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI4MDpzdGF0aWMgaW50IGxvX3JlcV9mbHVzaChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjgxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI4OC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyODk6c3RhdGljIHZvaWQgbG9fY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI5MC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMjItXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MzIzOnN0YXRpYyB2b2lkIGxvX3J3X2Fpb19kb19jb21wbGV0aW9uKHN0cnVjdCBsb29wX2NtZCAqY21kKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTMyNC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMzYtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MzM3OnN0YXRpYyB2b2lkIGxvX3J3X2Fpb19jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTMzOC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zNDQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MzQ1OnN0YXRpYyBpbnQgbG9fcndfYWlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2NtZCAqY21kLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTM0Ni1cXHRcXHQgICAgIGxvZmZfdCBwb3MsIGludCBydylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQxMy1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0MTQ6c3RhdGljIGludCBkb19yZXFfZmlsZWJhY2tlZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDE1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ0Mi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0NDM6c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ0NC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NDU1OnN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDg3LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ4ODpzdGF0aWMgaW5saW5lIGludCBpc19sb29wX2RldmljZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00ODkte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDk0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ5NTpzdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00OTYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTE5LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUyMDpzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTIxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUzMS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MzI6c3RhdGljIGludCBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MzMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTUwLSAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjU1MTpzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTUyLVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY0Ny1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo2NDg6c3RhdGljIHNzaXplX3QgbG9vcF9hdHRyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY0OS1cXHRcXHRcXHQgICAgICBzc2l6ZV90ICgqY2FsbGJhY2spKHN0cnVjdCBsb29wX2RldmljZSAqLCBjaGFyICopKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNjU3LSNkZWZpbmUgTE9PUF9BVFRSX1JPKF9uYW1lKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo2NTg6c3RhdGljIHNzaXplX3QgbG9vcF9hdHRyXyMjX25hbWUjI19zaG93KHN0cnVjdCBsb29wX2RldmljZSAqLCBjaGFyICopO1xcdFxcXFxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo2NTk6c3RhdGljIHNzaXplX3QgbG9vcF9hdHRyX2RvX3Nob3dfIyNfbmFtZShzdHJ1Y3QgZGV2aWNlICpkLFxcdFxcdFxcXFxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02NjAtXFx0XFx0XFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmIpXFx0XFxcXFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9NjY0PXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBsb29wX2F0dHJfIyNfbmFtZSA9XFx0XFx0XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNjY2LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjY2NzpzdGF0aWMgc3NpemVfdCBsb29wX2F0dHJfYmFja2luZ19maWxlX3Nob3coc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY2hhciAqYnVmKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY2OC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02ODgtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6Njg5OnN0YXRpYyBzc2l6ZV90IGxvb3BfYXR0cl9vZmZzZXRfc2hvdyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjaGFyICpidWYpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNjkwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY5My1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo2OTQ6c3RhdGljIHNzaXplX3QgbG9vcF9hdHRyX3NpemVsaW1pdF9zaG93KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02OTUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNjk4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjY5OTpzdGF0aWMgc3NpemVfdCBsb29wX2F0dHJfYXV0b2NsZWFyX3Nob3coc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY2hhciAqYnVmKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTcwMC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03MDUtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NzA2OnN0YXRpYyBzc2l6ZV90IGxvb3BfYXR0cl9wYXJ0c2Nhbl9zaG93KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03MDcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNzEyLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjcxMzpzdGF0aWMgc3NpemVfdCBsb29wX2F0dHJfZGlvX3Nob3coc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY2hhciAqYnVmKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTcxNC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03MTktXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NzIwOkxPT1BfQVRUUl9STyhiYWNraW5nX2ZpbGUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjcyMTpMT09QX0FUVFJfUk8ob2Zmc2V0KTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3MjI6TE9PUF9BVFRSX1JPKHNpemVsaW1pdCk7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6NzIzOkxPT1BfQVRUUl9STyhhdXRvY2xlYXIpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjcyNDpMT09QX0FUVFJfUk8ocGFydHNjYW4pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjcyNTpMT09QX0FUVFJfUk8oZGlvKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03MjYtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz03Mzc9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG9vcF9hdHRyaWJ1dGVfZ3JvdXAgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03NDEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NzQyOnN0YXRpYyB2b2lkIGxvb3Bfc3lzZnNfaW5pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc0My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03NDctXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NzQ4OnN0YXRpYyB2b2lkIGxvb3Bfc3lzZnNfZXhpdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc0OS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03NTQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NzU1OnN0YXRpYyB2b2lkIGxvb3BfZ2V0X2Rpc2NhcmRfY29uZmlnKHN0cnVjdCBsb29wX2RldmljZSAqbG8sXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNzU2LVxcdFxcdFxcdFxcdCAgICB1MzIgKmdyYW51bGFyaXR5LCB1MzIgKm1heF9kaXNjYXJkX3NlY3RvcnMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz03ODU9c3RydWN0IGxvb3Bfd29ya2VyIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc5NC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3OTU6c3RhdGljIHZvaWQgbG9vcF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03OTYtXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNzk3LSNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjc5ODpzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9vbl9yb290X3dvcmtlcihzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc5OS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04MDItI2Vsc2VcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo4MDM6c3RhdGljIGlubGluZSBpbnQgcXVldWVfb25fcm9vdF93b3JrZXIoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04MDQte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtODA4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjgwOTpzdGF0aWMgdm9pZCBsb29wX3F1ZXVlX3dvcmsoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtODEwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTg3OC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo4Nzk6c3RhdGljIHZvaWQgbG9vcF9zZXRfdGltZXIoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04ODAte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtODgzLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjg4NDpzdGF0aWMgdm9pZCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJvb2wgZGVsZXRlX2FsbClcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04ODUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTA0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjkwNTpzdGF0aWMgdm9pZCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05MDYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9OTIwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5MjE6bG9vcF9zZXRfc3RhdHVzX2Zyb21faW5mbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTkyMi1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBsb29wX2luZm82NCAqaW5mbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk1MS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5NTI6c3RhdGljIHVuc2lnbmVkIGludCBsb29wX2RlZmF1bHRfYmxvY2tzaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTUzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk1OS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5NjA6c3RhdGljIHZvaWQgbG9vcF9zZXRfZG1hX2xpbWl0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NjEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTcyLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk3MzpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk3NC1cXHRcXHR1bnNpZ25lZCBpbnQgYnNpemUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDA3LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwMDg6c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTAwOS1cXHRcXHRcXHQgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTQxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExNDI6c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExNDMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxNC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjE1OnN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEyNDk9c3RhdGljIGludFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyNTA6bG9vcF9zZXRfc3RhdHVzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGNvbnN0IHN0cnVjdCBsb29wX2luZm82NCAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjUxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEzMDQ9c3RhdGljIGludFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEzMDU6bG9vcF9nZXRfc3RhdHVzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2luZm82NCAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMzA2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEzNDA9c3RhdGljIHZvaWRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMzQxOmxvb3BfaW5mbzY0X2Zyb21fb2xkKGNvbnN0IHN0cnVjdCBsb29wX2luZm8gKmluZm8sIHN0cnVjdCBsb29wX2luZm82NCAqaW5mbzY0KVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEzNDIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTM1ND1zdGF0aWMgaW50XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTM1NTpsb29wX2luZm82NF90b19vbGQoY29uc3Qgc3RydWN0IGxvb3BfaW5mbzY0ICppbmZvNjQsIHN0cnVjdCBsb29wX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTM1Ni17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMzc2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMzc3Omxvb3Bfc2V0X3N0YXR1c19vbGQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY29uc3Qgc3RydWN0IGxvb3BfaW5mbyBfX3VzZXIgKmFyZylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMzc4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEzODg9c3RhdGljIGludFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEzODk6bG9vcF9zZXRfc3RhdHVzNjQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY29uc3Qgc3RydWN0IGxvb3BfaW5mbzY0IF9fdXNlciAqYXJnKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEzOTAte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTM5OD1zdGF0aWMgaW50XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTM5OTpsb29wX2dldF9zdGF0dXNfb2xkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2luZm8gX191c2VyICphcmcpIHtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDAwLVxcdHN0cnVjdCBsb29wX2luZm8gaW5mbztcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0MTU9c3RhdGljIGludFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0MTY6bG9vcF9nZXRfc3RhdHVzNjQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfaW5mbzY0IF9fdXNlciAqYXJnKSB7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQxNy1cXHRzdHJ1Y3QgbG9vcF9pbmZvNjQgaW5mbzY0O1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQyOC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDI5OnN0YXRpYyBpbnQgbG9vcF9zZXRfY2FwYWNpdHkoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDMwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NDEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ0MjpzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDQzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NzEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ3MjpzdGF0aWMgaW50IGxvb3Bfc2V0X2Jsb2NrX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NzMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUxOS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTIwOnN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyMS1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NDEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTU0MjpzdGF0aWMgaW50IGxvX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTQzLVxcdHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTYyNj1zdGF0aWMgbm9pbmxpbmUgaW50XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTYyNzpsb29wX2luZm82NF9mcm9tX2NvbXBhdChjb25zdCBzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBfX3VzZXIgKmFyZyxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNjI4LVxcdFxcdFxcdHN0cnVjdCBsb29wX2luZm82NCAqaW5mbzY0KVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTY1MT1zdGF0aWMgbm9pbmxpbmUgaW50XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTY1Mjpsb29wX2luZm82NF90b19jb21wYXQoY29uc3Qgc3RydWN0IGxvb3BfaW5mbzY0ICppbmZvNjQsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTY1My1cXHRcXHQgICAgICBzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBfX3VzZXIgKmFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE2Nzg9c3RhdGljIGludFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE2Nzk6bG9vcF9zZXRfc3RhdHVzX2NvbXBhdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE2ODAtXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTY5MT1zdGF0aWMgaW50XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTY5Mjpsb29wX2dldF9zdGF0dXNfY29tcGF0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTY5My1cXHRcXHQgICAgICAgc3RydWN0IGNvbXBhdF9sb29wX2luZm8gX191c2VyICphcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzA1LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3MDY6c3RhdGljIGludCBsb19jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MDctXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzQxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3NDI6c3RhdGljIGludCBsb19vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc0My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzU2LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3NTc6c3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzU4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3ODAtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTc4MTpzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc4Mi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODIyPXN0YXRpYyBib29sIG1heF9sb29wX3NwZWNpZmllZDtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODIzLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4MjQ6c3RhdGljIGludCBtYXhfbG9vcF9wYXJhbV9zZXRfaW50KGNvbnN0IGNoYXIgKnZhbCxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODI1LVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODM3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBtYXhfbG9vcF9wYXJhbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NDI6bW9kdWxlX3BhcmFtX2NiKG1heF9sb29wLCBcXHUwMDI2bWF4X2xvb3BfcGFyYW1fb3BzLCBcXHUwMDI2bWF4X2xvb3AsIDA0NDQpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NDM6TU9EVUxFX1BBUk1fREVTQyhtYXhfbG9vcCwgXFxcIk1heGltdW0gbnVtYmVyIG9mIGxvb3AgZGV2aWNlc1xcXCIpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NDQtI2Vsc2VcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODQ1Om1vZHVsZV9wYXJhbShtYXhfbG9vcCwgaW50LCAwNDQ0KTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODQ2Ok1PRFVMRV9QQVJNX0RFU0MobWF4X2xvb3AsIFxcXCJJbml0aWFsIG51bWJlciBvZiBsb29wIGRldmljZXNcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQ3LSNlbmRpZlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NDgtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg0OTptb2R1bGVfcGFyYW0obWF4X3BhcnQsIGludCwgMDQ0NCk7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg1MDpNT0RVTEVfUEFSTV9ERVNDKG1heF9wYXJ0LCBcXFwiTWF4aW11bSBudW1iZXIgb2YgcGFydGl0aW9ucyBwZXIgbG9vcCBkZXZpY2VcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODUxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4NTI9c3RhdGljIGludCBod19xdWV1ZV9kZXB0aCA9IExPT1BfREVGQVVMVF9IV19RX0RFUFRIO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTMtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg1NDpzdGF0aWMgaW50IGxvb3Bfc2V0X2h3X3F1ZXVlX2RlcHRoKGNvbnN0IGNoYXIgKnMsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKnApXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg1NS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODY3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBsb29wX2h3X3FkZXB0aF9wYXJhbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODcxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NzI6ZGV2aWNlX3BhcmFtX2NiKGh3X3F1ZXVlX2RlcHRoLCBcXHUwMDI2bG9vcF9od19xZGVwdGhfcGFyYW1fb3BzLCBcXHUwMDI2aHdfcXVldWVfZGVwdGgsIDA0NDQpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NzM6TU9EVUxFX1BBUk1fREVTQyhod19xdWV1ZV9kZXB0aCwgXFxcIlF1ZXVlIGRlcHRoIGZvciBlYWNoIGhhcmR3YXJlIHF1ZXVlLiBEZWZhdWx0OiBcXFwiIF9fc3RyaW5naWZ5KExPT1BfREVGQVVMVF9IV19RX0RFUFRIKSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg3NC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODc1Ok1PRFVMRV9ERVNDUklQVElPTihcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODc2Ok1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODc3Ok1PRFVMRV9BTElBU19CTE9DS0RFVl9NQUpPUihMT09QX01BSk9SKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODc4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4Nzk6c3RhdGljIGJsa19zdGF0dXNfdCBsb29wX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4ODAtXFx0XFx0Y29uc3Qgc3RydWN0IGJsa19tcV9xdWV1ZV9kYXRhICpiZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5MjEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTkyMjpzdGF0aWMgdm9pZCBsb29wX2hhbmRsZV9jbWQoc3RydWN0IGxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTkyMy17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xOTczLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE5NzQ6c3RhdGljIHZvaWQgbG9vcF9wcm9jZXNzX3dvcmsoc3RydWN0IGxvb3Bfd29ya2VyICp3b3JrZXIsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTk3NS1cXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpjbWRfbGlzdCwgc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwMDctXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjAwODpzdGF0aWMgdm9pZCBsb29wX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjAwOS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDE0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIwMTU6c3RhdGljIHZvaWQgbG9vcF9yb290Y2dfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDE2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIwMjI9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIGxvb3BfbXFfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjAyNi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDI3OnN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjAyOC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTQ1LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIxNDY6c3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTQ3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxNjMtI2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTY0OnN0YXRpYyB2b2lkIGxvb3BfcHJvYmUoZGV2X3QgZGV2KVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxNjUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE3NS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTc2OnN0YXRpYyBpbnQgbG9vcF9jb250cm9sX3JlbW92ZShpbnQgaWR4KVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxNzcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjIyMi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjIzOnN0YXRpYyBpbnQgbG9vcF9jb250cm9sX2dldF9mcmVlKGludCBpZHgpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjIyNC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjQ2LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNDc6c3RhdGljIGxvbmcgbG9vcF9jb250cm9sX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNDgtXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgcGFybSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIyNzA9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGxvb3BfbWlzYyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNzUtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI3NjpNT0RVTEVfQUxJQVNfTUlTQ0RFVihMT09QX0NUUkxfTUlOT1IpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNzc6TU9EVUxFX0FMSUFTKFxcXCJkZXZuYW1lOmxvb3AtY29udHJvbFxcXCIpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNzgtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI3OTpzdGF0aWMgaW50IF9faW5pdCBsb29wX2luaXQodm9pZClcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzMzEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjMzMjpzdGF0aWMgdm9pZCBfX2V4aXQgbG9vcF9leGl0KHZvaWQpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjMzMy17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzUxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzNTI6bW9kdWxlX2luaXQobG9vcF9pbml0KTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMzUzOm1vZHVsZV9leGl0KGxvb3BfZXhpdCk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjM1NC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzU1LSNpZm5kZWYgTU9EVUxFXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjM1NjpzdGF0aWMgaW50IF9faW5pdCBtYXhfbG9vcF9zZXR1cChjaGFyICpzdHIpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjM1Ny17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzY0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzNjU6X19zZXR1cChcXFwibWF4X2xvb3A9XFxcIiwgbWF4X2xvb3Bfc2V0dXApO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzNjYtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE5OjM3OjEzLjAyODIzOTUxN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTU4ODQ3NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBMb29wIERldmljZSBEcml2ZXIgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaXMgb24gdGhpcyBzcGVjaWZpYyBwYXRjaCB0b3VjaGluZyB0aGUgbG9vcCBkZXZpY2UgZHJpdmVyLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBzeW1ib2xzLiBJJ20gemVyb2luZyBpbiBvbiBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCwgYGxvb3BfY2xlYXJfbGltaXRzYCwgYGxvX2ZhbGxvY2F0ZWAsIGBsb29wX2NvbmZpZ3VyZWAsIGBsb19pb2N0bGAsIGFuZCBgbG9vcF9jb250cm9sX2lvY3RsYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBCTEtfREVWX0xPT1BgLiBEaXZpbmcgaW50byBgZHJpdmVycy9ibG9jay9LY29uZmlnYCwgaXQgbG9va3MgbGlrZSBgQkxLX0RFVl9MT09QYCBpcyBzdHJhaWdodGZvcndhcmQ7IGl0IGRlcGVuZHMgb24gdGhlIGJsb2NrIGRldmljZSBpbmZyYXN0cnVjdHVyZSBpdHNlbGYgKGBCTE9DS2ApLCB3aGljaCBpcyBoYW5kbGVkIGJ5IGBDT05GSUdfQkxPQ0tgLiBUaGF0J3MgZ29vZC4gTm8gb2JzY3VyZSBkZXBlbmRlbmNpZXMgdG8gd29ycnkgYWJvdXQuXG5cbkxldCdzIGRvIGEgZmluYWwgc2FuaXR5IGNoZWNrLCBwdWxsaW5nIGl0IGFsbCB0b2dldGhlcjogSSd2ZSBnb3QgYFdvcnRoRnV6emluZ2Agc2V0IHRvIHRydWUsIGBFbmFibGVDb25maWdzYCB3aXRoIGBcIkJMS19ERVZfTE9PUFwiYCwgYW5kIGBGb2N1c1N5bWJvbHNgIHNldCB0byBgXCJsb29wX2NsZWFyX2xpbWl0c193b3JrZm5cIiwgXCJsb29wX2NsZWFyX2xpbWl0c1wiLCBcImxvX2ZhbGxvY2F0ZVwiLCBcImxvb3BfY29uZmlndXJlXCJgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBUaGlzIHBhdGNoJ3MgcHVycG9zZSBpcyB0byBkZWZlciBxdWV1ZSBsaW1pdCB1cGRhdGVzIHdoZW4gYGZhbGxvY2F0ZWAgb3BlcmF0aW9ucyBmYWlsLCB1c2luZyBhIHdvcmtxdWV1ZSAoYGNsZWFyX2xpbWl0c193b3JrYCkgYW5kIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oKWAuIFRoaXMgZGlyZWN0bHkgYWRkcmVzc2VzIHF1ZXVlIGxvY2tpbmcgaXNzdWVzIGR1cmluZyByZXF1ZXN0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIGRpc2NhcmQgYW5kIHplcm8tcmFuZ2UgcXVldWUgbGltaXQgdXBkYXRlcy5cblxuTm93LCBsZXQncyB2ZXJpZnkgYWxsIHRoZSB0b29sIGNhbGxzIGFuZCBwYXJhbWV0ZXJzLiBJdCBsb29rcyBsaWtlIGl0IGlzIHJlYWR5IHRvIGV4ZWN1dGUgd2l0aCBgc2V0LXJlc3VsdHNgLiBFdmVyeXRoaW5nIGlzIGNvcnJlY3QuIEknbSBnb2luZyB0byBzZXQgaXQgaW4gbW90aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE2NSwiT3V0cHV0VG9rZW5zIjoxMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MTcuNTg3MDg5NjIzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2ODIyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzX3dvcmtmblwiLFxuICAgIFwibG9vcF9jbGVhcl9saW1pdHNcIixcbiAgICBcImxvX2ZhbGxvY2F0ZVwiLFxuICAgIFwibG9vcF9jb25maWd1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBoYW5kbGUgY2xlYXJpbmcgcXVldWUgbGltaXRzIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoY2xlYXJfbGltaXRzX3dvcmspIGluc3RlYWQgb2YgZGlyZWN0bHkgaW5zaWRlIHF1ZXVlX3JxIGNvbnRleHQuIFRoaXMgcHJvcGVybHkgdXNlcyBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4gdG8gZm9sbG93IHRoZSBxdWV1ZSBsaW1pdHMgbG9ja2luZyBwcm90b2NvbCB3aGVuIGZhbGxvY2F0ZSBvcGVyYXRpb25zIGZhaWwgb24gbG9vcCBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzX3dvcmtmblwiLFxuICAgIFwibG9vcF9jbGVhcl9saW1pdHNcIixcbiAgICBcImxvX2ZhbGxvY2F0ZVwiLFxuICAgIFwibG9vcF9jb25maWd1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBoYW5kbGUgY2xlYXJpbmcgcXVldWUgbGltaXRzIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoY2xlYXJfbGltaXRzX3dvcmspIGluc3RlYWQgb2YgZGlyZWN0bHkgaW5zaWRlIHF1ZXVlX3JxIGNvbnRleHQuIFRoaXMgcHJvcGVybHkgdXNlcyBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4gdG8gZm9sbG93IHRoZSBxdWV1ZSBsaW1pdHMgbG9ja2luZyBwcm90b2NvbCB3aGVuIGZhbGxvY2F0ZSBvcGVyYXRpb25zIGZhaWwgb24gbG9vcCBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNzoxNy42NjY3NzgxMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzNTgyNDcyMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNzoxNy42NjcyMzM1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5MzU3Nzg2MzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB0cmFuc2l0aW9ucyB0aGUgbG9vcCBkcml2ZXIncyBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgbG9naWMgZnJvbSBzeW5jaHJvbm91cyBleGVjdXRpb24gaW5zaWRlIHJlcXVlc3QgaGFuZGxpbmcgdG8gYW4gYXN5bmNocm9ub3VzIHdvcmtxdWV1ZSAoYGNsZWFyX2xpbWl0c193b3JrYCkgdXNpbmcgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbigpYC5cXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3QgZmllbGRzIChgY2xlYXJfbGltaXRzX3dvcmtgIGFuZCBgY2xlYXJfbGltaXRzX21vZGVgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IHRoZSBgbG9vcF9kZXZpY2VgIHN0cnVjdCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgdGhlIHdvcmsgaXRlbSBpcyBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUksoKWAsIGFuZCB0aGUgYXRvbWljIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgcmVzZXQgd2l0aCBgYXRvbWljX3NldGAgLyBhdG9taWMgb3BlcmF0aW9ucy4gVGhlIGBzdHJ1Y3QgcXVldWVfbGltaXRzYCB1c2VkIGluIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gIGlzIGluaXRpYWxpemVkIGZyb20gYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgKHdoaWNoIHJldHVybnMgdGhlIGN1cnJlbnQgcXVldWUgbGltaXRzKS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgcXVldWUgZnJlZXppbmcgbG9ja2luZyBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzgzNzhkOGRiZjg5YjgxYTQ4MjA2Zjc5NjljMThkZGZjZmIwZTYxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTk6MzY6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA2ZjEyOTc2MDM1YjA5Li4zNjhlYTg1Nzg5NWNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNjcsNiArNjcsOCBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgcm9vdGNnX2NtZF9saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgaWRsZV93b3JrZXJfbGlzdDtcbiBcdHN0cnVjdCByYl9yb290ICAgICAgICAgIHdvcmtlcl90cmVlO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0ICAgICAgY2xlYXJfbGltaXRzX3dvcms7XG4rXHRhdG9taWNfdFx0XHRjbGVhcl9saW1pdHNfbW9kZTtcbiBcdHN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHRpbWVyO1xuIFx0Ym9vbFx0XHRcdHN5c2ZzX2luaXRlZDtcbiBcbkBAIC0yMjIsOSArMjI0LDEyIEBAIHN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpXG4gXHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNmRpc2tfdG9fZGV2KGxvLVx1MDAzZWxvX2Rpc2spLVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXG4rc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4rXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgY2xlYXJfbGltaXRzX3dvcmspO1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbitcdGludCBtb2RlID0gYXRvbWljX3hjaGcoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX21vZGUsIDApO1xuIFxuIFx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9aRVJPX1JBTkdFKVxuIFx0XHRsaW0ubWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gMDtcbkBAIC0yMzQsMTQgKzIzOSwxMyBAQCBzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbiBcdFx0bGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIFhYWDogdGhpcyB1cGRhdGVzIHRoZSBxdWV1ZSBsaW1pdHMgd2l0aG91dCBmcmVlemluZyB0aGUgcXVldWUsIHdoaWNoXG4tXHQgKiBpcyBhZ2FpbnN0IHRoZSBsb2NraW5nIHByb3RvY29sIGFuZCBkYW5nZXJvdXMuICBCdXQgd2UgY2FuJ3QganVzdFxuLVx0ICogZnJlZXplIHRoZSBxdWV1ZSBhcyB3ZSdyZSBpbnNpZGUgdGhlIC1cdTAwM2VxdWV1ZV9ycSBtZXRob2QgaGVyZS4gIFNvIHRoaXNcbi1cdCAqIHNob3VsZCBtb3ZlIG91dCBpbnRvIGEgd29ya3F1ZXVlIHVubGVzcyB3ZSBnZXQgdGhlIGZpbGUgb3BlcmF0aW9ucyB0b1xuLVx0ICogYWR2ZXJ0aXNlIGlmIHRoZXkgc3VwcG9ydCBzcGVjaWZpYyBmYWxsb2NhdGUgb3BlcmF0aW9ucy5cbi1cdCAqL1xuLVx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUsIFx1MDAyNmxpbSk7XG4rXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obG8tXHUwMDNlbG9fcXVldWUsIFx1MDAyNmxpbSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuK3tcbitcdGF0b21pY19vcihtb2RlLCBcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSk7XG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbiB9XG4gXG4gc3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxuQEAgLTUxNiw2ICs1MjAsNyBAQCBzdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuIFx0bG8tXHUwMDNlbG9fYmFja2luZ19maWxlID0gZmlsZTtcbitcdGF0b21pY19zZXQoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX21vZGUsIDApO1xuIFx0bG8tXHUwMDNlb2xkX2dmcF9tYXNrID0gbWFwcGluZ19nZnBfbWFzayhmaWxlLVx1MDAzZWZfbWFwcGluZyk7XG4gXHRtYXBwaW5nX3NldF9nZnBfbWFzayhmaWxlLVx1MDAzZWZfbWFwcGluZyxcbiBcdFx0XHRsby1cdTAwM2VvbGRfZ2ZwX21hc2sgXHUwMDI2IH4oX19HRlBfSU8gfCBfX0dGUF9GUykpO1xuQEAgLTE3ODEsNiArMTc4Niw3IEBAIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbiBcdGxvb3BfZnJlZV9pZGxlX3dvcmtlcnMobG8sIHRydWUpO1xuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZsby1cdTAwM2V0aW1lcik7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuIFx0a2ZyZWUobG8pO1xuIH1cbkBAIC0yMTAwLDYgKzIxMDYsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsby1cdTAwM2Vsb193b3JrX2xvY2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pO1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcbiBcdGRpc2stXHUwMDNlbWFqb3JcdFx0PSBMT09QX01BSk9SO1xuIFx0ZGlzay1cdTAwM2VmaXJzdF9taW5vclx0PSBpIFx1MDAzY1x1MDAzYyBwYXJ0X3NoaWZ0O1xuQEAgLTIxMzgsNiArMjE0NSwxMCBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4ge1xuK1x0LyogQ2FuY2VsIGVhcmx5OiB0aGUgcXVldWUgbWF5IGJlIGluIFJDVS1kZWxheWVkIGZyZWVpbmdcbitcdCAqIGJ5IHRoZSB0aW1lIGxvX2ZyZWVfZGlzaygpIHJ1bnMuICovXG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbitcbiBcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xuIFx0ZGVsX2dlbmRpc2sobG8tXHUwMDNlbG9fZGlzayk7XG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmxvLVx1MDAzZXRhZ19zZXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MTcuNjY3MjM2MDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTkyNjg5MzA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvb3AgRGV2aWNlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBMZXQncyBicmVhayBkb3duIHdoYXQncyBoYXBwZW5pbmcgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UncmUgYWRkcmVzc2luZyBzb21lIGNvbmN1cnJlbmN5IGlzc3VlcyByZWxhdGVkIHRvIHF1ZXVlIGxpbWl0cy5cblxuRmlyc3QsIGl0IGxvb2tzIGxpa2Ugd2UncmUgYWRkaW5nIHR3byBuZXcgbWVtYmVycyB0byB0aGUgYHN0cnVjdCBsb29wX2RldmljZWA6IGEgYHN0cnVjdCB3b3JrX3N0cnVjdCBjbGVhcl9saW1pdHNfd29yaztgIGFuZCBhbiBgYXRvbWljX3QgY2xlYXJfbGltaXRzX21vZGU7YC4gU2VlbXMgbGlrZSB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhc3luY2hyb25vdXMgbGltaXQgdXBkYXRlcywgd2hpY2ggaXMgdXN1YWxseSBhIGdvb2Qgc2lnbiBmb3IgYXZvaWRpbmcgdGhvc2UgcGVza3kgcXVldWUgZnJlZXppbmcgcHJvYmxlbXMuXG5cblNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgdGhlIHN5bmNocm9ub3VzIGNhbGwgdG8gYGxvb3BfY2xlYXJfbGltaXRzKGxvLCBtb2RlKWAgd2l0aCBhbiBhc3luY2hyb25vdXMgYXBwcm9hY2guIFRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBjYWxsZWQgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVgIGRpcmVjdGx5LCB3aGljaCwgZ2l2ZW4gdGhlIFwiaW5zaWRlIGAtXHUwMDNlcXVldWVfcnFgXCIgY29udGV4dCwgcHJvYmFibHkgdmlvbGF0ZWQgdGhlIHF1ZXVlIGZyZWV6aW5nIHJ1bGVzLlxuXG5Ob3csIGBsb29wX2NsZWFyX2xpbWl0c2AgYXRvbWljYWxseSBPUnMgdGhlIGBtb2RlYCBpbnRvIGBsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZWAgYW5kIHNjaGVkdWxlcyB0aGUgYGxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrYC4gVGhlIGFjdHVhbCB3b3JrIGlzIGRvbmUgYnkgYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAsIHdoaWNoIHJ1bnMgYXN5bmNocm9ub3VzbHkuIEl0IHJldHJpZXZlcyBhbmQgcmVzZXRzIGBsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZWAgdXNpbmcgYGF0b21pY194Y2hnKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKWAuIFRoZW4gaXQgZmV0Y2hlcyB0aGUgY3VycmVudCBxdWV1ZSBsaW1pdHMgdXNpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpYCwgbW9kaWZpZXMgdGhlbSwgYW5kIGNvbW1pdHMgdGhlIHVwZGF0ZXMgdXNpbmcgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKWAuIE1ha2VzIHNlbnNlOyBpdCdzIGEgc3RhbmRhcmQgcGF0dGVybiBmb3IgZGVmZXJyaW5nIHdvcmsgYW5kIGF2b2lkaW5nIGxvY2sgY29udGVudGlvbi5cblxuSSBzZWUgYElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKWAgYmVpbmcgY2FsbGVkIGR1cmluZyBgbG9vcF9hZGRgIGZvciBpbml0aWFsaXphdGlvbiwgYW5kIGBhdG9taWNfc2V0KFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKWAgaXMgc2V0IGR1cmluZyBgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlYCwgc28gd2UncmUgaW5pdGlhbGl6aW5nIHRoZSB3b3JrIHN0cnVjdCBhbmQgdGhlIG1vZGUgYXBwcm9wcmlhdGVseS4gQW5kIGZpbmFsbHksIHRoZSBwYXRjaCBhZGRzIGBjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKWAgaW4gYGxvX2ZyZWVfZGlza2AgYW5kIGBsb29wX3JlbW92ZWAgdG8gZW5zdXJlIHdlIGRvbid0IGxlYWsgYW55dGhpbmcgd2hlbiB0aGUgZGV2aWNlIGlzIHRvcm4gZG93bi4gR29vZCBob3VzZWtlZXBpbmcuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBzbmVha3kgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGlzc3Vlcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGlzIGxpbmU6IGBzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO2AuIFRoaXMgc3VnZ2VzdHMgd2UncmUgY29weWluZyBxdWV1ZSBsaW1pdHMsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBpbnRvIGEgbG9jYWwgdmFyaWFibGUuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBpcyBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAgaW1wbGVtZW50ZWQ/IExldCdzIGNoZWNrIHRoZSBibG9jayBsYXllciBpbXBsZW1lbnRhdGlvbiB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgdGhlcmUuIFdlIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IHRoZSByZXR1cm5lZCBgcXVldWVfbGltaXRzYCBzdHJ1Y3QgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MjcuNTk0MTM0MTI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQwMTUzOTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWludGVncml0eS5jPTIyNj1zdGF0aWMgc3NpemVfdCBmbGFnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50LFxcbi0tXFxuYmxvY2svYmxrLWludGVncml0eS5jLTIzOC1cXHQvKiBub3RlIHRoYXQgdGhlIGZsYWdzIGFyZSBpbnZlcnRlZCB2cyB0aGUgdmFsdWVzIGluIHRoZSBzeXNmcyBmaWxlcyAqL1xcbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYzoyMzk6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG5ibG9jay9ibGstaW50ZWdyaXR5LmMtMjQwLVxcdGlmICh2YWwpXFxuLS1cXG5ibG9jay9ibGstc2V0dGluZ3MuYz01MjI9aW50IGJsa19zZXRfZGVmYXVsdF9saW1pdHMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTM4LSAqXFxuYmxvY2svYmxrLXNldHRpbmdzLmM6NTM5OiAqIEFwcGx5IHRoZSBsaW1pdHMgaW4gQGxpbSB0aGF0IHdlcmUgb2J0YWluZWQgZnJvbSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClcXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NDAtICogYW5kIHVwZGF0ZWQgYnkgdGhlIGNhbGxlciB0byBAcS4gIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGZyb3plbiB0aGUgcXVldWUgb3JcXG4tLVxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jPTU3MT1FWFBPUlRfU1lNQk9MX0dQTChxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSk7XFxuLS1cXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzctICpcXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1Nzg6ICogQXBwbHkgdGhlIGxpbWl0cyBpbiBAbGltIHRoYXQgd2VyZSBvYnRhaW5lZCBmcm9tIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKVxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU3OS0gKiBhbmQgdXBkYXRlZCB3aXRoIHRoZSBuZXcgdmFsdWVzIGJ5IHRoZSBjYWxsZXIgdG8gQHEuICBGcmVlemVzIHRoZSBxdWV1ZVxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmM9NTk2PUVYUE9SVF9TWU1CT0xfR1BMKHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbik7XFxuLS1cXG5ibG9jay9ibGstc2V0dGluZ3MuYy02MDMtICogQXBwbHkgdGhlIGxpbWl0cyBpbiBAbGltIHRoYXQgd2VyZSBmcmVzaGx5IGluaXRpYWxpemVkIHRvIEBxLlxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjYwNDogKiBUbyB1cGRhdGUgZXhpc3RpbmcgbGltaXRzIHVzZSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCkgYW5kXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNjA1LSAqIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKCkgaW5zdGVhZC5cXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jPTg3OT1xdWV1ZV9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxcbi0tXFxuYmxvY2svYmxrLXN5c2ZzLmMtODkxLVxcbmJsb2NrL2Jsay1zeXNmcy5jOjg5MjpcXHRcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XFxuYmxvY2svYmxrLXN5c2ZzLmMtODkzLVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MjA1OD1zdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMjA2Ni1cXG5ibG9jay9ibGstem9uZWQuYzoyMDY3OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMjA2OC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9MTMwMT12b2lkIGRyYmRfcmVjb25zaWRlcl9xdWV1ZV9wYXJhbWV0ZXJzKHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0xMzM0LVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MTMzNTpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMTMzNi1cXHRpZiAoYmRldikge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjI3PXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzAtXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgY2xlYXJfbGltaXRzX3dvcmspO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzMTpcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzItXFx0aW50IG1vZGUgPSBhdG9taWNfeGNoZyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEwMDg9c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDg3LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwODg6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwODktXFx0bG9vcF91cGRhdGVfbGltaXRzKGxvLCBcXHUwMDI2bGltLCBjb25maWctXFx1MDAzZWJsb2NrX3NpemUpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTE0Mj1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTY0LVxcdCAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExNjU6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExNjYtXFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTQ0Mj1zdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NTktXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ2MDpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ2MS1cXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0NzI9c3RhdGljIGludCBsb29wX3NldF9ibG9ja19zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MDMtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUwNDpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUwNS1cXHRsb29wX3VwZGF0ZV9saW1pdHMobG8sIFxcdTAwMjZsaW0sIGFyZyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTM1NT1zdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zNzQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzozNzU6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM3Ni1cXHRuYmRfYXBwbHlfbGltaXRzKFxcdTAwMjZsaW0sIG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VmbGFncyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE0Njg9c3RhdGljIHZvaWQgbmJkX2NvbmZpZ19wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ3Ni1cXHRcXHQvKiByZXNldCBxdWV1ZSBsaW1pdHMgdG8gZGVmYXVsdCAqL1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQ3NzpcXHRcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ3OC1cXHRcXHRuYmRfYXBwbHlfbGltaXRzKFxcdTAwMjZsaW0sIDApO1xcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTA5ND1jYWNoZV90eXBlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMTA5LVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjExMTA6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTExMS1cXHRpZiAodmlydGJsa19nZXRfY2FjaGVfbW9kZSh2ZGV2KSlcXG4tLVxcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmM9MjAwNj1zdGF0aWMgaW50IGJsa2lmX3JlY292ZXIoc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jLTIwMTQtXFxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYzoyMDE1OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoaW5mby1cXHUwMDNlcnEpO1xcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMtMjAxNi1cXHRibGtmcm9udF9nYXRoZXJfYmFja2VuZF9mZWF0dXJlcyhpbmZvKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdGFibGUuYz0yMDI4PWludCBkbV90YWJsZV9zZXRfcmVzdHJpY3Rpb25zKHN0cnVjdCBkbV90YWJsZSAqdCwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLS1cXG5kcml2ZXJzL21kL2RtLXRhYmxlLmMtMjA4Mi1cXG5kcml2ZXJzL21kL2RtLXRhYmxlLmM6MjA4MzpcXHRvbGRfbGltaXRzID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG5kcml2ZXJzL21kL2RtLXRhYmxlLmMtMjA4NC1cXHRyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltaXRzKTtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz01OTgwPXN0YXRpYyBpbnQgbWRkZXZfc2V0X2xvZ2ljYWxfYmxvY2tfc2l6ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTU5OTEtXFxuZHJpdmVycy9tZC9tZC5jOjU5OTI6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvbWQvbWQuYy01OTkzLVxcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBsYnM7XFxuLS1cXG5kcml2ZXJzL21kL21kLmM9NjI0OT1pbnQgbWRkZXZfc3RhY2tfbmV3X3JkZXYoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtNjI2Mi1cXG5kcml2ZXJzL21kL21kLmM6NjI2MzpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9tZC9tZC5jLTYyNjQtXFx0cXVldWVfbGltaXRzX3N0YWNrX2JkZXYoXFx1MDAyNmxpbSwgcmRldi1cXHUwMDNlYmRldiwgcmRldi1cXHUwMDNlZGF0YV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL21kL21kLmM9NjI3OT12b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtNjI4OC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9tZC9tZC5jOjYyODk6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvbWQvbWQuYy02MjkwLVxcdGxpbS5pb19vcHQgPSBsaW0uaW9fbWluICogbnJfc3RyaXBlcztcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDUuYz03Mjg4PXJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jLTczMDctXFx0XFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWU7XFxuZHJpdmVycy9tZC9yYWlkNS5jOjczMDg6XFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xcbmRyaXZlcnMvbWQvcmFpZDUuYy03MzA5LVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIyMzg9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2dlbmVyaWMoc3RydWN0IG52bWVfbnMgKm5zLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTIyNDQtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjIyNDU6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShucy1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjQ2LVxcdG52bWVfc2V0X2N0cmxfbGltaXRzKG5zLVxcdTAwM2VjdHJsLCBcXHUwMDI2bGltLCBmYWxzZSk7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjQwOD1zdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soc3RydWN0IG52bWVfbnMgKm5zLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI0NTktXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI0NjA6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShucy1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDYxLVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTI1NDE9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTgzLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTg0OlxcdFxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU4NS1cXHRcXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0zNjE3PXN0YXRpYyBpbnQgbnZtZV9pbml0X2lkZW50aWZ5KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMzY4NS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MzY4NjpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGN0cmwtXFx1MDAzZWFkbWluX3EpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0zNjg3LVxcdG52bWVfc2V0X2N0cmxfbGltaXRzKGN0cmwsIFxcdTAwMjZsaW0sIHRydWUpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYz0zMjQ9c3RhdGljIGludCBkYXNkX3N0YXRlX2Jhc2ljX3RvX3JlYWR5KHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zNDYtXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozNDc6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShibG9jay1cXHUwMDNlZ2RwLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zNDgtXFx0bGltLm1heF9kZXZfc2VjdG9ycyA9IGRldmljZS1cXHUwMDNlZGlzY2lwbGluZS1cXHUwMDNlbWF4X3NlY3RvcnMoYmxvY2spO1xcbi0tXFxuZHJpdmVycy9zY3NpL21waTNtci9tcGkzbXJfb3MuYz0xMDY3PW1waTNtcl91cGRhdGVfc2RldihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3Njc2kvbXBpM21yL21waTNtcl9vcy5jLTEwNzctXFxuZHJpdmVycy9zY3NpL21waTNtci9tcGkzbXJfb3MuYzoxMDc4OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2Rldi1cXHUwMDNlcmVxdWVzdF9xdWV1ZSk7XFxuZHJpdmVycy9zY3NpL21waTNtci9tcGkzbXJfb3MuYy0xMDc5LVxcdG1waTNtcl9jb25maWd1cmVfdGd0X2Rldih0Z3RkZXYsIFxcdTAwMjZsaW0pO1xcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jPTg4MD1zdGF0aWMgaW50IHNjc2lfYWRkX2x1bihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHVuc2lnbmVkIGNoYXIgKmlucV9yZXN1bHQsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMtMTA4OS1cXHQgKi9cXG5kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmM6MTA5MDpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNkZXYtXFx1MDAzZXJlcXVlc3RfcXVldWUpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYy0xMDkxLVxcdGlmICgqYmZsYWdzIFxcdTAwMjYgQkxJU1RfTUFYXzUxMilcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jPTIyMD1jYWNoZV90eXBlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYy0yNTgtXFxuZHJpdmVycy9zY3NpL3NkLmM6MjU5OlxcdFxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2RrcC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvc2NzaS9zZC5jLTI2MC1cXHRcXHRzZF9zZXRfZmx1c2hfZmxhZyhzZGtwLCBcXHUwMDI2bGltKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jPTU3NT1wcm92aXNpb25pbmdfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9zY3NpL3NkLmMtNTkyLVxcbmRyaXZlcnMvc2NzaS9zZC5jOjU5MzpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNka3AtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL3Njc2kvc2QuYy01OTQtXFx0c2RfY29uZmlnX2Rpc2NhcmQoc2RrcCwgXFx1MDAyNmxpbSwgbW9kZSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYz02NzU9bWF4X3dyaXRlX3NhbWVfYmxvY2tzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYy03MDEtXFxuZHJpdmVycy9zY3NpL3NkLmM6NzAyOlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2RrcC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvc2NzaS9zZC5jLTcwMy1cXHRzZF9jb25maWdfd3JpdGVfc2FtZShzZGtwLCBcXHUwMDI2bGltKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jPTM3NzM9c3RhdGljIHZvaWQgc2RfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuZHJpdmVycy9zY3NpL3NkLmMtMzgwMi1cXG5kcml2ZXJzL3Njc2kvc2QuYzozODAzOlxcdCpsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNka3AtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL3Njc2kvc2QuYy0zODA0LVxcbi0tXFxuZHJpdmVycy9zY3NpL3NyLmM9NDc2PXN0YXRpYyBpbnQgc3JfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBzY3NpX2NkICpjZClcXG4tLVxcbmRyaXZlcnMvc2NzaS9zci5jLTQ4OC1cXG5kcml2ZXJzL3Njc2kvc3IuYzo0ODk6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG5kcml2ZXJzL3Njc2kvc3IuYy00OTAtXFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IHNlY3Rvcl9zaXplO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jPTU4ND1zdGF0aWMgc3NpemVfdCBtYXhfc2VjdG9yc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMtNTk0LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYzo1OTU6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGV2LVxcdTAwM2VyZXF1ZXN0X3F1ZXVlKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMtNTk2LVxcdGxpbS5tYXhfaHdfc2VjdG9ycyA9IG1zO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMDc4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJsa19ib3VuZGFyeV9zZWN0b3JzX2xlZnQoc2VjdG9yX3Qgb2Zmc2V0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMDg2LS8qKlxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTA4NzogKiBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlIC0gc3RhcnQgYW4gYXRvbWljIHVwZGF0ZSBvZiBxdWV1ZSBsaW1pdHNcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEwODgtICogQHE6XFx0XFx0cXVldWUgdG8gdXBkYXRlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTEwOTc9c3RhdGljIGlubGluZSBzdHJ1Y3QgcXVldWVfbGltaXRzXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaDoxMDk4OnF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMDk5LVxcdF9fYWNxdWlyZXMoXFx1MDAyNnEtXFx1MDAzZWxpbWl0c19sb2NrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMTEwPWludCBibGtfdmFsaWRhdGVfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTExMTYtICogVGhpcyBmdW5jdGlvbnMgY2FuY2VscyBhbiBhdG9taWMgdXBkYXRlIG9mIHRoZSBxdWV1ZSBsaW1pdHMgc3RhcnRlZCBieVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTExNzogKiBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCkgYW5kIHNob3VsZCBiZSB1c2VkIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGFmdGVyXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTE4LSAqIHN0YXJ0aW5nIHVwZGF0ZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MjkuMjM0MzAxMzQ1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNzczNDQ0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gdGhlIExvb3AgRGV2aWNlIENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlc2UgY2hhbmdlcyBpbnRpbWF0ZWx5LiBMZXQncyBzdGFydCBieSBtZXRob2RpY2FsbHkgZXhhbWluaW5nIHRoZSBtb2RpZmljYXRpb25zLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoZSBjb2RlIGFyb3VuZCB0aGUgYGxvb3BfY2xlYXJfbGltaXRzYCBmdW5jdGlvbiBhbmQgdGhlIGBsb19mYWxsb2NhdGVgIGltcGxlbWVudGF0aW9uLiBJIGtub3cgdGhhdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSBwYXJhbWV0ZXJzIGFuZCBwb3RlbnRpYWwgYWxsb2NhdGlvbiBpc3N1ZXMgbGl2ZS4gVGhhdCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGZhbGxvY2F0ZSBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGxpbWl0IGNvbnN0cmFpbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTc1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MzEuNDExNjQ3ODQyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Nzc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjA6XFx0ICovXFxuIDIyMTpcXHRzdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxcbiAyMjI6XFx0e1xcbiAyMjM6XFx0XFx0aWYgKCFzZXRfY2FwYWNpdHlfYW5kX25vdGlmeShsby1cXHUwMDNlbG9fZGlzaywgc2l6ZSkpXFxuIDIyNDpcXHRcXHRcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2ZGlza190b19kZXYobG8tXFx1MDAzZWxvX2Rpc2spLVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuIDIyNTpcXHR9XFxuIDIyNjpcXHRcXG4gMjI3OlxcdHN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDIyODpcXHR7XFxuIDIyOTpcXHRcXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID1cXG4gMjMwOlxcdFxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGNsZWFyX2xpbWl0c193b3JrKTtcXG4gMjMxOlxcdFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbiAyMzI6XFx0XFx0aW50IG1vZGUgPSBhdG9taWNfeGNoZyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcXG4gMjMzOlxcdFxcbiAyMzQ6XFx0XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcXG4gMjM1OlxcdFxcdFxcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xcbiAyMzY6XFx0XFxuIDIzNzpcXHRcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XFxuIDIzODpcXHRcXHRcXHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XFxuIDIzOTpcXHRcXHRcXHRsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7XFxuIDI0MDpcXHRcXHR9XFxuIDI0MTpcXHRcXG4gMjQyOlxcdFxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihsby1cXHUwMDNlbG9fcXVldWUsIFxcdTAwMjZsaW0pO1xcbiAyNDM6XFx0fVxcbiAyNDQ6XFx0XFxuIDI0NTpcXHRzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcXG4gMjQ2OlxcdHtcXG4gMjQ3OlxcdFxcdGF0b21pY19vcihtb2RlLCBcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c19tb2RlKTtcXG4gMjQ4OlxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfd29yayk7XFxuIDI0OTpcXHR9XFxuIDI1MDpcXHRcXG4gMjUxOlxcdHN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcyxcXG4gMjUyOlxcdFxcdFxcdFxcdGludCBtb2RlKVxcbiAyNTM6XFx0e1xcbiAyNTQ6XFx0XFx0LypcXG4gMjU1OlxcdFxcdCAqIFdlIHVzZSBmYWxsb2NhdGUgdG8gbWFuaXB1bGF0ZSB0aGUgc3BhY2UgbWFwcGluZ3MgdXNlZCBieSB0aGUgaW1hZ2VcXG4gMjU2OlxcdFxcdCAqIGEuay5hLiBkaXNjYXJkL3plcm9yYW5nZS5cXG4gMjU3OlxcdFxcdCAqL1xcbiAyNTg6XFx0XFx0c3RydWN0IGZpbGUgKmZpbGUgPSBsby1cXHUwMDNlbG9fYmFja2luZ19maWxlO1xcbiAyNTk6XFx0XFx0aW50IHJldDtcXG4gMjYwOlxcdFxcbiAyNjE6XFx0XFx0bW9kZSB8PSBGQUxMT0NfRkxfS0VFUF9TSVpFO1xcbiAyNjI6XFx0XFxuIDI2MzpcXHRcXHRpZiAoIWJkZXZfbWF4X2Rpc2NhcmRfc2VjdG9ycyhsby1cXHUwMDNlbG9fZGV2aWNlKSlcXG4gMjY0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gMjY1OlxcdFxcbiAyNjY6XFx0XFx0cmV0ID0gZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNlZmFsbG9jYXRlKGZpbGUsIG1vZGUsIHBvcywgYmxrX3JxX2J5dGVzKHJxKSk7XFxuIDI2NzpcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUlOVkFMIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUCkpXFxuIDI2ODpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gMjY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNzozMS40MTE4Mzc1NTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc1NjUxNDcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnM6XG5cbioqQW5hbHl6aW5nIGBsb19mYWxsb2NhdGVgIGFuZCBMb29wIERldmljZSBMaW1pdHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYGxvX2ZhbGxvY2F0ZWAgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlLiBJdCBzZWVtcyBsaWtlIGl0J3MgZGVzaWduZWQgdG8gaGFuZGxlIHRoZSBgZmFsbG9jYXRlYCBzeXN0ZW0gY2FsbCwgd2hpY2ggaXMgYSBjb21tb24gbWV0aG9kIGZvciBwcmVhbGxvY2F0aW5nIGRpc2sgc3BhY2UuIFRoZSBpbnRlcmVzdGluZyBiaXQgY29tZXMgd2hlbiBgZmFsbG9jYXRlYCB0aHJvd3MgYW4gZXJyb3IsIHBhcnRpY3VsYXJseSBgLUVPUE5PVFNVUFBgIG9yIGEgc2ltaWxhciBpbmRpY2F0aW9uIHRoYXQgdGhlIG9wZXJhdGlvbiBpc24ndCBzdXBwb3J0ZWQuIE15IHVuZGVyc3RhbmRpbmcgaXMsIGF0IHRoaXMgcG9pbnQgYGxvb3BfY2xlYXJfbGltaXRzYCBnZXRzIGNhbGxlZC4gTm93LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBgbG9vcF9jbGVhcl9saW1pdHNgIGFjdHVhbGx5ICpkb2VzKi4gSSdtIGdvaW5nIHRvIGp1bXAgdG8gbGluZXMgMjcwLTI5MCB0byBsb29rIGNsb3NlbHkgYXQgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTG9vcCBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZmFsbGJhY2sgbWVjaGFuaXNtIGhhcyBhbnkgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkgcmFtaWZpY2F0aW9ucy4gSXMgdGhpcyBjYWxsIGNsZWFyaW5nIHNvbWUgc29ydCBvZiBwcmUtY29uZmlndXJlZCBzaXplIGxpbWl0YXRpb24gYW5kIHBvdGVudGlhbGx5IGNyZWF0aW5nIHZ1bG5lcmFiaWxpdGllcywgb3IgaXMgdGhpcyBjbGVhcmluZyBkZXZpY2UgbGltaXRzIHRvIGFsbG93IHRoZSBvcGVyYXRpb24gdG8gYmUgcGVyZm9ybWVkIGluIGFub3RoZXIgd2F5PyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhpcyBjbGVhcmluZyBvZiBsaW1pdHMgd2lsbCBpbXBhY3QgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgc3RhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjI2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNzozNC4xNjgzNTQyMDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRcXHQvKlxcbiAyNzE6XFx0XFx0ICogV2UgaW5pdGlhbGx5IGNvbmZpZ3VyZSB0aGUgbGltaXRzIGluIGEgaG9wZSB0aGF0IGZhbGxvY2F0ZSBpc1xcbiAyNzI6XFx0XFx0ICogc3VwcG9ydGVkIGFuZCBjbGVhciB0aGVtIGhlcmUgaWYgdGhhdCB0dXJucyBvdXQgbm90IHRvIGJlIHRydWUuXFxuIDI3MzpcXHRcXHQgKi9cXG4gMjc0OlxcdFxcdGlmICh1bmxpa2VseShyZXQgPT0gLUVPUE5PVFNVUFApKVxcbiAyNzU6XFx0XFx0XFx0bG9vcF9jbGVhcl9saW1pdHMobG8sIG1vZGUpO1xcbiAyNzY6XFx0XFxuIDI3NzpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNzg6XFx0fVxcbiAyNzk6XFx0XFxuIDI4MDpcXHRzdGF0aWMgaW50IGxvX3JlcV9mbHVzaChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuIDI4MTpcXHR7XFxuIDI4MjpcXHRcXHRpbnQgcmV0ID0gdmZzX2ZzeW5jKGxvLVxcdTAwM2Vsb19iYWNraW5nX2ZpbGUsIDApO1xcbiAyODM6XFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVJTlZBTCkpXFxuIDI4NDpcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbiAyODU6XFx0XFxuIDI4NjpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyODc6XFx0fVxcbiAyODg6XFx0XFxuIDI4OTpcXHRzdGF0aWMgdm9pZCBsb19jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuIDI5MDpcXHR7XFxuIDI5MTpcXHRcXHRzdHJ1Y3QgbG9vcF9jbWQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xcbiAyOTI6XFx0XFx0YmxrX3N0YXR1c190IHJldCA9IEJMS19TVFNfT0s7XFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdGlmIChjbWQtXFx1MDAzZXJldCBcXHUwMDNjIDAgfHwgY21kLVxcdTAwM2VyZXQgPT0gYmxrX3JxX2J5dGVzKHJxKSB8fFxcbiAyOTU6XFx0XFx0ICAgIHJlcV9vcChycSkgIT0gUkVRX09QX1JFQUQpIHtcXG4gMjk2OlxcdFxcdFxcdGlmIChjbWQtXFx1MDAzZXJldCBcXHUwMDNjIDApXFxuIDI5NzpcXHRcXHRcXHRcXHRyZXQgPSBlcnJub190b19ibGtfc3RhdHVzKGNtZC1cXHUwMDNlcmV0KTtcXG4gMjk4OlxcdFxcdFxcdGdvdG8gZW5kX2lvO1xcbiAyOTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNzozNC4xNjg1MTA4MzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIxNzgzODY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTG9naWNhbCBWb2x1bWUgKExPKSBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24qKlxuXG5SaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYSBgbG9gIGRldmljZSBmcm9tIGFsbG9jYXRpb24gdG8gZGVzdHJ1Y3Rpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc3RvcmFnZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgYGxvb3BfYWRkYCwgYGxvb3BfcmVtb3ZlYCwgYW5kIGBsb19mcmVlX2Rpc2tgIGZ1bmN0aW9ucy4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycyBpbiB0aGlzIHByb2Nlc3MuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSBwYXRoIGZvciBlYWNoIG9mIHRob3NlIGFuZCBkZXRlcm1pbmU6XG5cbiogICAqKmBsb29wX2FkZGAqKjogSG93IGlzIHRoZSBgbG9gIGRldmljZSBpbml0aWFsbHkgY3JlYXRlZCBhbmQgYXNzb2NpYXRlZCB3aXRoIGEgYmFja2luZyBmaWxlIG9yIGJsb2NrIGRldmljZT8gV2hhdCBtZXRhZGF0YSBpcyBpbml0aWFsaXplZD8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkPyBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHJlc291cmNlcyBhcmUgYWxsb2NhdGVkLlxuKiAgICoqYGxvb3BfcmVtb3ZlYCoqOiBUaGlzIHNob3VsZCBiZSB0aGUgY291bnRlcnBhcnQgdG8gYGxvb3BfYWRkYC4gSSdsbCBoYXZlIHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgYGxvYCBkZXZpY2UgYW5kIHRoZSBiYWNraW5nIHN0b3JlIGlzIHNldmVyZWQsIHdoYXQgY2xlYW51cCBvY2N1cnMsIGFuZCBob3cgYW55IGFzc29jaWF0ZWQgcmVzb3VyY2VzIGFyZSByZWxlYXNlZC4gSXMgdGhpcyBncmFjZWZ1bCwgb3IgcHJvbmUgdG8gbGVhdmluZyBnYXJiYWdlIGJlaGluZD9cbiogICAqKmBsb19mcmVlX2Rpc2tgKio6IFRoaXMgc291bmRzIGxpa2UgYSBmdW5jdGlvbiB0aGF0IHNwZWNpZmljYWxseSBkZWFscyB3aXRoIGZyZWVpbmcgdGhlIHBoeXNpY2FsIGRpc2sgc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBgbG9gIGRldmljZSBvciB1bm1hcHBpbmcgaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgdW5tYXBwaW5nIHRoZSBiYWNraW5nIGRpc2ssIGNsZWFyaW5nIHJlc291cmNlcywgYW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCBgbG9vcF9yZW1vdmVgLiBBcmUgdGhleSBjYWxsZWQgaW4gc2VxdWVuY2UsIG9yIGRvZXMgb25lIGNhbGwgdGhlIG90aGVyP1xuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHJlc291cmNlIGxlYWtzLCBvciBpbmVmZmljaWVudCB1c2Ugb2Ygc3RvcmFnZSBkdXJpbmcgdGhpcyBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB3aWxsIGJlIGNydWNpYWwgZm9yIGNvbmZpcm1pbmcgbXkgdW5kZXJzdGFuZGluZy4gVGhpcyBpbnZlc3RpZ2F0aW9uIHNob3VsZCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgYGxvYCBkZXZpY2VzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzdGFydCB3aXRoIGBsb29wX2FkZGAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE5OjM3OjM4LjM4NjM1MzA4M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA4MCxcbiAgXCJMaW5lQ291bnRcIjogNzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA4MDpcXHRcXHRcXHRnb3RvIG91dF9jbGVhbnVwX3RhZ3M7XFxuMjA4MTpcXHRcXHR9XFxuMjA4MjpcXHRcXHRsby1cXHUwMDNlbG9fcXVldWUgPSBsby1cXHUwMDNlbG9fZGlzay1cXHUwMDNlcXVldWU7XFxuMjA4MzpcXHRcXG4yMDg0OlxcdFxcdC8qXFxuMjA4NTpcXHRcXHQgKiBEaXNhYmxlIHBhcnRpdGlvbiBzY2FubmluZyBieSBkZWZhdWx0LiBUaGUgaW4ta2VybmVsIHBhcnRpdGlvblxcbjIwODY6XFx0XFx0ICogc2Nhbm5pbmcgY2FuIGJlIHJlcXVlc3RlZCBpbmRpdmlkdWFsbHkgcGVyLWRldmljZSBkdXJpbmcgaXRzXFxuMjA4NzpcXHRcXHQgKiBzZXR1cC4gVXNlcnNwYWNlIGNhbiBhbHdheXMgYWRkIGFuZCByZW1vdmUgcGFydGl0aW9ucyBmcm9tIGFsbFxcbjIwODg6XFx0XFx0ICogZGV2aWNlcy4gVGhlIG5lZWRlZCBwYXJ0aXRpb24gbWlub3JzIGFyZSBhbGxvY2F0ZWQgZnJvbSB0aGVcXG4yMDg5OlxcdFxcdCAqIGV4dGVuZGVkIG1pbm9yIHNwYWNlLCB0aGUgbWFpbiBsb29wIGRldmljZSBudW1iZXJzIHdpbGwgY29udGludWVcXG4yMDkwOlxcdFxcdCAqIHRvIG1hdGNoIHRoZSBsb29wIG1pbm9ycywgcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnNcXG4yMDkxOlxcdFxcdCAqIHVzZWQuXFxuMjA5MjpcXHRcXHQgKlxcbjIwOTM6XFx0XFx0ICogSWYgbWF4X3BhcnQgaXMgZ2l2ZW4sIHBhcnRpdGlvbiBzY2FubmluZyBpcyBnbG9iYWxseSBlbmFibGVkIGZvclxcbjIwOTQ6XFx0XFx0ICogYWxsIGxvb3AgZGV2aWNlcy4gVGhlIG1pbm9ycyBmb3IgdGhlIG1haW4gbG9vcCBkZXZpY2VzIHdpbGwgYmVcXG4yMDk1OlxcdFxcdCAqIG11bHRpcGxlcyBvZiBtYXhfcGFydC5cXG4yMDk2OlxcdFxcdCAqXFxuMjA5NzpcXHRcXHQgKiBOb3RlOiBHbG9iYWwtZm9yLWFsbC1kZXZpY2VzLCBzZXQtb25seS1hdC1pbml0LCByZWFkLW9ubHkgbW9kdWxlXFxuMjA5ODpcXHRcXHQgKiBwYXJhbWV0ZXRlcnMgbGlrZSAnbWF4X2xvb3AnIGFuZCAnbWF4X3BhcnQnIG1ha2UgdGhpbmdzIG5lZWRsZXNzbHlcXG4yMDk5OlxcdFxcdCAqIGNvbXBsaWNhdGVkLCBhcmUgdG9vIHN0YXRpYywgaW5mbGV4aWJsZSBhbmQgbWF5IHN1cnByaXNlXFxuMjEwMDpcXHRcXHQgKiB1c2Vyc3BhY2UgdG9vbHMuIFBhcmFtZXRlcnMgbGlrZSB0aGlzIGluIGdlbmVyYWwgc2hvdWxkIGJlIGF2b2lkZWQuXFxuMjEwMTpcXHRcXHQgKi9cXG4yMTAyOlxcdFxcdGlmICghcGFydF9zaGlmdClcXG4yMTAzOlxcdFxcdFxcdHNldF9iaXQoR0RfU1VQUFJFU1NfUEFSVF9TQ0FOLCBcXHUwMDI2ZGlzay1cXHUwMDNlc3RhdGUpO1xcbjIxMDQ6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4yMTA1OlxcdFxcdGxvLVxcdTAwM2Vsb19udW1iZXJcXHRcXHQ9IGk7XFxuMjEwNjpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bG8tXFx1MDAzZWxvX2xvY2spO1xcbjIxMDc6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxvLVxcdTAwM2Vsb193b3JrX2xvY2spO1xcbjIxMDg6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZsby1cXHUwMDNlcm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7XFxuMjEwOTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKTtcXG4yMTEwOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZsby1cXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcXG4yMTExOlxcdFxcdGRpc2stXFx1MDAzZW1ham9yXFx0XFx0PSBMT09QX01BSk9SO1xcbjIxMTI6XFx0XFx0ZGlzay1cXHUwMDNlZmlyc3RfbWlub3JcXHQ9IGkgXFx1MDAzY1xcdTAwM2MgcGFydF9zaGlmdDtcXG4yMTEzOlxcdFxcdGRpc2stXFx1MDAzZW1pbm9yc1xcdFxcdD0gMSBcXHUwMDNjXFx1MDAzYyBwYXJ0X3NoaWZ0O1xcbjIxMTQ6XFx0XFx0ZGlzay1cXHUwMDNlZm9wc1xcdFxcdD0gXFx1MDAyNmxvX2ZvcHM7XFxuMjExNTpcXHRcXHRkaXNrLVxcdTAwM2Vwcml2YXRlX2RhdGFcXHQ9IGxvO1xcbjIxMTY6XFx0XFx0ZGlzay1cXHUwMDNlcXVldWVcXHRcXHQ9IGxvLVxcdTAwM2Vsb19xdWV1ZTtcXG4yMTE3OlxcdFxcdGRpc2stXFx1MDAzZWV2ZW50c1xcdFxcdD0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7XFxuMjExODpcXHRcXHRkaXNrLVxcdTAwM2VldmVudF9mbGFnc1xcdD0gRElTS19FVkVOVF9GTEFHX1VFVkVOVDtcXG4yMTE5OlxcdFxcdHNwcmludGYoZGlzay1cXHUwMDNlZGlza19uYW1lLCBcXFwibG9vcCVkXFxcIiwgaSk7XFxuMjEyMDpcXHRcXHQvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgcmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXFxuMjEyMTpcXHRcXHRlcnIgPSBhZGRfZGlzayhkaXNrKTtcXG4yMTIyOlxcdFxcdGlmIChlcnIpXFxuMjEyMzpcXHRcXHRcXHRnb3RvIG91dF9jbGVhbnVwX2Rpc2s7XFxuMjEyNDpcXHRcXG4yMTI1OlxcdFxcdC8qIFNob3cgdGhpcyBsb29wIGRldmljZS4gKi9cXG4yMTI2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmxvb3BfY3RsX211dGV4KTtcXG4yMTI3OlxcdFxcdGxvLVxcdTAwM2VpZHJfdmlzaWJsZSA9IHRydWU7XFxuMjEyODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxvb3BfY3RsX211dGV4KTtcXG4yMTI5OlxcdFxcbjIxMzA6XFx0XFx0cmV0dXJuIGk7XFxuMjEzMTpcXHRcXG4yMTMyOlxcdG91dF9jbGVhbnVwX2Rpc2s6XFxuMjEzMzpcXHRcXHRwdXRfZGlzayhkaXNrKTtcXG4yMTM0OlxcdG91dF9jbGVhbnVwX3RhZ3M6XFxuMjEzNTpcXHRcXHRibGtfbXFfZnJlZV90YWdfc2V0KFxcdTAwMjZsby1cXHUwMDNldGFnX3NldCk7XFxuMjEzNjpcXHRvdXRfZnJlZV9pZHI6XFxuMjEzNzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZsb29wX2N0bF9tdXRleCk7XFxuMjEzODpcXHRcXHRpZHJfcmVtb3ZlKFxcdTAwMjZsb29wX2luZGV4X2lkciwgaSk7XFxuMjEzOTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxvb3BfY3RsX211dGV4KTtcXG4yMTQwOlxcdG91dF9mcmVlX2RldjpcXG4yMTQxOlxcdFxcdGtmcmVlKGxvKTtcXG4yMTQyOlxcdG91dDpcXG4yMTQzOlxcdFxcdHJldHVybiBlcnI7XFxuMjE0NDpcXHR9XFxuMjE0NTpcXHRcXG4yMTQ2OlxcdHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuMjE0NzpcXHR7XFxuMjE0ODpcXHRcXHQvKiBDYW5jZWwgZWFybHk6IHRoZSBxdWV1ZSBtYXkgYmUgaW4gUkNVLWRlbGF5ZWQgZnJlZWluZ1xcbjIxNDk6XFx0XFx0ICogYnkgdGhlIHRpbWUgbG9fZnJlZV9kaXNrKCkgcnVucy4gKi9cXG4yMTUwOlxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfd29yayk7XFxuMjE1MTpcXHRcXG4yMTUyOlxcdFxcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xcbjIxNTM6XFx0XFx0ZGVsX2dlbmRpc2sobG8tXFx1MDAzZWxvX2Rpc2spO1xcbjIxNTQ6XFx0XFx0YmxrX21xX2ZyZWVfdGFnX3NldChcXHUwMDI2bG8tXFx1MDAzZXRhZ19zZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNzozOC4zODY1MjA3OTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4NDE2NzQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGluIGBsb29wX2FkZGAqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhlIGludGVybmFscyBvZiB0aGlzIGBsb29wX2FkZGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB2YXJpYWJsZSBgbG9gIGlzIGJlaW5nIGhhbmRsZWQgbWVtb3J5LXdpc2Ugd2l0aGluIHRoYXQgbG9vcC4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBpbmVmZmljaWVuY2llcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gaXRzIGFsbG9jYXRpb24uIElzIGl0IGJlaW5nIHJlLWFsbG9jYXRlZCBvbiBlYWNoIGl0ZXJhdGlvbiwgb3IgaXMgaXQgYXBwcm9wcmlhdGVseSBiZWluZyByZXVzZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIG1lbW9yeSBmb290cHJpbnQgaGVyZSBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBhbmQgcG90ZW50aWFsIGRlYnVnZ2luZyBkb3duIHRoZSBsaW5lLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2l0aCB0aGF0IHZhcmlhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjExOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6NDAuMTcwNjkyMDI3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDQwOlxcdFxcdGxvID0ga3phbGxvY19vYmooKmxvKTtcXG4yMDQxOlxcdFxcdGlmICghbG8pXFxuMjA0MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMDQzOlxcdFxcdGxvLVxcdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XFxuMjA0NDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bG8tXFx1MDAzZWlkbGVfd29ya2VyX2xpc3QpO1xcbjIwNDU6XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNmxvLVxcdTAwM2V0aW1lciwgbG9vcF9mcmVlX2lkbGVfd29ya2Vyc190aW1lciwgVElNRVJfREVGRVJSQUJMRSk7XFxuMjA0NjpcXHRcXHRXUklURV9PTkNFKGxvLVxcdTAwM2Vsb19zdGF0ZSwgTG9fdW5ib3VuZCk7XFxuMjA0NzpcXHRcXG4yMDQ4OlxcdFxcdGVyciA9IG11dGV4X2xvY2tfa2lsbGFibGUoXFx1MDAyNmxvb3BfY3RsX211dGV4KTtcXG4yMDQ5OlxcdFxcdGlmIChlcnIpXFxuMjA1MDpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2RldjtcXG4yMDUxOlxcdFxcbjIwNTI6XFx0XFx0LyogYWxsb2NhdGUgaWQsIGlmIEBpZCBcXHUwMDNlPSAwLCB3ZSdyZSByZXF1ZXN0aW5nIHRoYXQgc3BlY2lmaWMgaWQgKi9cXG4yMDUzOlxcdFxcdGlmIChpIFxcdTAwM2U9IDApIHtcXG4yMDU0OlxcdFxcdFxcdGVyciA9IGlkcl9hbGxvYyhcXHUwMDI2bG9vcF9pbmRleF9pZHIsIGxvLCBpLCBpICsgMSwgR0ZQX0tFUk5FTCk7XFxuMjA1NTpcXHRcXHRcXHRpZiAoZXJyID09IC1FTk9TUEMpXFxuMjA1NjpcXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbjIwNTc6XFx0XFx0fSBlbHNlIHtcXG4yMDU4OlxcdFxcdFxcdGVyciA9IGlkcl9hbGxvYyhcXHUwMDI2bG9vcF9pbmRleF9pZHIsIGxvLCAwLCAwLCBHRlBfS0VSTkVMKTtcXG4yMDU5OlxcdFxcdH1cXG4yMDYwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bG9vcF9jdGxfbXV0ZXgpO1xcbjIwNjE6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMjA2MjpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2RldjtcXG4yMDYzOlxcdFxcdGkgPSBlcnI7XFxuMjA2NDpcXHRcXG4yMDY1OlxcdFxcdGxvLVxcdTAwM2V0YWdfc2V0Lm9wcyA9IFxcdTAwMjZsb29wX21xX29wcztcXG4yMDY2OlxcdFxcdGxvLVxcdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IDE7XFxuMjA2NzpcXHRcXHRsby1cXHUwMDNldGFnX3NldC5xdWV1ZV9kZXB0aCA9IGh3X3F1ZXVlX2RlcHRoO1xcbjIwNjg6XFx0XFx0bG8tXFx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xcbjIwNjk6XFx0XFx0bG8tXFx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IGxvb3BfY21kKTtcXG4yMDcwOlxcdFxcdGxvLVxcdTAwM2V0YWdfc2V0LmZsYWdzID0gQkxLX01RX0ZfU1RBQ0tJTkcgfCBCTEtfTVFfRl9OT19TQ0hFRF9CWV9ERUZBVUxUO1xcbjIwNzE6XFx0XFx0bG8tXFx1MDAzZXRhZ19zZXQuZHJpdmVyX2RhdGEgPSBsbztcXG4yMDcyOlxcdFxcbjIwNzM6XFx0XFx0ZXJyID0gYmxrX21xX2FsbG9jX3RhZ19zZXQoXFx1MDAyNmxvLVxcdTAwM2V0YWdfc2V0KTtcXG4yMDc0OlxcdFxcdGlmIChlcnIpXFxuMjA3NTpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2lkcjtcXG4yMDc2OlxcdFxcbjIwNzc6XFx0XFx0ZGlzayA9IGxvLVxcdTAwM2Vsb19kaXNrID0gYmxrX21xX2FsbG9jX2Rpc2soXFx1MDAyNmxvLVxcdTAwM2V0YWdfc2V0LCBcXHUwMDI2bGltLCBsbyk7XFxuMjA3ODpcXHRcXHRpZiAoSVNfRVJSKGRpc2spKSB7XFxuMjA3OTpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGRpc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNzo0MC4xNzA4ODEzMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg1NDExMzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBBIEtNU0FOIFBlcnNwZWN0aXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZyb20gYSBtZW1vcnkgc2FmZXR5IHN0YW5kcG9pbnQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB3aGV0aGVyIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgcmVxdWlyZWQuIEkndmUgZ290IHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuXG5cbkZpcnN0LCB0aGUga2V5IG9wZXJhdGlvbnMganVtcCBvdXQ6IHdlIGhhdmUgYSBgbG9gIHN0cnVjdHVyZSBhbGxvY2F0ZWQgYW5kIHplcm9lZCwgd29yayBpcyBpbml0aWFsaXplZCwgYXRvbWljIG9wZXJhdGlvbnMgYXJlIHVzZWQgdG8gbW9kaWZ5IGBjbGVhcl9saW1pdHNfbW9kZWAsIGFuZCB0aGUgYHF1ZXVlX2xpbWl0c2Agc3RydWN0dXJlIGlzIGhhbmRsZWQgdmlhIGBzdGFydF91cGRhdGVgIGFuZCBgY29tbWl0X3VwZGF0ZV9mcm96ZW5gLiBJJ20gc2VlaW5nIGludGVnZXIgZmllbGRzIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkIHdpdGhpbiB0aGUgYHF1ZXVlX2xpbWl0c2Agc3RydWN0IGFmdGVyIGl0J3MgY29waWVkLiBUaGVyZSdzIGFsc28gc3luY2hyb25vdXMgd29yayBjYW5jZWxsYXRpb24gb24gdGVhcmRvd24sIGFuZCBpbXBvcnRhbnRseSwgbm8gZGlyZWN0IHVzZXItc3BhY2UgZGF0YSBpbnRlcmFjdGlvbiBoZXJlLlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlIHBvdGVudGlhbCB0cm91YmxlIHNwb3RzLiBEZWFkbG9jayByaXNrcyBkdXJpbmcgcXVldWUgZnJlZXppbmcgYXJlIGEgY29uY2VybiwgYXMgaXMgdGhlIHBvc3NpYmlsaXR5IG9mIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3IgcmFjZXMgYmV0d2VlbiB0aGUgd29ya2VyIHRocmVhZCBhbmQgbG9vcCBkZXZpY2UgZGVzdHJ1Y3Rpb24uIFRoZXNlIGFyZSBjbGFzc2ljYWwgcmFjZSBjb25kaXRpb25zLiBXb3JrcXVldWUgY2FuY2VsbGF0aW9uIHJhY2VzIGFsc28gbmVlZCB0byBiZSBjb25zaWRlcmVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzeW5jaHJvbm91cyBjYWxsLlxuXG5JJ20gbm93IGdvaW5nIHRvIGRpdmUgZGVlcGVyIHRvIGRldGVybWluZSB3aGV0aGVyIEtNU0FOIGlzIG5lY2Vzc2FyeS4gSSd2ZSBnb3QgdG8gY2FyZWZ1bGx5IGFzc2VzcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQsIGFmdGVyIHNjcnV0aW5pemluZyB0aGUgY29kZSwgSSBzZWUgbm8gaW5kaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgb3IgdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMuIEV2ZXJ5dGhpbmcgbG9va3MgZWl0aGVyIGF0b21pYyBvciBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBmdW5jdGlvbiBwcm92aWRlcyBhIGZ1bGx5IGluaXRpYWxpemVkIGNvcHkuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gbXkgZXhwZXJ0IGFuYWx5c2lzIGFuZCBhIHJpZ29yb3VzIGFzc2Vzc21lbnQgb2YgYWxsIHRoZSBtb2RpZmllZCBmaWVsZHMsIEknbSBjb25maWRlbnQgdGhhdCBLTVNBTiBpc24ndCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhpcyBwYXRjaC4gTXkgYW5hbHlzaXMgYW5kIGV4cGVyaWVuY2UgYXJlIGluZGljYXRpbmcgdGhhdCB0aGUgcmlza3MgaGVyZSBhcmUgcHJpbWFyaWx5IGluIHJhY2UgY29uZGl0aW9ucyBhbmQgbG9ja2luZyBvcmRlciwgd2hpY2ggYXJlIGJlc3QgYWRkcmVzc2VkIHdpdGggS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgYW5kIExPQ0tERVAgKExvY2sgRGVwZW5kZW5jeSBWYWxpZGF0b3IpLiBLTVNBTiBpcyBjb25jZXJuZWQgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIGJhc2VkIG9uIHdoYXQgSSd2ZSBzZWVuLCBpdCdzIG5vdCBuZWVkZWQgaGVyZS5cblxuU28sIEknbSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU4gPSBmYWxzZWAgYW5kIHByb3ZpZGUgdGhlIGRldGFpbGVkIEtNU0FOIHJlYXNvbmluZyB0byByZWZsZWN0IG15IGFuYWx5c2lzLiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNDUsIk91dHB1dFRva2VucyI6MjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6NDcuMDI0OTk4MTIyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB0cmFuc2l0aW9ucyB0aGUgbG9vcCBkcml2ZXIncyBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgbG9naWMgZnJvbSBzeW5jaHJvbm91cyBleGVjdXRpb24gaW5zaWRlIHJlcXVlc3QgaGFuZGxpbmcgdG8gYW4gYXN5bmNocm9ub3VzIHdvcmtxdWV1ZSAoYGNsZWFyX2xpbWl0c193b3JrYCkgdXNpbmcgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbigpYC5cXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3QgZmllbGRzIChgY2xlYXJfbGltaXRzX3dvcmtgIGFuZCBgY2xlYXJfbGltaXRzX21vZGVgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IHRoZSBgbG9vcF9kZXZpY2VgIHN0cnVjdCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgdGhlIHdvcmsgaXRlbSBpcyBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUksoKWAsIGFuZCB0aGUgYXRvbWljIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgcmVzZXQgd2l0aCBgYXRvbWljX3NldGAgLyBhdG9taWMgb3BlcmF0aW9ucy4gVGhlIGBzdHJ1Y3QgcXVldWVfbGltaXRzYCB1c2VkIGluIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gIGlzIGluaXRpYWxpemVkIGZyb20gYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgKHdoaWNoIHJldHVybnMgdGhlIGN1cnJlbnQgcXVldWUgbGltaXRzKS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgcXVldWUgZnJlZXppbmcgbG9ja2luZyBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdHJhbnNpdGlvbnMgdGhlIGxvb3AgZHJpdmVyJ3MgcXVldWUgbGltaXRzIGNsZWFyaW5nIGxvZ2ljIGZyb20gc3luY2hyb25vdXMgZXhlY3V0aW9uIGluc2lkZSByZXF1ZXN0IGhhbmRsaW5nIHRvIGFuIGFzeW5jaHJvbm91cyB3b3JrcXVldWUgKGBjbGVhcl9saW1pdHNfd29ya2ApIHVzaW5nIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oKWAuXFxuXFxuQWxsIG5ld2x5IGludHJvZHVjZWQgc3RydWN0IGZpZWxkcyAoYGNsZWFyX2xpbWl0c193b3JrYCBhbmQgYGNsZWFyX2xpbWl0c19tb2RlYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkOiB0aGUgYGxvb3BfZGV2aWNlYCBzdHJ1Y3QgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAsIHRoZSB3b3JrIGl0ZW0gaXMgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLKClgLCBhbmQgdGhlIGF0b21pYyB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IHJlc2V0IHdpdGggYGF0b21pY19zZXRgIC8gYXRvbWljIG9wZXJhdGlvbnMuIFRoZSBgc3RydWN0IHF1ZXVlX2xpbWl0c2AgdXNlZCBpbiBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCBpcyBpbml0aWFsaXplZCBmcm9tIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClgICh3aGljaCByZXR1cm5zIHRoZSBjdXJyZW50IHF1ZXVlIGxpbWl0cykuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIHF1ZXVlIGZyZWV6aW5nIGxvY2tpbmcgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows57vp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 19:19:58 +0000 UTC FinishedAt: 2026-09-02 19:37:48 +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": "96c8ea3c5add7920b3c43840d1ea76b3354c8d2d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "96c8ea3c5add7920b3c43840d1ea76b3354c8d2d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "30acce16-60ce-442b-bc57-a1684c13593e" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "loop_clear_limits_workfn", "loop_clear_limits", "lo_fallocate", "loop_configure" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BfY2xlYXJfbGltaXRzX3dvcmtmbiYjMzQ7LAogICAgJiMzNDtsb29wX2NsZWFyX2xpbWl0cyYjMzQ7LAogICAgJiMzNDtsb19mYWxsb2NhdGUmIzM0OywKICAgICYjMzQ7bG9vcF9jb25maWd1cmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0cmFuc2l0aW9ucyB0aGUgbG9vcCBkcml2ZXImIzM5O3MgcXVldWUgbGltaXRzIGNsZWFyaW5nIGxvZ2ljIGZyb20gc3luY2hyb25vdXMgZXhlY3V0aW9uIGluc2lkZSByZXF1ZXN0IGhhbmRsaW5nIHRvIGFuIGFzeW5jaHJvbm91cyB3b3JrcXVldWUgKGBjbGVhcl9saW1pdHNfd29ya2ApIHVzaW5nIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oKWAuXG5cbkFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdCBmaWVsZHMgKGBjbGVhcl9saW1pdHNfd29ya2AgYW5kIGBjbGVhcl9saW1pdHNfbW9kZWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZDogdGhlIGBsb29wX2RldmljZWAgc3RydWN0IGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCB0aGUgd29yayBpdGVtIGlzIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SSygpYCwgYW5kIHRoZSBhdG9taWMgdmFyaWFibGUgaXMgZXhwbGljaXRseSByZXNldCB3aXRoIGBhdG9taWNfc2V0YCAvIGF0b21pYyBvcGVyYXRpb25zLiBUaGUgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIHVzZWQgaW4gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCAod2hpY2ggcmV0dXJucyB0aGUgY3VycmVudCBxdWV1ZSBsaW1pdHMpLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgcXVldWUgZnJlZXppbmcgbG9ja2luZyBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRyaXZlcnMvYmxvY2svbG9vcC5jIHRvIGhhbmRsZSBjbGVhcmluZyBxdWV1ZSBsaW1pdHMgYXN5bmNocm9ub3VzbHkgdmlhIGEgd29ya3F1ZXVlIChjbGVhcl9saW1pdHNfd29yaykgaW5zdGVhZCBvZiBkaXJlY3RseSBpbnNpZGUgcXVldWVfcnEgY29udGV4dC4gVGhpcyBwcm9wZXJseSB1c2VzIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbiB0byBmb2xsb3cgdGhlIHF1ZXVlIGxpbWl0cyBsb2NraW5nIHByb3RvY29sIHdoZW4gZmFsbG9jYXRlIG9wZXJhdGlvbnMgZmFpbCBvbiBsb29wIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTk6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzODM3OGQ4ZGJmODliODFhNDgyMDZmNzk2OWMxOGRkZmNmYjBlNjExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxOTozNjo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA2ZjEyOTc2MDM1YjA5Li4zNjhlYTg1Nzg5NWNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNjcsNiAmIzQzOzY3LDggQEAgc3RydWN0IGxvb3BfZGV2aWNlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHJvb3RjZ19jbWRfbGlzdDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGlkbGVfd29ya2VyX2xpc3Q7XG4gXHRzdHJ1Y3QgcmJfcm9vdCAgICAgICAgICB3b3JrZXJfdHJlZTtcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICBjbGVhcl9saW1pdHNfd29yaztcbiYjNDM7XHRhdG9taWNfdFx0XHRjbGVhcl9saW1pdHNfbW9kZTtcbiBcdHN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHRpbWVyO1xuIFx0Ym9vbFx0XHRcdHN5c2ZzX2luaXRlZDtcbiBcbkBAIC0yMjIsOSAmIzQzOzIyNCwxMiBAQCBzdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxuIFx0XHRrb2JqZWN0X3VldmVudChcdTAwMjZkaXNrX3RvX2Rldihsby1cdTAwM2Vsb19kaXNrKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuJiM0MztzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGNsZWFyX2xpbWl0c193b3JrKTtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4mIzQzO1x0aW50IG1vZGUgPSBhdG9taWNfeGNoZyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gXG4gXHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpXG4gXHRcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuQEAgLTIzNCwxNCAmIzQzOzIzOSwxMyBAQCBzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbiBcdFx0bGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIFhYWDogdGhpcyB1cGRhdGVzIHRoZSBxdWV1ZSBsaW1pdHMgd2l0aG91dCBmcmVlemluZyB0aGUgcXVldWUsIHdoaWNoXG4tXHQgKiBpcyBhZ2FpbnN0IHRoZSBsb2NraW5nIHByb3RvY29sIGFuZCBkYW5nZXJvdXMuICBCdXQgd2UgY2FuJiMzOTt0IGp1c3Rcbi1cdCAqIGZyZWV6ZSB0aGUgcXVldWUgYXMgd2UmIzM5O3JlIGluc2lkZSB0aGUgLVx1MDAzZXF1ZXVlX3JxIG1ldGhvZCBoZXJlLiAgU28gdGhpc1xuLVx0ICogc2hvdWxkIG1vdmUgb3V0IGludG8gYSB3b3JrcXVldWUgdW5sZXNzIHdlIGdldCB0aGUgZmlsZSBvcGVyYXRpb25zIHRvXG4tXHQgKiBhZHZlcnRpc2UgaWYgdGhleSBzdXBwb3J0IHNwZWNpZmljIGZhbGxvY2F0ZSBvcGVyYXRpb25zLlxuLVx0ICovXG4tXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbiYjNDM7XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obG8tXHUwMDNlbG9fcXVldWUsIFx1MDAyNmxpbSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuJiM0Mzt7XG4mIzQzO1x0YXRvbWljX29yKG1vZGUsIFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlKTtcbiYjNDM7XHRzY2hlZHVsZV93b3JrKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbiB9XG4gXG4gc3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxuQEAgLTUxNiw2ICYjNDM7NTIwLDcgQEAgc3RhdGljIGludCBsb29wX3ZhbGlkYXRlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4gc3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IGZpbGU7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gXHRsby1cdTAwM2VvbGRfZ2ZwX21hc2sgPSBtYXBwaW5nX2dmcF9tYXNrKGZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbiBcdG1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbGUtXHUwMDNlZl9tYXBwaW5nLFxuIFx0XHRcdGxvLVx1MDAzZW9sZF9nZnBfbWFzayBcdTAwMjYgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7XG5AQCAtMTc4MSw2ICYjNDM7MTc4Niw3IEBAIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbiBcdGxvb3BfZnJlZV9pZGxlX3dvcmtlcnMobG8sIHRydWUpO1xuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZsby1cdTAwM2V0aW1lcik7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yayk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcdGtmcmVlKGxvKTtcbiB9XG5AQCAtMjEwMCw2ICYjNDM7MjEwNiw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsby1cdTAwM2Vsb19sb2NrKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxvLVx1MDAzZWxvX3dvcmtfbG9jayk7XG4gXHRJTklUX1dPUksoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcbiBcdGRpc2stXHUwMDNlbWFqb3JcdFx0PSBMT09QX01BSk9SO1xuIFx0ZGlzay1cdTAwM2VmaXJzdF9taW5vclx0PSBpIFx1MDAzY1x1MDAzYyBwYXJ0X3NoaWZ0O1xuQEAgLTIxMzgsNiAmIzQzOzIxNDUsMTAgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcbiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIHtcbiYjNDM7XHQvKiBDYW5jZWwgZWFybHk6IHRoZSBxdWV1ZSBtYXkgYmUgaW4gUkNVLWRlbGF5ZWQgZnJlZWluZ1xuJiM0MztcdCAqIGJ5IHRoZSB0aW1lIGxvX2ZyZWVfZGlzaygpIHJ1bnMuICovXG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yayk7XG4mIzQzO1xuIFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4gXHRkZWxfZ2VuZGlzayhsby1cdTAwM2Vsb19kaXNrKTtcbiBcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTk6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuJiMzNDssCiAgICAmIzM0O2xvb3BfY2xlYXJfbGltaXRzJiMzNDssCiAgICAmIzM0O2xvX2ZhbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDtsb29wX2NvbmZpZ3VyZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBoYW5kbGUgY2xlYXJpbmcgcXVldWUgbGltaXRzIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoY2xlYXJfbGltaXRzX3dvcmspIGluc3RlYWQgb2YgZGlyZWN0bHkgaW5zaWRlIHF1ZXVlX3JxIGNvbnRleHQuIFRoaXMgcHJvcGVybHkgdXNlcyBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4gdG8gZm9sbG93IHRoZSBxdWV1ZSBsaW1pdHMgbG9ja2luZyBwcm90b2NvbCB3aGVuIGZhbGxvY2F0ZSBvcGVyYXRpb25zIGZhaWwgb24gbG9vcCBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzgzNzhkOGRiZjg5YjgxYTQ4MjA2Zjc5NjljMThkZGZjZmIwZTYxMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMTk6MzY6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDZmMTI5NzYwMzViMDkuLjM2OGVhODU3ODk1Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC02Nyw2ICYjNDM7NjcsOCBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHJvb3RjZ19jbWRfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBpZGxlX3dvcmtlcl9saXN0OwogCXN0cnVjdCByYl9yb290ICAgICAgICAgIHdvcmtlcl90cmVlOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICBjbGVhcl9saW1pdHNfd29yazsKJiM0MzsJYXRvbWljX3QJCWNsZWFyX2xpbWl0c19tb2RlOwogCXN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHRpbWVyOwogCWJvb2wJCQlzeXNmc19pbml0ZWQ7CiAKQEAgLTIyMiw5ICYjNDM7MjI0LDEyIEBAIHN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpCiAJCWtvYmplY3RfdWV2ZW50KCZhbXA7ZGlza190b19kZXYobG8tJmd0O2xvX2Rpc2spLSZndDtrb2JqLCBLT0JKX0NIQU5HRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKQomIzQzO3N0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiYjNDM7CXN0cnVjdCBsb29wX2RldmljZSAqbG8gPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgY2xlYXJfbGltaXRzX3dvcmspOwogCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUpOwomIzQzOwlpbnQgbW9kZSA9IGF0b21pY194Y2hnKCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c19tb2RlLCAwKTsKIAogCWlmIChtb2RlICZhbXA7IEZBTExPQ19GTF9aRVJPX1JBTkdFKQogCQlsaW0ubWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gMDsKQEAgLTIzNCwxNCAmIzQzOzIzOSwxMyBAQCBzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSkKIAkJbGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwOwogCX0KIAotCS8qCi0JICogWFhYOiB0aGlzIHVwZGF0ZXMgdGhlIHF1ZXVlIGxpbWl0cyB3aXRob3V0IGZyZWV6aW5nIHRoZSBxdWV1ZSwgd2hpY2gKLQkgKiBpcyBhZ2FpbnN0IHRoZSBsb2NraW5nIHByb3RvY29sIGFuZCBkYW5nZXJvdXMuICBCdXQgd2UgY2FuJiMzOTt0IGp1c3QKLQkgKiBmcmVlemUgdGhlIHF1ZXVlIGFzIHdlJiMzOTtyZSBpbnNpZGUgdGhlIC0mZ3Q7cXVldWVfcnEgbWV0aG9kIGhlcmUuICBTbyB0aGlzCi0JICogc2hvdWxkIG1vdmUgb3V0IGludG8gYSB3b3JrcXVldWUgdW5sZXNzIHdlIGdldCB0aGUgZmlsZSBvcGVyYXRpb25zIHRvCi0JICogYWR2ZXJ0aXNlIGlmIHRoZXkgc3VwcG9ydCBzcGVjaWZpYyBmYWxsb2NhdGUgb3BlcmF0aW9ucy4KLQkgKi8KLQlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUsICZhbXA7bGltKTsKJiM0MzsJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKGxvLSZndDtsb19xdWV1ZSwgJmFtcDtsaW0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSkKJiM0Mzt7CiYjNDM7CWF0b21pY19vcihtb2RlLCAmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfbW9kZSk7CiYjNDM7CXNjaGVkdWxlX3dvcmsoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmspOwogfQogCiBzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsCkBAIC01MTYsNiAmIzQzOzUyMCw3IEBAIHN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogc3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWxvLSZndDtsb19iYWNraW5nX2ZpbGUgPSBmaWxlOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c19tb2RlLCAwKTsKIAlsby0mZ3Q7b2xkX2dmcF9tYXNrID0gbWFwcGluZ19nZnBfbWFzayhmaWxlLSZndDtmX21hcHBpbmcpOwogCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbGUtJmd0O2ZfbWFwcGluZywKIAkJCWxvLSZndDtvbGRfZ2ZwX21hc2sgJmFtcDsgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7CkBAIC0xNzgxLDYgJiM0MzsxNzg2LDcgQEAgc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogCQlkZXN0cm95X3dvcmtxdWV1ZShsby0mZ3Q7d29ya3F1ZXVlKTsKIAlsb29wX2ZyZWVfaWRsZV93b3JrZXJzKGxvLCB0cnVlKTsKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7bG8tJmd0O3RpbWVyKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yayk7CiAJbXV0ZXhfZGVzdHJveSgmYW1wO2xvLSZndDtsb19tdXRleCk7CiAJa2ZyZWUobG8pOwogfQpAQCAtMjEwMCw2ICYjNDM7MjEwNiw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtsby0mZ3Q7bG9fbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtsby0mZ3Q7bG9fd29ya19sb2NrKTsKIAlJTklUX1dPUksoJmFtcDtsby0mZ3Q7cm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7CiYjNDM7CUlOSVRfV09SSygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2xvLSZndDtyb290Y2dfY21kX2xpc3QpOwogCWRpc2stJmd0O21ham9yCQk9IExPT1BfTUFKT1I7CiAJZGlzay0mZ3Q7Zmlyc3RfbWlub3IJPSBpICZsdDsmbHQ7IHBhcnRfc2hpZnQ7CkBAIC0yMTM4LDYgJiM0MzsyMTQ1LDEwIEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAKIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiB7CiYjNDM7CS8qIENhbmNlbCBlYXJseTogdGhlIHF1ZXVlIG1heSBiZSBpbiBSQ1UtZGVsYXllZCBmcmVlaW5nCiYjNDM7CSAqIGJ5IHRoZSB0aW1lIGxvX2ZyZWVfZGlzaygpIHJ1bnMuICovCiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmspOwomIzQzOwogCS8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqLwogCWRlbF9nZW5kaXNrKGxvLSZndDtsb19kaXNrKTsKIAlibGtfbXFfZnJlZV90YWdfc2V0KCZhbXA7bG8tJmd0O3RhZ19zZXQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTI3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9vcCBEZXZpY2UgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyB0byB0aGUgYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBmaWxlLiBUaGUgY29yZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBhZGRpbmcgYGNsZWFyX2xpbWl0c193b3JrYCBhbmQgYGNsZWFyX2xpbWl0c19tb2RlYCB0byB0aGUgYHN0cnVjdCBsb29wX2RldmljZWAuIEludHVpdGl2ZWx5LCBJJiMzOTttIGFscmVhZHkgZ3Vlc3NpbmcgdGhpcyBpcyByZWxhdGVkIHRvIGhvdyB0aGUgbG9vcCBkZXZpY2UgaGFuZGxlcyBhbmQgbWFuYWdlcyBpdHMgcXVldWUgbGltaXRzLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdWJzeXN0ZW0uCgpJdCBsb29rcyBsaWtlIHRoZSBgbG9vcF9jbGVhcl9saW1pdHNgIGZ1bmN0aW9uIGhhcyBiZWVuIHJld29ya2VkLiBJbnN0ZWFkIG9mIGRpcmVjdGx5IGNsZWFyaW5nIHRoZSBsaW1pdHMsIGl0IG5vdyBzY2hlZHVsZXMgdGhlIGBsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmtgIHVzaW5nIGEgd29ya3F1ZXVlIGFuZCBhdG9taWMgb3BlcmF0aW9uIHRvIGZldGNoIHRoZSBgY2xlYXJfbGltaXRzX21vZGVgIGJlZm9yZSBjYWxsaW5nIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW5gLiBDYW5jZWxsYXRpb24gb2YgdGhpcyB3b3JrIG9jY3VycyBpbiBgbG9vcF9yZW1vdmVgIGFuZCBgbG9fZnJlZV9kaXNrYCwgd2hpY2ggYXJlIGV4cGVjdGVkIGxvY2F0aW9ucywgd2hpbGUgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSBpbiBgbG9vcF9hZGRgLCBhbmQgYSByZXNldCBvZiBgY2xlYXJfbGltaXRzX21vZGVgIGluIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciBteSB3b3JrIGlzOiBpcyB0aGlzIGFyZWEgb2YgdGhlIGNvZGUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nPyBCYXNlZCBvbiBteSBleHBlcmllbmNlIHdpdGgga2VybmVsIGludGVybmFscywgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9ibG9jay9sb29wLmNgIGFuZCBpdHMgdXNlIGluIHN0YW5kYXJkIGJsb2NrIGRldmljZXMgKGFuZCBrbm93aW5nIHRoZSBwcmV2YWxlbmNlIG9mIGBDT05GSUdfQkxLX0RFVl9MT09QYCksIGluY2x1ZGluZyBpdHMgaGVhdnkgdXNlIGluIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFRoaXMgaXMgYSBjb3JlIHBhcnQgb2YgdGhlIHN5c3RlbSBhbmQgd2lsbCBiZSB0b3VjaGVkIGJ5IHZhcmlvdXMgdGVzdCBzdWl0ZXMuIFRoZSBwYXRjaCYjMzk7cyBpbXBhY3Qgb24gaG93IHF1ZXVlIGxpbWl0cyBhcmUgbWFuYWdlZCBhZnRlciBvcGVyYXRpb25zIGxpa2UgZmFsbG9jYXRlIGZhaWx1cmVzIGNvbmZpcm1zIGl0JiMzOTtzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL2Jsb2NrL2AgYW5kIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gZ2V0IGEgYmV0dGVyIGNvbnRleHQgZm9yIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCB1c2UgdG9vbHMgbGlrZSBncmVwcGVyIGFuZCBmaWxlLXJlYWRpbmcgY29tbWFuZHMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBibG9jayBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTk6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QkxLX0RFVl9MT09QJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTQwPWNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE0NDpjb25maWcgQkxLX0RFVl9MT09QXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQ1LVx0dHJpc3RhdGUgXCYjMzQ7TG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTc4LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE3OTpjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cdGludCBcJiMzNDtOdW1iZXIgb2YgbG9vcCBkZXZpY2VzIHRvIHByZS1jcmVhdGUgYXQgaW5pdCB0aW1lXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTgxOlx0ZGVwZW5kcyBvbiBCTEtfREVWX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODItXHRkZWZhdWx0IDhcbi0tXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR19CTEtfREVWX1JBTSlcdCYjNDM7PSBicmQub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZToyMjpvYmotJChDT05GSUdfQkxLX0RFVl9MT09QKVx0JiM0Mzs9IGxvb3Aub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0yMy1vYmotJChDT05GSUdfU1VOVkRDKVx0XHQmIzQzOz0gc3VudmRjLm9cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNzk0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODEzLSAqIGNoYW5nZWQgdGhlIGRlZmF1bHQgdmFsdWUgZnJvbSAwIGZvciBtYXhfbG9vcD0wIHJlYXNvbnMpLCBqdXN0XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODE0OiAqIGNyZWF0ZSBDT05GSUdfQkxLX0RFVl9MT09QX01JTl9DT1VOVCBsb29wIGRldmljZXMgYXQgbW9kdWxlXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODE1LSAqIGluaXQgdGltZS4gTG9vcCBkZXZpY2VzIGNhbiBiZSByZXF1ZXN0ZWQgb24tZGVtYW5kIHdpdGggdGhlXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgxOC0gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4MTk6c3RhdGljIGludCBtYXhfbG9vcCA9IENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTgyMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzUwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEJsb2NrIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG9vcCBkZXZpY2UgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJsb2NrIGRyaXZlciBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgZHJpdmVycy9ibG9jay9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGJsb2NrIGRldmljZXMgaW4gZ2VuZXJhbCwgYW5kIEnigJltIHByZXR0eSBzdXJlIHRoZSBsb29wIGRldmljZSB3aWxsIGJlIGRlZmluZWQgb3IgYXQgbGVhc3QgcmVmZXJlbmNlZCBhcm91bmQgdGhlIGBDT05GSUdfQkxLX0RFVl9MT09QYCBzeW1ib2wuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IG90aGVyIHJlbGF0ZWQgb3B0aW9ucyBhcmUgcHJlc2VudC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgbG9vcCBkZXZpY2U7IHRoaXMgYEtjb25maWdgIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhhdCBpbmZvcm1hdGlvbi4gTm93LCBsZXQmIzM5O3MgZ28gcG9rZSBhcm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTk6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdGNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cbiAxNDE6XHRcdGJvb2xcbiAxNDI6XHRcdGRlZmF1bHQgQkxLX0RFVl9VQkRcbiAxNDM6XHRcbiAxNDQ6XHRjb25maWcgQkxLX0RFVl9MT09QXG4gMTQ1Olx0XHR0cmlzdGF0ZSBcJiMzNDtMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuIDE0NjpcdFx0aGVscFxuIDE0NzpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIHVzZSBhIHJlZ3VsYXIgZmlsZSBhcyBhIGJsb2NrXG4gMTQ4Olx0XHQgIGRldmljZTsgeW91IGNhbiB0aGVuIGNyZWF0ZSBhIGZpbGUgc3lzdGVtIG9uIHRoYXQgYmxvY2sgZGV2aWNlIGFuZFxuIDE0OTpcdFx0ICBtb3VudCBpdCBqdXN0IGFzIHlvdSB3b3VsZCBtb3VudCBvdGhlciBibG9jayBkZXZpY2VzIHN1Y2ggYXMgaGFyZFxuIDE1MDpcdFx0ICBkcml2ZSBwYXJ0aXRpb25zLCBDRC1ST00gZHJpdmVzIG9yIGZsb3BweSBkcml2ZXMuIFRoZSBsb29wIGRldmljZXNcbiAxNTE6XHRcdCAgYXJlIGJsb2NrIHNwZWNpYWwgZGV2aWNlIGZpbGVzIHdpdGggbWFqb3IgbnVtYmVyIDcgYW5kIHR5cGljYWxseVxuIDE1MjpcdFx0ICBjYWxsZWQgL2Rldi9sb29wMCwgL2Rldi9sb29wMSBldGMuXG4gMTUzOlx0XG4gMTU0Olx0XHQgIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNoZWNrIGFuIElTTyA5NjYwIGZpbGUgc3lzdGVtIGJlZm9yZVxuIDE1NTpcdFx0ICBidXJuaW5nIHRoZSBDRCwgb3IgaWYgeW91IHdhbnQgdG8gdXNlIGZsb3BweSBpbWFnZXMgd2l0aG91dCBmaXJzdFxuIDE1NjpcdFx0ICB3cml0aW5nIHRoZW0gdG8gZmxvcHB5LiBGdXJ0aGVybW9yZSwgc29tZSBMaW51eCBkaXN0cmlidXRpb25zIGF2b2lkXG4gMTU3Olx0XHQgIHRoZSBuZWVkIGZvciBhIGRlZGljYXRlZCBMaW51eCBwYXJ0aXRpb24gYnkga2VlcGluZyB0aGVpciBjb21wbGV0ZVxuIDE1ODpcdFx0ICByb290IGZpbGUgc3lzdGVtIGluc2lkZSBhIERPUyBGQVQgZmlsZSB1c2luZyB0aGlzIGxvb3AgZGV2aWNlXG4gMTU5Olx0XHQgIGRyaXZlci5cbiAxNjA6XHRcbiAxNjE6XHRcdCAgVG8gdXNlIHRoZSBsb29wIGRldmljZSwgeW91IG5lZWQgdGhlIGxvc2V0dXAgdXRpbGl0eSwgZm91bmQgaW4gdGhlXG4gMTYyOlx0XHQgIHV0aWwtbGludXggcGFja2FnZSwgc2VlXG4gMTYzOlx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL3V0aWwtbGludXgvXHUwMDNlLlxuIDE2NDpcdFxuIDE2NTpcdFx0ICBUaGUgbG9vcCBkZXZpY2UgZHJpdmVyIGNhbiBhbHNvIGJlIHVzZWQgdG8gXCYjMzQ7aGlkZVwmIzM0OyBhIGZpbGUgc3lzdGVtIGluXG4gMTY2Olx0XHQgIGEgZGlzayBwYXJ0aXRpb24sIGZsb3BweSwgb3IgcmVndWxhciBmaWxlLCBlaXRoZXIgdXNpbmcgZW5jcnlwdGlvblxuIDE2NzpcdFx0ICAoc2NyYW1ibGluZyB0aGUgZGF0YSkgb3Igc3RlZ2Fub2dyYXBoeSAoaGlkaW5nIHRoZSBkYXRhIGluIHRoZSBsb3dcbiAxNjg6XHRcdCAgYml0cyBvZiwgc2F5LCBhIHNvdW5kIGZpbGUpLiBUaGlzIGlzIGFsc28gc2FmZSBpZiB0aGUgZmlsZSByZXNpZGVzXG4gMTY5Olx0XHQgIG9uIGEgcmVtb3RlIGZpbGUgc2VydmVyLlxuIDE3MDpcdFxuIDE3MTpcdFx0ICBOb3RlIHRoYXQgdGhpcyBsb29wIGRldmljZSBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBsb29wYmFja1xuIDE3MjpcdFx0ICBkZXZpY2UgdXNlZCBmb3IgbmV0d29yayBjb25uZWN0aW9ucyBmcm9tIHRoZSBtYWNoaW5lIHRvIGl0c2VsZi5cbiAxNzM6XHRcbiAxNzQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMTc1Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsb29wLlxuIDE3NjpcdFxuIDE3NzpcdFx0ICBNb3N0IHVzZXJzIHdpbGwgYW5zd2VyIE4gaGVyZS5cbiAxNzg6XHRcbiAxNzk6XHRjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGxvb3AuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBlc3BlY2lhbGx5IHRoZSBmdW5jdGlvbnMgYXQgcGxheSBhbmQgd2hlcmUgdGhleSYjMzk7cmUgYmVpbmcgY2FsbGVkIGZyb20uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYGxvb3AuY2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHNlZSB0aGUga2V5IGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiBpdCwgYW5kIHRoZW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIGhvdyB0aGV5IGFyZSB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8gaXMgY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgYW5kIHdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgaW52b2tpbmcgdGhpcyBsb29wIGxvZ2ljLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHRzIHdpbGwgZ2l2ZSBtZSBpbXBvcnRhbnQgY2x1ZXMgYWJvdXQgdGhlIGRhdGEgYmVpbmcgcHJvY2Vzc2VkIGFuZCB0aGUgb3ZlcmFsbCBvYmplY3RpdmUgb2YgdGhpcyBjb2RlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wX2NsZWFyX2xpbWl0c3xsb19mYWxsb2NhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMjE9c3RhdGljIHZvaWQgbG9vcF9zZXRfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBsb2ZmX3Qgc2l6ZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjYtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjc6c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyOC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQ0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjQ1OnN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQ2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNTAtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyNTE6c3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjUyLVx0XHRcdGludCBtb2RlKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI3NC1cdGlmICh1bmxpa2VseShyZXQgPT0gLUVPUE5PVFNVUFApKVxuZHJpdmVycy9ibG9jay9sb29wLmM6Mjc1Olx0XHRsb29wX2NsZWFyX2xpbWl0cyhsbywgbW9kZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNzYtXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9NDE0PXN0YXRpYyBpbnQgZG9fcmVxX2ZpbGViYWNrZWQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQyNi1cdFx0ICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0Mjc6XHRcdHJldHVybiBsb19mYWxsb2NhdGUobG8sIHJxLCBwb3MsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MjgtXHRcdFx0KHJxLVx1MDAzZWNtZF9mbGFncyBcdTAwMjYgUkVRX05PVU5NQVApID9cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MzEtXHRjYXNlIFJFUV9PUF9ESVNDQVJEOlxuZHJpdmVycy9ibG9jay9sb29wLmM6NDMyOlx0XHRyZXR1cm4gbG9fZmFsbG9jYXRlKGxvLCBycSwgcG9zLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MzMtXHRjYXNlIFJFUV9PUF9XUklURTpcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDI3PXN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjEwOC1cdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2Vyb290Y2dfd29yaywgbG9vcF9yb290Y2dfd29ya2ZuKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIxMDk6XHRJTklUX1dPUksoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmssIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbik7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTEwLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDkzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9vcCBCbG9jayBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBJIG5lZWQgdG8gcGlucG9pbnQgc29tZSByb2J1c3QgYEZvY3VzU3ltYm9sc2Agd2l0aGluIHRoaXMgZmlsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9ucyBhcm91bmQgYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAsIGBsb29wX2NsZWFyX2xpbWl0c2AsIGBsb19mYWxsb2NhdGVgLCBgbG9vcF9jb25maWd1cmVgLCBhbmQgYGxvb3Bfc2V0X3N0YXR1c2AgYXMgd2VsbCBhcyBgbG9vcF9jb250cm9sX2lvY3RsYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzLiBOZXh0LCBJJiMzOTtsbCBzeXN0ZW1hdGljYWxseSBzZWFyY2ggZm9yIGFueSBub24tc3RhdGljIG9yIGVudHJ5LXBvaW50IGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBhbnkgd29yayBxdWV1ZSBmdW5jdGlvbnMgd2l0aGluIGBsb29wLmNgLiBUaGF0IHNob3VsZCBnaXZlIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBmaWxlJiMzOTtzIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jPTgyPXN0cnVjdCBsb29wX2NtZCB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtOTUtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5NjpzdGF0aWMgREVGSU5FX0lEUihsb29wX2luZGV4X2lkcik7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5NzpzdGF0aWMgREVGSU5FX01VVEVYKGxvb3BfY3RsX211dGV4KTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk4OnN0YXRpYyBERUZJTkVfTVVURVgobG9vcF92YWxpZGF0ZV9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05OS1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTEtICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTI6c3RhdGljIGludCBsb29wX2dsb2JhbF9sb2NrX2tpbGxhYmxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJvb2wgZ2xvYmFsKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMzItICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMzM6c3RhdGljIHZvaWQgbG9vcF9nbG9iYWxfdW5sb2NrKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJvb2wgZ2xvYmFsKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTM0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDE9c3RhdGljIGludCBwYXJ0X3NoaWZ0O1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTQyLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQzOnN0YXRpYyBsb2ZmX3QgbG9fY2FsY3VsYXRlX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDQte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4My0gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NDpzdGF0aWMgYm9vbCBsb19jYW5fdXNlX2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDItICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDM6c3RhdGljIGlubGluZSB2b2lkIGxvb3BfdXBkYXRlX2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjAtICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjE6c3RhdGljIHZvaWQgbG9vcF9zZXRfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBsb2ZmX3Qgc2l6ZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyMi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI2LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI3OnN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI0NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI0NTpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI0Ni17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjUwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjUxOnN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcyxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI1Mi1cdFx0XHRpbnQgbW9kZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNzktXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyODA6c3RhdGljIGludCBsb19yZXFfZmx1c2goc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjgxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yODgtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyODk6c3RhdGljIHZvaWQgbG9fY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjkwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMjItXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzozMjM6c3RhdGljIHZvaWQgbG9fcndfYWlvX2RvX2NvbXBsZXRpb24oc3RydWN0IGxvb3BfY21kICpjbWQpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMjQte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTMzNi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjMzNzpzdGF0aWMgdm9pZCBsb19yd19haW9fY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJldClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTMzOC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMzQ0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MzQ1OnN0YXRpYyBpbnQgbG9fcndfYWlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2NtZCAqY21kLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMzQ2LVx0XHQgICAgIGxvZmZfdCBwb3MsIGludCBydylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MTMtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0MTQ6c3RhdGljIGludCBkb19yZXFfZmlsZWJhY2tlZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MTUte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ0Mi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ0MzpzdGF0aWMgdm9pZCBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NDQte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ1NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ1NTpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTYte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ4Ny1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ4ODpzdGF0aWMgaW5saW5lIGludCBpc19sb29wX2RldmljZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ4OS17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDk0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6NDk1OnN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDk2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MTktXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MjA6c3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTIxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MzEtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MzI6c3RhdGljIGludCBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUzMy17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTUwLSAqL1xuZHJpdmVycy9ibG9jay9sb29wLmM6NTUxOnN0YXRpYyBpbnQgbG9vcF9jaGFuZ2VfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTU1Mi1cdFx0XHQgIHVuc2lnbmVkIGludCBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNjQ3LVxuZHJpdmVycy9ibG9jay9sb29wLmM6NjQ4OnN0YXRpYyBzc2l6ZV90IGxvb3BfYXR0cl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqcGFnZSxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY0OS1cdFx0XHQgICAgICBzc2l6ZV90ICgqY2FsbGJhY2spKHN0cnVjdCBsb29wX2RldmljZSAqLCBjaGFyICopKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY1Ny0jZGVmaW5lIExPT1BfQVRUUl9STyhfbmFtZSlcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NjU4OnN0YXRpYyBzc2l6ZV90IGxvb3BfYXR0cl8jI19uYW1lIyNfc2hvdyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKiwgY2hhciAqKTtcdFxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo2NTk6c3RhdGljIHNzaXplX3QgbG9vcF9hdHRyX2RvX3Nob3dfIyNfbmFtZShzdHJ1Y3QgZGV2aWNlICpkLFx0XHRcXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNjYwLVx0XHRcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmIpXHRcXFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTY2ND1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgbG9vcF9hdHRyXyMjX25hbWUgPVx0XHRcdFxcXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNjY2LVxuZHJpdmVycy9ibG9jay9sb29wLmM6NjY3OnN0YXRpYyBzc2l6ZV90IGxvb3BfYXR0cl9iYWNraW5nX2ZpbGVfc2hvdyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjaGFyICpidWYpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02Njgte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY4OC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjY4OTpzdGF0aWMgc3NpemVfdCBsb29wX2F0dHJfb2Zmc2V0X3Nob3coc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY2hhciAqYnVmKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNjkwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02OTMtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo2OTQ6c3RhdGljIHNzaXplX3QgbG9vcF9hdHRyX3NpemVsaW1pdF9zaG93KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY5NS17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNjk4LVxuZHJpdmVycy9ibG9jay9sb29wLmM6Njk5OnN0YXRpYyBzc2l6ZV90IGxvb3BfYXR0cl9hdXRvY2xlYXJfc2hvdyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjaGFyICpidWYpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03MDAte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTcwNS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjcwNjpzdGF0aWMgc3NpemVfdCBsb29wX2F0dHJfcGFydHNjYW5fc2hvdyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjaGFyICpidWYpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03MDcte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTcxMi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjcxMzpzdGF0aWMgc3NpemVfdCBsb29wX2F0dHJfZGlvX3Nob3coc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY2hhciAqYnVmKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNzE0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03MTktXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3MjA6TE9PUF9BVFRSX1JPKGJhY2tpbmdfZmlsZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3MjE6TE9PUF9BVFRSX1JPKG9mZnNldCk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3MjI6TE9PUF9BVFRSX1JPKHNpemVsaW1pdCk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3MjM6TE9PUF9BVFRSX1JPKGF1dG9jbGVhcik7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3MjQ6TE9PUF9BVFRSX1JPKHBhcnRzY2FuKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjcyNTpMT09QX0FUVFJfUk8oZGlvKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTcyNi1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz03Mzc9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG9vcF9hdHRyaWJ1dGVfZ3JvdXAgPSB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNzQxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6NzQyOnN0YXRpYyB2b2lkIGxvb3Bfc3lzZnNfaW5pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNzQzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03NDctXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3NDg6c3RhdGljIHZvaWQgbG9vcF9zeXNmc19leGl0KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03NDkte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc1NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjc1NTpzdGF0aWMgdm9pZCBsb29wX2dldF9kaXNjYXJkX2NvbmZpZyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxuZHJpdmVycy9ibG9jay9sb29wLmMtNzU2LVx0XHRcdFx0ICAgIHUzMiAqZ3JhbnVsYXJpdHksIHUzMiAqbWF4X2Rpc2NhcmRfc2VjdG9ycylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz03ODU9c3RydWN0IGxvb3Bfd29ya2VyIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03OTQtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3OTU6c3RhdGljIHZvaWQgbG9vcF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc5Ni1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc5Ny0jaWZkZWYgQ09ORklHX0JMS19DR1JPVVBcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjc5ODpzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9vbl9yb290X3dvcmtlcihzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNzk5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04MDItI2Vsc2VcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjgwMzpzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9vbl9yb290X3dvcmtlcihzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuZHJpdmVycy9ibG9jay9sb29wLmMtODA0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04MDgtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo4MDk6c3RhdGljIHZvaWQgbG9vcF9xdWV1ZV93b3JrKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay9sb29wLmMtODEwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04NzgtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo4Nzk6c3RhdGljIHZvaWQgbG9vcF9zZXRfdGltZXIoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTg4MC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtODgzLVxuZHJpdmVycy9ibG9jay9sb29wLmM6ODg0OnN0YXRpYyB2b2lkIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYm9vbCBkZWxldGVfYWxsKVxuZHJpdmVycy9ibG9jay9sb29wLmMtODg1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05MDQtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5MDU6c3RhdGljIHZvaWQgbG9vcF9mcmVlX2lkbGVfd29ya2Vyc190aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05MDYte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTkyMD1zdGF0aWMgaW50XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5MjE6bG9vcF9zZXRfc3RhdHVzX2Zyb21faW5mbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTIyLVx0XHRcdCAgY29uc3Qgc3RydWN0IGxvb3BfaW5mbzY0ICppbmZvKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk1MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk1MjpzdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfZGVmYXVsdF9ibG9ja3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk1My17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtOTU5LVxuZHJpdmVycy9ibG9jay9sb29wLmM6OTYwOnN0YXRpYyB2b2lkIGxvb3Bfc2V0X2RtYV9saW1pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NjEte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk3Mi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk3MzpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTc0LVx0XHR1bnNpZ25lZCBpbnQgYnNpemUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTAwNy1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwMDg6c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDA5LVx0XHRcdCAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTQxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTE0MjpzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTQzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxNTpzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMjQ5PXN0YXRpYyBpbnRcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyNTA6bG9vcF9zZXRfc3RhdHVzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGNvbnN0IHN0cnVjdCBsb29wX2luZm82NCAqaW5mbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyNTEte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEzMDQ9c3RhdGljIGludFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTMwNTpsb29wX2dldF9zdGF0dXMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfaW5mbzY0ICppbmZvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTMwNi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTM0MD1zdGF0aWMgdm9pZFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTM0MTpsb29wX2luZm82NF9mcm9tX29sZChjb25zdCBzdHJ1Y3QgbG9vcF9pbmZvICppbmZvLCBzdHJ1Y3QgbG9vcF9pbmZvNjQgKmluZm82NClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEzNDIte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEzNTQ9c3RhdGljIGludFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTM1NTpsb29wX2luZm82NF90b19vbGQoY29uc3Qgc3RydWN0IGxvb3BfaW5mbzY0ICppbmZvNjQsIHN0cnVjdCBsb29wX2luZm8gKmluZm8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMzU2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMzc2PXN0YXRpYyBpbnRcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEzNzc6bG9vcF9zZXRfc3RhdHVzX29sZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjb25zdCBzdHJ1Y3QgbG9vcF9pbmZvIF9fdXNlciAqYXJnKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTM3OC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTM4OD1zdGF0aWMgaW50XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMzg5Omxvb3Bfc2V0X3N0YXR1czY0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGNvbnN0IHN0cnVjdCBsb29wX2luZm82NCBfX3VzZXIgKmFyZylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEzOTAte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEzOTg9c3RhdGljIGludFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTM5OTpsb29wX2dldF9zdGF0dXNfb2xkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2luZm8gX191c2VyICphcmcpIHtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0MDAtXHRzdHJ1Y3QgbG9vcF9pbmZvIGluZm87XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTQxNT1zdGF0aWMgaW50XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDE2Omxvb3BfZ2V0X3N0YXR1czY0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2luZm82NCBfX3VzZXIgKmFyZykge1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTQxNy1cdHN0cnVjdCBsb29wX2luZm82NCBpbmZvNjQ7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQyOC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0Mjk6c3RhdGljIGludCBsb29wX3NldF9jYXBhY2l0eShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQzMC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ0MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0NDI6c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDQzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDcxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ3MjpzdGF0aWMgaW50IGxvb3Bfc2V0X2Jsb2NrX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ3My1cdFx0XHQgICAgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUxOS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1MjA6c3RhdGljIGludCBsb19zaW1wbGVfaW9jdGwoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgaW50IGNtZCxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MjEtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1NDI6c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTQzLVx0dW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTYyNj1zdGF0aWMgbm9pbmxpbmUgaW50XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNjI3Omxvb3BfaW5mbzY0X2Zyb21fY29tcGF0KGNvbnN0IHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqYXJnLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTYyOC1cdFx0XHRzdHJ1Y3QgbG9vcF9pbmZvNjQgKmluZm82NClcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNjUxPXN0YXRpYyBub2lubGluZSBpbnRcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE2NTI6bG9vcF9pbmZvNjRfdG9fY29tcGF0KGNvbnN0IHN0cnVjdCBsb29wX2luZm82NCAqaW5mbzY0LFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTY1My1cdFx0ICAgICAgc3RydWN0IGNvbXBhdF9sb29wX2luZm8gX191c2VyICphcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTY3OD1zdGF0aWMgaW50XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNjc5Omxvb3Bfc2V0X3N0YXR1c19jb21wYXQoc3RydWN0IGxvb3BfZGV2aWNlICpsbyxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE2ODAtXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBfX3VzZXIgKmFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNjkxPXN0YXRpYyBpbnRcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE2OTI6bG9vcF9nZXRfc3RhdHVzX2NvbXBhdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTY5My1cdFx0ICAgICAgIHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MDUtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNzA2OnN0YXRpYyBpbnQgbG9fY29tcGF0X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MDctXHRcdFx0ICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc0MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3NDI6c3RhdGljIGludCBsb19vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzQzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzU2LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTc1NzpzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc1OC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc4MC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3ODE6c3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc4Mi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTgyMj1zdGF0aWMgYm9vbCBtYXhfbG9vcF9zcGVjaWZpZWQ7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODIzLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgyNDpzdGF0aWMgaW50IG1heF9sb29wX3BhcmFtX3NldF9pbnQoY29uc3QgY2hhciAqdmFsLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgyNS1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTgzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgbWF4X2xvb3BfcGFyYW1fb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NDEtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODQyOm1vZHVsZV9wYXJhbV9jYihtYXhfbG9vcCwgXHUwMDI2bWF4X2xvb3BfcGFyYW1fb3BzLCBcdTAwMjZtYXhfbG9vcCwgMDQ0NCk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODQzOk1PRFVMRV9QQVJNX0RFU0MobWF4X2xvb3AsIFwmIzM0O01heGltdW0gbnVtYmVyIG9mIGxvb3AgZGV2aWNlc1wmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQ0LSNlbHNlXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODQ1Om1vZHVsZV9wYXJhbShtYXhfbG9vcCwgaW50LCAwNDQ0KTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NDY6TU9EVUxFX1BBUk1fREVTQyhtYXhfbG9vcCwgXCYjMzQ7SW5pdGlhbCBudW1iZXIgb2YgbG9vcCBkZXZpY2VzXCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NDctI2VuZGlmXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQ4LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg0OTptb2R1bGVfcGFyYW0obWF4X3BhcnQsIGludCwgMDQ0NCk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODUwOk1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsIFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHBhcnRpdGlvbnMgcGVyIGxvb3AgZGV2aWNlXCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTEtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODUyPXN0YXRpYyBpbnQgaHdfcXVldWVfZGVwdGggPSBMT09QX0RFRkFVTFRfSFdfUV9ERVBUSDtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTMtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODU0OnN0YXRpYyBpbnQgbG9vcF9zZXRfaHdfcXVldWVfZGVwdGgoY29uc3QgY2hhciAqcywgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqcClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTUte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4Njc9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGxvb3BfaHdfcWRlcHRoX3BhcmFtX29wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODcxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3MjpkZXZpY2VfcGFyYW1fY2IoaHdfcXVldWVfZGVwdGgsIFx1MDAyNmxvb3BfaHdfcWRlcHRoX3BhcmFtX29wcywgXHUwMDI2aHdfcXVldWVfZGVwdGgsIDA0NDQpO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3MzpNT0RVTEVfUEFSTV9ERVNDKGh3X3F1ZXVlX2RlcHRoLCBcJiMzNDtRdWV1ZSBkZXB0aCBmb3IgZWFjaCBoYXJkd2FyZSBxdWV1ZS4gRGVmYXVsdDogXCYjMzQ7IF9fc3RyaW5naWZ5KExPT1BfREVGQVVMVF9IV19RX0RFUFRIKSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODc0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3NTpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDspO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3NjpNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3NzpNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoTE9PUF9NQUpPUik7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODc4LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3OTpzdGF0aWMgYmxrX3N0YXR1c190IGxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODgwLVx0XHRjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5MjEtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxOTIyOnN0YXRpYyB2b2lkIGxvb3BfaGFuZGxlX2NtZChzdHJ1Y3QgbG9vcF9jbWQgKmNtZClcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5MjMte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5NzMtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxOTc0OnN0YXRpYyB2b2lkIGxvb3BfcHJvY2Vzc193b3JrKHN0cnVjdCBsb29wX3dvcmtlciAqd29ya2VyLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTk3NS1cdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpjbWRfbGlzdCwgc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDA3LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjAwODpzdGF0aWMgdm9pZCBsb29wX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDA5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDE0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjAxNTpzdGF0aWMgdm9pZCBsb29wX3Jvb3RjZ193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjAxNi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjAyMj1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbG9vcF9tcV9vcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjAyNi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIwMjc6c3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwMjgte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxNDUtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTQ2OnN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTQ3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTYzLSNpZmRlZiBDT05GSUdfQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTY0OnN0YXRpYyB2b2lkIGxvb3BfcHJvYmUoZGV2X3QgZGV2KVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE2NS17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE3NS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIxNzY6c3RhdGljIGludCBsb29wX2NvbnRyb2xfcmVtb3ZlKGludCBpZHgpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTc3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjIyLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjIyMzpzdGF0aWMgaW50IGxvb3BfY29udHJvbF9nZXRfZnJlZShpbnQgaWR4KVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjIyNC17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI0Ni1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNDc6c3RhdGljIGxvbmcgbG9vcF9jb250cm9sX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI0OC1cdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBwYXJtKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIyNzA9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGxvb3BfbWlzYyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjc1LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI3NjpNT0RVTEVfQUxJQVNfTUlTQ0RFVihMT09QX0NUUkxfTUlOT1IpO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MjI3NzpNT0RVTEVfQUxJQVMoXCYjMzQ7ZGV2bmFtZTpsb29wLWNvbnRyb2xcJiMzNDspO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjI3OC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNzk6c3RhdGljIGludCBfX2luaXQgbG9vcF9pbml0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzMxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjMzMjpzdGF0aWMgdm9pZCBfX2V4aXQgbG9vcF9leGl0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzMzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzUxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjM1Mjptb2R1bGVfaW5pdChsb29wX2luaXQpO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MjM1Mzptb2R1bGVfZXhpdChsb29wX2V4aXQpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjM1NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzNTUtI2lmbmRlZiBNT0RVTEVcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzNTY6c3RhdGljIGludCBfX2luaXQgbWF4X2xvb3Bfc2V0dXAoY2hhciAqc3RyKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjM1Ny17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjM2NC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzNjU6X19zZXR1cChcJiMzNDttYXhfbG9vcD1cJiMzNDssIG1heF9sb29wX3NldHVwKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzNjYtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTY1CgkJCQkJCQlvdXRwdXQ6IDEzMwoJCQkJCQkJdGhvdWdodHM6IDQ0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTG9vcCBEZXZpY2UgRHJpdmVyIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaXMgb24gdGhpcyBzcGVjaWZpYyBwYXRjaCB0b3VjaGluZyB0aGUgbG9vcCBkZXZpY2UgZHJpdmVyLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBzeW1ib2xzLiBJJiMzOTttIHplcm9pbmcgaW4gb24gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAsIGBsb29wX2NsZWFyX2xpbWl0c2AsIGBsb19mYWxsb2NhdGVgLCBgbG9vcF9jb25maWd1cmVgLCBgbG9faW9jdGxgLCBhbmQgYGxvb3BfY29udHJvbF9pb2N0bGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfTE9PUGAuIERpdmluZyBpbnRvIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgLCBpdCBsb29rcyBsaWtlIGBCTEtfREVWX0xPT1BgIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQgZGVwZW5kcyBvbiB0aGUgYmxvY2sgZGV2aWNlIGluZnJhc3RydWN0dXJlIGl0c2VsZiAoYEJMT0NLYCksIHdoaWNoIGlzIGhhbmRsZWQgYnkgYENPTkZJR19CTE9DS2AuIFRoYXQmIzM5O3MgZ29vZC4gTm8gb2JzY3VyZSBkZXBlbmRlbmNpZXMgdG8gd29ycnkgYWJvdXQuCgpMZXQmIzM5O3MgZG8gYSBmaW5hbCBzYW5pdHkgY2hlY2ssIHB1bGxpbmcgaXQgYWxsIHRvZ2V0aGVyOiBJJiMzOTt2ZSBnb3QgYFdvcnRoRnV6emluZ2Agc2V0IHRvIHRydWUsIGBFbmFibGVDb25maWdzYCB3aXRoIGAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7YCwgYW5kIGBGb2N1c1N5bWJvbHNgIHNldCB0byBgJiMzNDtsb29wX2NsZWFyX2xpbWl0c193b3JrZm4mIzM0OywgJiMzNDtsb29wX2NsZWFyX2xpbWl0cyYjMzQ7LCAmIzM0O2xvX2ZhbGxvY2F0ZSYjMzQ7LCAmIzM0O2xvb3BfY29uZmlndXJlJiMzNDtgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBUaGlzIHBhdGNoJiMzOTtzIHB1cnBvc2UgaXMgdG8gZGVmZXIgcXVldWUgbGltaXQgdXBkYXRlcyB3aGVuIGBmYWxsb2NhdGVgIG9wZXJhdGlvbnMgZmFpbCwgdXNpbmcgYSB3b3JrcXVldWUgKGBjbGVhcl9saW1pdHNfd29ya2ApIGFuZCBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKClgLiBUaGlzIGRpcmVjdGx5IGFkZHJlc3NlcyBxdWV1ZSBsb2NraW5nIGlzc3VlcyBkdXJpbmcgcmVxdWVzdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGFmZmVjdGluZyBkaXNjYXJkIGFuZCB6ZXJvLXJhbmdlIHF1ZXVlIGxpbWl0IHVwZGF0ZXMuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgYWxsIHRoZSB0b29sIGNhbGxzIGFuZCBwYXJhbWV0ZXJzLiBJdCBsb29rcyBsaWtlIGl0IGlzIHJlYWR5IHRvIGV4ZWN1dGUgd2l0aCBgc2V0LXJlc3VsdHNgLiBFdmVyeXRoaW5nIGlzIGNvcnJlY3QuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGl0IGluIG1vdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTk6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BfY2xlYXJfbGltaXRzX3dvcmtmbiYjMzQ7LAogICAgJiMzNDtsb29wX2NsZWFyX2xpbWl0cyYjMzQ7LAogICAgJiMzNDtsb19mYWxsb2NhdGUmIzM0OywKICAgICYjMzQ7bG9vcF9jb25maWd1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9ibG9jay9sb29wLmMgdG8gaGFuZGxlIGNsZWFyaW5nIHF1ZXVlIGxpbWl0cyBhc3luY2hyb25vdXNseSB2aWEgYSB3b3JrcXVldWUgKGNsZWFyX2xpbWl0c193b3JrKSBpbnN0ZWFkIG9mIGRpcmVjdGx5IGluc2lkZSBxdWV1ZV9ycSBjb250ZXh0LiBUaGlzIHByb3Blcmx5IHVzZXMgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuIHRvIGZvbGxvdyB0aGUgcXVldWUgbGltaXRzIGxvY2tpbmcgcHJvdG9jb2wgd2hlbiBmYWxsb2NhdGUgb3BlcmF0aW9ucyBmYWlsIG9uIGxvb3AgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuJiMzNDssCiAgICAmIzM0O2xvb3BfY2xlYXJfbGltaXRzJiMzNDssCiAgICAmIzM0O2xvX2ZhbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDtsb29wX2NvbmZpZ3VyZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBoYW5kbGUgY2xlYXJpbmcgcXVldWUgbGltaXRzIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoY2xlYXJfbGltaXRzX3dvcmspIGluc3RlYWQgb2YgZGlyZWN0bHkgaW5zaWRlIHF1ZXVlX3JxIGNvbnRleHQuIFRoaXMgcHJvcGVybHkgdXNlcyBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4gdG8gZm9sbG93IHRoZSBxdWV1ZSBsaW1pdHMgbG9ja2luZyBwcm90b2NvbCB3aGVuIGZhbGxvY2F0ZSBvcGVyYXRpb25zIGZhaWwgb24gbG9vcCBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdHJhbnNpdGlvbnMgdGhlIGxvb3AgZHJpdmVyJiMzOTtzIHF1ZXVlIGxpbWl0cyBjbGVhcmluZyBsb2dpYyBmcm9tIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiBpbnNpZGUgcmVxdWVzdCBoYW5kbGluZyB0byBhbiBhc3luY2hyb25vdXMgd29ya3F1ZXVlIChgY2xlYXJfbGltaXRzX3dvcmtgKSB1c2luZyBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKClgLlxuXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3QgZmllbGRzIChgY2xlYXJfbGltaXRzX3dvcmtgIGFuZCBgY2xlYXJfbGltaXRzX21vZGVgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IHRoZSBgbG9vcF9kZXZpY2VgIHN0cnVjdCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgdGhlIHdvcmsgaXRlbSBpcyBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUksoKWAsIGFuZCB0aGUgYXRvbWljIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgcmVzZXQgd2l0aCBgYXRvbWljX3NldGAgLyBhdG9taWMgb3BlcmF0aW9ucy4gVGhlIGBzdHJ1Y3QgcXVldWVfbGltaXRzYCB1c2VkIGluIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gIGlzIGluaXRpYWxpemVkIGZyb20gYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgKHdoaWNoIHJldHVybnMgdGhlIGN1cnJlbnQgcXVldWUgbGltaXRzKS5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIHF1ZXVlIGZyZWV6aW5nIGxvY2tpbmcgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzODM3OGQ4ZGJmODliODFhNDgyMDZmNzk2OWMxOGRkZmNmYjBlNjExCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxOTozNjo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggNmYxMjk3NjAzNWIwOS4uMzY4ZWE4NTc4OTVjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTY3LDYgJiM0Mzs2Nyw4IEBAIHN0cnVjdCBsb29wX2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgcm9vdGNnX2NtZF9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGlkbGVfd29ya2VyX2xpc3Q7CiAJc3RydWN0IHJiX3Jvb3QgICAgICAgICAgd29ya2VyX3RyZWU7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgIGNsZWFyX2xpbWl0c193b3JrOwomIzQzOwlhdG9taWNfdAkJY2xlYXJfbGltaXRzX21vZGU7CiAJc3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7CiAJYm9vbAkJCXN5c2ZzX2luaXRlZDsKIApAQCAtMjIyLDkgJiM0MzsyMjQsMTIgQEAgc3RhdGljIHZvaWQgbG9vcF9zZXRfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBsb2ZmX3Qgc2l6ZSkKIAkJa29iamVjdF91ZXZlbnQoJmFtcDtkaXNrX3RvX2Rldihsby0mZ3Q7bG9fZGlzayktJmd0O2tvYmosIEtPQkpfQ0hBTkdFKTsKIH0KIAotc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpCiYjNDM7c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKJiM0MzsJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9CiYjNDM7CQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBjbGVhcl9saW1pdHNfd29yayk7CiAJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLSZndDtsb19xdWV1ZSk7CiYjNDM7CWludCBtb2RlID0gYXRvbWljX3hjaGcoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX21vZGUsIDApOwogCiAJaWYgKG1vZGUgJmFtcDsgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpCiAJCWxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwOwpAQCAtMjM0LDE0ICYjNDM7MjM5LDEzIEBAIHN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKQogCQlsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7CiAJfQogCi0JLyoKLQkgKiBYWFg6IHRoaXMgdXBkYXRlcyB0aGUgcXVldWUgbGltaXRzIHdpdGhvdXQgZnJlZXppbmcgdGhlIHF1ZXVlLCB3aGljaAotCSAqIGlzIGFnYWluc3QgdGhlIGxvY2tpbmcgcHJvdG9jb2wgYW5kIGRhbmdlcm91cy4gIEJ1dCB3ZSBjYW4mIzM5O3QganVzdAotCSAqIGZyZWV6ZSB0aGUgcXVldWUgYXMgd2UmIzM5O3JlIGluc2lkZSB0aGUgLSZndDtxdWV1ZV9ycSBtZXRob2QgaGVyZS4gIFNvIHRoaXMKLQkgKiBzaG91bGQgbW92ZSBvdXQgaW50byBhIHdvcmtxdWV1ZSB1bmxlc3Mgd2UgZ2V0IHRoZSBmaWxlIG9wZXJhdGlvbnMgdG8KLQkgKiBhZHZlcnRpc2UgaWYgdGhleSBzdXBwb3J0IHNwZWNpZmljIGZhbGxvY2F0ZSBvcGVyYXRpb25zLgotCSAqLwotCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLSZndDtsb19xdWV1ZSwgJmFtcDtsaW0pOwomIzQzOwlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obG8tJmd0O2xvX3F1ZXVlLCAmYW1wO2xpbSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKQomIzQzO3sKJiM0MzsJYXRvbWljX29yKG1vZGUsICZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c19tb2RlKTsKJiM0MzsJc2NoZWR1bGVfd29yaygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yayk7CiB9CiAKIHN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcywKQEAgLTUxNiw2ICYjNDM7NTIwLDcgQEAgc3RhdGljIGludCBsb29wX3ZhbGlkYXRlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCiBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJbG8tJmd0O2xvX2JhY2tpbmdfZmlsZSA9IGZpbGU7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX21vZGUsIDApOwogCWxvLSZndDtvbGRfZ2ZwX21hc2sgPSBtYXBwaW5nX2dmcF9tYXNrKGZpbGUtJmd0O2ZfbWFwcGluZyk7CiAJbWFwcGluZ19zZXRfZ2ZwX21hc2soZmlsZS0mZ3Q7Zl9tYXBwaW5nLAogCQkJbG8tJmd0O29sZF9nZnBfbWFzayAmYW1wOyB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpKTsKQEAgLTE3ODEsNiAmIzQzOzE3ODYsNyBAQCBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spCiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGxvLSZndDt3b3JrcXVldWUpOwogCWxvb3BfZnJlZV9pZGxlX3dvcmtlcnMobG8sIHRydWUpOwogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtsby0mZ3Q7dGltZXIpOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c193b3JrKTsKIAltdXRleF9kZXN0cm95KCZhbXA7bG8tJmd0O2xvX211dGV4KTsKIAlrZnJlZShsbyk7CiB9CkBAIC0yMTAwLDYgJiM0MzsyMTA2LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSkKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2xvLSZndDtsb19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2xvLSZndDtsb193b3JrX2xvY2spOwogCUlOSVRfV09SSygmYW1wO2xvLSZndDtyb290Y2dfd29yaywgbG9vcF9yb290Y2dfd29ya2ZuKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bG8tJmd0O3Jvb3RjZ19jbWRfbGlzdCk7CiAJZGlzay0mZ3Q7bWFqb3IJCT0gTE9PUF9NQUpPUjsKIAlkaXNrLSZndDtmaXJzdF9taW5vcgk9IGkgJmx0OyZsdDsgcGFydF9zaGlmdDsKQEAgLTIxMzgsNiAmIzQzOzIxNDUsMTAgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSkKIAogc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIHsKJiM0MzsJLyogQ2FuY2VsIGVhcmx5OiB0aGUgcXVldWUgbWF5IGJlIGluIFJDVS1kZWxheWVkIGZyZWVpbmcKJiM0MzsJICogYnkgdGhlIHRpbWUgbG9fZnJlZV9kaXNrKCkgcnVucy4gKi8KJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yayk7CiYjNDM7CiAJLyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovCiAJZGVsX2dlbmRpc2sobG8tJmd0O2xvX2Rpc2spOwogCWJsa19tcV9mcmVlX3RhZ19zZXQoJmFtcDtsby0mZ3Q7dGFnX3NldCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTI0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9vcCBEZXZpY2UgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBMZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0JiMzOTtzIGhhcHBlbmluZyBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSYjMzk7cmUgYWRkcmVzc2luZyBzb21lIGNvbmN1cnJlbmN5IGlzc3VlcyByZWxhdGVkIHRvIHF1ZXVlIGxpbWl0cy4KCkZpcnN0LCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgdHdvIG5ldyBtZW1iZXJzIHRvIHRoZSBgc3RydWN0IGxvb3BfZGV2aWNlYDogYSBgc3RydWN0IHdvcmtfc3RydWN0IGNsZWFyX2xpbWl0c193b3JrO2AgYW5kIGFuIGBhdG9taWNfdCBjbGVhcl9saW1pdHNfbW9kZTtgLiBTZWVtcyBsaWtlIHdlJiMzOTtyZSBtb3ZpbmcgdG93YXJkcyBhc3luY2hyb25vdXMgbGltaXQgdXBkYXRlcywgd2hpY2ggaXMgdXN1YWxseSBhIGdvb2Qgc2lnbiBmb3IgYXZvaWRpbmcgdGhvc2UgcGVza3kgcXVldWUgZnJlZXppbmcgcHJvYmxlbXMuCgpTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIHRoZSBzeW5jaHJvbm91cyBjYWxsIHRvIGBsb29wX2NsZWFyX2xpbWl0cyhsbywgbW9kZSlgIHdpdGggYW4gYXN5bmNocm9ub3VzIGFwcHJvYWNoLiBUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gY2FsbGVkIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBhbmQgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlYCBkaXJlY3RseSwgd2hpY2gsIGdpdmVuIHRoZSAmIzM0O2luc2lkZSBgLSZndDtxdWV1ZV9ycWAmIzM0OyBjb250ZXh0LCBwcm9iYWJseSB2aW9sYXRlZCB0aGUgcXVldWUgZnJlZXppbmcgcnVsZXMuCgpOb3csIGBsb29wX2NsZWFyX2xpbWl0c2AgYXRvbWljYWxseSBPUnMgdGhlIGBtb2RlYCBpbnRvIGBsby0mZ3Q7Y2xlYXJfbGltaXRzX21vZGVgIGFuZCBzY2hlZHVsZXMgdGhlIGBsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmtgLiBUaGUgYWN0dWFsIHdvcmsgaXMgZG9uZSBieSBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCwgd2hpY2ggcnVucyBhc3luY2hyb25vdXNseS4gSXQgcmV0cmlldmVzIGFuZCByZXNldHMgYGxvLSZndDtjbGVhcl9saW1pdHNfbW9kZWAgdXNpbmcgYGF0b21pY194Y2hnKCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c19tb2RlLCAwKWAuIFRoZW4gaXQgZmV0Y2hlcyB0aGUgY3VycmVudCBxdWV1ZSBsaW1pdHMgdXNpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKWAsIG1vZGlmaWVzIHRoZW0sIGFuZCBjb21taXRzIHRoZSB1cGRhdGVzIHVzaW5nIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obG8tJmd0O2xvX3F1ZXVlLCAmYW1wO2xpbSlgLiBNYWtlcyBzZW5zZTsgaXQmIzM5O3MgYSBzdGFuZGFyZCBwYXR0ZXJuIGZvciBkZWZlcnJpbmcgd29yayBhbmQgYXZvaWRpbmcgbG9jayBjb250ZW50aW9uLgoKSSBzZWUgYElOSVRfV09SSygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKWAgYmVpbmcgY2FsbGVkIGR1cmluZyBgbG9vcF9hZGRgIGZvciBpbml0aWFsaXphdGlvbiwgYW5kIGBhdG9taWNfc2V0KCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c19tb2RlLCAwKWAgaXMgc2V0IGR1cmluZyBgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlYCwgc28gd2UmIzM5O3JlIGluaXRpYWxpemluZyB0aGUgd29yayBzdHJ1Y3QgYW5kIHRoZSBtb2RlIGFwcHJvcHJpYXRlbHkuIEFuZCBmaW5hbGx5LCB0aGUgcGF0Y2ggYWRkcyBgY2FuY2VsX3dvcmtfc3luYygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yaylgIGluIGBsb19mcmVlX2Rpc2tgIGFuZCBgbG9vcF9yZW1vdmVgIHRvIGVuc3VyZSB3ZSBkb24mIzM5O3QgbGVhayBhbnl0aGluZyB3aGVuIHRoZSBkZXZpY2UgaXMgdG9ybiBkb3duLiBHb29kIGhvdXNla2VlcGluZy4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgaXNzdWVzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGlzIGxpbmU6IGBzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTtgLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBjb3B5aW5nIHF1ZXVlIGxpbWl0cywgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGludG8gYSBsb2NhbCB2YXJpYWJsZS4gU28sIHRoZSBxdWVzdGlvbiBpcywgaG93IGlzIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBpbXBsZW1lbnRlZD8gTGV0JiMzOTtzIGNoZWNrIHRoZSBibG9jayBsYXllciBpbXBsZW1lbnRhdGlvbiB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgdGhlcmUuIFdlIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IHRoZSByZXR1cm5lZCBgcXVldWVfbGltaXRzYCBzdHJ1Y3QgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1pbnRlZ3JpdHkuYz0yMjY9c3RhdGljIHNzaXplX3QgZmxhZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCxcbi0tXG5ibG9jay9ibGstaW50ZWdyaXR5LmMtMjM4LVx0Lyogbm90ZSB0aGF0IHRoZSBmbGFncyBhcmUgaW52ZXJ0ZWQgdnMgdGhlIHZhbHVlcyBpbiB0aGUgc3lzZnMgZmlsZXMgKi9cbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYzoyMzk6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuYmxvY2svYmxrLWludGVncml0eS5jLTI0MC1cdGlmICh2YWwpXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmM9NTIyPWludCBibGtfc2V0X2RlZmF1bHRfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbi0tXG5ibG9jay9ibGstc2V0dGluZ3MuYy01MzgtICpcbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjUzOTogKiBBcHBseSB0aGUgbGltaXRzIGluIEBsaW0gdGhhdCB3ZXJlIG9idGFpbmVkIGZyb20gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NDAtICogYW5kIHVwZGF0ZWQgYnkgdGhlIGNhbGxlciB0byBAcS4gIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGZyb3plbiB0aGUgcXVldWUgb3Jcbi0tXG5ibG9jay9ibGstc2V0dGluZ3MuYz01NzE9RVhQT1JUX1NZTUJPTF9HUEwocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUpO1xuLS1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU3Ny0gKlxuYmxvY2svYmxrLXNldHRpbmdzLmM6NTc4OiAqIEFwcGx5IHRoZSBsaW1pdHMgaW4gQGxpbSB0aGF0IHdlcmUgb2J0YWluZWQgZnJvbSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU3OS0gKiBhbmQgdXBkYXRlZCB3aXRoIHRoZSBuZXcgdmFsdWVzIGJ5IHRoZSBjYWxsZXIgdG8gQHEuICBGcmVlemVzIHRoZSBxdWV1ZVxuLS1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jPTU5Nj1FWFBPUlRfU1lNQk9MX0dQTChxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4pO1xuLS1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTYwMy0gKiBBcHBseSB0aGUgbGltaXRzIGluIEBsaW0gdGhhdCB3ZXJlIGZyZXNobHkgaW5pdGlhbGl6ZWQgdG8gQHEuXG5ibG9jay9ibGstc2V0dGluZ3MuYzo2MDQ6ICogVG8gdXBkYXRlIGV4aXN0aW5nIGxpbWl0cyB1c2UgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpIGFuZFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNjA1LSAqIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKCkgaW5zdGVhZC5cbi0tXG5ibG9jay9ibGstc3lzZnMuYz04Nzk9cXVldWVfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbi0tXG5ibG9jay9ibGstc3lzZnMuYy04OTEtXG5ibG9jay9ibGstc3lzZnMuYzo4OTI6XHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbmJsb2NrL2Jsay1zeXNmcy5jLTg5My1cbi0tXG5ibG9jay9ibGstem9uZWQuYz0yMDU4PXN0YXRpYyBpbnQgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMjA2Ni1cbmJsb2NrL2Jsay16b25lZC5jOjIwNjc6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuYmxvY2svYmxrLXpvbmVkLmMtMjA2OC1cbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTEzMDE9dm9pZCBkcmJkX3JlY29uc2lkZXJfcXVldWVfcGFyYW1ldGVycyhzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTEzMzQtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjEzMzU6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0xMzM2LVx0aWYgKGJkZXYpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMjc9c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzAtXHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGNsZWFyX2xpbWl0c193b3JrKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzMTpcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzItXHRpbnQgbW9kZSA9IGF0b21pY194Y2hnKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMDA4PXN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwODctXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMDg4Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDg5LVx0bG9vcF91cGRhdGVfbGltaXRzKGxvLCBcdTAwMjZsaW0sIGNvbmZpZy1cdTAwM2VibG9ja19zaXplKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMTQyPXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTY0LVx0ICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTY1Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTY2LVx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0NDI9c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ1OS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0NjA6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NjEtXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0NzI9c3RhdGljIGludCBsb29wX3NldF9ibG9ja19zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTAzLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUwNDpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTUwNS1cdGxvb3BfdXBkYXRlX2xpbWl0cyhsbywgXHUwMDI2bGltLCBhcmcpO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MzU1PXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0zNzQtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjM3NTpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0zNzYtXHRuYmRfYXBwbHlfbGltaXRzKFx1MDAyNmxpbSwgbmJkLVx1MDAzZWNvbmZpZy1cdTAwM2VmbGFncyk7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xNDY4PXN0YXRpYyB2b2lkIG5iZF9jb25maWdfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDc2LVx0XHQvKiByZXNldCBxdWV1ZSBsaW1pdHMgdG8gZGVmYXVsdCAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzoxNDc3Olx0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ3OC1cdFx0bmJkX2FwcGx5X2xpbWl0cyhcdTAwMjZsaW0sIDApO1xuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTEwOTQ9Y2FjaGVfdHlwZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTExMDktXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxMTEwOlx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTExMTEtXHRpZiAodmlydGJsa19nZXRfY2FjaGVfbW9kZSh2ZGV2KSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jPTIwMDY9c3RhdGljIGludCBibGtpZl9yZWNvdmVyKHN0cnVjdCBibGtmcm9udF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMtMjAxNC1cbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmM6MjAxNTpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoaW5mby1cdTAwM2VycSk7XG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jLTIwMTYtXHRibGtmcm9udF9nYXRoZXJfYmFja2VuZF9mZWF0dXJlcyhpbmZvKTtcbi0tXG5kcml2ZXJzL21kL2RtLXRhYmxlLmM9MjAyOD1pbnQgZG1fdGFibGVfc2V0X3Jlc3RyaWN0aW9ucyhzdHJ1Y3QgZG1fdGFibGUgKnQsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmRyaXZlcnMvbWQvZG0tdGFibGUuYy0yMDgyLVxuZHJpdmVycy9tZC9kbS10YWJsZS5jOjIwODM6XHRvbGRfbGltaXRzID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbmRyaXZlcnMvbWQvZG0tdGFibGUuYy0yMDg0LVx0ciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbWl0cyk7XG4tLVxuZHJpdmVycy9tZC9tZC5jPTU5ODA9c3RhdGljIGludCBtZGRldl9zZXRfbG9naWNhbF9ibG9ja19zaXplKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4tLVxuZHJpdmVycy9tZC9tZC5jLTU5OTEtXG5kcml2ZXJzL21kL21kLmM6NTk5MjpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZSk7XG5kcml2ZXJzL21kL21kLmMtNTk5My1cdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBsYnM7XG4tLVxuZHJpdmVycy9tZC9tZC5jPTYyNDk9aW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxuLS1cbmRyaXZlcnMvbWQvbWQuYy02MjYyLVxuZHJpdmVycy9tZC9tZC5jOjYyNjM6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9tZC9tZC5jLTYyNjQtXHRxdWV1ZV9saW1pdHNfc3RhY2tfYmRldihcdTAwMjZsaW0sIHJkZXYtXHUwMDNlYmRldiwgcmRldi1cdTAwM2VkYXRhX29mZnNldCxcbi0tXG5kcml2ZXJzL21kL21kLmM9NjI3OT12b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTYyODgtXHRcdHJldHVybjtcbmRyaXZlcnMvbWQvbWQuYzo2Mjg5Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvbWQvbWQuYy02MjkwLVx0bGltLmlvX29wdCA9IGxpbS5pb19taW4gKiBucl9zdHJpcGVzO1xuLS1cbmRyaXZlcnMvbWQvcmFpZDUuYz03Mjg4PXJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxuLS1cbmRyaXZlcnMvbWQvcmFpZDUuYy03MzA3LVx0XHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWU7XG5kcml2ZXJzL21kL3JhaWQ1LmM6NzMwODpcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuZHJpdmVycy9tZC9yYWlkNS5jLTczMDktXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIyMzg9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2dlbmVyaWMoc3RydWN0IG52bWVfbnMgKm5zLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjQ0LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjIyNDU6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTIyNDYtXHRudm1lX3NldF9jdHJsX2xpbWl0cyhucy1cdTAwM2VjdHJsLCBcdTAwMjZsaW0sIGZhbHNlKTtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjQwOD1zdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soc3RydWN0IG52bWVfbnMgKm5zLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDU5LVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI0NjA6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI0NjEtXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTI1NDE9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU4My1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTg0Olx0XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU4NS1cdFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTM2MTc9c3RhdGljIGludCBudm1lX2luaXRfaWRlbnRpZnkoc3RydWN0IG52bWVfY3RybCAqY3RybClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMzY4NS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzozNjg2Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShjdHJsLVx1MDAzZWFkbWluX3EpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTM2ODctXHRudm1lX3NldF9jdHJsX2xpbWl0cyhjdHJsLCBcdTAwMjZsaW0sIHRydWUpO1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM9MzI0PXN0YXRpYyBpbnQgZGFzZF9zdGF0ZV9iYXNpY190b19yZWFkeShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSlcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jLTM0Ni1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM6MzQ3Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShibG9jay1cdTAwM2VnZHAtXHUwMDNlcXVldWUpO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zNDgtXHRsaW0ubWF4X2Rldl9zZWN0b3JzID0gZGV2aWNlLVx1MDAzZWRpc2NpcGxpbmUtXHUwMDNlbWF4X3NlY3RvcnMoYmxvY2spO1xuLS1cbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmM9MTA2Nz1tcGkzbXJfdXBkYXRlX3NkZXYoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmMtMTA3Ny1cbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmM6MTA3ODpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2Rldi1cdTAwM2VyZXF1ZXN0X3F1ZXVlKTtcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmMtMTA3OS1cdG1waTNtcl9jb25maWd1cmVfdGd0X2Rldih0Z3RkZXYsIFx1MDAyNmxpbSk7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jPTg4MD1zdGF0aWMgaW50IHNjc2lfYWRkX2x1bihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHVuc2lnbmVkIGNoYXIgKmlucV9yZXN1bHQsXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jLTEwODktXHQgKi9cbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYzoxMDkwOlx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGV2LVx1MDAzZXJlcXVlc3RfcXVldWUpO1xuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jLTEwOTEtXHRpZiAoKmJmbGFncyBcdTAwMjYgQkxJU1RfTUFYXzUxMilcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYz0yMjA9Y2FjaGVfdHlwZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvc2NzaS9zZC5jLTI1OC1cbmRyaXZlcnMvc2NzaS9zZC5jOjI1OTpcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGtwLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9zY3NpL3NkLmMtMjYwLVx0XHRzZF9zZXRfZmx1c2hfZmxhZyhzZGtwLCBcdTAwMjZsaW0pO1xuLS1cbmRyaXZlcnMvc2NzaS9zZC5jPTU3NT1wcm92aXNpb25pbmdfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvc2NzaS9zZC5jLTU5Mi1cbmRyaXZlcnMvc2NzaS9zZC5jOjU5MzpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2RrcC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvc2NzaS9zZC5jLTU5NC1cdHNkX2NvbmZpZ19kaXNjYXJkKHNka3AsIFx1MDAyNmxpbSwgbW9kZSk7XG4tLVxuZHJpdmVycy9zY3NpL3NkLmM9Njc1PW1heF93cml0ZV9zYW1lX2Jsb2Nrc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvc2NzaS9zZC5jLTcwMS1cbmRyaXZlcnMvc2NzaS9zZC5jOjcwMjpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2RrcC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvc2NzaS9zZC5jLTcwMy1cdHNkX2NvbmZpZ193cml0ZV9zYW1lKHNka3AsIFx1MDAyNmxpbSk7XG4tLVxuZHJpdmVycy9zY3NpL3NkLmM9Mzc3Mz1zdGF0aWMgdm9pZCBzZF9yZXZhbGlkYXRlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG4tLVxuZHJpdmVycy9zY3NpL3NkLmMtMzgwMi1cbmRyaXZlcnMvc2NzaS9zZC5jOjM4MDM6XHQqbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGtwLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9zY3NpL3NkLmMtMzgwNC1cbi0tXG5kcml2ZXJzL3Njc2kvc3IuYz00NzY9c3RhdGljIGludCBzcl9yZXZhbGlkYXRlX2Rpc2soc3RydWN0IHNjc2lfY2QgKmNkKVxuLS1cbmRyaXZlcnMvc2NzaS9zci5jLTQ4OC1cbmRyaXZlcnMvc2NzaS9zci5jOjQ4OTpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG5kcml2ZXJzL3Njc2kvc3IuYy00OTAtXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gc2VjdG9yX3NpemU7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jPTU4ND1zdGF0aWMgc3NpemVfdCBtYXhfc2VjdG9yc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jLTU5NC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYzo1OTU6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNkZXYtXHUwMDNlcmVxdWVzdF9xdWV1ZSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMtNTk2LVx0bGltLm1heF9od19zZWN0b3JzID0gbXM7XG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMDc4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJsa19ib3VuZGFyeV9zZWN0b3JzX2xlZnQoc2VjdG9yX3Qgb2Zmc2V0LFxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTA4Ni0vKipcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTA4NzogKiBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlIC0gc3RhcnQgYW4gYXRvbWljIHVwZGF0ZSBvZiBxdWV1ZSBsaW1pdHNcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTA4OC0gKiBAcTpcdFx0cXVldWUgdG8gdXBkYXRlXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMDk3PXN0YXRpYyBpbmxpbmUgc3RydWN0IHF1ZXVlX2xpbWl0c1xuaW5jbHVkZS9saW51eC9ibGtkZXYuaDoxMDk4OnF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEwOTktXHRfX2FjcXVpcmVzKFx1MDAyNnEtXHUwMDNlbGltaXRzX2xvY2spXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMTEwPWludCBibGtfdmFsaWRhdGVfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTE2LSAqIFRoaXMgZnVuY3Rpb25zIGNhbmNlbHMgYW4gYXRvbWljIHVwZGF0ZSBvZiB0aGUgcXVldWUgbGltaXRzIHN0YXJ0ZWQgYnlcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTExNzogKiBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCkgYW5kIHNob3VsZCBiZSB1c2VkIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGFmdGVyXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTExMTgtICogc3RhcnRpbmcgdXBkYXRlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTc1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBEZWVwIGludG8gdGhlIExvb3AgRGV2aWNlIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZXNlIGNoYW5nZXMgaW50aW1hdGVseS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IG1ldGhvZGljYWxseSBleGFtaW5pbmcgdGhlIG1vZGlmaWNhdGlvbnMuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgZHJpdmVycy9ibG9jay9sb29wLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBjb2RlIGFyb3VuZCB0aGUgYGxvb3BfY2xlYXJfbGltaXRzYCBmdW5jdGlvbiBhbmQgdGhlIGBsb19mYWxsb2NhdGVgIGltcGxlbWVudGF0aW9uLiBJIGtub3cgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgcGFyYW1ldGVycyBhbmQgcG90ZW50aWFsIGFsbG9jYXRpb24gaXNzdWVzIGxpdmUuIFRoYXQgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZXZhbHVhdGluZyB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZmFsbG9jYXRlIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggbGltaXQgY29uc3RyYWludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyMDpcdCAqL1xuIDIyMTpcdHN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpXG4gMjIyOlx0e1xuIDIyMzpcdFx0aWYgKCFzZXRfY2FwYWNpdHlfYW5kX25vdGlmeShsby1cdTAwM2Vsb19kaXNrLCBzaXplKSlcbiAyMjQ6XHRcdFx0a29iamVjdF91ZXZlbnQoXHUwMDI2ZGlza190b19kZXYobG8tXHUwMDNlbG9fZGlzayktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIDIyNTpcdH1cbiAyMjY6XHRcbiAyMjc6XHRzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDIyODpcdHtcbiAyMjk6XHRcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPVxuIDIzMDpcdFx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBjbGVhcl9saW1pdHNfd29yayk7XG4gMjMxOlx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuIDIzMjpcdFx0aW50IG1vZGUgPSBhdG9taWNfeGNoZyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gMjMzOlx0XG4gMjM0Olx0XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpXG4gMjM1Olx0XHRcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuIDIzNjpcdFxuIDIzNzpcdFx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XG4gMjM4Olx0XHRcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDtcbiAyMzk6XHRcdFx0bGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwO1xuIDI0MDpcdFx0fVxuIDI0MTpcdFxuIDI0MjpcdFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKGxvLVx1MDAzZWxvX3F1ZXVlLCBcdTAwMjZsaW0pO1xuIDI0MzpcdH1cbiAyNDQ6XHRcbiAyNDU6XHRzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbiAyNDY6XHR7XG4gMjQ3Olx0XHRhdG9taWNfb3IobW9kZSwgXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX21vZGUpO1xuIDI0ODpcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yayk7XG4gMjQ5Olx0fVxuIDI1MDpcdFxuIDI1MTpcdHN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcyxcbiAyNTI6XHRcdFx0XHRpbnQgbW9kZSlcbiAyNTM6XHR7XG4gMjU0Olx0XHQvKlxuIDI1NTpcdFx0ICogV2UgdXNlIGZhbGxvY2F0ZSB0byBtYW5pcHVsYXRlIHRoZSBzcGFjZSBtYXBwaW5ncyB1c2VkIGJ5IHRoZSBpbWFnZVxuIDI1NjpcdFx0ICogYS5rLmEuIGRpc2NhcmQvemVyb3JhbmdlLlxuIDI1NzpcdFx0ICovXG4gMjU4Olx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiAyNTk6XHRcdGludCByZXQ7XG4gMjYwOlx0XG4gMjYxOlx0XHRtb2RlIHw9IEZBTExPQ19GTF9LRUVQX1NJWkU7XG4gMjYyOlx0XG4gMjYzOlx0XHRpZiAoIWJkZXZfbWF4X2Rpc2NhcmRfc2VjdG9ycyhsby1cdTAwM2Vsb19kZXZpY2UpKVxuIDI2NDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gMjY1Olx0XG4gMjY2Olx0XHRyZXQgPSBmaWxlLVx1MDAzZWZfb3AtXHUwMDNlZmFsbG9jYXRlKGZpbGUsIG1vZGUsIHBvcywgYmxrX3JxX2J5dGVzKHJxKSk7XG4gMjY3Olx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlZBTCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKSlcbiAyNjg6XHRcdFx0cmV0dXJuIC1FSU87XG4gMjY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MjYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIGZvY3VzaW5nIG9uIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zOgoKKipBbmFseXppbmcgYGxvX2ZhbGxvY2F0ZWAgYW5kIExvb3AgRGV2aWNlIExpbWl0cyoqCgpBbHJpZ2h0LCBzbyB0aGUgYGxvX2ZhbGxvY2F0ZWAgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGhhbmRsZSB0aGUgYGZhbGxvY2F0ZWAgc3lzdGVtIGNhbGwsIHdoaWNoIGlzIGEgY29tbW9uIG1ldGhvZCBmb3IgcHJlYWxsb2NhdGluZyBkaXNrIHNwYWNlLiBUaGUgaW50ZXJlc3RpbmcgYml0IGNvbWVzIHdoZW4gYGZhbGxvY2F0ZWAgdGhyb3dzIGFuIGVycm9yLCBwYXJ0aWN1bGFybHkgYC1FT1BOT1RTVVBQYCBvciBhIHNpbWlsYXIgaW5kaWNhdGlvbiB0aGF0IHRoZSBvcGVyYXRpb24gaXNuJiMzOTt0IHN1cHBvcnRlZC4gTXkgdW5kZXJzdGFuZGluZyBpcywgYXQgdGhpcyBwb2ludCBgbG9vcF9jbGVhcl9saW1pdHNgIGdldHMgY2FsbGVkLiBOb3csIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGBsb29wX2NsZWFyX2xpbWl0c2AgYWN0dWFsbHkgKmRvZXMqLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gbGluZXMgMjcwLTI5MCB0byBsb29rIGNsb3NlbHkgYXQgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTG9vcCBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZmFsbGJhY2sgbWVjaGFuaXNtIGhhcyBhbnkgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkgcmFtaWZpY2F0aW9ucy4gSXMgdGhpcyBjYWxsIGNsZWFyaW5nIHNvbWUgc29ydCBvZiBwcmUtY29uZmlndXJlZCBzaXplIGxpbWl0YXRpb24gYW5kIHBvdGVudGlhbGx5IGNyZWF0aW5nIHZ1bG5lcmFiaWxpdGllcywgb3IgaXMgdGhpcyBjbGVhcmluZyBkZXZpY2UgbGltaXRzIHRvIGFsbG93IHRoZSBvcGVyYXRpb24gdG8gYmUgcGVyZm9ybWVkIGluIGFub3RoZXIgd2F5PyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhpcyBjbGVhcmluZyBvZiBsaW1pdHMgd2lsbCBpbXBhY3QgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgc3RhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdC8qXG4gMjcxOlx0XHQgKiBXZSBpbml0aWFsbHkgY29uZmlndXJlIHRoZSBsaW1pdHMgaW4gYSBob3BlIHRoYXQgZmFsbG9jYXRlIGlzXG4gMjcyOlx0XHQgKiBzdXBwb3J0ZWQgYW5kIGNsZWFyIHRoZW0gaGVyZSBpZiB0aGF0IHR1cm5zIG91dCBub3QgdG8gYmUgdHJ1ZS5cbiAyNzM6XHRcdCAqL1xuIDI3NDpcdFx0aWYgKHVubGlrZWx5KHJldCA9PSAtRU9QTk9UU1VQUCkpXG4gMjc1Olx0XHRcdGxvb3BfY2xlYXJfbGltaXRzKGxvLCBtb2RlKTtcbiAyNzY6XHRcbiAyNzc6XHRcdHJldHVybiByZXQ7XG4gMjc4Olx0fVxuIDI3OTpcdFxuIDI4MDpcdHN0YXRpYyBpbnQgbG9fcmVxX2ZsdXNoKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSlcbiAyODE6XHR7XG4gMjgyOlx0XHRpbnQgcmV0ID0gdmZzX2ZzeW5jKGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSwgMCk7XG4gMjgzOlx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlZBTCkpXG4gMjg0Olx0XHRcdHJldCA9IC1FSU87XG4gMjg1Olx0XG4gMjg2Olx0XHRyZXR1cm4gcmV0O1xuIDI4NzpcdH1cbiAyODg6XHRcbiAyODk6XHRzdGF0aWMgdm9pZCBsb19jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4gMjkwOlx0e1xuIDI5MTpcdFx0c3RydWN0IGxvb3BfY21kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcbiAyOTI6XHRcdGJsa19zdGF0dXNfdCByZXQgPSBCTEtfU1RTX09LO1xuIDI5MzpcdFxuIDI5NDpcdFx0aWYgKGNtZC1cdTAwM2VyZXQgXHUwMDNjIDAgfHwgY21kLVx1MDAzZXJldCA9PSBibGtfcnFfYnl0ZXMocnEpIHx8XG4gMjk1Olx0XHQgICAgcmVxX29wKHJxKSAhPSBSRVFfT1BfUkVBRCkge1xuIDI5NjpcdFx0XHRpZiAoY21kLVx1MDAzZXJldCBcdTAwM2MgMClcbiAyOTc6XHRcdFx0XHRyZXQgPSBlcnJub190b19ibGtfc3RhdHVzKGNtZC1cdTAwM2VyZXQpO1xuIDI5ODpcdFx0XHRnb3RvIGVuZF9pbztcbiAyOTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTk6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIExvZ2ljYWwgVm9sdW1lIChMTykgQWxsb2NhdGlvbiBhbmQgRGVhbGxvY2F0aW9uKioKClJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBhIGBsb2AgZGV2aWNlIGZyb20gYWxsb2NhdGlvbiB0byBkZXN0cnVjdGlvbiwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBzdG9yYWdlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBgbG9vcF9hZGRgLCBgbG9vcF9yZW1vdmVgLCBhbmQgYGxvX2ZyZWVfZGlza2AgZnVuY3Rpb25zLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGluIHRoaXMgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSBwYXRoIGZvciBlYWNoIG9mIHRob3NlIGFuZCBkZXRlcm1pbmU6CgoqICAgKipgbG9vcF9hZGRgKio6IEhvdyBpcyB0aGUgYGxvYCBkZXZpY2UgaW5pdGlhbGx5IGNyZWF0ZWQgYW5kIGFzc29jaWF0ZWQgd2l0aCBhIGJhY2tpbmcgZmlsZSBvciBibG9jayBkZXZpY2U/IFdoYXQgbWV0YWRhdGEgaXMgaW5pdGlhbGl6ZWQ/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQuCiogICAqKmBsb29wX3JlbW92ZWAqKjogVGhpcyBzaG91bGQgYmUgdGhlIGNvdW50ZXJwYXJ0IHRvIGBsb29wX2FkZGAuIEkmIzM5O2xsIGhhdmUgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBgbG9gIGRldmljZSBhbmQgdGhlIGJhY2tpbmcgc3RvcmUgaXMgc2V2ZXJlZCwgd2hhdCBjbGVhbnVwIG9jY3VycywgYW5kIGhvdyBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMgYXJlIHJlbGVhc2VkLiBJcyB0aGlzIGdyYWNlZnVsLCBvciBwcm9uZSB0byBsZWF2aW5nIGdhcmJhZ2UgYmVoaW5kPwoqICAgKipgbG9fZnJlZV9kaXNrYCoqOiBUaGlzIHNvdW5kcyBsaWtlIGEgZnVuY3Rpb24gdGhhdCBzcGVjaWZpY2FsbHkgZGVhbHMgd2l0aCBmcmVlaW5nIHRoZSBwaHlzaWNhbCBkaXNrIHNwYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGxvYCBkZXZpY2Ugb3IgdW5tYXBwaW5nIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHVubWFwcGluZyB0aGUgYmFja2luZyBkaXNrLCBjbGVhcmluZyByZXNvdXJjZXMsIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgYGxvb3BfcmVtb3ZlYC4gQXJlIHRoZXkgY2FsbGVkIGluIHNlcXVlbmNlLCBvciBkb2VzIG9uZSBjYWxsIHRoZSBvdGhlcj8KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHJlc291cmNlIGxlYWtzLCBvciBpbmVmZmljaWVudCB1c2Ugb2Ygc3RvcmFnZSBkdXJpbmcgdGhpcyBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB3aWxsIGJlIGNydWNpYWwgZm9yIGNvbmZpcm1pbmcgbXkgdW5kZXJzdGFuZGluZy4gVGhpcyBpbnZlc3RpZ2F0aW9uIHNob3VsZCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgYGxvYCBkZXZpY2VzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbG9vcF9hZGRgLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDc1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwODA6XHRcdFx0Z290byBvdXRfY2xlYW51cF90YWdzO1xuMjA4MTpcdFx0fVxuMjA4MjpcdFx0bG8tXHUwMDNlbG9fcXVldWUgPSBsby1cdTAwM2Vsb19kaXNrLVx1MDAzZXF1ZXVlO1xuMjA4MzpcdFxuMjA4NDpcdFx0LypcbjIwODU6XHRcdCAqIERpc2FibGUgcGFydGl0aW9uIHNjYW5uaW5nIGJ5IGRlZmF1bHQuIFRoZSBpbi1rZXJuZWwgcGFydGl0aW9uXG4yMDg2Olx0XHQgKiBzY2FubmluZyBjYW4gYmUgcmVxdWVzdGVkIGluZGl2aWR1YWxseSBwZXItZGV2aWNlIGR1cmluZyBpdHNcbjIwODc6XHRcdCAqIHNldHVwLiBVc2Vyc3BhY2UgY2FuIGFsd2F5cyBhZGQgYW5kIHJlbW92ZSBwYXJ0aXRpb25zIGZyb20gYWxsXG4yMDg4Olx0XHQgKiBkZXZpY2VzLiBUaGUgbmVlZGVkIHBhcnRpdGlvbiBtaW5vcnMgYXJlIGFsbG9jYXRlZCBmcm9tIHRoZVxuMjA4OTpcdFx0ICogZXh0ZW5kZWQgbWlub3Igc3BhY2UsIHRoZSBtYWluIGxvb3AgZGV2aWNlIG51bWJlcnMgd2lsbCBjb250aW51ZVxuMjA5MDpcdFx0ICogdG8gbWF0Y2ggdGhlIGxvb3AgbWlub3JzLCByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgcGFydGl0aW9uc1xuMjA5MTpcdFx0ICogdXNlZC5cbjIwOTI6XHRcdCAqXG4yMDkzOlx0XHQgKiBJZiBtYXhfcGFydCBpcyBnaXZlbiwgcGFydGl0aW9uIHNjYW5uaW5nIGlzIGdsb2JhbGx5IGVuYWJsZWQgZm9yXG4yMDk0Olx0XHQgKiBhbGwgbG9vcCBkZXZpY2VzLiBUaGUgbWlub3JzIGZvciB0aGUgbWFpbiBsb29wIGRldmljZXMgd2lsbCBiZVxuMjA5NTpcdFx0ICogbXVsdGlwbGVzIG9mIG1heF9wYXJ0LlxuMjA5NjpcdFx0ICpcbjIwOTc6XHRcdCAqIE5vdGU6IEdsb2JhbC1mb3ItYWxsLWRldmljZXMsIHNldC1vbmx5LWF0LWluaXQsIHJlYWQtb25seSBtb2R1bGVcbjIwOTg6XHRcdCAqIHBhcmFtZXRldGVycyBsaWtlICYjMzk7bWF4X2xvb3AmIzM5OyBhbmQgJiMzOTttYXhfcGFydCYjMzk7IG1ha2UgdGhpbmdzIG5lZWRsZXNzbHlcbjIwOTk6XHRcdCAqIGNvbXBsaWNhdGVkLCBhcmUgdG9vIHN0YXRpYywgaW5mbGV4aWJsZSBhbmQgbWF5IHN1cnByaXNlXG4yMTAwOlx0XHQgKiB1c2Vyc3BhY2UgdG9vbHMuIFBhcmFtZXRlcnMgbGlrZSB0aGlzIGluIGdlbmVyYWwgc2hvdWxkIGJlIGF2b2lkZWQuXG4yMTAxOlx0XHQgKi9cbjIxMDI6XHRcdGlmICghcGFydF9zaGlmdClcbjIxMDM6XHRcdFx0c2V0X2JpdChHRF9TVVBQUkVTU19QQVJUX1NDQU4sIFx1MDAyNmRpc2stXHUwMDNlc3RhdGUpO1xuMjEwNDpcdFx0bXV0ZXhfaW5pdChcdTAwMjZsby1cdTAwM2Vsb19tdXRleCk7XG4yMTA1Olx0XHRsby1cdTAwM2Vsb19udW1iZXJcdFx0PSBpO1xuMjEwNjpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4yMTA3Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZsby1cdTAwM2Vsb193b3JrX2xvY2spO1xuMjEwODpcdFx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pO1xuMjEwOTpcdFx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xuMjExMDpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcbjIxMTE6XHRcdGRpc2stXHUwMDNlbWFqb3JcdFx0PSBMT09QX01BSk9SO1xuMjExMjpcdFx0ZGlzay1cdTAwM2VmaXJzdF9taW5vclx0PSBpIFx1MDAzY1x1MDAzYyBwYXJ0X3NoaWZ0O1xuMjExMzpcdFx0ZGlzay1cdTAwM2VtaW5vcnNcdFx0PSAxIFx1MDAzY1x1MDAzYyBwYXJ0X3NoaWZ0O1xuMjExNDpcdFx0ZGlzay1cdTAwM2Vmb3BzXHRcdD0gXHUwMDI2bG9fZm9wcztcbjIxMTU6XHRcdGRpc2stXHUwMDNlcHJpdmF0ZV9kYXRhXHQ9IGxvO1xuMjExNjpcdFx0ZGlzay1cdTAwM2VxdWV1ZVx0XHQ9IGxvLVx1MDAzZWxvX3F1ZXVlO1xuMjExNzpcdFx0ZGlzay1cdTAwM2VldmVudHNcdFx0PSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTtcbjIxMTg6XHRcdGRpc2stXHUwMDNlZXZlbnRfZmxhZ3NcdD0gRElTS19FVkVOVF9GTEFHX1VFVkVOVDtcbjIxMTk6XHRcdHNwcmludGYoZGlzay1cdTAwM2VkaXNrX25hbWUsIFwmIzM0O2xvb3AlZFwmIzM0OywgaSk7XG4yMTIwOlx0XHQvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgcmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4yMTIxOlx0XHRlcnIgPSBhZGRfZGlzayhkaXNrKTtcbjIxMjI6XHRcdGlmIChlcnIpXG4yMTIzOlx0XHRcdGdvdG8gb3V0X2NsZWFudXBfZGlzaztcbjIxMjQ6XHRcbjIxMjU6XHRcdC8qIFNob3cgdGhpcyBsb29wIGRldmljZS4gKi9cbjIxMjY6XHRcdG11dGV4X2xvY2soXHUwMDI2bG9vcF9jdGxfbXV0ZXgpO1xuMjEyNzpcdFx0bG8tXHUwMDNlaWRyX3Zpc2libGUgPSB0cnVlO1xuMjEyODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvb3BfY3RsX211dGV4KTtcbjIxMjk6XHRcbjIxMzA6XHRcdHJldHVybiBpO1xuMjEzMTpcdFxuMjEzMjpcdG91dF9jbGVhbnVwX2Rpc2s6XG4yMTMzOlx0XHRwdXRfZGlzayhkaXNrKTtcbjIxMzQ6XHRvdXRfY2xlYW51cF90YWdzOlxuMjEzNTpcdFx0YmxrX21xX2ZyZWVfdGFnX3NldChcdTAwMjZsby1cdTAwM2V0YWdfc2V0KTtcbjIxMzY6XHRvdXRfZnJlZV9pZHI6XG4yMTM3Olx0XHRtdXRleF9sb2NrKFx1MDAyNmxvb3BfY3RsX211dGV4KTtcbjIxMzg6XHRcdGlkcl9yZW1vdmUoXHUwMDI2bG9vcF9pbmRleF9pZHIsIGkpO1xuMjEzOTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvb3BfY3RsX211dGV4KTtcbjIxNDA6XHRvdXRfZnJlZV9kZXY6XG4yMTQxOlx0XHRrZnJlZShsbyk7XG4yMTQyOlx0b3V0OlxuMjE0MzpcdFx0cmV0dXJuIGVycjtcbjIxNDQ6XHR9XG4yMTQ1Olx0XG4yMTQ2Olx0c3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbjIxNDc6XHR7XG4yMTQ4Olx0XHQvKiBDYW5jZWwgZWFybHk6IHRoZSBxdWV1ZSBtYXkgYmUgaW4gUkNVLWRlbGF5ZWQgZnJlZWluZ1xuMjE0OTpcdFx0ICogYnkgdGhlIHRpbWUgbG9fZnJlZV9kaXNrKCkgcnVucy4gKi9cbjIxNTA6XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuMjE1MTpcdFxuMjE1MjpcdFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4yMTUzOlx0XHRkZWxfZ2VuZGlzayhsby1cdTAwM2Vsb19kaXNrKTtcbjIxNTQ6XHRcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTE4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGluIGBsb29wX2FkZGAqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgaW50ZXJuYWxzIG9mIHRoaXMgYGxvb3BfYWRkYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZhcmlhYmxlIGBsb2AgaXMgYmVpbmcgaGFuZGxlZCBtZW1vcnktd2lzZSB3aXRoaW4gdGhhdCBsb29wLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBpbmVmZmljaWVuY2llcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gaXRzIGFsbG9jYXRpb24uIElzIGl0IGJlaW5nIHJlLWFsbG9jYXRlZCBvbiBlYWNoIGl0ZXJhdGlvbiwgb3IgaXMgaXQgYXBwcm9wcmlhdGVseSBiZWluZyByZXVzZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIG1lbW9yeSBmb290cHJpbnQgaGVyZSBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBhbmQgcG90ZW50aWFsIGRlYnVnZ2luZyBkb3duIHRoZSBsaW5lLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHdpdGggdGhhdCB2YXJpYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTk6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA0MDpcdFx0bG8gPSBremFsbG9jX29iaigqbG8pO1xuMjA0MTpcdFx0aWYgKCFsbylcbjIwNDI6XHRcdFx0Z290byBvdXQ7XG4yMDQzOlx0XHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4yMDQ0Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcbjIwNDU6XHRcdHRpbWVyX3NldHVwKFx1MDAyNmxvLVx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcbjIwNDY6XHRcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xuMjA0NzpcdFxuMjA0ODpcdFx0ZXJyID0gbXV0ZXhfbG9ja19raWxsYWJsZShcdTAwMjZsb29wX2N0bF9tdXRleCk7XG4yMDQ5Olx0XHRpZiAoZXJyKVxuMjA1MDpcdFx0XHRnb3RvIG91dF9mcmVlX2RldjtcbjIwNTE6XHRcbjIwNTI6XHRcdC8qIGFsbG9jYXRlIGlkLCBpZiBAaWQgXHUwMDNlPSAwLCB3ZSYjMzk7cmUgcmVxdWVzdGluZyB0aGF0IHNwZWNpZmljIGlkICovXG4yMDUzOlx0XHRpZiAoaSBcdTAwM2U9IDApIHtcbjIwNTQ6XHRcdFx0ZXJyID0gaWRyX2FsbG9jKFx1MDAyNmxvb3BfaW5kZXhfaWRyLCBsbywgaSwgaSAmIzQzOyAxLCBHRlBfS0VSTkVMKTtcbjIwNTU6XHRcdFx0aWYgKGVyciA9PSAtRU5PU1BDKVxuMjA1NjpcdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4yMDU3Olx0XHR9IGVsc2Uge1xuMjA1ODpcdFx0XHRlcnIgPSBpZHJfYWxsb2MoXHUwMDI2bG9vcF9pbmRleF9pZHIsIGxvLCAwLCAwLCBHRlBfS0VSTkVMKTtcbjIwNTk6XHRcdH1cbjIwNjA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZsb29wX2N0bF9tdXRleCk7XG4yMDYxOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMjA2MjpcdFx0XHRnb3RvIG91dF9mcmVlX2RldjtcbjIwNjM6XHRcdGkgPSBlcnI7XG4yMDY0Olx0XG4yMDY1Olx0XHRsby1cdTAwM2V0YWdfc2V0Lm9wcyA9IFx1MDAyNmxvb3BfbXFfb3BzO1xuMjA2NjpcdFx0bG8tXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xuMjA2NzpcdFx0bG8tXHUwMDNldGFnX3NldC5xdWV1ZV9kZXB0aCA9IGh3X3F1ZXVlX2RlcHRoO1xuMjA2ODpcdFx0bG8tXHUwMDNldGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7XG4yMDY5Olx0XHRsby1cdTAwM2V0YWdfc2V0LmNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBsb29wX2NtZCk7XG4yMDcwOlx0XHRsby1cdTAwM2V0YWdfc2V0LmZsYWdzID0gQkxLX01RX0ZfU1RBQ0tJTkcgfCBCTEtfTVFfRl9OT19TQ0hFRF9CWV9ERUZBVUxUO1xuMjA3MTpcdFx0bG8tXHUwMDNldGFnX3NldC5kcml2ZXJfZGF0YSA9IGxvO1xuMjA3MjpcdFxuMjA3MzpcdFx0ZXJyID0gYmxrX21xX2FsbG9jX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4yMDc0Olx0XHRpZiAoZXJyKVxuMjA3NTpcdFx0XHRnb3RvIG91dF9mcmVlX2lkcjtcbjIwNzY6XHRcbjIwNzc6XHRcdGRpc2sgPSBsby1cdTAwM2Vsb19kaXNrID0gYmxrX21xX2FsbG9jX2Rpc2soXHUwMDI2bG8tXHUwMDNldGFnX3NldCwgXHUwMDI2bGltLCBsbyk7XG4yMDc4Olx0XHRpZiAoSVNfRVJSKGRpc2spKSB7XG4yMDc5Olx0XHRcdGVyciA9IFBUUl9FUlIoZGlzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDQ1CgkJCQkJCQlvdXRwdXQ6IDI0MgoJCQkJCQkJdGhvdWdodHM6IDQ4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBBIEtNU0FOIFBlcnNwZWN0aXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZnJvbSBhIG1lbW9yeSBzYWZldHkgc3RhbmRwb2ludCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHdoZXRoZXIgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyByZXF1aXJlZC4gSSYjMzk7dmUgZ290IHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLgoKRmlyc3QsIHRoZSBrZXkgb3BlcmF0aW9ucyBqdW1wIG91dDogd2UgaGF2ZSBhIGBsb2Agc3RydWN0dXJlIGFsbG9jYXRlZCBhbmQgemVyb2VkLCB3b3JrIGlzIGluaXRpYWxpemVkLCBhdG9taWMgb3BlcmF0aW9ucyBhcmUgdXNlZCB0byBtb2RpZnkgYGNsZWFyX2xpbWl0c19tb2RlYCwgYW5kIHRoZSBgcXVldWVfbGltaXRzYCBzdHJ1Y3R1cmUgaXMgaGFuZGxlZCB2aWEgYHN0YXJ0X3VwZGF0ZWAgYW5kIGBjb21taXRfdXBkYXRlX2Zyb3plbmAuIEkmIzM5O20gc2VlaW5nIGludGVnZXIgZmllbGRzIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkIHdpdGhpbiB0aGUgYHF1ZXVlX2xpbWl0c2Agc3RydWN0IGFmdGVyIGl0JiMzOTtzIGNvcGllZC4gVGhlcmUmIzM5O3MgYWxzbyBzeW5jaHJvbm91cyB3b3JrIGNhbmNlbGxhdGlvbiBvbiB0ZWFyZG93biwgYW5kIGltcG9ydGFudGx5LCBubyBkaXJlY3QgdXNlci1zcGFjZSBkYXRhIGludGVyYWN0aW9uIGhlcmUuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlIHBvdGVudGlhbCB0cm91YmxlIHNwb3RzLiBEZWFkbG9jayByaXNrcyBkdXJpbmcgcXVldWUgZnJlZXppbmcgYXJlIGEgY29uY2VybiwgYXMgaXMgdGhlIHBvc3NpYmlsaXR5IG9mIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3IgcmFjZXMgYmV0d2VlbiB0aGUgd29ya2VyIHRocmVhZCBhbmQgbG9vcCBkZXZpY2UgZGVzdHJ1Y3Rpb24uIFRoZXNlIGFyZSBjbGFzc2ljYWwgcmFjZSBjb25kaXRpb25zLiBXb3JrcXVldWUgY2FuY2VsbGF0aW9uIHJhY2VzIGFsc28gbmVlZCB0byBiZSBjb25zaWRlcmVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzeW5jaHJvbm91cyBjYWxsLgoKSSYjMzk7bSBub3cgZ29pbmcgdG8gZGl2ZSBkZWVwZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgS01TQU4gaXMgbmVjZXNzYXJ5LiBJJiMzOTt2ZSBnb3QgdG8gY2FyZWZ1bGx5IGFzc2VzcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQsIGFmdGVyIHNjcnV0aW5pemluZyB0aGUgY29kZSwgSSBzZWUgbm8gaW5kaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgb3IgdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMuIEV2ZXJ5dGhpbmcgbG9va3MgZWl0aGVyIGF0b21pYyBvciBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBmdW5jdGlvbiBwcm92aWRlcyBhIGZ1bGx5IGluaXRpYWxpemVkIGNvcHkuCgpUaGVyZWZvcmUsIGdpdmVuIG15IGV4cGVydCBhbmFseXNpcyBhbmQgYSByaWdvcm91cyBhc3Nlc3NtZW50IG9mIGFsbCB0aGUgbW9kaWZpZWQgZmllbGRzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzbiYjMzk7dCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhpcyBwYXRjaC4gTXkgYW5hbHlzaXMgYW5kIGV4cGVyaWVuY2UgYXJlIGluZGljYXRpbmcgdGhhdCB0aGUgcmlza3MgaGVyZSBhcmUgcHJpbWFyaWx5IGluIHJhY2UgY29uZGl0aW9ucyBhbmQgbG9ja2luZyBvcmRlciwgd2hpY2ggYXJlIGJlc3QgYWRkcmVzc2VkIHdpdGggS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgYW5kIExPQ0tERVAgKExvY2sgRGVwZW5kZW5jeSBWYWxpZGF0b3IpLiBLTVNBTiBpcyBjb25jZXJuZWQgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIGJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgc2VlbiwgaXQmIzM5O3Mgbm90IG5lZWRlZCBoZXJlLgoKU28sIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOID0gZmFsc2VgIGFuZCBwcm92aWRlIHRoZSBkZXRhaWxlZCBLTVNBTiByZWFzb25pbmcgdG8gcmVmbGVjdCBteSBhbmFseXNpcy4gTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0cmFuc2l0aW9ucyB0aGUgbG9vcCBkcml2ZXImIzM5O3MgcXVldWUgbGltaXRzIGNsZWFyaW5nIGxvZ2ljIGZyb20gc3luY2hyb25vdXMgZXhlY3V0aW9uIGluc2lkZSByZXF1ZXN0IGhhbmRsaW5nIHRvIGFuIGFzeW5jaHJvbm91cyB3b3JrcXVldWUgKGBjbGVhcl9saW1pdHNfd29ya2ApIHVzaW5nIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oKWAuXG5cbkFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdCBmaWVsZHMgKGBjbGVhcl9saW1pdHNfd29ya2AgYW5kIGBjbGVhcl9saW1pdHNfbW9kZWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZDogdGhlIGBsb29wX2RldmljZWAgc3RydWN0IGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCB0aGUgd29yayBpdGVtIGlzIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SSygpYCwgYW5kIHRoZSBhdG9taWMgdmFyaWFibGUgaXMgZXhwbGljaXRseSByZXNldCB3aXRoIGBhdG9taWNfc2V0YCAvIGF0b21pYyBvcGVyYXRpb25zLiBUaGUgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIHVzZWQgaW4gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCAod2hpY2ggcmV0dXJucyB0aGUgY3VycmVudCBxdWV1ZSBsaW1pdHMpLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgcXVldWUgZnJlZXppbmcgbG9ja2luZyBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0cmFuc2l0aW9ucyB0aGUgbG9vcCBkcml2ZXImIzM5O3MgcXVldWUgbGltaXRzIGNsZWFyaW5nIGxvZ2ljIGZyb20gc3luY2hyb25vdXMgZXhlY3V0aW9uIGluc2lkZSByZXF1ZXN0IGhhbmRsaW5nIHRvIGFuIGFzeW5jaHJvbm91cyB3b3JrcXVldWUgKGBjbGVhcl9saW1pdHNfd29ya2ApIHVzaW5nIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oKWAuXG5cbkFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdCBmaWVsZHMgKGBjbGVhcl9saW1pdHNfd29ya2AgYW5kIGBjbGVhcl9saW1pdHNfbW9kZWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZDogdGhlIGBsb29wX2RldmljZWAgc3RydWN0IGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCB0aGUgd29yayBpdGVtIGlzIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SSygpYCwgYW5kIHRoZSBhdG9taWMgdmFyaWFibGUgaXMgZXhwbGljaXRseSByZXNldCB3aXRoIGBhdG9taWNfc2V0YCAvIGF0b21pYyBvcGVyYXRpb25zLiBUaGUgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIHVzZWQgaW4gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCAod2hpY2ggcmV0dXJucyB0aGUgY3VycmVudCBxdWV1ZSBsaW1pdHMpLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgcXVldWUgZnJlZXppbmcgbG9ja2luZyBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE5OjM2OjUyLjI2OTA0NDYxOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NzU1OTk2MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzX3dvcmtmblwiLFxuICAgIFwibG9vcF9jbGVhcl9saW1pdHNcIixcbiAgICBcImxvX2ZhbGxvY2F0ZVwiLFxuICAgIFwibG9vcF9jb25maWd1cmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRyYW5zaXRpb25zIHRoZSBsb29wIGRyaXZlcidzIHF1ZXVlIGxpbWl0cyBjbGVhcmluZyBsb2dpYyBmcm9tIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiBpbnNpZGUgcmVxdWVzdCBoYW5kbGluZyB0byBhbiBhc3luY2hyb25vdXMgd29ya3F1ZXVlIChgY2xlYXJfbGltaXRzX3dvcmtgKSB1c2luZyBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKClgLlxcblxcbkFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdCBmaWVsZHMgKGBjbGVhcl9saW1pdHNfd29ya2AgYW5kIGBjbGVhcl9saW1pdHNfbW9kZWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZDogdGhlIGBsb29wX2RldmljZWAgc3RydWN0IGlzIHplcm8tYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCB0aGUgd29yayBpdGVtIGlzIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SSygpYCwgYW5kIHRoZSBhdG9taWMgdmFyaWFibGUgaXMgZXhwbGljaXRseSByZXNldCB3aXRoIGBhdG9taWNfc2V0YCAvIGF0b21pYyBvcGVyYXRpb25zLiBUaGUgYHN0cnVjdCBxdWV1ZV9saW1pdHNgIHVzZWQgaW4gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCAod2hpY2ggcmV0dXJucyB0aGUgY3VycmVudCBxdWV1ZSBsaW1pdHMpLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBBbnkgY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBvciBxdWV1ZSBmcmVlemluZyBsb2NraW5nIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBhc3luY2hyb25vdXMgd29yayBzY2hlZHVsaW5nIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBoYW5kbGUgY2xlYXJpbmcgcXVldWUgbGltaXRzIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoY2xlYXJfbGltaXRzX3dvcmspIGluc3RlYWQgb2YgZGlyZWN0bHkgaW5zaWRlIHF1ZXVlX3JxIGNvbnRleHQuIFRoaXMgcHJvcGVybHkgdXNlcyBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4gdG8gZm9sbG93IHRoZSBxdWV1ZSBsaW1pdHMgbG9ja2luZyBwcm90b2NvbCB3aGVuIGZhbGxvY2F0ZSBvcGVyYXRpb25zIGZhaWwgb24gbG9vcCBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNjo1Mi4yNjkwNTE2NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MTczNTIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM4Mzc4ZDhkYmY4OWI4MWE0ODIwNmY3OTY5YzE4ZGRmY2ZiMGU2MTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAxOTozNjo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuaW5kZXggNmYxMjk3NjAzNWIwOS4uMzY4ZWE4NTc4OTVjZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuQEAgLTY3LDYgKzY3LDggQEAgc3RydWN0IGxvb3BfZGV2aWNlIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgcm9vdGNnX2NtZF9saXN0O1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBpZGxlX3dvcmtlcl9saXN0O1xcbiBcXHRzdHJ1Y3QgcmJfcm9vdCAgICAgICAgICB3b3JrZXJfdHJlZTtcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0ICAgICAgY2xlYXJfbGltaXRzX3dvcms7XFxuK1xcdGF0b21pY190XFx0XFx0Y2xlYXJfbGltaXRzX21vZGU7XFxuIFxcdHN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHRpbWVyO1xcbiBcXHRib29sXFx0XFx0XFx0c3lzZnNfaW5pdGVkO1xcbiBcXG5AQCAtMjIyLDkgKzIyNCwxMiBAQCBzdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxcbiBcXHRcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2ZGlza190b19kZXYobG8tXFx1MDAzZWxvX2Rpc2spLVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxcbitzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuK1xcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPVxcbitcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBjbGVhcl9saW1pdHNfd29yayk7XFxuIFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbitcXHRpbnQgbW9kZSA9IGF0b21pY194Y2hnKFxcdTAwMjZsby1cXHUwMDNlY2xlYXJfbGltaXRzX21vZGUsIDApO1xcbiBcXG4gXFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcXG4gXFx0XFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7XFxuQEAgLTIzNCwxNCArMjM5LDEzIEBAIHN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxcbiBcXHRcXHRsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7XFxuIFxcdH1cXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFhYWDogdGhpcyB1cGRhdGVzIHRoZSBxdWV1ZSBsaW1pdHMgd2l0aG91dCBmcmVlemluZyB0aGUgcXVldWUsIHdoaWNoXFxuLVxcdCAqIGlzIGFnYWluc3QgdGhlIGxvY2tpbmcgcHJvdG9jb2wgYW5kIGRhbmdlcm91cy4gIEJ1dCB3ZSBjYW4ndCBqdXN0XFxuLVxcdCAqIGZyZWV6ZSB0aGUgcXVldWUgYXMgd2UncmUgaW5zaWRlIHRoZSAtXFx1MDAzZXF1ZXVlX3JxIG1ldGhvZCBoZXJlLiAgU28gdGhpc1xcbi1cXHQgKiBzaG91bGQgbW92ZSBvdXQgaW50byBhIHdvcmtxdWV1ZSB1bmxlc3Mgd2UgZ2V0IHRoZSBmaWxlIG9wZXJhdGlvbnMgdG9cXG4tXFx0ICogYWR2ZXJ0aXNlIGlmIHRoZXkgc3VwcG9ydCBzcGVjaWZpYyBmYWxsb2NhdGUgb3BlcmF0aW9ucy5cXG4tXFx0ICovXFxuLVxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgXFx1MDAyNmxpbSk7XFxuK1xcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihsby1cXHUwMDNlbG9fcXVldWUsIFxcdTAwMjZsaW0pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcXG4re1xcbitcXHRhdG9taWNfb3IobW9kZSwgXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfbW9kZSk7XFxuK1xcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfd29yayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcyxcXG5AQCAtNTE2LDYgKzUyMCw3IEBAIHN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbiBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuIHtcXG4gXFx0bG8tXFx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IGZpbGU7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XFxuIFxcdGxvLVxcdTAwM2VvbGRfZ2ZwX21hc2sgPSBtYXBwaW5nX2dmcF9tYXNrKGZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuIFxcdG1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbGUtXFx1MDAzZWZfbWFwcGluZyxcXG4gXFx0XFx0XFx0bG8tXFx1MDAzZW9sZF9nZnBfbWFzayBcXHUwMDI2IH4oX19HRlBfSU8gfCBfX0dGUF9GUykpO1xcbkBAIC0xNzgxLDYgKzE3ODYsNyBAQCBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuIFxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGxvLVxcdTAwM2V3b3JrcXVldWUpO1xcbiBcXHRsb29wX2ZyZWVfaWRsZV93b3JrZXJzKGxvLCB0cnVlKTtcXG4gXFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2bG8tXFx1MDAzZXRpbWVyKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4gXFx0a2ZyZWUobG8pO1xcbiB9XFxuQEAgLTIxMDAsNiArMjEwNiw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZsby1cXHUwMDNlbG9fbG9jayk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZsby1cXHUwMDNlbG9fd29ya19sb2NrKTtcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZsby1cXHUwMDNlcm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7XFxuK1xcdElOSVRfV09SSyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bG8tXFx1MDAzZXJvb3RjZ19jbWRfbGlzdCk7XFxuIFxcdGRpc2stXFx1MDAzZW1ham9yXFx0XFx0PSBMT09QX01BSk9SO1xcbiBcXHRkaXNrLVxcdTAwM2VmaXJzdF9taW5vclxcdD0gaSBcXHUwMDNjXFx1MDAzYyBwYXJ0X3NoaWZ0O1xcbkBAIC0yMTM4LDYgKzIxNDUsMTAgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcXG4gXFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIHtcXG4rXFx0LyogQ2FuY2VsIGVhcmx5OiB0aGUgcXVldWUgbWF5IGJlIGluIFJDVS1kZWxheWVkIGZyZWVpbmdcXG4rXFx0ICogYnkgdGhlIHRpbWUgbG9fZnJlZV9kaXNrKCkgcnVucy4gKi9cXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcXG4rXFxuIFxcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xcbiBcXHRkZWxfZ2VuZGlzayhsby1cXHUwMDNlbG9fZGlzayk7XFxuIFxcdGJsa19tcV9mcmVlX3RhZ19zZXQoXFx1MDAyNmxvLVxcdTAwM2V0YWdfc2V0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6MzY6NTIuOTQxNDQ4OTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0NzI1MzI1OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzX3dvcmtmblwiLFxuICAgIFwibG9vcF9jbGVhcl9saW1pdHNcIixcbiAgICBcImxvX2ZhbGxvY2F0ZVwiLFxuICAgIFwibG9vcF9jb25maWd1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBoYW5kbGUgY2xlYXJpbmcgcXVldWUgbGltaXRzIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoY2xlYXJfbGltaXRzX3dvcmspIGluc3RlYWQgb2YgZGlyZWN0bHkgaW5zaWRlIHF1ZXVlX3JxIGNvbnRleHQuIFRoaXMgcHJvcGVybHkgdXNlcyBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4gdG8gZm9sbG93IHRoZSBxdWV1ZSBsaW1pdHMgbG9ja2luZyBwcm90b2NvbCB3aGVuIGZhbGxvY2F0ZSBvcGVyYXRpb25zIGZhaWwgb24gbG9vcCBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzODM3OGQ4ZGJmODliODFhNDgyMDZmNzk2OWMxOGRkZmNmYjBlNjExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxOTozNjo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDZmMTI5NzYwMzViMDkuLjM2OGVhODU3ODk1Y2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC02Nyw2ICs2Nyw4IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICByb290Y2dfY21kX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBpZGxlX3dvcmtlcl9saXN0O1xuIFx0c3RydWN0IHJiX3Jvb3QgICAgICAgICAgd29ya2VyX3RyZWU7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICBjbGVhcl9saW1pdHNfd29yaztcbitcdGF0b21pY190XHRcdGNsZWFyX2xpbWl0c19tb2RlO1xuIFx0c3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7XG4gXHRib29sXHRcdFx0c3lzZnNfaW5pdGVkO1xuIFxuQEAgLTIyMiw5ICsyMjQsMTIgQEAgc3RhdGljIHZvaWQgbG9vcF9zZXRfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBsb2ZmX3Qgc2l6ZSlcbiBcdFx0a29iamVjdF91ZXZlbnQoXHUwMDI2ZGlza190b19kZXYobG8tXHUwMDNlbG9fZGlzayktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbitzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbitcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPVxuK1x0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBjbGVhcl9saW1pdHNfd29yayk7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuK1x0aW50IG1vZGUgPSBhdG9taWNfeGNoZyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gXG4gXHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpXG4gXHRcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuQEAgLTIzNCwxNCArMjM5LDEzIEBAIHN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuIFx0XHRsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogWFhYOiB0aGlzIHVwZGF0ZXMgdGhlIHF1ZXVlIGxpbWl0cyB3aXRob3V0IGZyZWV6aW5nIHRoZSBxdWV1ZSwgd2hpY2hcbi1cdCAqIGlzIGFnYWluc3QgdGhlIGxvY2tpbmcgcHJvdG9jb2wgYW5kIGRhbmdlcm91cy4gIEJ1dCB3ZSBjYW4ndCBqdXN0XG4tXHQgKiBmcmVlemUgdGhlIHF1ZXVlIGFzIHdlJ3JlIGluc2lkZSB0aGUgLVx1MDAzZXF1ZXVlX3JxIG1ldGhvZCBoZXJlLiAgU28gdGhpc1xuLVx0ICogc2hvdWxkIG1vdmUgb3V0IGludG8gYSB3b3JrcXVldWUgdW5sZXNzIHdlIGdldCB0aGUgZmlsZSBvcGVyYXRpb25zIHRvXG4tXHQgKiBhZHZlcnRpc2UgaWYgdGhleSBzdXBwb3J0IHNwZWNpZmljIGZhbGxvY2F0ZSBvcGVyYXRpb25zLlxuLVx0ICovXG4tXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbitcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXG4re1xuK1x0YXRvbWljX29yKG1vZGUsIFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlKTtcbitcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuIH1cbiBcbiBzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXG5AQCAtNTE2LDYgKzUyMCw3IEBAIHN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4gXHRsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUgPSBmaWxlO1xuK1x0YXRvbWljX3NldChcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gXHRsby1cdTAwM2VvbGRfZ2ZwX21hc2sgPSBtYXBwaW5nX2dmcF9tYXNrKGZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbiBcdG1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbGUtXHUwMDNlZl9tYXBwaW5nLFxuIFx0XHRcdGxvLVx1MDAzZW9sZF9nZnBfbWFzayBcdTAwMjYgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7XG5AQCAtMTc4MSw2ICsxNzg2LDcgQEAgc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShsby1cdTAwM2V3b3JrcXVldWUpO1xuIFx0bG9vcF9mcmVlX2lkbGVfd29ya2VycyhsbywgdHJ1ZSk7XG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmxvLVx1MDAzZXRpbWVyKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZsby1cdTAwM2Vsb19tdXRleCk7XG4gXHRrZnJlZShsbyk7XG4gfVxuQEAgLTIxMDAsNiArMjEwNiw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsby1cdTAwM2Vsb19sb2NrKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxvLVx1MDAzZWxvX3dvcmtfbG9jayk7XG4gXHRJTklUX1dPUksoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7XG4rXHRJTklUX1dPUksoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmssIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbik7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2Vyb290Y2dfY21kX2xpc3QpO1xuIFx0ZGlzay1cdTAwM2VtYWpvclx0XHQ9IExPT1BfTUFKT1I7XG4gXHRkaXNrLVx1MDAzZWZpcnN0X21pbm9yXHQ9IGkgXHUwMDNjXHUwMDNjIHBhcnRfc2hpZnQ7XG5AQCAtMjEzOCw2ICsyMTQ1LDEwIEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXG4gc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiB7XG4rXHQvKiBDYW5jZWwgZWFybHk6IHRoZSBxdWV1ZSBtYXkgYmUgaW4gUkNVLWRlbGF5ZWQgZnJlZWluZ1xuK1x0ICogYnkgdGhlIHRpbWUgbG9fZnJlZV9kaXNrKCkgcnVucy4gKi9cbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuK1xuIFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4gXHRkZWxfZ2VuZGlzayhsby1cdTAwM2Vsb19kaXNrKTtcbiBcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNjo1Mi45NDE0NTAzNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMzcxNDAxNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9vcCBEZXZpY2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgdG8gdGhlIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AgZmlsZS4gVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYWRkaW5nIGBjbGVhcl9saW1pdHNfd29ya2AgYW5kIGBjbGVhcl9saW1pdHNfbW9kZWAgdG8gdGhlIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgLiBJbnR1aXRpdmVseSwgSSdtIGFscmVhZHkgZ3Vlc3NpbmcgdGhpcyBpcyByZWxhdGVkIHRvIGhvdyB0aGUgbG9vcCBkZXZpY2UgaGFuZGxlcyBhbmQgbWFuYWdlcyBpdHMgcXVldWUgbGltaXRzLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdWJzeXN0ZW0uXG5cbkl0IGxvb2tzIGxpa2UgdGhlIGBsb29wX2NsZWFyX2xpbWl0c2AgZnVuY3Rpb24gaGFzIGJlZW4gcmV3b3JrZWQuIEluc3RlYWQgb2YgZGlyZWN0bHkgY2xlYXJpbmcgdGhlIGxpbWl0cywgaXQgbm93IHNjaGVkdWxlcyB0aGUgYGxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrYCB1c2luZyBhIHdvcmtxdWV1ZSBhbmQgYXRvbWljIG9wZXJhdGlvbiB0byBmZXRjaCB0aGUgYGNsZWFyX2xpbWl0c19tb2RlYCBiZWZvcmUgY2FsbGluZyBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuYC4gQ2FuY2VsbGF0aW9uIG9mIHRoaXMgd29yayBvY2N1cnMgaW4gYGxvb3BfcmVtb3ZlYCBhbmQgYGxvX2ZyZWVfZGlza2AsIHdoaWNoIGFyZSBleHBlY3RlZCBsb2NhdGlvbnMsIHdoaWxlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgaW4gYGxvb3BfYWRkYCwgYW5kIGEgcmVzZXQgb2YgYGNsZWFyX2xpbWl0c19tb2RlYCBpbiBgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciBteSB3b3JrIGlzOiBpcyB0aGlzIGFyZWEgb2YgdGhlIGNvZGUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nPyBCYXNlZCBvbiBteSBleHBlcmllbmNlIHdpdGgga2VybmVsIGludGVybmFscywgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9ibG9jay9sb29wLmNgIGFuZCBpdHMgdXNlIGluIHN0YW5kYXJkIGJsb2NrIGRldmljZXMgKGFuZCBrbm93aW5nIHRoZSBwcmV2YWxlbmNlIG9mIGBDT05GSUdfQkxLX0RFVl9MT09QYCksIGluY2x1ZGluZyBpdHMgaGVhdnkgdXNlIGluIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFRoaXMgaXMgYSBjb3JlIHBhcnQgb2YgdGhlIHN5c3RlbSBhbmQgd2lsbCBiZSB0b3VjaGVkIGJ5IHZhcmlvdXMgdGVzdCBzdWl0ZXMuIFRoZSBwYXRjaCdzIGltcGFjdCBvbiBob3cgcXVldWUgbGltaXRzIGFyZSBtYW5hZ2VkIGFmdGVyIG9wZXJhdGlvbnMgbGlrZSBmYWxsb2NhdGUgZmFpbHVyZXMgY29uZmlybXMgaXQncyBhIHBvdGVudGlhbCBhcmVhIGZvciBmdXp6aW5nLlxuXG5NeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL2Jsb2NrL2AgYW5kIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gZ2V0IGEgYmV0dGVyIGNvbnRleHQgZm9yIHRoaXMgY2hhbmdlLiBJJ2xsIHVzZSB0b29scyBsaWtlIGdyZXBwZXIgYW5kIGZpbGUtcmVhZGluZyBjb21tYW5kcyB0byBxdWlja2x5IHVuZGVyc3RhbmQgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGJsb2NrIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE5OjM3OjA2LjMxMjg1NTc1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY3OTA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCTEtfREVWX0xPT1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTQwPWNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDMtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE0NDpjb25maWcgQkxLX0RFVl9MT09QXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0NS1cXHR0cmlzdGF0ZSBcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTc4LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNzk6Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTgwLVxcdGludCBcXFwiTnVtYmVyIG9mIGxvb3AgZGV2aWNlcyB0byBwcmUtY3JlYXRlIGF0IGluaXQgdGltZVxcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTgxOlxcdGRlcGVuZHMgb24gQkxLX0RFVl9MT09QXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4Mi1cXHRkZWZhdWx0IDhcXG4tLVxcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU9MjE9b2JqLSQoQ09ORklHX0JMS19ERVZfUkFNKVxcdCs9IGJyZC5vXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZToyMjpvYmotJChDT05GSUdfQkxLX0RFVl9MT09QKVxcdCs9IGxvb3Aub1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMjMtb2JqLSQoQ09ORklHX1NVTlZEQylcXHRcXHQrPSBzdW52ZGMub1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTc5ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODEzLSAqIGNoYW5nZWQgdGhlIGRlZmF1bHQgdmFsdWUgZnJvbSAwIGZvciBtYXhfbG9vcD0wIHJlYXNvbnMpLCBqdXN0XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgxNDogKiBjcmVhdGUgQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQgbG9vcCBkZXZpY2VzIGF0IG1vZHVsZVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MTUtICogaW5pdCB0aW1lLiBMb29wIGRldmljZXMgY2FuIGJlIHJlcXVlc3RlZCBvbi1kZW1hbmQgd2l0aCB0aGVcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MTgtICovXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgxOTpzdGF0aWMgaW50IG1heF9sb29wID0gQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQ7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgyMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MDYuMzczNTQxNzQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2ODkzMTkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEJsb2NrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb29wIGRldmljZSBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUgYmxvY2sgZHJpdmVyIHN1YnN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGJsb2NrIGRldmljZXMgaW4gZ2VuZXJhbCwgYW5kIEnigJltIHByZXR0eSBzdXJlIHRoZSBsb29wIGRldmljZSB3aWxsIGJlIGRlZmluZWQgb3IgYXQgbGVhc3QgcmVmZXJlbmNlZCBhcm91bmQgdGhlIGBDT05GSUdfQkxLX0RFVl9MT09QYCBzeW1ib2wuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IG90aGVyIHJlbGF0ZWQgb3B0aW9ucyBhcmUgcHJlc2VudC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgbG9vcCBkZXZpY2U7IHRoaXMgYEtjb25maWdgIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhhdCBpbmZvcm1hdGlvbi4gTm93LCBsZXQncyBnbyBwb2tlIGFyb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE5OjM3OjA4Ljg0MjQ3NTk2NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0Y29uZmlnIEJMS19ERVZfQ09XX0NPTU1PTlxcbiAxNDE6XFx0XFx0Ym9vbFxcbiAxNDI6XFx0XFx0ZGVmYXVsdCBCTEtfREVWX1VCRFxcbiAxNDM6XFx0XFxuIDE0NDpcXHRjb25maWcgQkxLX0RFVl9MT09QXFxuIDE0NTpcXHRcXHR0cmlzdGF0ZSBcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuIDE0NjpcXHRcXHRoZWxwXFxuIDE0NzpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGEgcmVndWxhciBmaWxlIGFzIGEgYmxvY2tcXG4gMTQ4OlxcdFxcdCAgZGV2aWNlOyB5b3UgY2FuIHRoZW4gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gb24gdGhhdCBibG9jayBkZXZpY2UgYW5kXFxuIDE0OTpcXHRcXHQgIG1vdW50IGl0IGp1c3QgYXMgeW91IHdvdWxkIG1vdW50IG90aGVyIGJsb2NrIGRldmljZXMgc3VjaCBhcyBoYXJkXFxuIDE1MDpcXHRcXHQgIGRyaXZlIHBhcnRpdGlvbnMsIENELVJPTSBkcml2ZXMgb3IgZmxvcHB5IGRyaXZlcy4gVGhlIGxvb3AgZGV2aWNlc1xcbiAxNTE6XFx0XFx0ICBhcmUgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZXMgd2l0aCBtYWpvciBudW1iZXIgNyBhbmQgdHlwaWNhbGx5XFxuIDE1MjpcXHRcXHQgIGNhbGxlZCAvZGV2L2xvb3AwLCAvZGV2L2xvb3AxIGV0Yy5cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0ICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGVjayBhbiBJU08gOTY2MCBmaWxlIHN5c3RlbSBiZWZvcmVcXG4gMTU1OlxcdFxcdCAgYnVybmluZyB0aGUgQ0QsIG9yIGlmIHlvdSB3YW50IHRvIHVzZSBmbG9wcHkgaW1hZ2VzIHdpdGhvdXQgZmlyc3RcXG4gMTU2OlxcdFxcdCAgd3JpdGluZyB0aGVtIHRvIGZsb3BweS4gRnVydGhlcm1vcmUsIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyBhdm9pZFxcbiAxNTc6XFx0XFx0ICB0aGUgbmVlZCBmb3IgYSBkZWRpY2F0ZWQgTGludXggcGFydGl0aW9uIGJ5IGtlZXBpbmcgdGhlaXIgY29tcGxldGVcXG4gMTU4OlxcdFxcdCAgcm9vdCBmaWxlIHN5c3RlbSBpbnNpZGUgYSBET1MgRkFUIGZpbGUgdXNpbmcgdGhpcyBsb29wIGRldmljZVxcbiAxNTk6XFx0XFx0ICBkcml2ZXIuXFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdCAgVG8gdXNlIHRoZSBsb29wIGRldmljZSwgeW91IG5lZWQgdGhlIGxvc2V0dXAgdXRpbGl0eSwgZm91bmQgaW4gdGhlXFxuIDE2MjpcXHRcXHQgIHV0aWwtbGludXggcGFja2FnZSwgc2VlXFxuIDE2MzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4L1xcdTAwM2UuXFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdCAgVGhlIGxvb3AgZGV2aWNlIGRyaXZlciBjYW4gYWxzbyBiZSB1c2VkIHRvIFxcXCJoaWRlXFxcIiBhIGZpbGUgc3lzdGVtIGluXFxuIDE2NjpcXHRcXHQgIGEgZGlzayBwYXJ0aXRpb24sIGZsb3BweSwgb3IgcmVndWxhciBmaWxlLCBlaXRoZXIgdXNpbmcgZW5jcnlwdGlvblxcbiAxNjc6XFx0XFx0ICAoc2NyYW1ibGluZyB0aGUgZGF0YSkgb3Igc3RlZ2Fub2dyYXBoeSAoaGlkaW5nIHRoZSBkYXRhIGluIHRoZSBsb3dcXG4gMTY4OlxcdFxcdCAgYml0cyBvZiwgc2F5LCBhIHNvdW5kIGZpbGUpLiBUaGlzIGlzIGFsc28gc2FmZSBpZiB0aGUgZmlsZSByZXNpZGVzXFxuIDE2OTpcXHRcXHQgIG9uIGEgcmVtb3RlIGZpbGUgc2VydmVyLlxcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHQgIE5vdGUgdGhhdCB0aGlzIGxvb3AgZGV2aWNlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGxvb3BiYWNrXFxuIDE3MjpcXHRcXHQgIGRldmljZSB1c2VkIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zIGZyb20gdGhlIG1hY2hpbmUgdG8gaXRzZWxmLlxcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxNzU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbG9vcC5cXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0ICBNb3N0IHVzZXJzIHdpbGwgYW5zd2VyIE4gaGVyZS5cXG4gMTc4OlxcdFxcbiAxNzk6XFx0Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MDguODQyNTQ3ODA0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzMzc3MzQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBsb29wLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBlc3BlY2lhbGx5IHRoZSBmdW5jdGlvbnMgYXQgcGxheSBhbmQgd2hlcmUgdGhleSdyZSBiZWluZyBjYWxsZWQgZnJvbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbG9vcC5jYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkgd2FudCB0byBzZWUgdGhlIGtleSBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gaXQsIGFuZCB0aGVuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dCBvZiBob3cgdGhleSBhcmUgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvIGlzIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGludm9raW5nIHRoaXMgbG9vcCBsb2dpYy4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0cyB3aWxsIGdpdmUgbWUgaW1wb3J0YW50IGNsdWVzIGFib3V0IHRoZSBkYXRhIGJlaW5nIHByb2Nlc3NlZCBhbmQgdGhlIG92ZXJhbGwgb2JqZWN0aXZlIG9mIHRoaXMgY29kZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI2NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MTAuNjc2MzIzODc2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODIzNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3BfY2xlYXJfbGltaXRzfGxvX2ZhbGxvY2F0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMjE9c3RhdGljIHZvaWQgbG9vcF9zZXRfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBsb2ZmX3Qgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjc6c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQ0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI0NTpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNDYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjUwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI1MTpzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjUyLVxcdFxcdFxcdGludCBtb2RlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjc0LVxcdGlmICh1bmxpa2VseShyZXQgPT0gLUVPUE5PVFNVUFApKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI3NTpcXHRcXHRsb29wX2NsZWFyX2xpbWl0cyhsbywgbW9kZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjc2LVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9NDE0PXN0YXRpYyBpbnQgZG9fcmVxX2ZpbGViYWNrZWQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDI2LVxcdFxcdCAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQyNzpcXHRcXHRyZXR1cm4gbG9fZmFsbG9jYXRlKGxvLCBycSwgcG9zLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQyOC1cXHRcXHRcXHQocnEtXFx1MDAzZWNtZF9mbGFncyBcXHUwMDI2IFJFUV9OT1VOTUFQKSA/XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MzEtXFx0Y2FzZSBSRVFfT1BfRElTQ0FSRDpcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0MzI6XFx0XFx0cmV0dXJuIGxvX2ZhbGxvY2F0ZShsbywgcnEsIHBvcywgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQzMy1cXHRjYXNlIFJFUV9PUF9XUklURTpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIwMjc9c3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxMDgtXFx0SU5JVF9XT1JLKFxcdTAwMjZsby1cXHUwMDNlcm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjEwOTpcXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTEwLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZsby1cXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MTAuNzI1MTU2NTg0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NTU5ODUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvb3AgQmxvY2sgRHJpdmVyKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuIEkgbmVlZCB0byBwaW5wb2ludCBzb21lIHJvYnVzdCBgRm9jdXNTeW1ib2xzYCB3aXRoaW4gdGhpcyBmaWxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb25zIGFyb3VuZCBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCwgYGxvb3BfY2xlYXJfbGltaXRzYCwgYGxvX2ZhbGxvY2F0ZWAsIGBsb29wX2NvbmZpZ3VyZWAsIGFuZCBgbG9vcF9zZXRfc3RhdHVzYCBhcyB3ZWxsIGFzIGBsb29wX2NvbnRyb2xfaW9jdGxgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYW5hbHlzaXMuIE5leHQsIEknbGwgc3lzdGVtYXRpY2FsbHkgc2VhcmNoIGZvciBhbnkgbm9uLXN0YXRpYyBvciBlbnRyeS1wb2ludCBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgYW55IHdvcmsgcXVldWUgZnVuY3Rpb25zIHdpdGhpbiBgbG9vcC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZmlsZSdzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwOTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MTIuOTgwNzU4NTI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ3NDIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuYz04Mj1zdHJ1Y3QgbG9vcF9jbWQge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTUtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6OTY6c3RhdGljIERFRklORV9JRFIobG9vcF9pbmRleF9pZHIpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk3OnN0YXRpYyBERUZJTkVfTVVURVgobG9vcF9jdGxfbXV0ZXgpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk4OnN0YXRpYyBERUZJTkVfTVVURVgobG9vcF92YWxpZGF0ZV9tdXRleCk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTEtICovXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTEyOnN0YXRpYyBpbnQgbG9vcF9nbG9iYWxfbG9ja19raWxsYWJsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBib29sIGdsb2JhbClcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTMyLSAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEzMzpzdGF0aWMgdm9pZCBsb29wX2dsb2JhbF91bmxvY2soc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYm9vbCBnbG9iYWwpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTM0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0MT1zdGF0aWMgaW50IHBhcnRfc2hpZnQ7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQyLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0MzpzdGF0aWMgbG9mZl90IGxvX2NhbGN1bGF0ZV9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODMtICovXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg0OnN0YXRpYyBib29sIGxvX2Nhbl91c2VfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwMi0gKi9cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDM6c3RhdGljIGlubGluZSB2b2lkIGxvb3BfdXBkYXRlX2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjAtICovXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjIxOnN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjIyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjc6c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQ0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI0NTpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNDYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjUwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI1MTpzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjUyLVxcdFxcdFxcdGludCBtb2RlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjc5LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI4MDpzdGF0aWMgaW50IGxvX3JlcV9mbHVzaChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjgxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI4OC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyODk6c3RhdGljIHZvaWQgbG9fY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI5MC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMjItXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MzIzOnN0YXRpYyB2b2lkIGxvX3J3X2Fpb19kb19jb21wbGV0aW9uKHN0cnVjdCBsb29wX2NtZCAqY21kKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTMyNC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zMzYtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MzM3OnN0YXRpYyB2b2lkIGxvX3J3X2Fpb19jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTMzOC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0zNDQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MzQ1OnN0YXRpYyBpbnQgbG9fcndfYWlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2NtZCAqY21kLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTM0Ni1cXHRcXHQgICAgIGxvZmZfdCBwb3MsIGludCBydylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQxMy1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0MTQ6c3RhdGljIGludCBkb19yZXFfZmlsZWJhY2tlZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDE1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ0Mi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0NDM6c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ0NC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NDU1OnN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDg3LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ4ODpzdGF0aWMgaW5saW5lIGludCBpc19sb29wX2RldmljZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00ODkte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDk0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ5NTpzdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00OTYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTE5LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUyMDpzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTIxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUzMS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MzI6c3RhdGljIGludCBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MzMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTUwLSAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjU1MTpzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTUyLVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY0Ny1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo2NDg6c3RhdGljIHNzaXplX3QgbG9vcF9hdHRyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY0OS1cXHRcXHRcXHQgICAgICBzc2l6ZV90ICgqY2FsbGJhY2spKHN0cnVjdCBsb29wX2RldmljZSAqLCBjaGFyICopKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNjU3LSNkZWZpbmUgTE9PUF9BVFRSX1JPKF9uYW1lKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo2NTg6c3RhdGljIHNzaXplX3QgbG9vcF9hdHRyXyMjX25hbWUjI19zaG93KHN0cnVjdCBsb29wX2RldmljZSAqLCBjaGFyICopO1xcdFxcXFxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo2NTk6c3RhdGljIHNzaXplX3QgbG9vcF9hdHRyX2RvX3Nob3dfIyNfbmFtZShzdHJ1Y3QgZGV2aWNlICpkLFxcdFxcdFxcXFxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02NjAtXFx0XFx0XFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmIpXFx0XFxcXFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9NjY0PXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBsb29wX2F0dHJfIyNfbmFtZSA9XFx0XFx0XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNjY2LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjY2NzpzdGF0aWMgc3NpemVfdCBsb29wX2F0dHJfYmFja2luZ19maWxlX3Nob3coc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY2hhciAqYnVmKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY2OC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02ODgtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6Njg5OnN0YXRpYyBzc2l6ZV90IGxvb3BfYXR0cl9vZmZzZXRfc2hvdyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBjaGFyICpidWYpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNjkwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTY5My1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo2OTQ6c3RhdGljIHNzaXplX3QgbG9vcF9hdHRyX3NpemVsaW1pdF9zaG93KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02OTUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNjk4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjY5OTpzdGF0aWMgc3NpemVfdCBsb29wX2F0dHJfYXV0b2NsZWFyX3Nob3coc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY2hhciAqYnVmKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTcwMC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03MDUtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NzA2OnN0YXRpYyBzc2l6ZV90IGxvb3BfYXR0cl9wYXJ0c2Nhbl9zaG93KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03MDcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNzEyLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjcxMzpzdGF0aWMgc3NpemVfdCBsb29wX2F0dHJfZGlvX3Nob3coc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY2hhciAqYnVmKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTcxNC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03MTktXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NzIwOkxPT1BfQVRUUl9STyhiYWNraW5nX2ZpbGUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjcyMTpMT09QX0FUVFJfUk8ob2Zmc2V0KTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3MjI6TE9PUF9BVFRSX1JPKHNpemVsaW1pdCk7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6NzIzOkxPT1BfQVRUUl9STyhhdXRvY2xlYXIpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjcyNDpMT09QX0FUVFJfUk8ocGFydHNjYW4pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjcyNTpMT09QX0FUVFJfUk8oZGlvKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03MjYtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz03Mzc9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG9vcF9hdHRyaWJ1dGVfZ3JvdXAgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03NDEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NzQyOnN0YXRpYyB2b2lkIGxvb3Bfc3lzZnNfaW5pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc0My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03NDctXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NzQ4OnN0YXRpYyB2b2lkIGxvb3Bfc3lzZnNfZXhpdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc0OS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03NTQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NzU1OnN0YXRpYyB2b2lkIGxvb3BfZ2V0X2Rpc2NhcmRfY29uZmlnKHN0cnVjdCBsb29wX2RldmljZSAqbG8sXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNzU2LVxcdFxcdFxcdFxcdCAgICB1MzIgKmdyYW51bGFyaXR5LCB1MzIgKm1heF9kaXNjYXJkX3NlY3RvcnMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz03ODU9c3RydWN0IGxvb3Bfd29ya2VyIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc5NC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo3OTU6c3RhdGljIHZvaWQgbG9vcF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy03OTYtXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNzk3LSNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjc5ODpzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9vbl9yb290X3dvcmtlcihzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTc5OS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04MDItI2Vsc2VcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo4MDM6c3RhdGljIGlubGluZSBpbnQgcXVldWVfb25fcm9vdF93b3JrZXIoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04MDQte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtODA4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjgwOTpzdGF0aWMgdm9pZCBsb29wX3F1ZXVlX3dvcmsoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtODEwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTg3OC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo4Nzk6c3RhdGljIHZvaWQgbG9vcF9zZXRfdGltZXIoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04ODAte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtODgzLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjg4NDpzdGF0aWMgdm9pZCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJvb2wgZGVsZXRlX2FsbClcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy04ODUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTA0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjkwNTpzdGF0aWMgdm9pZCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05MDYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9OTIwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5MjE6bG9vcF9zZXRfc3RhdHVzX2Zyb21faW5mbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTkyMi1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBsb29wX2luZm82NCAqaW5mbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk1MS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5NTI6c3RhdGljIHVuc2lnbmVkIGludCBsb29wX2RlZmF1bHRfYmxvY2tzaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTUzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk1OS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5NjA6c3RhdGljIHZvaWQgbG9vcF9zZXRfZG1hX2xpbWl0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NjEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTcyLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk3MzpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk3NC1cXHRcXHR1bnNpZ25lZCBpbnQgYnNpemUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDA3LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwMDg6c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTAwOS1cXHRcXHRcXHQgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTQxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExNDI6c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExNDMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxNC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjE1OnN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEyNDk9c3RhdGljIGludFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyNTA6bG9vcF9zZXRfc3RhdHVzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGNvbnN0IHN0cnVjdCBsb29wX2luZm82NCAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjUxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEzMDQ9c3RhdGljIGludFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEzMDU6bG9vcF9nZXRfc3RhdHVzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2luZm82NCAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMzA2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEzNDA9c3RhdGljIHZvaWRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMzQxOmxvb3BfaW5mbzY0X2Zyb21fb2xkKGNvbnN0IHN0cnVjdCBsb29wX2luZm8gKmluZm8sIHN0cnVjdCBsb29wX2luZm82NCAqaW5mbzY0KVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEzNDIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTM1ND1zdGF0aWMgaW50XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTM1NTpsb29wX2luZm82NF90b19vbGQoY29uc3Qgc3RydWN0IGxvb3BfaW5mbzY0ICppbmZvNjQsIHN0cnVjdCBsb29wX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTM1Ni17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMzc2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMzc3Omxvb3Bfc2V0X3N0YXR1c19vbGQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY29uc3Qgc3RydWN0IGxvb3BfaW5mbyBfX3VzZXIgKmFyZylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMzc4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEzODg9c3RhdGljIGludFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEzODk6bG9vcF9zZXRfc3RhdHVzNjQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgY29uc3Qgc3RydWN0IGxvb3BfaW5mbzY0IF9fdXNlciAqYXJnKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEzOTAte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTM5OD1zdGF0aWMgaW50XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTM5OTpsb29wX2dldF9zdGF0dXNfb2xkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2luZm8gX191c2VyICphcmcpIHtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDAwLVxcdHN0cnVjdCBsb29wX2luZm8gaW5mbztcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0MTU9c3RhdGljIGludFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0MTY6bG9vcF9nZXRfc3RhdHVzNjQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfaW5mbzY0IF9fdXNlciAqYXJnKSB7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQxNy1cXHRzdHJ1Y3QgbG9vcF9pbmZvNjQgaW5mbzY0O1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQyOC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDI5OnN0YXRpYyBpbnQgbG9vcF9zZXRfY2FwYWNpdHkoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDMwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NDEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ0MjpzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDQzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NzEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ3MjpzdGF0aWMgaW50IGxvb3Bfc2V0X2Jsb2NrX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NzMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUxOS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTIwOnN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyMS1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1NDEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTU0MjpzdGF0aWMgaW50IGxvX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTQzLVxcdHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTYyNj1zdGF0aWMgbm9pbmxpbmUgaW50XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTYyNzpsb29wX2luZm82NF9mcm9tX2NvbXBhdChjb25zdCBzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBfX3VzZXIgKmFyZyxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNjI4LVxcdFxcdFxcdHN0cnVjdCBsb29wX2luZm82NCAqaW5mbzY0KVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTY1MT1zdGF0aWMgbm9pbmxpbmUgaW50XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTY1Mjpsb29wX2luZm82NF90b19jb21wYXQoY29uc3Qgc3RydWN0IGxvb3BfaW5mbzY0ICppbmZvNjQsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTY1My1cXHRcXHQgICAgICBzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBfX3VzZXIgKmFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE2Nzg9c3RhdGljIGludFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE2Nzk6bG9vcF9zZXRfc3RhdHVzX2NvbXBhdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE2ODAtXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTY5MT1zdGF0aWMgaW50XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTY5Mjpsb29wX2dldF9zdGF0dXNfY29tcGF0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTY5My1cXHRcXHQgICAgICAgc3RydWN0IGNvbXBhdF9sb29wX2luZm8gX191c2VyICphcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzA1LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3MDY6c3RhdGljIGludCBsb19jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3MDctXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzQxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3NDI6c3RhdGljIGludCBsb19vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc0My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzU2LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3NTc6c3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzU4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3ODAtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTc4MTpzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc4Mi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODIyPXN0YXRpYyBib29sIG1heF9sb29wX3NwZWNpZmllZDtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODIzLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4MjQ6c3RhdGljIGludCBtYXhfbG9vcF9wYXJhbV9zZXRfaW50KGNvbnN0IGNoYXIgKnZhbCxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODI1LVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODM3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBtYXhfbG9vcF9wYXJhbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NDI6bW9kdWxlX3BhcmFtX2NiKG1heF9sb29wLCBcXHUwMDI2bWF4X2xvb3BfcGFyYW1fb3BzLCBcXHUwMDI2bWF4X2xvb3AsIDA0NDQpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NDM6TU9EVUxFX1BBUk1fREVTQyhtYXhfbG9vcCwgXFxcIk1heGltdW0gbnVtYmVyIG9mIGxvb3AgZGV2aWNlc1xcXCIpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NDQtI2Vsc2VcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODQ1Om1vZHVsZV9wYXJhbShtYXhfbG9vcCwgaW50LCAwNDQ0KTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODQ2Ok1PRFVMRV9QQVJNX0RFU0MobWF4X2xvb3AsIFxcXCJJbml0aWFsIG51bWJlciBvZiBsb29wIGRldmljZXNcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQ3LSNlbmRpZlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NDgtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg0OTptb2R1bGVfcGFyYW0obWF4X3BhcnQsIGludCwgMDQ0NCk7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg1MDpNT0RVTEVfUEFSTV9ERVNDKG1heF9wYXJ0LCBcXFwiTWF4aW11bSBudW1iZXIgb2YgcGFydGl0aW9ucyBwZXIgbG9vcCBkZXZpY2VcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODUxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4NTI9c3RhdGljIGludCBod19xdWV1ZV9kZXB0aCA9IExPT1BfREVGQVVMVF9IV19RX0RFUFRIO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NTMtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg1NDpzdGF0aWMgaW50IGxvb3Bfc2V0X2h3X3F1ZXVlX2RlcHRoKGNvbnN0IGNoYXIgKnMsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKnApXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg1NS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODY3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBsb29wX2h3X3FkZXB0aF9wYXJhbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODcxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NzI6ZGV2aWNlX3BhcmFtX2NiKGh3X3F1ZXVlX2RlcHRoLCBcXHUwMDI2bG9vcF9od19xZGVwdGhfcGFyYW1fb3BzLCBcXHUwMDI2aHdfcXVldWVfZGVwdGgsIDA0NDQpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NzM6TU9EVUxFX1BBUk1fREVTQyhod19xdWV1ZV9kZXB0aCwgXFxcIlF1ZXVlIGRlcHRoIGZvciBlYWNoIGhhcmR3YXJlIHF1ZXVlLiBEZWZhdWx0OiBcXFwiIF9fc3RyaW5naWZ5KExPT1BfREVGQVVMVF9IV19RX0RFUFRIKSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg3NC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODc1Ok1PRFVMRV9ERVNDUklQVElPTihcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODc2Ok1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODc3Ok1PRFVMRV9BTElBU19CTE9DS0RFVl9NQUpPUihMT09QX01BSk9SKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODc4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4Nzk6c3RhdGljIGJsa19zdGF0dXNfdCBsb29wX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4ODAtXFx0XFx0Y29uc3Qgc3RydWN0IGJsa19tcV9xdWV1ZV9kYXRhICpiZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5MjEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTkyMjpzdGF0aWMgdm9pZCBsb29wX2hhbmRsZV9jbWQoc3RydWN0IGxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTkyMy17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xOTczLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE5NzQ6c3RhdGljIHZvaWQgbG9vcF9wcm9jZXNzX3dvcmsoc3RydWN0IGxvb3Bfd29ya2VyICp3b3JrZXIsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTk3NS1cXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpjbWRfbGlzdCwgc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwMDctXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjAwODpzdGF0aWMgdm9pZCBsb29wX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjAwOS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDE0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIwMTU6c3RhdGljIHZvaWQgbG9vcF9yb290Y2dfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDE2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIwMjI9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIGxvb3BfbXFfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjAyNi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDI3OnN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjAyOC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTQ1LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIxNDY6c3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTQ3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxNjMtI2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTY0OnN0YXRpYyB2b2lkIGxvb3BfcHJvYmUoZGV2X3QgZGV2KVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxNjUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE3NS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTc2OnN0YXRpYyBpbnQgbG9vcF9jb250cm9sX3JlbW92ZShpbnQgaWR4KVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxNzcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjIyMi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjIzOnN0YXRpYyBpbnQgbG9vcF9jb250cm9sX2dldF9mcmVlKGludCBpZHgpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjIyNC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjQ2LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNDc6c3RhdGljIGxvbmcgbG9vcF9jb250cm9sX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNDgtXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgcGFybSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIyNzA9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGxvb3BfbWlzYyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNzUtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI3NjpNT0RVTEVfQUxJQVNfTUlTQ0RFVihMT09QX0NUUkxfTUlOT1IpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNzc6TU9EVUxFX0FMSUFTKFxcXCJkZXZuYW1lOmxvb3AtY29udHJvbFxcXCIpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNzgtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI3OTpzdGF0aWMgaW50IF9faW5pdCBsb29wX2luaXQodm9pZClcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzMzEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjMzMjpzdGF0aWMgdm9pZCBfX2V4aXQgbG9vcF9leGl0KHZvaWQpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjMzMy17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzUxLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzNTI6bW9kdWxlX2luaXQobG9vcF9pbml0KTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMzUzOm1vZHVsZV9leGl0KGxvb3BfZXhpdCk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjM1NC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzU1LSNpZm5kZWYgTU9EVUxFXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjM1NjpzdGF0aWMgaW50IF9faW5pdCBtYXhfbG9vcF9zZXR1cChjaGFyICpzdHIpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjM1Ny17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzY0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzNjU6X19zZXR1cChcXFwibWF4X2xvb3A9XFxcIiwgbWF4X2xvb3Bfc2V0dXApO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzNjYtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE5OjM3OjEzLjAyODIzOTUxN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTU4ODQ3NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBMb29wIERldmljZSBEcml2ZXIgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaXMgb24gdGhpcyBzcGVjaWZpYyBwYXRjaCB0b3VjaGluZyB0aGUgbG9vcCBkZXZpY2UgZHJpdmVyLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBzeW1ib2xzLiBJJ20gemVyb2luZyBpbiBvbiBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCwgYGxvb3BfY2xlYXJfbGltaXRzYCwgYGxvX2ZhbGxvY2F0ZWAsIGBsb29wX2NvbmZpZ3VyZWAsIGBsb19pb2N0bGAsIGFuZCBgbG9vcF9jb250cm9sX2lvY3RsYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBCTEtfREVWX0xPT1BgLiBEaXZpbmcgaW50byBgZHJpdmVycy9ibG9jay9LY29uZmlnYCwgaXQgbG9va3MgbGlrZSBgQkxLX0RFVl9MT09QYCBpcyBzdHJhaWdodGZvcndhcmQ7IGl0IGRlcGVuZHMgb24gdGhlIGJsb2NrIGRldmljZSBpbmZyYXN0cnVjdHVyZSBpdHNlbGYgKGBCTE9DS2ApLCB3aGljaCBpcyBoYW5kbGVkIGJ5IGBDT05GSUdfQkxPQ0tgLiBUaGF0J3MgZ29vZC4gTm8gb2JzY3VyZSBkZXBlbmRlbmNpZXMgdG8gd29ycnkgYWJvdXQuXG5cbkxldCdzIGRvIGEgZmluYWwgc2FuaXR5IGNoZWNrLCBwdWxsaW5nIGl0IGFsbCB0b2dldGhlcjogSSd2ZSBnb3QgYFdvcnRoRnV6emluZ2Agc2V0IHRvIHRydWUsIGBFbmFibGVDb25maWdzYCB3aXRoIGBcIkJMS19ERVZfTE9PUFwiYCwgYW5kIGBGb2N1c1N5bWJvbHNgIHNldCB0byBgXCJsb29wX2NsZWFyX2xpbWl0c193b3JrZm5cIiwgXCJsb29wX2NsZWFyX2xpbWl0c1wiLCBcImxvX2ZhbGxvY2F0ZVwiLCBcImxvb3BfY29uZmlndXJlXCJgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBUaGlzIHBhdGNoJ3MgcHVycG9zZSBpcyB0byBkZWZlciBxdWV1ZSBsaW1pdCB1cGRhdGVzIHdoZW4gYGZhbGxvY2F0ZWAgb3BlcmF0aW9ucyBmYWlsLCB1c2luZyBhIHdvcmtxdWV1ZSAoYGNsZWFyX2xpbWl0c193b3JrYCkgYW5kIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oKWAuIFRoaXMgZGlyZWN0bHkgYWRkcmVzc2VzIHF1ZXVlIGxvY2tpbmcgaXNzdWVzIGR1cmluZyByZXF1ZXN0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYWZmZWN0aW5nIGRpc2NhcmQgYW5kIHplcm8tcmFuZ2UgcXVldWUgbGltaXQgdXBkYXRlcy5cblxuTm93LCBsZXQncyB2ZXJpZnkgYWxsIHRoZSB0b29sIGNhbGxzIGFuZCBwYXJhbWV0ZXJzLiBJdCBsb29rcyBsaWtlIGl0IGlzIHJlYWR5IHRvIGV4ZWN1dGUgd2l0aCBgc2V0LXJlc3VsdHNgLiBFdmVyeXRoaW5nIGlzIGNvcnJlY3QuIEknbSBnb2luZyB0byBzZXQgaXQgaW4gbW90aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE2NSwiT3V0cHV0VG9rZW5zIjoxMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MTcuNTg3MDg5NjIzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2ODIyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzX3dvcmtmblwiLFxuICAgIFwibG9vcF9jbGVhcl9saW1pdHNcIixcbiAgICBcImxvX2ZhbGxvY2F0ZVwiLFxuICAgIFwibG9vcF9jb25maWd1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBoYW5kbGUgY2xlYXJpbmcgcXVldWUgbGltaXRzIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoY2xlYXJfbGltaXRzX3dvcmspIGluc3RlYWQgb2YgZGlyZWN0bHkgaW5zaWRlIHF1ZXVlX3JxIGNvbnRleHQuIFRoaXMgcHJvcGVybHkgdXNlcyBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4gdG8gZm9sbG93IHRoZSBxdWV1ZSBsaW1pdHMgbG9ja2luZyBwcm90b2NvbCB3aGVuIGZhbGxvY2F0ZSBvcGVyYXRpb25zIGZhaWwgb24gbG9vcCBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzX3dvcmtmblwiLFxuICAgIFwibG9vcF9jbGVhcl9saW1pdHNcIixcbiAgICBcImxvX2ZhbGxvY2F0ZVwiLFxuICAgIFwibG9vcF9jb25maWd1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB0byBoYW5kbGUgY2xlYXJpbmcgcXVldWUgbGltaXRzIGFzeW5jaHJvbm91c2x5IHZpYSBhIHdvcmtxdWV1ZSAoY2xlYXJfbGltaXRzX3dvcmspIGluc3RlYWQgb2YgZGlyZWN0bHkgaW5zaWRlIHF1ZXVlX3JxIGNvbnRleHQuIFRoaXMgcHJvcGVybHkgdXNlcyBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4gdG8gZm9sbG93IHRoZSBxdWV1ZSBsaW1pdHMgbG9ja2luZyBwcm90b2NvbCB3aGVuIGZhbGxvY2F0ZSBvcGVyYXRpb25zIGZhaWwgb24gbG9vcCBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNzoxNy42NjY3NzgxMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzNTgyNDcyMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNzoxNy42NjcyMzM1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5MzU3Nzg2MzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB0cmFuc2l0aW9ucyB0aGUgbG9vcCBkcml2ZXIncyBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgbG9naWMgZnJvbSBzeW5jaHJvbm91cyBleGVjdXRpb24gaW5zaWRlIHJlcXVlc3QgaGFuZGxpbmcgdG8gYW4gYXN5bmNocm9ub3VzIHdvcmtxdWV1ZSAoYGNsZWFyX2xpbWl0c193b3JrYCkgdXNpbmcgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbigpYC5cXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3QgZmllbGRzIChgY2xlYXJfbGltaXRzX3dvcmtgIGFuZCBgY2xlYXJfbGltaXRzX21vZGVgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IHRoZSBgbG9vcF9kZXZpY2VgIHN0cnVjdCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgdGhlIHdvcmsgaXRlbSBpcyBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUksoKWAsIGFuZCB0aGUgYXRvbWljIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgcmVzZXQgd2l0aCBgYXRvbWljX3NldGAgLyBhdG9taWMgb3BlcmF0aW9ucy4gVGhlIGBzdHJ1Y3QgcXVldWVfbGltaXRzYCB1c2VkIGluIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gIGlzIGluaXRpYWxpemVkIGZyb20gYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgKHdoaWNoIHJldHVybnMgdGhlIGN1cnJlbnQgcXVldWUgbGltaXRzKS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgcXVldWUgZnJlZXppbmcgbG9ja2luZyBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzgzNzhkOGRiZjg5YjgxYTQ4MjA2Zjc5NjljMThkZGZjZmIwZTYxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTk6MzY6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA2ZjEyOTc2MDM1YjA5Li4zNjhlYTg1Nzg5NWNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNjcsNiArNjcsOCBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgcm9vdGNnX2NtZF9saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgaWRsZV93b3JrZXJfbGlzdDtcbiBcdHN0cnVjdCByYl9yb290ICAgICAgICAgIHdvcmtlcl90cmVlO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0ICAgICAgY2xlYXJfbGltaXRzX3dvcms7XG4rXHRhdG9taWNfdFx0XHRjbGVhcl9saW1pdHNfbW9kZTtcbiBcdHN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHRpbWVyO1xuIFx0Ym9vbFx0XHRcdHN5c2ZzX2luaXRlZDtcbiBcbkBAIC0yMjIsOSArMjI0LDEyIEBAIHN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpXG4gXHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNmRpc2tfdG9fZGV2KGxvLVx1MDAzZWxvX2Rpc2spLVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXG4rc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4rXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgY2xlYXJfbGltaXRzX3dvcmspO1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbitcdGludCBtb2RlID0gYXRvbWljX3hjaGcoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX21vZGUsIDApO1xuIFxuIFx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9aRVJPX1JBTkdFKVxuIFx0XHRsaW0ubWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gMDtcbkBAIC0yMzQsMTQgKzIzOSwxMyBAQCBzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbiBcdFx0bGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIFhYWDogdGhpcyB1cGRhdGVzIHRoZSBxdWV1ZSBsaW1pdHMgd2l0aG91dCBmcmVlemluZyB0aGUgcXVldWUsIHdoaWNoXG4tXHQgKiBpcyBhZ2FpbnN0IHRoZSBsb2NraW5nIHByb3RvY29sIGFuZCBkYW5nZXJvdXMuICBCdXQgd2UgY2FuJ3QganVzdFxuLVx0ICogZnJlZXplIHRoZSBxdWV1ZSBhcyB3ZSdyZSBpbnNpZGUgdGhlIC1cdTAwM2VxdWV1ZV9ycSBtZXRob2QgaGVyZS4gIFNvIHRoaXNcbi1cdCAqIHNob3VsZCBtb3ZlIG91dCBpbnRvIGEgd29ya3F1ZXVlIHVubGVzcyB3ZSBnZXQgdGhlIGZpbGUgb3BlcmF0aW9ucyB0b1xuLVx0ICogYWR2ZXJ0aXNlIGlmIHRoZXkgc3VwcG9ydCBzcGVjaWZpYyBmYWxsb2NhdGUgb3BlcmF0aW9ucy5cbi1cdCAqL1xuLVx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUsIFx1MDAyNmxpbSk7XG4rXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obG8tXHUwMDNlbG9fcXVldWUsIFx1MDAyNmxpbSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuK3tcbitcdGF0b21pY19vcihtb2RlLCBcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSk7XG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbiB9XG4gXG4gc3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxuQEAgLTUxNiw2ICs1MjAsNyBAQCBzdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuIFx0bG8tXHUwMDNlbG9fYmFja2luZ19maWxlID0gZmlsZTtcbitcdGF0b21pY19zZXQoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX21vZGUsIDApO1xuIFx0bG8tXHUwMDNlb2xkX2dmcF9tYXNrID0gbWFwcGluZ19nZnBfbWFzayhmaWxlLVx1MDAzZWZfbWFwcGluZyk7XG4gXHRtYXBwaW5nX3NldF9nZnBfbWFzayhmaWxlLVx1MDAzZWZfbWFwcGluZyxcbiBcdFx0XHRsby1cdTAwM2VvbGRfZ2ZwX21hc2sgXHUwMDI2IH4oX19HRlBfSU8gfCBfX0dGUF9GUykpO1xuQEAgLTE3ODEsNiArMTc4Niw3IEBAIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbiBcdGxvb3BfZnJlZV9pZGxlX3dvcmtlcnMobG8sIHRydWUpO1xuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZsby1cdTAwM2V0aW1lcik7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuIFx0a2ZyZWUobG8pO1xuIH1cbkBAIC0yMTAwLDYgKzIxMDYsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsby1cdTAwM2Vsb193b3JrX2xvY2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pO1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcbiBcdGRpc2stXHUwMDNlbWFqb3JcdFx0PSBMT09QX01BSk9SO1xuIFx0ZGlzay1cdTAwM2VmaXJzdF9taW5vclx0PSBpIFx1MDAzY1x1MDAzYyBwYXJ0X3NoaWZ0O1xuQEAgLTIxMzgsNiArMjE0NSwxMCBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4ge1xuK1x0LyogQ2FuY2VsIGVhcmx5OiB0aGUgcXVldWUgbWF5IGJlIGluIFJDVS1kZWxheWVkIGZyZWVpbmdcbitcdCAqIGJ5IHRoZSB0aW1lIGxvX2ZyZWVfZGlzaygpIHJ1bnMuICovXG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbitcbiBcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xuIFx0ZGVsX2dlbmRpc2sobG8tXHUwMDNlbG9fZGlzayk7XG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmxvLVx1MDAzZXRhZ19zZXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MTcuNjY3MjM2MDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTkyNjg5MzA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvb3AgRGV2aWNlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBMZXQncyBicmVhayBkb3duIHdoYXQncyBoYXBwZW5pbmcgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UncmUgYWRkcmVzc2luZyBzb21lIGNvbmN1cnJlbmN5IGlzc3VlcyByZWxhdGVkIHRvIHF1ZXVlIGxpbWl0cy5cblxuRmlyc3QsIGl0IGxvb2tzIGxpa2Ugd2UncmUgYWRkaW5nIHR3byBuZXcgbWVtYmVycyB0byB0aGUgYHN0cnVjdCBsb29wX2RldmljZWA6IGEgYHN0cnVjdCB3b3JrX3N0cnVjdCBjbGVhcl9saW1pdHNfd29yaztgIGFuZCBhbiBgYXRvbWljX3QgY2xlYXJfbGltaXRzX21vZGU7YC4gU2VlbXMgbGlrZSB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhc3luY2hyb25vdXMgbGltaXQgdXBkYXRlcywgd2hpY2ggaXMgdXN1YWxseSBhIGdvb2Qgc2lnbiBmb3IgYXZvaWRpbmcgdGhvc2UgcGVza3kgcXVldWUgZnJlZXppbmcgcHJvYmxlbXMuXG5cblNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgdGhlIHN5bmNocm9ub3VzIGNhbGwgdG8gYGxvb3BfY2xlYXJfbGltaXRzKGxvLCBtb2RlKWAgd2l0aCBhbiBhc3luY2hyb25vdXMgYXBwcm9hY2guIFRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBjYWxsZWQgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVgIGRpcmVjdGx5LCB3aGljaCwgZ2l2ZW4gdGhlIFwiaW5zaWRlIGAtXHUwMDNlcXVldWVfcnFgXCIgY29udGV4dCwgcHJvYmFibHkgdmlvbGF0ZWQgdGhlIHF1ZXVlIGZyZWV6aW5nIHJ1bGVzLlxuXG5Ob3csIGBsb29wX2NsZWFyX2xpbWl0c2AgYXRvbWljYWxseSBPUnMgdGhlIGBtb2RlYCBpbnRvIGBsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZWAgYW5kIHNjaGVkdWxlcyB0aGUgYGxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrYC4gVGhlIGFjdHVhbCB3b3JrIGlzIGRvbmUgYnkgYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAsIHdoaWNoIHJ1bnMgYXN5bmNocm9ub3VzbHkuIEl0IHJldHJpZXZlcyBhbmQgcmVzZXRzIGBsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZWAgdXNpbmcgYGF0b21pY194Y2hnKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKWAuIFRoZW4gaXQgZmV0Y2hlcyB0aGUgY3VycmVudCBxdWV1ZSBsaW1pdHMgdXNpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpYCwgbW9kaWZpZXMgdGhlbSwgYW5kIGNvbW1pdHMgdGhlIHVwZGF0ZXMgdXNpbmcgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKWAuIE1ha2VzIHNlbnNlOyBpdCdzIGEgc3RhbmRhcmQgcGF0dGVybiBmb3IgZGVmZXJyaW5nIHdvcmsgYW5kIGF2b2lkaW5nIGxvY2sgY29udGVudGlvbi5cblxuSSBzZWUgYElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKWAgYmVpbmcgY2FsbGVkIGR1cmluZyBgbG9vcF9hZGRgIGZvciBpbml0aWFsaXphdGlvbiwgYW5kIGBhdG9taWNfc2V0KFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKWAgaXMgc2V0IGR1cmluZyBgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlYCwgc28gd2UncmUgaW5pdGlhbGl6aW5nIHRoZSB3b3JrIHN0cnVjdCBhbmQgdGhlIG1vZGUgYXBwcm9wcmlhdGVseS4gQW5kIGZpbmFsbHksIHRoZSBwYXRjaCBhZGRzIGBjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKWAgaW4gYGxvX2ZyZWVfZGlza2AgYW5kIGBsb29wX3JlbW92ZWAgdG8gZW5zdXJlIHdlIGRvbid0IGxlYWsgYW55dGhpbmcgd2hlbiB0aGUgZGV2aWNlIGlzIHRvcm4gZG93bi4gR29vZCBob3VzZWtlZXBpbmcuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBzbmVha3kgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGlzc3Vlcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGlzIGxpbmU6IGBzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO2AuIFRoaXMgc3VnZ2VzdHMgd2UncmUgY29weWluZyBxdWV1ZSBsaW1pdHMsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBpbnRvIGEgbG9jYWwgdmFyaWFibGUuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBpcyBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAgaW1wbGVtZW50ZWQ/IExldCdzIGNoZWNrIHRoZSBibG9jayBsYXllciBpbXBsZW1lbnRhdGlvbiB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgdGhlcmUuIFdlIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IHRoZSByZXR1cm5lZCBgcXVldWVfbGltaXRzYCBzdHJ1Y3QgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MjcuNTk0MTM0MTI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQwMTUzOTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWludGVncml0eS5jPTIyNj1zdGF0aWMgc3NpemVfdCBmbGFnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50LFxcbi0tXFxuYmxvY2svYmxrLWludGVncml0eS5jLTIzOC1cXHQvKiBub3RlIHRoYXQgdGhlIGZsYWdzIGFyZSBpbnZlcnRlZCB2cyB0aGUgdmFsdWVzIGluIHRoZSBzeXNmcyBmaWxlcyAqL1xcbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYzoyMzk6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG5ibG9jay9ibGstaW50ZWdyaXR5LmMtMjQwLVxcdGlmICh2YWwpXFxuLS1cXG5ibG9jay9ibGstc2V0dGluZ3MuYz01MjI9aW50IGJsa19zZXRfZGVmYXVsdF9saW1pdHMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTM4LSAqXFxuYmxvY2svYmxrLXNldHRpbmdzLmM6NTM5OiAqIEFwcGx5IHRoZSBsaW1pdHMgaW4gQGxpbSB0aGF0IHdlcmUgb2J0YWluZWQgZnJvbSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClcXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NDAtICogYW5kIHVwZGF0ZWQgYnkgdGhlIGNhbGxlciB0byBAcS4gIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGZyb3plbiB0aGUgcXVldWUgb3JcXG4tLVxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jPTU3MT1FWFBPUlRfU1lNQk9MX0dQTChxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSk7XFxuLS1cXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzctICpcXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1Nzg6ICogQXBwbHkgdGhlIGxpbWl0cyBpbiBAbGltIHRoYXQgd2VyZSBvYnRhaW5lZCBmcm9tIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKVxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU3OS0gKiBhbmQgdXBkYXRlZCB3aXRoIHRoZSBuZXcgdmFsdWVzIGJ5IHRoZSBjYWxsZXIgdG8gQHEuICBGcmVlemVzIHRoZSBxdWV1ZVxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmM9NTk2PUVYUE9SVF9TWU1CT0xfR1BMKHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbik7XFxuLS1cXG5ibG9jay9ibGstc2V0dGluZ3MuYy02MDMtICogQXBwbHkgdGhlIGxpbWl0cyBpbiBAbGltIHRoYXQgd2VyZSBmcmVzaGx5IGluaXRpYWxpemVkIHRvIEBxLlxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjYwNDogKiBUbyB1cGRhdGUgZXhpc3RpbmcgbGltaXRzIHVzZSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCkgYW5kXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNjA1LSAqIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKCkgaW5zdGVhZC5cXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jPTg3OT1xdWV1ZV9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxcbi0tXFxuYmxvY2svYmxrLXN5c2ZzLmMtODkxLVxcbmJsb2NrL2Jsay1zeXNmcy5jOjg5MjpcXHRcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XFxuYmxvY2svYmxrLXN5c2ZzLmMtODkzLVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MjA1OD1zdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMjA2Ni1cXG5ibG9jay9ibGstem9uZWQuYzoyMDY3OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMjA2OC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9MTMwMT12b2lkIGRyYmRfcmVjb25zaWRlcl9xdWV1ZV9wYXJhbWV0ZXJzKHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0xMzM0LVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MTMzNTpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMTMzNi1cXHRpZiAoYmRldikge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjI3PXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzAtXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgY2xlYXJfbGltaXRzX3dvcmspO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzMTpcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzItXFx0aW50IG1vZGUgPSBhdG9taWNfeGNoZyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEwMDg9c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDg3LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwODg6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwODktXFx0bG9vcF91cGRhdGVfbGltaXRzKGxvLCBcXHUwMDI2bGltLCBjb25maWctXFx1MDAzZWJsb2NrX3NpemUpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTE0Mj1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTY0LVxcdCAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExNjU6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExNjYtXFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTQ0Mj1zdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NTktXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ2MDpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ2MS1cXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0NzI9c3RhdGljIGludCBsb29wX3NldF9ibG9ja19zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MDMtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUwNDpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUwNS1cXHRsb29wX3VwZGF0ZV9saW1pdHMobG8sIFxcdTAwMjZsaW0sIGFyZyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTM1NT1zdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zNzQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzozNzU6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM3Ni1cXHRuYmRfYXBwbHlfbGltaXRzKFxcdTAwMjZsaW0sIG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VmbGFncyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE0Njg9c3RhdGljIHZvaWQgbmJkX2NvbmZpZ19wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ3Ni1cXHRcXHQvKiByZXNldCBxdWV1ZSBsaW1pdHMgdG8gZGVmYXVsdCAqL1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQ3NzpcXHRcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ3OC1cXHRcXHRuYmRfYXBwbHlfbGltaXRzKFxcdTAwMjZsaW0sIDApO1xcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTA5ND1jYWNoZV90eXBlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMTA5LVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjExMTA6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTExMS1cXHRpZiAodmlydGJsa19nZXRfY2FjaGVfbW9kZSh2ZGV2KSlcXG4tLVxcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmM9MjAwNj1zdGF0aWMgaW50IGJsa2lmX3JlY292ZXIoc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jLTIwMTQtXFxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYzoyMDE1OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoaW5mby1cXHUwMDNlcnEpO1xcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMtMjAxNi1cXHRibGtmcm9udF9nYXRoZXJfYmFja2VuZF9mZWF0dXJlcyhpbmZvKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdGFibGUuYz0yMDI4PWludCBkbV90YWJsZV9zZXRfcmVzdHJpY3Rpb25zKHN0cnVjdCBkbV90YWJsZSAqdCwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLS1cXG5kcml2ZXJzL21kL2RtLXRhYmxlLmMtMjA4Mi1cXG5kcml2ZXJzL21kL2RtLXRhYmxlLmM6MjA4MzpcXHRvbGRfbGltaXRzID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG5kcml2ZXJzL21kL2RtLXRhYmxlLmMtMjA4NC1cXHRyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltaXRzKTtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz01OTgwPXN0YXRpYyBpbnQgbWRkZXZfc2V0X2xvZ2ljYWxfYmxvY2tfc2l6ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTU5OTEtXFxuZHJpdmVycy9tZC9tZC5jOjU5OTI6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvbWQvbWQuYy01OTkzLVxcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBsYnM7XFxuLS1cXG5kcml2ZXJzL21kL21kLmM9NjI0OT1pbnQgbWRkZXZfc3RhY2tfbmV3X3JkZXYoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtNjI2Mi1cXG5kcml2ZXJzL21kL21kLmM6NjI2MzpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9tZC9tZC5jLTYyNjQtXFx0cXVldWVfbGltaXRzX3N0YWNrX2JkZXYoXFx1MDAyNmxpbSwgcmRldi1cXHUwMDNlYmRldiwgcmRldi1cXHUwMDNlZGF0YV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL21kL21kLmM9NjI3OT12b2lkIG1kZGV2X3VwZGF0ZV9pb19vcHQoc3RydWN0IG1kZGV2ICptZGRldiwgdW5zaWduZWQgaW50IG5yX3N0cmlwZXMpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtNjI4OC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9tZC9tZC5jOjYyODk6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvbWQvbWQuYy02MjkwLVxcdGxpbS5pb19vcHQgPSBsaW0uaW9fbWluICogbnJfc3RyaXBlcztcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDUuYz03Mjg4PXJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jLTczMDctXFx0XFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWU7XFxuZHJpdmVycy9tZC9yYWlkNS5jOjczMDg6XFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xcbmRyaXZlcnMvbWQvcmFpZDUuYy03MzA5LVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIyMzg9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2dlbmVyaWMoc3RydWN0IG52bWVfbnMgKm5zLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTIyNDQtXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjIyNDU6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShucy1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjQ2LVxcdG52bWVfc2V0X2N0cmxfbGltaXRzKG5zLVxcdTAwM2VjdHJsLCBcXHUwMDI2bGltLCBmYWxzZSk7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjQwOD1zdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soc3RydWN0IG52bWVfbnMgKm5zLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI0NTktXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI0NjA6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShucy1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDYxLVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTI1NDE9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTgzLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNTg0OlxcdFxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU4NS1cXHRcXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0zNjE3PXN0YXRpYyBpbnQgbnZtZV9pbml0X2lkZW50aWZ5KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMzY4NS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MzY4NjpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGN0cmwtXFx1MDAzZWFkbWluX3EpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0zNjg3LVxcdG52bWVfc2V0X2N0cmxfbGltaXRzKGN0cmwsIFxcdTAwMjZsaW0sIHRydWUpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYz0zMjQ9c3RhdGljIGludCBkYXNkX3N0YXRlX2Jhc2ljX3RvX3JlYWR5KHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zNDYtXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozNDc6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShibG9jay1cXHUwMDNlZ2RwLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zNDgtXFx0bGltLm1heF9kZXZfc2VjdG9ycyA9IGRldmljZS1cXHUwMDNlZGlzY2lwbGluZS1cXHUwMDNlbWF4X3NlY3RvcnMoYmxvY2spO1xcbi0tXFxuZHJpdmVycy9zY3NpL21waTNtci9tcGkzbXJfb3MuYz0xMDY3PW1waTNtcl91cGRhdGVfc2RldihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3Njc2kvbXBpM21yL21waTNtcl9vcy5jLTEwNzctXFxuZHJpdmVycy9zY3NpL21waTNtci9tcGkzbXJfb3MuYzoxMDc4OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2Rldi1cXHUwMDNlcmVxdWVzdF9xdWV1ZSk7XFxuZHJpdmVycy9zY3NpL21waTNtci9tcGkzbXJfb3MuYy0xMDc5LVxcdG1waTNtcl9jb25maWd1cmVfdGd0X2Rldih0Z3RkZXYsIFxcdTAwMjZsaW0pO1xcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jPTg4MD1zdGF0aWMgaW50IHNjc2lfYWRkX2x1bihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHVuc2lnbmVkIGNoYXIgKmlucV9yZXN1bHQsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMtMTA4OS1cXHQgKi9cXG5kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmM6MTA5MDpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNkZXYtXFx1MDAzZXJlcXVlc3RfcXVldWUpO1xcbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYy0xMDkxLVxcdGlmICgqYmZsYWdzIFxcdTAwMjYgQkxJU1RfTUFYXzUxMilcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jPTIyMD1jYWNoZV90eXBlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYy0yNTgtXFxuZHJpdmVycy9zY3NpL3NkLmM6MjU5OlxcdFxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2RrcC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvc2NzaS9zZC5jLTI2MC1cXHRcXHRzZF9zZXRfZmx1c2hfZmxhZyhzZGtwLCBcXHUwMDI2bGltKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jPTU3NT1wcm92aXNpb25pbmdfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9zY3NpL3NkLmMtNTkyLVxcbmRyaXZlcnMvc2NzaS9zZC5jOjU5MzpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNka3AtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL3Njc2kvc2QuYy01OTQtXFx0c2RfY29uZmlnX2Rpc2NhcmQoc2RrcCwgXFx1MDAyNmxpbSwgbW9kZSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYz02NzU9bWF4X3dyaXRlX3NhbWVfYmxvY2tzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYy03MDEtXFxuZHJpdmVycy9zY3NpL3NkLmM6NzAyOlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2RrcC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvc2NzaS9zZC5jLTcwMy1cXHRzZF9jb25maWdfd3JpdGVfc2FtZShzZGtwLCBcXHUwMDI2bGltKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jPTM3NzM9c3RhdGljIHZvaWQgc2RfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuZHJpdmVycy9zY3NpL3NkLmMtMzgwMi1cXG5kcml2ZXJzL3Njc2kvc2QuYzozODAzOlxcdCpsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNka3AtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL3Njc2kvc2QuYy0zODA0LVxcbi0tXFxuZHJpdmVycy9zY3NpL3NyLmM9NDc2PXN0YXRpYyBpbnQgc3JfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBzY3NpX2NkICpjZClcXG4tLVxcbmRyaXZlcnMvc2NzaS9zci5jLTQ4OC1cXG5kcml2ZXJzL3Njc2kvc3IuYzo0ODk6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG5kcml2ZXJzL3Njc2kvc3IuYy00OTAtXFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IHNlY3Rvcl9zaXplO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jPTU4ND1zdGF0aWMgc3NpemVfdCBtYXhfc2VjdG9yc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMtNTk0LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYzo1OTU6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGV2LVxcdTAwM2VyZXF1ZXN0X3F1ZXVlKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMtNTk2LVxcdGxpbS5tYXhfaHdfc2VjdG9ycyA9IG1zO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMDc4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJsa19ib3VuZGFyeV9zZWN0b3JzX2xlZnQoc2VjdG9yX3Qgb2Zmc2V0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMDg2LS8qKlxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTA4NzogKiBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlIC0gc3RhcnQgYW4gYXRvbWljIHVwZGF0ZSBvZiBxdWV1ZSBsaW1pdHNcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEwODgtICogQHE6XFx0XFx0cXVldWUgdG8gdXBkYXRlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTEwOTc9c3RhdGljIGlubGluZSBzdHJ1Y3QgcXVldWVfbGltaXRzXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaDoxMDk4OnF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMDk5LVxcdF9fYWNxdWlyZXMoXFx1MDAyNnEtXFx1MDAzZWxpbWl0c19sb2NrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMTEwPWludCBibGtfdmFsaWRhdGVfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTExMTYtICogVGhpcyBmdW5jdGlvbnMgY2FuY2VscyBhbiBhdG9taWMgdXBkYXRlIG9mIHRoZSBxdWV1ZSBsaW1pdHMgc3RhcnRlZCBieVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTExNzogKiBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCkgYW5kIHNob3VsZCBiZSB1c2VkIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGFmdGVyXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTE4LSAqIHN0YXJ0aW5nIHVwZGF0ZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MjkuMjM0MzAxMzQ1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNzczNDQ0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gdGhlIExvb3AgRGV2aWNlIENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlc2UgY2hhbmdlcyBpbnRpbWF0ZWx5LiBMZXQncyBzdGFydCBieSBtZXRob2RpY2FsbHkgZXhhbWluaW5nIHRoZSBtb2RpZmljYXRpb25zLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoZSBjb2RlIGFyb3VuZCB0aGUgYGxvb3BfY2xlYXJfbGltaXRzYCBmdW5jdGlvbiBhbmQgdGhlIGBsb19mYWxsb2NhdGVgIGltcGxlbWVudGF0aW9uLiBJIGtub3cgdGhhdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSBwYXJhbWV0ZXJzIGFuZCBwb3RlbnRpYWwgYWxsb2NhdGlvbiBpc3N1ZXMgbGl2ZS4gVGhhdCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGZhbGxvY2F0ZSBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGxpbWl0IGNvbnN0cmFpbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTc1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6MzEuNDExNjQ3ODQyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Nzc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjA6XFx0ICovXFxuIDIyMTpcXHRzdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxcbiAyMjI6XFx0e1xcbiAyMjM6XFx0XFx0aWYgKCFzZXRfY2FwYWNpdHlfYW5kX25vdGlmeShsby1cXHUwMDNlbG9fZGlzaywgc2l6ZSkpXFxuIDIyNDpcXHRcXHRcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2ZGlza190b19kZXYobG8tXFx1MDAzZWxvX2Rpc2spLVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuIDIyNTpcXHR9XFxuIDIyNjpcXHRcXG4gMjI3OlxcdHN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDIyODpcXHR7XFxuIDIyOTpcXHRcXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID1cXG4gMjMwOlxcdFxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGNsZWFyX2xpbWl0c193b3JrKTtcXG4gMjMxOlxcdFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbiAyMzI6XFx0XFx0aW50IG1vZGUgPSBhdG9taWNfeGNoZyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcXG4gMjMzOlxcdFxcbiAyMzQ6XFx0XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcXG4gMjM1OlxcdFxcdFxcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xcbiAyMzY6XFx0XFxuIDIzNzpcXHRcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XFxuIDIzODpcXHRcXHRcXHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XFxuIDIzOTpcXHRcXHRcXHRsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7XFxuIDI0MDpcXHRcXHR9XFxuIDI0MTpcXHRcXG4gMjQyOlxcdFxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihsby1cXHUwMDNlbG9fcXVldWUsIFxcdTAwMjZsaW0pO1xcbiAyNDM6XFx0fVxcbiAyNDQ6XFx0XFxuIDI0NTpcXHRzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcXG4gMjQ2OlxcdHtcXG4gMjQ3OlxcdFxcdGF0b21pY19vcihtb2RlLCBcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c19tb2RlKTtcXG4gMjQ4OlxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfd29yayk7XFxuIDI0OTpcXHR9XFxuIDI1MDpcXHRcXG4gMjUxOlxcdHN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcyxcXG4gMjUyOlxcdFxcdFxcdFxcdGludCBtb2RlKVxcbiAyNTM6XFx0e1xcbiAyNTQ6XFx0XFx0LypcXG4gMjU1OlxcdFxcdCAqIFdlIHVzZSBmYWxsb2NhdGUgdG8gbWFuaXB1bGF0ZSB0aGUgc3BhY2UgbWFwcGluZ3MgdXNlZCBieSB0aGUgaW1hZ2VcXG4gMjU2OlxcdFxcdCAqIGEuay5hLiBkaXNjYXJkL3plcm9yYW5nZS5cXG4gMjU3OlxcdFxcdCAqL1xcbiAyNTg6XFx0XFx0c3RydWN0IGZpbGUgKmZpbGUgPSBsby1cXHUwMDNlbG9fYmFja2luZ19maWxlO1xcbiAyNTk6XFx0XFx0aW50IHJldDtcXG4gMjYwOlxcdFxcbiAyNjE6XFx0XFx0bW9kZSB8PSBGQUxMT0NfRkxfS0VFUF9TSVpFO1xcbiAyNjI6XFx0XFxuIDI2MzpcXHRcXHRpZiAoIWJkZXZfbWF4X2Rpc2NhcmRfc2VjdG9ycyhsby1cXHUwMDNlbG9fZGV2aWNlKSlcXG4gMjY0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gMjY1OlxcdFxcbiAyNjY6XFx0XFx0cmV0ID0gZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNlZmFsbG9jYXRlKGZpbGUsIG1vZGUsIHBvcywgYmxrX3JxX2J5dGVzKHJxKSk7XFxuIDI2NzpcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUlOVkFMIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUCkpXFxuIDI2ODpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gMjY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNzozMS40MTE4Mzc1NTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc1NjUxNDcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnM6XG5cbioqQW5hbHl6aW5nIGBsb19mYWxsb2NhdGVgIGFuZCBMb29wIERldmljZSBMaW1pdHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYGxvX2ZhbGxvY2F0ZWAgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlLiBJdCBzZWVtcyBsaWtlIGl0J3MgZGVzaWduZWQgdG8gaGFuZGxlIHRoZSBgZmFsbG9jYXRlYCBzeXN0ZW0gY2FsbCwgd2hpY2ggaXMgYSBjb21tb24gbWV0aG9kIGZvciBwcmVhbGxvY2F0aW5nIGRpc2sgc3BhY2UuIFRoZSBpbnRlcmVzdGluZyBiaXQgY29tZXMgd2hlbiBgZmFsbG9jYXRlYCB0aHJvd3MgYW4gZXJyb3IsIHBhcnRpY3VsYXJseSBgLUVPUE5PVFNVUFBgIG9yIGEgc2ltaWxhciBpbmRpY2F0aW9uIHRoYXQgdGhlIG9wZXJhdGlvbiBpc24ndCBzdXBwb3J0ZWQuIE15IHVuZGVyc3RhbmRpbmcgaXMsIGF0IHRoaXMgcG9pbnQgYGxvb3BfY2xlYXJfbGltaXRzYCBnZXRzIGNhbGxlZC4gTm93LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBgbG9vcF9jbGVhcl9saW1pdHNgIGFjdHVhbGx5ICpkb2VzKi4gSSdtIGdvaW5nIHRvIGp1bXAgdG8gbGluZXMgMjcwLTI5MCB0byBsb29rIGNsb3NlbHkgYXQgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTG9vcCBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZmFsbGJhY2sgbWVjaGFuaXNtIGhhcyBhbnkgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkgcmFtaWZpY2F0aW9ucy4gSXMgdGhpcyBjYWxsIGNsZWFyaW5nIHNvbWUgc29ydCBvZiBwcmUtY29uZmlndXJlZCBzaXplIGxpbWl0YXRpb24gYW5kIHBvdGVudGlhbGx5IGNyZWF0aW5nIHZ1bG5lcmFiaWxpdGllcywgb3IgaXMgdGhpcyBjbGVhcmluZyBkZXZpY2UgbGltaXRzIHRvIGFsbG93IHRoZSBvcGVyYXRpb24gdG8gYmUgcGVyZm9ybWVkIGluIGFub3RoZXIgd2F5PyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhpcyBjbGVhcmluZyBvZiBsaW1pdHMgd2lsbCBpbXBhY3QgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgc3RhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjI2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNzozNC4xNjgzNTQyMDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRcXHQvKlxcbiAyNzE6XFx0XFx0ICogV2UgaW5pdGlhbGx5IGNvbmZpZ3VyZSB0aGUgbGltaXRzIGluIGEgaG9wZSB0aGF0IGZhbGxvY2F0ZSBpc1xcbiAyNzI6XFx0XFx0ICogc3VwcG9ydGVkIGFuZCBjbGVhciB0aGVtIGhlcmUgaWYgdGhhdCB0dXJucyBvdXQgbm90IHRvIGJlIHRydWUuXFxuIDI3MzpcXHRcXHQgKi9cXG4gMjc0OlxcdFxcdGlmICh1bmxpa2VseShyZXQgPT0gLUVPUE5PVFNVUFApKVxcbiAyNzU6XFx0XFx0XFx0bG9vcF9jbGVhcl9saW1pdHMobG8sIG1vZGUpO1xcbiAyNzY6XFx0XFxuIDI3NzpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNzg6XFx0fVxcbiAyNzk6XFx0XFxuIDI4MDpcXHRzdGF0aWMgaW50IGxvX3JlcV9mbHVzaChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuIDI4MTpcXHR7XFxuIDI4MjpcXHRcXHRpbnQgcmV0ID0gdmZzX2ZzeW5jKGxvLVxcdTAwM2Vsb19iYWNraW5nX2ZpbGUsIDApO1xcbiAyODM6XFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVJTlZBTCkpXFxuIDI4NDpcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbiAyODU6XFx0XFxuIDI4NjpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyODc6XFx0fVxcbiAyODg6XFx0XFxuIDI4OTpcXHRzdGF0aWMgdm9pZCBsb19jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuIDI5MDpcXHR7XFxuIDI5MTpcXHRcXHRzdHJ1Y3QgbG9vcF9jbWQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xcbiAyOTI6XFx0XFx0YmxrX3N0YXR1c190IHJldCA9IEJMS19TVFNfT0s7XFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdGlmIChjbWQtXFx1MDAzZXJldCBcXHUwMDNjIDAgfHwgY21kLVxcdTAwM2VyZXQgPT0gYmxrX3JxX2J5dGVzKHJxKSB8fFxcbiAyOTU6XFx0XFx0ICAgIHJlcV9vcChycSkgIT0gUkVRX09QX1JFQUQpIHtcXG4gMjk2OlxcdFxcdFxcdGlmIChjbWQtXFx1MDAzZXJldCBcXHUwMDNjIDApXFxuIDI5NzpcXHRcXHRcXHRcXHRyZXQgPSBlcnJub190b19ibGtfc3RhdHVzKGNtZC1cXHUwMDNlcmV0KTtcXG4gMjk4OlxcdFxcdFxcdGdvdG8gZW5kX2lvO1xcbiAyOTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNzozNC4xNjg1MTA4MzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIxNzgzODY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTG9naWNhbCBWb2x1bWUgKExPKSBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24qKlxuXG5SaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYSBgbG9gIGRldmljZSBmcm9tIGFsbG9jYXRpb24gdG8gZGVzdHJ1Y3Rpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc3RvcmFnZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgYGxvb3BfYWRkYCwgYGxvb3BfcmVtb3ZlYCwgYW5kIGBsb19mcmVlX2Rpc2tgIGZ1bmN0aW9ucy4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycyBpbiB0aGlzIHByb2Nlc3MuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSBwYXRoIGZvciBlYWNoIG9mIHRob3NlIGFuZCBkZXRlcm1pbmU6XG5cbiogICAqKmBsb29wX2FkZGAqKjogSG93IGlzIHRoZSBgbG9gIGRldmljZSBpbml0aWFsbHkgY3JlYXRlZCBhbmQgYXNzb2NpYXRlZCB3aXRoIGEgYmFja2luZyBmaWxlIG9yIGJsb2NrIGRldmljZT8gV2hhdCBtZXRhZGF0YSBpcyBpbml0aWFsaXplZD8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkPyBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHJlc291cmNlcyBhcmUgYWxsb2NhdGVkLlxuKiAgICoqYGxvb3BfcmVtb3ZlYCoqOiBUaGlzIHNob3VsZCBiZSB0aGUgY291bnRlcnBhcnQgdG8gYGxvb3BfYWRkYC4gSSdsbCBoYXZlIHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgYGxvYCBkZXZpY2UgYW5kIHRoZSBiYWNraW5nIHN0b3JlIGlzIHNldmVyZWQsIHdoYXQgY2xlYW51cCBvY2N1cnMsIGFuZCBob3cgYW55IGFzc29jaWF0ZWQgcmVzb3VyY2VzIGFyZSByZWxlYXNlZC4gSXMgdGhpcyBncmFjZWZ1bCwgb3IgcHJvbmUgdG8gbGVhdmluZyBnYXJiYWdlIGJlaGluZD9cbiogICAqKmBsb19mcmVlX2Rpc2tgKio6IFRoaXMgc291bmRzIGxpa2UgYSBmdW5jdGlvbiB0aGF0IHNwZWNpZmljYWxseSBkZWFscyB3aXRoIGZyZWVpbmcgdGhlIHBoeXNpY2FsIGRpc2sgc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBgbG9gIGRldmljZSBvciB1bm1hcHBpbmcgaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgdW5tYXBwaW5nIHRoZSBiYWNraW5nIGRpc2ssIGNsZWFyaW5nIHJlc291cmNlcywgYW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCBgbG9vcF9yZW1vdmVgLiBBcmUgdGhleSBjYWxsZWQgaW4gc2VxdWVuY2UsIG9yIGRvZXMgb25lIGNhbGwgdGhlIG90aGVyP1xuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHJlc291cmNlIGxlYWtzLCBvciBpbmVmZmljaWVudCB1c2Ugb2Ygc3RvcmFnZSBkdXJpbmcgdGhpcyBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB3aWxsIGJlIGNydWNpYWwgZm9yIGNvbmZpcm1pbmcgbXkgdW5kZXJzdGFuZGluZy4gVGhpcyBpbnZlc3RpZ2F0aW9uIHNob3VsZCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgYGxvYCBkZXZpY2VzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzdGFydCB3aXRoIGBsb29wX2FkZGAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE5OjM3OjM4LjM4NjM1MzA4M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA4MCxcbiAgXCJMaW5lQ291bnRcIjogNzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA4MDpcXHRcXHRcXHRnb3RvIG91dF9jbGVhbnVwX3RhZ3M7XFxuMjA4MTpcXHRcXHR9XFxuMjA4MjpcXHRcXHRsby1cXHUwMDNlbG9fcXVldWUgPSBsby1cXHUwMDNlbG9fZGlzay1cXHUwMDNlcXVldWU7XFxuMjA4MzpcXHRcXG4yMDg0OlxcdFxcdC8qXFxuMjA4NTpcXHRcXHQgKiBEaXNhYmxlIHBhcnRpdGlvbiBzY2FubmluZyBieSBkZWZhdWx0LiBUaGUgaW4ta2VybmVsIHBhcnRpdGlvblxcbjIwODY6XFx0XFx0ICogc2Nhbm5pbmcgY2FuIGJlIHJlcXVlc3RlZCBpbmRpdmlkdWFsbHkgcGVyLWRldmljZSBkdXJpbmcgaXRzXFxuMjA4NzpcXHRcXHQgKiBzZXR1cC4gVXNlcnNwYWNlIGNhbiBhbHdheXMgYWRkIGFuZCByZW1vdmUgcGFydGl0aW9ucyBmcm9tIGFsbFxcbjIwODg6XFx0XFx0ICogZGV2aWNlcy4gVGhlIG5lZWRlZCBwYXJ0aXRpb24gbWlub3JzIGFyZSBhbGxvY2F0ZWQgZnJvbSB0aGVcXG4yMDg5OlxcdFxcdCAqIGV4dGVuZGVkIG1pbm9yIHNwYWNlLCB0aGUgbWFpbiBsb29wIGRldmljZSBudW1iZXJzIHdpbGwgY29udGludWVcXG4yMDkwOlxcdFxcdCAqIHRvIG1hdGNoIHRoZSBsb29wIG1pbm9ycywgcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnNcXG4yMDkxOlxcdFxcdCAqIHVzZWQuXFxuMjA5MjpcXHRcXHQgKlxcbjIwOTM6XFx0XFx0ICogSWYgbWF4X3BhcnQgaXMgZ2l2ZW4sIHBhcnRpdGlvbiBzY2FubmluZyBpcyBnbG9iYWxseSBlbmFibGVkIGZvclxcbjIwOTQ6XFx0XFx0ICogYWxsIGxvb3AgZGV2aWNlcy4gVGhlIG1pbm9ycyBmb3IgdGhlIG1haW4gbG9vcCBkZXZpY2VzIHdpbGwgYmVcXG4yMDk1OlxcdFxcdCAqIG11bHRpcGxlcyBvZiBtYXhfcGFydC5cXG4yMDk2OlxcdFxcdCAqXFxuMjA5NzpcXHRcXHQgKiBOb3RlOiBHbG9iYWwtZm9yLWFsbC1kZXZpY2VzLCBzZXQtb25seS1hdC1pbml0LCByZWFkLW9ubHkgbW9kdWxlXFxuMjA5ODpcXHRcXHQgKiBwYXJhbWV0ZXRlcnMgbGlrZSAnbWF4X2xvb3AnIGFuZCAnbWF4X3BhcnQnIG1ha2UgdGhpbmdzIG5lZWRsZXNzbHlcXG4yMDk5OlxcdFxcdCAqIGNvbXBsaWNhdGVkLCBhcmUgdG9vIHN0YXRpYywgaW5mbGV4aWJsZSBhbmQgbWF5IHN1cnByaXNlXFxuMjEwMDpcXHRcXHQgKiB1c2Vyc3BhY2UgdG9vbHMuIFBhcmFtZXRlcnMgbGlrZSB0aGlzIGluIGdlbmVyYWwgc2hvdWxkIGJlIGF2b2lkZWQuXFxuMjEwMTpcXHRcXHQgKi9cXG4yMTAyOlxcdFxcdGlmICghcGFydF9zaGlmdClcXG4yMTAzOlxcdFxcdFxcdHNldF9iaXQoR0RfU1VQUFJFU1NfUEFSVF9TQ0FOLCBcXHUwMDI2ZGlzay1cXHUwMDNlc3RhdGUpO1xcbjIxMDQ6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4yMTA1OlxcdFxcdGxvLVxcdTAwM2Vsb19udW1iZXJcXHRcXHQ9IGk7XFxuMjEwNjpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bG8tXFx1MDAzZWxvX2xvY2spO1xcbjIxMDc6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxvLVxcdTAwM2Vsb193b3JrX2xvY2spO1xcbjIxMDg6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZsby1cXHUwMDNlcm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7XFxuMjEwOTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKTtcXG4yMTEwOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZsby1cXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcXG4yMTExOlxcdFxcdGRpc2stXFx1MDAzZW1ham9yXFx0XFx0PSBMT09QX01BSk9SO1xcbjIxMTI6XFx0XFx0ZGlzay1cXHUwMDNlZmlyc3RfbWlub3JcXHQ9IGkgXFx1MDAzY1xcdTAwM2MgcGFydF9zaGlmdDtcXG4yMTEzOlxcdFxcdGRpc2stXFx1MDAzZW1pbm9yc1xcdFxcdD0gMSBcXHUwMDNjXFx1MDAzYyBwYXJ0X3NoaWZ0O1xcbjIxMTQ6XFx0XFx0ZGlzay1cXHUwMDNlZm9wc1xcdFxcdD0gXFx1MDAyNmxvX2ZvcHM7XFxuMjExNTpcXHRcXHRkaXNrLVxcdTAwM2Vwcml2YXRlX2RhdGFcXHQ9IGxvO1xcbjIxMTY6XFx0XFx0ZGlzay1cXHUwMDNlcXVldWVcXHRcXHQ9IGxvLVxcdTAwM2Vsb19xdWV1ZTtcXG4yMTE3OlxcdFxcdGRpc2stXFx1MDAzZWV2ZW50c1xcdFxcdD0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7XFxuMjExODpcXHRcXHRkaXNrLVxcdTAwM2VldmVudF9mbGFnc1xcdD0gRElTS19FVkVOVF9GTEFHX1VFVkVOVDtcXG4yMTE5OlxcdFxcdHNwcmludGYoZGlzay1cXHUwMDNlZGlza19uYW1lLCBcXFwibG9vcCVkXFxcIiwgaSk7XFxuMjEyMDpcXHRcXHQvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgcmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXFxuMjEyMTpcXHRcXHRlcnIgPSBhZGRfZGlzayhkaXNrKTtcXG4yMTIyOlxcdFxcdGlmIChlcnIpXFxuMjEyMzpcXHRcXHRcXHRnb3RvIG91dF9jbGVhbnVwX2Rpc2s7XFxuMjEyNDpcXHRcXG4yMTI1OlxcdFxcdC8qIFNob3cgdGhpcyBsb29wIGRldmljZS4gKi9cXG4yMTI2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmxvb3BfY3RsX211dGV4KTtcXG4yMTI3OlxcdFxcdGxvLVxcdTAwM2VpZHJfdmlzaWJsZSA9IHRydWU7XFxuMjEyODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxvb3BfY3RsX211dGV4KTtcXG4yMTI5OlxcdFxcbjIxMzA6XFx0XFx0cmV0dXJuIGk7XFxuMjEzMTpcXHRcXG4yMTMyOlxcdG91dF9jbGVhbnVwX2Rpc2s6XFxuMjEzMzpcXHRcXHRwdXRfZGlzayhkaXNrKTtcXG4yMTM0OlxcdG91dF9jbGVhbnVwX3RhZ3M6XFxuMjEzNTpcXHRcXHRibGtfbXFfZnJlZV90YWdfc2V0KFxcdTAwMjZsby1cXHUwMDNldGFnX3NldCk7XFxuMjEzNjpcXHRvdXRfZnJlZV9pZHI6XFxuMjEzNzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZsb29wX2N0bF9tdXRleCk7XFxuMjEzODpcXHRcXHRpZHJfcmVtb3ZlKFxcdTAwMjZsb29wX2luZGV4X2lkciwgaSk7XFxuMjEzOTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxvb3BfY3RsX211dGV4KTtcXG4yMTQwOlxcdG91dF9mcmVlX2RldjpcXG4yMTQxOlxcdFxcdGtmcmVlKGxvKTtcXG4yMTQyOlxcdG91dDpcXG4yMTQzOlxcdFxcdHJldHVybiBlcnI7XFxuMjE0NDpcXHR9XFxuMjE0NTpcXHRcXG4yMTQ2OlxcdHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuMjE0NzpcXHR7XFxuMjE0ODpcXHRcXHQvKiBDYW5jZWwgZWFybHk6IHRoZSBxdWV1ZSBtYXkgYmUgaW4gUkNVLWRlbGF5ZWQgZnJlZWluZ1xcbjIxNDk6XFx0XFx0ICogYnkgdGhlIHRpbWUgbG9fZnJlZV9kaXNrKCkgcnVucy4gKi9cXG4yMTUwOlxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfd29yayk7XFxuMjE1MTpcXHRcXG4yMTUyOlxcdFxcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xcbjIxNTM6XFx0XFx0ZGVsX2dlbmRpc2sobG8tXFx1MDAzZWxvX2Rpc2spO1xcbjIxNTQ6XFx0XFx0YmxrX21xX2ZyZWVfdGFnX3NldChcXHUwMDI2bG8tXFx1MDAzZXRhZ19zZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNzozOC4zODY1MjA3OTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4NDE2NzQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGluIGBsb29wX2FkZGAqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhlIGludGVybmFscyBvZiB0aGlzIGBsb29wX2FkZGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB2YXJpYWJsZSBgbG9gIGlzIGJlaW5nIGhhbmRsZWQgbWVtb3J5LXdpc2Ugd2l0aGluIHRoYXQgbG9vcC4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBpbmVmZmljaWVuY2llcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gaXRzIGFsbG9jYXRpb24uIElzIGl0IGJlaW5nIHJlLWFsbG9jYXRlZCBvbiBlYWNoIGl0ZXJhdGlvbiwgb3IgaXMgaXQgYXBwcm9wcmlhdGVseSBiZWluZyByZXVzZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIG1lbW9yeSBmb290cHJpbnQgaGVyZSBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBhbmQgcG90ZW50aWFsIGRlYnVnZ2luZyBkb3duIHRoZSBsaW5lLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2l0aCB0aGF0IHZhcmlhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjExOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6NDAuMTcwNjkyMDI3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDQwOlxcdFxcdGxvID0ga3phbGxvY19vYmooKmxvKTtcXG4yMDQxOlxcdFxcdGlmICghbG8pXFxuMjA0MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMDQzOlxcdFxcdGxvLVxcdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XFxuMjA0NDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bG8tXFx1MDAzZWlkbGVfd29ya2VyX2xpc3QpO1xcbjIwNDU6XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNmxvLVxcdTAwM2V0aW1lciwgbG9vcF9mcmVlX2lkbGVfd29ya2Vyc190aW1lciwgVElNRVJfREVGRVJSQUJMRSk7XFxuMjA0NjpcXHRcXHRXUklURV9PTkNFKGxvLVxcdTAwM2Vsb19zdGF0ZSwgTG9fdW5ib3VuZCk7XFxuMjA0NzpcXHRcXG4yMDQ4OlxcdFxcdGVyciA9IG11dGV4X2xvY2tfa2lsbGFibGUoXFx1MDAyNmxvb3BfY3RsX211dGV4KTtcXG4yMDQ5OlxcdFxcdGlmIChlcnIpXFxuMjA1MDpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2RldjtcXG4yMDUxOlxcdFxcbjIwNTI6XFx0XFx0LyogYWxsb2NhdGUgaWQsIGlmIEBpZCBcXHUwMDNlPSAwLCB3ZSdyZSByZXF1ZXN0aW5nIHRoYXQgc3BlY2lmaWMgaWQgKi9cXG4yMDUzOlxcdFxcdGlmIChpIFxcdTAwM2U9IDApIHtcXG4yMDU0OlxcdFxcdFxcdGVyciA9IGlkcl9hbGxvYyhcXHUwMDI2bG9vcF9pbmRleF9pZHIsIGxvLCBpLCBpICsgMSwgR0ZQX0tFUk5FTCk7XFxuMjA1NTpcXHRcXHRcXHRpZiAoZXJyID09IC1FTk9TUEMpXFxuMjA1NjpcXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbjIwNTc6XFx0XFx0fSBlbHNlIHtcXG4yMDU4OlxcdFxcdFxcdGVyciA9IGlkcl9hbGxvYyhcXHUwMDI2bG9vcF9pbmRleF9pZHIsIGxvLCAwLCAwLCBHRlBfS0VSTkVMKTtcXG4yMDU5OlxcdFxcdH1cXG4yMDYwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bG9vcF9jdGxfbXV0ZXgpO1xcbjIwNjE6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMjA2MjpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2RldjtcXG4yMDYzOlxcdFxcdGkgPSBlcnI7XFxuMjA2NDpcXHRcXG4yMDY1OlxcdFxcdGxvLVxcdTAwM2V0YWdfc2V0Lm9wcyA9IFxcdTAwMjZsb29wX21xX29wcztcXG4yMDY2OlxcdFxcdGxvLVxcdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IDE7XFxuMjA2NzpcXHRcXHRsby1cXHUwMDNldGFnX3NldC5xdWV1ZV9kZXB0aCA9IGh3X3F1ZXVlX2RlcHRoO1xcbjIwNjg6XFx0XFx0bG8tXFx1MDAzZXRhZ19zZXQubnVtYV9ub2RlID0gTlVNQV9OT19OT0RFO1xcbjIwNjk6XFx0XFx0bG8tXFx1MDAzZXRhZ19zZXQuY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IGxvb3BfY21kKTtcXG4yMDcwOlxcdFxcdGxvLVxcdTAwM2V0YWdfc2V0LmZsYWdzID0gQkxLX01RX0ZfU1RBQ0tJTkcgfCBCTEtfTVFfRl9OT19TQ0hFRF9CWV9ERUZBVUxUO1xcbjIwNzE6XFx0XFx0bG8tXFx1MDAzZXRhZ19zZXQuZHJpdmVyX2RhdGEgPSBsbztcXG4yMDcyOlxcdFxcbjIwNzM6XFx0XFx0ZXJyID0gYmxrX21xX2FsbG9jX3RhZ19zZXQoXFx1MDAyNmxvLVxcdTAwM2V0YWdfc2V0KTtcXG4yMDc0OlxcdFxcdGlmIChlcnIpXFxuMjA3NTpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2lkcjtcXG4yMDc2OlxcdFxcbjIwNzc6XFx0XFx0ZGlzayA9IGxvLVxcdTAwM2Vsb19kaXNrID0gYmxrX21xX2FsbG9jX2Rpc2soXFx1MDAyNmxvLVxcdTAwM2V0YWdfc2V0LCBcXHUwMDI2bGltLCBsbyk7XFxuMjA3ODpcXHRcXHRpZiAoSVNfRVJSKGRpc2spKSB7XFxuMjA3OTpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGRpc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxOTozNzo0MC4xNzA4ODEzMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg1NDExMzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBBIEtNU0FOIFBlcnNwZWN0aXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZyb20gYSBtZW1vcnkgc2FmZXR5IHN0YW5kcG9pbnQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB3aGV0aGVyIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgcmVxdWlyZWQuIEkndmUgZ290IHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuXG5cbkZpcnN0LCB0aGUga2V5IG9wZXJhdGlvbnMganVtcCBvdXQ6IHdlIGhhdmUgYSBgbG9gIHN0cnVjdHVyZSBhbGxvY2F0ZWQgYW5kIHplcm9lZCwgd29yayBpcyBpbml0aWFsaXplZCwgYXRvbWljIG9wZXJhdGlvbnMgYXJlIHVzZWQgdG8gbW9kaWZ5IGBjbGVhcl9saW1pdHNfbW9kZWAsIGFuZCB0aGUgYHF1ZXVlX2xpbWl0c2Agc3RydWN0dXJlIGlzIGhhbmRsZWQgdmlhIGBzdGFydF91cGRhdGVgIGFuZCBgY29tbWl0X3VwZGF0ZV9mcm96ZW5gLiBJJ20gc2VlaW5nIGludGVnZXIgZmllbGRzIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkIHdpdGhpbiB0aGUgYHF1ZXVlX2xpbWl0c2Agc3RydWN0IGFmdGVyIGl0J3MgY29waWVkLiBUaGVyZSdzIGFsc28gc3luY2hyb25vdXMgd29yayBjYW5jZWxsYXRpb24gb24gdGVhcmRvd24sIGFuZCBpbXBvcnRhbnRseSwgbm8gZGlyZWN0IHVzZXItc3BhY2UgZGF0YSBpbnRlcmFjdGlvbiBoZXJlLlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlIHBvdGVudGlhbCB0cm91YmxlIHNwb3RzLiBEZWFkbG9jayByaXNrcyBkdXJpbmcgcXVldWUgZnJlZXppbmcgYXJlIGEgY29uY2VybiwgYXMgaXMgdGhlIHBvc3NpYmlsaXR5IG9mIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3IgcmFjZXMgYmV0d2VlbiB0aGUgd29ya2VyIHRocmVhZCBhbmQgbG9vcCBkZXZpY2UgZGVzdHJ1Y3Rpb24uIFRoZXNlIGFyZSBjbGFzc2ljYWwgcmFjZSBjb25kaXRpb25zLiBXb3JrcXVldWUgY2FuY2VsbGF0aW9uIHJhY2VzIGFsc28gbmVlZCB0byBiZSBjb25zaWRlcmVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzeW5jaHJvbm91cyBjYWxsLlxuXG5JJ20gbm93IGdvaW5nIHRvIGRpdmUgZGVlcGVyIHRvIGRldGVybWluZSB3aGV0aGVyIEtNU0FOIGlzIG5lY2Vzc2FyeS4gSSd2ZSBnb3QgdG8gY2FyZWZ1bGx5IGFzc2VzcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQsIGFmdGVyIHNjcnV0aW5pemluZyB0aGUgY29kZSwgSSBzZWUgbm8gaW5kaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgb3IgdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMuIEV2ZXJ5dGhpbmcgbG9va3MgZWl0aGVyIGF0b21pYyBvciBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBmdW5jdGlvbiBwcm92aWRlcyBhIGZ1bGx5IGluaXRpYWxpemVkIGNvcHkuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gbXkgZXhwZXJ0IGFuYWx5c2lzIGFuZCBhIHJpZ29yb3VzIGFzc2Vzc21lbnQgb2YgYWxsIHRoZSBtb2RpZmllZCBmaWVsZHMsIEknbSBjb25maWRlbnQgdGhhdCBLTVNBTiBpc24ndCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhpcyBwYXRjaC4gTXkgYW5hbHlzaXMgYW5kIGV4cGVyaWVuY2UgYXJlIGluZGljYXRpbmcgdGhhdCB0aGUgcmlza3MgaGVyZSBhcmUgcHJpbWFyaWx5IGluIHJhY2UgY29uZGl0aW9ucyBhbmQgbG9ja2luZyBvcmRlciwgd2hpY2ggYXJlIGJlc3QgYWRkcmVzc2VkIHdpdGggS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgYW5kIExPQ0tERVAgKExvY2sgRGVwZW5kZW5jeSBWYWxpZGF0b3IpLiBLTVNBTiBpcyBjb25jZXJuZWQgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIGJhc2VkIG9uIHdoYXQgSSd2ZSBzZWVuLCBpdCdzIG5vdCBuZWVkZWQgaGVyZS5cblxuU28sIEknbSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU4gPSBmYWxzZWAgYW5kIHByb3ZpZGUgdGhlIGRldGFpbGVkIEtNU0FOIHJlYXNvbmluZyB0byByZWZsZWN0IG15IGFuYWx5c2lzLiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNDUsIk91dHB1dFRva2VucyI6MjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTk6Mzc6NDcuMDI0OTk4MTIyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB0cmFuc2l0aW9ucyB0aGUgbG9vcCBkcml2ZXIncyBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgbG9naWMgZnJvbSBzeW5jaHJvbm91cyBleGVjdXRpb24gaW5zaWRlIHJlcXVlc3QgaGFuZGxpbmcgdG8gYW4gYXN5bmNocm9ub3VzIHdvcmtxdWV1ZSAoYGNsZWFyX2xpbWl0c193b3JrYCkgdXNpbmcgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbigpYC5cXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3QgZmllbGRzIChgY2xlYXJfbGltaXRzX3dvcmtgIGFuZCBgY2xlYXJfbGltaXRzX21vZGVgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQ6IHRoZSBgbG9vcF9kZXZpY2VgIHN0cnVjdCBpcyB6ZXJvLWFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgdGhlIHdvcmsgaXRlbSBpcyBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUksoKWAsIGFuZCB0aGUgYXRvbWljIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgcmVzZXQgd2l0aCBgYXRvbWljX3NldGAgLyBhdG9taWMgb3BlcmF0aW9ucy4gVGhlIGBzdHJ1Y3QgcXVldWVfbGltaXRzYCB1c2VkIGluIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gIGlzIGluaXRpYWxpemVkIGZyb20gYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgKHdoaWNoIHJldHVybnMgdGhlIGN1cnJlbnQgcXVldWUgbGltaXRzKS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gQW55IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgb3IgcXVldWUgZnJlZXppbmcgbG9ja2luZyBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdHJhbnNpdGlvbnMgdGhlIGxvb3AgZHJpdmVyJ3MgcXVldWUgbGltaXRzIGNsZWFyaW5nIGxvZ2ljIGZyb20gc3luY2hyb25vdXMgZXhlY3V0aW9uIGluc2lkZSByZXF1ZXN0IGhhbmRsaW5nIHRvIGFuIGFzeW5jaHJvbm91cyB3b3JrcXVldWUgKGBjbGVhcl9saW1pdHNfd29ya2ApIHVzaW5nIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oKWAuXFxuXFxuQWxsIG5ld2x5IGludHJvZHVjZWQgc3RydWN0IGZpZWxkcyAoYGNsZWFyX2xpbWl0c193b3JrYCBhbmQgYGNsZWFyX2xpbWl0c19tb2RlYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkOiB0aGUgYGxvb3BfZGV2aWNlYCBzdHJ1Y3QgaXMgemVyby1hbGxvY2F0ZWQgdmlhIGBremFsbG9jX29iamAsIHRoZSB3b3JrIGl0ZW0gaXMgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLKClgLCBhbmQgdGhlIGF0b21pYyB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IHJlc2V0IHdpdGggYGF0b21pY19zZXRgIC8gYXRvbWljIG9wZXJhdGlvbnMuIFRoZSBgc3RydWN0IHF1ZXVlX2xpbWl0c2AgdXNlZCBpbiBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCBpcyBpbml0aWFsaXplZCBmcm9tIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClgICh3aGljaCByZXR1cm5zIHRoZSBjdXJyZW50IHF1ZXVlIGxpbWl0cykuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEFueSBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIG9yIHF1ZXVlIGZyZWV6aW5nIGxvY2tpbmcgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows57vp[1] Phase: Succeeded StartedAt: 2026-09-02 19:37:57 +0000 UTC FinishedAt: 2026-09-02 19:37:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 19:37:57 +0000 UTC FinishedAt: 2026-09-02 19:37:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2] Phase: Succeeded StartedAt: 2026-09-02 19:37:57 +0000 UTC FinishedAt: 2026-09-02 23:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:37:57 +0000 UTC FinishedAt: 2026-09-02 23:21:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:37:57 +0000 UTC FinishedAt: 2026-09-02 19:38:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:37:57 +0000 UTC FinishedAt: 2026-09-02 19:38:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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-workflows57vp/series-workflows57vp-convert-artifact-475413261/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:38:08 +0000 UTC FinishedAt: 2026-09-02 19:55:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:38:08 +0000 UTC FinishedAt: 2026-09-02 19:55:08 +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:*74cf0bce-8bb8-456d-8fd1-cb95605ae653,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-workflows57vp/series-workflows57vp-convert-artifact-475413261/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": "9ef0105f-1d55-4c90-8059-a2a024be5163", "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-workflows57vp/series-workflows57vp-build-action-218994307/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:38:08 +0000 UTC FinishedAt: 2026-09-02 19:54:58 +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:*74cf0bce-8bb8-456d-8fd1-cb95605ae653,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-workflows57vp/series-workflows57vp-convert-artifact-475413261/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": "9ef0105f-1d55-4c90-8059-a2a024be5163", "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-workflows57vp/series-workflows57vp-build-action-218994307/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:55:08 +0000 UTC FinishedAt: 2026-09-02 19:55:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:55:08 +0000 UTC FinishedAt: 2026-09-02 19:55:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:55:08 +0000 UTC FinishedAt: 2026-09-02 19:55:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:55:08 +0000 UTC FinishedAt: 2026-09-02 19:55:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-workflows57vp/series-workflows57vp-convert-artifact-555074920/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:55:18 +0000 UTC FinishedAt: 2026-09-02 19:57:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:55:18 +0000 UTC FinishedAt: 2026-09-02 19:57:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9ef0105f-1d55-4c90-8059-a2a024be5163,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-workflows57vp/series-workflows57vp-build-action-218994307/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-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:57:15 +0000 UTC FinishedAt: 2026-09-02 19:57:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:57:15 +0000 UTC FinishedAt: 2026-09-02 19:57:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:57:15 +0000 UTC FinishedAt: 2026-09-02 20:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:57:15 +0000 UTC FinishedAt: 2026-09-02 20:14:23 +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:*74cf0bce-8bb8-456d-8fd1-cb95605ae653,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-workflows57vp/series-workflows57vp-convert-artifact-555074920/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": "af5eb487-5f32-48ce-9254-823f2347c9e7", "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-workflows57vp/series-workflows57vp-build-action-1224899860/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 19:57:15 +0000 UTC FinishedAt: 2026-09-02 20:14:13 +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:*74cf0bce-8bb8-456d-8fd1-cb95605ae653,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-workflows57vp/series-workflows57vp-convert-artifact-555074920/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": "af5eb487-5f32-48ce-9254-823f2347c9e7", "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-workflows57vp/series-workflows57vp-build-action-1224899860/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 20:14:23 +0000 UTC FinishedAt: 2026-09-02 20:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 20:14:23 +0000 UTC FinishedAt: 2026-09-02 20:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 20:14:23 +0000 UTC FinishedAt: 2026-09-02 20:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 20:14:23 +0000 UTC FinishedAt: 2026-09-02 20:16:13 +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:*af5eb487-5f32-48ce-9254-823f2347c9e7,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-workflows57vp/series-workflows57vp-build-action-1224899860/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-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 20:16:23 +0000 UTC FinishedAt: 2026-09-02 23:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 20:16:23 +0000 UTC FinishedAt: 2026-09-02 23:21:22 +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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"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:*9ef0105f-1d55-4c90-8059-a2a024be5163,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*af5eb487-5f32-48ce-9254-823f2347c9e7,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-workflows57vp/series-workflows57vp-build-action-218994307/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-workflows57vp/series-workflows57vp-build-action-1224899860/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 20:16:23 +0000 UTC FinishedAt: 2026-09-02 20:16:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 20:16:23 +0000 UTC FinishedAt: 2026-09-02 20:16:28 +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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"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-workflows57vp/series-workflows57vp-convert-artifact-3711741089/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 20:16:23 +0000 UTC FinishedAt: 2026-09-02 20:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 20:16:23 +0000 UTC FinishedAt: 2026-09-02 20:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 20:16:23 +0000 UTC FinishedAt: 2026-09-02 20:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 20:16:33 +0000 UTC FinishedAt: 2026-09-02 23:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflows57vp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"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":["loop_clear_limits_workfn","loop_clear_limits","lo_fallocate","loop_configure"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"30acce16-60ce-442b-bc57-a1684c13593e","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-09-02 20:16:33 +0000 UTC FinishedAt: 2026-09-02 23:21:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9ef0105f-1d55-4c90-8059-a2a024be5163,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*af5eb487-5f32-48ce-9254-823f2347c9e7,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-workflows57vp/series-workflows57vp-build-action-218994307/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-workflows57vp/series-workflows57vp-build-action-1224899860/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-workflows57vp/series-workflows57vp-convert-artifact-3711741089/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,}