Name: series-workflowv4pnp Phase: Succeeded StartedAt: 2026-08-03 20:03:15 +0000 UTC FinishedAt: 2026-08-03 22:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[0] Phase: Succeeded StartedAt: 2026-08-03 20:03:15 +0000 UTC FinishedAt: 2026-08-03 20:20:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 20:03:15 +0000 UTC FinishedAt: 2026-08-03 20:20:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MDIO_REALTEK_RTL9300" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MDIO_REALTEK_RTL9300" ], "series_id": "81e29a5d-da23-4a33-9c6b-8605cc19faf9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "phy_attach_direct", "phy_detach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X2F0dGFjaF9kaXJlY3QmIzM0OywKICAgICYjMzQ7cGh5X2RldGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIGNhbGxiYWNrcyBpbiB0aGUgY29yZSBQSFkgZnJhbWV3b3JrIChgc3RydWN0IG1paV9idXNgKSBhbmQgbW9kaWZpZXMgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIHRvIHVzZSB0aGVtLiBJdCBhbHNvIGFkZHMgc3VwcG9ydCBmb3IgUlRMODM4MC9SVEw4MzkwIHRvIHRoZSBSZWFsdGVrIE1ESU8gZHJpdmVyIHdoaWNoIGltcGxlbWVudHMgdGhlc2UgY2FsbGJhY2tzLiBUaGUgY29yZSBQSFkgZnJhbWV3b3JrIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ5M2I3ZmQ3MmFiODRlYTg0ZDMxMTczNDJmMzc5MjRhNTJjZjhlM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjE5OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuaW5kZXggMjcxZTA1YmFlOWM1Ny4uNjdlMGIyM2E4NDcwZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5AQCAtNCw3ICYjNDM7NCw3IEBAXG4gJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCNcbiAkc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiBcbi10aXRsZTogUmVhbHRlayBSVEw5MzAwIE1ESU8gQ29udHJvbGxlclxuJiM0Mzt0aXRsZTogUmVhbHRlayBPdHRvIFN3aXRjaGVzIEV0aGVybmV0IE1ESU8gQ29udHJvbGxlclxuIFxuIG1haW50YWluZXJzOlxuICAgLSBDaHJpcyBQYWNraGFtIFx1MDAzY2NocmlzLnBhY2toYW1AYWxsaWVkdGVsZXNpcy5jby5uelx1MDAzZVxuQEAgLTEyLDYgJiM0MzsxMiwxNiBAQCBtYWludGFpbmVyczpcbiBwcm9wZXJ0aWVzOlxuICAgY29tcGF0aWJsZTpcbiAgICAgb25lT2Y6XG4mIzQzOyAgICAgIC0gaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODEtbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW9cbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvXG4mIzQzOyAgICAgIC0gaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvXG4gICAgICAgLSBpdGVtczpcbiAgICAgICAgICAgLSBlbnVtOlxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW9cbkBAIC0yNCw2ICYjNDM7MzQsOCBAQCBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTMtbWRpb1xuICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgwLW1kaW9cbiYjNDM7ICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cbiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpb1xuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMS1tZGlvXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXG5pbmRleCBhMDUyMjk4MzhjYjQ1Li5kNDQyNzhmMjZmYWJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcbkBAIC0xNzIsMTEgJiM0MzsxNzIsMTEgQEAgY29uZmlnIE1ESU9fSVBRODA2NFxuIFx0ICBpbnRlcmZhY2UgdW5pdHMgb2YgdGhlIElQUTgwNjQgU29DXG4gXG4gY29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXG4tXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiBcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcbiBcdGhlbHBcbiBcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gaW50ZXJmYWNlIGZvdW5kIGluIHRoZSBSZWFsdGVrXG4tXHQgIFJUTDkzMDAgZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXG4mIzQzO1x0ICBSVEw4M3h4L1JUTDkzeHggZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXG4gXG4gY29uZmlnIE1ESU9fUkVHTUFQXG4gXHR0cmlzdGF0ZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuaW5kZXggYWZkNTJhMWNkN2Y4My4uNzdkYzA0NjMwYzQ0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG5AQCAtMzUsNiAmIzQzOzM1LDgxIEBAXG4gICpcbiAgKiBUaGUgZHJpdmVyIHdvcmtzIG91dCB0aGUgbWFwcGluZyBiYXNlZCBvbiB0aGUgTURJTyBidXMgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlIGFuZCBwaGFuZGxlcyBvblxuICAqIHRoZSBldGhlcm5ldC1wb3J0cyBwcm9wZXJ0eS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0XG4mIzQzOyAqIGNvbnN0YW50bHkgc2NhbnMgdGhlIE1ESU8gYnVzIGFuZCB0aGUgYXR0YWNoZWQgUEhZcyBhbmQgdXBkYXRlcyB0aGUgTUFDIHN0YXR1cyByZWdpc3RlcnMuXG4mIzQzOyAqXG4mIzQzOyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/XG4mIzQzOyAqXG4mIzQzOyAqIEVhY2ggZGV2aWNlIGhhcyBhIFNNSV9QT0xMX0NUUkwgcmVnaXN0ZXIuIEEgcGVyLXBvcnQgYml0bWFzayBkZWNpZGVzIGlmIHRoZSBoYXJkd2FyZSBwb2xsaW5nIG9mXG4mIzQzOyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvclxuJiM0MzsgKiBlYWNoIHNldCBwb2xsaW5nIGJpdCBpdCBpc3N1ZXMgYSBzdGF0dXMgY2hlY2sgZm9yIHRoZSBQSFkuIEF0dGFjaGluZyBhIGxvZ2ljIGFuYWx5emVyIHRvIHRoZVxuJiM0MzsgKiBNRElPIGJ1cyBvZiBhbiBSVEw4MzgwIGFuZCBSVEw4MzkzIGdpdmVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKGluIGtlcm5lbCBub3RhdGlvbik6XG4mIzQzOyAqXG4mIzQzOyAqXHRSVEw4MzgwXHRcdFx0XHRSVEw4MzkzXG4mIzQzOyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMzEsIDB4MCk7XHRwaHlfcmVhZChwaHksIDApO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XHRwaHlfcmVhZChwaHksIDEpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1x0cGh5X3JlYWQocGh5LCA0KTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCA1KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMTQpO1x0XHRwaHlfcmVhZChwaHksIDYpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XHRwaHlfcmVhZChwaHksIDkpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1x0cGh5X3JlYWQocGh5LCAxMCk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcdHBoeV9yZWFkKHBoeSwgMTUpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCA5KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxMCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDEpO1x0XHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDQpO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCA2KTtcbiYjNDM7ICpcbiYjNDM7ICogQWZ0ZXIgb25lIFBIWSBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIElmIG9uZSBidXMgaXMgZnVsbHlcbiYjNDM7ICogc2Nhbm5lZCBpdCBzd2l0Y2hlcyBvdmVyIHRvIHRoZSBuZXh0IGJ1cy4gQmFzaWNhbGx5IHRoZSBwb2xsaW5nIHN5c3RlbSBpcyBhbHdheXMgYnVzeSBhbmQgdGhlXG4mIzQzOyAqIE1BQyBzdGF0ZSBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyBhIGdsaW1wc2UgbG9vayBhdCB0aGUgY29tcGxleGl0eSBvZiB0aGUgcG9sbGluZyBhbmQgbGVhdmVzIG91dCB0aGUgQzQ1IGNhc2UgYW5kIHRoZSBNQUNcbiYjNDM7ICogcmVnaXN0ZXIgdXBkYXRlIGxvZ2ljIGFmdGVyd2FyZHMuIEltcG9ydGFudCB0byBub3RlOlxuJiM0MzsgKlxuJiM0MzsgKiAtIDEwMCBNQml0IGRvd25zaGlmdHMgKGJyb2tlbiBjYWJsZXMpIGFyZSBpZGVudGlmaWVkIGFuZCBwcm9wYWdhdGVkIHRvIHRoZSBNQUMgY29ycmVjdGx5XG4mIzQzOyAqIC0gQWNjZXNzIHRvIE1ESU9fQU5fRUVFX0FEViBhbmQgTURJT19BTl9FRUVfTFBBQkxFIHdvcmtzIHZpYSBDNDUgb3ZlciBDMjIuXG4mIzQzOyAqIC0gSXQgaXMgdW5jbGVhciBpZiB0aGVzZSBzZXF1ZW5jZXMgY2hhbmdlIGZvciBkaWZmZXJlbnQgUEhZcy5cbiYjNDM7ICogLSBBY2Nlc3MgdG8gUmVhbHRlayByZXNlcnZlZCByZWdpc3RlciAyNiAobGluayBzcGVlZCkgaGFzIG5vdCB5ZXQgYmVlbiBzZWVuLlxuJiM0MzsgKlxuJiM0MzsgKiBIb3cgZG9lcyBNRElPIGFjY2VzcyBmcm9tIGtlcm5lbCB3b3JrP1xuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIGlzc3VpbmcgTURJTyBhY2Nlc3NlcyB2aWEgYW4gTU1JTyBiYXNlZCBpbnRlcmZhY2UgdGhlIGZpbmFsIHdyaXRlIHRvIHRoZSBjb21tYW5kIHJlZ2lzdGVyXG4mIzQzOyAqIHNldHMgYSBcJiMzNDtydW4gY29tbWFuZCBub3dcJiMzNDsgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlXG4mIzQzOyAqIGNoZWNrcyBpZiBhIHVzZXIgY29tbWFuZCBuZWVkcyB0byBydW4gYW5kIHNlbmRzIGl0IG9udG8gdGhlIGJ1cy4gQWZ0ZXJ3YXJkcyBpdCBzaW1wbHkgY29udGludWVzXG4mIzQzOyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgd3JpdGUgb24gdGhlIGxvZ2ljIGFuYWx5emVyIGdpdmVzOlxuJiM0MzsgKlxuJiM0MzsgKlx0UlRMODM4MFx0XHRcdFx0UlRMODM5M1xuJiM0MzsgKlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1x0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XG4mIzQzOyAqXHRcdFx0XHRcdHBoeV93cml0ZShwaHksIDMxLCAwKTtcbiYjNDM7ICpcbiYjNDM7ICogV2hhdCBkb2VzIHRoaXMgbWVhbj9cbiYjNDM7ICpcbiYjNDM7ICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZVxuJiM0MzsgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0XG4mIzQzOyAqIGhhcyBzb21lIGltcGxpY2F0aW9ucyBmb3IgdGhlIGtlcm5lbCBQSFkgc3Vic3lzdGVtLlxuJiM0MzsgKlxuJiM0MzsgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuXG4mIzQzOyAqICAgRXNwZWNpYWxseSBhbiB1bnBvcHVsYXRlZCBNQUNfTElOS19TVFMgcmVnaXN0ZXIgY2FuY2VscyBvcGVyYXRpb25zIHRvIG90aGVyIE1BQyByZWdpc3RlcnMuXG4mIzQzOyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGxcbiYjNDM7ICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtXG4mIzQzOyAqICAgdG8gdHJhY2sgdGhlIHBhZ2UgYWNjZXNzIFwmIzM0O21hZ2ljYWxseVwmIzM0OyBpbiB0aGUgYmFja2dyb3VuZC5cbiYjNDM7ICogLSBBIEM0NSBvdmVyIEMyMiBrZXJuZWwgYWNjZXNzIHNlcXVlbmNlIGlzIG1vc3QgbGlrZWx5IHRvIGZhaWwgYmVjYXVzZSBjaGFuY2VzIGFyZSBoaWdoIHRoYXRcbiYjNDM7ICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi5cbiYjNDM7ICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW5cbiYjNDM7ICogICBzZXF1ZW5jZSBvZiByZWdpc3RlcnMgYW5kIHZhbHVlcyB3aXRob3V0IGRldmlhdGlvbi5cbiYjNDM7ICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS5cbiYjNDM7ICpcbiYjNDM7ICogQ29uY2x1c2lvbjogVGhlIFJlYWx0ZWsgTURJTyBidXMgZHJpdmVyIFBIWSBhY2Nlc3MgbXVzdCBrbm93IGFuZCBoYW5kbGUgYW55IGludGVyZmVyZW5jZSB0aGF0XG4mIzQzOyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG5AQCAtNTAsNiAmIzQzOzEyNSw1MCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuIFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX0JVU0VTXHRcdFx0MVxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXHRcdFx0NDA5NlxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXHRcdFx0MjhcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFx0XHRcdDB4YTEwMFxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXHRcdDB4YTFiOFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXHRcdDB4YTFiY1xuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDI0LCAyMClcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFXHRcdEdFTk1BU0soMTksIDE1KVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0VcdFx0R0VOTUFTSygxNCwgMylcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQURcdFx0XHQwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1XHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUxcdFx0XHQwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzJcdFx0MHhhMWMwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcdFx0MHhhMWM0XG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhhMTdjXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhhMWM4XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX0JVU0VTXHRcdFx0MlxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTXHRcdFx0ODE5MlxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTXHRcdFx0NTJcbiYjNDM7I2RlZmluZSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkxcdFx0MHgwM2VjXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkxcdFx0MHgwM2RjXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSXHRcdEdFTk1BU0soOSwgNSlcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMjIsIDEwKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9GQUlMXHRcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFXHRcdEJJVCgzKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFEXHRcdFx0MFxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjJcdFx0MFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkxcdFx0XHQweDAzZTBcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0VcdFx0R0VOTUFTSyg4LCAwKVxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTFx0XHQweDAzZjBcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTFx0XHRcdDB4MDNmNFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcdFx0MHgwM2U0XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcdFx0MHgwM2U4XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcdFx0MHgwM2ZjXG4mIzQzO1xuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1x0XHRcdDQwOTZcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXHRcdFx0MjhcbkBAIC03MCw2ICYjNDM7MTg5LDcgQEBcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGNiN2NcbiYjNDM7I2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkxcdFx0XHQweGNhOTBcbiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMXHRcdDB4Y2I4MFxuIFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcdFx0XHQ0XG5AQCAtOTUsMTIgJiM0MzsyMTUsMTYgQEBcbiAjZGVmaW5lICAgUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0lORFJUX0FDQ0VTU19NTURfQ1RSTFx0MHgwYzE4XG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTFx0XHQweDBjNzRcbiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDBjY2NcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUxcdFx0MHgwYzljXG4gXG4gI2RlZmluZSBQSFlfQ1RSTF9DTURcdFx0XHRcdEJJVCgwKVxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFEXHRcdFx0R0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfUkVHXHRcdFx0R0VOTUFTSygxNSwgMClcbiBcbiYjNDM7I2RlZmluZSBSVExfVkVORE9SX0lEXHRcdFx0XHQweDAwMWNjODAwXG4mIzQzOyNkZWZpbmUgUlRMX1BBR0VfU0VMRUNUXHRcdFx0XHQzMVxuJiM0MztcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXHRcdFx0NlxuICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFJcdFx0XHQ1XG4gI2RlZmluZSBNQVBfQklUU19QRVJfQlVTXHRcdFx0MlxuQEAgLTEyNiw2ICYjNDM7MjUwLDcgQEAgc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7XG4gXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4gXHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdCBIVyBhY2Nlc3MgKi9cbiBcdERFQ0xBUkVfQklUTUFQKHZhbGlkX3BvcnRzLCBNQVhfUE9SVFMpO1xuJiM0MztcdHUxNiBwYWdlW01BWF9QT1JUU107XG4gXHR1OCBzbWlfYnVzW01BWF9QT1JUU107XG4gXHR1OCBzbWlfYWRkcltNQVhfUE9SVFNdO1xuIFx0Ym9vbCBzbWlfYnVzX2lzX2M0NVtNQVhfU01JX0JVU1NFU107XG5AQCAtMTQyLDYgJiM0MzsyNjcsNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHtcbiBcdHU4IG51bV9idXNlcztcbiBcdHU4IG51bV9wb3J0cztcbiBcdHUxNiBudW1fcGFnZXM7XG4mIzQzO1x0dTMyIHBvbGxfY3RybDtcbiBcdGludCAoKnNldHVwX2NvbnRyb2xsZXIpKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpO1xuIFx0aW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbiBcdGludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbkBAIC0xNzcsNiAmIzQzOzMwMywxMiBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuIFx0cmV0dXJuIGNoYW4tXHUwMDNlcHJpdjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIHByaXYtXHUwMDNlaW5mby1cdTAwM2Vwb2xsX2N0cmwgJiM0MzsgKHBvcnQgLyAzMikgKiA0LFxuJiM0MztcdFx0XHRcdCAgQklUKHBvcnQgJSAzMiksIGFjdGl2ZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpXG4ge1xuQEAgLTE4NSw5ICYjNDM7MzE3LDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHUzMiBjbWRzdGF0ZTtcbiBcdGludCByZXQ7XG4gXG4tXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqL1xuJiM0MztcdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmx5IHdyb25nICovXG4gXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cdTAwM2VyZWdtYXAsIGluZm8tXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXG4tXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIyNyw3ICYjNDM7MzU5LDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LVx1MDAzZXJlZ21hcCwgaW5mby1cdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcbi1cdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xuJiM0MztcdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjY0LDEzICYjNDM7Mzk2LDcwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVx1MDAzZWluZm8tXHUwMDNlY21kX3dyaXRlLCBjbWRfZGF0YSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuZXh0X3BhZ2VcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuZXh0X3BhZ2VcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuIHtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4gXHR9O1xuIFxuQEAgLTI4NCw3ICYjNDM7NDczLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuIFx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuIFx0fTtcbkBAIC0zMjQsNyAmIzQzOzUxMyw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmJyb2FkY2FzdFx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfQkNfUE9SVF9JRCwgcG9ydCksXG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0fTtcbiBcbiBcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMOTMxMF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG5AQCAtMzM2LDcgJiM0Mzs1MjUsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4gXHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4gXHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuQEAgLTM4Miw4ICYjNDM7NTcxLDEyIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKVxuIFx0aWYgKHBvcnQgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spXG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdGlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKVxuJiM0MztcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2VwYWdlW3BvcnRdO1xuJiM0MztcbiBcdFx0cmV0ID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXJlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCBcdTAwMjZ2YWx1ZSk7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIHJldCA/IHJldCA6IHZhbHVlO1xuIH1cbkBAIC0zOTcsOCAmIzQzOzU5MCwxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNlxuIFx0aWYgKHBvcnQgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spXG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdGlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKSB7XG4mIzQzO1x0XHRcdGlmICh2YWx1ZSBcdTAwM2U9IFJBV19QQUdFKHByaXYpKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VwYWdlW3BvcnRdID0gdmFsdWU7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmV0ID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXdyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ3MSw2ICYjNDM7NjczLDE1IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBIWV9QQVRDSF9ET05FIGVuYWJsZXMgUEhZIGNvbnRyb2wgdmlhIFNvQy4gVGhpcyBpcyByZXF1aXJlZCBmb3IgUEhZIGFjY2VzcywgaW5jbHVkaW5nXG4mIzQzO1x0ICogcGF0Y2hpbmcgYW5kIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgUEhZcyBhcmUgcHJvYmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDgzODBfU01JX0dMQl9DVFJMLCBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIHtcbiBcdHUzMiBnbGJfY3RybF9tYXNrID0gMCwgZ2xiX2N0cmxfdmFsID0gMDtcbkBAIC01MDcsNiAmIzQzOzcxOCw0OCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi1cdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBjaGFuLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHBvcnQ7XG4mIzQzO1xuJiM0MztcdC8qIFwmIzM0O3N5bmNcJiMzNDsgcGFnZSBpbiBjYXNlIG9mIHByZXZpb3VzbHkgZmFpbGVkIGF0dGFjaG1lbnQgKi9cbiYjNDM7XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbiYjNDM7XHRcdHByaXYtXHUwMDNlcGFnZVtwb3J0XSA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVx1MDAzZW1kaW9fYnVzXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXBoeV9pZF9jb21wYXJlX3ZlbmRvcihwaHlkZXYtXHUwMDNlcGh5X2lkLCBSVExfVkVORE9SX0lEKSkge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O09ubHkgUmVhbHRlayBQSFlzIGFsbG93ZWQgb24gQzIyIGJ1c1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXY7XG4mIzQzO1x0aW50IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cdTAwM2VtZGlvLmJ1cyk7XG4mIzQzO1x0cG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIFwmIzM0O3N5bmNcJiMzNDsgcGFnZSBmb3IgbmV4dCBhdHRhY2htZW50ICovXG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spXG4mIzQzO1x0XHRwcml2LVx1MDAzZXBhZ2VbcG9ydF0gPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAob3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKSlcbiYjNDM7XHRcdGRldl9lcnIoYnVzLVx1MDAzZXBhcmVudCwgXCYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxcblwmIzM0OywgcG9ydCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXG4ge1xuQEAgLTUzNiw2ICYjNDM7Nzg5LDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcbiBcdFx0YnVzLVx1MDAzZXdyaXRlID0gb3R0b19lbWRpb193cml0ZV9jMjI7XG4gXHR9XG4gXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuJiM0MztcdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XG4mIzQzO1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbiYjNDM7XG4gXHRjaGFuID0gYnVzLVx1MDAzZXByaXY7XG4gXHRjaGFuLVx1MDAzZW1kaW9fYnVzID0gbWRpb19idXM7XG4gXHRjaGFuLVx1MDAzZXByaXYgPSBwcml2O1xuQEAgLTYzMyw4ICYjNDM7ODg5LDEzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHQgKiAoaS5lLiBjbGF1c2UgNDUpLiBTZWxlY3QgMTBHUEhZIG1vZGUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIFBIWSB0aGF0XG4gXHRcdCAqIGRlY2xhcmVzIGNvbXBhdGlibGUgPSBcJiMzNDtldGhlcm5ldC1waHktaWVlZTgwMi4zLWM0NVwmIzM0Oy5cbiBcdFx0ICovXG4tXHRcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwaHlfZG4sIFwmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1XCYjMzQ7KSlcbiYjNDM7XHRcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwaHlfZG4sIFwmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1XCYjMzQ7KSkge1xuJiM0MztcdFx0XHRpZiAoIXByaXYtXHUwMDNlaW5mby1cdTAwM2VyZWFkX2M0NSB8fCAhcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXdyaXRlX2M0NSkge1xuJiM0MztcdFx0XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0XHRcdGdvdG8gcHV0X25vZGVzO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0cHJpdi1cdTAwM2VzbWlfYnVzX2lzX2M0NVtidXNdID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0X19zZXRfYml0KHBuLCBwcml2LVx1MDAzZXZhbGlkX3BvcnRzKTtcbiBcdFx0cHJpdi1cdTAwM2VzbWlfYnVzW3BuXSA9IGJ1cztcbkBAIC02NTIsNiAmIzQzOzkxMywxOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fbWFwX3BvcnRzKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZW51bV9wb3J0czsgcG9ydCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGVyciA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG5AQCAtNjcxLDYgJiM0Mzs5NDUsMTAgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcmVnbWFwKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VyZWdtYXApO1xuIFxuJiM0MztcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiBcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFxuIFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbkBAIC02OTYsNiAmIzQzOzk3NCw0NyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7XG4mIzQzO1x0LmFkZHJfbWFwX2Jhc2UgPSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiYjNDM7XHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXG4mIzQzO1x0LmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELFxuJiM0MztcdC5jbWRfd3JpdGUgPSBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFLFxuJiM0MztcdC5jbWRfcmVncyA9IHtcbiYjNDM7XHRcdC5jMjJfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xLFxuJiM0MztcdFx0LmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsXG4mIzQzO1x0XHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3cgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMCxcbiYjNDM7XHR9LFxuJiM0MztcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcbiYjNDM7XHQubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsXG4mIzQzO1x0Lm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLFxuJiM0MztcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXG4mIzQzO1x0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcixcbiYjNDM7XHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsXG4mIzQzO1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHtcbiYjNDM7XHQuY21kX2ZhaWwgPSBSVEw4MzkwX1BIWV9DVFJMX0ZBSUwsXG4mIzQzO1x0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxuJiM0MztcdC5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLFxuJiM0MztcdC5jbWRfcmVncyA9IHtcbiYjNDM7XHRcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXG4mIzQzO1x0XHQuYzIyX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTCxcbiYjNDM7XHRcdC5jNDVfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMLFxuJiM0MztcdFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcbiYjNDM7XHRcdC5pb19kYXRhID0gUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3cgPSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XLFxuJiM0MztcdFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXG4mIzQzO1x0fSxcbiYjNDM7XHQubnVtX2J1c2VzID0gUlRMODM5MF9OVU1fQlVTRVMsXG4mIzQzO1x0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxuJiM0MztcdC5udW1fcG9ydHMgPSBSVEw4MzkwX05VTV9QT1JUUyxcbiYjNDM7XHQucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXG4mIzQzO1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxuJiM0MztcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5hZGRyX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4gXHQuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsXG5AQCAtNzExLDYgJiM0MzsxMDMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XG4gXHQubnVtX2J1c2VzID0gUlRMOTMwMF9OVU1fQlVTRVMsXG4gXHQubnVtX3BvcnRzID0gUlRMOTMwMF9OVU1fUE9SVFMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXG4mIzQzO1x0LnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsXG5AQCAtNzM2LDYgJiM0MzsxMDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7XG4gXHQubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsXG4gXHQubnVtX3BvcnRzID0gUlRMOTMxMF9OVU1fUE9SVFMsXG4mIzQzO1x0LnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuIFx0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcixcbiBcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMixcbiBcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NSxcbkBAIC03NDQsNiAmIzQzOzEwNjUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscnRsODM4MC1tZGlvXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscnRsODM5MS1tZGlvXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM5MF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxydGw5MzAxLW1kaW9cJiMzNDssIC5kYXRhID0gXHUwMDI2b3R0b19lbWRpb185MzAwX2luZm8gfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHJ0bDkzMTEtbWRpb1wmIzM0OywgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LFxuIFx0e31cbkBAIC03NTUsNiAmIzQzOzEwNzgsNyBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvdHRvX2VtZGlvX2RyaXZlciA9IHtcbiBcdC5kcml2ZXIgPSB7XG4gXHRcdC5uYW1lID0gXCYjMzQ7bWRpby1ydGw5MzAwXCYjMzQ7LFxuIFx0XHQub2ZfbWF0Y2hfdGFibGUgPSBvdHRvX2VtZGlvX2lkcyxcbiYjNDM7XHRcdC5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSxcbiBcdH0sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggOTRiMmU4NWUwMGEzNy4uMWE0M2ZlYzAyMmFhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbkBAIC0xNzM0LDYgJiM0MzsxNzM0LDk2IEBAIHN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4gXHRyZXR1cm4gcGh5ZHJ2LVx1MDAzZWNvbmZpZ19pbnRyIFx1MDAyNlx1MDAyNiBwaHlkcnYtXHUwMDNlaGFuZGxlX2ludGVycnVwdDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHBoeV9kZXRhY2hfaW50ZXJuYWwoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBub3RpZnlfYnVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXY7XG4mIzQzO1x0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cztcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VkZXZsaW5rKSB7XG4mIzQzO1x0XHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVx1MDAzZWRldmxpbmspO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWRldmxpbmsgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VzeXNmc19saW5rcykge1xuJiM0MztcdFx0aWYgKGRldilcbiYjNDM7XHRcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2ZGV2LVx1MDAzZWRldi5rb2JqLCBcJiMzNDtwaHlkZXZcJiMzNDspO1xuJiM0MztcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmtvYmosIFwmIzM0O2F0dGFjaGVkX2RldlwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG4mIzQzO1x0XHRzeXNmc19yZW1vdmVfZmlsZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYua29iaixcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNmRldl9hdHRyX3BoeV9zdGFuZGFsb25lLmF0dHIpO1xuJiM0MztcbiYjNDM7XHRwaHlfc3VzcGVuZChwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAobm90aWZ5X2J1cyBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKVxuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdGlmIChkZXYpIHtcbiYjNDM7XHRcdHN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92O1xuJiM0MztcbiYjNDM7XHRcdC8qIGh3cHJvdiBtYXkgdGVjaG5pY2FsbHkgYmUgcHJvdGVjdGVkIGJ5IG9wcyBsb2NrIGJ1dFxuJiM0MztcdFx0ICogbm90IGZvciBkZXZpY2VzIHdpdGggYSBwaHlkZXYsIHNlZSBwaHlfbGlua190b3BvX2FkZF9waHkoKVxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRod3Byb3YgPSBydG5sX2RlcmVmZXJlbmNlKGRldi1cdTAwM2Vod3Byb3YpO1xuJiM0MztcdFx0LyogRGlzYWJsZSB0aW1lc3RhbXAgaWYgaXQgaXMgdGhlIG9uZSBzZWxlY3RlZCAqL1xuJiM0MztcdFx0aWYgKGh3cHJvdiBcdTAwMjZcdTAwMjYgaHdwcm92LVx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcbiYjNDM7XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2Vod3Byb3YsIE5VTEwpO1xuJiM0MztcdFx0XHRrZnJlZV9yY3UoaHdwcm92LCByY3VfaGVhZCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldi1cdTAwM2VwaHlkZXYgPSBOVUxMO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiA9IE5VTEw7XG4mIzQzO1x0XHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBoeWxpbmsgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmRyaXZlcilcbiYjNDM7XHRcdG1vZHVsZV9wdXQocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmRyaXZlci1cdTAwM2Vvd25lcik7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdFxuJiM0MztcdCAqIHdhcyB1c2luZyB0aGUgZ2VuZXJpYyBkcml2ZXIpLCB3ZSB1bmJpbmQgdGhlIGRldmljZVxuJiM0MztcdCAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUmIzM5O3MgYSBjaGFuY2UgYVxuJiM0MztcdCAqIHJlYWwgZHJpdmVyIGNvdWxkIGJlIGxvYWRlZFxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbikge1xuJiM0MztcdFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuJiM0MztcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgcGh5ZGV2IG1pZ2h0IGdvIGF3YXkgb24gdGhlIHB1dF9kZXZpY2UoKSBiZWxvdywgc28gYXZvaWRcbiYjNDM7XHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4mIzQzO1xuJiM0MztcdHB1dF9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiYjNDM7XHRpZiAoZGV2KVxuJiM0MztcdFx0bmRldl9vd25lciA9IGRldi1cdTAwM2VkZXYucGFyZW50LVx1MDAzZWRyaXZlci1cdTAwM2Vvd25lcjtcbiYjNDM7XHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4mIzQzO1x0XHRtb2R1bGVfcHV0KGJ1cy1cdTAwM2Vvd25lcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxuJiM0MzsgKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdC8qIGNsZWFudXAgaW5jbHVkaW5nIGJ1cyBub3RpZmljYXRpb24gKi9cbiYjNDM7XHRwaHlfZGV0YWNoX2ludGVybmFsKHBoeWRldiwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcbiYjNDM7XG4gLyoqXG4gICogcGh5X2F0dGFjaF9kaXJlY3QgLSBhdHRhY2ggYSBuZXR3b3JrIGRldmljZSB0byBhIGdpdmVuIFBIWSBkZXZpY2UgcG9pbnRlclxuICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxuQEAgLTE4NzYsNiAmIzQzOzE5NjYsMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycm9yO1xuIFxuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcbiYjNDM7XHRcdGVyciA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBlcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cGh5X3Jlc3VtZShwaHlkZXYpO1xuIFxuIFx0LyoqXG5AQCAtMTg5MCw4ICYjNDM7MTk4Niw4IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0cmV0dXJuIGVycjtcbiBcbiBlcnJvcjpcbi1cdC8qIHBoeV9kZXRhY2goKSBkb2VzIGFsbCBvZiB0aGUgY2xlYW51cCBiZWxvdyAqL1xuLVx0cGh5X2RldGFjaChwaHlkZXYpO1xuJiM0MztcdC8qIGNsZWFudXAgd2l0aG91dCBidXMgbm90aWZpY2F0aW9uICovXG4mIzQzO1x0cGh5X2RldGFjaF9pbnRlcm5hbChwaHlkZXYsIGZhbHNlKTtcbiBcdHJldHVybiBlcnI7XG4gXG4gZXJyb3JfbW9kdWxlX3B1dDpcbkBAIC0xOTA2LDg2ICYjNDM7MjAwMiw2IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIH1cbiBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcbiBcbi0vKipcbi0gKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxuLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuLSAqXG4tICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxuLSAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS5cbi0gKi9cbi12b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldjtcbi1cdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xuLVx0c3RydWN0IG1paV9idXMgKmJ1cztcbi1cbi1cdGlmIChwaHlkZXYtXHUwMDNlZGV2bGluaykge1xuLVx0XHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVx1MDAzZWRldmxpbmspO1xuLVx0XHRwaHlkZXYtXHUwMDNlZGV2bGluayA9IE5VTEw7XG4tXHR9XG4tXG4tXHRpZiAocGh5ZGV2LVx1MDAzZXN5c2ZzX2xpbmtzKSB7XG4tXHRcdGlmIChkZXYpXG4tXHRcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2ZGV2LVx1MDAzZWRldi5rb2JqLCBcJiMzNDtwaHlkZXZcJiMzNDspO1xuLVx0XHRzeXNmc19yZW1vdmVfbGluayhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYua29iaiwgXCYjMzQ7YXR0YWNoZWRfZGV2XCYjMzQ7KTtcbi1cdH1cbi1cbi1cdGlmICghcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldilcbi1cdFx0c3lzZnNfcmVtb3ZlX2ZpbGUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmtvYmosXG4tXHRcdFx0XHQgIFx1MDAyNmRldl9hdHRyX3BoeV9zdGFuZGFsb25lLmF0dHIpO1xuLVxuLVx0cGh5X3N1c3BlbmQocGh5ZGV2KTtcbi1cdGlmIChkZXYpIHtcbi1cdFx0c3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7XG4tXG4tXHRcdC8qIGh3cHJvdiBtYXkgdGVjaG5pY2FsbHkgYmUgcHJvdGVjdGVkIGJ5IG9wcyBsb2NrIGJ1dFxuLVx0XHQgKiBub3QgZm9yIGRldmljZXMgd2l0aCBhIHBoeWRldiwgc2VlIHBoeV9saW5rX3RvcG9fYWRkX3BoeSgpXG4tXHRcdCAqL1xuLVx0XHRod3Byb3YgPSBydG5sX2RlcmVmZXJlbmNlKGRldi1cdTAwM2Vod3Byb3YpO1xuLVx0XHQvKiBEaXNhYmxlIHRpbWVzdGFtcCBpZiBpdCBpcyB0aGUgb25lIHNlbGVjdGVkICovXG4tXHRcdGlmIChod3Byb3YgXHUwMDI2XHUwMDI2IGh3cHJvdi1cdTAwM2VwaHlkZXYgPT0gcGh5ZGV2KSB7XG4tXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2Vod3Byb3YsIE5VTEwpO1xuLVx0XHRcdGtmcmVlX3JjdShod3Byb3YsIHJjdV9oZWFkKTtcbi1cdFx0fVxuLVxuLVx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LVx1MDAzZXBoeWRldiA9IE5VTEw7XG4tXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xuLVx0XHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xuLVx0fVxuLVxuLVx0cGh5ZGV2LVx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XG4tXHRwaHlkZXYtXHUwMDNlcGh5bGluayA9IE5VTEw7XG4tXG4tXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmRyaXZlcilcbi1cdFx0bW9kdWxlX3B1dChwaHlkZXYtXHUwMDNlbWRpby5kZXYuZHJpdmVyLVx1MDAzZW93bmVyKTtcbi1cbi1cdC8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdFxuLVx0ICogd2FzIHVzaW5nIHRoZSBnZW5lcmljIGRyaXZlciksIHdlIHVuYmluZCB0aGUgZGV2aWNlXG4tXHQgKiBmcm9tIHRoZSBnZW5lcmljIGRyaXZlciBzbyB0aGF0IHRoZXJlJiMzOTtzIGEgY2hhbmNlIGFcbi1cdCAqIHJlYWwgZHJpdmVyIGNvdWxkIGJlIGxvYWRlZFxuLVx0ICovXG4tXHRpZiAocGh5ZGV2LVx1MDAzZWlzX2dlbnBoeV9kcml2ZW4pIHtcbi1cdFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4tXHRcdHBoeWRldi1cdTAwM2Vpc19nZW5waHlfZHJpdmVuID0gMDtcbi1cdH1cbi1cbi1cdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXG4tXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XG4tXG4tXHQvKlxuLVx0ICogVGhlIHBoeWRldiBtaWdodCBnbyBhd2F5IG9uIHRoZSBwdXRfZGV2aWNlKCkgYmVsb3csIHNvIGF2b2lkXG4tXHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cbi1cdCAqL1xuLVx0YnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuLVxuLVx0cHV0X2RldmljZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuLVx0aWYgKGRldilcbi1cdFx0bmRldl9vd25lciA9IGRldi1cdTAwM2VkZXYucGFyZW50LVx1MDAzZWRyaXZlci1cdTAwM2Vvd25lcjtcbi1cdGlmIChuZGV2X293bmVyICE9IGJ1cy1cdTAwM2Vvd25lcilcbi1cdFx0bW9kdWxlX3B1dChidXMtXHUwMDNlb3duZXIpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xuLVxuIGludCBwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCA1ZjhkNjU4NjhlMGZmLi4zZDhhZmU2YjdmMWM1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTM3Niw2ICYjNDM7Mzc2LDI0IEBAIHN0cnVjdCBtaWlfYnVzIHtcbiBcdFx0XHQgaW50IHJlZ251bSwgdTE2IHZhbCk7XG4gXHQvKiogQHJlc2V0OiBQZXJmb3JtIGEgcmVzZXQgb2YgdGhlIGJ1cyAqL1xuIFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xuJiM0MztcdC8qKlxuJiM0MztcdCAqIEBub3RpZnlfcGh5X2F0dGFjaDogUGVyZm9ybSBwb3N0LWF0dGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcbiYjNDM7XHQgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfZGV0YWNoLiBDYWxsZWRcbiYjNDM7XHQgKiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpIHJpZ2h0IGJlZm9yZSBwaHlfcmVzdW1lKCkuIFJ1bnMgaW4gcHJvY2Vzc1xuJiM0MztcdCAqIGNvbnRleHQsIG1heSBzbGVlcCBhbmQgbWF5IGJlIGNhbGxlZCB3aXRoIFJUTkwgaGVsZC4gTXVzdCBub3RcbiYjNDM7XHQgKiBhY3F1aXJlIG9yIHJlbHkgb24gUlROTC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJybm9cbiYjNDM7XHQgKiBvbiBmYWlsdXJlLiBNdXN0IHVud2luZCBpdHMgb3duIHN0YXRlIG9uIGVycm9yIGFzIGF0dGFjaG1lbnQgaXNcbiYjNDM7XHQgKiBhYm9ydGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiYjNDM7XHQvKipcbiYjNDM7XHQgKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcbiYjNDM7XHQgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfYXR0YWNoLiBDYWxsZWRcbiYjNDM7XHQgKiBpbiBwaHlfZGV0YWNoKCkgcmlnaHQgYWZ0ZXIgcGh5X3N1c3BlbmQoKS4gUnVucyBpbiBwcm9jZXNzIGNvbnRleHQsXG4mIzQzO1x0ICogbWF5IHNsZWVwIGFuZCBtYXkgYmUgY2FsbGVkIHdpdGggUlROTCBoZWxkLiBNdXN0IG5vdCBhY3F1aXJlIG9yXG4mIzQzO1x0ICogcmVseSBvbiBSVE5MLlxuJiM0MztcdCAqL1xuJiM0MztcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gXG4gXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXG4gXHRzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TURJT19SRUFMVEVLX1JUTDkzMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfYXR0YWNoX2RpcmVjdCYjMzQ7LAogICAgJiMzNDtwaHlfZGV0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIGluIHRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgKGBzdHJ1Y3QgbWlpX2J1c2ApIGFuZCBtb2RpZmllcyBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgdG8gdXNlIHRoZW0uIEl0IGFsc28gYWRkcyBzdXBwb3J0IGZvciBSVEw4MzgwL1JUTDgzOTAgdG8gdGhlIFJlYWx0ZWsgTURJTyBkcml2ZXIgd2hpY2ggaW1wbGVtZW50cyB0aGVzZSBjYWxsYmFja3MuIFRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDkzYjdmZDcyYWI4NGVhODRkMzExNzM0MmYzNzkyNGE1MmNmOGUzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMjA6MTk6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwKaW5kZXggMjcxZTA1YmFlOWM1Ny4uNjdlMGIyM2E4NDcwZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbApAQCAtNCw3ICYjNDM7NCw3IEBACiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIwogJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiAKLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyCiYjNDM7dGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXIKIAogbWFpbnRhaW5lcnM6CiAgIC0gQ2hyaXMgUGFja2hhbSAmbHQ7Y2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56Jmd0OwpAQCAtMTIsNiAmIzQzOzEyLDE2IEBAIG1haW50YWluZXJzOgogcHJvcGVydGllczoKICAgY29tcGF0aWJsZToKICAgICBvbmVPZjoKJiM0MzsgICAgICAtIGl0ZW1zOgomIzQzOyAgICAgICAgICAtIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpbwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpbwomIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpbwogICAgICAgLSBpdGVtczoKICAgICAgICAgICAtIGVudW06CiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvCkBAIC0yNCw2ICYjNDM7MzQsOCBAQCBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvCiAgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw5MzExLW1kaW8KICAgICAgIC0gZW51bToKJiM0MzsgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpbwomIzQzOyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvCiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpbwogICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnCmluZGV4IGEwNTIyOTgzOGNiNDUuLmQ0NDI3OGYyNmZhYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcKQEAgLTE3MiwxMSAmIzQzOzE3MiwxMSBAQCBjb25maWcgTURJT19JUFE4MDY0CiAJICBpbnRlcmZhY2UgdW5pdHMgb2YgdGhlIElQUTgwNjQgU29DCiAKIGNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMAotCXRyaXN0YXRlICYjMzQ7UmVhbHRlayBSVEw5MzAwIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnQmIzM0OwomIzQzOwl0cmlzdGF0ZSAmIzM0O1JlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IE1ESU8gaW50ZXJmYWNlIHN1cHBvcnQmIzM0OwogCWRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1QKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgTURJTyBpbnRlcmZhY2UgZm91bmQgaW4gdGhlIFJlYWx0ZWsKLQkgIFJUTDkzMDAgZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuCiYjNDM7CSAgUlRMODN4eC9SVEw5M3h4IGZhbWlseSBvZiBFdGhlcm5ldCBzd2l0Y2hlcyB3aXRoIGludGVncmF0ZWQgU29DLgogCiBjb25maWcgTURJT19SRUdNQVAKIAl0cmlzdGF0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jCmluZGV4IGFmZDUyYTFjZDdmODMuLjc3ZGMwNDYzMGM0NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMKQEAgLTM1LDYgJiM0MzszNSw4MSBAQAogICoKICAqIFRoZSBkcml2ZXIgd29ya3Mgb3V0IHRoZSBtYXBwaW5nIGJhc2VkIG9uIHRoZSBNRElPIGJ1cyBkZXNjcmliZWQgaW4gZGV2aWNlIHRyZWUgYW5kIHBoYW5kbGVzIG9uCiAgKiB0aGUgZXRoZXJuZXQtcG9ydHMgcHJvcGVydHkuCiYjNDM7ICoKJiM0MzsgKiBUaGUgZGV2aWNlcyBoYXZlIGEgaGFyZHdhcmUgcG9sbGluZyB1bml0IHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB3aXRob3V0IGFueSBDUFUgbG9hZC4gSXQKJiM0MzsgKiBjb25zdGFudGx5IHNjYW5zIHRoZSBNRElPIGJ1cyBhbmQgdGhlIGF0dGFjaGVkIFBIWXMgYW5kIHVwZGF0ZXMgdGhlIE1BQyBzdGF0dXMgcmVnaXN0ZXJzLgomIzQzOyAqCiYjNDM7ICogSG93IGRvZXMgdGhlIHBvbGxpbmcgd29yaz8KJiM0MzsgKgomIzQzOyAqIEVhY2ggZGV2aWNlIGhhcyBhIFNNSV9QT0xMX0NUUkwgcmVnaXN0ZXIuIEEgcGVyLXBvcnQgYml0bWFzayBkZWNpZGVzIGlmIHRoZSBoYXJkd2FyZSBwb2xsaW5nIG9mCiYjNDM7ICogdGhlIGFzc29jaWF0ZWQgYnVzL2FkZHJlc3MgaXMgYWN0aXZlIG9yIG5vdC4gVGhlIGhhcmR3YXJlIHJ1bnMgYSB0aWdodCBsb29wIG92ZXIgdGhpcyBhbmQgZm9yCiYjNDM7ICogZWFjaCBzZXQgcG9sbGluZyBiaXQgaXQgaXNzdWVzIGEgc3RhdHVzIGNoZWNrIGZvciB0aGUgUEhZLiBBdHRhY2hpbmcgYSBsb2dpYyBhbmFseXplciB0byB0aGUKJiM0MzsgKiBNRElPIGJ1cyBvZiBhbiBSVEw4MzgwIGFuZCBSVEw4MzkzIGdpdmVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKGluIGtlcm5lbCBub3RhdGlvbik6CiYjNDM7ICoKJiM0MzsgKglSVEw4MzgwCQkJCVJUTDgzOTMKJiM0MzsgKgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMzEsIDB4MCk7CXBoeV9yZWFkKHBoeSwgMCk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CXBoeV9yZWFkKHBoeSwgMSk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpOwlwaHlfcmVhZChwaHksIDQpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpOwlwaHlfcmVhZChwaHksIDUpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMTQpOwkJcGh5X3JlYWQocGh5LCA2KTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg3KTsJcGh5X3JlYWQocGh5LCA5KTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7CXBoeV9yZWFkKHBoeSwgMTApOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpOwlwaHlfcmVhZChwaHksIDE1KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDE0KTsJCXBoeV93cml0ZShwaHksIDEzLCAweDcpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgOSk7CQlwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxMCk7CQlwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDE1KTsJCXBoeV9yZWFkKHBoeSwgMTQpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMCk7CQlwaHlfd3JpdGUocGh5LCAxMywgMHg3KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDEpOwkJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgNCk7CQlwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDUpOwkJcGh5X3JlYWQocGh5LCAxNCk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCA2KTsKJiM0MzsgKgomIzQzOyAqIEFmdGVyIG9uZSBQSFkgc3RhdHVzIGlzIHJlYWQsIHRoZSBwb2xsaW5nIGVuZ2luZSBnb2VzIG92ZXIgdG8gdGhlIG5leHQgUEhZLiBJZiBvbmUgYnVzIGlzIGZ1bGx5CiYjNDM7ICogc2Nhbm5lZCBpdCBzd2l0Y2hlcyBvdmVyIHRvIHRoZSBuZXh0IGJ1cy4gQmFzaWNhbGx5IHRoZSBwb2xsaW5nIHN5c3RlbSBpcyBhbHdheXMgYnVzeSBhbmQgdGhlCiYjNDM7ICogTUFDIHN0YXRlIGlzIHVwZGF0ZWQgaW4gcmVhbC10aW1lLgomIzQzOyAqCiYjNDM7ICogVGhpcyBpcyBhIGdsaW1wc2UgbG9vayBhdCB0aGUgY29tcGxleGl0eSBvZiB0aGUgcG9sbGluZyBhbmQgbGVhdmVzIG91dCB0aGUgQzQ1IGNhc2UgYW5kIHRoZSBNQUMKJiM0MzsgKiByZWdpc3RlciB1cGRhdGUgbG9naWMgYWZ0ZXJ3YXJkcy4gSW1wb3J0YW50IHRvIG5vdGU6CiYjNDM7ICoKJiM0MzsgKiAtIDEwMCBNQml0IGRvd25zaGlmdHMgKGJyb2tlbiBjYWJsZXMpIGFyZSBpZGVudGlmaWVkIGFuZCBwcm9wYWdhdGVkIHRvIHRoZSBNQUMgY29ycmVjdGx5CiYjNDM7ICogLSBBY2Nlc3MgdG8gTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgd29ya3MgdmlhIEM0NSBvdmVyIEMyMi4KJiM0MzsgKiAtIEl0IGlzIHVuY2xlYXIgaWYgdGhlc2Ugc2VxdWVuY2VzIGNoYW5nZSBmb3IgZGlmZmVyZW50IFBIWXMuCiYjNDM7ICogLSBBY2Nlc3MgdG8gUmVhbHRlayByZXNlcnZlZCByZWdpc3RlciAyNiAobGluayBzcGVlZCkgaGFzIG5vdCB5ZXQgYmVlbiBzZWVuLgomIzQzOyAqCiYjNDM7ICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz8KJiM0MzsgKgomIzQzOyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXIKJiM0MzsgKiBzZXRzIGEgJiMzNDtydW4gY29tbWFuZCBub3cmIzM0OyBiaXQuIEJldHdlZW4gdHdvIHBvbGxpbmcgc2VxdWVuY2VzIGZvciBkaWZmZXJlbnQgUEhZcyB0aGUgaGFyZHdhcmUKJiM0MzsgKiBjaGVja3MgaWYgYSB1c2VyIGNvbW1hbmQgbmVlZHMgdG8gcnVuIGFuZCBzZW5kcyBpdCBvbnRvIHRoZSBidXMuIEFmdGVyd2FyZHMgaXQgc2ltcGx5IGNvbnRpbnVlcwomIzQzOyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgd3JpdGUgb24gdGhlIGxvZ2ljIGFuYWx5emVyIGdpdmVzOgomIzQzOyAqCiYjNDM7ICoJUlRMODM4MAkJCQlSVEw4MzkzCiYjNDM7ICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqCXBoeV93cml0ZShwaHksIDMxLCBwYWdlKTsJcGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpOwlwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTsKJiM0MzsgKgkJCQkJcGh5X3dyaXRlKHBoeSwgMzEsIDApOwomIzQzOyAqCiYjNDM7ICogV2hhdCBkb2VzIHRoaXMgbWVhbj8KJiM0MzsgKgomIzQzOyAqIFRoZXJlIGFyZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gcG9sbGluZyBhbmQgUEhZIGFjY2VzcyBiZXR3ZWVuIHRoZSBtb2RlbHMgYnV0IHRoZSBjaGFsbGVuZ2UKJiM0MzsgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0CiYjNDM7ICogaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsIFBIWSBzdWJzeXN0ZW0uCiYjNDM7ICoKJiM0MzsgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuCiYjNDM7ICogICBFc3BlY2lhbGx5IGFuIHVucG9wdWxhdGVkIE1BQ19MSU5LX1NUUyByZWdpc3RlciBjYW5jZWxzIG9wZXJhdGlvbnMgdG8gb3RoZXIgTUFDIHJlZ2lzdGVycy4KJiM0MzsgKiAtIFRoZSBSZWFsdGVrIHBhZ2UgcmVnaXN0ZXIgMzEgaXMgbWFnaWNhbGx5IG1vZGlmaWVkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIHRoYXQgcG9sbGluZyB3aWxsCiYjNDM7ICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtCiYjNDM7ICogICB0byB0cmFjayB0aGUgcGFnZSBhY2Nlc3MgJiMzNDttYWdpY2FsbHkmIzM0OyBpbiB0aGUgYmFja2dyb3VuZC4KJiM0MzsgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdAomIzQzOyAqICAgdGhlIHBvbGxpbmcgZW5naW5lIG92ZXJ3cml0ZXMgcmVnaXN0ZXJzIDEzLzE0IGluIGJldHdlZW4uCiYjNDM7ICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW4KJiM0MzsgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLgomIzQzOyAqIC0gQW4gYWNjZXNzIHRvIG9uZSBQSFkgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGZyZWUgc2xvdCBvZiB0aGUgcG9sbGluZyBlbmdpbmUuCiYjNDM7ICoKJiM0MzsgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXQKJiM0MzsgKiBhcmlzZXMgZnJvbSB0aGUgYWJvdmUgZGVzY3JpYmVkIGhhcmR3YXJlIHBvbGxpbmcuCiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CkBAIC01MCw2ICYjNDM7MTI1LDUwIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yZWdtYXAuaCZndDsKIAomIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVMJCQkxCiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9QQUdFUwkJCTQwOTYKJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTCQkJMjgKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMCQkJMHhhMTAwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FCQlCSVQoMTUpCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMAkJMHhhMWI4CiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMQkJMHhhMWJjCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIJCUdFTk1BU0soMjQsIDIwKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRQkJR0VOTUFTSygxOSwgMTUpCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFCQlHRU5NQVNLKDE0LCAzKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFCQlCSVQoMikKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUFECQkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1CQlCSVQoMSkKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMgkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwJCQkwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMgkJMHhhMWMwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDMxLCAxNikKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBCQkJR0VOTUFTSygxNSwgMCkKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zCQkweGExYzQKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX1BPTExfQ1RSTAkJCTB4YTE3YwomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwJCTB4YTFjOAomIzQzOwomIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fQlVTRVMJCQkyCiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9QQUdFUwkJCTgxOTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTCQkJNTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTAkJMHgwM2VjCiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTAkJMHgwM2RjCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIJCUdFTk1BU0soOSwgNSkKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UJCUdFTk1BU0soMjIsIDEwKQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0ZBSUwJCQlCSVQoMSkKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURQkJQklUKDMpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVBRAkJCTAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NQkJQklUKDIpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIJCTAKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkwJCQkweDAzZTAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRQkJR0VOTUFTSyg4LCAwKQomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMCQkweDAzZjAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEJCUdFTk1BU0soMzEsIDE2KQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwJCQkweDAzZjQKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1cJCTB4MDNlNAomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gJCTB4MDNlOAomIzQzOyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwJCTB4MDNmYwomIzQzOwogI2RlZmluZSBSVEw5MzAwX05VTV9CVVNFUwkJCTQKICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVMJCQk0MDk2CiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTCQkJMjgKQEAgLTcwLDYgJiM0MzsxODksNyBAQAogI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDMxLCAxNikKICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQogI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMwkJMHhjYjdjCiYjNDM7I2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwJCQkweGNhOTAKICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwJCTB4Y2I4MAogCiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTCQkJNApAQCAtOTUsMTIgJiM0MzsyMTUsMTYgQEAKICNkZWZpbmUgICBSVEw5MzEwX1BIWV9DVFJMX0lOREFUQQkJR0VOTUFTSygxNSwgMCkKICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX01NRF9DVFJMCTB4MGMxOAogI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTAkJMHgwYzc0CiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTAkJMHgwY2NjCiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUwJCTB4MGM5YwogCiAjZGVmaW5lIFBIWV9DVFJMX0NNRAkJCQlCSVQoMCkKICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFECQkJR0VOTUFTSygyMCwgMTYpCiAjZGVmaW5lIFBIWV9DVFJMX01NRF9SRUcJCQlHRU5NQVNLKDE1LCAwKQogCiYjNDM7I2RlZmluZSBSVExfVkVORE9SX0lECQkJCTB4MDAxY2M4MDAKJiM0MzsjZGVmaW5lIFJUTF9QQUdFX1NFTEVDVAkJCQkzMQomIzQzOwogI2RlZmluZSBNQVBfQUREUlNfUEVSX1JFRwkJCTYKICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFIJCQk1CiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9CVVMJCQkyCkBAIC0xMjYsNiAmIzQzOzI1MCw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgewogCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdCBIVyBhY2Nlc3MgKi8KIAlERUNMQVJFX0JJVE1BUCh2YWxpZF9wb3J0cywgTUFYX1BPUlRTKTsKJiM0MzsJdTE2IHBhZ2VbTUFYX1BPUlRTXTsKIAl1OCBzbWlfYnVzW01BWF9QT1JUU107CiAJdTggc21pX2FkZHJbTUFYX1BPUlRTXTsKIAlib29sIHNtaV9idXNfaXNfYzQ1W01BWF9TTUlfQlVTU0VTXTsKQEAgLTE0Miw2ICYjNDM7MjY3LDcgQEAgc3RydWN0IG90dG9fZW1kaW9faW5mbyB7CiAJdTggbnVtX2J1c2VzOwogCXU4IG51bV9wb3J0czsKIAl1MTYgbnVtX3BhZ2VzOwomIzQzOwl1MzIgcG9sbF9jdHJsOwogCWludCAoKnNldHVwX2NvbnRyb2xsZXIpKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpOwogCWludCAoKnJlYWRfYzIyKShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7CiAJaW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpOwpAQCAtMTc3LDYgJiM0MzszMDMsMTIgQEAgc3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cykKIAlyZXR1cm4gY2hhbi0mZ3Q7cHJpdjsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBwcml2LSZndDtpbmZvLSZndDtwb2xsX2N0cmwgJiM0MzsgKHBvcnQgLyAzMikgKiA0LAomIzQzOwkJCQkgIEJJVChwb3J0ICUgMzIpLCBhY3RpdmUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJCQkgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpCiB7CkBAIC0xODUsOSAmIzQzOzMxNyw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJdTMyIGNtZHN0YXRlOwogCWludCByZXQ7CiAKLQkvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqLwomIzQzOwkvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqLwogCXJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LSZndDtyZWdtYXAsIGluZm8tJmd0O2NtZF9yZWdzLmMyMl9kYXRhLAotCQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7CiYjNDM7CQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTIyNyw3ICYjNDM7MzU5LDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCwKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LSZndDtyZWdtYXAsIGluZm8tJmd0O2NtZF9yZWdzLmMyMl9kYXRhLAotCQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7CiYjNDM7CQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTI2NCwxMyAmIzQzOzM5Niw3MCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJcmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtJmd0O2luZm8tJmd0O2NtZF93cml0ZSwgY21kX2RhdGEpOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCAmYW1wO2NtZF9kYXRhLAomIzQzOwkJCQkgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiYjNDM7CQkucG9ydF9tYXNrX2xvdwk9IEJJVChwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmV4dF9wYWdlCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEsCiYjNDM7CQkJCSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKJiM0MzsJCS5leHRfcGFnZQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiYjNDM7CQkucG9ydF9tYXNrX2hpZ2gJPSAodTMyKShCSVRfVUxMKHBvcnQpICZndDsmZ3Q7IDMyKSwKJiM0MzsJCS5wb3J0X21hc2tfbG93CT0gKHUzMikoQklUX1VMTChwb3J0KSksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQogewogCXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiAJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiAJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiAJCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8Ci0JCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksCiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiAJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiAJfTsKIApAQCAtMjg0LDcgJiM0Mzs0NzMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sCiAJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiAJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiAJCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8Ci0JCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksCiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiAJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAogCQkucG9ydF9tYXNrX2xvdwk9IEJJVChwb3J0KSwKIAl9OwpAQCAtMzI0LDcgJiM0Mzs1MTMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdQogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYnJvYWRjYXN0CT0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLAogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCX07CiAKIAlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDkzMTBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEsCkBAIC0zMzYsNyAmIzQzOzUyNSw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwKIAlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKIAkJLnBvcnRfbWFza19oaWdoCT0gKHUzMikoQklUX1VMTChwb3J0KSAmZ3Q7Jmd0OyAzMiksCiAJCS5wb3J0X21hc2tfbG93CT0gKHUzMikoQklUX1VMTChwb3J0KSksCkBAIC0zODIsOCAmIzQzOzU3MSwxMiBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSkKIAlpZiAocG9ydCAmbHQ7IDApCiAJCXJldHVybiBwb3J0OwogCi0Jc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spCiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwcml2LSZndDtsb2NrKSB7CiYjNDM7CQlpZiAocmVnbnVtID09IFJUTF9QQUdFX1NFTEVDVCkKJiM0MzsJCQlyZXR1cm4gcHJpdi0mZ3Q7cGFnZVtwb3J0XTsKJiM0MzsKIAkJcmV0ID0gcHJpdi0mZ3Q7aW5mby0mZ3Q7cmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sICZhbXA7dmFsdWUpOwomIzQzOwl9CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7CiB9CkBAIC0zOTcsOCAmIzQzOzU5MCwxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNgogCWlmIChwb3J0ICZsdDsgMCkKIAkJcmV0dXJuIHBvcnQ7CiAKLQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCWlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKSB7CiYjNDM7CQkJaWYgKHZhbHVlICZndDs9IFJBV19QQUdFKHByaXYpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCQlwcml2LSZndDtwYWdlW3BvcnRdID0gdmFsdWU7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CiAJCXJldCA9IHByaXYtJmd0O2luZm8tJmd0O3dyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpOwomIzQzOwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDcxLDYgJiM0Mzs2NzMsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZwomIzQzOwkgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtJmd0O3JlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiB7CiAJdTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwOwpAQCAtNTA3LDYgJiM0Mzs3MTgsNDggQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LSZndDttZGlvLmJ1cywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IGNoYW4tJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmIChwb3J0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBwb3J0OwomIzQzOwomIzQzOwkvKiAmIzM0O3N5bmMmIzM0OyBwYWdlIGluIGNhc2Ugb2YgcHJldmlvdXNseSBmYWlsZWQgYXR0YWNobWVudCAqLwomIzQzOwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykKJiM0MzsJCXByaXYtJmd0O3BhZ2VbcG9ydF0gPSAwOwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3NtaV9idXNfaXNfYzQ1W2NoYW4tJmd0O21kaW9fYnVzXSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcGh5X2lkX2NvbXBhcmVfdmVuZG9yKHBoeWRldi0mZ3Q7cGh5X2lkLCBSVExfVkVORE9SX0lEKSkgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7T25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi0mZ3Q7bWRpby5idXM7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXY7CiYjNDM7CWludCBwb3J0OwomIzQzOwomIzQzOwlwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtJmd0O21kaW8uYnVzKTsKJiM0MzsJcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LSZndDttZGlvLmJ1cywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwomIzQzOwlpZiAocG9ydCAmbHQ7IDApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qICYjMzQ7c3luYyYjMzQ7IHBhZ2UgZm9yIG5leHQgYXR0YWNobWVudCAqLwomIzQzOwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykKJiM0MzsJCXByaXYtJmd0O3BhZ2VbcG9ydF0gPSAwOwomIzQzOwomIzQzOwlpZiAob3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKSkKJiM0MzsJCWRldl9lcnIoYnVzLSZndDtwYXJlbnQsICYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxuJiMzNDssIHBvcnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LAogCQkJCSBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqbm9kZSkKIHsKQEAgLTUzNiw2ICYjNDM7Nzg5LDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYKIAkJYnVzLSZndDt3cml0ZSA9IG90dG9fZW1kaW9fd3JpdGVfYzIyOwogCX0KIAlidXMtJmd0O3BhcmVudCA9IGRldjsKJiM0MzsJYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7CiYjNDM7CWJ1cy0mZ3Q7bm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoOwomIzQzOwogCWNoYW4gPSBidXMtJmd0O3ByaXY7CiAJY2hhbi0mZ3Q7bWRpb19idXMgPSBtZGlvX2J1czsKIAljaGFuLSZndDtwcml2ID0gcHJpdjsKQEAgLTYzMyw4ICYjNDM7ODg5LDEzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KQogCQkgKiAoaS5lLiBjbGF1c2UgNDUpLiBTZWxlY3QgMTBHUEhZIG1vZGUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIFBIWSB0aGF0CiAJCSAqIGRlY2xhcmVzIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1JiMzNDsuCiAJCSAqLwotCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGh5X2RuLCAmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1JiMzNDspKQomIzQzOwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBoeV9kbiwgJiMzNDtldGhlcm5ldC1waHktaWVlZTgwMi4zLWM0NSYjMzQ7KSkgewomIzQzOwkJCWlmICghcHJpdi0mZ3Q7aW5mby0mZ3Q7cmVhZF9jNDUgfHwgIXByaXYtJmd0O2luZm8tJmd0O3dyaXRlX2M0NSkgewomIzQzOwkJCQllcnIgPSAtRU9QTk9UU1VQUDsKJiM0MzsJCQkJZ290byBwdXRfbm9kZXM7CiYjNDM7CQkJfQogCQkJcHJpdi0mZ3Q7c21pX2J1c19pc19jNDVbYnVzXSA9IHRydWU7CiYjNDM7CQl9CiAKIAkJX19zZXRfYml0KHBuLCBwcml2LSZndDt2YWxpZF9wb3J0cyk7CiAJCXByaXYtJmd0O3NtaV9idXNbcG5dID0gYnVzOwpAQCAtNjUyLDYgJiM0Mzs5MTMsMTkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWZvciAoaW50IHBvcnQgPSAwOyBwb3J0ICZsdDsgcHJpdi0mZ3Q7aW5mby0mZ3Q7bnVtX3BvcnRzOyBwb3J0JiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BkZXYtJmd0O2RldjsKQEAgLTY3MSw2ICYjNDM7OTQ1LDEwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWlmIChJU19FUlIocHJpdi0mZ3Q7cmVnbWFwKSkKIAkJcmV0dXJuIFBUUl9FUlIocHJpdi0mZ3Q7cmVnbWFwKTsKIAomIzQzOwllcnIgPSBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhwcml2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CiAKIAllcnIgPSBvdHRvX2VtZGlvX21hcF9wb3J0cyhkZXYpOwpAQCAtNjk2LDYgJiM0Mzs5NzQsNDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHsKJiM0MzsJLmFkZHJfbWFwX2Jhc2UgPSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCwKJiM0MzsJLmNtZF9mYWlsID0gUlRMODM4MF9QSFlfQ1RSTF9GQUlMLAomIzQzOwkuY21kX3JlYWQgPSBSVEw4MzgwX1BIWV9DVFJMX1JFQUQsCiYjNDM7CS5jbWRfd3JpdGUgPSBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFLAomIzQzOwkuY21kX3JlZ3MgPSB7CiYjNDM7CQkuYzIyX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMSwKJiM0MzsJCS5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLAomIzQzOwkJLmlvX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMiwKJiM0MzsJCS5wb3J0X21hc2tfbG93ID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzAsCiYjNDM7CX0sCiYjNDM7CS5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUywKJiM0MzsJLm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLAomIzQzOwkubnVtX3BvcnRzID0gUlRMODM4MF9OVU1fUE9SVFMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsCiYjNDM7CS5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIsCiYjNDM7CS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMiwKJiM0MzsJLndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHsKJiM0MzsJLmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLAomIzQzOwkuY21kX3JlYWQgPSBSVEw4MzkwX1BIWV9DVFJMX1JFQUQsCiYjNDM7CS5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLAomIzQzOwkuY21kX3JlZ3MgPSB7CiYjNDM7CQkuYnJvYWRjYXN0ID0gUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMLAomIzQzOwkJLmMyMl9kYXRhID0gUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkwsCiYjNDM7CQkuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCwKJiM0MzsJCS5leHRfcGFnZSA9IFJUTDgzOTBfUEhZUkVHX0NUUkwsCiYjNDM7CQkuaW9fZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTCwKJiM0MzsJCS5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVywKJiM0MzsJCS5wb3J0X21hc2tfaGlnaCA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdILAomIzQzOwl9LAomIzQzOwkubnVtX2J1c2VzID0gUlRMODM5MF9OVU1fQlVTRVMsCiYjNDM7CS5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUywKJiM0MzsJLm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLAomIzQzOwkucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsCiYjNDM7CS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMiwKJiM0MzsJLndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0gewogCS5hZGRyX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsCiAJLmJ1c19tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzE1X1BPTExJTkdfU0VMLApAQCAtNzExLDYgJiM0MzsxMDMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7CiAJLm51bV9idXNlcyA9IFJUTDkzMDBfTlVNX0JVU0VTLAogCS5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUywKIAkubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsCiAJLnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlciwKIAkucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsCiAJLnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LApAQCAtNzM2LDYgJiM0MzsxMDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7CiAJLm51bV9idXNlcyA9IFJUTDkzMTBfTlVNX0JVU0VTLAogCS5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUywKIAkubnVtX3BvcnRzID0gUlRMOTMxMF9OVU1fUE9SVFMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCwKIAkuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLAogCS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMiwKIAkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsCkBAIC03NDQsNiAmIzQzOzEwNjUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsODM4MC1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzgzODBfaW5mbyB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHJ0bDgzOTEtbWRpbyYjMzQ7LCAuZGF0YSA9ICZhbXA7b3R0b19lbWRpb184MzkwX2luZm8gfSwKIAl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHJ0bDkzMDEtbWRpbyYjMzQ7LCAuZGF0YSA9ICZhbXA7b3R0b19lbWRpb185MzAwX2luZm8gfSwKIAl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHJ0bDkzMTEtbWRpbyYjMzQ7LCAuZGF0YSA9ICZhbXA7b3R0b19lbWRpb185MzEwX2luZm8gfSwKIAl7fQpAQCAtNzU1LDYgJiM0MzsxMDc4LDcgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb3R0b19lbWRpb19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAmIzM0O21kaW8tcnRsOTMwMCYjMzQ7LAogCQkub2ZfbWF0Y2hfdGFibGUgPSBvdHRvX2VtZGlvX2lkcywKJiM0MzsJCS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKaW5kZXggOTRiMmU4NWUwMGEzNy4uMWE0M2ZlYzAyMmFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCkBAIC0xNzM0LDYgJiM0MzsxNzM0LDk2IEBAIHN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpCiAJcmV0dXJuIHBoeWRydi0mZ3Q7Y29uZmlnX2ludHIgJmFtcDsmYW1wOyBwaHlkcnYtJmd0O2hhbmRsZV9pbnRlcnJ1cHQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBwaHlfZGV0YWNoX2ludGVybmFsKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgbm90aWZ5X2J1cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwaHlkZXYtJmd0O2F0dGFjaGVkX2RldjsKJiM0MzsJc3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXM7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2RldmxpbmspIHsKJiM0MzsJCWRldmljZV9saW5rX2RlbChwaHlkZXYtJmd0O2RldmxpbmspOwomIzQzOwkJcGh5ZGV2LSZndDtkZXZsaW5rID0gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtzeXNmc19saW5rcykgewomIzQzOwkJaWYgKGRldikKJiM0MzsJCQlzeXNmc19yZW1vdmVfbGluaygmYW1wO2Rldi0mZ3Q7ZGV2LmtvYmosICYjMzQ7cGh5ZGV2JiMzNDspOwomIzQzOwkJc3lzZnNfcmVtb3ZlX2xpbmsoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LmtvYmosICYjMzQ7YXR0YWNoZWRfZGV2JiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghcGh5ZGV2LSZndDthdHRhY2hlZF9kZXYpCiYjNDM7CQlzeXNmc19yZW1vdmVfZmlsZSgmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYua29iaiwKJiM0MzsJCQkJICAmYW1wO2Rldl9hdHRyX3BoeV9zdGFuZGFsb25lLmF0dHIpOwomIzQzOwomIzQzOwlwaHlfc3VzcGVuZChwaHlkZXYpOwomIzQzOwomIzQzOwlpZiAobm90aWZ5X2J1cyAmYW1wOyZhbXA7IHBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfZGV0YWNoKQomIzQzOwkJcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9kZXRhY2gocGh5ZGV2KTsKJiM0MzsKJiM0MzsJaWYgKGRldikgewomIzQzOwkJc3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7CiYjNDM7CiYjNDM7CQkvKiBod3Byb3YgbWF5IHRlY2huaWNhbGx5IGJlIHByb3RlY3RlZCBieSBvcHMgbG9jayBidXQKJiM0MzsJCSAqIG5vdCBmb3IgZGV2aWNlcyB3aXRoIGEgcGh5ZGV2LCBzZWUgcGh5X2xpbmtfdG9wb19hZGRfcGh5KCkKJiM0MzsJCSAqLwomIzQzOwkJaHdwcm92ID0gcnRubF9kZXJlZmVyZW5jZShkZXYtJmd0O2h3cHJvdik7CiYjNDM7CQkvKiBEaXNhYmxlIHRpbWVzdGFtcCBpZiBpdCBpcyB0aGUgb25lIHNlbGVjdGVkICovCiYjNDM7CQlpZiAoaHdwcm92ICZhbXA7JmFtcDsgaHdwcm92LSZndDtwaHlkZXYgPT0gcGh5ZGV2KSB7CiYjNDM7CQkJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0mZ3Q7aHdwcm92LCBOVUxMKTsKJiM0MzsJCQlrZnJlZV9yY3UoaHdwcm92LCByY3VfaGVhZCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwaHlkZXYtJmd0O2F0dGFjaGVkX2Rldi0mZ3Q7cGh5ZGV2ID0gTlVMTDsKJiM0MzsJCXBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2ID0gTlVMTDsKJiM0MzsJCXBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeWRldik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDtwaHlfbGlua19jaGFuZ2UgPSBOVUxMOwomIzQzOwlwaHlkZXYtJmd0O3BoeWxpbmsgPSBOVUxMOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDttZGlvLmRldi5kcml2ZXIpCiYjNDM7CQltb2R1bGVfcHV0KHBoeWRldi0mZ3Q7bWRpby5kZXYuZHJpdmVyLSZndDtvd25lcik7CiYjNDM7CiYjNDM7CS8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdAomIzQzOwkgKiB3YXMgdXNpbmcgdGhlIGdlbmVyaWMgZHJpdmVyKSwgd2UgdW5iaW5kIHRoZSBkZXZpY2UKJiM0MzsJICogZnJvbSB0aGUgZ2VuZXJpYyBkcml2ZXIgc28gdGhhdCB0aGVyZSYjMzk7cyBhIGNoYW5jZSBhCiYjNDM7CSAqIHJlYWwgZHJpdmVyIGNvdWxkIGJlIGxvYWRlZAomIzQzOwkgKi8KJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aXNfZ2VucGh5X2RyaXZlbikgewomIzQzOwkJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldik7CiYjNDM7CQlwaHlkZXYtJmd0O2lzX2dlbnBoeV9kcml2ZW4gPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovCiYjNDM7CXBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHBoeWRldiBtaWdodCBnbyBhd2F5IG9uIHRoZSBwdXRfZGV2aWNlKCkgYmVsb3csIHNvIGF2b2lkCiYjNDM7CSAqIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGJ5IHJlYWRpbmcgdGhlIHVuZGVybHlpbmcgYnVzIGZpcnN0LgomIzQzOwkgKi8KJiM0MzsJYnVzID0gcGh5ZGV2LSZndDttZGlvLmJ1czsKJiM0MzsKJiM0MzsJcHV0X2RldmljZSgmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYpOwomIzQzOwlpZiAoZGV2KQomIzQzOwkJbmRldl9vd25lciA9IGRldi0mZ3Q7ZGV2LnBhcmVudC0mZ3Q7ZHJpdmVyLSZndDtvd25lcjsKJiM0MzsJaWYgKG5kZXZfb3duZXIgIT0gYnVzLSZndDtvd25lcikKJiM0MzsJCW1vZHVsZV9wdXQoYnVzLSZndDtvd25lcik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBoeV9kZXRhY2ggLSBkZXRhY2ggYSBQSFkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlCiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBUaGlzIGRldGFjaGVzIHRoZSBwaHkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlIGFuZCB0aGUgcGh5CiYjNDM7ICogZHJpdmVyLCBhbmQgZHJvcHMgdGhlIHJlZmVyZW5jZSBjb3VudCB0YWtlbiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpLgomIzQzOyAqLwomIzQzO3ZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJLyogY2xlYW51cCBpbmNsdWRpbmcgYnVzIG5vdGlmaWNhdGlvbiAqLwomIzQzOwlwaHlfZGV0YWNoX2ludGVybmFsKHBoeWRldiwgdHJ1ZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGh5X2RldGFjaCk7CiYjNDM7CiAvKioKICAqIHBoeV9hdHRhY2hfZGlyZWN0IC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBnaXZlbiBQSFkgZGV2aWNlIHBvaW50ZXIKICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaApAQCAtMTg3Niw2ICYjNDM7MTk2NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwogCiYjNDM7CWlmIChwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaCkgewomIzQzOwkJZXJyID0gcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJvcjsKJiM0MzsJfQomIzQzOwogCXBoeV9yZXN1bWUocGh5ZGV2KTsKIAogCS8qKgpAQCAtMTg5MCw4ICYjNDM7MTk4Niw4IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCXJldHVybiBlcnI7CiAKIGVycm9yOgotCS8qIHBoeV9kZXRhY2goKSBkb2VzIGFsbCBvZiB0aGUgY2xlYW51cCBiZWxvdyAqLwotCXBoeV9kZXRhY2gocGh5ZGV2KTsKJiM0MzsJLyogY2xlYW51cCB3aXRob3V0IGJ1cyBub3RpZmljYXRpb24gKi8KJiM0MzsJcGh5X2RldGFjaF9pbnRlcm5hbChwaHlkZXYsIGZhbHNlKTsKIAlyZXR1cm4gZXJyOwogCiBlcnJvcl9tb2R1bGVfcHV0OgpAQCAtMTkwNiw4NiAmIzQzOzIwMDIsNiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIH0KIEVYUE9SVF9TWU1CT0wocGh5X2F0dGFjaF9kaXJlY3QpOwogCi0vKioKLSAqIHBoeV9kZXRhY2ggLSBkZXRhY2ggYSBQSFkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlCi0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKLSAqCi0gKiBUaGlzIGRldGFjaGVzIHRoZSBwaHkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlIGFuZCB0aGUgcGh5Ci0gKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuCi0gKi8KLXZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwaHlkZXYtJmd0O2F0dGFjaGVkX2RldjsKLQlzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDsKLQlzdHJ1Y3QgbWlpX2J1cyAqYnVzOwotCi0JaWYgKHBoeWRldi0mZ3Q7ZGV2bGluaykgewotCQlkZXZpY2VfbGlua19kZWwocGh5ZGV2LSZndDtkZXZsaW5rKTsKLQkJcGh5ZGV2LSZndDtkZXZsaW5rID0gTlVMTDsKLQl9Ci0KLQlpZiAocGh5ZGV2LSZndDtzeXNmc19saW5rcykgewotCQlpZiAoZGV2KQotCQkJc3lzZnNfcmVtb3ZlX2xpbmsoJmFtcDtkZXYtJmd0O2Rldi5rb2JqLCAmIzM0O3BoeWRldiYjMzQ7KTsKLQkJc3lzZnNfcmVtb3ZlX2xpbmsoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LmtvYmosICYjMzQ7YXR0YWNoZWRfZGV2JiMzNDspOwotCX0KLQotCWlmICghcGh5ZGV2LSZndDthdHRhY2hlZF9kZXYpCi0JCXN5c2ZzX3JlbW92ZV9maWxlKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldi5rb2JqLAotCQkJCSAgJmFtcDtkZXZfYXR0cl9waHlfc3RhbmRhbG9uZS5hdHRyKTsKLQotCXBoeV9zdXNwZW5kKHBoeWRldik7Ci0JaWYgKGRldikgewotCQlzdHJ1Y3QgaHd0c3RhbXBfcHJvdmlkZXIgKmh3cHJvdjsKLQotCQkvKiBod3Byb3YgbWF5IHRlY2huaWNhbGx5IGJlIHByb3RlY3RlZCBieSBvcHMgbG9jayBidXQKLQkJICogbm90IGZvciBkZXZpY2VzIHdpdGggYSBwaHlkZXYsIHNlZSBwaHlfbGlua190b3BvX2FkZF9waHkoKQotCQkgKi8KLQkJaHdwcm92ID0gcnRubF9kZXJlZmVyZW5jZShkZXYtJmd0O2h3cHJvdik7Ci0JCS8qIERpc2FibGUgdGltZXN0YW1wIGlmIGl0IGlzIHRoZSBvbmUgc2VsZWN0ZWQgKi8KLQkJaWYgKGh3cHJvdiAmYW1wOyZhbXA7IGh3cHJvdi0mZ3Q7cGh5ZGV2ID09IHBoeWRldikgewotCQkJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0mZ3Q7aHdwcm92LCBOVUxMKTsKLQkJCWtmcmVlX3JjdShod3Byb3YsIHJjdV9oZWFkKTsKLQkJfQotCi0JCXBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2LSZndDtwaHlkZXYgPSBOVUxMOwotCQlwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiA9IE5VTEw7Ci0JCXBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeWRldik7Ci0JfQotCi0JcGh5ZGV2LSZndDtwaHlfbGlua19jaGFuZ2UgPSBOVUxMOwotCXBoeWRldi0mZ3Q7cGh5bGluayA9IE5VTEw7Ci0KLQlpZiAocGh5ZGV2LSZndDttZGlvLmRldi5kcml2ZXIpCi0JCW1vZHVsZV9wdXQocGh5ZGV2LSZndDttZGlvLmRldi5kcml2ZXItJmd0O293bmVyKTsKLQotCS8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdAotCSAqIHdhcyB1c2luZyB0aGUgZ2VuZXJpYyBkcml2ZXIpLCB3ZSB1bmJpbmQgdGhlIGRldmljZQotCSAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUmIzM5O3MgYSBjaGFuY2UgYQotCSAqIHJlYWwgZHJpdmVyIGNvdWxkIGJlIGxvYWRlZAotCSAqLwotCWlmIChwaHlkZXYtJmd0O2lzX2dlbnBoeV9kcml2ZW4pIHsKLQkJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldik7Ci0JCXBoeWRldi0mZ3Q7aXNfZ2VucGh5X2RyaXZlbiA9IDA7Ci0JfQotCi0JLyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi8KLQlwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7Ci0KLQkvKgotCSAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZAotCSAqIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGJ5IHJlYWRpbmcgdGhlIHVuZGVybHlpbmcgYnVzIGZpcnN0LgotCSAqLwotCWJ1cyA9IHBoeWRldi0mZ3Q7bWRpby5idXM7Ci0KLQlwdXRfZGV2aWNlKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldik7Ci0JaWYgKGRldikKLQkJbmRldl9vd25lciA9IGRldi0mZ3Q7ZGV2LnBhcmVudC0mZ3Q7ZHJpdmVyLSZndDtvd25lcjsKLQlpZiAobmRldl9vd25lciAhPSBidXMtJmd0O293bmVyKQotCQltb2R1bGVfcHV0KGJ1cy0mZ3Q7b3duZXIpOwotfQotRVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTsKLQogaW50IHBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggNWY4ZDY1ODY4ZTBmZi4uM2Q4YWZlNmI3ZjFjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0zNzYsNiAmIzQzOzM3NiwyNCBAQCBzdHJ1Y3QgbWlpX2J1cyB7CiAJCQkgaW50IHJlZ251bSwgdTE2IHZhbCk7CiAJLyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi8KIAlpbnQgKCpyZXNldCkoc3RydWN0IG1paV9idXMgKmJ1cyk7CiYjNDM7CS8qKgomIzQzOwkgKiBAbm90aWZ5X3BoeV9hdHRhY2g6IFBlcmZvcm0gcG9zdC1hdHRhY2ggaGFuZGxpbmcgZm9yIE1ESU8gYnVzCiYjNDM7CSAqIGRyaXZlcnMuIE9wdGlvbmFsIGFuZCBpbmRlcGVuZGVudCBvZiBAbm90aWZ5X3BoeV9kZXRhY2guIENhbGxlZAomIzQzOwkgKiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpIHJpZ2h0IGJlZm9yZSBwaHlfcmVzdW1lKCkuIFJ1bnMgaW4gcHJvY2VzcwomIzQzOwkgKiBjb250ZXh0LCBtYXkgc2xlZXAgYW5kIG1heSBiZSBjYWxsZWQgd2l0aCBSVE5MIGhlbGQuIE11c3Qgbm90CiYjNDM7CSAqIGFjcXVpcmUgb3IgcmVseSBvbiBSVE5MLiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJubwomIzQzOwkgKiBvbiBmYWlsdXJlLiBNdXN0IHVud2luZCBpdHMgb3duIHN0YXRlIG9uIGVycm9yIGFzIGF0dGFjaG1lbnQgaXMKJiM0MzsJICogYWJvcnRlZC4KJiM0MzsJICovCiYjNDM7CWludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKJiM0MzsJLyoqCiYjNDM7CSAqIEBub3RpZnlfcGh5X2RldGFjaDogUGVyZm9ybSBwcmUtZGV0YWNoIGhhbmRsaW5nIGZvciBNRElPIGJ1cwomIzQzOwkgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfYXR0YWNoLiBDYWxsZWQKJiM0MzsJICogaW4gcGh5X2RldGFjaCgpIHJpZ2h0IGFmdGVyIHBoeV9zdXNwZW5kKCkuIFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0LAomIzQzOwkgKiBtYXkgc2xlZXAgYW5kIG1heSBiZSBjYWxsZWQgd2l0aCBSVE5MIGhlbGQuIE11c3Qgbm90IGFjcXVpcmUgb3IKJiM0MzsJICogcmVseSBvbiBSVE5MLgomIzQzOwkgKi8KJiM0MzsJdm9pZCAoKm5vdGlmeV9waHlfZGV0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIAogCS8qKiBAc3RhdHM6IFN0YXRpc3RpYyBjb3VudGVycyBwZXIgZGV2aWNlIG9uIHRoZSBidXMgKi8KIAlzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMzIKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogMjEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUmVhbHRlayBNRElPIFBhdGNoIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBNRElPIGludGVyZmFjZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuIEl0IG1vZGlmaWVzIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCB0byBhZGQgc3VwcG9ydCBmb3IgUlRMODM4MC9SVEw4MzkwIGFuZCBpbXBvcnRhbnRseSwgaXQgdG91Y2hlcyBgcGh5X2RldmljZS5jYCB0byBhZGQgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGBtaWlfYnVzYCBzdHJ1Y3R1cmUuCgpGaXJzdCwgdGhlIE1ESU8gZHJpdmVyIGl0c2VsZi4gQ2FuIEkgZ2V0IHRvIGl0IHdpdGhpbiBRRU1VPyBNRElPIGRyaXZlcnMgYXJlIHVzdWFsbHkgcHJvYmVkIHZpYSB0aGUgZGV2aWNlIHRyZWUsIHNvIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHdoZXRoZXIgSSBjYW4gbG9hZCB0aGUgbW9kdWxlIGFuZCBwcm9iZSBpdCB1c2luZyBhIGZha2UgZGV2aWNlIHRyZWUgb3IgcGxhdGZvcm0gZGV2aWNlLiBTeXprYWxsZXIgY2FuIGRvIHRoaXMsIGluamVjdGluZyBwbGF0Zm9ybSBkZXZpY2VzIG9yIGV2ZW4gdXNpbmcgZGV2aWNlIHRyZWUgb3ZlcmxheXMuIEhvd2V2ZXIsIHRoZXJlJiMzOTtzIGEgcHJvYmxlbTogdGhlIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBkcml2ZXIgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEFoLCB3YWl0LCBpdCBoYXMgYC5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZWAuIFRoaXMgbWVhbnMgSSBjYW4mIzM5O3QgYmluZCBpdCB2aWEgc3lzZnMuIFN5emthbGxlciBtaWdodCBzdGlsbCBiZSBhYmxlIHRvIGluamVjdCBwbGF0Zm9ybSBkZXZpY2VzLCBpZiBpdCBrbm93cyBob3csIGJ1dCBwcm9iYWJseSBvbmx5IGlmIGl0IG1hdGNoZXMgdGhlIGV4YWN0IG5hbWUgb3IgT0YgbWF0Y2guIFRoZSBwcm9iZSBmdW5jdGlvbiwgYG90dG9fZW1kaW9fcHJvYmVgLCB1c2VzIGBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KWAuIFRoYXQgbWVhbnMgaXQgbmVlZHMgYW4gT0Ygbm9kZSwgYW5kIGlmIGl0JiMzOTtzIHByb2JlZCB3aXRob3V0IE9GLCBgb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhYCByZXR1cm5zIE5VTEwuIFRoaXMgbWFrZXMgaXQgaGFyZGVyIHRvIHRyaWdnZXIuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBTeXprYWxsZXIgY2FuIGNyZWF0ZSBPRiBub2Rlcy4gSXQgc2VlbXMgbGltaXRlZC4KCkhvd2V2ZXIsIHRoZSByZWFsIG1lYXQgb2YgdGhlIHBhdGNoIGlzIHRoZSBtb2RpZmljYXRpb24gb2YgYHBoeV9kZXZpY2UuY2AsIHdoaWNoIGlzIGNvcmUgUEhZIGZyYW1ld29yayBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIHRvIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBhcmUgY3J1Y2lhbC4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aGVuIGF0dGFjaGluZyBhIFBIWSB0byBhIG5ldCBkZXZpY2UsIHNvIGFueSBNRElPIGJ1cyBkcml2ZXIgKmNvdWxkKiB1c2UgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYC4gVGhlIHBhdGNoICphZGRzKiB0aGVzZSBjYWxsYmFja3MgdG8gYHN0cnVjdCBtaWlfYnVzYCBpbiBgcGh5X2RldmljZS5jYC4gVGhhdCBtYWtlcyB0aGlzIHBhcnQgb2YgdGhlIGNoYW5nZSB2ZXJ5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nLgoKSSBxdWlja2x5IGNoZWNrIHRoZSBjb2RlIGZvciBgcGh5X2RldGFjaGAgYW5kIHNlZSBpdCYjMzk7cyBjYWxsaW5nIGBwaHlfZGV0YWNoX2ludGVybmFsYC4gVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgUEhZIGZyYW1ld29yaywgYW5kIHRoYXQmIzM5O3Mgd29ydGggY2hlY2tpbmcuCgpOb3csIHRvIHNlZSB3aGF0IHRvIGVuYWJsZS4gVGhlIGNvbmZpZyBmb3IgdGhlIFJlYWx0ZWsgTURJTyBkcml2ZXIgaXMgYE1ESU9fUkVBTFRFS19SVEw5MzAwYC4gQW5kLCBvZiBjb3Vyc2UsIGBQSFlMSUJgIGlzIG5lZWRlZC4gSSBjb25maXJtIHRoYXQgYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyBleHBvcnRlZCB1c2luZyB0aGUgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGZpbmQgYEVYUE9SVF9TWU1CT0wocGh5X2F0dGFjaF9kaXJlY3QpO2AgaW4gdGhlIGRpZmYuCgpUaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHdoZXRoZXIgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gSSBuZWVkLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBQSFkgZnJhbWV3b3JrIGNoYW5nZXMsIGFuZCB0aGV5JiMzOTtyZSBjb250cm9sbGVkIGJ5IGBDT05GSUdfUEhZTElCYC4gSSB3YW50IHRvIGxpc3QgdGhlIGZvY3VzIHN5bWJvbHMuIFRob3NlIGFyZSBgcGh5X2F0dGFjaF9kaXJlY3RgLCBgcGh5X2RldGFjaGAsIGBwaHlfZGV0YWNoX2ludGVybmFsYCwgYG90dG9fZW1kaW9fcHJvYmVgLCBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaGAsIGFuZCBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaGAuIFNpbmNlIGBvdHRvX2VtZGlvX3Byb2JlYCBtaWdodCBub3QgYmUgcmVhY2hhYmxlIHdpdGhvdXQgT0YsIEkgd29uJiMzOTt0IGZvY3VzIG9uIHRoYXQgb25lLCBidXQgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgcGFydCBvZiB0aGUgY29yZSBQSFkgZnJhbWV3b3JrLiBTbywgSSB3aWxsIGluY2x1ZGUgdGhvc2UuCgpJIGNoZWNrIGlmIGBwaHlfZGV0YWNoX2ludGVybmFsYCBpcyBzdGF0aWMsIHdoaWNoIGl0IGlzLiBBbmQgSSBzZWUgdGhhdCB0aGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnRzLiBTbywgSSBwcm9iYWJseSBzaG91bGRuJiMzOTt0IGluY2x1ZGUgdGhhdCBvbmUgaW4gYEZvY3VzU3ltYm9sc2AsIGFzIHRoZSBmdXp6IGVuZ2luZSB3aWxsIGxpa2VseSB0cnkgYHBoeV9kZXRhY2hgIGluc3RlYWQuIFRob3VnaCBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaGAgaXMgc3RhdGljLCBpdCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGFuZCBpcyBjYWxsZWQgaW5kaXJlY3RseS4KClNvLCBpcyBgTURJT19SRUFMVEVLX1JUTDkzMDBgIHdvcnRoIGVuYWJsaW5nPyBJIHNlZSBpdCBjYW4gYmUgZW5hYmxlZCB3aXRoIGBDT01QSUxFX1RFU1RgLCBzbyB5ZXMuIEkgdmVyaWZ5IGluIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIHRoYXQgaXQgY2FuIGJlIGVuYWJsZWQuIFRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3MgdG8gd29ycnkgYWJvdXQsIGFuZCBgQ09ORklHX1BIWUxJQmAgaXMgdXN1YWxseSBlbmFibGVkIGluIFN5emthbGxlciBhbnl3YXkuCgpGaW5hbGx5LCBJIHJldmlldyB0aGUgY2hhbmdlcyBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AgYWdhaW4uIFRoZSByZWZhY3RvcmluZyBvZiBgcGh5X2RldGFjaGAgdG8gYHBoeV9kZXRhY2hfaW50ZXJuYWxgIGlzIHRoZXJlIHRvIGFsbG93IGNhbGxpbmcgaXQgd2l0aG91dCBub3RpZnlpbmcgdGhlIGJ1cwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X2F0dGFjaF9kaXJlY3QmIzM0OywKICAgICYjMzQ7cGh5X2RldGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIGNhbGxiYWNrcyBpbiB0aGUgY29yZSBQSFkgZnJhbWV3b3JrIChgc3RydWN0IG1paV9idXNgKSBhbmQgbW9kaWZpZXMgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIHRvIHVzZSB0aGVtLiBJdCBhbHNvIGFkZHMgc3VwcG9ydCBmb3IgUlRMODM4MC9SVEw4MzkwIHRvIHRoZSBSZWFsdGVrIE1ESU8gZHJpdmVyIHdoaWNoIGltcGxlbWVudHMgdGhlc2UgY2FsbGJhY2tzLiBUaGUgY29yZSBQSFkgZnJhbWV3b3JrIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TURJT19SRUFMVEVLX1JUTDkzMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfYXR0YWNoX2RpcmVjdCYjMzQ7LAogICAgJiMzNDtwaHlfZGV0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIGluIHRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgKGBzdHJ1Y3QgbWlpX2J1c2ApIGFuZCBtb2RpZmllcyBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgdG8gdXNlIHRoZW0uIEl0IGFsc28gYWRkcyBzdXBwb3J0IGZvciBSVEw4MzgwL1JUTDgzOTAgdG8gdGhlIFJlYWx0ZWsgTURJTyBkcml2ZXIgd2hpY2ggaW1wbGVtZW50cyB0aGVzZSBjYWxsYmFja3MuIFRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjA6MDAuODc4MTI5OTM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzNjk1ODY2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURJT19SRUFMVEVLX1JUTDkzMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfYXR0YWNoX2RpcmVjdFwiLFxuICAgIFwicGh5X2RldGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIGluIHRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgKGBzdHJ1Y3QgbWlpX2J1c2ApIGFuZCBtb2RpZmllcyBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgdG8gdXNlIHRoZW0uIEl0IGFsc28gYWRkcyBzdXBwb3J0IGZvciBSVEw4MzgwL1JUTDgzOTAgdG8gdGhlIFJlYWx0ZWsgTURJTyBkcml2ZXIgd2hpY2ggaW1wbGVtZW50cyB0aGVzZSBjYWxsYmFja3MuIFRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMDowMC44NzgxMzYxMzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODM3ODYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ5M2I3ZmQ3MmFiODRlYTg0ZDMxMTczNDJmMzc5MjRhNTJjZjhlM2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAyMDoxOTo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcXG5pbmRleCAyNzFlMDViYWU5YzU3Li42N2UwYjIzYTg0NzBlIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxcbkBAIC00LDcgKzQsNyBAQFxcbiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sI1xcbiAkc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4gXFxuLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyXFxuK3RpdGxlOiBSZWFsdGVrIE90dG8gU3dpdGNoZXMgRXRoZXJuZXQgTURJTyBDb250cm9sbGVyXFxuIFxcbiBtYWludGFpbmVyczpcXG4gICAtIENocmlzIFBhY2toYW0gXFx1MDAzY2NocmlzLnBhY2toYW1AYWxsaWVkdGVsZXNpcy5jby5uelxcdTAwM2VcXG5AQCAtMTIsNiArMTIsMTYgQEAgbWFpbnRhaW5lcnM6XFxuIHByb3BlcnRpZXM6XFxuICAgY29tcGF0aWJsZTpcXG4gICAgIG9uZU9mOlxcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzODAtbWRpb1xcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkyLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5My1tZGlvXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpb1xcbiAgICAgICAtIGl0ZW1zOlxcbiAgICAgICAgICAgLSBlbnVtOlxcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvXFxuQEAgLTI0LDYgKzM0LDggQEAgcHJvcGVydGllczpcXG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvXFxuICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpb1xcbiAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvXFxuKyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvXFxuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvXFxuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMS1tZGlvXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcXG5pbmRleCBhMDUyMjk4MzhjYjQ1Li5kNDQyNzhmMjZmYWJlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xcbkBAIC0xNzIsMTEgKzE3MiwxMSBAQCBjb25maWcgTURJT19JUFE4MDY0XFxuIFxcdCAgaW50ZXJmYWNlIHVuaXRzIG9mIHRoZSBJUFE4MDY0IFNvQ1xcbiBcXG4gY29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXFxuLVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG4rXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuIFxcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcXG4gXFx0aGVscFxcbiBcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgUmVhbHRla1xcbi1cXHQgIFJUTDkzMDAgZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXFxuK1xcdCAgUlRMODN4eC9SVEw5M3h4IGZhbWlseSBvZiBFdGhlcm5ldCBzd2l0Y2hlcyB3aXRoIGludGVncmF0ZWQgU29DLlxcbiBcXG4gY29uZmlnIE1ESU9fUkVHTUFQXFxuIFxcdHRyaXN0YXRlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xcbmluZGV4IGFmZDUyYTFjZDdmODMuLjc3ZGMwNDYzMGM0NDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuQEAgLTM1LDYgKzM1LDgxIEBAXFxuICAqXFxuICAqIFRoZSBkcml2ZXIgd29ya3Mgb3V0IHRoZSBtYXBwaW5nIGJhc2VkIG9uIHRoZSBNRElPIGJ1cyBkZXNjcmliZWQgaW4gZGV2aWNlIHRyZWUgYW5kIHBoYW5kbGVzIG9uXFxuICAqIHRoZSBldGhlcm5ldC1wb3J0cyBwcm9wZXJ0eS5cXG4rICpcXG4rICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0XFxuKyAqIGNvbnN0YW50bHkgc2NhbnMgdGhlIE1ESU8gYnVzIGFuZCB0aGUgYXR0YWNoZWQgUEhZcyBhbmQgdXBkYXRlcyB0aGUgTUFDIHN0YXR1cyByZWdpc3RlcnMuXFxuKyAqXFxuKyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/XFxuKyAqXFxuKyAqIEVhY2ggZGV2aWNlIGhhcyBhIFNNSV9QT0xMX0NUUkwgcmVnaXN0ZXIuIEEgcGVyLXBvcnQgYml0bWFzayBkZWNpZGVzIGlmIHRoZSBoYXJkd2FyZSBwb2xsaW5nIG9mXFxuKyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvclxcbisgKiBlYWNoIHNldCBwb2xsaW5nIGJpdCBpdCBpc3N1ZXMgYSBzdGF0dXMgY2hlY2sgZm9yIHRoZSBQSFkuIEF0dGFjaGluZyBhIGxvZ2ljIGFuYWx5emVyIHRvIHRoZVxcbisgKiBNRElPIGJ1cyBvZiBhbiBSVEw4MzgwIGFuZCBSVEw4MzkzIGdpdmVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKGluIGtlcm5lbCBub3RhdGlvbik6XFxuKyAqXFxuKyAqXFx0UlRMODM4MFxcdFxcdFxcdFxcdFJUTDgzOTNcXG4rICpcXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICpcXHRwaHlfd3JpdGUocGh5LCAzMSwgMHgwKTtcXHRwaHlfcmVhZChwaHksIDApO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xcdHBoeV9yZWFkKHBoeSwgMSk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xcdHBoeV9yZWFkKHBoeSwgNCk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XFx0cGh5X3JlYWQocGh5LCA1KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDE0KTtcXHRcXHRwaHlfcmVhZChwaHksIDYpO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xcdHBoeV9yZWFkKHBoeSwgOSk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1xcdHBoeV9yZWFkKHBoeSwgMTApO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1xcdHBoeV9yZWFkKHBoeSwgMTUpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcdFxcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgOSk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTApO1xcdFxcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTUpO1xcdFxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMCk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxKTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCA0KTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDUpO1xcdFxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgNik7XFxuKyAqXFxuKyAqIEFmdGVyIG9uZSBQSFkgc3RhdHVzIGlzIHJlYWQsIHRoZSBwb2xsaW5nIGVuZ2luZSBnb2VzIG92ZXIgdG8gdGhlIG5leHQgUEhZLiBJZiBvbmUgYnVzIGlzIGZ1bGx5XFxuKyAqIHNjYW5uZWQgaXQgc3dpdGNoZXMgb3ZlciB0byB0aGUgbmV4dCBidXMuIEJhc2ljYWxseSB0aGUgcG9sbGluZyBzeXN0ZW0gaXMgYWx3YXlzIGJ1c3kgYW5kIHRoZVxcbisgKiBNQUMgc3RhdGUgaXMgdXBkYXRlZCBpbiByZWFsLXRpbWUuXFxuKyAqXFxuKyAqIFRoaXMgaXMgYSBnbGltcHNlIGxvb2sgYXQgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIHBvbGxpbmcgYW5kIGxlYXZlcyBvdXQgdGhlIEM0NSBjYXNlIGFuZCB0aGUgTUFDXFxuKyAqIHJlZ2lzdGVyIHVwZGF0ZSBsb2dpYyBhZnRlcndhcmRzLiBJbXBvcnRhbnQgdG8gbm90ZTpcXG4rICpcXG4rICogLSAxMDAgTUJpdCBkb3duc2hpZnRzIChicm9rZW4gY2FibGVzKSBhcmUgaWRlbnRpZmllZCBhbmQgcHJvcGFnYXRlZCB0byB0aGUgTUFDIGNvcnJlY3RseVxcbisgKiAtIEFjY2VzcyB0byBNRElPX0FOX0VFRV9BRFYgYW5kIE1ESU9fQU5fRUVFX0xQQUJMRSB3b3JrcyB2aWEgQzQ1IG92ZXIgQzIyLlxcbisgKiAtIEl0IGlzIHVuY2xlYXIgaWYgdGhlc2Ugc2VxdWVuY2VzIGNoYW5nZSBmb3IgZGlmZmVyZW50IFBIWXMuXFxuKyAqIC0gQWNjZXNzIHRvIFJlYWx0ZWsgcmVzZXJ2ZWQgcmVnaXN0ZXIgMjYgKGxpbmsgc3BlZWQpIGhhcyBub3QgeWV0IGJlZW4gc2Vlbi5cXG4rICpcXG4rICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz9cXG4rICpcXG4rICogV2hlbiBpc3N1aW5nIE1ESU8gYWNjZXNzZXMgdmlhIGFuIE1NSU8gYmFzZWQgaW50ZXJmYWNlIHRoZSBmaW5hbCB3cml0ZSB0byB0aGUgY29tbWFuZCByZWdpc3RlclxcbisgKiBzZXRzIGEgXFxcInJ1biBjb21tYW5kIG5vd1xcXCIgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlXFxuKyAqIGNoZWNrcyBpZiBhIHVzZXIgY29tbWFuZCBuZWVkcyB0byBydW4gYW5kIHNlbmRzIGl0IG9udG8gdGhlIGJ1cy4gQWZ0ZXJ3YXJkcyBpdCBzaW1wbHkgY29udGludWVzXFxuKyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgd3JpdGUgb24gdGhlIGxvZ2ljIGFuYWx5emVyIGdpdmVzOlxcbisgKlxcbisgKlxcdFJUTDgzODBcXHRcXHRcXHRcXHRSVEw4MzkzXFxuKyAqXFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1xcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcXHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcXG4rICpcXHRcXHRcXHRcXHRcXHRwaHlfd3JpdGUocGh5LCAzMSwgMCk7XFxuKyAqXFxuKyAqIFdoYXQgZG9lcyB0aGlzIG1lYW4/XFxuKyAqXFxuKyAqIFRoZXJlIGFyZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gcG9sbGluZyBhbmQgUEhZIGFjY2VzcyBiZXR3ZWVuIHRoZSBtb2RlbHMgYnV0IHRoZSBjaGFsbGVuZ2VcXG4rICogc3RheXMgdGhlIHNhbWUuIE9uIHRoZSBvbmUgaGFuZCB0aGF0IGdyZWF0bHkgc2ltcGxpZmllcyB0aGUgTUFDIGxheWVyLCBvbiB0aGUgb3RoZXIgaGFuZCBpdFxcbisgKiBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwgUEhZIHN1YnN5c3RlbS5cXG4rICpcXG4rICogLSBXaXRob3V0IHRoZSBwb2xsaW5nIGFuZCBhIHByb3BlciBNQUMgc3RhdHVzLCBzb21lIG9mIHRoZSBsaW5rIGhhbmRsaW5nIGZlYXR1cmVzIGRvIG5vdCB3b3JrLlxcbisgKiAgIEVzcGVjaWFsbHkgYW4gdW5wb3B1bGF0ZWQgTUFDX0xJTktfU1RTIHJlZ2lzdGVyIGNhbmNlbHMgb3BlcmF0aW9ucyB0byBvdGhlciBNQUMgcmVnaXN0ZXJzLlxcbisgKiAtIFRoZSBSZWFsdGVrIHBhZ2UgcmVnaXN0ZXIgMzEgaXMgbWFnaWNhbGx5IG1vZGlmaWVkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIHRoYXQgcG9sbGluZyB3aWxsXFxuKyAqICAgcmVhZCB0aGUgcmlnaHQgZGF0YS4gT24gdGhlIFJUTDgzOHggcG9sbGluZyBzaW1wbHkgcmVzZXRzIGl0IHRvIHplcm8uIE90aGVyIGRldmljZXMgc2VlbVxcbisgKiAgIHRvIHRyYWNrIHRoZSBwYWdlIGFjY2VzcyBcXFwibWFnaWNhbGx5XFxcIiBpbiB0aGUgYmFja2dyb3VuZC5cXG4rICogLSBBIEM0NSBvdmVyIEMyMiBrZXJuZWwgYWNjZXNzIHNlcXVlbmNlIGlzIG1vc3QgbGlrZWx5IHRvIGZhaWwgYmVjYXVzZSBjaGFuY2VzIGFyZSBoaWdoIHRoYXRcXG4rICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi5cXG4rICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW5cXG4rICogICBzZXF1ZW5jZSBvZiByZWdpc3RlcnMgYW5kIHZhbHVlcyB3aXRob3V0IGRldmlhdGlvbi5cXG4rICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS5cXG4rICpcXG4rICogQ29uY2x1c2lvbjogVGhlIFJlYWx0ZWsgTURJTyBidXMgZHJpdmVyIFBIWSBhY2Nlc3MgbXVzdCBrbm93IGFuZCBoYW5kbGUgYW55IGludGVyZmVyZW5jZSB0aGF0XFxuKyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy5cXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG5AQCAtNTAsNiArMTI1LDUwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVnbWFwLmhcXHUwMDNlXFxuIFxcbisjZGVmaW5lIFJUTDgzODBfTlVNX0JVU0VTXFx0XFx0XFx0MVxcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXFx0XFx0XFx0NDA5NlxcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXFx0XFx0XFx0MjhcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFxcdFxcdFxcdDB4YTEwMFxcbisjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcXHRcXHRCSVQoMTUpXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzBcXHRcXHQweGExYjhcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMVxcdFxcdDB4YTFiY1xcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUlxcdFxcdEdFTk1BU0soMjQsIDIwKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0VcXHRcXHRHRU5NQVNLKDE5LCAxNSlcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFXFx0XFx0R0VOTUFTSygxNCwgMylcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEVcXHRcXHRCSVQoMilcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVBRFxcdFxcdFxcdDBcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDVcXHRcXHRCSVQoMSlcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjJcXHRcXHQwXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUxcXHRcXHRcXHQwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzJcXHRcXHQweGExYzBcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBXFx0XFx0R0VOTUFTSygzMSwgMTYpXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEFcXHRcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXFx0XFx0MHhhMWM0XFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMXFx0XFx0XFx0MHhhMTdjXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcXHRcXHQweGExYzhcXG4rXFxuKyNkZWZpbmUgUlRMODM5MF9OVU1fQlVTRVNcXHRcXHRcXHQyXFxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUEFHRVNcXHRcXHRcXHQ4MTkyXFxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUE9SVFNcXHRcXHRcXHQ1MlxcbisjZGVmaW5lIFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTFxcdFxcdDB4MDNlY1xcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMXFx0XFx0MHgwM2RjXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSXFx0XFx0R0VOTUFTSyg5LCA1KVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0VcXHRcXHRHRU5NQVNLKDIyLCAxMClcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRkFJTFxcdFxcdFxcdEJJVCgxKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURVxcdFxcdEJJVCgzKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFEXFx0XFx0XFx0MFxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NVxcdFxcdEJJVCgyKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMlxcdFxcdDBcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19DVFJMXFx0XFx0XFx0MHgwM2UwXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFXFx0XFx0R0VOTUFTSyg4LCAwKVxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTFxcdFxcdDB4MDNmMFxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEFcXHRcXHRHRU5NQVNLKDMxLCAxNilcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkxcXHRcXHRcXHQweDAzZjRcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XXFx0XFx0MHgwM2U0XFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcXHRcXHQweDAzZThcXG4rI2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFxcdFxcdDB4MDNmY1xcbitcXG4gI2RlZmluZSBSVEw5MzAwX05VTV9CVVNFU1xcdFxcdFxcdDRcXG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1xcdFxcdFxcdDQwOTZcXG4gI2RlZmluZSBSVEw5MzAwX05VTV9QT1JUU1xcdFxcdFxcdDI4XFxuQEAgLTcwLDYgKzE4OSw3IEBAXFxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0lOREFUQVxcdFxcdEdFTk1BU0soMzEsIDE2KVxcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9EQVRBXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1xcdFxcdDB4Y2I3Y1xcbisjZGVmaW5lIFJUTDkzMDBfU01JX1BPTExfQ1RSTFxcdFxcdFxcdDB4Y2E5MFxcbiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMXFx0XFx0MHhjYjgwXFxuIFxcbiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTXFx0XFx0XFx0NFxcbkBAIC05NSwxMiArMjE1LDE2IEBAXFxuICNkZWZpbmUgICBSVEw5MzEwX1BIWV9DVFJMX0lOREFUQVxcdFxcdEdFTk1BU0soMTUsIDApXFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX01NRF9DVFJMXFx0MHgwYzE4XFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9BRERSX0NUUkxcXHRcXHQweDBjNzRcXG4rI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFxcdFxcdDB4MGNjY1xcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUxcXHRcXHQweDBjOWNcXG4gXFxuICNkZWZpbmUgUEhZX0NUUkxfQ01EXFx0XFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFEXFx0XFx0XFx0R0VOTUFTSygyMCwgMTYpXFxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX1JFR1xcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuIFxcbisjZGVmaW5lIFJUTF9WRU5ET1JfSURcXHRcXHRcXHRcXHQweDAwMWNjODAwXFxuKyNkZWZpbmUgUlRMX1BBR0VfU0VMRUNUXFx0XFx0XFx0XFx0MzFcXG4rXFxuICNkZWZpbmUgTUFQX0FERFJTX1BFUl9SRUdcXHRcXHRcXHQ2XFxuICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFJcXHRcXHRcXHQ1XFxuICNkZWZpbmUgTUFQX0JJVFNfUEVSX0JVU1xcdFxcdFxcdDJcXG5AQCAtMTI2LDYgKzI1MCw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYge1xcbiBcXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XFxuIFxcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqL1xcbiBcXHRERUNMQVJFX0JJVE1BUCh2YWxpZF9wb3J0cywgTUFYX1BPUlRTKTtcXG4rXFx0dTE2IHBhZ2VbTUFYX1BPUlRTXTtcXG4gXFx0dTggc21pX2J1c1tNQVhfUE9SVFNdO1xcbiBcXHR1OCBzbWlfYWRkcltNQVhfUE9SVFNdO1xcbiBcXHRib29sIHNtaV9idXNfaXNfYzQ1W01BWF9TTUlfQlVTU0VTXTtcXG5AQCAtMTQyLDYgKzI2Nyw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xcbiBcXHR1OCBudW1fYnVzZXM7XFxuIFxcdHU4IG51bV9wb3J0cztcXG4gXFx0dTE2IG51bV9wYWdlcztcXG4rXFx0dTMyIHBvbGxfY3RybDtcXG4gXFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XFxuIFxcdGludCAoKnJlYWRfYzIyKShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XFxuIFxcdGludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcXG5AQCAtMTc3LDYgKzMwMywxMiBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxcbiBcXHRyZXR1cm4gY2hhbi1cXHUwMDNlcHJpdjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKVxcbit7XFxuK1xcdHJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2Vwb2xsX2N0cmwgKyAocG9ydCAvIDMyKSAqIDQsXFxuK1xcdFxcdFxcdFxcdCAgQklUKHBvcnQgJSAzMiksIGFjdGl2ZSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcXG4ge1xcbkBAIC0xODUsOSArMzE3LDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0dTMyIGNtZHN0YXRlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibGUgd3JvbmcgKi9cXG4rXFx0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibHkgd3JvbmcgKi9cXG4gXFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXFx1MDAzZXJlZ21hcCwgaW5mby1cXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTIyNyw3ICszNTksNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXFx1MDAzZXJlZ21hcCwgaW5mby1cXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTI2NCwxMyArMzk2LDcwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWNtZF93cml0ZSwgY21kX2RhdGEpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9IEJJVChwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFxcdTAwMjZjbWRfZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuK1xcdFxcdC5leHRfcGFnZVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXFx1MDAyNmNtZF9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmV4dF9wYWdlXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoXFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFxcdTAwM2VcXHUwMDNlIDMyKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuIHtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuIFxcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4gXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXFxuIFxcdH07XFxuIFxcbkBAIC0yODQsNyArNDczLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbiBcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4tXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuIFxcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXFxuIFxcdFxcdC5wb3J0X21hc2tfbG93XFx0PSBCSVQocG9ydCksXFxuIFxcdH07XFxuQEAgLTMyNCw3ICs1MTMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdVxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmJyb2FkY2FzdFxcdD0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLFxcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHR9O1xcbiBcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuQEAgLTMzNiw3ICs1MjUsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2hpZ2hcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXFx1MDAzZVxcdTAwM2UgMzIpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXFxuQEAgLTM4Miw4ICs1NzEsMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXFxuIFxcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBvcnQ7XFxuIFxcbi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKVxcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdGlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKVxcbitcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcGFnZVtwb3J0XTtcXG4rXFxuIFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCBcXHUwMDI2dmFsdWUpO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7XFxuIH1cXG5AQCAtMzk3LDggKzU5MCwxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNlxcbiBcXHRpZiAocG9ydCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBwb3J0O1xcbiBcXG4tXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaylcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRpZiAocmVnbnVtID09IFJUTF9QQUdFX1NFTEVDVCkge1xcbitcXHRcXHRcXHRpZiAodmFsdWUgXFx1MDAzZT0gUkFXX1BBR0UocHJpdikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlcGFnZVtwb3J0XSA9IHZhbHVlO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0cmV0ID0gcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNld3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtNDcxLDYgKzY3MywxNSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZ1xcbitcXHQgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbiB7XFxuIFxcdHUzMiBnbGJfY3RybF9tYXNrID0gMCwgZ2xiX2N0cmxfdmFsID0gMDtcXG5AQCAtNTA3LDYgKzcxOCw0OCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IGNoYW4tXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAocG9ydCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBwb3J0O1xcbitcXG4rXFx0LyogXFxcInN5bmNcXFwiIHBhZ2UgaW4gY2FzZSBvZiBwcmV2aW91c2x5IGZhaWxlZCBhdHRhY2htZW50ICovXFxuK1xcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spXFxuK1xcdFxcdHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0gPSAwO1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVxcdTAwM2VtZGlvX2J1c10gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFwaHlfaWRfY29tcGFyZV92ZW5kb3IocGh5ZGV2LVxcdTAwM2VwaHlfaWQsIFJUTF9WRU5ET1JfSUQpKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiT25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXY7XFxuK1xcdGludCBwb3J0O1xcbitcXG4rXFx0cHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyk7XFxuK1xcdHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi1cXHUwMDNlbWRpby5idXMsIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG4rXFxuK1xcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogXFxcInN5bmNcXFwiIHBhZ2UgZm9yIG5leHQgYXR0YWNobWVudCAqL1xcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKVxcbitcXHRcXHRwcml2LVxcdTAwM2VwYWdlW3BvcnRdID0gMDtcXG4rXFxuK1xcdGlmIChvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpKVxcbitcXHRcXHRkZXZfZXJyKGJ1cy1cXHUwMDNlcGFyZW50LCBcXFwiZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxcXFxuXFxcIiwgcG9ydCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXFxuIHtcXG5AQCAtNTM2LDYgKzc4OSw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2XFxuIFxcdFxcdGJ1cy1cXHUwMDNld3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjtcXG4gXFx0fVxcbiBcXHRidXMtXFx1MDAzZXBhcmVudCA9IGRldjtcXG4rXFx0YnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XFxuK1xcdGJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xcbitcXG4gXFx0Y2hhbiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4gXFx0Y2hhbi1cXHUwMDNlbWRpb19idXMgPSBtZGlvX2J1cztcXG4gXFx0Y2hhbi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuQEAgLTYzMyw4ICs4ODksMTMgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdFxcdCAqIChpLmUuIGNsYXVzZSA0NSkuIFNlbGVjdCAxMEdQSFkgbW9kZSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgUEhZIHRoYXRcXG4gXFx0XFx0ICogZGVjbGFyZXMgY29tcGF0aWJsZSA9IFxcXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWM0NVxcXCIuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGh5X2RuLCBcXFwiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jNDVcXFwiKSlcXG4rXFx0XFx0aWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBoeV9kbiwgXFxcImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1XFxcIikpIHtcXG4rXFx0XFx0XFx0aWYgKCFwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VyZWFkX2M0NSB8fCAhcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNld3JpdGVfYzQ1KSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbitcXHRcXHRcXHRcXHRnb3RvIHB1dF9ub2RlcztcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRwcml2LVxcdTAwM2VzbWlfYnVzX2lzX2M0NVtidXNdID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0X19zZXRfYml0KHBuLCBwcml2LVxcdTAwM2V2YWxpZF9wb3J0cyk7XFxuIFxcdFxcdHByaXYtXFx1MDAzZXNtaV9idXNbcG5dID0gYnVzO1xcbkBAIC02NTIsNiArOTEzLDE5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFxcdTAwM2MgcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlbnVtX3BvcnRzOyBwb3J0KyspIHtcXG4rXFx0XFx0ZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuQEAgLTY3MSw2ICs5NDUsMTAgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlcmVnbWFwKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlcmVnbWFwKTtcXG4gXFxuK1xcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4gXFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XFxuIFxcbiBcXHRlcnIgPSBvdHRvX2VtZGlvX21hcF9wb3J0cyhkZXYpO1xcbkBAIC02OTYsNiArOTc0LDQ3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7XFxuK1xcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXFxuK1xcdC5jbWRfZmFpbCA9IFJUTDgzODBfUEhZX0NUUkxfRkFJTCxcXG4rXFx0LmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELFxcbitcXHQuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSxcXG4rXFx0LmNtZF9yZWdzID0ge1xcbitcXHRcXHQuYzIyX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMSxcXG4rXFx0XFx0LmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsXFxuK1xcdFxcdC5pb19kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzIsXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93ID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzAsXFxuK1xcdH0sXFxuK1xcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcXG4rXFx0Lm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLFxcbitcXHQubnVtX3BvcnRzID0gUlRMODM4MF9OVU1fUE9SVFMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXFxuK1xcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIsXFxuK1xcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMixcXG4rXFx0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHtcXG4rXFx0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxcbitcXHQuY21kX3JlYWQgPSBSVEw4MzkwX1BIWV9DVFJMX1JFQUQsXFxuK1xcdC5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLFxcbitcXHQuY21kX3JlZ3MgPSB7XFxuK1xcdFxcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXFxuK1xcdFxcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxcbitcXHRcXHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcXG4rXFx0XFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcXG4rXFx0XFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXFxuK1xcdH0sXFxuK1xcdC5udW1fYnVzZXMgPSBSVEw4MzkwX05VTV9CVVNFUyxcXG4rXFx0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxcbitcXHQubnVtX3BvcnRzID0gUlRMODM5MF9OVU1fUE9SVFMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcXG4rXFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxcbitcXHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMixcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xcbiBcXHQuYWRkcl9tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxcbiBcXHQuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsXFxuQEAgLTcxMSw2ICsxMDMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XFxuIFxcdC5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUyxcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxcbiBcXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsXFxuIFxcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXFxuIFxcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMixcXG4gXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LFxcbkBAIC03MzYsNiArMTA1Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xcbiBcXHQubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsXFxuIFxcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDkzMTBfTlVNX1BPUlRTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXFxuIFxcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXFxuIFxcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMixcXG4gXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxcbkBAIC03NDQsNiArMTA2NSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3R0b19lbWRpb19pZHNbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDgzODAtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxydGw4MzkxLW1kaW9cXFwiLCAuZGF0YSA9IFxcdTAwMjZvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LFxcbiBcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscnRsOTMwMS1tZGlvXFxcIiwgLmRhdGEgPSBcXHUwMDI2b3R0b19lbWRpb185MzAwX2luZm8gfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDkzMTEtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXFxuIFxcdHt9XFxuQEAgLTc1NSw2ICsxMDc4LDcgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb3R0b19lbWRpb19kcml2ZXIgPSB7XFxuIFxcdC5kcml2ZXIgPSB7XFxuIFxcdFxcdC5uYW1lID0gXFxcIm1kaW8tcnRsOTMwMFxcXCIsXFxuIFxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IG90dG9fZW1kaW9faWRzLFxcbitcXHRcXHQuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsXFxuIFxcdH0sXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDk0YjJlODVlMDBhMzcuLjFhNDNmZWMwMjJhYTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG5AQCAtMTczNCw2ICsxNzM0LDk2IEBAIHN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuIFxcdHJldHVybiBwaHlkcnYtXFx1MDAzZWNvbmZpZ19pbnRyIFxcdTAwMjZcXHUwMDI2IHBoeWRydi1cXHUwMDNlaGFuZGxlX2ludGVycnVwdDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcGh5X2RldGFjaF9pbnRlcm5hbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIG5vdGlmeV9idXMpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2O1xcbitcXHRzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDtcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cztcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWRldmxpbmspIHtcXG4rXFx0XFx0ZGV2aWNlX2xpbmtfZGVsKHBoeWRldi1cXHUwMDNlZGV2bGluayk7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlZGV2bGluayA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZXN5c2ZzX2xpbmtzKSB7XFxuK1xcdFxcdGlmIChkZXYpXFxuK1xcdFxcdFxcdHN5c2ZzX3JlbW92ZV9saW5rKFxcdTAwMjZkZXYtXFx1MDAzZWRldi5rb2JqLCBcXFwicGh5ZGV2XFxcIik7XFxuK1xcdFxcdHN5c2ZzX3JlbW92ZV9saW5rKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LmtvYmosIFxcXCJhdHRhY2hlZF9kZXZcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2RldilcXG4rXFx0XFx0c3lzZnNfcmVtb3ZlX2ZpbGUoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYua29iaixcXG4rXFx0XFx0XFx0XFx0ICBcXHUwMDI2ZGV2X2F0dHJfcGh5X3N0YW5kYWxvbmUuYXR0cik7XFxuK1xcbitcXHRwaHlfc3VzcGVuZChwaHlkZXYpO1xcbitcXG4rXFx0aWYgKG5vdGlmeV9idXMgXFx1MDAyNlxcdTAwMjYgcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2gpXFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7XFxuK1xcbitcXHRpZiAoZGV2KSB7XFxuK1xcdFxcdHN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92O1xcbitcXG4rXFx0XFx0LyogaHdwcm92IG1heSB0ZWNobmljYWxseSBiZSBwcm90ZWN0ZWQgYnkgb3BzIGxvY2sgYnV0XFxuK1xcdFxcdCAqIG5vdCBmb3IgZGV2aWNlcyB3aXRoIGEgcGh5ZGV2LCBzZWUgcGh5X2xpbmtfdG9wb19hZGRfcGh5KClcXG4rXFx0XFx0ICovXFxuK1xcdFxcdGh3cHJvdiA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LVxcdTAwM2Vod3Byb3YpO1xcbitcXHRcXHQvKiBEaXNhYmxlIHRpbWVzdGFtcCBpZiBpdCBpcyB0aGUgb25lIHNlbGVjdGVkICovXFxuK1xcdFxcdGlmIChod3Byb3YgXFx1MDAyNlxcdTAwMjYgaHdwcm92LVxcdTAwM2VwaHlkZXYgPT0gcGh5ZGV2KSB7XFxuK1xcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXFx1MDAzZWh3cHJvdiwgTlVMTCk7XFxuK1xcdFxcdFxcdGtmcmVlX3JjdShod3Byb3YsIHJjdV9oZWFkKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYtXFx1MDAzZXBoeWRldiA9IE5VTEw7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2ID0gTlVMTDtcXG4rXFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5ZGV2KTtcXG4rXFx0fVxcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2VwaHlfbGlua19jaGFuZ2UgPSBOVUxMO1xcbitcXHRwaHlkZXYtXFx1MDAzZXBoeWxpbmsgPSBOVUxMO1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZHJpdmVyKVxcbitcXHRcXHRtb2R1bGVfcHV0KHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZHJpdmVyLVxcdTAwM2Vvd25lcik7XFxuK1xcbitcXHQvKiBJZiB0aGUgZGV2aWNlIGhhZCBubyBzcGVjaWZpYyBkcml2ZXIgYmVmb3JlIChpLmUuIC0gaXRcXG4rXFx0ICogd2FzIHVzaW5nIHRoZSBnZW5lcmljIGRyaXZlciksIHdlIHVuYmluZCB0aGUgZGV2aWNlXFxuK1xcdCAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUncyBhIGNoYW5jZSBhXFxuK1xcdCAqIHJlYWwgZHJpdmVyIGNvdWxkIGJlIGxvYWRlZFxcbitcXHQgKi9cXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaXNfZ2VucGh5X2RyaXZlbikge1xcbitcXHRcXHRkZXZpY2VfcmVsZWFzZV9kcml2ZXIoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYpO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWlzX2dlbnBoeV9kcml2ZW4gPSAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xcbitcXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcGh5ZGV2IG1pZ2h0IGdvIGF3YXkgb24gdGhlIHB1dF9kZXZpY2UoKSBiZWxvdywgc28gYXZvaWRcXG4rXFx0ICogYSB1c2UtYWZ0ZXItZnJlZSBidWcgYnkgcmVhZGluZyB0aGUgdW5kZXJseWluZyBidXMgZmlyc3QuXFxuK1xcdCAqL1xcbitcXHRidXMgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzO1xcbitcXG4rXFx0cHV0X2RldmljZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuK1xcdGlmIChkZXYpXFxuK1xcdFxcdG5kZXZfb3duZXIgPSBkZXYtXFx1MDAzZWRldi5wYXJlbnQtXFx1MDAzZWRyaXZlci1cXHUwMDNlb3duZXI7XFxuK1xcdGlmIChuZGV2X293bmVyICE9IGJ1cy1cXHUwMDNlb3duZXIpXFxuK1xcdFxcdG1vZHVsZV9wdXQoYnVzLVxcdTAwM2Vvd25lcik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxcbisgKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXFxuKyAqL1xcbit2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHQvKiBjbGVhbnVwIGluY2x1ZGluZyBidXMgbm90aWZpY2F0aW9uICovXFxuK1xcdHBoeV9kZXRhY2hfaW50ZXJuYWwocGh5ZGV2LCB0cnVlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xcbitcXG4gLyoqXFxuICAqIHBoeV9hdHRhY2hfZGlyZWN0IC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBnaXZlbiBQSFkgZGV2aWNlIHBvaW50ZXJcXG4gICogQGRldjogbmV0d29yayBkZXZpY2UgdG8gYXR0YWNoXFxuQEAgLTE4NzYsNiArMTk2NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJvcjtcXG4gXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xcbitcXHRcXHRlcnIgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGVycm9yO1xcbitcXHR9XFxuK1xcbiBcXHRwaHlfcmVzdW1lKHBoeWRldik7XFxuIFxcbiBcXHQvKipcXG5AQCAtMTg5MCw4ICsxOTg2LDggQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdHJldHVybiBlcnI7XFxuIFxcbiBlcnJvcjpcXG4tXFx0LyogcGh5X2RldGFjaCgpIGRvZXMgYWxsIG9mIHRoZSBjbGVhbnVwIGJlbG93ICovXFxuLVxcdHBoeV9kZXRhY2gocGh5ZGV2KTtcXG4rXFx0LyogY2xlYW51cCB3aXRob3V0IGJ1cyBub3RpZmljYXRpb24gKi9cXG4rXFx0cGh5X2RldGFjaF9pbnRlcm5hbChwaHlkZXYsIGZhbHNlKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gXFxuIGVycm9yX21vZHVsZV9wdXQ6XFxuQEAgLTE5MDYsODYgKzIwMDIsNiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcXG4gXFxuLS8qKlxcbi0gKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxcbi0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tICpcXG4tICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxcbi0gKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXFxuLSAqL1xcbi12b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4te1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXY7XFxuLVxcdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbi1cXG4tXFx0aWYgKHBoeWRldi1cXHUwMDNlZGV2bGluaykge1xcbi1cXHRcXHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVxcdTAwM2VkZXZsaW5rKTtcXG4tXFx0XFx0cGh5ZGV2LVxcdTAwM2VkZXZsaW5rID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHBoeWRldi1cXHUwMDNlc3lzZnNfbGlua3MpIHtcXG4tXFx0XFx0aWYgKGRldilcXG4tXFx0XFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNmRldi1cXHUwMDNlZGV2LmtvYmosIFxcXCJwaHlkZXZcXFwiKTtcXG4tXFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYua29iaiwgXFxcImF0dGFjaGVkX2RldlxcXCIpO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIXBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2KVxcbi1cXHRcXHRzeXNmc19yZW1vdmVfZmlsZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5rb2JqLFxcbi1cXHRcXHRcXHRcXHQgIFxcdTAwMjZkZXZfYXR0cl9waHlfc3RhbmRhbG9uZS5hdHRyKTtcXG4tXFxuLVxcdHBoeV9zdXNwZW5kKHBoeWRldik7XFxuLVxcdGlmIChkZXYpIHtcXG4tXFx0XFx0c3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7XFxuLVxcbi1cXHRcXHQvKiBod3Byb3YgbWF5IHRlY2huaWNhbGx5IGJlIHByb3RlY3RlZCBieSBvcHMgbG9jayBidXRcXG4tXFx0XFx0ICogbm90IGZvciBkZXZpY2VzIHdpdGggYSBwaHlkZXYsIHNlZSBwaHlfbGlua190b3BvX2FkZF9waHkoKVxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aHdwcm92ID0gcnRubF9kZXJlZmVyZW5jZShkZXYtXFx1MDAzZWh3cHJvdik7XFxuLVxcdFxcdC8qIERpc2FibGUgdGltZXN0YW1wIGlmIGl0IGlzIHRoZSBvbmUgc2VsZWN0ZWQgKi9cXG4tXFx0XFx0aWYgKGh3cHJvdiBcXHUwMDI2XFx1MDAyNiBod3Byb3YtXFx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcXG4tXFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cXHUwMDNlaHdwcm92LCBOVUxMKTtcXG4tXFx0XFx0XFx0a2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2Rldi1cXHUwMDNlcGh5ZGV2ID0gTlVMTDtcXG4tXFx0XFx0cGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xcbi1cXHRcXHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xcbi1cXHR9XFxuLVxcbi1cXHRwaHlkZXYtXFx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XFxuLVxcdHBoeWRldi1cXHUwMDNlcGh5bGluayA9IE5VTEw7XFxuLVxcbi1cXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5kcml2ZXIpXFxuLVxcdFxcdG1vZHVsZV9wdXQocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5kcml2ZXItXFx1MDAzZW93bmVyKTtcXG4tXFxuLVxcdC8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdFxcbi1cXHQgKiB3YXMgdXNpbmcgdGhlIGdlbmVyaWMgZHJpdmVyKSwgd2UgdW5iaW5kIHRoZSBkZXZpY2VcXG4tXFx0ICogZnJvbSB0aGUgZ2VuZXJpYyBkcml2ZXIgc28gdGhhdCB0aGVyZSdzIGEgY2hhbmNlIGFcXG4tXFx0ICogcmVhbCBkcml2ZXIgY291bGQgYmUgbG9hZGVkXFxuLVxcdCAqL1xcbi1cXHRpZiAocGh5ZGV2LVxcdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XFxuLVxcdFxcdGRldmljZV9yZWxlYXNlX2RyaXZlcihcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuLVxcdFxcdHBoeWRldi1cXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XFxuLVxcdH1cXG4tXFxuLVxcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXFxuLVxcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZFxcbi1cXHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cXG4tXFx0ICovXFxuLVxcdGJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuLVxcbi1cXHRwdXRfZGV2aWNlKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KTtcXG4tXFx0aWYgKGRldilcXG4tXFx0XFx0bmRldl9vd25lciA9IGRldi1cXHUwMDNlZGV2LnBhcmVudC1cXHUwMDNlZHJpdmVyLVxcdTAwM2Vvd25lcjtcXG4tXFx0aWYgKG5kZXZfb3duZXIgIT0gYnVzLVxcdTAwM2Vvd25lcilcXG4tXFx0XFx0bW9kdWxlX3B1dChidXMtXFx1MDAzZW93bmVyKTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xcbi1cXG4gaW50IHBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2O1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IDVmOGQ2NTg2OGUwZmYuLjNkOGFmZTZiN2YxYzUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMzc2LDYgKzM3NiwyNCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XFxuIFxcdFxcdFxcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKTtcXG4gXFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cXG4gXFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xcbitcXHQvKipcXG4rXFx0ICogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nIGZvciBNRElPIGJ1c1xcbitcXHQgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfZGV0YWNoLiBDYWxsZWRcXG4rXFx0ICogaW4gcGh5X2F0dGFjaF9kaXJlY3QoKSByaWdodCBiZWZvcmUgcGh5X3Jlc3VtZSgpLiBSdW5zIGluIHByb2Nlc3NcXG4rXFx0ICogY29udGV4dCwgbWF5IHNsZWVwIGFuZCBtYXkgYmUgY2FsbGVkIHdpdGggUlROTCBoZWxkLiBNdXN0IG5vdFxcbitcXHQgKiBhY3F1aXJlIG9yIHJlbHkgb24gUlROTC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJybm9cXG4rXFx0ICogb24gZmFpbHVyZS4gTXVzdCB1bndpbmQgaXRzIG93biBzdGF0ZSBvbiBlcnJvciBhcyBhdHRhY2htZW50IGlzXFxuK1xcdCAqIGFib3J0ZWQuXFxuK1xcdCAqL1xcbitcXHRpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuK1xcdC8qKlxcbitcXHQgKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcXG4rXFx0ICogZHJpdmVycy4gT3B0aW9uYWwgYW5kIGluZGVwZW5kZW50IG9mIEBub3RpZnlfcGh5X2F0dGFjaC4gQ2FsbGVkXFxuK1xcdCAqIGluIHBoeV9kZXRhY2goKSByaWdodCBhZnRlciBwaHlfc3VzcGVuZCgpLiBSdW5zIGluIHByb2Nlc3MgY29udGV4dCxcXG4rXFx0ICogbWF5IHNsZWVwIGFuZCBtYXkgYmUgY2FsbGVkIHdpdGggUlROTCBoZWxkLiBNdXN0IG5vdCBhY3F1aXJlIG9yXFxuK1xcdCAqIHJlbHkgb24gUlROTC5cXG4rXFx0ICovXFxuK1xcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIFxcbiBcXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXFxuIFxcdHN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMDowMS4zODcxODI5MjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzg2MDUxNjQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRElPX1JFQUxURUtfUlRMOTMwMFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9hdHRhY2hfZGlyZWN0XCIsXG4gICAgXCJwaHlfZGV0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgaW4gdGhlIGNvcmUgUEhZIGZyYW1ld29yayAoYHN0cnVjdCBtaWlfYnVzYCkgYW5kIG1vZGlmaWVzIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCB0byB1c2UgdGhlbS4gSXQgYWxzbyBhZGRzIHN1cHBvcnQgZm9yIFJUTDgzODAvUlRMODM5MCB0byB0aGUgUmVhbHRlayBNRElPIGRyaXZlciB3aGljaCBpbXBsZW1lbnRzIHRoZXNlIGNhbGxiYWNrcy4gVGhlIGNvcmUgUEhZIGZyYW1ld29yayBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ5M2I3ZmQ3MmFiODRlYTg0ZDMxMTczNDJmMzc5MjRhNTJjZjhlM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjE5OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5pbmRleCAyNzFlMDViYWU5YzU3Li42N2UwYjIzYTg0NzBlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbkBAIC00LDcgKzQsNyBAQFxuICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjXG4gJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4gXG4tdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXJcbit0aXRsZTogUmVhbHRlayBPdHRvIFN3aXRjaGVzIEV0aGVybmV0IE1ESU8gQ29udHJvbGxlclxuIFxuIG1haW50YWluZXJzOlxuICAgLSBDaHJpcyBQYWNraGFtIFx1MDAzY2NocmlzLnBhY2toYW1AYWxsaWVkdGVsZXNpcy5jby5uelx1MDAzZVxuQEAgLTEyLDYgKzEyLDE2IEBAIG1haW50YWluZXJzOlxuIHByb3BlcnRpZXM6XG4gICBjb21wYXRpYmxlOlxuICAgICBvbmVPZjpcbisgICAgICAtIGl0ZW1zOlxuKyAgICAgICAgICAtIGVudW06XG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvXG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpb1xuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuICAgICAgIC0gaXRlbXM6XG4gICAgICAgICAgIC0gZW51bTpcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvXG5AQCAtMjQsNiArMzQsOCBAQCBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTMtbWRpb1xuICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuICAgICAgIC0gZW51bTpcbisgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpb1xuKyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cbiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xuaW5kZXggYTA1MjI5ODM4Y2I0NS4uZDQ0Mjc4ZjI2ZmFiZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXG5AQCAtMTcyLDExICsxNzIsMTEgQEAgY29uZmlnIE1ESU9fSVBRODA2NFxuIFx0ICBpbnRlcmZhY2UgdW5pdHMgb2YgdGhlIElQUTgwNjQgU29DXG4gXG4gY29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXG4tXHR0cmlzdGF0ZSBcIlJlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XCJcbitcdHRyaXN0YXRlIFwiUmVhbHRlayBSVEw4M3h4L1JUTDkzeHggTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwiXG4gXHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXG4gXHRoZWxwXG4gXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgUmVhbHRla1xuLVx0ICBSVEw5MzAwIGZhbWlseSBvZiBFdGhlcm5ldCBzd2l0Y2hlcyB3aXRoIGludGVncmF0ZWQgU29DLlxuK1x0ICBSVEw4M3h4L1JUTDkzeHggZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXG4gXG4gY29uZmlnIE1ESU9fUkVHTUFQXG4gXHR0cmlzdGF0ZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuaW5kZXggYWZkNTJhMWNkN2Y4My4uNzdkYzA0NjMwYzQ0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG5AQCAtMzUsNiArMzUsODEgQEBcbiAgKlxuICAqIFRoZSBkcml2ZXIgd29ya3Mgb3V0IHRoZSBtYXBwaW5nIGJhc2VkIG9uIHRoZSBNRElPIGJ1cyBkZXNjcmliZWQgaW4gZGV2aWNlIHRyZWUgYW5kIHBoYW5kbGVzIG9uXG4gICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LlxuKyAqXG4rICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0XG4rICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy5cbisgKlxuKyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/XG4rICpcbisgKiBFYWNoIGRldmljZSBoYXMgYSBTTUlfUE9MTF9DVFJMIHJlZ2lzdGVyLiBBIHBlci1wb3J0IGJpdG1hc2sgZGVjaWRlcyBpZiB0aGUgaGFyZHdhcmUgcG9sbGluZyBvZlxuKyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvclxuKyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlXG4rICogTURJTyBidXMgb2YgYW4gUlRMODM4MCBhbmQgUlRMODM5MyBnaXZlcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChpbiBrZXJuZWwgbm90YXRpb24pOlxuKyAqXG4rICpcdFJUTDgzODBcdFx0XHRcdFJUTDgzOTNcbisgKlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKlx0cGh5X3dyaXRlKHBoeSwgMzEsIDB4MCk7XHRwaHlfcmVhZChwaHksIDApO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcdHBoeV9yZWFkKHBoeSwgMSk7XG4rICpcdHBoeV93cml0ZShwaHksIDE0LCAweDNjKTtcdHBoeV9yZWFkKHBoeSwgNCk7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCA1KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV9yZWFkKHBoeSwgNik7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1x0cGh5X3JlYWQocGh5LCA5KTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1x0cGh5X3JlYWQocGh5LCAxMCk7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCAxNSk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMTQpO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcbisgKlx0cGh5X3JlYWQocGh5LCA5KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xuKyAqXHRwaHlfcmVhZChwaHksIDEwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMTUpO1x0XHRwaHlfcmVhZChwaHksIDE0KTtcbisgKlx0cGh5X3JlYWQocGh5LCAwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMSk7XHRcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcbisgKlx0cGh5X3JlYWQocGh5LCA0KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuKyAqXHRwaHlfcmVhZChwaHksIDYpO1xuKyAqXG4rICogQWZ0ZXIgb25lIFBIWSBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIElmIG9uZSBidXMgaXMgZnVsbHlcbisgKiBzY2FubmVkIGl0IHN3aXRjaGVzIG92ZXIgdG8gdGhlIG5leHQgYnVzLiBCYXNpY2FsbHkgdGhlIHBvbGxpbmcgc3lzdGVtIGlzIGFsd2F5cyBidXN5IGFuZCB0aGVcbisgKiBNQUMgc3RhdGUgaXMgdXBkYXRlZCBpbiByZWFsLXRpbWUuXG4rICpcbisgKiBUaGlzIGlzIGEgZ2xpbXBzZSBsb29rIGF0IHRoZSBjb21wbGV4aXR5IG9mIHRoZSBwb2xsaW5nIGFuZCBsZWF2ZXMgb3V0IHRoZSBDNDUgY2FzZSBhbmQgdGhlIE1BQ1xuKyAqIHJlZ2lzdGVyIHVwZGF0ZSBsb2dpYyBhZnRlcndhcmRzLiBJbXBvcnRhbnQgdG8gbm90ZTpcbisgKlxuKyAqIC0gMTAwIE1CaXQgZG93bnNoaWZ0cyAoYnJva2VuIGNhYmxlcykgYXJlIGlkZW50aWZpZWQgYW5kIHByb3BhZ2F0ZWQgdG8gdGhlIE1BQyBjb3JyZWN0bHlcbisgKiAtIEFjY2VzcyB0byBNRElPX0FOX0VFRV9BRFYgYW5kIE1ESU9fQU5fRUVFX0xQQUJMRSB3b3JrcyB2aWEgQzQ1IG92ZXIgQzIyLlxuKyAqIC0gSXQgaXMgdW5jbGVhciBpZiB0aGVzZSBzZXF1ZW5jZXMgY2hhbmdlIGZvciBkaWZmZXJlbnQgUEhZcy5cbisgKiAtIEFjY2VzcyB0byBSZWFsdGVrIHJlc2VydmVkIHJlZ2lzdGVyIDI2IChsaW5rIHNwZWVkKSBoYXMgbm90IHlldCBiZWVuIHNlZW4uXG4rICpcbisgKiBIb3cgZG9lcyBNRElPIGFjY2VzcyBmcm9tIGtlcm5lbCB3b3JrP1xuKyAqXG4rICogV2hlbiBpc3N1aW5nIE1ESU8gYWNjZXNzZXMgdmlhIGFuIE1NSU8gYmFzZWQgaW50ZXJmYWNlIHRoZSBmaW5hbCB3cml0ZSB0byB0aGUgY29tbWFuZCByZWdpc3RlclxuKyAqIHNldHMgYSBcInJ1biBjb21tYW5kIG5vd1wiIGJpdC4gQmV0d2VlbiB0d28gcG9sbGluZyBzZXF1ZW5jZXMgZm9yIGRpZmZlcmVudCBQSFlzIHRoZSBoYXJkd2FyZVxuKyAqIGNoZWNrcyBpZiBhIHVzZXIgY29tbWFuZCBuZWVkcyB0byBydW4gYW5kIHNlbmRzIGl0IG9udG8gdGhlIGJ1cy4gQWZ0ZXJ3YXJkcyBpdCBzaW1wbHkgY29udGludWVzXG4rICogaXRzIHBvbGxpbmcgd29yay4gSW5zcGVjdGluZyB0aGUgY29tbWFuZCBzZXF1ZW5jZSBmb3IgYSBwYWdlZCB3cml0ZSBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6XG4rICpcbisgKlx0UlRMODM4MFx0XHRcdFx0UlRMODM5M1xuKyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqXHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XG4rICpcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1x0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XG4rICpcdFx0XHRcdFx0cGh5X3dyaXRlKHBoeSwgMzEsIDApO1xuKyAqXG4rICogV2hhdCBkb2VzIHRoaXMgbWVhbj9cbisgKlxuKyAqIFRoZXJlIGFyZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gcG9sbGluZyBhbmQgUEhZIGFjY2VzcyBiZXR3ZWVuIHRoZSBtb2RlbHMgYnV0IHRoZSBjaGFsbGVuZ2VcbisgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0XG4rICogaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsIFBIWSBzdWJzeXN0ZW0uXG4rICpcbisgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuXG4rICogICBFc3BlY2lhbGx5IGFuIHVucG9wdWxhdGVkIE1BQ19MSU5LX1NUUyByZWdpc3RlciBjYW5jZWxzIG9wZXJhdGlvbnMgdG8gb3RoZXIgTUFDIHJlZ2lzdGVycy5cbisgKiAtIFRoZSBSZWFsdGVrIHBhZ2UgcmVnaXN0ZXIgMzEgaXMgbWFnaWNhbGx5IG1vZGlmaWVkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIHRoYXQgcG9sbGluZyB3aWxsXG4rICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtXG4rICogICB0byB0cmFjayB0aGUgcGFnZSBhY2Nlc3MgXCJtYWdpY2FsbHlcIiBpbiB0aGUgYmFja2dyb3VuZC5cbisgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdFxuKyAqICAgdGhlIHBvbGxpbmcgZW5naW5lIG92ZXJ3cml0ZXMgcmVnaXN0ZXJzIDEzLzE0IGluIGJldHdlZW4uXG4rICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW5cbisgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLlxuKyAqIC0gQW4gYWNjZXNzIHRvIG9uZSBQSFkgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGZyZWUgc2xvdCBvZiB0aGUgcG9sbGluZyBlbmdpbmUuXG4rICpcbisgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXRcbisgKiBhcmlzZXMgZnJvbSB0aGUgYWJvdmUgZGVzY3JpYmVkIGhhcmR3YXJlIHBvbGxpbmcuXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuQEAgLTUwLDYgKzEyNSw1MCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuIFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVNcdFx0XHQxXG4rI2RlZmluZSBSVEw4MzgwX05VTV9QQUdFU1x0XHRcdDQwOTZcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXHRcdFx0MjhcbisjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMXHRcdFx0MHhhMTAwXG4rI2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FXHRcdEJJVCgxNSlcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXHRcdDB4YTFiOFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzFcdFx0MHhhMWJjXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFJcdFx0R0VOTUFTSygyNCwgMjApXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFXHRcdEdFTk1BU0soMTksIDE1KVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRVx0XHRHRU5NQVNLKDE0LCAzKVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFXHRcdEJJVCgyKVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQURcdFx0XHQwXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDVcdFx0QklUKDEpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjJcdFx0MFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUxcdFx0XHQwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMlx0XHQweGExYzBcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGExYzRcbisjZGVmaW5lIFJUTDgzODBfU01JX1BPTExfQ1RSTFx0XHRcdDB4YTE3Y1xuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhhMWM4XG4rXG4rI2RlZmluZSBSVEw4MzkwX05VTV9CVVNFU1x0XHRcdDJcbisjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTXHRcdFx0ODE5MlxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUE9SVFNcdFx0XHQ1MlxuKyNkZWZpbmUgUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMXHRcdDB4MDNlY1xuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkxcdFx0MHgwM2RjXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFJcdFx0R0VOTUFTSyg5LCA1KVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRVx0XHRHRU5NQVNLKDIyLCAxMClcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9GQUlMXHRcdFx0QklUKDEpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDMpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVBRFx0XHRcdDBcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMilcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19DVFJMXHRcdFx0MHgwM2UwXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0VcdFx0R0VOTUFTSyg4LCAwKVxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMXHRcdDB4MDNmMFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMXHRcdFx0MHgwM2Y0XG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XXHRcdDB4MDNlNFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcdFx0MHgwM2U4XG4rI2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDAzZmNcbitcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTXHRcdFx0NFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QT1JUU1x0XHRcdDI4XG5AQCAtNzAsNiArMTg5LDcgQEBcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGNiN2NcbisjZGVmaW5lIFJUTDkzMDBfU01JX1BPTExfQ1RSTFx0XHRcdDB4Y2E5MFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhjYjgwXG4gXG4gI2RlZmluZSBSVEw5MzEwX05VTV9CVVNFU1x0XHRcdDRcbkBAIC05NSwxMiArMjE1LDE2IEBAXG4gI2RlZmluZSAgIFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfTU1EX0NUUkxcdDB4MGMxOFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9BRERSX0NUUkxcdFx0MHgwYzc0XG4rI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDBjY2NcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUxcdFx0MHgwYzljXG4gXG4gI2RlZmluZSBQSFlfQ1RSTF9DTURcdFx0XHRcdEJJVCgwKVxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFEXHRcdFx0R0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfUkVHXHRcdFx0R0VOTUFTSygxNSwgMClcbiBcbisjZGVmaW5lIFJUTF9WRU5ET1JfSURcdFx0XHRcdDB4MDAxY2M4MDBcbisjZGVmaW5lIFJUTF9QQUdFX1NFTEVDVFx0XHRcdFx0MzFcbitcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXHRcdFx0NlxuICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFJcdFx0XHQ1XG4gI2RlZmluZSBNQVBfQklUU19QRVJfQlVTXHRcdFx0MlxuQEAgLTEyNiw2ICsyNTAsNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2IHtcbiBcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiBcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqL1xuIFx0REVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7XG4rXHR1MTYgcGFnZVtNQVhfUE9SVFNdO1xuIFx0dTggc21pX2J1c1tNQVhfUE9SVFNdO1xuIFx0dTggc21pX2FkZHJbTUFYX1BPUlRTXTtcbiBcdGJvb2wgc21pX2J1c19pc19jNDVbTUFYX1NNSV9CVVNTRVNdO1xuQEAgLTE0Miw2ICsyNjcsNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHtcbiBcdHU4IG51bV9idXNlcztcbiBcdHU4IG51bV9wb3J0cztcbiBcdHUxNiBudW1fcGFnZXM7XG4rXHR1MzIgcG9sbF9jdHJsO1xuIFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XG4gXHRpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuIFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuQEAgLTE3Nyw2ICszMDMsMTIgQEAgc3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcbiBcdHJldHVybiBjaGFuLVx1MDAzZXByaXY7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSlcbit7XG4rXHRyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBwcml2LVx1MDAzZWluZm8tXHUwMDNlcG9sbF9jdHJsICsgKHBvcnQgLyAzMikgKiA0LFxuK1x0XHRcdFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpXG4ge1xuQEAgLTE4NSw5ICszMTcsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0dTMyIGNtZHN0YXRlO1xuIFx0aW50IHJldDtcbiBcbi1cdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmxlIHdyb25nICovXG4rXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqL1xuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4rXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIyNyw3ICszNTksNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4rXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTI2NCwxMyArMzk2LDcwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVx1MDAzZWluZm8tXHUwMDNlY21kX3dyaXRlLCBjbWRfZGF0YSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbitcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbitcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbitcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuK1x0XHRcdFx0ICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5leHRfcGFnZVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuK1x0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuK1x0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuIHtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiBcdH07XG4gXG5AQCAtMjg0LDcgKzQ3Myw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSxcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiBcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuIFx0fTtcbkBAIC0zMjQsNyArNTEzLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHVcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYnJvYWRjYXN0XHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9CQ19QT1JUX0lELCBwb3J0KSxcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdH07XG4gXG4gXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDkzMTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuQEAgLTMzNiw3ICs1MjUsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG5AQCAtMzgyLDggKzU3MSwxMiBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSlcbiBcdGlmIChwb3J0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcG9ydDtcbiBcbi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKVxuK1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbitcdFx0aWYgKHJlZ251bSA9PSBSVExfUEFHRV9TRUxFQ1QpXG4rXHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlcGFnZVtwb3J0XTtcbitcbiBcdFx0cmV0ID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXJlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCBcdTAwMjZ2YWx1ZSk7XG4rXHR9XG4gXG4gXHRyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7XG4gfVxuQEAgLTM5Nyw4ICs1OTAsMTcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtLCB1MTZcbiBcdGlmIChwb3J0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcG9ydDtcbiBcbi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKVxuK1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbitcdFx0aWYgKHJlZ251bSA9PSBSVExfUEFHRV9TRUxFQ1QpIHtcbitcdFx0XHRpZiAodmFsdWUgXHUwMDNlPSBSQVdfUEFHRShwcml2KSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRcdHByaXYtXHUwMDNlcGFnZVtwb3J0XSA9IHZhbHVlO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXG4gXHRcdHJldCA9IHByaXYtXHUwMDNlaW5mby1cdTAwM2V3cml0ZV9jMjIoYnVzLCBwb3J0LCByZWdudW0sIHZhbHVlKTtcbitcdH1cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ3MSw2ICs2NzMsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuK3tcbitcdC8qXG4rXHQgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZ1xuK1x0ICogcGF0Y2hpbmcgYW5kIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgUEhZcyBhcmUgcHJvYmVkLlxuK1x0ICovXG4rXHRyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4ge1xuIFx0dTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwO1xuQEAgLTUwNyw2ICs3MTgsNDggQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXHUwMDNlbWRpby5idXMsIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IGNoYW4tXHUwMDNlcHJpdjtcbitcbitcdGlmIChwb3J0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcG9ydDtcbitcbitcdC8qIFwic3luY1wiIHBhZ2UgaW4gY2FzZSBvZiBwcmV2aW91c2x5IGZhaWxlZCBhdHRhY2htZW50ICovXG4rXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbitcdFx0cHJpdi1cdTAwM2VwYWdlW3BvcnRdID0gMDtcbitcbitcdGlmICghcHJpdi1cdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVx1MDAzZW1kaW9fYnVzXSBcdTAwMjZcdTAwMjZcbitcdCAgICAhcGh5X2lkX2NvbXBhcmVfdmVuZG9yKHBoeWRldi1cdTAwM2VwaHlfaWQsIFJUTF9WRU5ET1JfSUQpKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIk9ubHkgUmVhbHRlayBQSFlzIGFsbG93ZWQgb24gQzIyIGJ1c1xcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCB0cnVlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2O1xuK1x0aW50IHBvcnQ7XG4rXG4rXHRwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtXHUwMDNlbWRpby5idXMpO1xuK1x0cG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcbitcdGlmIChwb3J0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBcInN5bmNcIiBwYWdlIGZvciBuZXh0IGF0dGFjaG1lbnQgKi9cbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKVxuK1x0XHRwcml2LVx1MDAzZXBhZ2VbcG9ydF0gPSAwO1xuK1xuK1x0aWYgKG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSkpXG4rXHRcdGRldl9lcnIoYnVzLVx1MDAzZXBhcmVudCwgXCJmYWlsZWQgdG8gZGlzYWJsZSBwb2xsaW5nIGZvciBwb3J0ICVkXFxuXCIsIHBvcnQpO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcbiBcdFx0XHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqbm9kZSlcbiB7XG5AQCAtNTM2LDYgKzc4OSw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2XG4gXHRcdGJ1cy1cdTAwM2V3cml0ZSA9IG90dG9fZW1kaW9fd3JpdGVfYzIyO1xuIFx0fVxuIFx0YnVzLVx1MDAzZXBhcmVudCA9IGRldjtcbitcdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XG4rXHRidXMtXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xuK1xuIFx0Y2hhbiA9IGJ1cy1cdTAwM2Vwcml2O1xuIFx0Y2hhbi1cdTAwM2VtZGlvX2J1cyA9IG1kaW9fYnVzO1xuIFx0Y2hhbi1cdTAwM2Vwcml2ID0gcHJpdjtcbkBAIC02MzMsOCArODg5LDEzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHQgKiAoaS5lLiBjbGF1c2UgNDUpLiBTZWxlY3QgMTBHUEhZIG1vZGUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIFBIWSB0aGF0XG4gXHRcdCAqIGRlY2xhcmVzIGNvbXBhdGlibGUgPSBcImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1XCIuXG4gXHRcdCAqL1xuLVx0XHRpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGh5X2RuLCBcImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1XCIpKVxuK1x0XHRpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGh5X2RuLCBcImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1XCIpKSB7XG4rXHRcdFx0aWYgKCFwcml2LVx1MDAzZWluZm8tXHUwMDNlcmVhZF9jNDUgfHwgIXByaXYtXHUwMDNlaW5mby1cdTAwM2V3cml0ZV9jNDUpIHtcbitcdFx0XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuK1x0XHRcdFx0Z290byBwdXRfbm9kZXM7XG4rXHRcdFx0fVxuIFx0XHRcdHByaXYtXHUwMDNlc21pX2J1c19pc19jNDVbYnVzXSA9IHRydWU7XG4rXHRcdH1cbiBcbiBcdFx0X19zZXRfYml0KHBuLCBwcml2LVx1MDAzZXZhbGlkX3BvcnRzKTtcbiBcdFx0cHJpdi1cdTAwM2VzbWlfYnVzW3BuXSA9IGJ1cztcbkBAIC02NTIsNiArOTEzLDE5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZW51bV9wb3J0czsgcG9ydCsrKSB7XG4rXHRcdGVyciA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbkBAIC02NzEsNiArOTQ1LDEwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKTtcbiBcbitcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbiBcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFxuIFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbkBAIC02OTYsNiArOTc0LDQ3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0ge1xuK1x0LmFkZHJfbWFwX2Jhc2UgPSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbitcdC5jbWRfZmFpbCA9IFJUTDgzODBfUEhZX0NUUkxfRkFJTCxcbitcdC5jbWRfcmVhZCA9IFJUTDgzODBfUEhZX0NUUkxfUkVBRCxcbitcdC5jbWRfd3JpdGUgPSBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFLFxuK1x0LmNtZF9yZWdzID0ge1xuK1x0XHQuYzIyX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMSxcbitcdFx0LmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsXG4rXHRcdC5pb19kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzIsXG4rXHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzAsXG4rXHR9LFxuK1x0Lm51bV9idXNlcyA9IFJUTDgzODBfTlVNX0JVU0VTLFxuK1x0Lm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLFxuK1x0Lm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDgzODBfU01JX1BPTExfQ1RSTCxcbitcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIsXG4rXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsXG4rXHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMixcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0ge1xuK1x0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxuK1x0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxuK1x0LmNtZF93cml0ZSA9IFJUTDgzOTBfUEhZX0NUUkxfV1JJVEUsXG4rXHQuY21kX3JlZ3MgPSB7XG4rXHRcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXG4rXHRcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxuK1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcbitcdFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcbitcdFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXG4rXHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcbitcdFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXG4rXHR9LFxuK1x0Lm51bV9idXNlcyA9IFJUTDgzOTBfTlVNX0JVU0VTLFxuK1x0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxuK1x0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuK1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxuK1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5hZGRyX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4gXHQuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsXG5AQCAtNzExLDYgKzEwMzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzAwX05VTV9QQUdFUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LFxuQEAgLTczNiw2ICsxMDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7XG4gXHQubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsXG4gXHQubnVtX3BvcnRzID0gUlRMOTMxMF9OVU1fUE9SVFMsXG4rXHQucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxuQEAgLTc0NCw2ICsxMDY1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7XG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvdHRvX2VtZGlvX2lkc1tdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw4MzgwLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzgzODBfaW5mbyB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw4MzkxLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw5MzAxLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMDBfaW5mbyB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw5MzExLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LFxuIFx0e31cbkBAIC03NTUsNiArMTA3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG90dG9fZW1kaW9fZHJpdmVyID0ge1xuIFx0LmRyaXZlciA9IHtcbiBcdFx0Lm5hbWUgPSBcIm1kaW8tcnRsOTMwMFwiLFxuIFx0XHQub2ZfbWF0Y2hfdGFibGUgPSBvdHRvX2VtZGlvX2lkcyxcbitcdFx0LnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLFxuIFx0fSxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCA5NGIyZTg1ZTAwYTM3Li4xYTQzZmVjMDIyYWE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE3MzQsNiArMTczNCw5NiBAQCBzdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxuIFx0cmV0dXJuIHBoeWRydi1cdTAwM2Vjb25maWdfaW50ciBcdTAwMjZcdTAwMjYgcGh5ZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHBoeV9kZXRhY2hfaW50ZXJuYWwoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBub3RpZnlfYnVzKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2O1xuK1x0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VkZXZsaW5rKSB7XG4rXHRcdGRldmljZV9saW5rX2RlbChwaHlkZXYtXHUwMDNlZGV2bGluayk7XG4rXHRcdHBoeWRldi1cdTAwM2VkZXZsaW5rID0gTlVMTDtcbitcdH1cbitcbitcdGlmIChwaHlkZXYtXHUwMDNlc3lzZnNfbGlua3MpIHtcbitcdFx0aWYgKGRldilcbitcdFx0XHRzeXNmc19yZW1vdmVfbGluayhcdTAwMjZkZXYtXHUwMDNlZGV2LmtvYmosIFwicGh5ZGV2XCIpO1xuK1x0XHRzeXNmc19yZW1vdmVfbGluayhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYua29iaiwgXCJhdHRhY2hlZF9kZXZcIik7XG4rXHR9XG4rXG4rXHRpZiAoIXBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG4rXHRcdHN5c2ZzX3JlbW92ZV9maWxlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldi5rb2JqLFxuK1x0XHRcdFx0ICBcdTAwMjZkZXZfYXR0cl9waHlfc3RhbmRhbG9uZS5hdHRyKTtcbitcbitcdHBoeV9zdXNwZW5kKHBoeWRldik7XG4rXG4rXHRpZiAobm90aWZ5X2J1cyBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKVxuK1x0XHRwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2gocGh5ZGV2KTtcbitcbitcdGlmIChkZXYpIHtcbitcdFx0c3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7XG4rXG4rXHRcdC8qIGh3cHJvdiBtYXkgdGVjaG5pY2FsbHkgYmUgcHJvdGVjdGVkIGJ5IG9wcyBsb2NrIGJ1dFxuK1x0XHQgKiBub3QgZm9yIGRldmljZXMgd2l0aCBhIHBoeWRldiwgc2VlIHBoeV9saW5rX3RvcG9fYWRkX3BoeSgpXG4rXHRcdCAqL1xuK1x0XHRod3Byb3YgPSBydG5sX2RlcmVmZXJlbmNlKGRldi1cdTAwM2Vod3Byb3YpO1xuK1x0XHQvKiBEaXNhYmxlIHRpbWVzdGFtcCBpZiBpdCBpcyB0aGUgb25lIHNlbGVjdGVkICovXG4rXHRcdGlmIChod3Byb3YgXHUwMDI2XHUwMDI2IGh3cHJvdi1cdTAwM2VwaHlkZXYgPT0gcGh5ZGV2KSB7XG4rXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2Vod3Byb3YsIE5VTEwpO1xuK1x0XHRcdGtmcmVlX3JjdShod3Byb3YsIHJjdV9oZWFkKTtcbitcdFx0fVxuK1xuK1x0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LVx1MDAzZXBoeWRldiA9IE5VTEw7XG4rXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xuK1x0XHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xuK1x0fVxuK1xuK1x0cGh5ZGV2LVx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XG4rXHRwaHlkZXYtXHUwMDNlcGh5bGluayA9IE5VTEw7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmRyaXZlcilcbitcdFx0bW9kdWxlX3B1dChwaHlkZXYtXHUwMDNlbWRpby5kZXYuZHJpdmVyLVx1MDAzZW93bmVyKTtcbitcbitcdC8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdFxuK1x0ICogd2FzIHVzaW5nIHRoZSBnZW5lcmljIGRyaXZlciksIHdlIHVuYmluZCB0aGUgZGV2aWNlXG4rXHQgKiBmcm9tIHRoZSBnZW5lcmljIGRyaXZlciBzbyB0aGF0IHRoZXJlJ3MgYSBjaGFuY2UgYVxuK1x0ICogcmVhbCBkcml2ZXIgY291bGQgYmUgbG9hZGVkXG4rXHQgKi9cbitcdGlmIChwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbikge1xuK1x0XHRkZXZpY2VfcmVsZWFzZV9kcml2ZXIoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbitcdFx0cGh5ZGV2LVx1MDAzZWlzX2dlbnBoeV9kcml2ZW4gPSAwO1xuK1x0fVxuK1xuK1x0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cbitcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcbitcbitcdC8qXG4rXHQgKiBUaGUgcGh5ZGV2IG1pZ2h0IGdvIGF3YXkgb24gdGhlIHB1dF9kZXZpY2UoKSBiZWxvdywgc28gYXZvaWRcbitcdCAqIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGJ5IHJlYWRpbmcgdGhlIHVuZGVybHlpbmcgYnVzIGZpcnN0LlxuK1x0ICovXG4rXHRidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4rXG4rXHRwdXRfZGV2aWNlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4rXHRpZiAoZGV2KVxuK1x0XHRuZGV2X293bmVyID0gZGV2LVx1MDAzZWRldi5wYXJlbnQtXHUwMDNlZHJpdmVyLVx1MDAzZW93bmVyO1xuK1x0aWYgKG5kZXZfb3duZXIgIT0gYnVzLVx1MDAzZW93bmVyKVxuK1x0XHRtb2R1bGVfcHV0KGJ1cy1cdTAwM2Vvd25lcik7XG4rfVxuK1xuKy8qKlxuKyAqIHBoeV9kZXRhY2ggLSBkZXRhY2ggYSBQSFkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBUaGlzIGRldGFjaGVzIHRoZSBwaHkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlIGFuZCB0aGUgcGh5XG4rICogZHJpdmVyLCBhbmQgZHJvcHMgdGhlIHJlZmVyZW5jZSBjb3VudCB0YWtlbiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpLlxuKyAqL1xuK3ZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdC8qIGNsZWFudXAgaW5jbHVkaW5nIGJ1cyBub3RpZmljYXRpb24gKi9cbitcdHBoeV9kZXRhY2hfaW50ZXJuYWwocGh5ZGV2LCB0cnVlKTtcbit9XG4rRVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcbitcbiAvKipcbiAgKiBwaHlfYXR0YWNoX2RpcmVjdCAtIGF0dGFjaCBhIG5ldHdvcmsgZGV2aWNlIHRvIGEgZ2l2ZW4gUEhZIGRldmljZSBwb2ludGVyXG4gICogQGRldjogbmV0d29yayBkZXZpY2UgdG8gYXR0YWNoXG5AQCAtMTg3Niw2ICsxOTY2LDEyIEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvcjtcbiBcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcbitcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBlcnJvcjtcbitcdH1cbitcbiBcdHBoeV9yZXN1bWUocGh5ZGV2KTtcbiBcbiBcdC8qKlxuQEAgLTE4OTAsOCArMTk4Niw4IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0cmV0dXJuIGVycjtcbiBcbiBlcnJvcjpcbi1cdC8qIHBoeV9kZXRhY2goKSBkb2VzIGFsbCBvZiB0aGUgY2xlYW51cCBiZWxvdyAqL1xuLVx0cGh5X2RldGFjaChwaHlkZXYpO1xuK1x0LyogY2xlYW51cCB3aXRob3V0IGJ1cyBub3RpZmljYXRpb24gKi9cbitcdHBoeV9kZXRhY2hfaW50ZXJuYWwocGh5ZGV2LCBmYWxzZSk7XG4gXHRyZXR1cm4gZXJyO1xuIFxuIGVycm9yX21vZHVsZV9wdXQ6XG5AQCAtMTkwNiw4NiArMjAwMiw2IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIH1cbiBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcbiBcbi0vKipcbi0gKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxuLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuLSAqXG4tICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxuLSAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS5cbi0gKi9cbi12b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldjtcbi1cdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xuLVx0c3RydWN0IG1paV9idXMgKmJ1cztcbi1cbi1cdGlmIChwaHlkZXYtXHUwMDNlZGV2bGluaykge1xuLVx0XHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVx1MDAzZWRldmxpbmspO1xuLVx0XHRwaHlkZXYtXHUwMDNlZGV2bGluayA9IE5VTEw7XG4tXHR9XG4tXG4tXHRpZiAocGh5ZGV2LVx1MDAzZXN5c2ZzX2xpbmtzKSB7XG4tXHRcdGlmIChkZXYpXG4tXHRcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2ZGV2LVx1MDAzZWRldi5rb2JqLCBcInBoeWRldlwiKTtcbi1cdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmtvYmosIFwiYXR0YWNoZWRfZGV2XCIpO1xuLVx0fVxuLVxuLVx0aWYgKCFwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2KVxuLVx0XHRzeXNmc19yZW1vdmVfZmlsZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYua29iaixcbi1cdFx0XHRcdCAgXHUwMDI2ZGV2X2F0dHJfcGh5X3N0YW5kYWxvbmUuYXR0cik7XG4tXG4tXHRwaHlfc3VzcGVuZChwaHlkZXYpO1xuLVx0aWYgKGRldikge1xuLVx0XHRzdHJ1Y3QgaHd0c3RhbXBfcHJvdmlkZXIgKmh3cHJvdjtcbi1cbi1cdFx0LyogaHdwcm92IG1heSB0ZWNobmljYWxseSBiZSBwcm90ZWN0ZWQgYnkgb3BzIGxvY2sgYnV0XG4tXHRcdCAqIG5vdCBmb3IgZGV2aWNlcyB3aXRoIGEgcGh5ZGV2LCBzZWUgcGh5X2xpbmtfdG9wb19hZGRfcGh5KClcbi1cdFx0ICovXG4tXHRcdGh3cHJvdiA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZWh3cHJvdik7XG4tXHRcdC8qIERpc2FibGUgdGltZXN0YW1wIGlmIGl0IGlzIHRoZSBvbmUgc2VsZWN0ZWQgKi9cbi1cdFx0aWYgKGh3cHJvdiBcdTAwMjZcdTAwMjYgaHdwcm92LVx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcbi1cdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZWh3cHJvdiwgTlVMTCk7XG4tXHRcdFx0a2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpO1xuLVx0XHR9XG4tXG4tXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYtXHUwMDNlcGh5ZGV2ID0gTlVMTDtcbi1cdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiA9IE5VTEw7XG4tXHRcdHBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeWRldik7XG4tXHR9XG4tXG4tXHRwaHlkZXYtXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gTlVMTDtcbi1cdHBoeWRldi1cdTAwM2VwaHlsaW5rID0gTlVMTDtcbi1cbi1cdGlmIChwaHlkZXYtXHUwMDNlbWRpby5kZXYuZHJpdmVyKVxuLVx0XHRtb2R1bGVfcHV0KHBoeWRldi1cdTAwM2VtZGlvLmRldi5kcml2ZXItXHUwMDNlb3duZXIpO1xuLVxuLVx0LyogSWYgdGhlIGRldmljZSBoYWQgbm8gc3BlY2lmaWMgZHJpdmVyIGJlZm9yZSAoaS5lLiAtIGl0XG4tXHQgKiB3YXMgdXNpbmcgdGhlIGdlbmVyaWMgZHJpdmVyKSwgd2UgdW5iaW5kIHRoZSBkZXZpY2Vcbi1cdCAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUncyBhIGNoYW5jZSBhXG4tXHQgKiByZWFsIGRyaXZlciBjb3VsZCBiZSBsb2FkZWRcbi1cdCAqL1xuLVx0aWYgKHBoeWRldi1cdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XG4tXHRcdGRldmljZV9yZWxlYXNlX2RyaXZlcihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuLVx0XHRwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XG4tXHR9XG4tXG4tXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuLVx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuLVxuLVx0Lypcbi1cdCAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZFxuLVx0ICogYSB1c2UtYWZ0ZXItZnJlZSBidWcgYnkgcmVhZGluZyB0aGUgdW5kZXJseWluZyBidXMgZmlyc3QuXG4tXHQgKi9cbi1cdGJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbi1cbi1cdHB1dF9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbi1cdGlmIChkZXYpXG4tXHRcdG5kZXZfb3duZXIgPSBkZXYtXHUwMDNlZGV2LnBhcmVudC1cdTAwM2Vkcml2ZXItXHUwMDNlb3duZXI7XG4tXHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4tXHRcdG1vZHVsZV9wdXQoYnVzLVx1MDAzZW93bmVyKTtcbi19XG4tRVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcbi1cbiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggNWY4ZDY1ODY4ZTBmZi4uM2Q4YWZlNmI3ZjFjNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0zNzYsNiArMzc2LDI0IEBAIHN0cnVjdCBtaWlfYnVzIHtcbiBcdFx0XHQgaW50IHJlZ251bSwgdTE2IHZhbCk7XG4gXHQvKiogQHJlc2V0OiBQZXJmb3JtIGEgcmVzZXQgb2YgdGhlIGJ1cyAqL1xuIFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xuK1x0LyoqXG4rXHQgKiBAbm90aWZ5X3BoeV9hdHRhY2g6IFBlcmZvcm0gcG9zdC1hdHRhY2ggaGFuZGxpbmcgZm9yIE1ESU8gYnVzXG4rXHQgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfZGV0YWNoLiBDYWxsZWRcbitcdCAqIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkgcmlnaHQgYmVmb3JlIHBoeV9yZXN1bWUoKS4gUnVucyBpbiBwcm9jZXNzXG4rXHQgKiBjb250ZXh0LCBtYXkgc2xlZXAgYW5kIG1heSBiZSBjYWxsZWQgd2l0aCBSVE5MIGhlbGQuIE11c3Qgbm90XG4rXHQgKiBhY3F1aXJlIG9yIHJlbHkgb24gUlROTC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJybm9cbitcdCAqIG9uIGZhaWx1cmUuIE11c3QgdW53aW5kIGl0cyBvd24gc3RhdGUgb24gZXJyb3IgYXMgYXR0YWNobWVudCBpc1xuK1x0ICogYWJvcnRlZC5cbitcdCAqL1xuK1x0aW50ICgqbm90aWZ5X3BoeV9hdHRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuK1x0LyoqXG4rXHQgKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcbitcdCAqIGRyaXZlcnMuIE9wdGlvbmFsIGFuZCBpbmRlcGVuZGVudCBvZiBAbm90aWZ5X3BoeV9hdHRhY2guIENhbGxlZFxuK1x0ICogaW4gcGh5X2RldGFjaCgpIHJpZ2h0IGFmdGVyIHBoeV9zdXNwZW5kKCkuIFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0LFxuK1x0ICogbWF5IHNsZWVwIGFuZCBtYXkgYmUgY2FsbGVkIHdpdGggUlROTCBoZWxkLiBNdXN0IG5vdCBhY3F1aXJlIG9yXG4rXHQgKiByZWx5IG9uIFJUTkwuXG4rXHQgKi9cbitcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gXG4gXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXG4gXHRzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjIwOjAxLjM4NzE4NDExN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNzA3NjEyNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBSZWFsdGVrIE1ESU8gUGF0Y2ggYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBNRElPIGludGVyZmFjZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIGl0J3MgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4gSXQgbW9kaWZpZXMgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIHRvIGFkZCBzdXBwb3J0IGZvciBSVEw4MzgwL1JUTDgzOTAgYW5kIGltcG9ydGFudGx5LCBpdCB0b3VjaGVzIGBwaHlfZGV2aWNlLmNgIHRvIGFkZCBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIGNhbGxiYWNrcyB0byB0aGUgYG1paV9idXNgIHN0cnVjdHVyZS5cblxuRmlyc3QsIHRoZSBNRElPIGRyaXZlciBpdHNlbGYuIENhbiBJIGdldCB0byBpdCB3aXRoaW4gUUVNVT8gTURJTyBkcml2ZXJzIGFyZSB1c3VhbGx5IHByb2JlZCB2aWEgdGhlIGRldmljZSB0cmVlLCBzbyBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB3aGV0aGVyIEkgY2FuIGxvYWQgdGhlIG1vZHVsZSBhbmQgcHJvYmUgaXQgdXNpbmcgYSBmYWtlIGRldmljZSB0cmVlIG9yIHBsYXRmb3JtIGRldmljZS4gU3l6a2FsbGVyIGNhbiBkbyB0aGlzLCBpbmplY3RpbmcgcGxhdGZvcm0gZGV2aWNlcyBvciBldmVuIHVzaW5nIGRldmljZSB0cmVlIG92ZXJsYXlzLiBIb3dldmVyLCB0aGVyZSdzIGEgcHJvYmxlbTogdGhlIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBkcml2ZXIgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEFoLCB3YWl0LCBpdCBoYXMgYC5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZWAuIFRoaXMgbWVhbnMgSSBjYW4ndCBiaW5kIGl0IHZpYSBzeXNmcy4gU3l6a2FsbGVyIG1pZ2h0IHN0aWxsIGJlIGFibGUgdG8gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMsIGlmIGl0IGtub3dzIGhvdywgYnV0IHByb2JhYmx5IG9ubHkgaWYgaXQgbWF0Y2hlcyB0aGUgZXhhY3QgbmFtZSBvciBPRiBtYXRjaC4gVGhlIHByb2JlIGZ1bmN0aW9uLCBgb3R0b19lbWRpb19wcm9iZWAsIHVzZXMgYG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpYC4gVGhhdCBtZWFucyBpdCBuZWVkcyBhbiBPRiBub2RlLCBhbmQgaWYgaXQncyBwcm9iZWQgd2l0aG91dCBPRiwgYG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YWAgcmV0dXJucyBOVUxMLiBUaGlzIG1ha2VzIGl0IGhhcmRlciB0byB0cmlnZ2VyLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiBTeXprYWxsZXIgY2FuIGNyZWF0ZSBPRiBub2Rlcy4gSXQgc2VlbXMgbGltaXRlZC5cblxuSG93ZXZlciwgdGhlIHJlYWwgbWVhdCBvZiB0aGUgcGF0Y2ggaXMgdGhlIG1vZGlmaWNhdGlvbiBvZiBgcGh5X2RldmljZS5jYCwgd2hpY2ggaXMgY29yZSBQSFkgZnJhbWV3b3JrIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgdG8gYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIGFyZSBjcnVjaWFsLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHdoZW4gYXR0YWNoaW5nIGEgUEhZIHRvIGEgbmV0IGRldmljZSwgc28gYW55IE1ESU8gYnVzIGRyaXZlciAqY291bGQqIHVzZSBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgLiBUaGUgcGF0Y2ggKmFkZHMqIHRoZXNlIGNhbGxiYWNrcyB0byBgc3RydWN0IG1paV9idXNgIGluIGBwaHlfZGV2aWNlLmNgLiBUaGF0IG1ha2VzIHRoaXMgcGFydCBvZiB0aGUgY2hhbmdlIHZlcnkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuXG5cbkkgcXVpY2tseSBjaGVjayB0aGUgY29kZSBmb3IgYHBoeV9kZXRhY2hgIGFuZCBzZWUgaXQncyBjYWxsaW5nIGBwaHlfZGV0YWNoX2ludGVybmFsYC4gVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgUEhZIGZyYW1ld29yaywgYW5kIHRoYXQncyB3b3J0aCBjaGVja2luZy5cblxuTm93LCB0byBzZWUgd2hhdCB0byBlbmFibGUuIFRoZSBjb25maWcgZm9yIHRoZSBSZWFsdGVrIE1ESU8gZHJpdmVyIGlzIGBNRElPX1JFQUxURUtfUlRMOTMwMGAuIEFuZCwgb2YgY291cnNlLCBgUEhZTElCYCBpcyBuZWVkZWQuIEkgY29uZmlybSB0aGF0IGBwaHlfYXR0YWNoX2RpcmVjdGAgaXMgZXhwb3J0ZWQgdXNpbmcgdGhlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBmaW5kIGBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtgIGluIHRoZSBkaWZmLlxuXG5UaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHdoZXRoZXIgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gSSBuZWVkLiBJJ20gZm9jdXNpbmcgb24gdGhlIFBIWSBmcmFtZXdvcmsgY2hhbmdlcywgYW5kIHRoZXkncmUgY29udHJvbGxlZCBieSBgQ09ORklHX1BIWUxJQmAuIEkgd2FudCB0byBsaXN0IHRoZSBmb2N1cyBzeW1ib2xzLiBUaG9zZSBhcmUgYHBoeV9hdHRhY2hfZGlyZWN0YCwgYHBoeV9kZXRhY2hgLCBgcGh5X2RldGFjaF9pbnRlcm5hbGAsIGBvdHRvX2VtZGlvX3Byb2JlYCwgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2hgLCBhbmQgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2hgLiBTaW5jZSBgb3R0b19lbWRpb19wcm9iZWAgbWlnaHQgbm90IGJlIHJlYWNoYWJsZSB3aXRob3V0IE9GLCBJIHdvbid0IGZvY3VzIG9uIHRoYXQgb25lLCBidXQgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgcGFydCBvZiB0aGUgY29yZSBQSFkgZnJhbWV3b3JrLiBTbywgSSB3aWxsIGluY2x1ZGUgdGhvc2UuXG5cbkkgY2hlY2sgaWYgYHBoeV9kZXRhY2hfaW50ZXJuYWxgIGlzIHN0YXRpYywgd2hpY2ggaXQgaXMuIEFuZCBJIHNlZSB0aGF0IHRoZSBwcm9tcHQgc2F5cyB0byBwcmVmZXIgbm9uLXN0YXRpYyBBUEkgZW50cnlwb2ludHMuIFNvLCBJIHByb2JhYmx5IHNob3VsZG4ndCBpbmNsdWRlIHRoYXQgb25lIGluIGBGb2N1c1N5bWJvbHNgLCBhcyB0aGUgZnV6eiBlbmdpbmUgd2lsbCBsaWtlbHkgdHJ5IGBwaHlfZGV0YWNoYCBpbnN0ZWFkLiBUaG91Z2ggYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2hgIGlzIHN0YXRpYywgaXQgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBhbmQgaXMgY2FsbGVkIGluZGlyZWN0bHkuXG5cblNvLCBpcyBgTURJT19SRUFMVEVLX1JUTDkzMDBgIHdvcnRoIGVuYWJsaW5nPyBJIHNlZSBpdCBjYW4gYmUgZW5hYmxlZCB3aXRoIGBDT01QSUxFX1RFU1RgLCBzbyB5ZXMuIEkgdmVyaWZ5IGluIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIHRoYXQgaXQgY2FuIGJlIGVuYWJsZWQuIFRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlncyB0byB3b3JyeSBhYm91dCwgYW5kIGBDT05GSUdfUEhZTElCYCBpcyB1c3VhbGx5IGVuYWJsZWQgaW4gU3l6a2FsbGVyIGFueXdheS5cblxuRmluYWxseSwgSSByZXZpZXcgdGhlIGNoYW5nZXMgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIGFnYWluLiBUaGUgcmVmYWN0b3Jpbmcgb2YgYHBoeV9kZXRhY2hgIHRvIGBwaHlfZGV0YWNoX2ludGVybmFsYCBpcyB0aGVyZSB0byBhbGxvdyBjYWxsaW5nIGl0IHdpdGhvdXQgbm90aWZ5aW5nIHRoZSBidXNcblxuIiwiSW5wdXRUb2tlbnMiOjE1MDMyLCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMDoyNS4wOTQ3OTg1MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mjg5NTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURJT19SRUFMVEVLX1JUTDkzMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfYXR0YWNoX2RpcmVjdFwiLFxuICAgIFwicGh5X2RldGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIGluIHRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgKGBzdHJ1Y3QgbWlpX2J1c2ApIGFuZCBtb2RpZmllcyBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgdG8gdXNlIHRoZW0uIEl0IGFsc28gYWRkcyBzdXBwb3J0IGZvciBSVEw4MzgwL1JUTDgzOTAgdG8gdGhlIFJlYWx0ZWsgTURJTyBkcml2ZXIgd2hpY2ggaW1wbGVtZW50cyB0aGVzZSBjYWxsYmFja3MuIFRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1ESU9fUkVBTFRFS19SVEw5MzAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGh5X2F0dGFjaF9kaXJlY3RcIixcbiAgICBcInBoeV9kZXRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIGNhbGxiYWNrcyBpbiB0aGUgY29yZSBQSFkgZnJhbWV3b3JrIChgc3RydWN0IG1paV9idXNgKSBhbmQgbW9kaWZpZXMgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIHRvIHVzZSB0aGVtLiBJdCBhbHNvIGFkZHMgc3VwcG9ydCBmb3IgUlRMODM4MC9SVEw4MzkwIHRvIHRoZSBSZWFsdGVrIE1ESU8gZHJpdmVyIHdoaWNoIGltcGxlbWVudHMgdGhlc2UgY2FsbGJhY2tzLiBUaGUgY29yZSBQSFkgZnJhbWV3b3JrIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4pnp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 20:03:15 +0000 UTC FinishedAt: 2026-08-03 20:20:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MDIO_REALTEK_RTL9300" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MDIO_REALTEK_RTL9300" ], "series_id": "81e29a5d-da23-4a33-9c6b-8605cc19faf9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "phy_attach_direct", "phy_detach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X2F0dGFjaF9kaXJlY3QmIzM0OywKICAgICYjMzQ7cGh5X2RldGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIGNhbGxiYWNrcyBpbiB0aGUgY29yZSBQSFkgZnJhbWV3b3JrIChgc3RydWN0IG1paV9idXNgKSBhbmQgbW9kaWZpZXMgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIHRvIHVzZSB0aGVtLiBJdCBhbHNvIGFkZHMgc3VwcG9ydCBmb3IgUlRMODM4MC9SVEw4MzkwIHRvIHRoZSBSZWFsdGVrIE1ESU8gZHJpdmVyIHdoaWNoIGltcGxlbWVudHMgdGhlc2UgY2FsbGJhY2tzLiBUaGUgY29yZSBQSFkgZnJhbWV3b3JrIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ5M2I3ZmQ3MmFiODRlYTg0ZDMxMTczNDJmMzc5MjRhNTJjZjhlM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjE5OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuaW5kZXggMjcxZTA1YmFlOWM1Ny4uNjdlMGIyM2E4NDcwZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5AQCAtNCw3ICYjNDM7NCw3IEBAXG4gJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCNcbiAkc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiBcbi10aXRsZTogUmVhbHRlayBSVEw5MzAwIE1ESU8gQ29udHJvbGxlclxuJiM0Mzt0aXRsZTogUmVhbHRlayBPdHRvIFN3aXRjaGVzIEV0aGVybmV0IE1ESU8gQ29udHJvbGxlclxuIFxuIG1haW50YWluZXJzOlxuICAgLSBDaHJpcyBQYWNraGFtIFx1MDAzY2NocmlzLnBhY2toYW1AYWxsaWVkdGVsZXNpcy5jby5uelx1MDAzZVxuQEAgLTEyLDYgJiM0MzsxMiwxNiBAQCBtYWludGFpbmVyczpcbiBwcm9wZXJ0aWVzOlxuICAgY29tcGF0aWJsZTpcbiAgICAgb25lT2Y6XG4mIzQzOyAgICAgIC0gaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODEtbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW9cbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvXG4mIzQzOyAgICAgIC0gaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvXG4gICAgICAgLSBpdGVtczpcbiAgICAgICAgICAgLSBlbnVtOlxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW9cbkBAIC0yNCw2ICYjNDM7MzQsOCBAQCBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTMtbWRpb1xuICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgwLW1kaW9cbiYjNDM7ICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cbiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpb1xuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMS1tZGlvXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXG5pbmRleCBhMDUyMjk4MzhjYjQ1Li5kNDQyNzhmMjZmYWJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcbkBAIC0xNzIsMTEgJiM0MzsxNzIsMTEgQEAgY29uZmlnIE1ESU9fSVBRODA2NFxuIFx0ICBpbnRlcmZhY2UgdW5pdHMgb2YgdGhlIElQUTgwNjQgU29DXG4gXG4gY29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXG4tXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiBcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcbiBcdGhlbHBcbiBcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gaW50ZXJmYWNlIGZvdW5kIGluIHRoZSBSZWFsdGVrXG4tXHQgIFJUTDkzMDAgZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXG4mIzQzO1x0ICBSVEw4M3h4L1JUTDkzeHggZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXG4gXG4gY29uZmlnIE1ESU9fUkVHTUFQXG4gXHR0cmlzdGF0ZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuaW5kZXggYWZkNTJhMWNkN2Y4My4uNzdkYzA0NjMwYzQ0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG5AQCAtMzUsNiAmIzQzOzM1LDgxIEBAXG4gICpcbiAgKiBUaGUgZHJpdmVyIHdvcmtzIG91dCB0aGUgbWFwcGluZyBiYXNlZCBvbiB0aGUgTURJTyBidXMgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlIGFuZCBwaGFuZGxlcyBvblxuICAqIHRoZSBldGhlcm5ldC1wb3J0cyBwcm9wZXJ0eS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0XG4mIzQzOyAqIGNvbnN0YW50bHkgc2NhbnMgdGhlIE1ESU8gYnVzIGFuZCB0aGUgYXR0YWNoZWQgUEhZcyBhbmQgdXBkYXRlcyB0aGUgTUFDIHN0YXR1cyByZWdpc3RlcnMuXG4mIzQzOyAqXG4mIzQzOyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/XG4mIzQzOyAqXG4mIzQzOyAqIEVhY2ggZGV2aWNlIGhhcyBhIFNNSV9QT0xMX0NUUkwgcmVnaXN0ZXIuIEEgcGVyLXBvcnQgYml0bWFzayBkZWNpZGVzIGlmIHRoZSBoYXJkd2FyZSBwb2xsaW5nIG9mXG4mIzQzOyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvclxuJiM0MzsgKiBlYWNoIHNldCBwb2xsaW5nIGJpdCBpdCBpc3N1ZXMgYSBzdGF0dXMgY2hlY2sgZm9yIHRoZSBQSFkuIEF0dGFjaGluZyBhIGxvZ2ljIGFuYWx5emVyIHRvIHRoZVxuJiM0MzsgKiBNRElPIGJ1cyBvZiBhbiBSVEw4MzgwIGFuZCBSVEw4MzkzIGdpdmVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKGluIGtlcm5lbCBub3RhdGlvbik6XG4mIzQzOyAqXG4mIzQzOyAqXHRSVEw4MzgwXHRcdFx0XHRSVEw4MzkzXG4mIzQzOyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMzEsIDB4MCk7XHRwaHlfcmVhZChwaHksIDApO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XHRwaHlfcmVhZChwaHksIDEpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1x0cGh5X3JlYWQocGh5LCA0KTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCA1KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMTQpO1x0XHRwaHlfcmVhZChwaHksIDYpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XHRwaHlfcmVhZChwaHksIDkpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1x0cGh5X3JlYWQocGh5LCAxMCk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcdHBoeV9yZWFkKHBoeSwgMTUpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCA5KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxMCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDEpO1x0XHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDQpO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCA2KTtcbiYjNDM7ICpcbiYjNDM7ICogQWZ0ZXIgb25lIFBIWSBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIElmIG9uZSBidXMgaXMgZnVsbHlcbiYjNDM7ICogc2Nhbm5lZCBpdCBzd2l0Y2hlcyBvdmVyIHRvIHRoZSBuZXh0IGJ1cy4gQmFzaWNhbGx5IHRoZSBwb2xsaW5nIHN5c3RlbSBpcyBhbHdheXMgYnVzeSBhbmQgdGhlXG4mIzQzOyAqIE1BQyBzdGF0ZSBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyBhIGdsaW1wc2UgbG9vayBhdCB0aGUgY29tcGxleGl0eSBvZiB0aGUgcG9sbGluZyBhbmQgbGVhdmVzIG91dCB0aGUgQzQ1IGNhc2UgYW5kIHRoZSBNQUNcbiYjNDM7ICogcmVnaXN0ZXIgdXBkYXRlIGxvZ2ljIGFmdGVyd2FyZHMuIEltcG9ydGFudCB0byBub3RlOlxuJiM0MzsgKlxuJiM0MzsgKiAtIDEwMCBNQml0IGRvd25zaGlmdHMgKGJyb2tlbiBjYWJsZXMpIGFyZSBpZGVudGlmaWVkIGFuZCBwcm9wYWdhdGVkIHRvIHRoZSBNQUMgY29ycmVjdGx5XG4mIzQzOyAqIC0gQWNjZXNzIHRvIE1ESU9fQU5fRUVFX0FEViBhbmQgTURJT19BTl9FRUVfTFBBQkxFIHdvcmtzIHZpYSBDNDUgb3ZlciBDMjIuXG4mIzQzOyAqIC0gSXQgaXMgdW5jbGVhciBpZiB0aGVzZSBzZXF1ZW5jZXMgY2hhbmdlIGZvciBkaWZmZXJlbnQgUEhZcy5cbiYjNDM7ICogLSBBY2Nlc3MgdG8gUmVhbHRlayByZXNlcnZlZCByZWdpc3RlciAyNiAobGluayBzcGVlZCkgaGFzIG5vdCB5ZXQgYmVlbiBzZWVuLlxuJiM0MzsgKlxuJiM0MzsgKiBIb3cgZG9lcyBNRElPIGFjY2VzcyBmcm9tIGtlcm5lbCB3b3JrP1xuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIGlzc3VpbmcgTURJTyBhY2Nlc3NlcyB2aWEgYW4gTU1JTyBiYXNlZCBpbnRlcmZhY2UgdGhlIGZpbmFsIHdyaXRlIHRvIHRoZSBjb21tYW5kIHJlZ2lzdGVyXG4mIzQzOyAqIHNldHMgYSBcJiMzNDtydW4gY29tbWFuZCBub3dcJiMzNDsgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlXG4mIzQzOyAqIGNoZWNrcyBpZiBhIHVzZXIgY29tbWFuZCBuZWVkcyB0byBydW4gYW5kIHNlbmRzIGl0IG9udG8gdGhlIGJ1cy4gQWZ0ZXJ3YXJkcyBpdCBzaW1wbHkgY29udGludWVzXG4mIzQzOyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgd3JpdGUgb24gdGhlIGxvZ2ljIGFuYWx5emVyIGdpdmVzOlxuJiM0MzsgKlxuJiM0MzsgKlx0UlRMODM4MFx0XHRcdFx0UlRMODM5M1xuJiM0MzsgKlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1x0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XG4mIzQzOyAqXHRcdFx0XHRcdHBoeV93cml0ZShwaHksIDMxLCAwKTtcbiYjNDM7ICpcbiYjNDM7ICogV2hhdCBkb2VzIHRoaXMgbWVhbj9cbiYjNDM7ICpcbiYjNDM7ICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZVxuJiM0MzsgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0XG4mIzQzOyAqIGhhcyBzb21lIGltcGxpY2F0aW9ucyBmb3IgdGhlIGtlcm5lbCBQSFkgc3Vic3lzdGVtLlxuJiM0MzsgKlxuJiM0MzsgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuXG4mIzQzOyAqICAgRXNwZWNpYWxseSBhbiB1bnBvcHVsYXRlZCBNQUNfTElOS19TVFMgcmVnaXN0ZXIgY2FuY2VscyBvcGVyYXRpb25zIHRvIG90aGVyIE1BQyByZWdpc3RlcnMuXG4mIzQzOyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGxcbiYjNDM7ICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtXG4mIzQzOyAqICAgdG8gdHJhY2sgdGhlIHBhZ2UgYWNjZXNzIFwmIzM0O21hZ2ljYWxseVwmIzM0OyBpbiB0aGUgYmFja2dyb3VuZC5cbiYjNDM7ICogLSBBIEM0NSBvdmVyIEMyMiBrZXJuZWwgYWNjZXNzIHNlcXVlbmNlIGlzIG1vc3QgbGlrZWx5IHRvIGZhaWwgYmVjYXVzZSBjaGFuY2VzIGFyZSBoaWdoIHRoYXRcbiYjNDM7ICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi5cbiYjNDM7ICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW5cbiYjNDM7ICogICBzZXF1ZW5jZSBvZiByZWdpc3RlcnMgYW5kIHZhbHVlcyB3aXRob3V0IGRldmlhdGlvbi5cbiYjNDM7ICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS5cbiYjNDM7ICpcbiYjNDM7ICogQ29uY2x1c2lvbjogVGhlIFJlYWx0ZWsgTURJTyBidXMgZHJpdmVyIFBIWSBhY2Nlc3MgbXVzdCBrbm93IGFuZCBoYW5kbGUgYW55IGludGVyZmVyZW5jZSB0aGF0XG4mIzQzOyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG5AQCAtNTAsNiAmIzQzOzEyNSw1MCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuIFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX0JVU0VTXHRcdFx0MVxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXHRcdFx0NDA5NlxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXHRcdFx0MjhcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFx0XHRcdDB4YTEwMFxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXHRcdDB4YTFiOFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXHRcdDB4YTFiY1xuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDI0LCAyMClcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFXHRcdEdFTk1BU0soMTksIDE1KVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0VcdFx0R0VOTUFTSygxNCwgMylcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQURcdFx0XHQwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1XHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUxcdFx0XHQwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzJcdFx0MHhhMWMwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcdFx0MHhhMWM0XG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhhMTdjXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhhMWM4XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX0JVU0VTXHRcdFx0MlxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTXHRcdFx0ODE5MlxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTXHRcdFx0NTJcbiYjNDM7I2RlZmluZSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkxcdFx0MHgwM2VjXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkxcdFx0MHgwM2RjXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSXHRcdEdFTk1BU0soOSwgNSlcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMjIsIDEwKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9GQUlMXHRcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFXHRcdEJJVCgzKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFEXHRcdFx0MFxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjJcdFx0MFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkxcdFx0XHQweDAzZTBcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0VcdFx0R0VOTUFTSyg4LCAwKVxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTFx0XHQweDAzZjBcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTFx0XHRcdDB4MDNmNFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcdFx0MHgwM2U0XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcdFx0MHgwM2U4XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcdFx0MHgwM2ZjXG4mIzQzO1xuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1x0XHRcdDQwOTZcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXHRcdFx0MjhcbkBAIC03MCw2ICYjNDM7MTg5LDcgQEBcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGNiN2NcbiYjNDM7I2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkxcdFx0XHQweGNhOTBcbiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMXHRcdDB4Y2I4MFxuIFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcdFx0XHQ0XG5AQCAtOTUsMTIgJiM0MzsyMTUsMTYgQEBcbiAjZGVmaW5lICAgUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0lORFJUX0FDQ0VTU19NTURfQ1RSTFx0MHgwYzE4XG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTFx0XHQweDBjNzRcbiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDBjY2NcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUxcdFx0MHgwYzljXG4gXG4gI2RlZmluZSBQSFlfQ1RSTF9DTURcdFx0XHRcdEJJVCgwKVxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFEXHRcdFx0R0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfUkVHXHRcdFx0R0VOTUFTSygxNSwgMClcbiBcbiYjNDM7I2RlZmluZSBSVExfVkVORE9SX0lEXHRcdFx0XHQweDAwMWNjODAwXG4mIzQzOyNkZWZpbmUgUlRMX1BBR0VfU0VMRUNUXHRcdFx0XHQzMVxuJiM0MztcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXHRcdFx0NlxuICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFJcdFx0XHQ1XG4gI2RlZmluZSBNQVBfQklUU19QRVJfQlVTXHRcdFx0MlxuQEAgLTEyNiw2ICYjNDM7MjUwLDcgQEAgc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7XG4gXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4gXHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdCBIVyBhY2Nlc3MgKi9cbiBcdERFQ0xBUkVfQklUTUFQKHZhbGlkX3BvcnRzLCBNQVhfUE9SVFMpO1xuJiM0MztcdHUxNiBwYWdlW01BWF9QT1JUU107XG4gXHR1OCBzbWlfYnVzW01BWF9QT1JUU107XG4gXHR1OCBzbWlfYWRkcltNQVhfUE9SVFNdO1xuIFx0Ym9vbCBzbWlfYnVzX2lzX2M0NVtNQVhfU01JX0JVU1NFU107XG5AQCAtMTQyLDYgJiM0MzsyNjcsNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHtcbiBcdHU4IG51bV9idXNlcztcbiBcdHU4IG51bV9wb3J0cztcbiBcdHUxNiBudW1fcGFnZXM7XG4mIzQzO1x0dTMyIHBvbGxfY3RybDtcbiBcdGludCAoKnNldHVwX2NvbnRyb2xsZXIpKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpO1xuIFx0aW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbiBcdGludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbkBAIC0xNzcsNiAmIzQzOzMwMywxMiBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuIFx0cmV0dXJuIGNoYW4tXHUwMDNlcHJpdjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIHByaXYtXHUwMDNlaW5mby1cdTAwM2Vwb2xsX2N0cmwgJiM0MzsgKHBvcnQgLyAzMikgKiA0LFxuJiM0MztcdFx0XHRcdCAgQklUKHBvcnQgJSAzMiksIGFjdGl2ZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpXG4ge1xuQEAgLTE4NSw5ICYjNDM7MzE3LDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHUzMiBjbWRzdGF0ZTtcbiBcdGludCByZXQ7XG4gXG4tXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqL1xuJiM0MztcdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmx5IHdyb25nICovXG4gXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cdTAwM2VyZWdtYXAsIGluZm8tXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXG4tXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIyNyw3ICYjNDM7MzU5LDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LVx1MDAzZXJlZ21hcCwgaW5mby1cdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcbi1cdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xuJiM0MztcdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjY0LDEzICYjNDM7Mzk2LDcwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVx1MDAzZWluZm8tXHUwMDNlY21kX3dyaXRlLCBjbWRfZGF0YSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuZXh0X3BhZ2VcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuZXh0X3BhZ2VcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuIHtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4gXHR9O1xuIFxuQEAgLTI4NCw3ICYjNDM7NDczLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuIFx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuIFx0fTtcbkBAIC0zMjQsNyAmIzQzOzUxMyw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmJyb2FkY2FzdFx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfQkNfUE9SVF9JRCwgcG9ydCksXG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0fTtcbiBcbiBcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMOTMxMF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG5AQCAtMzM2LDcgJiM0Mzs1MjUsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4gXHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4gXHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuQEAgLTM4Miw4ICYjNDM7NTcxLDEyIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKVxuIFx0aWYgKHBvcnQgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spXG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdGlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKVxuJiM0MztcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2VwYWdlW3BvcnRdO1xuJiM0MztcbiBcdFx0cmV0ID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXJlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCBcdTAwMjZ2YWx1ZSk7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIHJldCA/IHJldCA6IHZhbHVlO1xuIH1cbkBAIC0zOTcsOCAmIzQzOzU5MCwxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNlxuIFx0aWYgKHBvcnQgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spXG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdGlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKSB7XG4mIzQzO1x0XHRcdGlmICh2YWx1ZSBcdTAwM2U9IFJBV19QQUdFKHByaXYpKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VwYWdlW3BvcnRdID0gdmFsdWU7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmV0ID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXdyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ3MSw2ICYjNDM7NjczLDE1IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBIWV9QQVRDSF9ET05FIGVuYWJsZXMgUEhZIGNvbnRyb2wgdmlhIFNvQy4gVGhpcyBpcyByZXF1aXJlZCBmb3IgUEhZIGFjY2VzcywgaW5jbHVkaW5nXG4mIzQzO1x0ICogcGF0Y2hpbmcgYW5kIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgUEhZcyBhcmUgcHJvYmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDgzODBfU01JX0dMQl9DVFJMLCBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIHtcbiBcdHUzMiBnbGJfY3RybF9tYXNrID0gMCwgZ2xiX2N0cmxfdmFsID0gMDtcbkBAIC01MDcsNiAmIzQzOzcxOCw0OCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi1cdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBjaGFuLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHBvcnQ7XG4mIzQzO1xuJiM0MztcdC8qIFwmIzM0O3N5bmNcJiMzNDsgcGFnZSBpbiBjYXNlIG9mIHByZXZpb3VzbHkgZmFpbGVkIGF0dGFjaG1lbnQgKi9cbiYjNDM7XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbiYjNDM7XHRcdHByaXYtXHUwMDNlcGFnZVtwb3J0XSA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVx1MDAzZW1kaW9fYnVzXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXBoeV9pZF9jb21wYXJlX3ZlbmRvcihwaHlkZXYtXHUwMDNlcGh5X2lkLCBSVExfVkVORE9SX0lEKSkge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O09ubHkgUmVhbHRlayBQSFlzIGFsbG93ZWQgb24gQzIyIGJ1c1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXY7XG4mIzQzO1x0aW50IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cdTAwM2VtZGlvLmJ1cyk7XG4mIzQzO1x0cG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIFwmIzM0O3N5bmNcJiMzNDsgcGFnZSBmb3IgbmV4dCBhdHRhY2htZW50ICovXG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spXG4mIzQzO1x0XHRwcml2LVx1MDAzZXBhZ2VbcG9ydF0gPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAob3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKSlcbiYjNDM7XHRcdGRldl9lcnIoYnVzLVx1MDAzZXBhcmVudCwgXCYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxcblwmIzM0OywgcG9ydCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXG4ge1xuQEAgLTUzNiw2ICYjNDM7Nzg5LDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcbiBcdFx0YnVzLVx1MDAzZXdyaXRlID0gb3R0b19lbWRpb193cml0ZV9jMjI7XG4gXHR9XG4gXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuJiM0MztcdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XG4mIzQzO1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbiYjNDM7XG4gXHRjaGFuID0gYnVzLVx1MDAzZXByaXY7XG4gXHRjaGFuLVx1MDAzZW1kaW9fYnVzID0gbWRpb19idXM7XG4gXHRjaGFuLVx1MDAzZXByaXYgPSBwcml2O1xuQEAgLTYzMyw4ICYjNDM7ODg5LDEzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHQgKiAoaS5lLiBjbGF1c2UgNDUpLiBTZWxlY3QgMTBHUEhZIG1vZGUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIFBIWSB0aGF0XG4gXHRcdCAqIGRlY2xhcmVzIGNvbXBhdGlibGUgPSBcJiMzNDtldGhlcm5ldC1waHktaWVlZTgwMi4zLWM0NVwmIzM0Oy5cbiBcdFx0ICovXG4tXHRcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwaHlfZG4sIFwmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1XCYjMzQ7KSlcbiYjNDM7XHRcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwaHlfZG4sIFwmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1XCYjMzQ7KSkge1xuJiM0MztcdFx0XHRpZiAoIXByaXYtXHUwMDNlaW5mby1cdTAwM2VyZWFkX2M0NSB8fCAhcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXdyaXRlX2M0NSkge1xuJiM0MztcdFx0XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0XHRcdGdvdG8gcHV0X25vZGVzO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0cHJpdi1cdTAwM2VzbWlfYnVzX2lzX2M0NVtidXNdID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0X19zZXRfYml0KHBuLCBwcml2LVx1MDAzZXZhbGlkX3BvcnRzKTtcbiBcdFx0cHJpdi1cdTAwM2VzbWlfYnVzW3BuXSA9IGJ1cztcbkBAIC02NTIsNiAmIzQzOzkxMywxOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fbWFwX3BvcnRzKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZW51bV9wb3J0czsgcG9ydCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGVyciA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG5AQCAtNjcxLDYgJiM0Mzs5NDUsMTAgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcmVnbWFwKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VyZWdtYXApO1xuIFxuJiM0MztcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiBcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFxuIFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbkBAIC02OTYsNiAmIzQzOzk3NCw0NyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7XG4mIzQzO1x0LmFkZHJfbWFwX2Jhc2UgPSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiYjNDM7XHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXG4mIzQzO1x0LmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELFxuJiM0MztcdC5jbWRfd3JpdGUgPSBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFLFxuJiM0MztcdC5jbWRfcmVncyA9IHtcbiYjNDM7XHRcdC5jMjJfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xLFxuJiM0MztcdFx0LmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsXG4mIzQzO1x0XHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3cgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMCxcbiYjNDM7XHR9LFxuJiM0MztcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcbiYjNDM7XHQubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsXG4mIzQzO1x0Lm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLFxuJiM0MztcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXG4mIzQzO1x0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcixcbiYjNDM7XHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsXG4mIzQzO1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHtcbiYjNDM7XHQuY21kX2ZhaWwgPSBSVEw4MzkwX1BIWV9DVFJMX0ZBSUwsXG4mIzQzO1x0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxuJiM0MztcdC5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLFxuJiM0MztcdC5jbWRfcmVncyA9IHtcbiYjNDM7XHRcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXG4mIzQzO1x0XHQuYzIyX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTCxcbiYjNDM7XHRcdC5jNDVfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMLFxuJiM0MztcdFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcbiYjNDM7XHRcdC5pb19kYXRhID0gUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3cgPSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XLFxuJiM0MztcdFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXG4mIzQzO1x0fSxcbiYjNDM7XHQubnVtX2J1c2VzID0gUlRMODM5MF9OVU1fQlVTRVMsXG4mIzQzO1x0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxuJiM0MztcdC5udW1fcG9ydHMgPSBSVEw4MzkwX05VTV9QT1JUUyxcbiYjNDM7XHQucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXG4mIzQzO1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxuJiM0MztcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5hZGRyX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4gXHQuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsXG5AQCAtNzExLDYgJiM0MzsxMDMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XG4gXHQubnVtX2J1c2VzID0gUlRMOTMwMF9OVU1fQlVTRVMsXG4gXHQubnVtX3BvcnRzID0gUlRMOTMwMF9OVU1fUE9SVFMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXG4mIzQzO1x0LnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsXG5AQCAtNzM2LDYgJiM0MzsxMDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7XG4gXHQubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsXG4gXHQubnVtX3BvcnRzID0gUlRMOTMxMF9OVU1fUE9SVFMsXG4mIzQzO1x0LnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuIFx0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcixcbiBcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMixcbiBcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NSxcbkBAIC03NDQsNiAmIzQzOzEwNjUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscnRsODM4MC1tZGlvXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscnRsODM5MS1tZGlvXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM5MF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxydGw5MzAxLW1kaW9cJiMzNDssIC5kYXRhID0gXHUwMDI2b3R0b19lbWRpb185MzAwX2luZm8gfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHJ0bDkzMTEtbWRpb1wmIzM0OywgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LFxuIFx0e31cbkBAIC03NTUsNiAmIzQzOzEwNzgsNyBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvdHRvX2VtZGlvX2RyaXZlciA9IHtcbiBcdC5kcml2ZXIgPSB7XG4gXHRcdC5uYW1lID0gXCYjMzQ7bWRpby1ydGw5MzAwXCYjMzQ7LFxuIFx0XHQub2ZfbWF0Y2hfdGFibGUgPSBvdHRvX2VtZGlvX2lkcyxcbiYjNDM7XHRcdC5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSxcbiBcdH0sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggOTRiMmU4NWUwMGEzNy4uMWE0M2ZlYzAyMmFhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbkBAIC0xNzM0LDYgJiM0MzsxNzM0LDk2IEBAIHN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4gXHRyZXR1cm4gcGh5ZHJ2LVx1MDAzZWNvbmZpZ19pbnRyIFx1MDAyNlx1MDAyNiBwaHlkcnYtXHUwMDNlaGFuZGxlX2ludGVycnVwdDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHBoeV9kZXRhY2hfaW50ZXJuYWwoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBub3RpZnlfYnVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXY7XG4mIzQzO1x0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cztcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VkZXZsaW5rKSB7XG4mIzQzO1x0XHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVx1MDAzZWRldmxpbmspO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWRldmxpbmsgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VzeXNmc19saW5rcykge1xuJiM0MztcdFx0aWYgKGRldilcbiYjNDM7XHRcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2ZGV2LVx1MDAzZWRldi5rb2JqLCBcJiMzNDtwaHlkZXZcJiMzNDspO1xuJiM0MztcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmtvYmosIFwmIzM0O2F0dGFjaGVkX2RldlwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG4mIzQzO1x0XHRzeXNmc19yZW1vdmVfZmlsZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYua29iaixcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNmRldl9hdHRyX3BoeV9zdGFuZGFsb25lLmF0dHIpO1xuJiM0MztcbiYjNDM7XHRwaHlfc3VzcGVuZChwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAobm90aWZ5X2J1cyBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKVxuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdGlmIChkZXYpIHtcbiYjNDM7XHRcdHN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92O1xuJiM0MztcbiYjNDM7XHRcdC8qIGh3cHJvdiBtYXkgdGVjaG5pY2FsbHkgYmUgcHJvdGVjdGVkIGJ5IG9wcyBsb2NrIGJ1dFxuJiM0MztcdFx0ICogbm90IGZvciBkZXZpY2VzIHdpdGggYSBwaHlkZXYsIHNlZSBwaHlfbGlua190b3BvX2FkZF9waHkoKVxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRod3Byb3YgPSBydG5sX2RlcmVmZXJlbmNlKGRldi1cdTAwM2Vod3Byb3YpO1xuJiM0MztcdFx0LyogRGlzYWJsZSB0aW1lc3RhbXAgaWYgaXQgaXMgdGhlIG9uZSBzZWxlY3RlZCAqL1xuJiM0MztcdFx0aWYgKGh3cHJvdiBcdTAwMjZcdTAwMjYgaHdwcm92LVx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcbiYjNDM7XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2Vod3Byb3YsIE5VTEwpO1xuJiM0MztcdFx0XHRrZnJlZV9yY3UoaHdwcm92LCByY3VfaGVhZCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldi1cdTAwM2VwaHlkZXYgPSBOVUxMO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiA9IE5VTEw7XG4mIzQzO1x0XHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBoeWxpbmsgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmRyaXZlcilcbiYjNDM7XHRcdG1vZHVsZV9wdXQocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmRyaXZlci1cdTAwM2Vvd25lcik7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdFxuJiM0MztcdCAqIHdhcyB1c2luZyB0aGUgZ2VuZXJpYyBkcml2ZXIpLCB3ZSB1bmJpbmQgdGhlIGRldmljZVxuJiM0MztcdCAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUmIzM5O3MgYSBjaGFuY2UgYVxuJiM0MztcdCAqIHJlYWwgZHJpdmVyIGNvdWxkIGJlIGxvYWRlZFxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbikge1xuJiM0MztcdFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuJiM0MztcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgcGh5ZGV2IG1pZ2h0IGdvIGF3YXkgb24gdGhlIHB1dF9kZXZpY2UoKSBiZWxvdywgc28gYXZvaWRcbiYjNDM7XHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4mIzQzO1xuJiM0MztcdHB1dF9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiYjNDM7XHRpZiAoZGV2KVxuJiM0MztcdFx0bmRldl9vd25lciA9IGRldi1cdTAwM2VkZXYucGFyZW50LVx1MDAzZWRyaXZlci1cdTAwM2Vvd25lcjtcbiYjNDM7XHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4mIzQzO1x0XHRtb2R1bGVfcHV0KGJ1cy1cdTAwM2Vvd25lcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxuJiM0MzsgKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdC8qIGNsZWFudXAgaW5jbHVkaW5nIGJ1cyBub3RpZmljYXRpb24gKi9cbiYjNDM7XHRwaHlfZGV0YWNoX2ludGVybmFsKHBoeWRldiwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcbiYjNDM7XG4gLyoqXG4gICogcGh5X2F0dGFjaF9kaXJlY3QgLSBhdHRhY2ggYSBuZXR3b3JrIGRldmljZSB0byBhIGdpdmVuIFBIWSBkZXZpY2UgcG9pbnRlclxuICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxuQEAgLTE4NzYsNiAmIzQzOzE5NjYsMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycm9yO1xuIFxuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcbiYjNDM7XHRcdGVyciA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBlcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cGh5X3Jlc3VtZShwaHlkZXYpO1xuIFxuIFx0LyoqXG5AQCAtMTg5MCw4ICYjNDM7MTk4Niw4IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0cmV0dXJuIGVycjtcbiBcbiBlcnJvcjpcbi1cdC8qIHBoeV9kZXRhY2goKSBkb2VzIGFsbCBvZiB0aGUgY2xlYW51cCBiZWxvdyAqL1xuLVx0cGh5X2RldGFjaChwaHlkZXYpO1xuJiM0MztcdC8qIGNsZWFudXAgd2l0aG91dCBidXMgbm90aWZpY2F0aW9uICovXG4mIzQzO1x0cGh5X2RldGFjaF9pbnRlcm5hbChwaHlkZXYsIGZhbHNlKTtcbiBcdHJldHVybiBlcnI7XG4gXG4gZXJyb3JfbW9kdWxlX3B1dDpcbkBAIC0xOTA2LDg2ICYjNDM7MjAwMiw2IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIH1cbiBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcbiBcbi0vKipcbi0gKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxuLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuLSAqXG4tICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxuLSAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS5cbi0gKi9cbi12b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldjtcbi1cdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xuLVx0c3RydWN0IG1paV9idXMgKmJ1cztcbi1cbi1cdGlmIChwaHlkZXYtXHUwMDNlZGV2bGluaykge1xuLVx0XHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVx1MDAzZWRldmxpbmspO1xuLVx0XHRwaHlkZXYtXHUwMDNlZGV2bGluayA9IE5VTEw7XG4tXHR9XG4tXG4tXHRpZiAocGh5ZGV2LVx1MDAzZXN5c2ZzX2xpbmtzKSB7XG4tXHRcdGlmIChkZXYpXG4tXHRcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2ZGV2LVx1MDAzZWRldi5rb2JqLCBcJiMzNDtwaHlkZXZcJiMzNDspO1xuLVx0XHRzeXNmc19yZW1vdmVfbGluayhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYua29iaiwgXCYjMzQ7YXR0YWNoZWRfZGV2XCYjMzQ7KTtcbi1cdH1cbi1cbi1cdGlmICghcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldilcbi1cdFx0c3lzZnNfcmVtb3ZlX2ZpbGUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmtvYmosXG4tXHRcdFx0XHQgIFx1MDAyNmRldl9hdHRyX3BoeV9zdGFuZGFsb25lLmF0dHIpO1xuLVxuLVx0cGh5X3N1c3BlbmQocGh5ZGV2KTtcbi1cdGlmIChkZXYpIHtcbi1cdFx0c3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7XG4tXG4tXHRcdC8qIGh3cHJvdiBtYXkgdGVjaG5pY2FsbHkgYmUgcHJvdGVjdGVkIGJ5IG9wcyBsb2NrIGJ1dFxuLVx0XHQgKiBub3QgZm9yIGRldmljZXMgd2l0aCBhIHBoeWRldiwgc2VlIHBoeV9saW5rX3RvcG9fYWRkX3BoeSgpXG4tXHRcdCAqL1xuLVx0XHRod3Byb3YgPSBydG5sX2RlcmVmZXJlbmNlKGRldi1cdTAwM2Vod3Byb3YpO1xuLVx0XHQvKiBEaXNhYmxlIHRpbWVzdGFtcCBpZiBpdCBpcyB0aGUgb25lIHNlbGVjdGVkICovXG4tXHRcdGlmIChod3Byb3YgXHUwMDI2XHUwMDI2IGh3cHJvdi1cdTAwM2VwaHlkZXYgPT0gcGh5ZGV2KSB7XG4tXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2Vod3Byb3YsIE5VTEwpO1xuLVx0XHRcdGtmcmVlX3JjdShod3Byb3YsIHJjdV9oZWFkKTtcbi1cdFx0fVxuLVxuLVx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LVx1MDAzZXBoeWRldiA9IE5VTEw7XG4tXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xuLVx0XHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xuLVx0fVxuLVxuLVx0cGh5ZGV2LVx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XG4tXHRwaHlkZXYtXHUwMDNlcGh5bGluayA9IE5VTEw7XG4tXG4tXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmRyaXZlcilcbi1cdFx0bW9kdWxlX3B1dChwaHlkZXYtXHUwMDNlbWRpby5kZXYuZHJpdmVyLVx1MDAzZW93bmVyKTtcbi1cbi1cdC8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdFxuLVx0ICogd2FzIHVzaW5nIHRoZSBnZW5lcmljIGRyaXZlciksIHdlIHVuYmluZCB0aGUgZGV2aWNlXG4tXHQgKiBmcm9tIHRoZSBnZW5lcmljIGRyaXZlciBzbyB0aGF0IHRoZXJlJiMzOTtzIGEgY2hhbmNlIGFcbi1cdCAqIHJlYWwgZHJpdmVyIGNvdWxkIGJlIGxvYWRlZFxuLVx0ICovXG4tXHRpZiAocGh5ZGV2LVx1MDAzZWlzX2dlbnBoeV9kcml2ZW4pIHtcbi1cdFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4tXHRcdHBoeWRldi1cdTAwM2Vpc19nZW5waHlfZHJpdmVuID0gMDtcbi1cdH1cbi1cbi1cdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXG4tXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XG4tXG4tXHQvKlxuLVx0ICogVGhlIHBoeWRldiBtaWdodCBnbyBhd2F5IG9uIHRoZSBwdXRfZGV2aWNlKCkgYmVsb3csIHNvIGF2b2lkXG4tXHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cbi1cdCAqL1xuLVx0YnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuLVxuLVx0cHV0X2RldmljZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuLVx0aWYgKGRldilcbi1cdFx0bmRldl9vd25lciA9IGRldi1cdTAwM2VkZXYucGFyZW50LVx1MDAzZWRyaXZlci1cdTAwM2Vvd25lcjtcbi1cdGlmIChuZGV2X293bmVyICE9IGJ1cy1cdTAwM2Vvd25lcilcbi1cdFx0bW9kdWxlX3B1dChidXMtXHUwMDNlb3duZXIpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xuLVxuIGludCBwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCA1ZjhkNjU4NjhlMGZmLi4zZDhhZmU2YjdmMWM1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTM3Niw2ICYjNDM7Mzc2LDI0IEBAIHN0cnVjdCBtaWlfYnVzIHtcbiBcdFx0XHQgaW50IHJlZ251bSwgdTE2IHZhbCk7XG4gXHQvKiogQHJlc2V0OiBQZXJmb3JtIGEgcmVzZXQgb2YgdGhlIGJ1cyAqL1xuIFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xuJiM0MztcdC8qKlxuJiM0MztcdCAqIEBub3RpZnlfcGh5X2F0dGFjaDogUGVyZm9ybSBwb3N0LWF0dGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcbiYjNDM7XHQgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfZGV0YWNoLiBDYWxsZWRcbiYjNDM7XHQgKiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpIHJpZ2h0IGJlZm9yZSBwaHlfcmVzdW1lKCkuIFJ1bnMgaW4gcHJvY2Vzc1xuJiM0MztcdCAqIGNvbnRleHQsIG1heSBzbGVlcCBhbmQgbWF5IGJlIGNhbGxlZCB3aXRoIFJUTkwgaGVsZC4gTXVzdCBub3RcbiYjNDM7XHQgKiBhY3F1aXJlIG9yIHJlbHkgb24gUlROTC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJybm9cbiYjNDM7XHQgKiBvbiBmYWlsdXJlLiBNdXN0IHVud2luZCBpdHMgb3duIHN0YXRlIG9uIGVycm9yIGFzIGF0dGFjaG1lbnQgaXNcbiYjNDM7XHQgKiBhYm9ydGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiYjNDM7XHQvKipcbiYjNDM7XHQgKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcbiYjNDM7XHQgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfYXR0YWNoLiBDYWxsZWRcbiYjNDM7XHQgKiBpbiBwaHlfZGV0YWNoKCkgcmlnaHQgYWZ0ZXIgcGh5X3N1c3BlbmQoKS4gUnVucyBpbiBwcm9jZXNzIGNvbnRleHQsXG4mIzQzO1x0ICogbWF5IHNsZWVwIGFuZCBtYXkgYmUgY2FsbGVkIHdpdGggUlROTCBoZWxkLiBNdXN0IG5vdCBhY3F1aXJlIG9yXG4mIzQzO1x0ICogcmVseSBvbiBSVE5MLlxuJiM0MztcdCAqL1xuJiM0MztcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gXG4gXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXG4gXHRzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TURJT19SRUFMVEVLX1JUTDkzMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfYXR0YWNoX2RpcmVjdCYjMzQ7LAogICAgJiMzNDtwaHlfZGV0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIGluIHRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgKGBzdHJ1Y3QgbWlpX2J1c2ApIGFuZCBtb2RpZmllcyBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgdG8gdXNlIHRoZW0uIEl0IGFsc28gYWRkcyBzdXBwb3J0IGZvciBSVEw4MzgwL1JUTDgzOTAgdG8gdGhlIFJlYWx0ZWsgTURJTyBkcml2ZXIgd2hpY2ggaW1wbGVtZW50cyB0aGVzZSBjYWxsYmFja3MuIFRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDkzYjdmZDcyYWI4NGVhODRkMzExNzM0MmYzNzkyNGE1MmNmOGUzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMjA6MTk6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwKaW5kZXggMjcxZTA1YmFlOWM1Ny4uNjdlMGIyM2E4NDcwZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbApAQCAtNCw3ICYjNDM7NCw3IEBACiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIwogJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiAKLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyCiYjNDM7dGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXIKIAogbWFpbnRhaW5lcnM6CiAgIC0gQ2hyaXMgUGFja2hhbSAmbHQ7Y2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56Jmd0OwpAQCAtMTIsNiAmIzQzOzEyLDE2IEBAIG1haW50YWluZXJzOgogcHJvcGVydGllczoKICAgY29tcGF0aWJsZToKICAgICBvbmVPZjoKJiM0MzsgICAgICAtIGl0ZW1zOgomIzQzOyAgICAgICAgICAtIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpbwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpbwomIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpbwogICAgICAgLSBpdGVtczoKICAgICAgICAgICAtIGVudW06CiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvCkBAIC0yNCw2ICYjNDM7MzQsOCBAQCBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvCiAgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw5MzExLW1kaW8KICAgICAgIC0gZW51bToKJiM0MzsgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpbwomIzQzOyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvCiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpbwogICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnCmluZGV4IGEwNTIyOTgzOGNiNDUuLmQ0NDI3OGYyNmZhYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcKQEAgLTE3MiwxMSAmIzQzOzE3MiwxMSBAQCBjb25maWcgTURJT19JUFE4MDY0CiAJICBpbnRlcmZhY2UgdW5pdHMgb2YgdGhlIElQUTgwNjQgU29DCiAKIGNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMAotCXRyaXN0YXRlICYjMzQ7UmVhbHRlayBSVEw5MzAwIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnQmIzM0OwomIzQzOwl0cmlzdGF0ZSAmIzM0O1JlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IE1ESU8gaW50ZXJmYWNlIHN1cHBvcnQmIzM0OwogCWRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1QKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgTURJTyBpbnRlcmZhY2UgZm91bmQgaW4gdGhlIFJlYWx0ZWsKLQkgIFJUTDkzMDAgZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuCiYjNDM7CSAgUlRMODN4eC9SVEw5M3h4IGZhbWlseSBvZiBFdGhlcm5ldCBzd2l0Y2hlcyB3aXRoIGludGVncmF0ZWQgU29DLgogCiBjb25maWcgTURJT19SRUdNQVAKIAl0cmlzdGF0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jCmluZGV4IGFmZDUyYTFjZDdmODMuLjc3ZGMwNDYzMGM0NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMKQEAgLTM1LDYgJiM0MzszNSw4MSBAQAogICoKICAqIFRoZSBkcml2ZXIgd29ya3Mgb3V0IHRoZSBtYXBwaW5nIGJhc2VkIG9uIHRoZSBNRElPIGJ1cyBkZXNjcmliZWQgaW4gZGV2aWNlIHRyZWUgYW5kIHBoYW5kbGVzIG9uCiAgKiB0aGUgZXRoZXJuZXQtcG9ydHMgcHJvcGVydHkuCiYjNDM7ICoKJiM0MzsgKiBUaGUgZGV2aWNlcyBoYXZlIGEgaGFyZHdhcmUgcG9sbGluZyB1bml0IHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB3aXRob3V0IGFueSBDUFUgbG9hZC4gSXQKJiM0MzsgKiBjb25zdGFudGx5IHNjYW5zIHRoZSBNRElPIGJ1cyBhbmQgdGhlIGF0dGFjaGVkIFBIWXMgYW5kIHVwZGF0ZXMgdGhlIE1BQyBzdGF0dXMgcmVnaXN0ZXJzLgomIzQzOyAqCiYjNDM7ICogSG93IGRvZXMgdGhlIHBvbGxpbmcgd29yaz8KJiM0MzsgKgomIzQzOyAqIEVhY2ggZGV2aWNlIGhhcyBhIFNNSV9QT0xMX0NUUkwgcmVnaXN0ZXIuIEEgcGVyLXBvcnQgYml0bWFzayBkZWNpZGVzIGlmIHRoZSBoYXJkd2FyZSBwb2xsaW5nIG9mCiYjNDM7ICogdGhlIGFzc29jaWF0ZWQgYnVzL2FkZHJlc3MgaXMgYWN0aXZlIG9yIG5vdC4gVGhlIGhhcmR3YXJlIHJ1bnMgYSB0aWdodCBsb29wIG92ZXIgdGhpcyBhbmQgZm9yCiYjNDM7ICogZWFjaCBzZXQgcG9sbGluZyBiaXQgaXQgaXNzdWVzIGEgc3RhdHVzIGNoZWNrIGZvciB0aGUgUEhZLiBBdHRhY2hpbmcgYSBsb2dpYyBhbmFseXplciB0byB0aGUKJiM0MzsgKiBNRElPIGJ1cyBvZiBhbiBSVEw4MzgwIGFuZCBSVEw4MzkzIGdpdmVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKGluIGtlcm5lbCBub3RhdGlvbik6CiYjNDM7ICoKJiM0MzsgKglSVEw4MzgwCQkJCVJUTDgzOTMKJiM0MzsgKgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMzEsIDB4MCk7CXBoeV9yZWFkKHBoeSwgMCk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CXBoeV9yZWFkKHBoeSwgMSk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpOwlwaHlfcmVhZChwaHksIDQpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpOwlwaHlfcmVhZChwaHksIDUpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMTQpOwkJcGh5X3JlYWQocGh5LCA2KTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg3KTsJcGh5X3JlYWQocGh5LCA5KTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7CXBoeV9yZWFkKHBoeSwgMTApOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpOwlwaHlfcmVhZChwaHksIDE1KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDE0KTsJCXBoeV93cml0ZShwaHksIDEzLCAweDcpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgOSk7CQlwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxMCk7CQlwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDE1KTsJCXBoeV9yZWFkKHBoeSwgMTQpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMCk7CQlwaHlfd3JpdGUocGh5LCAxMywgMHg3KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDEpOwkJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgNCk7CQlwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDUpOwkJcGh5X3JlYWQocGh5LCAxNCk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCA2KTsKJiM0MzsgKgomIzQzOyAqIEFmdGVyIG9uZSBQSFkgc3RhdHVzIGlzIHJlYWQsIHRoZSBwb2xsaW5nIGVuZ2luZSBnb2VzIG92ZXIgdG8gdGhlIG5leHQgUEhZLiBJZiBvbmUgYnVzIGlzIGZ1bGx5CiYjNDM7ICogc2Nhbm5lZCBpdCBzd2l0Y2hlcyBvdmVyIHRvIHRoZSBuZXh0IGJ1cy4gQmFzaWNhbGx5IHRoZSBwb2xsaW5nIHN5c3RlbSBpcyBhbHdheXMgYnVzeSBhbmQgdGhlCiYjNDM7ICogTUFDIHN0YXRlIGlzIHVwZGF0ZWQgaW4gcmVhbC10aW1lLgomIzQzOyAqCiYjNDM7ICogVGhpcyBpcyBhIGdsaW1wc2UgbG9vayBhdCB0aGUgY29tcGxleGl0eSBvZiB0aGUgcG9sbGluZyBhbmQgbGVhdmVzIG91dCB0aGUgQzQ1IGNhc2UgYW5kIHRoZSBNQUMKJiM0MzsgKiByZWdpc3RlciB1cGRhdGUgbG9naWMgYWZ0ZXJ3YXJkcy4gSW1wb3J0YW50IHRvIG5vdGU6CiYjNDM7ICoKJiM0MzsgKiAtIDEwMCBNQml0IGRvd25zaGlmdHMgKGJyb2tlbiBjYWJsZXMpIGFyZSBpZGVudGlmaWVkIGFuZCBwcm9wYWdhdGVkIHRvIHRoZSBNQUMgY29ycmVjdGx5CiYjNDM7ICogLSBBY2Nlc3MgdG8gTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgd29ya3MgdmlhIEM0NSBvdmVyIEMyMi4KJiM0MzsgKiAtIEl0IGlzIHVuY2xlYXIgaWYgdGhlc2Ugc2VxdWVuY2VzIGNoYW5nZSBmb3IgZGlmZmVyZW50IFBIWXMuCiYjNDM7ICogLSBBY2Nlc3MgdG8gUmVhbHRlayByZXNlcnZlZCByZWdpc3RlciAyNiAobGluayBzcGVlZCkgaGFzIG5vdCB5ZXQgYmVlbiBzZWVuLgomIzQzOyAqCiYjNDM7ICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz8KJiM0MzsgKgomIzQzOyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXIKJiM0MzsgKiBzZXRzIGEgJiMzNDtydW4gY29tbWFuZCBub3cmIzM0OyBiaXQuIEJldHdlZW4gdHdvIHBvbGxpbmcgc2VxdWVuY2VzIGZvciBkaWZmZXJlbnQgUEhZcyB0aGUgaGFyZHdhcmUKJiM0MzsgKiBjaGVja3MgaWYgYSB1c2VyIGNvbW1hbmQgbmVlZHMgdG8gcnVuIGFuZCBzZW5kcyBpdCBvbnRvIHRoZSBidXMuIEFmdGVyd2FyZHMgaXQgc2ltcGx5IGNvbnRpbnVlcwomIzQzOyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgd3JpdGUgb24gdGhlIGxvZ2ljIGFuYWx5emVyIGdpdmVzOgomIzQzOyAqCiYjNDM7ICoJUlRMODM4MAkJCQlSVEw4MzkzCiYjNDM7ICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqCXBoeV93cml0ZShwaHksIDMxLCBwYWdlKTsJcGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpOwlwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTsKJiM0MzsgKgkJCQkJcGh5X3dyaXRlKHBoeSwgMzEsIDApOwomIzQzOyAqCiYjNDM7ICogV2hhdCBkb2VzIHRoaXMgbWVhbj8KJiM0MzsgKgomIzQzOyAqIFRoZXJlIGFyZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gcG9sbGluZyBhbmQgUEhZIGFjY2VzcyBiZXR3ZWVuIHRoZSBtb2RlbHMgYnV0IHRoZSBjaGFsbGVuZ2UKJiM0MzsgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0CiYjNDM7ICogaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsIFBIWSBzdWJzeXN0ZW0uCiYjNDM7ICoKJiM0MzsgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuCiYjNDM7ICogICBFc3BlY2lhbGx5IGFuIHVucG9wdWxhdGVkIE1BQ19MSU5LX1NUUyByZWdpc3RlciBjYW5jZWxzIG9wZXJhdGlvbnMgdG8gb3RoZXIgTUFDIHJlZ2lzdGVycy4KJiM0MzsgKiAtIFRoZSBSZWFsdGVrIHBhZ2UgcmVnaXN0ZXIgMzEgaXMgbWFnaWNhbGx5IG1vZGlmaWVkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIHRoYXQgcG9sbGluZyB3aWxsCiYjNDM7ICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtCiYjNDM7ICogICB0byB0cmFjayB0aGUgcGFnZSBhY2Nlc3MgJiMzNDttYWdpY2FsbHkmIzM0OyBpbiB0aGUgYmFja2dyb3VuZC4KJiM0MzsgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdAomIzQzOyAqICAgdGhlIHBvbGxpbmcgZW5naW5lIG92ZXJ3cml0ZXMgcmVnaXN0ZXJzIDEzLzE0IGluIGJldHdlZW4uCiYjNDM7ICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW4KJiM0MzsgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLgomIzQzOyAqIC0gQW4gYWNjZXNzIHRvIG9uZSBQSFkgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGZyZWUgc2xvdCBvZiB0aGUgcG9sbGluZyBlbmdpbmUuCiYjNDM7ICoKJiM0MzsgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXQKJiM0MzsgKiBhcmlzZXMgZnJvbSB0aGUgYWJvdmUgZGVzY3JpYmVkIGhhcmR3YXJlIHBvbGxpbmcuCiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CkBAIC01MCw2ICYjNDM7MTI1LDUwIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yZWdtYXAuaCZndDsKIAomIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVMJCQkxCiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9QQUdFUwkJCTQwOTYKJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTCQkJMjgKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMCQkJMHhhMTAwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FCQlCSVQoMTUpCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMAkJMHhhMWI4CiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMQkJMHhhMWJjCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIJCUdFTk1BU0soMjQsIDIwKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRQkJR0VOTUFTSygxOSwgMTUpCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFCQlHRU5NQVNLKDE0LCAzKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFCQlCSVQoMikKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUFECQkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1CQlCSVQoMSkKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMgkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwJCQkwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMgkJMHhhMWMwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDMxLCAxNikKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBCQkJR0VOTUFTSygxNSwgMCkKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zCQkweGExYzQKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX1BPTExfQ1RSTAkJCTB4YTE3YwomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwJCTB4YTFjOAomIzQzOwomIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fQlVTRVMJCQkyCiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9QQUdFUwkJCTgxOTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTCQkJNTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTAkJMHgwM2VjCiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTAkJMHgwM2RjCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIJCUdFTk1BU0soOSwgNSkKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UJCUdFTk1BU0soMjIsIDEwKQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0ZBSUwJCQlCSVQoMSkKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURQkJQklUKDMpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVBRAkJCTAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NQkJQklUKDIpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIJCTAKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkwJCQkweDAzZTAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRQkJR0VOTUFTSyg4LCAwKQomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMCQkweDAzZjAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEJCUdFTk1BU0soMzEsIDE2KQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwJCQkweDAzZjQKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1cJCTB4MDNlNAomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gJCTB4MDNlOAomIzQzOyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwJCTB4MDNmYwomIzQzOwogI2RlZmluZSBSVEw5MzAwX05VTV9CVVNFUwkJCTQKICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVMJCQk0MDk2CiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTCQkJMjgKQEAgLTcwLDYgJiM0MzsxODksNyBAQAogI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDMxLCAxNikKICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQogI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMwkJMHhjYjdjCiYjNDM7I2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwJCQkweGNhOTAKICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwJCTB4Y2I4MAogCiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTCQkJNApAQCAtOTUsMTIgJiM0MzsyMTUsMTYgQEAKICNkZWZpbmUgICBSVEw5MzEwX1BIWV9DVFJMX0lOREFUQQkJR0VOTUFTSygxNSwgMCkKICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX01NRF9DVFJMCTB4MGMxOAogI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTAkJMHgwYzc0CiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTAkJMHgwY2NjCiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUwJCTB4MGM5YwogCiAjZGVmaW5lIFBIWV9DVFJMX0NNRAkJCQlCSVQoMCkKICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFECQkJR0VOTUFTSygyMCwgMTYpCiAjZGVmaW5lIFBIWV9DVFJMX01NRF9SRUcJCQlHRU5NQVNLKDE1LCAwKQogCiYjNDM7I2RlZmluZSBSVExfVkVORE9SX0lECQkJCTB4MDAxY2M4MDAKJiM0MzsjZGVmaW5lIFJUTF9QQUdFX1NFTEVDVAkJCQkzMQomIzQzOwogI2RlZmluZSBNQVBfQUREUlNfUEVSX1JFRwkJCTYKICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFIJCQk1CiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9CVVMJCQkyCkBAIC0xMjYsNiAmIzQzOzI1MCw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgewogCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdCBIVyBhY2Nlc3MgKi8KIAlERUNMQVJFX0JJVE1BUCh2YWxpZF9wb3J0cywgTUFYX1BPUlRTKTsKJiM0MzsJdTE2IHBhZ2VbTUFYX1BPUlRTXTsKIAl1OCBzbWlfYnVzW01BWF9QT1JUU107CiAJdTggc21pX2FkZHJbTUFYX1BPUlRTXTsKIAlib29sIHNtaV9idXNfaXNfYzQ1W01BWF9TTUlfQlVTU0VTXTsKQEAgLTE0Miw2ICYjNDM7MjY3LDcgQEAgc3RydWN0IG90dG9fZW1kaW9faW5mbyB7CiAJdTggbnVtX2J1c2VzOwogCXU4IG51bV9wb3J0czsKIAl1MTYgbnVtX3BhZ2VzOwomIzQzOwl1MzIgcG9sbF9jdHJsOwogCWludCAoKnNldHVwX2NvbnRyb2xsZXIpKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpOwogCWludCAoKnJlYWRfYzIyKShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7CiAJaW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpOwpAQCAtMTc3LDYgJiM0MzszMDMsMTIgQEAgc3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cykKIAlyZXR1cm4gY2hhbi0mZ3Q7cHJpdjsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBwcml2LSZndDtpbmZvLSZndDtwb2xsX2N0cmwgJiM0MzsgKHBvcnQgLyAzMikgKiA0LAomIzQzOwkJCQkgIEJJVChwb3J0ICUgMzIpLCBhY3RpdmUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJCQkgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpCiB7CkBAIC0xODUsOSAmIzQzOzMxNyw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJdTMyIGNtZHN0YXRlOwogCWludCByZXQ7CiAKLQkvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqLwomIzQzOwkvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqLwogCXJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LSZndDtyZWdtYXAsIGluZm8tJmd0O2NtZF9yZWdzLmMyMl9kYXRhLAotCQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7CiYjNDM7CQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTIyNyw3ICYjNDM7MzU5LDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCwKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LSZndDtyZWdtYXAsIGluZm8tJmd0O2NtZF9yZWdzLmMyMl9kYXRhLAotCQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7CiYjNDM7CQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTI2NCwxMyAmIzQzOzM5Niw3MCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJcmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtJmd0O2luZm8tJmd0O2NtZF93cml0ZSwgY21kX2RhdGEpOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCAmYW1wO2NtZF9kYXRhLAomIzQzOwkJCQkgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiYjNDM7CQkucG9ydF9tYXNrX2xvdwk9IEJJVChwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmV4dF9wYWdlCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEsCiYjNDM7CQkJCSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKJiM0MzsJCS5leHRfcGFnZQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiYjNDM7CQkucG9ydF9tYXNrX2hpZ2gJPSAodTMyKShCSVRfVUxMKHBvcnQpICZndDsmZ3Q7IDMyKSwKJiM0MzsJCS5wb3J0X21hc2tfbG93CT0gKHUzMikoQklUX1VMTChwb3J0KSksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQogewogCXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiAJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiAJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiAJCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8Ci0JCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksCiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiAJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiAJfTsKIApAQCAtMjg0LDcgJiM0Mzs0NzMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sCiAJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiAJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiAJCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8Ci0JCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksCiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiAJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAogCQkucG9ydF9tYXNrX2xvdwk9IEJJVChwb3J0KSwKIAl9OwpAQCAtMzI0LDcgJiM0Mzs1MTMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdQogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYnJvYWRjYXN0CT0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLAogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCX07CiAKIAlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDkzMTBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEsCkBAIC0zMzYsNyAmIzQzOzUyNSw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwKIAlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKIAkJLnBvcnRfbWFza19oaWdoCT0gKHUzMikoQklUX1VMTChwb3J0KSAmZ3Q7Jmd0OyAzMiksCiAJCS5wb3J0X21hc2tfbG93CT0gKHUzMikoQklUX1VMTChwb3J0KSksCkBAIC0zODIsOCAmIzQzOzU3MSwxMiBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSkKIAlpZiAocG9ydCAmbHQ7IDApCiAJCXJldHVybiBwb3J0OwogCi0Jc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spCiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwcml2LSZndDtsb2NrKSB7CiYjNDM7CQlpZiAocmVnbnVtID09IFJUTF9QQUdFX1NFTEVDVCkKJiM0MzsJCQlyZXR1cm4gcHJpdi0mZ3Q7cGFnZVtwb3J0XTsKJiM0MzsKIAkJcmV0ID0gcHJpdi0mZ3Q7aW5mby0mZ3Q7cmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sICZhbXA7dmFsdWUpOwomIzQzOwl9CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7CiB9CkBAIC0zOTcsOCAmIzQzOzU5MCwxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNgogCWlmIChwb3J0ICZsdDsgMCkKIAkJcmV0dXJuIHBvcnQ7CiAKLQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCWlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKSB7CiYjNDM7CQkJaWYgKHZhbHVlICZndDs9IFJBV19QQUdFKHByaXYpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCQlwcml2LSZndDtwYWdlW3BvcnRdID0gdmFsdWU7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CiAJCXJldCA9IHByaXYtJmd0O2luZm8tJmd0O3dyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpOwomIzQzOwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDcxLDYgJiM0Mzs2NzMsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZwomIzQzOwkgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtJmd0O3JlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiB7CiAJdTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwOwpAQCAtNTA3LDYgJiM0Mzs3MTgsNDggQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LSZndDttZGlvLmJ1cywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IGNoYW4tJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmIChwb3J0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBwb3J0OwomIzQzOwomIzQzOwkvKiAmIzM0O3N5bmMmIzM0OyBwYWdlIGluIGNhc2Ugb2YgcHJldmlvdXNseSBmYWlsZWQgYXR0YWNobWVudCAqLwomIzQzOwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykKJiM0MzsJCXByaXYtJmd0O3BhZ2VbcG9ydF0gPSAwOwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3NtaV9idXNfaXNfYzQ1W2NoYW4tJmd0O21kaW9fYnVzXSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcGh5X2lkX2NvbXBhcmVfdmVuZG9yKHBoeWRldi0mZ3Q7cGh5X2lkLCBSVExfVkVORE9SX0lEKSkgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7T25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi0mZ3Q7bWRpby5idXM7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXY7CiYjNDM7CWludCBwb3J0OwomIzQzOwomIzQzOwlwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtJmd0O21kaW8uYnVzKTsKJiM0MzsJcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LSZndDttZGlvLmJ1cywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwomIzQzOwlpZiAocG9ydCAmbHQ7IDApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qICYjMzQ7c3luYyYjMzQ7IHBhZ2UgZm9yIG5leHQgYXR0YWNobWVudCAqLwomIzQzOwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykKJiM0MzsJCXByaXYtJmd0O3BhZ2VbcG9ydF0gPSAwOwomIzQzOwomIzQzOwlpZiAob3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKSkKJiM0MzsJCWRldl9lcnIoYnVzLSZndDtwYXJlbnQsICYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxuJiMzNDssIHBvcnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LAogCQkJCSBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqbm9kZSkKIHsKQEAgLTUzNiw2ICYjNDM7Nzg5LDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYKIAkJYnVzLSZndDt3cml0ZSA9IG90dG9fZW1kaW9fd3JpdGVfYzIyOwogCX0KIAlidXMtJmd0O3BhcmVudCA9IGRldjsKJiM0MzsJYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7CiYjNDM7CWJ1cy0mZ3Q7bm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoOwomIzQzOwogCWNoYW4gPSBidXMtJmd0O3ByaXY7CiAJY2hhbi0mZ3Q7bWRpb19idXMgPSBtZGlvX2J1czsKIAljaGFuLSZndDtwcml2ID0gcHJpdjsKQEAgLTYzMyw4ICYjNDM7ODg5LDEzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KQogCQkgKiAoaS5lLiBjbGF1c2UgNDUpLiBTZWxlY3QgMTBHUEhZIG1vZGUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIFBIWSB0aGF0CiAJCSAqIGRlY2xhcmVzIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1JiMzNDsuCiAJCSAqLwotCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGh5X2RuLCAmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1JiMzNDspKQomIzQzOwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBoeV9kbiwgJiMzNDtldGhlcm5ldC1waHktaWVlZTgwMi4zLWM0NSYjMzQ7KSkgewomIzQzOwkJCWlmICghcHJpdi0mZ3Q7aW5mby0mZ3Q7cmVhZF9jNDUgfHwgIXByaXYtJmd0O2luZm8tJmd0O3dyaXRlX2M0NSkgewomIzQzOwkJCQllcnIgPSAtRU9QTk9UU1VQUDsKJiM0MzsJCQkJZ290byBwdXRfbm9kZXM7CiYjNDM7CQkJfQogCQkJcHJpdi0mZ3Q7c21pX2J1c19pc19jNDVbYnVzXSA9IHRydWU7CiYjNDM7CQl9CiAKIAkJX19zZXRfYml0KHBuLCBwcml2LSZndDt2YWxpZF9wb3J0cyk7CiAJCXByaXYtJmd0O3NtaV9idXNbcG5dID0gYnVzOwpAQCAtNjUyLDYgJiM0Mzs5MTMsMTkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWZvciAoaW50IHBvcnQgPSAwOyBwb3J0ICZsdDsgcHJpdi0mZ3Q7aW5mby0mZ3Q7bnVtX3BvcnRzOyBwb3J0JiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BkZXYtJmd0O2RldjsKQEAgLTY3MSw2ICYjNDM7OTQ1LDEwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWlmIChJU19FUlIocHJpdi0mZ3Q7cmVnbWFwKSkKIAkJcmV0dXJuIFBUUl9FUlIocHJpdi0mZ3Q7cmVnbWFwKTsKIAomIzQzOwllcnIgPSBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhwcml2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CiAKIAllcnIgPSBvdHRvX2VtZGlvX21hcF9wb3J0cyhkZXYpOwpAQCAtNjk2LDYgJiM0Mzs5NzQsNDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHsKJiM0MzsJLmFkZHJfbWFwX2Jhc2UgPSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCwKJiM0MzsJLmNtZF9mYWlsID0gUlRMODM4MF9QSFlfQ1RSTF9GQUlMLAomIzQzOwkuY21kX3JlYWQgPSBSVEw4MzgwX1BIWV9DVFJMX1JFQUQsCiYjNDM7CS5jbWRfd3JpdGUgPSBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFLAomIzQzOwkuY21kX3JlZ3MgPSB7CiYjNDM7CQkuYzIyX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMSwKJiM0MzsJCS5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLAomIzQzOwkJLmlvX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMiwKJiM0MzsJCS5wb3J0X21hc2tfbG93ID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzAsCiYjNDM7CX0sCiYjNDM7CS5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUywKJiM0MzsJLm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLAomIzQzOwkubnVtX3BvcnRzID0gUlRMODM4MF9OVU1fUE9SVFMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsCiYjNDM7CS5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIsCiYjNDM7CS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMiwKJiM0MzsJLndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHsKJiM0MzsJLmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLAomIzQzOwkuY21kX3JlYWQgPSBSVEw4MzkwX1BIWV9DVFJMX1JFQUQsCiYjNDM7CS5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLAomIzQzOwkuY21kX3JlZ3MgPSB7CiYjNDM7CQkuYnJvYWRjYXN0ID0gUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMLAomIzQzOwkJLmMyMl9kYXRhID0gUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkwsCiYjNDM7CQkuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCwKJiM0MzsJCS5leHRfcGFnZSA9IFJUTDgzOTBfUEhZUkVHX0NUUkwsCiYjNDM7CQkuaW9fZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTCwKJiM0MzsJCS5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVywKJiM0MzsJCS5wb3J0X21hc2tfaGlnaCA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdILAomIzQzOwl9LAomIzQzOwkubnVtX2J1c2VzID0gUlRMODM5MF9OVU1fQlVTRVMsCiYjNDM7CS5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUywKJiM0MzsJLm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLAomIzQzOwkucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsCiYjNDM7CS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMiwKJiM0MzsJLndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0gewogCS5hZGRyX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsCiAJLmJ1c19tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzE1X1BPTExJTkdfU0VMLApAQCAtNzExLDYgJiM0MzsxMDMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7CiAJLm51bV9idXNlcyA9IFJUTDkzMDBfTlVNX0JVU0VTLAogCS5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUywKIAkubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsCiAJLnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlciwKIAkucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsCiAJLnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LApAQCAtNzM2LDYgJiM0MzsxMDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7CiAJLm51bV9idXNlcyA9IFJUTDkzMTBfTlVNX0JVU0VTLAogCS5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUywKIAkubnVtX3BvcnRzID0gUlRMOTMxMF9OVU1fUE9SVFMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCwKIAkuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLAogCS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMiwKIAkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsCkBAIC03NDQsNiAmIzQzOzEwNjUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsODM4MC1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzgzODBfaW5mbyB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHJ0bDgzOTEtbWRpbyYjMzQ7LCAuZGF0YSA9ICZhbXA7b3R0b19lbWRpb184MzkwX2luZm8gfSwKIAl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHJ0bDkzMDEtbWRpbyYjMzQ7LCAuZGF0YSA9ICZhbXA7b3R0b19lbWRpb185MzAwX2luZm8gfSwKIAl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHJ0bDkzMTEtbWRpbyYjMzQ7LCAuZGF0YSA9ICZhbXA7b3R0b19lbWRpb185MzEwX2luZm8gfSwKIAl7fQpAQCAtNzU1LDYgJiM0MzsxMDc4LDcgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb3R0b19lbWRpb19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAmIzM0O21kaW8tcnRsOTMwMCYjMzQ7LAogCQkub2ZfbWF0Y2hfdGFibGUgPSBvdHRvX2VtZGlvX2lkcywKJiM0MzsJCS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKaW5kZXggOTRiMmU4NWUwMGEzNy4uMWE0M2ZlYzAyMmFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCkBAIC0xNzM0LDYgJiM0MzsxNzM0LDk2IEBAIHN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpCiAJcmV0dXJuIHBoeWRydi0mZ3Q7Y29uZmlnX2ludHIgJmFtcDsmYW1wOyBwaHlkcnYtJmd0O2hhbmRsZV9pbnRlcnJ1cHQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBwaHlfZGV0YWNoX2ludGVybmFsKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgbm90aWZ5X2J1cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwaHlkZXYtJmd0O2F0dGFjaGVkX2RldjsKJiM0MzsJc3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXM7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2RldmxpbmspIHsKJiM0MzsJCWRldmljZV9saW5rX2RlbChwaHlkZXYtJmd0O2RldmxpbmspOwomIzQzOwkJcGh5ZGV2LSZndDtkZXZsaW5rID0gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtzeXNmc19saW5rcykgewomIzQzOwkJaWYgKGRldikKJiM0MzsJCQlzeXNmc19yZW1vdmVfbGluaygmYW1wO2Rldi0mZ3Q7ZGV2LmtvYmosICYjMzQ7cGh5ZGV2JiMzNDspOwomIzQzOwkJc3lzZnNfcmVtb3ZlX2xpbmsoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LmtvYmosICYjMzQ7YXR0YWNoZWRfZGV2JiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghcGh5ZGV2LSZndDthdHRhY2hlZF9kZXYpCiYjNDM7CQlzeXNmc19yZW1vdmVfZmlsZSgmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYua29iaiwKJiM0MzsJCQkJICAmYW1wO2Rldl9hdHRyX3BoeV9zdGFuZGFsb25lLmF0dHIpOwomIzQzOwomIzQzOwlwaHlfc3VzcGVuZChwaHlkZXYpOwomIzQzOwomIzQzOwlpZiAobm90aWZ5X2J1cyAmYW1wOyZhbXA7IHBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfZGV0YWNoKQomIzQzOwkJcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9kZXRhY2gocGh5ZGV2KTsKJiM0MzsKJiM0MzsJaWYgKGRldikgewomIzQzOwkJc3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7CiYjNDM7CiYjNDM7CQkvKiBod3Byb3YgbWF5IHRlY2huaWNhbGx5IGJlIHByb3RlY3RlZCBieSBvcHMgbG9jayBidXQKJiM0MzsJCSAqIG5vdCBmb3IgZGV2aWNlcyB3aXRoIGEgcGh5ZGV2LCBzZWUgcGh5X2xpbmtfdG9wb19hZGRfcGh5KCkKJiM0MzsJCSAqLwomIzQzOwkJaHdwcm92ID0gcnRubF9kZXJlZmVyZW5jZShkZXYtJmd0O2h3cHJvdik7CiYjNDM7CQkvKiBEaXNhYmxlIHRpbWVzdGFtcCBpZiBpdCBpcyB0aGUgb25lIHNlbGVjdGVkICovCiYjNDM7CQlpZiAoaHdwcm92ICZhbXA7JmFtcDsgaHdwcm92LSZndDtwaHlkZXYgPT0gcGh5ZGV2KSB7CiYjNDM7CQkJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0mZ3Q7aHdwcm92LCBOVUxMKTsKJiM0MzsJCQlrZnJlZV9yY3UoaHdwcm92LCByY3VfaGVhZCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwaHlkZXYtJmd0O2F0dGFjaGVkX2Rldi0mZ3Q7cGh5ZGV2ID0gTlVMTDsKJiM0MzsJCXBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2ID0gTlVMTDsKJiM0MzsJCXBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeWRldik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDtwaHlfbGlua19jaGFuZ2UgPSBOVUxMOwomIzQzOwlwaHlkZXYtJmd0O3BoeWxpbmsgPSBOVUxMOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDttZGlvLmRldi5kcml2ZXIpCiYjNDM7CQltb2R1bGVfcHV0KHBoeWRldi0mZ3Q7bWRpby5kZXYuZHJpdmVyLSZndDtvd25lcik7CiYjNDM7CiYjNDM7CS8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdAomIzQzOwkgKiB3YXMgdXNpbmcgdGhlIGdlbmVyaWMgZHJpdmVyKSwgd2UgdW5iaW5kIHRoZSBkZXZpY2UKJiM0MzsJICogZnJvbSB0aGUgZ2VuZXJpYyBkcml2ZXIgc28gdGhhdCB0aGVyZSYjMzk7cyBhIGNoYW5jZSBhCiYjNDM7CSAqIHJlYWwgZHJpdmVyIGNvdWxkIGJlIGxvYWRlZAomIzQzOwkgKi8KJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aXNfZ2VucGh5X2RyaXZlbikgewomIzQzOwkJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldik7CiYjNDM7CQlwaHlkZXYtJmd0O2lzX2dlbnBoeV9kcml2ZW4gPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovCiYjNDM7CXBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHBoeWRldiBtaWdodCBnbyBhd2F5IG9uIHRoZSBwdXRfZGV2aWNlKCkgYmVsb3csIHNvIGF2b2lkCiYjNDM7CSAqIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGJ5IHJlYWRpbmcgdGhlIHVuZGVybHlpbmcgYnVzIGZpcnN0LgomIzQzOwkgKi8KJiM0MzsJYnVzID0gcGh5ZGV2LSZndDttZGlvLmJ1czsKJiM0MzsKJiM0MzsJcHV0X2RldmljZSgmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYpOwomIzQzOwlpZiAoZGV2KQomIzQzOwkJbmRldl9vd25lciA9IGRldi0mZ3Q7ZGV2LnBhcmVudC0mZ3Q7ZHJpdmVyLSZndDtvd25lcjsKJiM0MzsJaWYgKG5kZXZfb3duZXIgIT0gYnVzLSZndDtvd25lcikKJiM0MzsJCW1vZHVsZV9wdXQoYnVzLSZndDtvd25lcik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBoeV9kZXRhY2ggLSBkZXRhY2ggYSBQSFkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlCiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBUaGlzIGRldGFjaGVzIHRoZSBwaHkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlIGFuZCB0aGUgcGh5CiYjNDM7ICogZHJpdmVyLCBhbmQgZHJvcHMgdGhlIHJlZmVyZW5jZSBjb3VudCB0YWtlbiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpLgomIzQzOyAqLwomIzQzO3ZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJLyogY2xlYW51cCBpbmNsdWRpbmcgYnVzIG5vdGlmaWNhdGlvbiAqLwomIzQzOwlwaHlfZGV0YWNoX2ludGVybmFsKHBoeWRldiwgdHJ1ZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGh5X2RldGFjaCk7CiYjNDM7CiAvKioKICAqIHBoeV9hdHRhY2hfZGlyZWN0IC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBnaXZlbiBQSFkgZGV2aWNlIHBvaW50ZXIKICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaApAQCAtMTg3Niw2ICYjNDM7MTk2NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwogCiYjNDM7CWlmIChwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaCkgewomIzQzOwkJZXJyID0gcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJvcjsKJiM0MzsJfQomIzQzOwogCXBoeV9yZXN1bWUocGh5ZGV2KTsKIAogCS8qKgpAQCAtMTg5MCw4ICYjNDM7MTk4Niw4IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCXJldHVybiBlcnI7CiAKIGVycm9yOgotCS8qIHBoeV9kZXRhY2goKSBkb2VzIGFsbCBvZiB0aGUgY2xlYW51cCBiZWxvdyAqLwotCXBoeV9kZXRhY2gocGh5ZGV2KTsKJiM0MzsJLyogY2xlYW51cCB3aXRob3V0IGJ1cyBub3RpZmljYXRpb24gKi8KJiM0MzsJcGh5X2RldGFjaF9pbnRlcm5hbChwaHlkZXYsIGZhbHNlKTsKIAlyZXR1cm4gZXJyOwogCiBlcnJvcl9tb2R1bGVfcHV0OgpAQCAtMTkwNiw4NiAmIzQzOzIwMDIsNiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIH0KIEVYUE9SVF9TWU1CT0wocGh5X2F0dGFjaF9kaXJlY3QpOwogCi0vKioKLSAqIHBoeV9kZXRhY2ggLSBkZXRhY2ggYSBQSFkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlCi0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKLSAqCi0gKiBUaGlzIGRldGFjaGVzIHRoZSBwaHkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlIGFuZCB0aGUgcGh5Ci0gKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuCi0gKi8KLXZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwaHlkZXYtJmd0O2F0dGFjaGVkX2RldjsKLQlzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDsKLQlzdHJ1Y3QgbWlpX2J1cyAqYnVzOwotCi0JaWYgKHBoeWRldi0mZ3Q7ZGV2bGluaykgewotCQlkZXZpY2VfbGlua19kZWwocGh5ZGV2LSZndDtkZXZsaW5rKTsKLQkJcGh5ZGV2LSZndDtkZXZsaW5rID0gTlVMTDsKLQl9Ci0KLQlpZiAocGh5ZGV2LSZndDtzeXNmc19saW5rcykgewotCQlpZiAoZGV2KQotCQkJc3lzZnNfcmVtb3ZlX2xpbmsoJmFtcDtkZXYtJmd0O2Rldi5rb2JqLCAmIzM0O3BoeWRldiYjMzQ7KTsKLQkJc3lzZnNfcmVtb3ZlX2xpbmsoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LmtvYmosICYjMzQ7YXR0YWNoZWRfZGV2JiMzNDspOwotCX0KLQotCWlmICghcGh5ZGV2LSZndDthdHRhY2hlZF9kZXYpCi0JCXN5c2ZzX3JlbW92ZV9maWxlKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldi5rb2JqLAotCQkJCSAgJmFtcDtkZXZfYXR0cl9waHlfc3RhbmRhbG9uZS5hdHRyKTsKLQotCXBoeV9zdXNwZW5kKHBoeWRldik7Ci0JaWYgKGRldikgewotCQlzdHJ1Y3QgaHd0c3RhbXBfcHJvdmlkZXIgKmh3cHJvdjsKLQotCQkvKiBod3Byb3YgbWF5IHRlY2huaWNhbGx5IGJlIHByb3RlY3RlZCBieSBvcHMgbG9jayBidXQKLQkJICogbm90IGZvciBkZXZpY2VzIHdpdGggYSBwaHlkZXYsIHNlZSBwaHlfbGlua190b3BvX2FkZF9waHkoKQotCQkgKi8KLQkJaHdwcm92ID0gcnRubF9kZXJlZmVyZW5jZShkZXYtJmd0O2h3cHJvdik7Ci0JCS8qIERpc2FibGUgdGltZXN0YW1wIGlmIGl0IGlzIHRoZSBvbmUgc2VsZWN0ZWQgKi8KLQkJaWYgKGh3cHJvdiAmYW1wOyZhbXA7IGh3cHJvdi0mZ3Q7cGh5ZGV2ID09IHBoeWRldikgewotCQkJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0mZ3Q7aHdwcm92LCBOVUxMKTsKLQkJCWtmcmVlX3JjdShod3Byb3YsIHJjdV9oZWFkKTsKLQkJfQotCi0JCXBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2LSZndDtwaHlkZXYgPSBOVUxMOwotCQlwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiA9IE5VTEw7Ci0JCXBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeWRldik7Ci0JfQotCi0JcGh5ZGV2LSZndDtwaHlfbGlua19jaGFuZ2UgPSBOVUxMOwotCXBoeWRldi0mZ3Q7cGh5bGluayA9IE5VTEw7Ci0KLQlpZiAocGh5ZGV2LSZndDttZGlvLmRldi5kcml2ZXIpCi0JCW1vZHVsZV9wdXQocGh5ZGV2LSZndDttZGlvLmRldi5kcml2ZXItJmd0O293bmVyKTsKLQotCS8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdAotCSAqIHdhcyB1c2luZyB0aGUgZ2VuZXJpYyBkcml2ZXIpLCB3ZSB1bmJpbmQgdGhlIGRldmljZQotCSAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUmIzM5O3MgYSBjaGFuY2UgYQotCSAqIHJlYWwgZHJpdmVyIGNvdWxkIGJlIGxvYWRlZAotCSAqLwotCWlmIChwaHlkZXYtJmd0O2lzX2dlbnBoeV9kcml2ZW4pIHsKLQkJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldik7Ci0JCXBoeWRldi0mZ3Q7aXNfZ2VucGh5X2RyaXZlbiA9IDA7Ci0JfQotCi0JLyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi8KLQlwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7Ci0KLQkvKgotCSAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZAotCSAqIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGJ5IHJlYWRpbmcgdGhlIHVuZGVybHlpbmcgYnVzIGZpcnN0LgotCSAqLwotCWJ1cyA9IHBoeWRldi0mZ3Q7bWRpby5idXM7Ci0KLQlwdXRfZGV2aWNlKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldik7Ci0JaWYgKGRldikKLQkJbmRldl9vd25lciA9IGRldi0mZ3Q7ZGV2LnBhcmVudC0mZ3Q7ZHJpdmVyLSZndDtvd25lcjsKLQlpZiAobmRldl9vd25lciAhPSBidXMtJmd0O293bmVyKQotCQltb2R1bGVfcHV0KGJ1cy0mZ3Q7b3duZXIpOwotfQotRVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTsKLQogaW50IHBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggNWY4ZDY1ODY4ZTBmZi4uM2Q4YWZlNmI3ZjFjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0zNzYsNiAmIzQzOzM3NiwyNCBAQCBzdHJ1Y3QgbWlpX2J1cyB7CiAJCQkgaW50IHJlZ251bSwgdTE2IHZhbCk7CiAJLyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi8KIAlpbnQgKCpyZXNldCkoc3RydWN0IG1paV9idXMgKmJ1cyk7CiYjNDM7CS8qKgomIzQzOwkgKiBAbm90aWZ5X3BoeV9hdHRhY2g6IFBlcmZvcm0gcG9zdC1hdHRhY2ggaGFuZGxpbmcgZm9yIE1ESU8gYnVzCiYjNDM7CSAqIGRyaXZlcnMuIE9wdGlvbmFsIGFuZCBpbmRlcGVuZGVudCBvZiBAbm90aWZ5X3BoeV9kZXRhY2guIENhbGxlZAomIzQzOwkgKiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpIHJpZ2h0IGJlZm9yZSBwaHlfcmVzdW1lKCkuIFJ1bnMgaW4gcHJvY2VzcwomIzQzOwkgKiBjb250ZXh0LCBtYXkgc2xlZXAgYW5kIG1heSBiZSBjYWxsZWQgd2l0aCBSVE5MIGhlbGQuIE11c3Qgbm90CiYjNDM7CSAqIGFjcXVpcmUgb3IgcmVseSBvbiBSVE5MLiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJubwomIzQzOwkgKiBvbiBmYWlsdXJlLiBNdXN0IHVud2luZCBpdHMgb3duIHN0YXRlIG9uIGVycm9yIGFzIGF0dGFjaG1lbnQgaXMKJiM0MzsJICogYWJvcnRlZC4KJiM0MzsJICovCiYjNDM7CWludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKJiM0MzsJLyoqCiYjNDM7CSAqIEBub3RpZnlfcGh5X2RldGFjaDogUGVyZm9ybSBwcmUtZGV0YWNoIGhhbmRsaW5nIGZvciBNRElPIGJ1cwomIzQzOwkgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfYXR0YWNoLiBDYWxsZWQKJiM0MzsJICogaW4gcGh5X2RldGFjaCgpIHJpZ2h0IGFmdGVyIHBoeV9zdXNwZW5kKCkuIFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0LAomIzQzOwkgKiBtYXkgc2xlZXAgYW5kIG1heSBiZSBjYWxsZWQgd2l0aCBSVE5MIGhlbGQuIE11c3Qgbm90IGFjcXVpcmUgb3IKJiM0MzsJICogcmVseSBvbiBSVE5MLgomIzQzOwkgKi8KJiM0MzsJdm9pZCAoKm5vdGlmeV9waHlfZGV0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIAogCS8qKiBAc3RhdHM6IFN0YXRpc3RpYyBjb3VudGVycyBwZXIgZGV2aWNlIG9uIHRoZSBidXMgKi8KIAlzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMzIKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogMjEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUmVhbHRlayBNRElPIFBhdGNoIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBNRElPIGludGVyZmFjZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuIEl0IG1vZGlmaWVzIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCB0byBhZGQgc3VwcG9ydCBmb3IgUlRMODM4MC9SVEw4MzkwIGFuZCBpbXBvcnRhbnRseSwgaXQgdG91Y2hlcyBgcGh5X2RldmljZS5jYCB0byBhZGQgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGBtaWlfYnVzYCBzdHJ1Y3R1cmUuCgpGaXJzdCwgdGhlIE1ESU8gZHJpdmVyIGl0c2VsZi4gQ2FuIEkgZ2V0IHRvIGl0IHdpdGhpbiBRRU1VPyBNRElPIGRyaXZlcnMgYXJlIHVzdWFsbHkgcHJvYmVkIHZpYSB0aGUgZGV2aWNlIHRyZWUsIHNvIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHdoZXRoZXIgSSBjYW4gbG9hZCB0aGUgbW9kdWxlIGFuZCBwcm9iZSBpdCB1c2luZyBhIGZha2UgZGV2aWNlIHRyZWUgb3IgcGxhdGZvcm0gZGV2aWNlLiBTeXprYWxsZXIgY2FuIGRvIHRoaXMsIGluamVjdGluZyBwbGF0Zm9ybSBkZXZpY2VzIG9yIGV2ZW4gdXNpbmcgZGV2aWNlIHRyZWUgb3ZlcmxheXMuIEhvd2V2ZXIsIHRoZXJlJiMzOTtzIGEgcHJvYmxlbTogdGhlIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBkcml2ZXIgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEFoLCB3YWl0LCBpdCBoYXMgYC5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZWAuIFRoaXMgbWVhbnMgSSBjYW4mIzM5O3QgYmluZCBpdCB2aWEgc3lzZnMuIFN5emthbGxlciBtaWdodCBzdGlsbCBiZSBhYmxlIHRvIGluamVjdCBwbGF0Zm9ybSBkZXZpY2VzLCBpZiBpdCBrbm93cyBob3csIGJ1dCBwcm9iYWJseSBvbmx5IGlmIGl0IG1hdGNoZXMgdGhlIGV4YWN0IG5hbWUgb3IgT0YgbWF0Y2guIFRoZSBwcm9iZSBmdW5jdGlvbiwgYG90dG9fZW1kaW9fcHJvYmVgLCB1c2VzIGBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KWAuIFRoYXQgbWVhbnMgaXQgbmVlZHMgYW4gT0Ygbm9kZSwgYW5kIGlmIGl0JiMzOTtzIHByb2JlZCB3aXRob3V0IE9GLCBgb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhYCByZXR1cm5zIE5VTEwuIFRoaXMgbWFrZXMgaXQgaGFyZGVyIHRvIHRyaWdnZXIuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBTeXprYWxsZXIgY2FuIGNyZWF0ZSBPRiBub2Rlcy4gSXQgc2VlbXMgbGltaXRlZC4KCkhvd2V2ZXIsIHRoZSByZWFsIG1lYXQgb2YgdGhlIHBhdGNoIGlzIHRoZSBtb2RpZmljYXRpb24gb2YgYHBoeV9kZXZpY2UuY2AsIHdoaWNoIGlzIGNvcmUgUEhZIGZyYW1ld29yayBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIHRvIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBhcmUgY3J1Y2lhbC4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aGVuIGF0dGFjaGluZyBhIFBIWSB0byBhIG5ldCBkZXZpY2UsIHNvIGFueSBNRElPIGJ1cyBkcml2ZXIgKmNvdWxkKiB1c2UgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYC4gVGhlIHBhdGNoICphZGRzKiB0aGVzZSBjYWxsYmFja3MgdG8gYHN0cnVjdCBtaWlfYnVzYCBpbiBgcGh5X2RldmljZS5jYC4gVGhhdCBtYWtlcyB0aGlzIHBhcnQgb2YgdGhlIGNoYW5nZSB2ZXJ5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nLgoKSSBxdWlja2x5IGNoZWNrIHRoZSBjb2RlIGZvciBgcGh5X2RldGFjaGAgYW5kIHNlZSBpdCYjMzk7cyBjYWxsaW5nIGBwaHlfZGV0YWNoX2ludGVybmFsYC4gVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgUEhZIGZyYW1ld29yaywgYW5kIHRoYXQmIzM5O3Mgd29ydGggY2hlY2tpbmcuCgpOb3csIHRvIHNlZSB3aGF0IHRvIGVuYWJsZS4gVGhlIGNvbmZpZyBmb3IgdGhlIFJlYWx0ZWsgTURJTyBkcml2ZXIgaXMgYE1ESU9fUkVBTFRFS19SVEw5MzAwYC4gQW5kLCBvZiBjb3Vyc2UsIGBQSFlMSUJgIGlzIG5lZWRlZC4gSSBjb25maXJtIHRoYXQgYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyBleHBvcnRlZCB1c2luZyB0aGUgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGZpbmQgYEVYUE9SVF9TWU1CT0wocGh5X2F0dGFjaF9kaXJlY3QpO2AgaW4gdGhlIGRpZmYuCgpUaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHdoZXRoZXIgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gSSBuZWVkLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBQSFkgZnJhbWV3b3JrIGNoYW5nZXMsIGFuZCB0aGV5JiMzOTtyZSBjb250cm9sbGVkIGJ5IGBDT05GSUdfUEhZTElCYC4gSSB3YW50IHRvIGxpc3QgdGhlIGZvY3VzIHN5bWJvbHMuIFRob3NlIGFyZSBgcGh5X2F0dGFjaF9kaXJlY3RgLCBgcGh5X2RldGFjaGAsIGBwaHlfZGV0YWNoX2ludGVybmFsYCwgYG90dG9fZW1kaW9fcHJvYmVgLCBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaGAsIGFuZCBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaGAuIFNpbmNlIGBvdHRvX2VtZGlvX3Byb2JlYCBtaWdodCBub3QgYmUgcmVhY2hhYmxlIHdpdGhvdXQgT0YsIEkgd29uJiMzOTt0IGZvY3VzIG9uIHRoYXQgb25lLCBidXQgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgcGFydCBvZiB0aGUgY29yZSBQSFkgZnJhbWV3b3JrLiBTbywgSSB3aWxsIGluY2x1ZGUgdGhvc2UuCgpJIGNoZWNrIGlmIGBwaHlfZGV0YWNoX2ludGVybmFsYCBpcyBzdGF0aWMsIHdoaWNoIGl0IGlzLiBBbmQgSSBzZWUgdGhhdCB0aGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnRzLiBTbywgSSBwcm9iYWJseSBzaG91bGRuJiMzOTt0IGluY2x1ZGUgdGhhdCBvbmUgaW4gYEZvY3VzU3ltYm9sc2AsIGFzIHRoZSBmdXp6IGVuZ2luZSB3aWxsIGxpa2VseSB0cnkgYHBoeV9kZXRhY2hgIGluc3RlYWQuIFRob3VnaCBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaGAgaXMgc3RhdGljLCBpdCBpcyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGFuZCBpcyBjYWxsZWQgaW5kaXJlY3RseS4KClNvLCBpcyBgTURJT19SRUFMVEVLX1JUTDkzMDBgIHdvcnRoIGVuYWJsaW5nPyBJIHNlZSBpdCBjYW4gYmUgZW5hYmxlZCB3aXRoIGBDT01QSUxFX1RFU1RgLCBzbyB5ZXMuIEkgdmVyaWZ5IGluIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIHRoYXQgaXQgY2FuIGJlIGVuYWJsZWQuIFRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3MgdG8gd29ycnkgYWJvdXQsIGFuZCBgQ09ORklHX1BIWUxJQmAgaXMgdXN1YWxseSBlbmFibGVkIGluIFN5emthbGxlciBhbnl3YXkuCgpGaW5hbGx5LCBJIHJldmlldyB0aGUgY2hhbmdlcyBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AgYWdhaW4uIFRoZSByZWZhY3RvcmluZyBvZiBgcGh5X2RldGFjaGAgdG8gYHBoeV9kZXRhY2hfaW50ZXJuYWxgIGlzIHRoZXJlIHRvIGFsbG93IGNhbGxpbmcgaXQgd2l0aG91dCBub3RpZnlpbmcgdGhlIGJ1cwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X2F0dGFjaF9kaXJlY3QmIzM0OywKICAgICYjMzQ7cGh5X2RldGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIGNhbGxiYWNrcyBpbiB0aGUgY29yZSBQSFkgZnJhbWV3b3JrIChgc3RydWN0IG1paV9idXNgKSBhbmQgbW9kaWZpZXMgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIHRvIHVzZSB0aGVtLiBJdCBhbHNvIGFkZHMgc3VwcG9ydCBmb3IgUlRMODM4MC9SVEw4MzkwIHRvIHRoZSBSZWFsdGVrIE1ESU8gZHJpdmVyIHdoaWNoIGltcGxlbWVudHMgdGhlc2UgY2FsbGJhY2tzLiBUaGUgY29yZSBQSFkgZnJhbWV3b3JrIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TURJT19SRUFMVEVLX1JUTDkzMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfYXR0YWNoX2RpcmVjdCYjMzQ7LAogICAgJiMzNDtwaHlfZGV0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIGluIHRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgKGBzdHJ1Y3QgbWlpX2J1c2ApIGFuZCBtb2RpZmllcyBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgdG8gdXNlIHRoZW0uIEl0IGFsc28gYWRkcyBzdXBwb3J0IGZvciBSVEw4MzgwL1JUTDgzOTAgdG8gdGhlIFJlYWx0ZWsgTURJTyBkcml2ZXIgd2hpY2ggaW1wbGVtZW50cyB0aGVzZSBjYWxsYmFja3MuIFRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjA6MDAuODc4MTI5OTM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzNjk1ODY2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURJT19SRUFMVEVLX1JUTDkzMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfYXR0YWNoX2RpcmVjdFwiLFxuICAgIFwicGh5X2RldGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIGluIHRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgKGBzdHJ1Y3QgbWlpX2J1c2ApIGFuZCBtb2RpZmllcyBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgdG8gdXNlIHRoZW0uIEl0IGFsc28gYWRkcyBzdXBwb3J0IGZvciBSVEw4MzgwL1JUTDgzOTAgdG8gdGhlIFJlYWx0ZWsgTURJTyBkcml2ZXIgd2hpY2ggaW1wbGVtZW50cyB0aGVzZSBjYWxsYmFja3MuIFRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMDowMC44NzgxMzYxMzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODM3ODYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ5M2I3ZmQ3MmFiODRlYTg0ZDMxMTczNDJmMzc5MjRhNTJjZjhlM2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAyMDoxOTo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcXG5pbmRleCAyNzFlMDViYWU5YzU3Li42N2UwYjIzYTg0NzBlIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxcbkBAIC00LDcgKzQsNyBAQFxcbiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sI1xcbiAkc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4gXFxuLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyXFxuK3RpdGxlOiBSZWFsdGVrIE90dG8gU3dpdGNoZXMgRXRoZXJuZXQgTURJTyBDb250cm9sbGVyXFxuIFxcbiBtYWludGFpbmVyczpcXG4gICAtIENocmlzIFBhY2toYW0gXFx1MDAzY2NocmlzLnBhY2toYW1AYWxsaWVkdGVsZXNpcy5jby5uelxcdTAwM2VcXG5AQCAtMTIsNiArMTIsMTYgQEAgbWFpbnRhaW5lcnM6XFxuIHByb3BlcnRpZXM6XFxuICAgY29tcGF0aWJsZTpcXG4gICAgIG9uZU9mOlxcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzODAtbWRpb1xcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkyLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5My1tZGlvXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpb1xcbiAgICAgICAtIGl0ZW1zOlxcbiAgICAgICAgICAgLSBlbnVtOlxcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvXFxuQEAgLTI0LDYgKzM0LDggQEAgcHJvcGVydGllczpcXG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvXFxuICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpb1xcbiAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvXFxuKyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvXFxuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvXFxuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMS1tZGlvXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcXG5pbmRleCBhMDUyMjk4MzhjYjQ1Li5kNDQyNzhmMjZmYWJlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xcbkBAIC0xNzIsMTEgKzE3MiwxMSBAQCBjb25maWcgTURJT19JUFE4MDY0XFxuIFxcdCAgaW50ZXJmYWNlIHVuaXRzIG9mIHRoZSBJUFE4MDY0IFNvQ1xcbiBcXG4gY29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXFxuLVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG4rXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuIFxcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcXG4gXFx0aGVscFxcbiBcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgUmVhbHRla1xcbi1cXHQgIFJUTDkzMDAgZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXFxuK1xcdCAgUlRMODN4eC9SVEw5M3h4IGZhbWlseSBvZiBFdGhlcm5ldCBzd2l0Y2hlcyB3aXRoIGludGVncmF0ZWQgU29DLlxcbiBcXG4gY29uZmlnIE1ESU9fUkVHTUFQXFxuIFxcdHRyaXN0YXRlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xcbmluZGV4IGFmZDUyYTFjZDdmODMuLjc3ZGMwNDYzMGM0NDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuQEAgLTM1LDYgKzM1LDgxIEBAXFxuICAqXFxuICAqIFRoZSBkcml2ZXIgd29ya3Mgb3V0IHRoZSBtYXBwaW5nIGJhc2VkIG9uIHRoZSBNRElPIGJ1cyBkZXNjcmliZWQgaW4gZGV2aWNlIHRyZWUgYW5kIHBoYW5kbGVzIG9uXFxuICAqIHRoZSBldGhlcm5ldC1wb3J0cyBwcm9wZXJ0eS5cXG4rICpcXG4rICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0XFxuKyAqIGNvbnN0YW50bHkgc2NhbnMgdGhlIE1ESU8gYnVzIGFuZCB0aGUgYXR0YWNoZWQgUEhZcyBhbmQgdXBkYXRlcyB0aGUgTUFDIHN0YXR1cyByZWdpc3RlcnMuXFxuKyAqXFxuKyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/XFxuKyAqXFxuKyAqIEVhY2ggZGV2aWNlIGhhcyBhIFNNSV9QT0xMX0NUUkwgcmVnaXN0ZXIuIEEgcGVyLXBvcnQgYml0bWFzayBkZWNpZGVzIGlmIHRoZSBoYXJkd2FyZSBwb2xsaW5nIG9mXFxuKyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvclxcbisgKiBlYWNoIHNldCBwb2xsaW5nIGJpdCBpdCBpc3N1ZXMgYSBzdGF0dXMgY2hlY2sgZm9yIHRoZSBQSFkuIEF0dGFjaGluZyBhIGxvZ2ljIGFuYWx5emVyIHRvIHRoZVxcbisgKiBNRElPIGJ1cyBvZiBhbiBSVEw4MzgwIGFuZCBSVEw4MzkzIGdpdmVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKGluIGtlcm5lbCBub3RhdGlvbik6XFxuKyAqXFxuKyAqXFx0UlRMODM4MFxcdFxcdFxcdFxcdFJUTDgzOTNcXG4rICpcXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICpcXHRwaHlfd3JpdGUocGh5LCAzMSwgMHgwKTtcXHRwaHlfcmVhZChwaHksIDApO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xcdHBoeV9yZWFkKHBoeSwgMSk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xcdHBoeV9yZWFkKHBoeSwgNCk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XFx0cGh5X3JlYWQocGh5LCA1KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDE0KTtcXHRcXHRwaHlfcmVhZChwaHksIDYpO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xcdHBoeV9yZWFkKHBoeSwgOSk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1xcdHBoeV9yZWFkKHBoeSwgMTApO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1xcdHBoeV9yZWFkKHBoeSwgMTUpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcdFxcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgOSk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTApO1xcdFxcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTUpO1xcdFxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMCk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxKTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCA0KTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDUpO1xcdFxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgNik7XFxuKyAqXFxuKyAqIEFmdGVyIG9uZSBQSFkgc3RhdHVzIGlzIHJlYWQsIHRoZSBwb2xsaW5nIGVuZ2luZSBnb2VzIG92ZXIgdG8gdGhlIG5leHQgUEhZLiBJZiBvbmUgYnVzIGlzIGZ1bGx5XFxuKyAqIHNjYW5uZWQgaXQgc3dpdGNoZXMgb3ZlciB0byB0aGUgbmV4dCBidXMuIEJhc2ljYWxseSB0aGUgcG9sbGluZyBzeXN0ZW0gaXMgYWx3YXlzIGJ1c3kgYW5kIHRoZVxcbisgKiBNQUMgc3RhdGUgaXMgdXBkYXRlZCBpbiByZWFsLXRpbWUuXFxuKyAqXFxuKyAqIFRoaXMgaXMgYSBnbGltcHNlIGxvb2sgYXQgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIHBvbGxpbmcgYW5kIGxlYXZlcyBvdXQgdGhlIEM0NSBjYXNlIGFuZCB0aGUgTUFDXFxuKyAqIHJlZ2lzdGVyIHVwZGF0ZSBsb2dpYyBhZnRlcndhcmRzLiBJbXBvcnRhbnQgdG8gbm90ZTpcXG4rICpcXG4rICogLSAxMDAgTUJpdCBkb3duc2hpZnRzIChicm9rZW4gY2FibGVzKSBhcmUgaWRlbnRpZmllZCBhbmQgcHJvcGFnYXRlZCB0byB0aGUgTUFDIGNvcnJlY3RseVxcbisgKiAtIEFjY2VzcyB0byBNRElPX0FOX0VFRV9BRFYgYW5kIE1ESU9fQU5fRUVFX0xQQUJMRSB3b3JrcyB2aWEgQzQ1IG92ZXIgQzIyLlxcbisgKiAtIEl0IGlzIHVuY2xlYXIgaWYgdGhlc2Ugc2VxdWVuY2VzIGNoYW5nZSBmb3IgZGlmZmVyZW50IFBIWXMuXFxuKyAqIC0gQWNjZXNzIHRvIFJlYWx0ZWsgcmVzZXJ2ZWQgcmVnaXN0ZXIgMjYgKGxpbmsgc3BlZWQpIGhhcyBub3QgeWV0IGJlZW4gc2Vlbi5cXG4rICpcXG4rICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz9cXG4rICpcXG4rICogV2hlbiBpc3N1aW5nIE1ESU8gYWNjZXNzZXMgdmlhIGFuIE1NSU8gYmFzZWQgaW50ZXJmYWNlIHRoZSBmaW5hbCB3cml0ZSB0byB0aGUgY29tbWFuZCByZWdpc3RlclxcbisgKiBzZXRzIGEgXFxcInJ1biBjb21tYW5kIG5vd1xcXCIgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlXFxuKyAqIGNoZWNrcyBpZiBhIHVzZXIgY29tbWFuZCBuZWVkcyB0byBydW4gYW5kIHNlbmRzIGl0IG9udG8gdGhlIGJ1cy4gQWZ0ZXJ3YXJkcyBpdCBzaW1wbHkgY29udGludWVzXFxuKyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgd3JpdGUgb24gdGhlIGxvZ2ljIGFuYWx5emVyIGdpdmVzOlxcbisgKlxcbisgKlxcdFJUTDgzODBcXHRcXHRcXHRcXHRSVEw4MzkzXFxuKyAqXFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1xcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcXHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcXG4rICpcXHRcXHRcXHRcXHRcXHRwaHlfd3JpdGUocGh5LCAzMSwgMCk7XFxuKyAqXFxuKyAqIFdoYXQgZG9lcyB0aGlzIG1lYW4/XFxuKyAqXFxuKyAqIFRoZXJlIGFyZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gcG9sbGluZyBhbmQgUEhZIGFjY2VzcyBiZXR3ZWVuIHRoZSBtb2RlbHMgYnV0IHRoZSBjaGFsbGVuZ2VcXG4rICogc3RheXMgdGhlIHNhbWUuIE9uIHRoZSBvbmUgaGFuZCB0aGF0IGdyZWF0bHkgc2ltcGxpZmllcyB0aGUgTUFDIGxheWVyLCBvbiB0aGUgb3RoZXIgaGFuZCBpdFxcbisgKiBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwgUEhZIHN1YnN5c3RlbS5cXG4rICpcXG4rICogLSBXaXRob3V0IHRoZSBwb2xsaW5nIGFuZCBhIHByb3BlciBNQUMgc3RhdHVzLCBzb21lIG9mIHRoZSBsaW5rIGhhbmRsaW5nIGZlYXR1cmVzIGRvIG5vdCB3b3JrLlxcbisgKiAgIEVzcGVjaWFsbHkgYW4gdW5wb3B1bGF0ZWQgTUFDX0xJTktfU1RTIHJlZ2lzdGVyIGNhbmNlbHMgb3BlcmF0aW9ucyB0byBvdGhlciBNQUMgcmVnaXN0ZXJzLlxcbisgKiAtIFRoZSBSZWFsdGVrIHBhZ2UgcmVnaXN0ZXIgMzEgaXMgbWFnaWNhbGx5IG1vZGlmaWVkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIHRoYXQgcG9sbGluZyB3aWxsXFxuKyAqICAgcmVhZCB0aGUgcmlnaHQgZGF0YS4gT24gdGhlIFJUTDgzOHggcG9sbGluZyBzaW1wbHkgcmVzZXRzIGl0IHRvIHplcm8uIE90aGVyIGRldmljZXMgc2VlbVxcbisgKiAgIHRvIHRyYWNrIHRoZSBwYWdlIGFjY2VzcyBcXFwibWFnaWNhbGx5XFxcIiBpbiB0aGUgYmFja2dyb3VuZC5cXG4rICogLSBBIEM0NSBvdmVyIEMyMiBrZXJuZWwgYWNjZXNzIHNlcXVlbmNlIGlzIG1vc3QgbGlrZWx5IHRvIGZhaWwgYmVjYXVzZSBjaGFuY2VzIGFyZSBoaWdoIHRoYXRcXG4rICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi5cXG4rICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW5cXG4rICogICBzZXF1ZW5jZSBvZiByZWdpc3RlcnMgYW5kIHZhbHVlcyB3aXRob3V0IGRldmlhdGlvbi5cXG4rICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS5cXG4rICpcXG4rICogQ29uY2x1c2lvbjogVGhlIFJlYWx0ZWsgTURJTyBidXMgZHJpdmVyIFBIWSBhY2Nlc3MgbXVzdCBrbm93IGFuZCBoYW5kbGUgYW55IGludGVyZmVyZW5jZSB0aGF0XFxuKyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy5cXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG5AQCAtNTAsNiArMTI1LDUwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVnbWFwLmhcXHUwMDNlXFxuIFxcbisjZGVmaW5lIFJUTDgzODBfTlVNX0JVU0VTXFx0XFx0XFx0MVxcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXFx0XFx0XFx0NDA5NlxcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXFx0XFx0XFx0MjhcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFxcdFxcdFxcdDB4YTEwMFxcbisjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcXHRcXHRCSVQoMTUpXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzBcXHRcXHQweGExYjhcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMVxcdFxcdDB4YTFiY1xcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUlxcdFxcdEdFTk1BU0soMjQsIDIwKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0VcXHRcXHRHRU5NQVNLKDE5LCAxNSlcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFXFx0XFx0R0VOTUFTSygxNCwgMylcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEVcXHRcXHRCSVQoMilcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVBRFxcdFxcdFxcdDBcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDVcXHRcXHRCSVQoMSlcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjJcXHRcXHQwXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUxcXHRcXHRcXHQwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzJcXHRcXHQweGExYzBcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBXFx0XFx0R0VOTUFTSygzMSwgMTYpXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEFcXHRcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXFx0XFx0MHhhMWM0XFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMXFx0XFx0XFx0MHhhMTdjXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcXHRcXHQweGExYzhcXG4rXFxuKyNkZWZpbmUgUlRMODM5MF9OVU1fQlVTRVNcXHRcXHRcXHQyXFxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUEFHRVNcXHRcXHRcXHQ4MTkyXFxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUE9SVFNcXHRcXHRcXHQ1MlxcbisjZGVmaW5lIFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTFxcdFxcdDB4MDNlY1xcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMXFx0XFx0MHgwM2RjXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSXFx0XFx0R0VOTUFTSyg5LCA1KVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0VcXHRcXHRHRU5NQVNLKDIyLCAxMClcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRkFJTFxcdFxcdFxcdEJJVCgxKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURVxcdFxcdEJJVCgzKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFEXFx0XFx0XFx0MFxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NVxcdFxcdEJJVCgyKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMlxcdFxcdDBcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19DVFJMXFx0XFx0XFx0MHgwM2UwXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFXFx0XFx0R0VOTUFTSyg4LCAwKVxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTFxcdFxcdDB4MDNmMFxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEFcXHRcXHRHRU5NQVNLKDMxLCAxNilcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkxcXHRcXHRcXHQweDAzZjRcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XXFx0XFx0MHgwM2U0XFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcXHRcXHQweDAzZThcXG4rI2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFxcdFxcdDB4MDNmY1xcbitcXG4gI2RlZmluZSBSVEw5MzAwX05VTV9CVVNFU1xcdFxcdFxcdDRcXG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1xcdFxcdFxcdDQwOTZcXG4gI2RlZmluZSBSVEw5MzAwX05VTV9QT1JUU1xcdFxcdFxcdDI4XFxuQEAgLTcwLDYgKzE4OSw3IEBAXFxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0lOREFUQVxcdFxcdEdFTk1BU0soMzEsIDE2KVxcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9EQVRBXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1xcdFxcdDB4Y2I3Y1xcbisjZGVmaW5lIFJUTDkzMDBfU01JX1BPTExfQ1RSTFxcdFxcdFxcdDB4Y2E5MFxcbiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMXFx0XFx0MHhjYjgwXFxuIFxcbiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTXFx0XFx0XFx0NFxcbkBAIC05NSwxMiArMjE1LDE2IEBAXFxuICNkZWZpbmUgICBSVEw5MzEwX1BIWV9DVFJMX0lOREFUQVxcdFxcdEdFTk1BU0soMTUsIDApXFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX01NRF9DVFJMXFx0MHgwYzE4XFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9BRERSX0NUUkxcXHRcXHQweDBjNzRcXG4rI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFxcdFxcdDB4MGNjY1xcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUxcXHRcXHQweDBjOWNcXG4gXFxuICNkZWZpbmUgUEhZX0NUUkxfQ01EXFx0XFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFEXFx0XFx0XFx0R0VOTUFTSygyMCwgMTYpXFxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX1JFR1xcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuIFxcbisjZGVmaW5lIFJUTF9WRU5ET1JfSURcXHRcXHRcXHRcXHQweDAwMWNjODAwXFxuKyNkZWZpbmUgUlRMX1BBR0VfU0VMRUNUXFx0XFx0XFx0XFx0MzFcXG4rXFxuICNkZWZpbmUgTUFQX0FERFJTX1BFUl9SRUdcXHRcXHRcXHQ2XFxuICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFJcXHRcXHRcXHQ1XFxuICNkZWZpbmUgTUFQX0JJVFNfUEVSX0JVU1xcdFxcdFxcdDJcXG5AQCAtMTI2LDYgKzI1MCw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYge1xcbiBcXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XFxuIFxcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqL1xcbiBcXHRERUNMQVJFX0JJVE1BUCh2YWxpZF9wb3J0cywgTUFYX1BPUlRTKTtcXG4rXFx0dTE2IHBhZ2VbTUFYX1BPUlRTXTtcXG4gXFx0dTggc21pX2J1c1tNQVhfUE9SVFNdO1xcbiBcXHR1OCBzbWlfYWRkcltNQVhfUE9SVFNdO1xcbiBcXHRib29sIHNtaV9idXNfaXNfYzQ1W01BWF9TTUlfQlVTU0VTXTtcXG5AQCAtMTQyLDYgKzI2Nyw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xcbiBcXHR1OCBudW1fYnVzZXM7XFxuIFxcdHU4IG51bV9wb3J0cztcXG4gXFx0dTE2IG51bV9wYWdlcztcXG4rXFx0dTMyIHBvbGxfY3RybDtcXG4gXFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XFxuIFxcdGludCAoKnJlYWRfYzIyKShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XFxuIFxcdGludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcXG5AQCAtMTc3LDYgKzMwMywxMiBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxcbiBcXHRyZXR1cm4gY2hhbi1cXHUwMDNlcHJpdjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKVxcbit7XFxuK1xcdHJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2Vwb2xsX2N0cmwgKyAocG9ydCAvIDMyKSAqIDQsXFxuK1xcdFxcdFxcdFxcdCAgQklUKHBvcnQgJSAzMiksIGFjdGl2ZSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcXG4ge1xcbkBAIC0xODUsOSArMzE3LDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0dTMyIGNtZHN0YXRlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibGUgd3JvbmcgKi9cXG4rXFx0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibHkgd3JvbmcgKi9cXG4gXFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXFx1MDAzZXJlZ21hcCwgaW5mby1cXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTIyNyw3ICszNTksNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXFx1MDAzZXJlZ21hcCwgaW5mby1cXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTI2NCwxMyArMzk2LDcwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWNtZF93cml0ZSwgY21kX2RhdGEpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9IEJJVChwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFxcdTAwMjZjbWRfZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuK1xcdFxcdC5leHRfcGFnZVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXFx1MDAyNmNtZF9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmV4dF9wYWdlXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoXFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFxcdTAwM2VcXHUwMDNlIDMyKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuIHtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuIFxcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4gXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXFxuIFxcdH07XFxuIFxcbkBAIC0yODQsNyArNDczLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbiBcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4tXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuIFxcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXFxuIFxcdFxcdC5wb3J0X21hc2tfbG93XFx0PSBCSVQocG9ydCksXFxuIFxcdH07XFxuQEAgLTMyNCw3ICs1MTMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdVxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmJyb2FkY2FzdFxcdD0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLFxcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHR9O1xcbiBcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuQEAgLTMzNiw3ICs1MjUsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2hpZ2hcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXFx1MDAzZVxcdTAwM2UgMzIpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXFxuQEAgLTM4Miw4ICs1NzEsMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXFxuIFxcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBvcnQ7XFxuIFxcbi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKVxcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdGlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKVxcbitcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcGFnZVtwb3J0XTtcXG4rXFxuIFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCBcXHUwMDI2dmFsdWUpO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7XFxuIH1cXG5AQCAtMzk3LDggKzU5MCwxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNlxcbiBcXHRpZiAocG9ydCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBwb3J0O1xcbiBcXG4tXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaylcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRpZiAocmVnbnVtID09IFJUTF9QQUdFX1NFTEVDVCkge1xcbitcXHRcXHRcXHRpZiAodmFsdWUgXFx1MDAzZT0gUkFXX1BBR0UocHJpdikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlcGFnZVtwb3J0XSA9IHZhbHVlO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0cmV0ID0gcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNld3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtNDcxLDYgKzY3MywxNSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZ1xcbitcXHQgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbiB7XFxuIFxcdHUzMiBnbGJfY3RybF9tYXNrID0gMCwgZ2xiX2N0cmxfdmFsID0gMDtcXG5AQCAtNTA3LDYgKzcxOCw0OCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IGNoYW4tXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAocG9ydCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBwb3J0O1xcbitcXG4rXFx0LyogXFxcInN5bmNcXFwiIHBhZ2UgaW4gY2FzZSBvZiBwcmV2aW91c2x5IGZhaWxlZCBhdHRhY2htZW50ICovXFxuK1xcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spXFxuK1xcdFxcdHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0gPSAwO1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVxcdTAwM2VtZGlvX2J1c10gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFwaHlfaWRfY29tcGFyZV92ZW5kb3IocGh5ZGV2LVxcdTAwM2VwaHlfaWQsIFJUTF9WRU5ET1JfSUQpKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiT25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXY7XFxuK1xcdGludCBwb3J0O1xcbitcXG4rXFx0cHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyk7XFxuK1xcdHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi1cXHUwMDNlbWRpby5idXMsIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG4rXFxuK1xcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogXFxcInN5bmNcXFwiIHBhZ2UgZm9yIG5leHQgYXR0YWNobWVudCAqL1xcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKVxcbitcXHRcXHRwcml2LVxcdTAwM2VwYWdlW3BvcnRdID0gMDtcXG4rXFxuK1xcdGlmIChvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpKVxcbitcXHRcXHRkZXZfZXJyKGJ1cy1cXHUwMDNlcGFyZW50LCBcXFwiZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxcXFxuXFxcIiwgcG9ydCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXFxuIHtcXG5AQCAtNTM2LDYgKzc4OSw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2XFxuIFxcdFxcdGJ1cy1cXHUwMDNld3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjtcXG4gXFx0fVxcbiBcXHRidXMtXFx1MDAzZXBhcmVudCA9IGRldjtcXG4rXFx0YnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XFxuK1xcdGJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xcbitcXG4gXFx0Y2hhbiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4gXFx0Y2hhbi1cXHUwMDNlbWRpb19idXMgPSBtZGlvX2J1cztcXG4gXFx0Y2hhbi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuQEAgLTYzMyw4ICs4ODksMTMgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdFxcdCAqIChpLmUuIGNsYXVzZSA0NSkuIFNlbGVjdCAxMEdQSFkgbW9kZSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgUEhZIHRoYXRcXG4gXFx0XFx0ICogZGVjbGFyZXMgY29tcGF0aWJsZSA9IFxcXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWM0NVxcXCIuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGh5X2RuLCBcXFwiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jNDVcXFwiKSlcXG4rXFx0XFx0aWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBoeV9kbiwgXFxcImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1XFxcIikpIHtcXG4rXFx0XFx0XFx0aWYgKCFwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VyZWFkX2M0NSB8fCAhcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNld3JpdGVfYzQ1KSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbitcXHRcXHRcXHRcXHRnb3RvIHB1dF9ub2RlcztcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRwcml2LVxcdTAwM2VzbWlfYnVzX2lzX2M0NVtidXNdID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0X19zZXRfYml0KHBuLCBwcml2LVxcdTAwM2V2YWxpZF9wb3J0cyk7XFxuIFxcdFxcdHByaXYtXFx1MDAzZXNtaV9idXNbcG5dID0gYnVzO1xcbkBAIC02NTIsNiArOTEzLDE5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFxcdTAwM2MgcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlbnVtX3BvcnRzOyBwb3J0KyspIHtcXG4rXFx0XFx0ZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuQEAgLTY3MSw2ICs5NDUsMTAgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlcmVnbWFwKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlcmVnbWFwKTtcXG4gXFxuK1xcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4gXFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XFxuIFxcbiBcXHRlcnIgPSBvdHRvX2VtZGlvX21hcF9wb3J0cyhkZXYpO1xcbkBAIC02OTYsNiArOTc0LDQ3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7XFxuK1xcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXFxuK1xcdC5jbWRfZmFpbCA9IFJUTDgzODBfUEhZX0NUUkxfRkFJTCxcXG4rXFx0LmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELFxcbitcXHQuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSxcXG4rXFx0LmNtZF9yZWdzID0ge1xcbitcXHRcXHQuYzIyX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMSxcXG4rXFx0XFx0LmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsXFxuK1xcdFxcdC5pb19kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzIsXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93ID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzAsXFxuK1xcdH0sXFxuK1xcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcXG4rXFx0Lm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLFxcbitcXHQubnVtX3BvcnRzID0gUlRMODM4MF9OVU1fUE9SVFMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXFxuK1xcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIsXFxuK1xcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMixcXG4rXFx0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHtcXG4rXFx0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxcbitcXHQuY21kX3JlYWQgPSBSVEw4MzkwX1BIWV9DVFJMX1JFQUQsXFxuK1xcdC5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLFxcbitcXHQuY21kX3JlZ3MgPSB7XFxuK1xcdFxcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXFxuK1xcdFxcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxcbitcXHRcXHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcXG4rXFx0XFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcXG4rXFx0XFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXFxuK1xcdH0sXFxuK1xcdC5udW1fYnVzZXMgPSBSVEw4MzkwX05VTV9CVVNFUyxcXG4rXFx0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxcbitcXHQubnVtX3BvcnRzID0gUlRMODM5MF9OVU1fUE9SVFMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcXG4rXFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxcbitcXHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMixcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xcbiBcXHQuYWRkcl9tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxcbiBcXHQuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsXFxuQEAgLTcxMSw2ICsxMDMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XFxuIFxcdC5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUyxcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxcbiBcXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsXFxuIFxcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXFxuIFxcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMixcXG4gXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LFxcbkBAIC03MzYsNiArMTA1Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xcbiBcXHQubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsXFxuIFxcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDkzMTBfTlVNX1BPUlRTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXFxuIFxcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXFxuIFxcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMixcXG4gXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxcbkBAIC03NDQsNiArMTA2NSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3R0b19lbWRpb19pZHNbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDgzODAtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxydGw4MzkxLW1kaW9cXFwiLCAuZGF0YSA9IFxcdTAwMjZvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LFxcbiBcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscnRsOTMwMS1tZGlvXFxcIiwgLmRhdGEgPSBcXHUwMDI2b3R0b19lbWRpb185MzAwX2luZm8gfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDkzMTEtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXFxuIFxcdHt9XFxuQEAgLTc1NSw2ICsxMDc4LDcgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb3R0b19lbWRpb19kcml2ZXIgPSB7XFxuIFxcdC5kcml2ZXIgPSB7XFxuIFxcdFxcdC5uYW1lID0gXFxcIm1kaW8tcnRsOTMwMFxcXCIsXFxuIFxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IG90dG9fZW1kaW9faWRzLFxcbitcXHRcXHQuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsXFxuIFxcdH0sXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDk0YjJlODVlMDBhMzcuLjFhNDNmZWMwMjJhYTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG5AQCAtMTczNCw2ICsxNzM0LDk2IEBAIHN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuIFxcdHJldHVybiBwaHlkcnYtXFx1MDAzZWNvbmZpZ19pbnRyIFxcdTAwMjZcXHUwMDI2IHBoeWRydi1cXHUwMDNlaGFuZGxlX2ludGVycnVwdDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcGh5X2RldGFjaF9pbnRlcm5hbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIG5vdGlmeV9idXMpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2O1xcbitcXHRzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDtcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cztcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWRldmxpbmspIHtcXG4rXFx0XFx0ZGV2aWNlX2xpbmtfZGVsKHBoeWRldi1cXHUwMDNlZGV2bGluayk7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlZGV2bGluayA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZXN5c2ZzX2xpbmtzKSB7XFxuK1xcdFxcdGlmIChkZXYpXFxuK1xcdFxcdFxcdHN5c2ZzX3JlbW92ZV9saW5rKFxcdTAwMjZkZXYtXFx1MDAzZWRldi5rb2JqLCBcXFwicGh5ZGV2XFxcIik7XFxuK1xcdFxcdHN5c2ZzX3JlbW92ZV9saW5rKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LmtvYmosIFxcXCJhdHRhY2hlZF9kZXZcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2RldilcXG4rXFx0XFx0c3lzZnNfcmVtb3ZlX2ZpbGUoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYua29iaixcXG4rXFx0XFx0XFx0XFx0ICBcXHUwMDI2ZGV2X2F0dHJfcGh5X3N0YW5kYWxvbmUuYXR0cik7XFxuK1xcbitcXHRwaHlfc3VzcGVuZChwaHlkZXYpO1xcbitcXG4rXFx0aWYgKG5vdGlmeV9idXMgXFx1MDAyNlxcdTAwMjYgcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2gpXFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7XFxuK1xcbitcXHRpZiAoZGV2KSB7XFxuK1xcdFxcdHN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92O1xcbitcXG4rXFx0XFx0LyogaHdwcm92IG1heSB0ZWNobmljYWxseSBiZSBwcm90ZWN0ZWQgYnkgb3BzIGxvY2sgYnV0XFxuK1xcdFxcdCAqIG5vdCBmb3IgZGV2aWNlcyB3aXRoIGEgcGh5ZGV2LCBzZWUgcGh5X2xpbmtfdG9wb19hZGRfcGh5KClcXG4rXFx0XFx0ICovXFxuK1xcdFxcdGh3cHJvdiA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LVxcdTAwM2Vod3Byb3YpO1xcbitcXHRcXHQvKiBEaXNhYmxlIHRpbWVzdGFtcCBpZiBpdCBpcyB0aGUgb25lIHNlbGVjdGVkICovXFxuK1xcdFxcdGlmIChod3Byb3YgXFx1MDAyNlxcdTAwMjYgaHdwcm92LVxcdTAwM2VwaHlkZXYgPT0gcGh5ZGV2KSB7XFxuK1xcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXFx1MDAzZWh3cHJvdiwgTlVMTCk7XFxuK1xcdFxcdFxcdGtmcmVlX3JjdShod3Byb3YsIHJjdV9oZWFkKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYtXFx1MDAzZXBoeWRldiA9IE5VTEw7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2ID0gTlVMTDtcXG4rXFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5ZGV2KTtcXG4rXFx0fVxcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2VwaHlfbGlua19jaGFuZ2UgPSBOVUxMO1xcbitcXHRwaHlkZXYtXFx1MDAzZXBoeWxpbmsgPSBOVUxMO1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZHJpdmVyKVxcbitcXHRcXHRtb2R1bGVfcHV0KHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZHJpdmVyLVxcdTAwM2Vvd25lcik7XFxuK1xcbitcXHQvKiBJZiB0aGUgZGV2aWNlIGhhZCBubyBzcGVjaWZpYyBkcml2ZXIgYmVmb3JlIChpLmUuIC0gaXRcXG4rXFx0ICogd2FzIHVzaW5nIHRoZSBnZW5lcmljIGRyaXZlciksIHdlIHVuYmluZCB0aGUgZGV2aWNlXFxuK1xcdCAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUncyBhIGNoYW5jZSBhXFxuK1xcdCAqIHJlYWwgZHJpdmVyIGNvdWxkIGJlIGxvYWRlZFxcbitcXHQgKi9cXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaXNfZ2VucGh5X2RyaXZlbikge1xcbitcXHRcXHRkZXZpY2VfcmVsZWFzZV9kcml2ZXIoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYpO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWlzX2dlbnBoeV9kcml2ZW4gPSAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xcbitcXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcGh5ZGV2IG1pZ2h0IGdvIGF3YXkgb24gdGhlIHB1dF9kZXZpY2UoKSBiZWxvdywgc28gYXZvaWRcXG4rXFx0ICogYSB1c2UtYWZ0ZXItZnJlZSBidWcgYnkgcmVhZGluZyB0aGUgdW5kZXJseWluZyBidXMgZmlyc3QuXFxuK1xcdCAqL1xcbitcXHRidXMgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzO1xcbitcXG4rXFx0cHV0X2RldmljZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuK1xcdGlmIChkZXYpXFxuK1xcdFxcdG5kZXZfb3duZXIgPSBkZXYtXFx1MDAzZWRldi5wYXJlbnQtXFx1MDAzZWRyaXZlci1cXHUwMDNlb3duZXI7XFxuK1xcdGlmIChuZGV2X293bmVyICE9IGJ1cy1cXHUwMDNlb3duZXIpXFxuK1xcdFxcdG1vZHVsZV9wdXQoYnVzLVxcdTAwM2Vvd25lcik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxcbisgKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXFxuKyAqL1xcbit2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHQvKiBjbGVhbnVwIGluY2x1ZGluZyBidXMgbm90aWZpY2F0aW9uICovXFxuK1xcdHBoeV9kZXRhY2hfaW50ZXJuYWwocGh5ZGV2LCB0cnVlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xcbitcXG4gLyoqXFxuICAqIHBoeV9hdHRhY2hfZGlyZWN0IC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBnaXZlbiBQSFkgZGV2aWNlIHBvaW50ZXJcXG4gICogQGRldjogbmV0d29yayBkZXZpY2UgdG8gYXR0YWNoXFxuQEAgLTE4NzYsNiArMTk2NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJvcjtcXG4gXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xcbitcXHRcXHRlcnIgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGVycm9yO1xcbitcXHR9XFxuK1xcbiBcXHRwaHlfcmVzdW1lKHBoeWRldik7XFxuIFxcbiBcXHQvKipcXG5AQCAtMTg5MCw4ICsxOTg2LDggQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdHJldHVybiBlcnI7XFxuIFxcbiBlcnJvcjpcXG4tXFx0LyogcGh5X2RldGFjaCgpIGRvZXMgYWxsIG9mIHRoZSBjbGVhbnVwIGJlbG93ICovXFxuLVxcdHBoeV9kZXRhY2gocGh5ZGV2KTtcXG4rXFx0LyogY2xlYW51cCB3aXRob3V0IGJ1cyBub3RpZmljYXRpb24gKi9cXG4rXFx0cGh5X2RldGFjaF9pbnRlcm5hbChwaHlkZXYsIGZhbHNlKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gXFxuIGVycm9yX21vZHVsZV9wdXQ6XFxuQEAgLTE5MDYsODYgKzIwMDIsNiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcXG4gXFxuLS8qKlxcbi0gKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxcbi0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tICpcXG4tICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxcbi0gKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXFxuLSAqL1xcbi12b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4te1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXY7XFxuLVxcdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbi1cXG4tXFx0aWYgKHBoeWRldi1cXHUwMDNlZGV2bGluaykge1xcbi1cXHRcXHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVxcdTAwM2VkZXZsaW5rKTtcXG4tXFx0XFx0cGh5ZGV2LVxcdTAwM2VkZXZsaW5rID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHBoeWRldi1cXHUwMDNlc3lzZnNfbGlua3MpIHtcXG4tXFx0XFx0aWYgKGRldilcXG4tXFx0XFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNmRldi1cXHUwMDNlZGV2LmtvYmosIFxcXCJwaHlkZXZcXFwiKTtcXG4tXFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYua29iaiwgXFxcImF0dGFjaGVkX2RldlxcXCIpO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIXBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2KVxcbi1cXHRcXHRzeXNmc19yZW1vdmVfZmlsZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5rb2JqLFxcbi1cXHRcXHRcXHRcXHQgIFxcdTAwMjZkZXZfYXR0cl9waHlfc3RhbmRhbG9uZS5hdHRyKTtcXG4tXFxuLVxcdHBoeV9zdXNwZW5kKHBoeWRldik7XFxuLVxcdGlmIChkZXYpIHtcXG4tXFx0XFx0c3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7XFxuLVxcbi1cXHRcXHQvKiBod3Byb3YgbWF5IHRlY2huaWNhbGx5IGJlIHByb3RlY3RlZCBieSBvcHMgbG9jayBidXRcXG4tXFx0XFx0ICogbm90IGZvciBkZXZpY2VzIHdpdGggYSBwaHlkZXYsIHNlZSBwaHlfbGlua190b3BvX2FkZF9waHkoKVxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aHdwcm92ID0gcnRubF9kZXJlZmVyZW5jZShkZXYtXFx1MDAzZWh3cHJvdik7XFxuLVxcdFxcdC8qIERpc2FibGUgdGltZXN0YW1wIGlmIGl0IGlzIHRoZSBvbmUgc2VsZWN0ZWQgKi9cXG4tXFx0XFx0aWYgKGh3cHJvdiBcXHUwMDI2XFx1MDAyNiBod3Byb3YtXFx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcXG4tXFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cXHUwMDNlaHdwcm92LCBOVUxMKTtcXG4tXFx0XFx0XFx0a2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2Rldi1cXHUwMDNlcGh5ZGV2ID0gTlVMTDtcXG4tXFx0XFx0cGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xcbi1cXHRcXHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xcbi1cXHR9XFxuLVxcbi1cXHRwaHlkZXYtXFx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XFxuLVxcdHBoeWRldi1cXHUwMDNlcGh5bGluayA9IE5VTEw7XFxuLVxcbi1cXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5kcml2ZXIpXFxuLVxcdFxcdG1vZHVsZV9wdXQocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5kcml2ZXItXFx1MDAzZW93bmVyKTtcXG4tXFxuLVxcdC8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdFxcbi1cXHQgKiB3YXMgdXNpbmcgdGhlIGdlbmVyaWMgZHJpdmVyKSwgd2UgdW5iaW5kIHRoZSBkZXZpY2VcXG4tXFx0ICogZnJvbSB0aGUgZ2VuZXJpYyBkcml2ZXIgc28gdGhhdCB0aGVyZSdzIGEgY2hhbmNlIGFcXG4tXFx0ICogcmVhbCBkcml2ZXIgY291bGQgYmUgbG9hZGVkXFxuLVxcdCAqL1xcbi1cXHRpZiAocGh5ZGV2LVxcdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XFxuLVxcdFxcdGRldmljZV9yZWxlYXNlX2RyaXZlcihcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuLVxcdFxcdHBoeWRldi1cXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XFxuLVxcdH1cXG4tXFxuLVxcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXFxuLVxcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZFxcbi1cXHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cXG4tXFx0ICovXFxuLVxcdGJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuLVxcbi1cXHRwdXRfZGV2aWNlKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KTtcXG4tXFx0aWYgKGRldilcXG4tXFx0XFx0bmRldl9vd25lciA9IGRldi1cXHUwMDNlZGV2LnBhcmVudC1cXHUwMDNlZHJpdmVyLVxcdTAwM2Vvd25lcjtcXG4tXFx0aWYgKG5kZXZfb3duZXIgIT0gYnVzLVxcdTAwM2Vvd25lcilcXG4tXFx0XFx0bW9kdWxlX3B1dChidXMtXFx1MDAzZW93bmVyKTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xcbi1cXG4gaW50IHBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2O1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IDVmOGQ2NTg2OGUwZmYuLjNkOGFmZTZiN2YxYzUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMzc2LDYgKzM3NiwyNCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XFxuIFxcdFxcdFxcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKTtcXG4gXFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cXG4gXFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xcbitcXHQvKipcXG4rXFx0ICogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nIGZvciBNRElPIGJ1c1xcbitcXHQgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfZGV0YWNoLiBDYWxsZWRcXG4rXFx0ICogaW4gcGh5X2F0dGFjaF9kaXJlY3QoKSByaWdodCBiZWZvcmUgcGh5X3Jlc3VtZSgpLiBSdW5zIGluIHByb2Nlc3NcXG4rXFx0ICogY29udGV4dCwgbWF5IHNsZWVwIGFuZCBtYXkgYmUgY2FsbGVkIHdpdGggUlROTCBoZWxkLiBNdXN0IG5vdFxcbitcXHQgKiBhY3F1aXJlIG9yIHJlbHkgb24gUlROTC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJybm9cXG4rXFx0ICogb24gZmFpbHVyZS4gTXVzdCB1bndpbmQgaXRzIG93biBzdGF0ZSBvbiBlcnJvciBhcyBhdHRhY2htZW50IGlzXFxuK1xcdCAqIGFib3J0ZWQuXFxuK1xcdCAqL1xcbitcXHRpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuK1xcdC8qKlxcbitcXHQgKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcXG4rXFx0ICogZHJpdmVycy4gT3B0aW9uYWwgYW5kIGluZGVwZW5kZW50IG9mIEBub3RpZnlfcGh5X2F0dGFjaC4gQ2FsbGVkXFxuK1xcdCAqIGluIHBoeV9kZXRhY2goKSByaWdodCBhZnRlciBwaHlfc3VzcGVuZCgpLiBSdW5zIGluIHByb2Nlc3MgY29udGV4dCxcXG4rXFx0ICogbWF5IHNsZWVwIGFuZCBtYXkgYmUgY2FsbGVkIHdpdGggUlROTCBoZWxkLiBNdXN0IG5vdCBhY3F1aXJlIG9yXFxuK1xcdCAqIHJlbHkgb24gUlROTC5cXG4rXFx0ICovXFxuK1xcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIFxcbiBcXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXFxuIFxcdHN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMDowMS4zODcxODI5MjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzg2MDUxNjQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRElPX1JFQUxURUtfUlRMOTMwMFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9hdHRhY2hfZGlyZWN0XCIsXG4gICAgXCJwaHlfZGV0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgaW4gdGhlIGNvcmUgUEhZIGZyYW1ld29yayAoYHN0cnVjdCBtaWlfYnVzYCkgYW5kIG1vZGlmaWVzIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCB0byB1c2UgdGhlbS4gSXQgYWxzbyBhZGRzIHN1cHBvcnQgZm9yIFJUTDgzODAvUlRMODM5MCB0byB0aGUgUmVhbHRlayBNRElPIGRyaXZlciB3aGljaCBpbXBsZW1lbnRzIHRoZXNlIGNhbGxiYWNrcy4gVGhlIGNvcmUgUEhZIGZyYW1ld29yayBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ5M2I3ZmQ3MmFiODRlYTg0ZDMxMTczNDJmMzc5MjRhNTJjZjhlM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjE5OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5pbmRleCAyNzFlMDViYWU5YzU3Li42N2UwYjIzYTg0NzBlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbkBAIC00LDcgKzQsNyBAQFxuICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjXG4gJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4gXG4tdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXJcbit0aXRsZTogUmVhbHRlayBPdHRvIFN3aXRjaGVzIEV0aGVybmV0IE1ESU8gQ29udHJvbGxlclxuIFxuIG1haW50YWluZXJzOlxuICAgLSBDaHJpcyBQYWNraGFtIFx1MDAzY2NocmlzLnBhY2toYW1AYWxsaWVkdGVsZXNpcy5jby5uelx1MDAzZVxuQEAgLTEyLDYgKzEyLDE2IEBAIG1haW50YWluZXJzOlxuIHByb3BlcnRpZXM6XG4gICBjb21wYXRpYmxlOlxuICAgICBvbmVPZjpcbisgICAgICAtIGl0ZW1zOlxuKyAgICAgICAgICAtIGVudW06XG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvXG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpb1xuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuICAgICAgIC0gaXRlbXM6XG4gICAgICAgICAgIC0gZW51bTpcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvXG5AQCAtMjQsNiArMzQsOCBAQCBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTMtbWRpb1xuICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuICAgICAgIC0gZW51bTpcbisgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpb1xuKyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cbiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xuaW5kZXggYTA1MjI5ODM4Y2I0NS4uZDQ0Mjc4ZjI2ZmFiZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXG5AQCAtMTcyLDExICsxNzIsMTEgQEAgY29uZmlnIE1ESU9fSVBRODA2NFxuIFx0ICBpbnRlcmZhY2UgdW5pdHMgb2YgdGhlIElQUTgwNjQgU29DXG4gXG4gY29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXG4tXHR0cmlzdGF0ZSBcIlJlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XCJcbitcdHRyaXN0YXRlIFwiUmVhbHRlayBSVEw4M3h4L1JUTDkzeHggTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwiXG4gXHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXG4gXHRoZWxwXG4gXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgUmVhbHRla1xuLVx0ICBSVEw5MzAwIGZhbWlseSBvZiBFdGhlcm5ldCBzd2l0Y2hlcyB3aXRoIGludGVncmF0ZWQgU29DLlxuK1x0ICBSVEw4M3h4L1JUTDkzeHggZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXG4gXG4gY29uZmlnIE1ESU9fUkVHTUFQXG4gXHR0cmlzdGF0ZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuaW5kZXggYWZkNTJhMWNkN2Y4My4uNzdkYzA0NjMwYzQ0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG5AQCAtMzUsNiArMzUsODEgQEBcbiAgKlxuICAqIFRoZSBkcml2ZXIgd29ya3Mgb3V0IHRoZSBtYXBwaW5nIGJhc2VkIG9uIHRoZSBNRElPIGJ1cyBkZXNjcmliZWQgaW4gZGV2aWNlIHRyZWUgYW5kIHBoYW5kbGVzIG9uXG4gICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LlxuKyAqXG4rICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0XG4rICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy5cbisgKlxuKyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/XG4rICpcbisgKiBFYWNoIGRldmljZSBoYXMgYSBTTUlfUE9MTF9DVFJMIHJlZ2lzdGVyLiBBIHBlci1wb3J0IGJpdG1hc2sgZGVjaWRlcyBpZiB0aGUgaGFyZHdhcmUgcG9sbGluZyBvZlxuKyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvclxuKyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlXG4rICogTURJTyBidXMgb2YgYW4gUlRMODM4MCBhbmQgUlRMODM5MyBnaXZlcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChpbiBrZXJuZWwgbm90YXRpb24pOlxuKyAqXG4rICpcdFJUTDgzODBcdFx0XHRcdFJUTDgzOTNcbisgKlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKlx0cGh5X3dyaXRlKHBoeSwgMzEsIDB4MCk7XHRwaHlfcmVhZChwaHksIDApO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcdHBoeV9yZWFkKHBoeSwgMSk7XG4rICpcdHBoeV93cml0ZShwaHksIDE0LCAweDNjKTtcdHBoeV9yZWFkKHBoeSwgNCk7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCA1KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV9yZWFkKHBoeSwgNik7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1x0cGh5X3JlYWQocGh5LCA5KTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1x0cGh5X3JlYWQocGh5LCAxMCk7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCAxNSk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMTQpO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcbisgKlx0cGh5X3JlYWQocGh5LCA5KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xuKyAqXHRwaHlfcmVhZChwaHksIDEwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMTUpO1x0XHRwaHlfcmVhZChwaHksIDE0KTtcbisgKlx0cGh5X3JlYWQocGh5LCAwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMSk7XHRcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcbisgKlx0cGh5X3JlYWQocGh5LCA0KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuKyAqXHRwaHlfcmVhZChwaHksIDYpO1xuKyAqXG4rICogQWZ0ZXIgb25lIFBIWSBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIElmIG9uZSBidXMgaXMgZnVsbHlcbisgKiBzY2FubmVkIGl0IHN3aXRjaGVzIG92ZXIgdG8gdGhlIG5leHQgYnVzLiBCYXNpY2FsbHkgdGhlIHBvbGxpbmcgc3lzdGVtIGlzIGFsd2F5cyBidXN5IGFuZCB0aGVcbisgKiBNQUMgc3RhdGUgaXMgdXBkYXRlZCBpbiByZWFsLXRpbWUuXG4rICpcbisgKiBUaGlzIGlzIGEgZ2xpbXBzZSBsb29rIGF0IHRoZSBjb21wbGV4aXR5IG9mIHRoZSBwb2xsaW5nIGFuZCBsZWF2ZXMgb3V0IHRoZSBDNDUgY2FzZSBhbmQgdGhlIE1BQ1xuKyAqIHJlZ2lzdGVyIHVwZGF0ZSBsb2dpYyBhZnRlcndhcmRzLiBJbXBvcnRhbnQgdG8gbm90ZTpcbisgKlxuKyAqIC0gMTAwIE1CaXQgZG93bnNoaWZ0cyAoYnJva2VuIGNhYmxlcykgYXJlIGlkZW50aWZpZWQgYW5kIHByb3BhZ2F0ZWQgdG8gdGhlIE1BQyBjb3JyZWN0bHlcbisgKiAtIEFjY2VzcyB0byBNRElPX0FOX0VFRV9BRFYgYW5kIE1ESU9fQU5fRUVFX0xQQUJMRSB3b3JrcyB2aWEgQzQ1IG92ZXIgQzIyLlxuKyAqIC0gSXQgaXMgdW5jbGVhciBpZiB0aGVzZSBzZXF1ZW5jZXMgY2hhbmdlIGZvciBkaWZmZXJlbnQgUEhZcy5cbisgKiAtIEFjY2VzcyB0byBSZWFsdGVrIHJlc2VydmVkIHJlZ2lzdGVyIDI2IChsaW5rIHNwZWVkKSBoYXMgbm90IHlldCBiZWVuIHNlZW4uXG4rICpcbisgKiBIb3cgZG9lcyBNRElPIGFjY2VzcyBmcm9tIGtlcm5lbCB3b3JrP1xuKyAqXG4rICogV2hlbiBpc3N1aW5nIE1ESU8gYWNjZXNzZXMgdmlhIGFuIE1NSU8gYmFzZWQgaW50ZXJmYWNlIHRoZSBmaW5hbCB3cml0ZSB0byB0aGUgY29tbWFuZCByZWdpc3RlclxuKyAqIHNldHMgYSBcInJ1biBjb21tYW5kIG5vd1wiIGJpdC4gQmV0d2VlbiB0d28gcG9sbGluZyBzZXF1ZW5jZXMgZm9yIGRpZmZlcmVudCBQSFlzIHRoZSBoYXJkd2FyZVxuKyAqIGNoZWNrcyBpZiBhIHVzZXIgY29tbWFuZCBuZWVkcyB0byBydW4gYW5kIHNlbmRzIGl0IG9udG8gdGhlIGJ1cy4gQWZ0ZXJ3YXJkcyBpdCBzaW1wbHkgY29udGludWVzXG4rICogaXRzIHBvbGxpbmcgd29yay4gSW5zcGVjdGluZyB0aGUgY29tbWFuZCBzZXF1ZW5jZSBmb3IgYSBwYWdlZCB3cml0ZSBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6XG4rICpcbisgKlx0UlRMODM4MFx0XHRcdFx0UlRMODM5M1xuKyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqXHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XG4rICpcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1x0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XG4rICpcdFx0XHRcdFx0cGh5X3dyaXRlKHBoeSwgMzEsIDApO1xuKyAqXG4rICogV2hhdCBkb2VzIHRoaXMgbWVhbj9cbisgKlxuKyAqIFRoZXJlIGFyZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gcG9sbGluZyBhbmQgUEhZIGFjY2VzcyBiZXR3ZWVuIHRoZSBtb2RlbHMgYnV0IHRoZSBjaGFsbGVuZ2VcbisgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0XG4rICogaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsIFBIWSBzdWJzeXN0ZW0uXG4rICpcbisgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuXG4rICogICBFc3BlY2lhbGx5IGFuIHVucG9wdWxhdGVkIE1BQ19MSU5LX1NUUyByZWdpc3RlciBjYW5jZWxzIG9wZXJhdGlvbnMgdG8gb3RoZXIgTUFDIHJlZ2lzdGVycy5cbisgKiAtIFRoZSBSZWFsdGVrIHBhZ2UgcmVnaXN0ZXIgMzEgaXMgbWFnaWNhbGx5IG1vZGlmaWVkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIHRoYXQgcG9sbGluZyB3aWxsXG4rICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtXG4rICogICB0byB0cmFjayB0aGUgcGFnZSBhY2Nlc3MgXCJtYWdpY2FsbHlcIiBpbiB0aGUgYmFja2dyb3VuZC5cbisgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdFxuKyAqICAgdGhlIHBvbGxpbmcgZW5naW5lIG92ZXJ3cml0ZXMgcmVnaXN0ZXJzIDEzLzE0IGluIGJldHdlZW4uXG4rICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW5cbisgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLlxuKyAqIC0gQW4gYWNjZXNzIHRvIG9uZSBQSFkgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGZyZWUgc2xvdCBvZiB0aGUgcG9sbGluZyBlbmdpbmUuXG4rICpcbisgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXRcbisgKiBhcmlzZXMgZnJvbSB0aGUgYWJvdmUgZGVzY3JpYmVkIGhhcmR3YXJlIHBvbGxpbmcuXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuQEAgLTUwLDYgKzEyNSw1MCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuIFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVNcdFx0XHQxXG4rI2RlZmluZSBSVEw4MzgwX05VTV9QQUdFU1x0XHRcdDQwOTZcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXHRcdFx0MjhcbisjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMXHRcdFx0MHhhMTAwXG4rI2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FXHRcdEJJVCgxNSlcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXHRcdDB4YTFiOFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzFcdFx0MHhhMWJjXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFJcdFx0R0VOTUFTSygyNCwgMjApXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFXHRcdEdFTk1BU0soMTksIDE1KVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRVx0XHRHRU5NQVNLKDE0LCAzKVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFXHRcdEJJVCgyKVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQURcdFx0XHQwXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDVcdFx0QklUKDEpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjJcdFx0MFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUxcdFx0XHQwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMlx0XHQweGExYzBcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGExYzRcbisjZGVmaW5lIFJUTDgzODBfU01JX1BPTExfQ1RSTFx0XHRcdDB4YTE3Y1xuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhhMWM4XG4rXG4rI2RlZmluZSBSVEw4MzkwX05VTV9CVVNFU1x0XHRcdDJcbisjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTXHRcdFx0ODE5MlxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUE9SVFNcdFx0XHQ1MlxuKyNkZWZpbmUgUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMXHRcdDB4MDNlY1xuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkxcdFx0MHgwM2RjXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFJcdFx0R0VOTUFTSyg5LCA1KVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRVx0XHRHRU5NQVNLKDIyLCAxMClcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9GQUlMXHRcdFx0QklUKDEpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDMpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVBRFx0XHRcdDBcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMilcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19DVFJMXHRcdFx0MHgwM2UwXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0VcdFx0R0VOTUFTSyg4LCAwKVxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMXHRcdDB4MDNmMFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMXHRcdFx0MHgwM2Y0XG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XXHRcdDB4MDNlNFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcdFx0MHgwM2U4XG4rI2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDAzZmNcbitcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTXHRcdFx0NFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QT1JUU1x0XHRcdDI4XG5AQCAtNzAsNiArMTg5LDcgQEBcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGNiN2NcbisjZGVmaW5lIFJUTDkzMDBfU01JX1BPTExfQ1RSTFx0XHRcdDB4Y2E5MFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhjYjgwXG4gXG4gI2RlZmluZSBSVEw5MzEwX05VTV9CVVNFU1x0XHRcdDRcbkBAIC05NSwxMiArMjE1LDE2IEBAXG4gI2RlZmluZSAgIFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfTU1EX0NUUkxcdDB4MGMxOFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9BRERSX0NUUkxcdFx0MHgwYzc0XG4rI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDBjY2NcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUxcdFx0MHgwYzljXG4gXG4gI2RlZmluZSBQSFlfQ1RSTF9DTURcdFx0XHRcdEJJVCgwKVxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFEXHRcdFx0R0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfUkVHXHRcdFx0R0VOTUFTSygxNSwgMClcbiBcbisjZGVmaW5lIFJUTF9WRU5ET1JfSURcdFx0XHRcdDB4MDAxY2M4MDBcbisjZGVmaW5lIFJUTF9QQUdFX1NFTEVDVFx0XHRcdFx0MzFcbitcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXHRcdFx0NlxuICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFJcdFx0XHQ1XG4gI2RlZmluZSBNQVBfQklUU19QRVJfQlVTXHRcdFx0MlxuQEAgLTEyNiw2ICsyNTAsNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2IHtcbiBcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiBcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqL1xuIFx0REVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7XG4rXHR1MTYgcGFnZVtNQVhfUE9SVFNdO1xuIFx0dTggc21pX2J1c1tNQVhfUE9SVFNdO1xuIFx0dTggc21pX2FkZHJbTUFYX1BPUlRTXTtcbiBcdGJvb2wgc21pX2J1c19pc19jNDVbTUFYX1NNSV9CVVNTRVNdO1xuQEAgLTE0Miw2ICsyNjcsNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHtcbiBcdHU4IG51bV9idXNlcztcbiBcdHU4IG51bV9wb3J0cztcbiBcdHUxNiBudW1fcGFnZXM7XG4rXHR1MzIgcG9sbF9jdHJsO1xuIFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XG4gXHRpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuIFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuQEAgLTE3Nyw2ICszMDMsMTIgQEAgc3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcbiBcdHJldHVybiBjaGFuLVx1MDAzZXByaXY7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSlcbit7XG4rXHRyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBwcml2LVx1MDAzZWluZm8tXHUwMDNlcG9sbF9jdHJsICsgKHBvcnQgLyAzMikgKiA0LFxuK1x0XHRcdFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpXG4ge1xuQEAgLTE4NSw5ICszMTcsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0dTMyIGNtZHN0YXRlO1xuIFx0aW50IHJldDtcbiBcbi1cdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmxlIHdyb25nICovXG4rXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqL1xuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4rXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIyNyw3ICszNTksNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4rXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTI2NCwxMyArMzk2LDcwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVx1MDAzZWluZm8tXHUwMDNlY21kX3dyaXRlLCBjbWRfZGF0YSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbitcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbitcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbitcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuK1x0XHRcdFx0ICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5leHRfcGFnZVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuK1x0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuK1x0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuIHtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiBcdH07XG4gXG5AQCAtMjg0LDcgKzQ3Myw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSxcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiBcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuIFx0fTtcbkBAIC0zMjQsNyArNTEzLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHVcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYnJvYWRjYXN0XHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9CQ19QT1JUX0lELCBwb3J0KSxcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdH07XG4gXG4gXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDkzMTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuQEAgLTMzNiw3ICs1MjUsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG5AQCAtMzgyLDggKzU3MSwxMiBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSlcbiBcdGlmIChwb3J0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcG9ydDtcbiBcbi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKVxuK1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbitcdFx0aWYgKHJlZ251bSA9PSBSVExfUEFHRV9TRUxFQ1QpXG4rXHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlcGFnZVtwb3J0XTtcbitcbiBcdFx0cmV0ID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXJlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCBcdTAwMjZ2YWx1ZSk7XG4rXHR9XG4gXG4gXHRyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7XG4gfVxuQEAgLTM5Nyw4ICs1OTAsMTcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtLCB1MTZcbiBcdGlmIChwb3J0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcG9ydDtcbiBcbi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKVxuK1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbitcdFx0aWYgKHJlZ251bSA9PSBSVExfUEFHRV9TRUxFQ1QpIHtcbitcdFx0XHRpZiAodmFsdWUgXHUwMDNlPSBSQVdfUEFHRShwcml2KSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRcdHByaXYtXHUwMDNlcGFnZVtwb3J0XSA9IHZhbHVlO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXG4gXHRcdHJldCA9IHByaXYtXHUwMDNlaW5mby1cdTAwM2V3cml0ZV9jMjIoYnVzLCBwb3J0LCByZWdudW0sIHZhbHVlKTtcbitcdH1cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ3MSw2ICs2NzMsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuK3tcbitcdC8qXG4rXHQgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZ1xuK1x0ICogcGF0Y2hpbmcgYW5kIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgUEhZcyBhcmUgcHJvYmVkLlxuK1x0ICovXG4rXHRyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4ge1xuIFx0dTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwO1xuQEAgLTUwNyw2ICs3MTgsNDggQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXHUwMDNlbWRpby5idXMsIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IGNoYW4tXHUwMDNlcHJpdjtcbitcbitcdGlmIChwb3J0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcG9ydDtcbitcbitcdC8qIFwic3luY1wiIHBhZ2UgaW4gY2FzZSBvZiBwcmV2aW91c2x5IGZhaWxlZCBhdHRhY2htZW50ICovXG4rXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbitcdFx0cHJpdi1cdTAwM2VwYWdlW3BvcnRdID0gMDtcbitcbitcdGlmICghcHJpdi1cdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVx1MDAzZW1kaW9fYnVzXSBcdTAwMjZcdTAwMjZcbitcdCAgICAhcGh5X2lkX2NvbXBhcmVfdmVuZG9yKHBoeWRldi1cdTAwM2VwaHlfaWQsIFJUTF9WRU5ET1JfSUQpKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIk9ubHkgUmVhbHRlayBQSFlzIGFsbG93ZWQgb24gQzIyIGJ1c1xcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCB0cnVlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2O1xuK1x0aW50IHBvcnQ7XG4rXG4rXHRwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtXHUwMDNlbWRpby5idXMpO1xuK1x0cG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcbitcdGlmIChwb3J0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBcInN5bmNcIiBwYWdlIGZvciBuZXh0IGF0dGFjaG1lbnQgKi9cbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKVxuK1x0XHRwcml2LVx1MDAzZXBhZ2VbcG9ydF0gPSAwO1xuK1xuK1x0aWYgKG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSkpXG4rXHRcdGRldl9lcnIoYnVzLVx1MDAzZXBhcmVudCwgXCJmYWlsZWQgdG8gZGlzYWJsZSBwb2xsaW5nIGZvciBwb3J0ICVkXFxuXCIsIHBvcnQpO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcbiBcdFx0XHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqbm9kZSlcbiB7XG5AQCAtNTM2LDYgKzc4OSw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2XG4gXHRcdGJ1cy1cdTAwM2V3cml0ZSA9IG90dG9fZW1kaW9fd3JpdGVfYzIyO1xuIFx0fVxuIFx0YnVzLVx1MDAzZXBhcmVudCA9IGRldjtcbitcdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XG4rXHRidXMtXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xuK1xuIFx0Y2hhbiA9IGJ1cy1cdTAwM2Vwcml2O1xuIFx0Y2hhbi1cdTAwM2VtZGlvX2J1cyA9IG1kaW9fYnVzO1xuIFx0Y2hhbi1cdTAwM2Vwcml2ID0gcHJpdjtcbkBAIC02MzMsOCArODg5LDEzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHQgKiAoaS5lLiBjbGF1c2UgNDUpLiBTZWxlY3QgMTBHUEhZIG1vZGUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIFBIWSB0aGF0XG4gXHRcdCAqIGRlY2xhcmVzIGNvbXBhdGlibGUgPSBcImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1XCIuXG4gXHRcdCAqL1xuLVx0XHRpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGh5X2RuLCBcImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1XCIpKVxuK1x0XHRpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGh5X2RuLCBcImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1XCIpKSB7XG4rXHRcdFx0aWYgKCFwcml2LVx1MDAzZWluZm8tXHUwMDNlcmVhZF9jNDUgfHwgIXByaXYtXHUwMDNlaW5mby1cdTAwM2V3cml0ZV9jNDUpIHtcbitcdFx0XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuK1x0XHRcdFx0Z290byBwdXRfbm9kZXM7XG4rXHRcdFx0fVxuIFx0XHRcdHByaXYtXHUwMDNlc21pX2J1c19pc19jNDVbYnVzXSA9IHRydWU7XG4rXHRcdH1cbiBcbiBcdFx0X19zZXRfYml0KHBuLCBwcml2LVx1MDAzZXZhbGlkX3BvcnRzKTtcbiBcdFx0cHJpdi1cdTAwM2VzbWlfYnVzW3BuXSA9IGJ1cztcbkBAIC02NTIsNiArOTEzLDE5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcdTAwM2MgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZW51bV9wb3J0czsgcG9ydCsrKSB7XG4rXHRcdGVyciA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbkBAIC02NzEsNiArOTQ1LDEwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKTtcbiBcbitcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbiBcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFxuIFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbkBAIC02OTYsNiArOTc0LDQ3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0ge1xuK1x0LmFkZHJfbWFwX2Jhc2UgPSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbitcdC5jbWRfZmFpbCA9IFJUTDgzODBfUEhZX0NUUkxfRkFJTCxcbitcdC5jbWRfcmVhZCA9IFJUTDgzODBfUEhZX0NUUkxfUkVBRCxcbitcdC5jbWRfd3JpdGUgPSBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFLFxuK1x0LmNtZF9yZWdzID0ge1xuK1x0XHQuYzIyX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMSxcbitcdFx0LmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsXG4rXHRcdC5pb19kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzIsXG4rXHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzAsXG4rXHR9LFxuK1x0Lm51bV9idXNlcyA9IFJUTDgzODBfTlVNX0JVU0VTLFxuK1x0Lm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLFxuK1x0Lm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDgzODBfU01JX1BPTExfQ1RSTCxcbitcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIsXG4rXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsXG4rXHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMixcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0ge1xuK1x0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxuK1x0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxuK1x0LmNtZF93cml0ZSA9IFJUTDgzOTBfUEhZX0NUUkxfV1JJVEUsXG4rXHQuY21kX3JlZ3MgPSB7XG4rXHRcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXG4rXHRcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxuK1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcbitcdFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcbitcdFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXG4rXHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcbitcdFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXG4rXHR9LFxuK1x0Lm51bV9idXNlcyA9IFJUTDgzOTBfTlVNX0JVU0VTLFxuK1x0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxuK1x0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuK1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxuK1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5hZGRyX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4gXHQuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsXG5AQCAtNzExLDYgKzEwMzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzAwX05VTV9QQUdFUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LFxuQEAgLTczNiw2ICsxMDU2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7XG4gXHQubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsXG4gXHQubnVtX3BvcnRzID0gUlRMOTMxMF9OVU1fUE9SVFMsXG4rXHQucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxuQEAgLTc0NCw2ICsxMDY1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7XG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvdHRvX2VtZGlvX2lkc1tdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw4MzgwLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzgzODBfaW5mbyB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw4MzkxLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw5MzAxLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMDBfaW5mbyB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw5MzExLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LFxuIFx0e31cbkBAIC03NTUsNiArMTA3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG90dG9fZW1kaW9fZHJpdmVyID0ge1xuIFx0LmRyaXZlciA9IHtcbiBcdFx0Lm5hbWUgPSBcIm1kaW8tcnRsOTMwMFwiLFxuIFx0XHQub2ZfbWF0Y2hfdGFibGUgPSBvdHRvX2VtZGlvX2lkcyxcbitcdFx0LnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLFxuIFx0fSxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCA5NGIyZTg1ZTAwYTM3Li4xYTQzZmVjMDIyYWE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE3MzQsNiArMTczNCw5NiBAQCBzdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxuIFx0cmV0dXJuIHBoeWRydi1cdTAwM2Vjb25maWdfaW50ciBcdTAwMjZcdTAwMjYgcGh5ZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHBoeV9kZXRhY2hfaW50ZXJuYWwoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBub3RpZnlfYnVzKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2O1xuK1x0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VkZXZsaW5rKSB7XG4rXHRcdGRldmljZV9saW5rX2RlbChwaHlkZXYtXHUwMDNlZGV2bGluayk7XG4rXHRcdHBoeWRldi1cdTAwM2VkZXZsaW5rID0gTlVMTDtcbitcdH1cbitcbitcdGlmIChwaHlkZXYtXHUwMDNlc3lzZnNfbGlua3MpIHtcbitcdFx0aWYgKGRldilcbitcdFx0XHRzeXNmc19yZW1vdmVfbGluayhcdTAwMjZkZXYtXHUwMDNlZGV2LmtvYmosIFwicGh5ZGV2XCIpO1xuK1x0XHRzeXNmc19yZW1vdmVfbGluayhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYua29iaiwgXCJhdHRhY2hlZF9kZXZcIik7XG4rXHR9XG4rXG4rXHRpZiAoIXBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG4rXHRcdHN5c2ZzX3JlbW92ZV9maWxlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldi5rb2JqLFxuK1x0XHRcdFx0ICBcdTAwMjZkZXZfYXR0cl9waHlfc3RhbmRhbG9uZS5hdHRyKTtcbitcbitcdHBoeV9zdXNwZW5kKHBoeWRldik7XG4rXG4rXHRpZiAobm90aWZ5X2J1cyBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKVxuK1x0XHRwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2gocGh5ZGV2KTtcbitcbitcdGlmIChkZXYpIHtcbitcdFx0c3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7XG4rXG4rXHRcdC8qIGh3cHJvdiBtYXkgdGVjaG5pY2FsbHkgYmUgcHJvdGVjdGVkIGJ5IG9wcyBsb2NrIGJ1dFxuK1x0XHQgKiBub3QgZm9yIGRldmljZXMgd2l0aCBhIHBoeWRldiwgc2VlIHBoeV9saW5rX3RvcG9fYWRkX3BoeSgpXG4rXHRcdCAqL1xuK1x0XHRod3Byb3YgPSBydG5sX2RlcmVmZXJlbmNlKGRldi1cdTAwM2Vod3Byb3YpO1xuK1x0XHQvKiBEaXNhYmxlIHRpbWVzdGFtcCBpZiBpdCBpcyB0aGUgb25lIHNlbGVjdGVkICovXG4rXHRcdGlmIChod3Byb3YgXHUwMDI2XHUwMDI2IGh3cHJvdi1cdTAwM2VwaHlkZXYgPT0gcGh5ZGV2KSB7XG4rXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2Vod3Byb3YsIE5VTEwpO1xuK1x0XHRcdGtmcmVlX3JjdShod3Byb3YsIHJjdV9oZWFkKTtcbitcdFx0fVxuK1xuK1x0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LVx1MDAzZXBoeWRldiA9IE5VTEw7XG4rXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xuK1x0XHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xuK1x0fVxuK1xuK1x0cGh5ZGV2LVx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XG4rXHRwaHlkZXYtXHUwMDNlcGh5bGluayA9IE5VTEw7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmRyaXZlcilcbitcdFx0bW9kdWxlX3B1dChwaHlkZXYtXHUwMDNlbWRpby5kZXYuZHJpdmVyLVx1MDAzZW93bmVyKTtcbitcbitcdC8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdFxuK1x0ICogd2FzIHVzaW5nIHRoZSBnZW5lcmljIGRyaXZlciksIHdlIHVuYmluZCB0aGUgZGV2aWNlXG4rXHQgKiBmcm9tIHRoZSBnZW5lcmljIGRyaXZlciBzbyB0aGF0IHRoZXJlJ3MgYSBjaGFuY2UgYVxuK1x0ICogcmVhbCBkcml2ZXIgY291bGQgYmUgbG9hZGVkXG4rXHQgKi9cbitcdGlmIChwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbikge1xuK1x0XHRkZXZpY2VfcmVsZWFzZV9kcml2ZXIoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbitcdFx0cGh5ZGV2LVx1MDAzZWlzX2dlbnBoeV9kcml2ZW4gPSAwO1xuK1x0fVxuK1xuK1x0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cbitcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcbitcbitcdC8qXG4rXHQgKiBUaGUgcGh5ZGV2IG1pZ2h0IGdvIGF3YXkgb24gdGhlIHB1dF9kZXZpY2UoKSBiZWxvdywgc28gYXZvaWRcbitcdCAqIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGJ5IHJlYWRpbmcgdGhlIHVuZGVybHlpbmcgYnVzIGZpcnN0LlxuK1x0ICovXG4rXHRidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4rXG4rXHRwdXRfZGV2aWNlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4rXHRpZiAoZGV2KVxuK1x0XHRuZGV2X293bmVyID0gZGV2LVx1MDAzZWRldi5wYXJlbnQtXHUwMDNlZHJpdmVyLVx1MDAzZW93bmVyO1xuK1x0aWYgKG5kZXZfb3duZXIgIT0gYnVzLVx1MDAzZW93bmVyKVxuK1x0XHRtb2R1bGVfcHV0KGJ1cy1cdTAwM2Vvd25lcik7XG4rfVxuK1xuKy8qKlxuKyAqIHBoeV9kZXRhY2ggLSBkZXRhY2ggYSBQSFkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBUaGlzIGRldGFjaGVzIHRoZSBwaHkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlIGFuZCB0aGUgcGh5XG4rICogZHJpdmVyLCBhbmQgZHJvcHMgdGhlIHJlZmVyZW5jZSBjb3VudCB0YWtlbiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpLlxuKyAqL1xuK3ZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdC8qIGNsZWFudXAgaW5jbHVkaW5nIGJ1cyBub3RpZmljYXRpb24gKi9cbitcdHBoeV9kZXRhY2hfaW50ZXJuYWwocGh5ZGV2LCB0cnVlKTtcbit9XG4rRVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcbitcbiAvKipcbiAgKiBwaHlfYXR0YWNoX2RpcmVjdCAtIGF0dGFjaCBhIG5ldHdvcmsgZGV2aWNlIHRvIGEgZ2l2ZW4gUEhZIGRldmljZSBwb2ludGVyXG4gICogQGRldjogbmV0d29yayBkZXZpY2UgdG8gYXR0YWNoXG5AQCAtMTg3Niw2ICsxOTY2LDEyIEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvcjtcbiBcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcbitcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBlcnJvcjtcbitcdH1cbitcbiBcdHBoeV9yZXN1bWUocGh5ZGV2KTtcbiBcbiBcdC8qKlxuQEAgLTE4OTAsOCArMTk4Niw4IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0cmV0dXJuIGVycjtcbiBcbiBlcnJvcjpcbi1cdC8qIHBoeV9kZXRhY2goKSBkb2VzIGFsbCBvZiB0aGUgY2xlYW51cCBiZWxvdyAqL1xuLVx0cGh5X2RldGFjaChwaHlkZXYpO1xuK1x0LyogY2xlYW51cCB3aXRob3V0IGJ1cyBub3RpZmljYXRpb24gKi9cbitcdHBoeV9kZXRhY2hfaW50ZXJuYWwocGh5ZGV2LCBmYWxzZSk7XG4gXHRyZXR1cm4gZXJyO1xuIFxuIGVycm9yX21vZHVsZV9wdXQ6XG5AQCAtMTkwNiw4NiArMjAwMiw2IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIH1cbiBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcbiBcbi0vKipcbi0gKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxuLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuLSAqXG4tICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxuLSAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS5cbi0gKi9cbi12b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldjtcbi1cdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xuLVx0c3RydWN0IG1paV9idXMgKmJ1cztcbi1cbi1cdGlmIChwaHlkZXYtXHUwMDNlZGV2bGluaykge1xuLVx0XHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVx1MDAzZWRldmxpbmspO1xuLVx0XHRwaHlkZXYtXHUwMDNlZGV2bGluayA9IE5VTEw7XG4tXHR9XG4tXG4tXHRpZiAocGh5ZGV2LVx1MDAzZXN5c2ZzX2xpbmtzKSB7XG4tXHRcdGlmIChkZXYpXG4tXHRcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2ZGV2LVx1MDAzZWRldi5rb2JqLCBcInBoeWRldlwiKTtcbi1cdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmtvYmosIFwiYXR0YWNoZWRfZGV2XCIpO1xuLVx0fVxuLVxuLVx0aWYgKCFwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2KVxuLVx0XHRzeXNmc19yZW1vdmVfZmlsZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYua29iaixcbi1cdFx0XHRcdCAgXHUwMDI2ZGV2X2F0dHJfcGh5X3N0YW5kYWxvbmUuYXR0cik7XG4tXG4tXHRwaHlfc3VzcGVuZChwaHlkZXYpO1xuLVx0aWYgKGRldikge1xuLVx0XHRzdHJ1Y3QgaHd0c3RhbXBfcHJvdmlkZXIgKmh3cHJvdjtcbi1cbi1cdFx0LyogaHdwcm92IG1heSB0ZWNobmljYWxseSBiZSBwcm90ZWN0ZWQgYnkgb3BzIGxvY2sgYnV0XG4tXHRcdCAqIG5vdCBmb3IgZGV2aWNlcyB3aXRoIGEgcGh5ZGV2LCBzZWUgcGh5X2xpbmtfdG9wb19hZGRfcGh5KClcbi1cdFx0ICovXG4tXHRcdGh3cHJvdiA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZWh3cHJvdik7XG4tXHRcdC8qIERpc2FibGUgdGltZXN0YW1wIGlmIGl0IGlzIHRoZSBvbmUgc2VsZWN0ZWQgKi9cbi1cdFx0aWYgKGh3cHJvdiBcdTAwMjZcdTAwMjYgaHdwcm92LVx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcbi1cdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZWh3cHJvdiwgTlVMTCk7XG4tXHRcdFx0a2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpO1xuLVx0XHR9XG4tXG4tXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYtXHUwMDNlcGh5ZGV2ID0gTlVMTDtcbi1cdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiA9IE5VTEw7XG4tXHRcdHBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeWRldik7XG4tXHR9XG4tXG4tXHRwaHlkZXYtXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gTlVMTDtcbi1cdHBoeWRldi1cdTAwM2VwaHlsaW5rID0gTlVMTDtcbi1cbi1cdGlmIChwaHlkZXYtXHUwMDNlbWRpby5kZXYuZHJpdmVyKVxuLVx0XHRtb2R1bGVfcHV0KHBoeWRldi1cdTAwM2VtZGlvLmRldi5kcml2ZXItXHUwMDNlb3duZXIpO1xuLVxuLVx0LyogSWYgdGhlIGRldmljZSBoYWQgbm8gc3BlY2lmaWMgZHJpdmVyIGJlZm9yZSAoaS5lLiAtIGl0XG4tXHQgKiB3YXMgdXNpbmcgdGhlIGdlbmVyaWMgZHJpdmVyKSwgd2UgdW5iaW5kIHRoZSBkZXZpY2Vcbi1cdCAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUncyBhIGNoYW5jZSBhXG4tXHQgKiByZWFsIGRyaXZlciBjb3VsZCBiZSBsb2FkZWRcbi1cdCAqL1xuLVx0aWYgKHBoeWRldi1cdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XG4tXHRcdGRldmljZV9yZWxlYXNlX2RyaXZlcihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuLVx0XHRwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XG4tXHR9XG4tXG4tXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuLVx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuLVxuLVx0Lypcbi1cdCAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZFxuLVx0ICogYSB1c2UtYWZ0ZXItZnJlZSBidWcgYnkgcmVhZGluZyB0aGUgdW5kZXJseWluZyBidXMgZmlyc3QuXG4tXHQgKi9cbi1cdGJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbi1cbi1cdHB1dF9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbi1cdGlmIChkZXYpXG4tXHRcdG5kZXZfb3duZXIgPSBkZXYtXHUwMDNlZGV2LnBhcmVudC1cdTAwM2Vkcml2ZXItXHUwMDNlb3duZXI7XG4tXHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4tXHRcdG1vZHVsZV9wdXQoYnVzLVx1MDAzZW93bmVyKTtcbi19XG4tRVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcbi1cbiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggNWY4ZDY1ODY4ZTBmZi4uM2Q4YWZlNmI3ZjFjNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0zNzYsNiArMzc2LDI0IEBAIHN0cnVjdCBtaWlfYnVzIHtcbiBcdFx0XHQgaW50IHJlZ251bSwgdTE2IHZhbCk7XG4gXHQvKiogQHJlc2V0OiBQZXJmb3JtIGEgcmVzZXQgb2YgdGhlIGJ1cyAqL1xuIFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xuK1x0LyoqXG4rXHQgKiBAbm90aWZ5X3BoeV9hdHRhY2g6IFBlcmZvcm0gcG9zdC1hdHRhY2ggaGFuZGxpbmcgZm9yIE1ESU8gYnVzXG4rXHQgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfZGV0YWNoLiBDYWxsZWRcbitcdCAqIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkgcmlnaHQgYmVmb3JlIHBoeV9yZXN1bWUoKS4gUnVucyBpbiBwcm9jZXNzXG4rXHQgKiBjb250ZXh0LCBtYXkgc2xlZXAgYW5kIG1heSBiZSBjYWxsZWQgd2l0aCBSVE5MIGhlbGQuIE11c3Qgbm90XG4rXHQgKiBhY3F1aXJlIG9yIHJlbHkgb24gUlROTC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJybm9cbitcdCAqIG9uIGZhaWx1cmUuIE11c3QgdW53aW5kIGl0cyBvd24gc3RhdGUgb24gZXJyb3IgYXMgYXR0YWNobWVudCBpc1xuK1x0ICogYWJvcnRlZC5cbitcdCAqL1xuK1x0aW50ICgqbm90aWZ5X3BoeV9hdHRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuK1x0LyoqXG4rXHQgKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcbitcdCAqIGRyaXZlcnMuIE9wdGlvbmFsIGFuZCBpbmRlcGVuZGVudCBvZiBAbm90aWZ5X3BoeV9hdHRhY2guIENhbGxlZFxuK1x0ICogaW4gcGh5X2RldGFjaCgpIHJpZ2h0IGFmdGVyIHBoeV9zdXNwZW5kKCkuIFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0LFxuK1x0ICogbWF5IHNsZWVwIGFuZCBtYXkgYmUgY2FsbGVkIHdpdGggUlROTCBoZWxkLiBNdXN0IG5vdCBhY3F1aXJlIG9yXG4rXHQgKiByZWx5IG9uIFJUTkwuXG4rXHQgKi9cbitcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gXG4gXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXG4gXHRzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjIwOjAxLjM4NzE4NDExN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNzA3NjEyNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBSZWFsdGVrIE1ESU8gUGF0Y2ggYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBNRElPIGludGVyZmFjZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIGl0J3MgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4gSXQgbW9kaWZpZXMgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIHRvIGFkZCBzdXBwb3J0IGZvciBSVEw4MzgwL1JUTDgzOTAgYW5kIGltcG9ydGFudGx5LCBpdCB0b3VjaGVzIGBwaHlfZGV2aWNlLmNgIHRvIGFkZCBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIGNhbGxiYWNrcyB0byB0aGUgYG1paV9idXNgIHN0cnVjdHVyZS5cblxuRmlyc3QsIHRoZSBNRElPIGRyaXZlciBpdHNlbGYuIENhbiBJIGdldCB0byBpdCB3aXRoaW4gUUVNVT8gTURJTyBkcml2ZXJzIGFyZSB1c3VhbGx5IHByb2JlZCB2aWEgdGhlIGRldmljZSB0cmVlLCBzbyBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB3aGV0aGVyIEkgY2FuIGxvYWQgdGhlIG1vZHVsZSBhbmQgcHJvYmUgaXQgdXNpbmcgYSBmYWtlIGRldmljZSB0cmVlIG9yIHBsYXRmb3JtIGRldmljZS4gU3l6a2FsbGVyIGNhbiBkbyB0aGlzLCBpbmplY3RpbmcgcGxhdGZvcm0gZGV2aWNlcyBvciBldmVuIHVzaW5nIGRldmljZSB0cmVlIG92ZXJsYXlzLiBIb3dldmVyLCB0aGVyZSdzIGEgcHJvYmxlbTogdGhlIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBkcml2ZXIgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEFoLCB3YWl0LCBpdCBoYXMgYC5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZWAuIFRoaXMgbWVhbnMgSSBjYW4ndCBiaW5kIGl0IHZpYSBzeXNmcy4gU3l6a2FsbGVyIG1pZ2h0IHN0aWxsIGJlIGFibGUgdG8gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMsIGlmIGl0IGtub3dzIGhvdywgYnV0IHByb2JhYmx5IG9ubHkgaWYgaXQgbWF0Y2hlcyB0aGUgZXhhY3QgbmFtZSBvciBPRiBtYXRjaC4gVGhlIHByb2JlIGZ1bmN0aW9uLCBgb3R0b19lbWRpb19wcm9iZWAsIHVzZXMgYG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpYC4gVGhhdCBtZWFucyBpdCBuZWVkcyBhbiBPRiBub2RlLCBhbmQgaWYgaXQncyBwcm9iZWQgd2l0aG91dCBPRiwgYG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YWAgcmV0dXJucyBOVUxMLiBUaGlzIG1ha2VzIGl0IGhhcmRlciB0byB0cmlnZ2VyLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiBTeXprYWxsZXIgY2FuIGNyZWF0ZSBPRiBub2Rlcy4gSXQgc2VlbXMgbGltaXRlZC5cblxuSG93ZXZlciwgdGhlIHJlYWwgbWVhdCBvZiB0aGUgcGF0Y2ggaXMgdGhlIG1vZGlmaWNhdGlvbiBvZiBgcGh5X2RldmljZS5jYCwgd2hpY2ggaXMgY29yZSBQSFkgZnJhbWV3b3JrIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgdG8gYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIGFyZSBjcnVjaWFsLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHdoZW4gYXR0YWNoaW5nIGEgUEhZIHRvIGEgbmV0IGRldmljZSwgc28gYW55IE1ESU8gYnVzIGRyaXZlciAqY291bGQqIHVzZSBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgLiBUaGUgcGF0Y2ggKmFkZHMqIHRoZXNlIGNhbGxiYWNrcyB0byBgc3RydWN0IG1paV9idXNgIGluIGBwaHlfZGV2aWNlLmNgLiBUaGF0IG1ha2VzIHRoaXMgcGFydCBvZiB0aGUgY2hhbmdlIHZlcnkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuXG5cbkkgcXVpY2tseSBjaGVjayB0aGUgY29kZSBmb3IgYHBoeV9kZXRhY2hgIGFuZCBzZWUgaXQncyBjYWxsaW5nIGBwaHlfZGV0YWNoX2ludGVybmFsYC4gVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgUEhZIGZyYW1ld29yaywgYW5kIHRoYXQncyB3b3J0aCBjaGVja2luZy5cblxuTm93LCB0byBzZWUgd2hhdCB0byBlbmFibGUuIFRoZSBjb25maWcgZm9yIHRoZSBSZWFsdGVrIE1ESU8gZHJpdmVyIGlzIGBNRElPX1JFQUxURUtfUlRMOTMwMGAuIEFuZCwgb2YgY291cnNlLCBgUEhZTElCYCBpcyBuZWVkZWQuIEkgY29uZmlybSB0aGF0IGBwaHlfYXR0YWNoX2RpcmVjdGAgaXMgZXhwb3J0ZWQgdXNpbmcgdGhlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBmaW5kIGBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtgIGluIHRoZSBkaWZmLlxuXG5UaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHdoZXRoZXIgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gSSBuZWVkLiBJJ20gZm9jdXNpbmcgb24gdGhlIFBIWSBmcmFtZXdvcmsgY2hhbmdlcywgYW5kIHRoZXkncmUgY29udHJvbGxlZCBieSBgQ09ORklHX1BIWUxJQmAuIEkgd2FudCB0byBsaXN0IHRoZSBmb2N1cyBzeW1ib2xzLiBUaG9zZSBhcmUgYHBoeV9hdHRhY2hfZGlyZWN0YCwgYHBoeV9kZXRhY2hgLCBgcGh5X2RldGFjaF9pbnRlcm5hbGAsIGBvdHRvX2VtZGlvX3Byb2JlYCwgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2hgLCBhbmQgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2hgLiBTaW5jZSBgb3R0b19lbWRpb19wcm9iZWAgbWlnaHQgbm90IGJlIHJlYWNoYWJsZSB3aXRob3V0IE9GLCBJIHdvbid0IGZvY3VzIG9uIHRoYXQgb25lLCBidXQgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgcGFydCBvZiB0aGUgY29yZSBQSFkgZnJhbWV3b3JrLiBTbywgSSB3aWxsIGluY2x1ZGUgdGhvc2UuXG5cbkkgY2hlY2sgaWYgYHBoeV9kZXRhY2hfaW50ZXJuYWxgIGlzIHN0YXRpYywgd2hpY2ggaXQgaXMuIEFuZCBJIHNlZSB0aGF0IHRoZSBwcm9tcHQgc2F5cyB0byBwcmVmZXIgbm9uLXN0YXRpYyBBUEkgZW50cnlwb2ludHMuIFNvLCBJIHByb2JhYmx5IHNob3VsZG4ndCBpbmNsdWRlIHRoYXQgb25lIGluIGBGb2N1c1N5bWJvbHNgLCBhcyB0aGUgZnV6eiBlbmdpbmUgd2lsbCBsaWtlbHkgdHJ5IGBwaHlfZGV0YWNoYCBpbnN0ZWFkLiBUaG91Z2ggYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2hgIGlzIHN0YXRpYywgaXQgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBhbmQgaXMgY2FsbGVkIGluZGlyZWN0bHkuXG5cblNvLCBpcyBgTURJT19SRUFMVEVLX1JUTDkzMDBgIHdvcnRoIGVuYWJsaW5nPyBJIHNlZSBpdCBjYW4gYmUgZW5hYmxlZCB3aXRoIGBDT01QSUxFX1RFU1RgLCBzbyB5ZXMuIEkgdmVyaWZ5IGluIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIHRoYXQgaXQgY2FuIGJlIGVuYWJsZWQuIFRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlncyB0byB3b3JyeSBhYm91dCwgYW5kIGBDT05GSUdfUEhZTElCYCBpcyB1c3VhbGx5IGVuYWJsZWQgaW4gU3l6a2FsbGVyIGFueXdheS5cblxuRmluYWxseSwgSSByZXZpZXcgdGhlIGNoYW5nZXMgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIGFnYWluLiBUaGUgcmVmYWN0b3Jpbmcgb2YgYHBoeV9kZXRhY2hgIHRvIGBwaHlfZGV0YWNoX2ludGVybmFsYCBpcyB0aGVyZSB0byBhbGxvdyBjYWxsaW5nIGl0IHdpdGhvdXQgbm90aWZ5aW5nIHRoZSBidXNcblxuIiwiSW5wdXRUb2tlbnMiOjE1MDMyLCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMDoyNS4wOTQ3OTg1MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mjg5NTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURJT19SRUFMVEVLX1JUTDkzMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfYXR0YWNoX2RpcmVjdFwiLFxuICAgIFwicGh5X2RldGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIGluIHRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgKGBzdHJ1Y3QgbWlpX2J1c2ApIGFuZCBtb2RpZmllcyBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgdG8gdXNlIHRoZW0uIEl0IGFsc28gYWRkcyBzdXBwb3J0IGZvciBSVEw4MzgwL1JUTDgzOTAgdG8gdGhlIFJlYWx0ZWsgTURJTyBkcml2ZXIgd2hpY2ggaW1wbGVtZW50cyB0aGVzZSBjYWxsYmFja3MuIFRoZSBjb3JlIFBIWSBmcmFtZXdvcmsgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1ESU9fUkVBTFRFS19SVEw5MzAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGh5X2F0dGFjaF9kaXJlY3RcIixcbiAgICBcInBoeV9kZXRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIGNhbGxiYWNrcyBpbiB0aGUgY29yZSBQSFkgZnJhbWV3b3JrIChgc3RydWN0IG1paV9idXNgKSBhbmQgbW9kaWZpZXMgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIHRvIHVzZSB0aGVtLiBJdCBhbHNvIGFkZHMgc3VwcG9ydCBmb3IgUlRMODM4MC9SVEw4MzkwIHRvIHRoZSBSZWFsdGVrIE1ESU8gZHJpdmVyIHdoaWNoIGltcGxlbWVudHMgdGhlc2UgY2FsbGJhY2tzLiBUaGUgY29yZSBQSFkgZnJhbWV3b3JrIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4pnp[1] Phase: Succeeded StartedAt: 2026-08-03 20:20:55 +0000 UTC FinishedAt: 2026-08-03 20:20:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 20:20:55 +0000 UTC FinishedAt: 2026-08-03 20:20:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2] Phase: Succeeded StartedAt: 2026-08-03 20:20:55 +0000 UTC FinishedAt: 2026-08-03 22:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-03 20:20:55 +0000 UTC FinishedAt: 2026-08-03 22:05:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 20:20:55 +0000 UTC FinishedAt: 2026-08-03 20:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 20:20:55 +0000 UTC FinishedAt: 2026-08-03 20:21:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowv4pnp/series-workflowv4pnp-convert-artifact-573804676/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 20:21:28 +0000 UTC FinishedAt: 2026-08-03 20:42:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 20:21:28 +0000 UTC FinishedAt: 2026-08-03 20:42:31 +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:*97d788fe-2196-4266-8352-9167ee6a15e1,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-workflowv4pnp/series-workflowv4pnp-convert-artifact-573804676/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": "042a25fd-1848-4d1b-a029-1b2a764e74d9", "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-workflowv4pnp/series-workflowv4pnp-build-action-758601154/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 20:21:28 +0000 UTC FinishedAt: 2026-08-03 20:42:21 +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:*97d788fe-2196-4266-8352-9167ee6a15e1,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-workflowv4pnp/series-workflowv4pnp-convert-artifact-573804676/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": "042a25fd-1848-4d1b-a029-1b2a764e74d9", "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-workflowv4pnp/series-workflowv4pnp-build-action-758601154/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 20:42:31 +0000 UTC FinishedAt: 2026-08-03 20:42:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 20:42:31 +0000 UTC FinishedAt: 2026-08-03 20:42:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 20:42:31 +0000 UTC FinishedAt: 2026-08-03 20:42:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 20:42:31 +0000 UTC FinishedAt: 2026-08-03 20:42:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowv4pnp/series-workflowv4pnp-convert-artifact-2336739075/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 20:42:41 +0000 UTC FinishedAt: 2026-08-03 20:44:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 20:42:41 +0000 UTC FinishedAt: 2026-08-03 20:44:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*042a25fd-1848-4d1b-a029-1b2a764e74d9,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-workflowv4pnp/series-workflowv4pnp-build-action-758601154/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-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-03 20:44:50 +0000 UTC FinishedAt: 2026-08-03 20:44:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-03 20:44:50 +0000 UTC FinishedAt: 2026-08-03 20:44:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-03 20:44:50 +0000 UTC FinishedAt: 2026-08-03 21:13:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-03 20:44:50 +0000 UTC FinishedAt: 2026-08-03 21:13:01 +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:*97d788fe-2196-4266-8352-9167ee6a15e1,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-workflowv4pnp/series-workflowv4pnp-convert-artifact-2336739075/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": "c5a8c1d3-c637-41ab-afa3-6ad2012d4a17", "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-workflowv4pnp/series-workflowv4pnp-build-action-2537061815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-03 20:44:50 +0000 UTC FinishedAt: 2026-08-03 21:12:38 +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:*97d788fe-2196-4266-8352-9167ee6a15e1,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-workflowv4pnp/series-workflowv4pnp-convert-artifact-2336739075/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": "c5a8c1d3-c637-41ab-afa3-6ad2012d4a17", "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-workflowv4pnp/series-workflowv4pnp-build-action-2537061815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-03 21:13:01 +0000 UTC FinishedAt: 2026-08-03 21:13:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-03 21:13:01 +0000 UTC FinishedAt: 2026-08-03 21:13:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-03 21:13:01 +0000 UTC FinishedAt: 2026-08-03 21:15:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-03 21:13:01 +0000 UTC FinishedAt: 2026-08-03 21:14:54 +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:*c5a8c1d3-c637-41ab-afa3-6ad2012d4a17,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-workflowv4pnp/series-workflowv4pnp-build-action-2537061815/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-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-03 21:15:04 +0000 UTC FinishedAt: 2026-08-03 22:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-03 21:15:04 +0000 UTC FinishedAt: 2026-08-03 22:05:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"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:*042a25fd-1848-4d1b-a029-1b2a764e74d9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c5a8c1d3-c637-41ab-afa3-6ad2012d4a17,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-workflowv4pnp/series-workflowv4pnp-build-action-758601154/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-workflowv4pnp/series-workflowv4pnp-build-action-2537061815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-03 21:15:04 +0000 UTC FinishedAt: 2026-08-03 21:15:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-03 21:15:04 +0000 UTC FinishedAt: 2026-08-03 21:15:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"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-workflowv4pnp/series-workflowv4pnp-convert-artifact-2130156060/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-03 21:15:04 +0000 UTC FinishedAt: 2026-08-03 21:15:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-03 21:15:04 +0000 UTC FinishedAt: 2026-08-03 21:15:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-03 21:15:04 +0000 UTC FinishedAt: 2026-08-03 21:15:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-03 21:15:14 +0000 UTC FinishedAt: 2026-08-03 22:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4pnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"81e29a5d-da23-4a33-9c6b-8605cc19faf9","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-03 21:15:14 +0000 UTC FinishedAt: 2026-08-03 22:05:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*042a25fd-1848-4d1b-a029-1b2a764e74d9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c5a8c1d3-c637-41ab-afa3-6ad2012d4a17,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-workflowv4pnp/series-workflowv4pnp-build-action-758601154/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-workflowv4pnp/series-workflowv4pnp-build-action-2537061815/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-workflowv4pnp/series-workflowv4pnp-convert-artifact-2130156060/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,}