Name: series-workflowb7qzm Phase: Succeeded StartedAt: 2026-07-02 15:52:24 +0000 UTC FinishedAt: 2026-07-02 17:55:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[0] Phase: Succeeded StartedAt: 2026-07-02 15:52:24 +0000 UTC FinishedAt: 2026-07-02 16:03:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 15:52:24 +0000 UTC FinishedAt: 2026-07-02 16:03:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1c664ec4b9ea827b609d296921ed5bad8a40a158", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1c664ec4b9ea827b609d296921ed5bad8a40a158", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC" ], "series_id": "4971cf77-1ce6-4ba7-9101-201bc51c6d0f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netconsole_skb_pool_init", "netconsole_skb_pool_flush", "refill_skbs", "netcons_skb_pop", "find_skb", "netpoll_send_udp", "enabled_store", "drop_netconsole_target", "alloc_param_target", "free_param_target", "netconsole_parser_cmdline", "__netpoll_setup", "netpoll_setup", "__netpoll_cleanup" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0Y29uc29sZV9za2JfcG9vbF9pbml0JiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gmIzM0OywKICAgICYjMzQ7cmVmaWxsX3NrYnMmIzM0OywKICAgICYjMzQ7bmV0Y29uc19za2JfcG9wJiMzNDssCiAgICAmIzM0O2ZpbmRfc2tiJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtkcm9wX25ldGNvbnNvbGVfdGFyZ2V0JiMzNDssCiAgICAmIzM0O2FsbG9jX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtmcmVlX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lJiMzNDssCiAgICAmIzM0O19fbmV0cG9sbF9zZXR1cCYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O19fbmV0cG9sbF9jbGVhbnVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBTS0IgcG9vbCBhbmQgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gKHBvcnRzLCBNQUMpIGZyb20gYHN0cnVjdCBuZXRwb2xsYCB0byBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YC4gSXQgbW9kaWZpZXMgaG93IG5ldGNvbnNvbGUgaW5pdGlhbGl6ZXMgYW5kIGZsdXNoZXMgdGhlIFNLQiBwb29sLCBhbmQgdXBkYXRlcyB0aGUgbmV0cG9sbCBzZXR1cC9jbGVhbnVwIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGFuZCBuZXRwb2xsIGNvcmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdkNmJmODQwYmY3NDhiYjRlMmMxYmVjOTQyMGUwNjMyNjVkODRlMDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE2OjAwOjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuaW5kZXggYzE4MTJhOTgzNjViNzguLmUzNmIwOTk4YzgxMDk2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbkBAIC02MSw2ICYjNDM7NjEsMTkgQEAgTU9EVUxFX0lNUE9SVF9OUyhcJiMzNDtORVRERVZfSU5URVJOQUxcJiMzNDspO1xuICNkZWZpbmUgTUFYX1VTRVJEQVRBX0lURU1TXHRcdDI1NlxuICNkZWZpbmUgTUFYX1BSSU5UX0NIVU5LXHRcdFx0MTAwMFxuIFxuJiM0MzsvKlxuJiM0MzsgKiBTaXppbmcgZm9yIHRoZSBwZXItdGFyZ2V0IGZhbGxiYWNrIHNrYiBwb29sIGNvbnN1bHRlZCBieSBmaW5kX3NrYigpXG4mIzQzOyAqIHdoZW4gaXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscyBzbyBtZXNzYWdlcyBzdGlsbCBnZXQgb3V0IHVuZGVyXG4mIzQzOyAqIG1lbW9yeSBwcmVzc3VyZS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgTUFYX1VEUF9DSFVOS1x0XHRcdDE0NjBcbiYjNDM7I2RlZmluZSBNQVhfU0tCU1x0XHRcdDMyXG4mIzQzOyNkZWZpbmUgTUFYX1NLQl9TSVpFXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdChzaXplb2Yoc3RydWN0IGV0aGhkcikgJiM0MztcdFx0XHRcdFx0XFxcbiYjNDM7XHQgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MztcdFx0XHRcdFx0XHRcXFxuJiM0MztcdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MztcdFx0XHRcdFx0XFxcbiYjNDM7XHQgTUFYX1VEUF9DSFVOSylcbiYjNDM7XG4gc3RhdGljIGNoYXIgY29uZmlnW01BWF9QQVJBTV9MRU5HVEhdO1xuIG1vZHVsZV9wYXJhbV9zdHJpbmcobmV0Y29uc29sZSwgY29uZmlnLCBNQVhfUEFSQU1fTEVOR1RILCAwKTtcbiBNT0RVTEVfUEFSTV9ERVNDKG5ldGNvbnNvbGUsIFwmIzM0OyBuZXRjb25zb2xlPVtzcmMtcG9ydF1AW3NyYy1pcF0vW2Rldl0sW3RndC1wb3J0XUBcdTAwM2N0Z3QtaXBcdTAwM2UvW3RndC1tYWNhZGRyXVwmIzM0Oyk7XG5AQCAtMTYyLDE0ICYjNDM7MTc1LDE5IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcbiAgKiBAbnA6XHRcdFRoZSBuZXRwb2xsIHN0cnVjdHVyZSBmb3IgdGhpcyB0YXJnZXQuXG4gICpcdFx0Q29udGFpbnMgdGhlIG90aGVyIHVzZXJzcGFjZSB2aXNpYmxlIHBhcmFtZXRlcnM6XG4gICpcdFx0ZGV2X25hbWVcdChyZWFkLXdyaXRlKVxuLSAqXHRcdGxvY2FsX3BvcnRcdChyZWFkLXdyaXRlKVxuLSAqXHRcdHJlbW90ZV9wb3J0XHQocmVhZC13cml0ZSlcbiAgKlx0XHRsb2NhbF9pcFx0KHJlYWQtd3JpdGUpXG4gICpcdFx0cmVtb3RlX2lwXHQocmVhZC13cml0ZSlcbiAgKlx0XHRsb2NhbF9tYWNcdChyZWFkLW9ubHkpXG4tICpcdFx0cmVtb3RlX21hY1x0KHJlYWQtd3JpdGUpXG4mIzQzOyAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuJiM0MzsgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuJiM0MzsgKiBAcmVtb3RlX21hYzpcdERlc3RpbmF0aW9uIGV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQGJ1ZjpcdFRoZSBidWZmZXIgdXNlZCB0byBzZW5kIHRoZSBmdWxsIG1zZyB0byB0aGUgbmV0d29yayBzdGFja1xuICAqIEByZXN1bWVfd3E6XHRXb3JrcXVldWUgdG8gcmVzdW1lIGRlYWN0aXZhdGVkIHRhcmdldFxuJiM0MzsgKiBAc2tiX3Bvb2w6XHRQZXItdGFyZ2V0IGZhbGxiYWNrIHNrYiBwb29sIGNvbnN1bHRlZCBieSBmaW5kX3NrYigpIHdoZW5cbiYjNDM7ICpcdFx0aXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscy4gTGlmZXRpbWUgYnJhY2tldHMgYVxuJiM0MzsgKlx0XHRzdWNjZXNzZnVsIG5ldHBvbGxfc2V0dXAoKSAvIG5ldHBvbGxfY2xlYW51cCgpIHBhaXIgb24gQG5wLlxuJiM0MzsgKiBAcmVmaWxsX3dxOlx0V29yayBpdGVtIHRoYXQgYXN5bmNocm9ub3VzbHkgdG9wcyBAc2tiX3Bvb2wgYmFjayB1cCB0b1xuJiM0MzsgKlx0XHRNQVhfU0tCUyBhZnRlciBmaW5kX3NrYigpIGRyYWlucyBhbiBlbnRyeS5cbiAgKi9cbiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbkBAIC0xOTAsMTEgJiM0MzsyMDgsMTUgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdGJvb2xcdFx0XHRleHRlbmRlZDtcbiBcdGJvb2xcdFx0XHRyZWxlYXNlO1xuIFx0c3RydWN0IG5ldHBvbGxcdFx0bnA7XG4mIzQzO1x0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4mIzQzO1x0dThcdFx0XHRyZW1vdGVfbWFjW0VUSF9BTEVOXTtcbiBcdC8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyAmIzQzOzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzXG4gXHQgKiBOVUwgdGVybWluYXRvciBzbyBhIGZ1bGwgTUFYX1BSSU5UX0NIVU5LIHBheWxvYWQgaXMgbm90IHRydW5jYXRlZFxuIFx0ICovXG4gXHRjaGFyXHRcdFx0YnVmW01BWF9QUklOVF9DSFVOSyAmIzQzOyAxXTtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdFx0cmVzdW1lX3dxO1xuJiM0MztcdHN0cnVjdCBza19idWZmX2hlYWRcdHNrYl9wb29sO1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdFx0cmVmaWxsX3dxO1xuIH07XG4gXG4gI2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5AQCAtMjkyLDExICYjNDM7MzE0LDU4IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNfcmVsZWFzZV9kZXYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdFx0bWVtc2V0KFx1MDAyNm50LVx1MDAzZW5wLmRldl9uYW1lLCAwLCBJRk5BTVNJWik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCByZWZpbGxfc2ticyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmZfaGVhZCAqc2tiX3Bvb2wgPSBcdTAwMjZudC1cdTAwM2Vza2JfcG9vbDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoUkVBRF9PTkNFKHNrYl9wb29sLVx1MDAzZXFsZW4pIFx1MDAzYyBNQVhfU0tCUykge1xuJiM0MztcdFx0c2tiID0gYWxsb2Nfc2tiKE1BWF9TS0JfU0laRSwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4mIzQzO1x0XHRpZiAoIXNrYilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0c2tiX3F1ZXVlX3RhaWwoc2tiX3Bvb2wsIHNrYik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9XG4mIzQzO1x0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0LCByZWZpbGxfd3EpO1xuJiM0MztcbiYjNDM7XHRyZWZpbGxfc2ticyhudCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEluaXRpYWxpc2UgdGhlIHBlci10YXJnZXQgc2tiIHBvb2wgdGhhdCBmaW5kX3NrYigpIGZhbGxzIGJhY2sgdG8gYW5kXG4mIzQzOyAqIHNlZWQgaXQuIFBhaXIgd2l0aCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkgYXQgdGhlIG1hdGNoaW5nXG4mIzQzOyAqIG5ldHBvbGwgdGVhcmRvd24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiYjNDM7e1xuJiM0MztcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bnQtXHUwMDNlc2tiX3Bvb2wpO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZudC1cdTAwM2VyZWZpbGxfd3EsIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcik7XG4mIzQzO1x0cmVmaWxsX3NrYnMobnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4mIzQzO3tcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm50LVx1MDAzZXJlZmlsbF93cSk7XG4mIzQzO1x0c2tiX3F1ZXVlX3B1cmdlX3JlYXNvbihcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCwgU0tCX0NPTlNVTUVEKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBBdHRlbXB0cyB0byByZXN1bWUgbG9nZ2luZyB0byBhIGRlYWN0aXZhdGVkIHRhcmdldC4gKi9cbiBzdGF0aWMgdm9pZCByZXN1bWVfdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4ge1xuJiM0MztcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgbWFrZXMgbnQtXHUwMDNlbnAuZGV2XG4mIzQzO1x0ICogdmlzaWJsZSB0byB0YXJnZXRfbGlzdCB3YWxrZXJzIChlLmcuIG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSxcbiYjNDM7XHQgKiB3aGljaCBvdGhlcndpc2UgbWF5IG1vdmUgdGhlIHRhcmdldCB0byB0aGUgY2xlYW51cCBsaXN0IGFuZFxuJiM0MztcdCAqIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcbiYjNDM7XG4gXHRpZiAobmV0cG9sbF9zZXR1cChcdTAwMjZudC1cdTAwM2VucCkpIHtcbiBcdFx0LyogbmV0cG9sbCBmYWlscyBzZXR1cCBvbmNlLCBkbyBub3QgdHJ5IGFnYWluLiAqL1xuJiM0MztcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XG4gXHRcdHJldHVybjtcbiBcdH1cbkBAIC0zNTgsNiAmIzQzOzQyNyw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRydG5sX2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEIFx1MDAyNlx1MDAyNiBudC1cdTAwM2VucC5kZXYgXHUwMDI2XHUwMDI2XG4gXHQgICAgbnQtXHUwMDNlbnAuZGV2LVx1MDAzZXJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkge1xuJiM0MztcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG5ldGNvbnNfcmVsZWFzZV9kZXYobnQpO1xuIFx0XHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xuIFx0fVxuQEAgLTM5Myw5ICYjNDM7NDYzLDkgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcbiBcbiBcdG50LVx1MDAzZW5wLm5hbWUgPSBcJiMzNDtuZXRjb25zb2xlXCYjMzQ7O1xuIFx0c3Ryc2NweShudC1cdTAwM2VucC5kZXZfbmFtZSwgXCYjMzQ7ZXRoMFwmIzM0OywgSUZOQU1TSVopO1xuLVx0bnQtXHUwMDNlbnAubG9jYWxfcG9ydCA9IDY2NjU7XG4tXHRudC1cdTAwM2VucC5yZW1vdGVfcG9ydCA9IDY2NjY7XG4tXHRldGhfYnJvYWRjYXN0X2FkZHIobnQtXHUwMDNlbnAucmVtb3RlX21hYyk7XG4mIzQzO1x0bnQtXHUwMDNlbG9jYWxfcG9ydCA9IDY2NjU7XG4mIzQzO1x0bnQtXHUwMDNlcmVtb3RlX3BvcnQgPSA2NjY2O1xuJiM0MztcdGV0aF9icm9hZGNhc3RfYWRkcihudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiBcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XG4gXHRJTklUX1dPUksoXHUwMDI2bnQtXHUwMDNlcmVzdW1lX3dxLCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQpO1xuIFxuQEAgLTQxNyw2ICYjNDM7NDg3LDcgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShudCwgdG1wLCBcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0LCBsaXN0KSB7XG4gXHRcdC8qIGFsbCBlbnRyaWVzIGluIHRoZSBjbGVhbnVwX2xpc3QgbmVlZHMgdG8gYmUgZGlzYWJsZWQgKi9cbiBcdFx0V0FSTl9PTl9PTkNFKG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpO1xuJiM0MztcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG5ldGNvbnNfcmVsZWFzZV9kZXYobnQpO1xuIFx0XHQvKiBtb3ZlZCB0aGUgY2xlYW5lZCB0YXJnZXQgdG8gdGFyZ2V0X2xpc3QuIE5lZWQgdG8gaG9sZCBib3RoXG4gXHRcdCAqIGxvY2tzXG5AQCAtNDI5LDIxICYjNDM7NTAwLDIzIEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKHZvaWQpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldHBvbGwgKm5wKVxuJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbi1cdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIHBvcnQgJWRcXG5cJiMzNDssIG5wLVx1MDAzZWxvY2FsX3BvcnQpO1xuJiM0MztcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuJiM0MztcbiYjNDM7XHRucF9pbmZvKG5wLCBcJiMzNDtsb2NhbCBwb3J0ICVkXFxuXCYjMzQ7LCBudC1cdTAwM2Vsb2NhbF9wb3J0KTtcbiBcdGlmIChucC1cdTAwM2VpcHY2KVxuIFx0XHRucF9pbmZvKG5wLCBcJiMzNDtsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcXG5cJiMzNDssIFx1MDAyNm5wLVx1MDAzZWxvY2FsX2lwLmluNik7XG4gXHRlbHNlXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZucC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXHRucF9pbmZvKG5wLCBcJiMzNDtpbnRlcmZhY2UgbmFtZSAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG5wLVx1MDAzZWRldl9uYW1lKTtcbiBcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIGV0aGVybmV0IGFkZHJlc3MgJiMzOTslcE0mIzM5O1xcblwmIzM0OywgbnAtXHUwMDNlZGV2X21hYyk7XG4tXHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgcG9ydCAlZFxcblwmIzM0OywgbnAtXHUwMDNlcmVtb3RlX3BvcnQpO1xuJiM0MztcdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBwb3J0ICVkXFxuXCYjMzQ7LCBudC1cdTAwM2VyZW1vdGVfcG9ydCk7XG4gXHRpZiAobnAtXHUwMDNlaXB2NilcbiBcdFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwmIzM0OywgXHUwMDI2bnAtXHUwMDNlcmVtb3RlX2lwLmluNik7XG4gXHRlbHNlXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBJUHY0IGFkZHJlc3MgJXBJNFxcblwmIzM0OywgXHUwMDI2bnAtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbi1cdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxcblwmIzM0OywgbnAtXHUwMDNlcmVtb3RlX21hYyk7XG4mIzQzO1x0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCYjMzQ7LCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiB9XG4gXG4gLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzXG5AQCAtNTYxLDEyICYjNDM7NjM0LDEyIEBAIHN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4gXG4gc3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWRcXG5cJiMzNDssIHRvX3RhcmdldChpdGVtKS1cdTAwM2VucC5sb2NhbF9wb3J0KTtcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCB0b190YXJnZXQoaXRlbSktXHUwMDNlbG9jYWxfcG9ydCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuLVx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslZFxcblwmIzM0OywgdG9fdGFyZ2V0KGl0ZW0pLVx1MDAzZW5wLnJlbW90ZV9wb3J0KTtcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCB0b190YXJnZXQoaXRlbSktXHUwMDNlcmVtb3RlX3BvcnQpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuQEAgLTU5OSw3ICYjNDM7NjcyLDcgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBNXFxuXCYjMzQ7LCB0b190YXJnZXQoaXRlbSktXHUwMDNlbnAucmVtb3RlX21hYyk7XG4mIzQzO1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcE1cXG5cJiMzNDssIHRvX3RhcmdldChpdGVtKS1cdTAwM2VyZW1vdGVfbWFjKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfZXJyb3JzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5AQCAtNzU2LDExICYjNDM7ODI5LDIxIEBAIHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIFx0XHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXG4gXHRcdCAqIGFscmVhZHkgY29uZmlndXJlZCB2aWEgY29uZmlnZnMuIEp1c3QgcHJpbnQgdGhlbSBvdXQuXG4gXHRcdCAqL1xuLVx0XHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihcdTAwMjZudC1cdTAwM2VucCk7XG4mIzQzO1x0XHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihudCk7XG4mIzQzO1xuJiM0MztcdFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbFxuJiM0MztcdFx0ICogaXMgdmFsaWQgYXMgc29vbiBhcyBudC1cdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlIHRvXG4mIzQzO1x0XHQgKiB0YXJnZXRfbGlzdCB3YWxrZXJzIChuZXRjb25zb2xlX25ldGRldl9ldmVudCksIHdoaWNoIHdvdWxkXG4mIzQzO1x0XHQgKiBvdGhlcndpc2UgY2FsbCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkgb24gdW5pbml0aWFsaXNlZFxuJiM0MztcdFx0ICogc3RhdGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XG4gXG4gXHRcdHJldCA9IG5ldHBvbGxfc2V0dXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuLVx0XHRpZiAocmV0KVxuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRU5BQkxFRDtcbiBcdFx0cHJfaW5mbyhcJiMzNDtuZXR3b3JrIGxvZ2dpbmcgc3RhcnRlZFxcblwmIzM0Oyk7XG5AQCAtODg1LDcgJiM0Mzs5NjgsNyBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXHUwMDI2bnQtXHUwMDNlbnAubG9jYWxfcG9ydCk7XG4mIzQzO1x0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFx1MDAyNm50LVx1MDAzZWxvY2FsX3BvcnQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0cmV0ID0gY291bnQ7XG5AQCAtOTA3LDcgJiM0Mzs5OTAsNyBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdHJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCBcdTAwMjZudC1cdTAwM2VucC5yZW1vdGVfcG9ydCk7XG4mIzQzO1x0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdHJldCA9IGNvdW50O1xuQEAgLTk5NCw3ICYjNDM7MTA3Nyw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdGlmIChidWZbTUFDX0FERFJfU1RSX0xFTl0gXHUwMDI2XHUwMDI2IGJ1ZltNQUNfQUREUl9TVFJfTEVOXSAhPSAmIzM5O1xcbiYjMzk7KVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRtZW1jcHkobnQtXHUwMDNlbnAucmVtb3RlX21hYywgcmVtb3RlX21hYywgRVRIX0FMRU4pO1xuJiM0MztcdG1lbWNweShudC1cdTAwM2VyZW1vdGVfbWFjLCByZW1vdGVfbWFjLCBFVEhfQUxFTik7XG4gXG4gXHRyZXQgPSBjb3VudDtcbiBvdXRfdW5sb2NrOlxuQEAgLTE1MTQsOCAmIzQzOzE1OTcsMTAgQEAgc3RhdGljIHZvaWQgZHJvcF9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbiBcdCAqIG5ldHBvbGxfY2xlYW51cCgpIGlzIGlkZW1wb3RlbnQgKGl0IHNraXBzIHdoZW4gbnAtXHUwMDNlZGV2IGlzIE5VTEwpLCBzb1xuIFx0ICogaXQgaXMgc2FmZSBldmVuIGlmIHRoZSBjbGVhbnVwIHdvcmtlciBhbHJlYWR5IHRvcmUgdGhlIG5ldHBvbGwgZG93bi5cbiBcdCAqL1xuLVx0aWYgKG5lZWRzX2NsZWFudXApXG4mIzQzO1x0aWYgKG5lZWRzX2NsZWFudXApIHtcbiYjNDM7XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIFx0XHRuZXRwb2xsX2NsZWFudXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuJiM0MztcdH1cbiBcbiBcdGNvbmZpZ19pdGVtX3B1dChcdTAwMjZudC1cdTAwM2Vncm91cC5jZ19pdGVtKTtcbiB9XG5AQCAtMTcwNiw3ICYjNDM7MTc5MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XG4gICogcG9vbCBsb2NrcyBhbmQgaXMgdGhlcmVmb3JlIG5vdCBOTUktc2FmZS4gU2tpcCB0aGUgcmVmaWxsIHdoZW4gY2FsbGVkXG4gICogZnJvbSBOTUkgY29udGV4dDsgdGhlIG5leHQgbm9uLU5NSSBjYWxsZXIgd2lsbCB0b3AgdGhlIHBvb2wgYmFjayB1cC5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y29uc19za2JfcG9wKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4pXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbkBAIC0xNzE4LDE5ICYjNDM7MTgwMywyMSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXG4gXHRcdGlmICghaW5fbm1pKCkpXG4gXHRcdFx0bmV0X3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7bmV0Y29uc29sZTogZHJvcHBpbmcgbWVzc2FnZSwgcmVxdWVzdGVkIHNrYiBsZW4gJWQgZXhjZWVkcyBwb29sIGJ1ZmZlciBzaXplICV6dSBvbiAlc1xcblwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgICBsZW4sIChzaXplX3QpTUFYX1NLQl9TSVpFLFxuLVx0XHRcdFx0XHQgICAgIG5wLVx1MDAzZWRldi1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgbnQtXHUwMDNlbnAuZGV2LVx1MDAzZW5hbWUpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNm5wLVx1MDAzZXNrYl9wb29sKTtcbiYjNDM7XHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4gXHRpZiAoIWluX25taSgpKVxuLVx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNm5wLVx1MDAzZXJlZmlsbF93cSk7XG4mIzQzO1x0XHRzY2hlZHVsZV93b3JrKFx1MDAyNm50LVx1MDAzZXJlZmlsbF93cSk7XG4gXG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgaW50IGxlbiwgaW50IHJlc2VydmUpXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbixcbiYjNDM7XHRcdFx0XHRpbnQgcmVzZXJ2ZSlcbiB7XG4mIzQzO1x0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXHRpbnQgY291bnQgPSAwO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbkBAIC0xNzM5LDcgJiM0MzsxODI2LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4sIGludCByZXNlcnZlKVxuIFxuIFx0c2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4gXHRpZiAoIXNrYilcbi1cdFx0c2tiID0gbmV0Y29uc19za2JfcG9wKG5wLCBsZW4pO1xuJiM0MztcdFx0c2tiID0gbmV0Y29uc19za2JfcG9wKG50LCBsZW4pO1xuIFxuIFx0aWYgKCFza2IpIHtcbiBcdFx0aWYgKCYjNDM7JiM0Mztjb3VudCBcdTAwM2MgMTApIHtcbkBAIC0xNzc5LDggJiM0MzsxODY2LDkgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiYjNDM7c3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiB7XG4mIzQzO1x0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXHRzdHJ1Y3QgdWRwaGRyICp1ZHBoO1xuIFx0aW50IHVkcF9sZW47XG4gXG5AQCAtMTc5MCwyMSAmIzQzOzE4NzgsMjIgQEAgc3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuIFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcbiBcdHVkcGggPSB1ZHBfaGRyKHNrYik7XG4tXHR1ZHBoLVx1MDAzZXNvdXJjZSA9IGh0b25zKG5wLVx1MDAzZWxvY2FsX3BvcnQpO1xuLVx0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMobnAtXHUwMDNlcmVtb3RlX3BvcnQpO1xuJiM0MztcdHVkcGgtXHUwMDNlc291cmNlID0gaHRvbnMobnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4mIzQzO1x0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMobnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuIFx0dWRwaC1cdTAwM2VsZW4gPSBodG9ucyh1ZHBfbGVuKTtcbiBcbiBcdG5ldHBvbGxfdWRwX2NoZWNrc3VtKG5wLCBza2IsIGxlbik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7c3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4mIzQzO1x0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXHRzdHJ1Y3QgZXRoaGRyICpldGg7XG4gXG4gXHRldGggPSBza2JfcHVzaChza2IsIEVUSF9ITEVOKTtcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfc291cmNlLCBucC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuLVx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX2Rlc3QsIG5wLVx1MDAzZXJlbW90ZV9tYWMpO1xuJiM0MztcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9kZXN0LCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiBcdGlmIChucC1cdTAwM2VpcHY2KVxuIFx0XHRldGgtXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIFx0ZWxzZVxuQEAgLTE4NjEsOCAmIzQzOzE5NTAsMTAgQEAgc3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4mIzQzO3N0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4mIzQzO1x0XHRcdCAgICBpbnQgbGVuKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGludCB0b3RhbF9sZW4sIGlwX2xlbiwgdWRwX2xlbjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG5AQCAtMTg3Nyw3ICYjNDM7MTk2OCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbiBcbiBcdHRvdGFsX2xlbiA9IGlwX2xlbiAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShucC1cdTAwM2VkZXYpO1xuIFxuLVx0c2tiID0gZmluZF9za2IobnAsIHRvdGFsX2xlbiAmIzQzOyBucC1cdTAwM2VkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tLFxuJiM0MztcdHNrYiA9IGZpbmRfc2tiKG50LCB0b3RhbF9sZW4gJiM0MzsgbnAtXHUwMDNlZGV2LVx1MDAzZW5lZWRlZF90YWlscm9vbSxcbiBcdFx0ICAgICAgIHRvdGFsX2xlbiAtIGxlbik7XG4gXHRpZiAoIXNrYilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMTg4NSwxMiAmIzQzOzE5NzYsMTIgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBtc2csIGxlbik7XG4gXHRza2JfcHV0KHNrYiwgbGVuKTtcbiBcbi1cdHB1c2hfdWRwKG5wLCBza2IsIGxlbik7XG4mIzQzO1x0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcbiBcdGlmIChucC1cdTAwM2VpcHY2KVxuIFx0XHRwdXNoX2lwdjYobnAsIHNrYiwgbGVuKTtcbiBcdGVsc2VcbiBcdFx0cHVzaF9pcHY0KG5wLCBza2IsIGxlbik7XG4tXHRwdXNoX2V0aChucCwgc2tiKTtcbiYjNDM7XHRwdXNoX2V0aChudCwgc2tiKTtcbiBcdHNrYi1cdTAwM2VkZXYgPSBucC1cdTAwM2VkZXY7XG4gXG4gXHRyZXR1cm4gKGludCluZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xuQEAgLTE5MDgsNyAmIzQzOzE5OTksNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4gICovXG4gc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIHtcbi1cdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKFx1MDAyNm50LVx1MDAzZW5wLCBtc2csIGxlbik7XG4mIzQzO1x0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKSB7XG4gXHRcdGlmIChyZXN1bHQgPT0gTkVUX1hNSVRfRFJPUCkge1xuQEAgLTIyMDMsOCAmIzQzOzIyOTQsOSBAQCBfX3JlbGVhc2VzKFx1MDAyNnRhcmdldF9saXN0X2xvY2spXG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbiB9XG4gXG4tc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxuJiM0MztzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGJvb2wgaXB2ZXJzaW9uX3NldCA9IGZhbHNlO1xuIFx0Y2hhciAqY3VyID0gb3B0O1xuIFx0Y2hhciAqZGVsaW07XG5AQCAtMjIxNSw3ICYjNDM7MjMwNyw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcbiBcdFx0aWYgKCFkZWxpbSlcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdFx0KmRlbGltID0gMDtcbi1cdFx0aWYgKGtzdHJ0b3UxNihjdXIsIDEwLCBcdTAwMjZucC1cdTAwM2Vsb2NhbF9wb3J0KSlcbiYjNDM7XHRcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfcG9ydCkpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuQEAgLTIyNjIsNyAmIzQzOzIzNTQsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXG4gXHRcdCpkZWxpbSA9IDA7XG4gXHRcdGlmICgqY3VyID09ICYjMzk7ICYjMzk7IHx8ICpjdXIgPT0gJiMzOTtcXHQmIzM5OylcbiBcdFx0XHRucF9pbmZvKG5wLCBcJiMzNDt3YXJuaW5nOiB3aGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkXFxuXCYjMzQ7KTtcbi1cdFx0aWYgKGtzdHJ0b3UxNihjdXIsIDEwLCBcdTAwMjZucC1cdTAwM2VyZW1vdGVfcG9ydCkpXG4mIzQzO1x0XHRpZiAoa3N0cnRvdTE2KGN1ciwgMTAsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9wb3J0KSlcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdFx0Y3VyID0gZGVsaW07XG4gXHR9XG5AQCAtMjI4NCwxMSAmIzQzOzIzNzYsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxuIFxuIFx0aWYgKCpjdXIgIT0gMCkge1xuIFx0XHQvKiBNQUMgYWRkcmVzcyAqL1xuLVx0XHRpZiAoIW1hY19wdG9uKGN1ciwgbnAtXHUwMDNlcmVtb3RlX21hYykpXG4mIzQzO1x0XHRpZiAoIW1hY19wdG9uKGN1ciwgbnQtXHUwMDNlcmVtb3RlX21hYykpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHR9XG4gXG4tXHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihucCk7XG4mIzQzO1x0bmV0Y29uc29sZV9wcmludF9iYW5uZXIobnQpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMjMyNiwxNCAmIzQzOzI0MTgsMjIgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gXHR9XG4gXG4gXHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXG4tXHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKFx1MDAyNm50LVx1MDAzZW5wLCB0YXJnZXRfY29uZmlnKTtcbiYjNDM7XHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKG50LCB0YXJnZXRfY29uZmlnKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZmFpbDtcbiBcbiYjNDM7XHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sIGlzXG4mIzQzO1x0ICogdmFsaWQgYXMgc29vbiBhcyBudC1cdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlLiBUaGUgdGFyZ2V0IGlzIG5vdFxuJiM0MztcdCAqIHlldCBvbiB0YXJnZXRfbGlzdCwgc28gYSBuZXRkZXYgZXZlbnQgY2Fubm90IHJlYWNoIGl0IGhlcmUsIGJ1dFxuJiM0MztcdCAqIG1pcnJvciB0aGUgY29uZmlnZnMgcGF0aCBmb3Igc3ltbWV0cnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcbiYjNDM7XG4gXHRlcnIgPSBuZXRwb2xsX3NldHVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O05vdCBlbmFibGluZyBuZXRjb25zb2xlIGZvciAlcyVkLiBOZXRwb2xsIHNldHVwIGZhaWxlZFxcblwmIzM0OyxcbiBcdFx0ICAgICAgIE5FVENPTlNPTEVfUEFSQU1fVEFSR0VUX1BSRUZJWCwgY21kbGluZV9jb3VudCk7XG4mIzQzO1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKVxuIFx0XHRcdC8qIG9ubHkgZmFpbCBpZiBkeW5hbWljIHJlY29uZmlndXJhdGlvbiBpcyBzZXQsXG4gXHRcdFx0ICogb3RoZXJ3aXNlLCBrZWVwIHRoZSB0YXJnZXQgaW4gdGhlIGxpc3QsIGJ1dCBkaXNhYmxlZC5cbkBAIC0yMzU1LDYgJiM0MzsyNDU1LDggQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSk7XG4mIzQzO1x0aWYgKG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpXG4mIzQzO1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdG5ldHBvbGxfY2xlYW51cChcdTAwMjZudC1cdTAwM2VucCk7XG4gI2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4gXHRrZnJlZShudC1cdTAwM2V1c2VyZGF0YSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuaW5kZXggODhmN2RhYTg1NjBlNTguLjc5MzE1NDYxYTdiMWUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG5AQCAtMjEsMjAgJiM0MzsyMSw2IEBAIHVuaW9uIGluZXRfYWRkciB7XG4gXHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbiB9O1xuIFxuLS8qXG4tICogTWF4aW11bSBwYXlsb2FkIG5ldHBvbGwmIzM5O3MgcHJlYWxsb2NhdGVkIHNrYiBwb29sIGNhbiBjYXJyeS4gS2VlcCB0aGlzIGluXG4tICogc3luYyB3aXRoIHRoZSBidWZmZXIgc2l6ZSB1c2VkIGJ5IHJlZmlsbF9za2JzKCkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jO1xuLSAqIGNhbGxlcnMgKGUuZy4gbmV0Y29uc29sZSkgdXNlIGl0IHRvIGRldGVjdCByZXF1ZXN0cyB0aGUgcG9vbCBjYW4gbmV2ZXJcbi0gKiBzYXRpc2Z5IGFuZCBhdm9pZCBkZXF1ZXVpbmcgYSBwb29sZWQgc2tiIHRoYXQgd291bGQgbGF0ZXIgdHJpcFxuLSAqIHNrYl9vdmVyX3BhbmljKCkgaW4gc2tiX3B1dCgpLlxuLSAqL1xuLSNkZWZpbmUgTUFYX1VEUF9DSFVOS1x0MTQ2MFxuLSNkZWZpbmUgTUFYX1NLQl9TSVpFXHRcdFx0XHRcdFx0XFxcbi1cdChzaXplb2Yoc3RydWN0IGV0aGhkcikgJiM0MztcdFx0XHRcdFxcXG4tXHQgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MztcdFx0XHRcdFx0XFxcbi1cdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MztcdFx0XHRcdFxcXG4tXHQgTUFYX1VEUF9DSFVOSylcbi1cbiBzdHJ1Y3QgbmV0cG9sbCB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG5AQCAtNDksMTAgJiM0MzszNSw2IEBAIHN0cnVjdCBuZXRwb2xsIHtcbiBcbiBcdHVuaW9uIGluZXRfYWRkciBsb2NhbF9pcCwgcmVtb3RlX2lwO1xuIFx0Ym9vbCBpcHY2O1xuLVx0dTE2IGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xuLVx0dTggcmVtb3RlX21hY1tFVEhfQUxFTl07XG4tXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9wb29sO1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHJlZmlsbF93cTtcbiB9O1xuIFxuICNkZWZpbmUgbnBfaW5mbyhucCwgZm10LCAuLi4pXHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuY1xuaW5kZXggODVhYTUxMzUwODgxMTcuLjEwYjYwNjMyNTFhNWJjIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRwb2xsLmNcbkBAIC0zNiwxMiAmIzQzOzM2LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvbmFwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4gXG4tLypcbi0gKiBXZSBtYWludGFpbiBhIHNtYWxsIHBvb2wgb2YgZnVsbHktc2l6ZWQgc2ticywgdG8gbWFrZSBzdXJlIHRoZVxuLSAqIG1lc3NhZ2UgZ2V0cyBvdXQgZXZlbiBpbiBleHRyZW1lIE9PTSBzaXR1YXRpb25zLlxuLSAqL1xuLVxuLSNkZWZpbmUgTUFYX1NLQlMgMzJcbiAjZGVmaW5lIFVTRUNfUEVSX1BPTExcdDUwXG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBjYXJyaWVyX3RpbWVvdXQgPSA0O1xuQEAgLTIxMywyMiAmIzQzOzIwNyw2IEBAIHZvaWQgbmV0cG9sbF9wb2xsX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHR1cChcdTAwMjZuaS1cdTAwM2VkZXZfbG9jayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzKHN0cnVjdCBuZXRwb2xsICpucClcbi17XG4tXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbDtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXG4tXHRza2JfcG9vbCA9IFx1MDAyNm5wLVx1MDAzZXNrYl9wb29sO1xuLVxuLVx0d2hpbGUgKFJFQURfT05DRShza2JfcG9vbC1cdTAwM2VxbGVuKSBcdTAwM2MgTUFYX1NLQlMpIHtcbi1cdFx0c2tiID0gYWxsb2Nfc2tiKE1BWF9TS0JfU0laRSwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4tXHRcdGlmICghc2tiKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHRza2JfcXVldWVfdGFpbChza2JfcG9vbCwgc2tiKTtcbi1cdH1cbi19XG4tXG4gdm9pZCBuZXRwb2xsX3phcF9jb21wbGV0aW9uX3F1ZXVlKHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbkBAIC0zNTEsMzIgJiM0MzszMjksMTIgQEAgbmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIEVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XG4gXG4tc3RhdGljIHZvaWQgc2tiX3Bvb2xfZmx1c2goc3RydWN0IG5ldHBvbGwgKm5wKVxuLXtcbi1cdHN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sO1xuLVxuLVx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZucC1cdTAwM2VyZWZpbGxfd3EpO1xuLVx0c2tiX3Bvb2wgPSBcdTAwMjZucC1cdTAwM2Vza2JfcG9vbDtcbi1cdHNrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc2tiX3Bvb2wsIFNLQl9DT05TVU1FRCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4te1xuLVx0c3RydWN0IG5ldHBvbGwgKm5wID1cbi1cdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRwb2xsLCByZWZpbGxfd3EpO1xuLVxuLVx0cmVmaWxsX3NrYnMobnApO1xuLX1cbi1cbiBpbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvO1xuIFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZucC1cdTAwM2Vza2JfcG9vbCk7XG4tXHRJTklUX1dPUksoXHUwMDI2bnAtXHUwMDNlcmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpO1xuLVxuIFx0aWYgKG5kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX0RJU0FCTEVfTkVUUE9MTCkge1xuIFx0XHRucF9lcnIobnAsIFwmIzM0OyVzIGRvZXNuJiMzOTt0IHN1cHBvcnQgcG9sbGluZywgYWJvcnRpbmdcXG5cJiMzNDssXG4gXHRcdCAgICAgICBuZGV2LVx1MDAzZW5hbWUpO1xuQEAgLTQxMSw5ICYjNDM7MzY5LDYgQEAgaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0bnAtXHUwMDNlZGV2ID0gbmRldjtcbiBcdHN0cnNjcHkobnAtXHUwMDNlZGV2X25hbWUsIG5kZXYtXHUwMDNlbmFtZSwgSUZOQU1TSVopO1xuIFxuLVx0LyogZmlsbCB1cCB0aGUgc2tiIHF1ZXVlICovXG4tXHRyZWZpbGxfc2ticyhucCk7XG4tXG4gXHQvKiBsYXN0IHRoaW5nIHRvIGRvIGlzIGxpbmsgaXQgdG8gdGhlIG5ldCBkZXZpY2Ugc3RydWN0dXJlICovXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobmRldi1cdTAwM2VucGluZm8sIG5waW5mbyk7XG4gXG5AQCAtNjAzLDcgJiM0Mzs1NTgsNyBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXG4gXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBmbHVzaDtcbiYjNDM7XHRcdGdvdG8gcHV0O1xuIFx0cnRubF91bmxvY2soKTtcbiBcbiBcdC8qIE1ha2Ugc3VyZSBhbGwgTkFQSSBwb2xscyB3aGljaCBzdGFydGVkIGJlZm9yZSBkZXYtXHUwMDNlbnBpbmZvXG5AQCAtNjE0LDggJiM0Mzs1NjksNiBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1mbHVzaDpcbi1cdHNrYl9wb29sX2ZsdXNoKG5wKTtcbiBwdXQ6XG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG5wLVx1MDAzZWRldik7XG4gXHRpZiAoaXBfb3ZlcndyaXR0ZW4pXG5AQCAtNjY2LDggJiM0Mzs2MTksNiBAQCBzdGF0aWMgdm9pZCBfX25ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXHRcdFJDVV9JTklUX1BPSU5URVIobnAtXHUwMDNlZGV2LVx1MDAzZW5waW5mbywgTlVMTCk7XG4gXHRcdGNhbGxfcmN1KFx1MDAyNm5waW5mby1cdTAwM2VyY3UsIHJjdV9jbGVhbnVwX25ldHBvbGxfaW5mbyk7XG4gXHR9XG4tXG4tXHRza2JfcG9vbF9mbHVzaChucCk7XG4gfVxuIFxuIHZvaWQgX19uZXRwb2xsX2ZyZWUoc3RydWN0IG5ldHBvbGwgKm5wKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0Y29uc29sZV9za2JfcG9vbF9pbml0JiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gmIzM0OywKICAgICYjMzQ7cmVmaWxsX3NrYnMmIzM0OywKICAgICYjMzQ7bmV0Y29uc19za2JfcG9wJiMzNDssCiAgICAmIzM0O2ZpbmRfc2tiJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtkcm9wX25ldGNvbnNvbGVfdGFyZ2V0JiMzNDssCiAgICAmIzM0O2FsbG9jX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtmcmVlX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lJiMzNDssCiAgICAmIzM0O19fbmV0cG9sbF9zZXR1cCYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O19fbmV0cG9sbF9jbGVhbnVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBTS0IgcG9vbCBhbmQgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gKHBvcnRzLCBNQUMpIGZyb20gYHN0cnVjdCBuZXRwb2xsYCB0byBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YC4gSXQgbW9kaWZpZXMgaG93IG5ldGNvbnNvbGUgaW5pdGlhbGl6ZXMgYW5kIGZsdXNoZXMgdGhlIFNLQiBwb29sLCBhbmQgdXBkYXRlcyB0aGUgbmV0cG9sbCBzZXR1cC9jbGVhbnVwIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGFuZCBuZXRwb2xsIGNvcmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2Q2YmY4NDBiZjc0OGJiNGUyYzFiZWM5NDIwZTA2MzI2NWQ4NGUwOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMTY6MDA6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKaW5kZXggYzE4MTJhOTgzNjViNzguLmUzNmIwOTk4YzgxMDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCkBAIC02MSw2ICYjNDM7NjEsMTkgQEAgTU9EVUxFX0lNUE9SVF9OUygmIzM0O05FVERFVl9JTlRFUk5BTCYjMzQ7KTsKICNkZWZpbmUgTUFYX1VTRVJEQVRBX0lURU1TCQkyNTYKICNkZWZpbmUgTUFYX1BSSU5UX0NIVU5LCQkJMTAwMAogCiYjNDM7LyoKJiM0MzsgKiBTaXppbmcgZm9yIHRoZSBwZXItdGFyZ2V0IGZhbGxiYWNrIHNrYiBwb29sIGNvbnN1bHRlZCBieSBmaW5kX3NrYigpCiYjNDM7ICogd2hlbiBpdHMgR0ZQX0FUT01JQyBhbGxvY2F0aW9uIGZhaWxzIHNvIG1lc3NhZ2VzIHN0aWxsIGdldCBvdXQgdW5kZXIKJiM0MzsgKiBtZW1vcnkgcHJlc3N1cmUuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBNQVhfVURQX0NIVU5LCQkJMTQ2MAomIzQzOyNkZWZpbmUgTUFYX1NLQlMJCQkzMgomIzQzOyNkZWZpbmUgTUFYX1NLQl9TSVpFCQkJCQkJCVwKJiM0MzsJKHNpemVvZihzdHJ1Y3QgZXRoaGRyKSAmIzQzOwkJCQkJXAomIzQzOwkgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsJCQkJCQlcCiYjNDM7CSBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MzsJCQkJCVwKJiM0MzsJIE1BWF9VRFBfQ0hVTkspCiYjNDM7CiBzdGF0aWMgY2hhciBjb25maWdbTUFYX1BBUkFNX0xFTkdUSF07CiBtb2R1bGVfcGFyYW1fc3RyaW5nKG5ldGNvbnNvbGUsIGNvbmZpZywgTUFYX1BBUkFNX0xFTkdUSCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5ldGNvbnNvbGUsICYjMzQ7IG5ldGNvbnNvbGU9W3NyYy1wb3J0XUBbc3JjLWlwXS9bZGV2XSxbdGd0LXBvcnRdQCZsdDt0Z3QtaXAmZ3Q7L1t0Z3QtbWFjYWRkcl0mIzM0Oyk7CkBAIC0xNjIsMTQgJiM0MzsxNzUsMTkgQEAgZW51bSB0YXJnZXRfc3RhdGUgewogICogQG5wOgkJVGhlIG5ldHBvbGwgc3RydWN0dXJlIGZvciB0aGlzIHRhcmdldC4KICAqCQlDb250YWlucyB0aGUgb3RoZXIgdXNlcnNwYWNlIHZpc2libGUgcGFyYW1ldGVyczoKICAqCQlkZXZfbmFtZQkocmVhZC13cml0ZSkKLSAqCQlsb2NhbF9wb3J0CShyZWFkLXdyaXRlKQotICoJCXJlbW90ZV9wb3J0CShyZWFkLXdyaXRlKQogICoJCWxvY2FsX2lwCShyZWFkLXdyaXRlKQogICoJCXJlbW90ZV9pcAkocmVhZC13cml0ZSkKICAqCQlsb2NhbF9tYWMJKHJlYWQtb25seSkKLSAqCQlyZW1vdGVfbWFjCShyZWFkLXdyaXRlKQomIzQzOyAqIEBsb2NhbF9wb3J0OglTb3VyY2UgVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiYjNDM7ICogQHJlbW90ZV9wb3J0OiBEZXN0aW5hdGlvbiBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KJiM0MzsgKiBAcmVtb3RlX21hYzoJRGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KICAqIEBidWY6CVRoZSBidWZmZXIgdXNlZCB0byBzZW5kIHRoZSBmdWxsIG1zZyB0byB0aGUgbmV0d29yayBzdGFjawogICogQHJlc3VtZV93cToJV29ya3F1ZXVlIHRvIHJlc3VtZSBkZWFjdGl2YXRlZCB0YXJnZXQKJiM0MzsgKiBAc2tiX3Bvb2w6CVBlci10YXJnZXQgZmFsbGJhY2sgc2tiIHBvb2wgY29uc3VsdGVkIGJ5IGZpbmRfc2tiKCkgd2hlbgomIzQzOyAqCQlpdHMgR0ZQX0FUT01JQyBhbGxvY2F0aW9uIGZhaWxzLiBMaWZldGltZSBicmFja2V0cyBhCiYjNDM7ICoJCXN1Y2Nlc3NmdWwgbmV0cG9sbF9zZXR1cCgpIC8gbmV0cG9sbF9jbGVhbnVwKCkgcGFpciBvbiBAbnAuCiYjNDM7ICogQHJlZmlsbF93cToJV29yayBpdGVtIHRoYXQgYXN5bmNocm9ub3VzbHkgdG9wcyBAc2tiX3Bvb2wgYmFjayB1cCB0bwomIzQzOyAqCQlNQVhfU0tCUyBhZnRlciBmaW5kX3NrYigpIGRyYWlucyBhbiBlbnRyeS4KICAqLwogc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CkBAIC0xOTAsMTEgJiM0MzsyMDgsMTUgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHsKIAlib29sCQkJZXh0ZW5kZWQ7CiAJYm9vbAkJCXJlbGVhc2U7CiAJc3RydWN0IG5ldHBvbGwJCW5wOwomIzQzOwl1MTYJCQlsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDsKJiM0MzsJdTgJCQlyZW1vdGVfbWFjW0VUSF9BTEVOXTsKIAkvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgJiM0MzsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0cwogCSAqIE5VTCB0ZXJtaW5hdG9yIHNvIGEgZnVsbCBNQVhfUFJJTlRfQ0hVTksgcGF5bG9hZCBpcyBub3QgdHJ1bmNhdGVkCiAJICovCiAJY2hhcgkJCWJ1ZltNQVhfUFJJTlRfQ0hVTksgJiM0MzsgMV07CiAJc3RydWN0IHdvcmtfc3RydWN0CXJlc3VtZV93cTsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZAlza2JfcG9vbDsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CXJlZmlsbF93cTsKIH07CiAKICNpZmRlZglDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDCkBAIC0yOTIsMTEgJiM0MzszMTQsNTggQEAgc3RhdGljIHZvaWQgbmV0Y29uc19yZWxlYXNlX2RldihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCQltZW1zZXQoJmFtcDtudC0mZ3Q7bnAuZGV2X25hbWUsIDAsIElGTkFNU0laKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJlZmlsbF9za2JzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbCA9ICZhbXA7bnQtJmd0O3NrYl9wb29sOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwl3aGlsZSAoUkVBRF9PTkNFKHNrYl9wb29sLSZndDtxbGVuKSAmbHQ7IE1BWF9TS0JTKSB7CiYjNDM7CQlza2IgPSBhbGxvY19za2IoTUFYX1NLQl9TSVpFLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTsKJiM0MzsJCWlmICghc2tiKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJc2tiX3F1ZXVlX3RhaWwoc2tiX3Bvb2wsIHNrYik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCwgcmVmaWxsX3dxKTsKJiM0MzsKJiM0MzsJcmVmaWxsX3NrYnMobnQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBJbml0aWFsaXNlIHRoZSBwZXItdGFyZ2V0IHNrYiBwb29sIHRoYXQgZmluZF9za2IoKSBmYWxscyBiYWNrIHRvIGFuZAomIzQzOyAqIHNlZWQgaXQuIFBhaXIgd2l0aCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkgYXQgdGhlIG1hdGNoaW5nCiYjNDM7ICogbmV0cG9sbCB0ZWFyZG93bi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7CXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtudC0mZ3Q7c2tiX3Bvb2wpOwomIzQzOwlJTklUX1dPUksoJmFtcDtudC0mZ3Q7cmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpOwomIzQzOwlyZWZpbGxfc2ticyhudCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtudC0mZ3Q7cmVmaWxsX3dxKTsKJiM0MzsJc2tiX3F1ZXVlX3B1cmdlX3JlYXNvbigmYW1wO250LSZndDtza2JfcG9vbCwgU0tCX0NPTlNVTUVEKTsKJiM0Mzt9CiYjNDM7CiAvKiBBdHRlbXB0cyB0byByZXN1bWUgbG9nZ2luZyB0byBhIGRlYWN0aXZhdGVkIHRhcmdldC4gKi8KIHN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKJiM0MzsJLyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBtYWtlcyBudC0mZ3Q7bnAuZGV2CiYjNDM7CSAqIHZpc2libGUgdG8gdGFyZ2V0X2xpc3Qgd2Fsa2VycyAoZS5nLiBuZXRjb25zb2xlX25ldGRldl9ldmVudCksCiYjNDM7CSAqIHdoaWNoIG90aGVyd2lzZSBtYXkgbW92ZSB0aGUgdGFyZ2V0IHRvIHRoZSBjbGVhbnVwIGxpc3QgYW5kCiYjNDM7CSAqIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWQgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwluZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpOwomIzQzOwogCWlmIChuZXRwb2xsX3NldHVwKCZhbXA7bnQtJmd0O25wKSkgewogCQkvKiBuZXRwb2xsIGZhaWxzIHNldHVwIG9uY2UsIGRvIG5vdCB0cnkgYWdhaW4uICovCiYjNDM7CQluZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTsKIAkJbnQtJmd0O3N0YXRlID0gU1RBVEVfRElTQUJMRUQ7CiAJCXJldHVybjsKIAl9CkBAIC0zNTgsNiAmIzQzOzQyNyw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJcnRubF9sb2NrKCk7CiAJaWYgKG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEICZhbXA7JmFtcDsgbnQtJmd0O25wLmRldiAmYW1wOyZhbXA7CiAJICAgIG50LSZndDtucC5kZXYtJmd0O3JlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkgewomIzQzOwkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJCW5ldGNvbnNfcmVsZWFzZV9kZXYobnQpOwogCQludC0mZ3Q7c3RhdGUgPSBTVEFURV9ESVNBQkxFRDsKIAl9CkBAIC0zOTMsOSAmIzQzOzQ2Myw5IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpCiAKIAludC0mZ3Q7bnAubmFtZSA9ICYjMzQ7bmV0Y29uc29sZSYjMzQ7OwogCXN0cnNjcHkobnQtJmd0O25wLmRldl9uYW1lLCAmIzM0O2V0aDAmIzM0OywgSUZOQU1TSVopOwotCW50LSZndDtucC5sb2NhbF9wb3J0ID0gNjY2NTsKLQludC0mZ3Q7bnAucmVtb3RlX3BvcnQgPSA2NjY2OwotCWV0aF9icm9hZGNhc3RfYWRkcihudC0mZ3Q7bnAucmVtb3RlX21hYyk7CiYjNDM7CW50LSZndDtsb2NhbF9wb3J0ID0gNjY2NTsKJiM0MzsJbnQtJmd0O3JlbW90ZV9wb3J0ID0gNjY2NjsKJiM0MzsJZXRoX2Jyb2FkY2FzdF9hZGRyKG50LSZndDtyZW1vdGVfbWFjKTsKIAludC0mZ3Q7c3RhdGUgPSBTVEFURV9ESVNBQkxFRDsKIAlJTklUX1dPUksoJmFtcDtudC0mZ3Q7cmVzdW1lX3dxLCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQpOwogCkBAIC00MTcsNiAmIzQzOzQ4Nyw3IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKHZvaWQpCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG50LCB0bXAsICZhbXA7dGFyZ2V0X2NsZWFudXBfbGlzdCwgbGlzdCkgewogCQkvKiBhbGwgZW50cmllcyBpbiB0aGUgY2xlYW51cF9saXN0IG5lZWRzIHRvIGJlIGRpc2FibGVkICovCiAJCVdBUk5fT05fT05DRShudC0mZ3Q7c3RhdGUgPT0gU1RBVEVfRU5BQkxFRCk7CiYjNDM7CQluZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTsKIAkJbmV0Y29uc19yZWxlYXNlX2RldihudCk7CiAJCS8qIG1vdmVkIHRoZSBjbGVhbmVkIHRhcmdldCB0byB0YXJnZXRfbGlzdC4gTmVlZCB0byBob2xkIGJvdGgKIAkJICogbG9ja3MKQEAgLTQyOSwyMSAmIzQzOzUwMCwyMyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHNfY29yZSh2b2lkKQogCW11dGV4X3VubG9jaygmYW1wO3RhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRwb2xsICpucCkKJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogewotCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgcG9ydCAlZFxuJiMzNDssIG5wLSZndDtsb2NhbF9wb3J0KTsKJiM0MzsJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7CiYjNDM7CiYjNDM7CW5wX2luZm8obnAsICYjMzQ7bG9jYWwgcG9ydCAlZFxuJiMzNDssIG50LSZndDtsb2NhbF9wb3J0KTsKIAlpZiAobnAtJmd0O2lwdjYpCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXG4mIzM0OywgJmFtcDtucC0mZ3Q7bG9jYWxfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcbiYjMzQ7LCAmYW1wO25wLSZndDtsb2NhbF9pcC5pcCk7CiAJbnBfaW5mbyhucCwgJiMzNDtpbnRlcmZhY2UgbmFtZSAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBucC0mZ3Q7ZGV2X25hbWUpOwogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAmIzM5OyVwTSYjMzk7XG4mIzM0OywgbnAtJmd0O2Rldl9tYWMpOwotCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIHBvcnQgJWRcbiYjMzQ7LCBucC0mZ3Q7cmVtb3RlX3BvcnQpOwomIzQzOwlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBwb3J0ICVkXG4mIzM0OywgbnQtJmd0O3JlbW90ZV9wb3J0KTsKIAlpZiAobnAtJmd0O2lwdjYpCiAJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xuJiMzNDssICZhbXA7bnAtJmd0O3JlbW90ZV9pcC5pbjYpOwogCWVsc2UKIAkJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcbiYjMzQ7LCAmYW1wO25wLSZndDtyZW1vdGVfaXAuaXApOwotCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXG4mIzM0OywgbnAtJmd0O3JlbW90ZV9tYWMpOwomIzQzOwlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxuJiMzNDssIG50LSZndDtyZW1vdGVfbWFjKTsKIH0KIAogLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzCkBAIC01NjEsMTIgJiM0Mzs2MzQsMTIgQEAgc3RhdGljIHNzaXplX3QgZGV2X25hbWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKIAogc3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslZFxuJiMzNDssIHRvX3RhcmdldChpdGVtKS0mZ3Q7bnAubG9jYWxfcG9ydCk7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslZFxuJiMzNDssIHRvX3RhcmdldChpdGVtKS0mZ3Q7bG9jYWxfcG9ydCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVkXG4mIzM0OywgdG9fdGFyZ2V0KGl0ZW0pLSZndDtucC5yZW1vdGVfcG9ydCk7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslZFxuJiMzNDssIHRvX3RhcmdldChpdGVtKS0mZ3Q7cmVtb3RlX3BvcnQpOwogfQogCiBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQpAQCAtNTk5LDcgJiM0Mzs2NzIsNyBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKIAogc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcE1cbiYjMzQ7LCB0b190YXJnZXQoaXRlbSktJmd0O25wLnJlbW90ZV9tYWMpOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBNXG4mIzM0OywgdG9fdGFyZ2V0KGl0ZW0pLSZndDtyZW1vdGVfbWFjKTsKIH0KIAogc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfZXJyb3JzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCkBAIC03NTYsMTEgJiM0Mzs4MjksMjEgQEAgc3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCiAJCSAqIFNraXAgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSgpIC0tIGFsbCB0aGUgYXR0cmlidXRlcyBhcmUKIAkJICogYWxyZWFkeSBjb25maWd1cmVkIHZpYSBjb25maWdmcy4gSnVzdCBwcmludCB0aGVtIG91dC4KIAkJICovCi0JCW5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKCZhbXA7bnQtJmd0O25wKTsKJiM0MzsJCW5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTsKJiM0MzsKJiM0MzsJCS8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2wKJiM0MzsJCSAqIGlzIHZhbGlkIGFzIHNvb24gYXMgbnQtJmd0O25wLmRldiBiZWNvbWVzIHZpc2libGUgdG8KJiM0MzsJCSAqIHRhcmdldF9saXN0IHdhbGtlcnMgKG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSwgd2hpY2ggd291bGQKJiM0MzsJCSAqIG90aGVyd2lzZSBjYWxsIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBvbiB1bmluaXRpYWxpc2VkCiYjNDM7CQkgKiBzdGF0ZS4KJiM0MzsJCSAqLwomIzQzOwkJbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTsKIAogCQlyZXQgPSBuZXRwb2xsX3NldHVwKCZhbXA7bnQtJmd0O25wKTsKLQkJaWYgKHJldCkKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQluZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTsKIAkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KIAogCQludC0mZ3Q7c3RhdGUgPSBTVEFURV9FTkFCTEVEOwogCQlwcl9pbmZvKCYjMzQ7bmV0d29yayBsb2dnaW5nIHN0YXJ0ZWRcbiYjMzQ7KTsKQEAgLTg4NSw3ICYjNDM7OTY4LDcgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCAmYW1wO250LSZndDtucC5sb2NhbF9wb3J0KTsKJiM0MzsJcmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsICZhbXA7bnQtJmd0O2xvY2FsX3BvcnQpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIG91dF91bmxvY2s7CiAJcmV0ID0gY291bnQ7CkBAIC05MDcsNyAmIzQzOzk5MCw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCAmYW1wO250LSZndDtucC5yZW1vdGVfcG9ydCk7CiYjNDM7CXJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCAmYW1wO250LSZndDtyZW1vdGVfcG9ydCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gb3V0X3VubG9jazsKIAlyZXQgPSBjb3VudDsKQEAgLTk5NCw3ICYjNDM7MTA3Nyw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiAJCWdvdG8gb3V0X3VubG9jazsKIAlpZiAoYnVmW01BQ19BRERSX1NUUl9MRU5dICZhbXA7JmFtcDsgYnVmW01BQ19BRERSX1NUUl9MRU5dICE9ICYjMzk7XG4mIzM5OykKIAkJZ290byBvdXRfdW5sb2NrOwotCW1lbWNweShudC0mZ3Q7bnAucmVtb3RlX21hYywgcmVtb3RlX21hYywgRVRIX0FMRU4pOwomIzQzOwltZW1jcHkobnQtJmd0O3JlbW90ZV9tYWMsIHJlbW90ZV9tYWMsIEVUSF9BTEVOKTsKIAogCXJldCA9IGNvdW50Owogb3V0X3VubG9jazoKQEAgLTE1MTQsOCAmIzQzOzE1OTcsMTAgQEAgc3RhdGljIHZvaWQgZHJvcF9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKIAkgKiBuZXRwb2xsX2NsZWFudXAoKSBpcyBpZGVtcG90ZW50IChpdCBza2lwcyB3aGVuIG5wLSZndDtkZXYgaXMgTlVMTCksIHNvCiAJICogaXQgaXMgc2FmZSBldmVuIGlmIHRoZSBjbGVhbnVwIHdvcmtlciBhbHJlYWR5IHRvcmUgdGhlIG5ldHBvbGwgZG93bi4KIAkgKi8KLQlpZiAobmVlZHNfY2xlYW51cCkKJiM0MzsJaWYgKG5lZWRzX2NsZWFudXApIHsKJiM0MzsJCW5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpOwogCQluZXRwb2xsX2NsZWFudXAoJmFtcDtudC0mZ3Q7bnApOwomIzQzOwl9CiAKIAljb25maWdfaXRlbV9wdXQoJmFtcDtudC0mZ3Q7Z3JvdXAuY2dfaXRlbSk7CiB9CkBAIC0xNzA2LDcgJiM0MzsxNzkxLDcgQEAgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBuZXRjb25zb2xlX25ldGRldl9ub3RpZmllciA9IHsKICAqIHBvb2wgbG9ja3MgYW5kIGlzIHRoZXJlZm9yZSBub3QgTk1JLXNhZmUuIFNraXAgdGhlIHJlZmlsbCB3aGVuIGNhbGxlZAogICogZnJvbSBOTUkgY29udGV4dDsgdGhlIG5leHQgbm9uLU5NSSBjYWxsZXIgd2lsbCB0b3AgdGhlIHBvb2wgYmFjayB1cC4KICAqLwotc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuKQomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y29uc19za2JfcG9wKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIApAQCAtMTcxOCwxOSAmIzQzOzE4MDMsMjEgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuKQogCQlpZiAoIWluX25taSgpKQogCQkJbmV0X3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtuZXRjb25zb2xlOiBkcm9wcGluZyBtZXNzYWdlLCByZXF1ZXN0ZWQgc2tiIGxlbiAlZCBleGNlZWRzIHBvb2wgYnVmZmVyIHNpemUgJXp1IG9uICVzXG4mIzM0OywKIAkJCQkJICAgICBsZW4sIChzaXplX3QpTUFYX1NLQl9TSVpFLAotCQkJCQkgICAgIG5wLSZndDtkZXYtJmd0O25hbWUpOwomIzQzOwkJCQkJICAgICBudC0mZ3Q7bnAuZGV2LSZndDtuYW1lKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc2tiID0gc2tiX2RlcXVldWUoJmFtcDtucC0mZ3Q7c2tiX3Bvb2wpOwomIzQzOwlza2IgPSBza2JfZGVxdWV1ZSgmYW1wO250LSZndDtza2JfcG9vbCk7CiAJaWYgKCFpbl9ubWkoKSkKLQkJc2NoZWR1bGVfd29yaygmYW1wO25wLSZndDtyZWZpbGxfd3EpOwomIzQzOwkJc2NoZWR1bGVfd29yaygmYW1wO250LSZndDtyZWZpbGxfd3EpOwogCiAJcmV0dXJuIHNrYjsKIH0KIAotc3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4sIGludCByZXNlcnZlKQomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbiwKJiM0MzsJCQkJaW50IHJlc2VydmUpCiB7CiYjNDM7CXN0cnVjdCBuZXRwb2xsICpucCA9ICZhbXA7bnQtJmd0O25wOwogCWludCBjb3VudCA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIApAQCAtMTczOSw3ICYjNDM7MTgyNiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSkKIAogCXNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pOwogCWlmICghc2tiKQotCQlza2IgPSBuZXRjb25zX3NrYl9wb3AobnAsIGxlbik7CiYjNDM7CQlza2IgPSBuZXRjb25zX3NrYl9wb3AobnQsIGxlbik7CiAKIAlpZiAoIXNrYikgewogCQlpZiAoJiM0MzsmIzQzO2NvdW50ICZsdDsgMTApIHsKQEAgLTE3NzksOCAmIzQzOzE4NjYsOSBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXVkcGgtJmd0O2NoZWNrID0gQ1NVTV9NQU5HTEVEXzA7CiB9CiAKLXN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKJiM0MztzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKQogewomIzQzOwlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSAmYW1wO250LSZndDtucDsKIAlzdHJ1Y3QgdWRwaGRyICp1ZHBoOwogCWludCB1ZHBfbGVuOwogCkBAIC0xNzkwLDIxICYjNDM7MTg3OCwyMiBAQCBzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pCiAJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAogCXVkcGggPSB1ZHBfaGRyKHNrYik7Ci0JdWRwaC0mZ3Q7c291cmNlID0gaHRvbnMobnAtJmd0O2xvY2FsX3BvcnQpOwotCXVkcGgtJmd0O2Rlc3QgPSBodG9ucyhucC0mZ3Q7cmVtb3RlX3BvcnQpOwomIzQzOwl1ZHBoLSZndDtzb3VyY2UgPSBodG9ucyhudC0mZ3Q7bG9jYWxfcG9ydCk7CiYjNDM7CXVkcGgtJmd0O2Rlc3QgPSBodG9ucyhudC0mZ3Q7cmVtb3RlX3BvcnQpOwogCXVkcGgtJmd0O2xlbiA9IGh0b25zKHVkcF9sZW4pOwogCiAJbmV0cG9sbF91ZHBfY2hlY2tzdW0obnAsIHNrYiwgbGVuKTsKIH0KIAotc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiYjNDM7CXN0cnVjdCBuZXRwb2xsICpucCA9ICZhbXA7bnQtJmd0O25wOwogCXN0cnVjdCBldGhoZHIgKmV0aDsKIAogCWV0aCA9IHNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9zb3VyY2UsIG5wLSZndDtkZXYtJmd0O2Rldl9hZGRyKTsKLQlldGhlcl9hZGRyX2NvcHkoZXRoLSZndDtoX2Rlc3QsIG5wLSZndDtyZW1vdGVfbWFjKTsKJiM0MzsJZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9kZXN0LCBudC0mZ3Q7cmVtb3RlX21hYyk7CiAJaWYgKG5wLSZndDtpcHY2KQogCQlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTsKIAllbHNlCkBAIC0xODYxLDggJiM0MzsxOTUwLDEwIEBAIHN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pCiAJc2tiLSZndDtwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpOwogfQogCi1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pCiYjNDM7c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywKJiM0MzsJCQkgICAgaW50IGxlbikKIHsKJiM0MzsJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7CiAJaW50IHRvdGFsX2xlbiwgaXBfbGVuLCB1ZHBfbGVuOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKQEAgLTE4NzcsNyAmIzQzOzE5NjgsNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pCiAKIAl0b3RhbF9sZW4gPSBpcF9sZW4gJiM0MzsgTExfUkVTRVJWRURfU1BBQ0UobnAtJmd0O2Rldik7CiAKLQlza2IgPSBmaW5kX3NrYihucCwgdG90YWxfbGVuICYjNDM7IG5wLSZndDtkZXYtJmd0O25lZWRlZF90YWlscm9vbSwKJiM0MzsJc2tiID0gZmluZF9za2IobnQsIHRvdGFsX2xlbiAmIzQzOyBucC0mZ3Q7ZGV2LSZndDtuZWVkZWRfdGFpbHJvb20sCiAJCSAgICAgICB0b3RhbF9sZW4gLSBsZW4pOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE4ODUsMTIgJiM0MzsxOTc2LDEyIEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbikKIAlza2JfY29weV90b19saW5lYXJfZGF0YShza2IsIG1zZywgbGVuKTsKIAlza2JfcHV0KHNrYiwgbGVuKTsKIAotCXB1c2hfdWRwKG5wLCBza2IsIGxlbik7CiYjNDM7CXB1c2hfdWRwKG50LCBza2IsIGxlbik7CiAJaWYgKG5wLSZndDtpcHY2KQogCQlwdXNoX2lwdjYobnAsIHNrYiwgbGVuKTsKIAllbHNlCiAJCXB1c2hfaXB2NChucCwgc2tiLCBsZW4pOwotCXB1c2hfZXRoKG5wLCBza2IpOwomIzQzOwlwdXNoX2V0aChudCwgc2tiKTsKIAlza2ItJmd0O2RldiA9IG5wLSZndDtkZXY7CiAKIAlyZXR1cm4gKGludCluZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpOwpAQCAtMTkwOCw3ICYjNDM7MTk5OSw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbikKICAqLwogc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKQogewotCWludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKCZhbXA7bnQtJmd0O25wLCBtc2csIGxlbik7CiYjNDM7CWludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSkgewogCQlpZiAocmVzdWx0ID09IE5FVF9YTUlUX0RST1ApIHsKQEAgLTIyMDMsOCAmIzQzOzIyOTQsOSBAQCBfX3JlbGVhc2VzKCZhbXA7dGFyZ2V0X2xpc3RfbG9jaykKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpCiYjNDM7c3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdCkKIHsKJiM0MzsJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7CiAJYm9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7CiAJY2hhciAqY3VyID0gb3B0OwogCWNoYXIgKmRlbGltOwpAQCAtMjIxNSw3ICYjNDM7MjMwNyw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdCkKIAkJaWYgKCFkZWxpbSkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwogCQkqZGVsaW0gPSAwOwotCQlpZiAoa3N0cnRvdTE2KGN1ciwgMTAsICZhbXA7bnAtJmd0O2xvY2FsX3BvcnQpKQomIzQzOwkJaWYgKGtzdHJ0b3UxNihjdXIsIDEwLCAmYW1wO250LSZndDtsb2NhbF9wb3J0KSkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwogCQljdXIgPSBkZWxpbTsKIAl9CkBAIC0yMjYyLDcgJiM0MzsyMzU0LDcgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KQogCQkqZGVsaW0gPSAwOwogCQlpZiAoKmN1ciA9PSAmIzM5OyAmIzM5OyB8fCAqY3VyID09ICYjMzk7XHQmIzM5OykKIAkJCW5wX2luZm8obnAsICYjMzQ7d2FybmluZzogd2hpdGVzcGFjZSBpcyBub3QgYWxsb3dlZFxuJiMzNDspOwotCQlpZiAoa3N0cnRvdTE2KGN1ciwgMTAsICZhbXA7bnAtJmd0O3JlbW90ZV9wb3J0KSkKJiM0MzsJCWlmIChrc3RydG91MTYoY3VyLCAxMCwgJmFtcDtudC0mZ3Q7cmVtb3RlX3BvcnQpKQogCQkJZ290byBwYXJzZV9mYWlsZWQ7CiAJCWN1ciA9IGRlbGltOwogCX0KQEAgLTIyODQsMTEgJiM0MzsyMzc2LDExIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdCkKIAogCWlmICgqY3VyICE9IDApIHsKIAkJLyogTUFDIGFkZHJlc3MgKi8KLQkJaWYgKCFtYWNfcHRvbihjdXIsIG5wLSZndDtyZW1vdGVfbWFjKSkKJiM0MzsJCWlmICghbWFjX3B0b24oY3VyLCBudC0mZ3Q7cmVtb3RlX21hYykpCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKIAl9CiAKLQluZXRjb25zb2xlX3ByaW50X2Jhbm5lcihucCk7CiYjNDM7CW5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTsKIAogCXJldHVybiAwOwogCkBAIC0yMzI2LDE0ICYjNDM7MjQxOCwyMiBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZywKIAl9CiAKIAkvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovCi0JZXJyID0gbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSgmYW1wO250LSZndDtucCwgdGFyZ2V0X2NvbmZpZyk7CiYjNDM7CWVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUobnQsIHRhcmdldF9jb25maWcpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDsKIAomIzQzOwkvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sIGlzCiYjNDM7CSAqIHZhbGlkIGFzIHNvb24gYXMgbnQtJmd0O25wLmRldiBiZWNvbWVzIHZpc2libGUuIFRoZSB0YXJnZXQgaXMgbm90CiYjNDM7CSAqIHlldCBvbiB0YXJnZXRfbGlzdCwgc28gYSBuZXRkZXYgZXZlbnQgY2Fubm90IHJlYWNoIGl0IGhlcmUsIGJ1dAomIzQzOwkgKiBtaXJyb3IgdGhlIGNvbmZpZ2ZzIHBhdGggZm9yIHN5bW1ldHJ5LgomIzQzOwkgKi8KJiM0MzsJbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTsKJiM0MzsKIAllcnIgPSBuZXRwb2xsX3NldHVwKCZhbXA7bnQtJmd0O25wKTsKIAlpZiAoZXJyKSB7CiAJCXByX2VycigmIzM0O05vdCBlbmFibGluZyBuZXRjb25zb2xlIGZvciAlcyVkLiBOZXRwb2xsIHNldHVwIGZhaWxlZFxuJiMzNDssCiAJCSAgICAgICBORVRDT05TT0xFX1BBUkFNX1RBUkdFVF9QUkVGSVgsIGNtZGxpbmVfY291bnQpOwomIzQzOwkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJCWlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSkKIAkJCS8qIG9ubHkgZmFpbCBpZiBkeW5hbWljIHJlY29uZmlndXJhdGlvbiBpcyBzZXQsCiAJCQkgKiBvdGhlcndpc2UsIGtlZXAgdGhlIHRhcmdldCBpbiB0aGUgbGlzdCwgYnV0IGRpc2FibGVkLgpAQCAtMjM1NSw2ICYjNDM7MjQ1NSw4IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLAogc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7bnQtJmd0O3Jlc3VtZV93cSk7CiYjNDM7CWlmIChudC0mZ3Q7c3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkKJiM0MzsJCW5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpOwogCW5ldHBvbGxfY2xlYW51cCgmYW1wO250LSZndDtucCk7CiAjaWZkZWYJQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQwogCWtmcmVlKG50LSZndDt1c2VyZGF0YSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaCBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCmluZGV4IDg4ZjdkYWE4NTYwZTU4Li43OTMxNTQ2MWE3YjFlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKQEAgLTIxLDIwICYjNDM7MjEsNiBAQCB1bmlvbiBpbmV0X2FkZHIgewogCXN0cnVjdCBpbjZfYWRkcglpbjY7CiB9OwogCi0vKgotICogTWF4aW11bSBwYXlsb2FkIG5ldHBvbGwmIzM5O3MgcHJlYWxsb2NhdGVkIHNrYiBwb29sIGNhbiBjYXJyeS4gS2VlcCB0aGlzIGluCi0gKiBzeW5jIHdpdGggdGhlIGJ1ZmZlciBzaXplIHVzZWQgYnkgcmVmaWxsX3NrYnMoKSBpbiBuZXQvY29yZS9uZXRwb2xsLmM7Ci0gKiBjYWxsZXJzIChlLmcuIG5ldGNvbnNvbGUpIHVzZSBpdCB0byBkZXRlY3QgcmVxdWVzdHMgdGhlIHBvb2wgY2FuIG5ldmVyCi0gKiBzYXRpc2Z5IGFuZCBhdm9pZCBkZXF1ZXVpbmcgYSBwb29sZWQgc2tiIHRoYXQgd291bGQgbGF0ZXIgdHJpcAotICogc2tiX292ZXJfcGFuaWMoKSBpbiBza2JfcHV0KCkuCi0gKi8KLSNkZWZpbmUgTUFYX1VEUF9DSFVOSwkxNDYwCi0jZGVmaW5lIE1BWF9TS0JfU0laRQkJCQkJCVwKLQkoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7CQkJCVwKLQkgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsJCQkJCVwKLQkgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICYjNDM7CQkJCVwKLQkgTUFYX1VEUF9DSFVOSykKLQogc3RydWN0IG5ldHBvbGwgewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJbmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7CkBAIC00OSwxMCAmIzQzOzM1LDYgQEAgc3RydWN0IG5ldHBvbGwgewogCiAJdW5pb24gaW5ldF9hZGRyIGxvY2FsX2lwLCByZW1vdGVfaXA7CiAJYm9vbCBpcHY2OwotCXUxNiBsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDsKLQl1OCByZW1vdGVfbWFjW0VUSF9BTEVOXTsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9wb29sOwotCXN0cnVjdCB3b3JrX3N0cnVjdCByZWZpbGxfd3E7CiB9OwogCiAjZGVmaW5lIG5wX2luZm8obnAsIGZtdCwgLi4uKQkJCQlcCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmMKaW5kZXggODVhYTUxMzUwODgxMTcuLjEwYjYwNjMyNTFhNWJjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC0zNiwxMiAmIzQzOzM2LDYgQEAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvbmFwaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tjb25maWcuaCZndDsKIAotLyoKLSAqIFdlIG1haW50YWluIGEgc21hbGwgcG9vbCBvZiBmdWxseS1zaXplZCBza2JzLCB0byBtYWtlIHN1cmUgdGhlCi0gKiBtZXNzYWdlIGdldHMgb3V0IGV2ZW4gaW4gZXh0cmVtZSBPT00gc2l0dWF0aW9ucy4KLSAqLwotCi0jZGVmaW5lIE1BWF9TS0JTIDMyCiAjZGVmaW5lIFVTRUNfUEVSX1BPTEwJNTAKIAogc3RhdGljIHVuc2lnbmVkIGludCBjYXJyaWVyX3RpbWVvdXQgPSA0OwpAQCAtMjEzLDIyICYjNDM7MjA3LDYgQEAgdm9pZCBuZXRwb2xsX3BvbGxfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCXVwKCZhbXA7bmktJmd0O2Rldl9sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldHBvbGwgKm5wKQotewotCXN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQlza2JfcG9vbCA9ICZhbXA7bnAtJmd0O3NrYl9wb29sOwotCi0Jd2hpbGUgKFJFQURfT05DRShza2JfcG9vbC0mZ3Q7cWxlbikgJmx0OyBNQVhfU0tCUykgewotCQlza2IgPSBhbGxvY19za2IoTUFYX1NLQl9TSVpFLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTsKLQkJaWYgKCFza2IpCi0JCQlicmVhazsKLQotCQlza2JfcXVldWVfdGFpbChza2JfcG9vbCwgc2tiKTsKLQl9Ci19Ci0KIHZvaWQgbmV0cG9sbF96YXBfY29tcGxldGlvbl9xdWV1ZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zNTEsMzIgJiM0MzszMjksMTIgQEAgbmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpCiB9CiBFWFBPUlRfU1lNQk9MKG5ldHBvbGxfc2VuZF9za2IpOwogCi1zdGF0aWMgdm9pZCBza2JfcG9vbF9mbHVzaChzdHJ1Y3QgbmV0cG9sbCAqbnApCi17Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCAqc2tiX3Bvb2w7Ci0KLQljYW5jZWxfd29ya19zeW5jKCZhbXA7bnAtJmd0O3JlZmlsbF93cSk7Ci0Jc2tiX3Bvb2wgPSAmYW1wO25wLSZndDtza2JfcG9vbDsKLQlza2JfcXVldWVfcHVyZ2VfcmVhc29uKHNrYl9wb29sLCBTS0JfQ09OU1VNRUQpOwotfQotCi1zdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBuZXRwb2xsICpucCA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0cG9sbCwgcmVmaWxsX3dxKTsKLQotCXJlZmlsbF9za2JzKG5wKTsKLX0KLQogaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbzsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wczsKIAlpbnQgZXJyOwogCi0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO25wLSZndDtza2JfcG9vbCk7Ci0JSU5JVF9XT1JLKCZhbXA7bnAtJmd0O3JlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTsKLQogCWlmIChuZGV2LSZndDtwcml2X2ZsYWdzICZhbXA7IElGRl9ESVNBQkxFX05FVFBPTEwpIHsKIAkJbnBfZXJyKG5wLCAmIzM0OyVzIGRvZXNuJiMzOTt0IHN1cHBvcnQgcG9sbGluZywgYWJvcnRpbmdcbiYjMzQ7LAogCQkgICAgICAgbmRldi0mZ3Q7bmFtZSk7CkBAIC00MTEsOSAmIzQzOzM2OSw2IEBAIGludCBfX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAlucC0mZ3Q7ZGV2ID0gbmRldjsKIAlzdHJzY3B5KG5wLSZndDtkZXZfbmFtZSwgbmRldi0mZ3Q7bmFtZSwgSUZOQU1TSVopOwogCi0JLyogZmlsbCB1cCB0aGUgc2tiIHF1ZXVlICovCi0JcmVmaWxsX3NrYnMobnApOwotCiAJLyogbGFzdCB0aGluZyB0byBkbyBpcyBsaW5rIGl0IHRvIHRoZSBuZXQgZGV2aWNlIHN0cnVjdHVyZSAqLwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZGV2LSZndDtucGluZm8sIG5waW5mbyk7CiAKQEAgLTYwMyw3ICYjNDM7NTU4LDcgQEAgaW50IG5ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wKQogCiAJZXJyID0gX19uZXRwb2xsX3NldHVwKG5wLCBuZGV2KTsKIAlpZiAoZXJyKQotCQlnb3RvIGZsdXNoOwomIzQzOwkJZ290byBwdXQ7CiAJcnRubF91bmxvY2soKTsKIAogCS8qIE1ha2Ugc3VyZSBhbGwgTkFQSSBwb2xscyB3aGljaCBzdGFydGVkIGJlZm9yZSBkZXYtJmd0O25waW5mbwpAQCAtNjE0LDggJiM0Mzs1NjksNiBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApCiAKIAlyZXR1cm4gMDsKIAotZmx1c2g6Ci0Jc2tiX3Bvb2xfZmx1c2gobnApOwogcHV0OgogCURFQlVHX05FVF9XQVJOX09OX09OQ0UobnAtJmd0O2Rldik7CiAJaWYgKGlwX292ZXJ3cml0dGVuKQpAQCAtNjY2LDggJiM0Mzs2MTksNiBAQCBzdGF0aWMgdm9pZCBfX25ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0cG9sbCAqbnApCiAJCVJDVV9JTklUX1BPSU5URVIobnAtJmd0O2Rldi0mZ3Q7bnBpbmZvLCBOVUxMKTsKIAkJY2FsbF9yY3UoJmFtcDtucGluZm8tJmd0O3JjdSwgcmN1X2NsZWFudXBfbmV0cG9sbF9pbmZvKTsKIAl9Ci0KLQlza2JfcG9vbF9mbHVzaChucCk7CiB9CiAKIHZvaWQgX19uZXRwb2xsX2ZyZWUoc3RydWN0IG5ldHBvbGwgKm5wKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzUyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogZG9lcyB0aGlzIGludHJvZHVjZSBmdW5jdGlvbmFsIGNoYW5nZXMgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIHdhcnJhbnQgZnV6emluZz8gSXQgc2VlbXMgbGlrZSBpdCBkb2VzLiBUaGUgcGF0Y2ggaXMgbW92aW5nIHNvbWUga2V5IHN0cnVjdHVyZXMg4oCTIGBza2JfcG9vbGAsIGByZWZpbGxfd3FgLCBgbG9jYWxfcG9ydGAsIGByZW1vdGVfcG9ydGAsIGFuZCBgcmVtb3RlX21hY2Ag4oCTIGZyb20gdGhlIGBuZXRwb2xsYCBzdHJ1Y3R1cmUgdG8gdGhlIGBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0dXJlLiBBbmQgaXQmIzM5O3MgdXBkYXRpbmcgdGhlIGBuZXRjb25zb2xlLmNgIGFuZCBgbmV0cG9sbC5jYCBmaWxlcyB0byByZWZsZWN0IHRoZXNlIGNoYW5nZXMuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIG1vZGlmaWNhdGlvbiB0byBob3cgdGhlIG5ldGNvbnNvbGUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaXRzIFNLQiBtYW5hZ2VtZW50IGFuZCBjb3JlIGNvbmZpZ3VyYXRpb24sIG9wZXJhdGVzLgoKVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGlzIHJlYWNoYWJpbGl0eSBhbmQgdGVzdGFiaWxpdHkuIE5ldGNvbnNvbGUsIGFzIEkgcmVjYWxsLCBpcyBhIGRyaXZlciBkZXNpZ25lZCBmb3Igc2VuZGluZyBrZXJuZWwgbG9nIG1lc3NhZ2VzIG92ZXIgVURQLiBJdCBoYXMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRocm91Z2ggbW9kdWxlIHBhcmFtZXRlcnMgYW5kLCBtb3JlIGludGVyZXN0aW5nbHksIGNvbmZpZ2ZzLiBUaGUgZmlsZXMgdG91Y2hlZCBieSB0aGUgcGF0Y2ggYXJlIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGFuZCBgbmV0L2NvcmUvbmV0cG9sbC5jYC4gR2l2ZW4gdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgZnVuZGFtZW50YWwgU0tCIGFsbG9jYXRpb24gYW5kIFVEUCB0cmFuc21pc3Npb24gbG9naWMgaW4gYm90aCB0aGUgbmV0Y29uc29sZSBhbmQgbmV0cG9sbCBjb21wb25lbnRzLCBpdCBjZXJ0YWlubHkgKnNlZW1zKiB3b3J0aCBmdXp6aW5nLiBJIGNhbiBpbWFnaW5lIGZ1enppbmcgdGhlIG5ldGNvbnNvbGUgY29uZmlndXJhdGlvbiB0aHJvdWdoIGNvbmZpZ2ZzIG9yIG1vZHVsZSBwYXJhbWV0ZXJzIGFuZCB0aGVuIHRyaWdnZXJpbmcga2VybmVsIGxvZ3MgdG8gZXhlcmNpc2UgdGhlIGNoYW5nZXMuCgpXYWl0IGEgc2Vjb25k4oCmIEkgdGhpbmsgU3l6a2FsbGVyIGNhbiBhY3R1YWxseSBpbnRlcmFjdCB3aXRoIGNvbmZpZ2ZzLCBjYW4mIzM5O3QgaXQ/IElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIHRoZW4gdGhpcyBwYXRjaCBqdXN0IGp1bXBlZCB1cCBpbiBwcmlvcml0eS4gTm93IEkganVzdCBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGljaCBrZXJuZWwgY29uZmlncyBhcmUgcmVsZXZhbnQgaGVyZS4gSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09ORklHX05FVENPTlNPTEVgIGFuZCBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgYXJlIHRoZSBrZXlzLCBidXQgbGV0JiMzOTtzIHF1aWNrbHkgc2VhcmNoIHRoZSBjb2RlIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUQ09OU09MRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTMxOD1jb25maWcgTUFDU0VDXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXG5kcml2ZXJzL25ldC9LY29uZmlnOjMyNzpjb25maWcgTkVUQ09OU09MRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzMtXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNDpjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cdGJvb2wgXCYjMzQ7RHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NTpjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcbmRyaXZlcnMvbmV0L0tjb25maWctMzQ2LVx0Ym9vbCBcJiMzNDtTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzU0LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozNTU6Y29uZmlnIE5FVENPTlNPTEVfUFJFUEVORF9SRUxFQVNFXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1Ni1cdGJvb2wgXCYjMzQ7UHJlcGVuZCBrZXJuZWwgcmVsZWFzZSB2ZXJzaW9uIGluIHRoZSBtZXNzYWdlIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY4OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDg3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoZSBjb3JlIGNvbmZpZ3MgaW4gcGxheSBhcmUgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYC4gVGhpcyBpcyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7ZCBjaGVjayB3aGVuIGF1ZGl0aW5nIHNvbWV0aGluZyBsaWtlIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkLCBhbmQgdGhpcyBpcyB3aGVyZSBJJiMzOTtkIHN0YXJ0IGRpZ2dpbmcuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgdGhlIGJ1bGsgb2YgdGhlIGNoYW5nZXMgYXBwZWFyIHdpdGhpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gSSYjMzk7dmUgbGlzdGVkIG91dCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgYSBzaW1pbGFyIGxpc3QgZm9yIGBuZXQvY29yZS9uZXRwb2xsLmNgLgoKSSBxdWlja2x5IHNlZSB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgc2lnbmlmaWNhbnQgcmVmYWN0b3JpbmcgLSBtb3Zpbmcga2V5IGZ1bmN0aW9ucyBsaWtlIGByZWZpbGxfc2tic2AsIGBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoYCBhbmQgYHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcmAgZnJvbSB0aGUgYG5ldHBvbGxgIHN1YnN5c3RlbSB0byBgbmV0Y29uc29sZWAuIEkmIzM5O2QgZXhwZWN0IHNvbWUgY2hhbmdlcyB0byBgbmV0cG9sbF9zZXR1cGAgYW5kIGBfX25ldHBvbGxfY2xlYW51cGAgdG9vLCBhbmQgaW5kZWVkIHRoZXJlIGFyZS4KClNvLCBJJiMzOTt2ZSBnb3QgYSBwcmVsaW1pbmFyeSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBmb2N1cyBvbjogdGhvc2UgaW52b2x2ZWQgaW4gYnVmZmVyIG1hbmFnZW1lbnQgKGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAsIGByZWZpbGxfc2tic2AsIGBuZXRjb25zX3NrYl9wb3BgLCBgZmluZF9za2JgKSwgdGhlIGFjdHVhbCBkYXRhIHRyYW5zbWlzc2lvbiAoYHB1c2hfdWRwYCwgYHB1c2hfZXRoYCwgYG5ldHBvbGxfc2VuZF91ZHBgKSwgdGhlIHRhcmdldCBjb25maWd1cmF0aW9uIChgYWxsb2NfcGFyYW1fdGFyZ2V0YCwgYGZyZWVfcGFyYW1fdGFyZ2V0YCwgYGVuYWJsZWRfc3RvcmVgLCBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGApLCBhbmQgY29tbWFuZC1saW5lIHBhcnNpbmcgKGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCkuCgpOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbmV0Y29uc29sZWAgaXMgcmVhY2hhYmxlLiBBaCwgcmlnaHQsIHRocm91Z2ggY29uZmlnZnMuIEdpdmVuIHRoaXMgZnVuY3Rpb25hbCBzaGlmdCBvZiBzdGF0ZSBmcm9tIGBuZXRwb2xsYCB0byBgbmV0Y29uc29sZV90YXJnZXRgLCBmdXp6aW5nIHRoaXMgYXJlYSBzZWVtcyB3b3J0aHdoaWxlLiBJJiMzOTtkIGRlZmluaXRlbHkgd2FudCB0byBleHBsb3JlIHRoZSBlZGdlIGNhc2VzIGludHJvZHVjZWQgYnkgdGhpcyBtb3ZlLgoKTm93LCBJJiMzOTtsbCByZWZpbmUgbXkgc3ltYm9sIGxpc3QuIEl0IHNlZW1zIGxpa2UgYSB2ZXJ5IGdvb2QgdGFyZ2V0IGxpc3QuIFdhaXQsIEkmIzM5O20ganVzdCBub3RpY2luZyB0aGF0IG1vc3Qgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMgd2l0aGluIGBuZXRjb25zb2xlLmNgLiBUaGF0IGlzIGtleSBpbmZvcm1hdGlvbi4gVGhpcyBsaW1pdHMgdGhlaXIgZGlyZWN0IGV4dGVybmFsIGV4cG9zdXJlLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgdXNlZCBpbnRlcm5hbGx5LgoKRmluYWxseSwgSSYjMzk7bGwgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHdoYXQgZWxzZSBkZXBlbmRzIG9uIGBuZXRwb2xsYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuZm9yZXNlZW4ga25vY2stb24gZWZmZWN0cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBpZGVudGlmaWVkIGFsbCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBBbmQgd2hpbGUgSSBzZWUgY2hhbmdlcyB3aXRoaW4gYG5ldC9jb3JlL25ldHBvbGwuY2AsIGFyZSB0aGVyZSBvdGhlciBjYWxsZXJzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGVudGlyZSBgbmV0cG9sbGAgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldHBvbGxfc2V0dXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xMzkyPXN0YXRpYyBpbmxpbmUgaW50IHNsYXZlX2VuYWJsZV9uZXRwb2xsKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xNDAxLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxNDAyOlx0ZXJyID0gX19uZXRwb2xsX3NldHVwKG5wLCBzbGF2ZS1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xNDAzLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTQ1MT1zdGF0aWMgdm9pZCBib25kX25ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xNDYxLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxNDYyOnN0YXRpYyBpbnQgYm9uZF9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE0NjMte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTk0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJvbmRfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5NjctI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU5Njg6XHQubmRvX25ldHBvbGxfc2V0dXBcdD0gYm9uZF9uZXRwb2xsX3NldHVwLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01OTY5LVx0Lm5kb19uZXRwb2xsX2NsZWFudXBcdD0gYm9uZF9uZXRwb2xsX2NsZWFudXAsXG4tLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTExMzA9c3RhdGljIHZvaWQgbWFjdmxhbl9kZXZfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTExMzQtXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6MTEzNTpzdGF0aWMgaW50IG1hY3ZsYW5fZGV2X25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTM2LXtcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTE0Ni1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMTQ3Olx0ZXJyID0gX19uZXRwb2xsX3NldHVwKG5ldHBvbGwsIHJlYWxfZGV2KTtcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTQ4LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz0xMTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWFjdmxhbl9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMjA2LVx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcdD0gbWFjdmxhbl9kZXZfcG9sbF9jb250cm9sbGVyLFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjEyMDc6XHQubmRvX25ldHBvbGxfc2V0dXBcdD0gbWFjdmxhbl9kZXZfbmV0cG9sbF9zZXR1cCxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMjA4LVx0Lm5kb19uZXRwb2xsX2NsZWFudXBcdD0gbWFjdmxhbl9kZXZfbmV0cG9sbF9jbGVhbnVwLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDU9ZW51bSB0YXJnZXRfc3RhdGUge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODctICpcdFx0aXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscy4gTGlmZXRpbWUgYnJhY2tldHMgYVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4ODogKlx0XHRzdWNjZXNzZnVsIG5ldHBvbGxfc2V0dXAoKSAvIG5ldHBvbGxfY2xlYW51cCgpIHBhaXIgb24gQG5wLlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4OS0gKiBAcmVmaWxsX3dxOlx0V29yayBpdGVtIHRoYXQgYXN5bmNocm9ub3VzbHkgdG9wcyBAc2tiX3Bvb2wgYmFjayB1cCB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zNTc9c3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM1OC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzU5Olx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBtYWtlcyBudC1cdTAwM2VucC5kZXZcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNjAtXHQgKiB2aXNpYmxlIHRvIHRhcmdldF9saXN0IHdhbGtlcnMgKGUuZy4gbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQpLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNjUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzY2Olx0aWYgKG5ldHBvbGxfc2V0dXAoXHUwMDI2bnQtXHUwMDNlbnApKSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzY3LVx0XHQvKiBuZXRwb2xsIGZhaWxzIHNldHVwIG9uY2UsIGRvIG5vdCB0cnkgYWdhaW4uICovXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTM5MD1zdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MTUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDE2Olx0LyogbmV0cG9sbF9zZXR1cCgpIHRvb2sgYSBuZXRfZGV2aWNlIHJlZmVyZW5jZSBhbmQgZHJvcHBlZCB0aGUgUlROTFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQxNy1cdCAqIGJlZm9yZSByZXR1cm5pbmcsIGFsbCB3aGlsZSB0aGlzIHRhcmdldCB3YXMgb2ZmIHRhcmdldF9saXN0IGFuZFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03ODA9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgzMy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MzQ6XHRcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MzUtXHRcdCAqIGlzIHZhbGlkIGFzIHNvb24gYXMgbnQtXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NDEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODQyOlx0XHRyZXQgPSBuZXRwb2xsX3NldHVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NDMtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM5Mz1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQyNC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDI1Olx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbCBpc1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MjYtXHQgKiB2YWxpZCBhcyBzb29uIGFzIG50LVx1MDAzZW5wLmRldiBiZWNvbWVzIHZpc2libGUuIFRoZSB0YXJnZXQgaXMgbm90XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MzEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQzMjpcdGVyciA9IG5ldHBvbGxfc2V0dXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MzMtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0xMTQwPXN0YXRpYyBpbnQgX190ZWFtX3BvcnRfZW5hYmxlX25ldHBvbGwoc3RydWN0IHRlYW1fcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTExNDgtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjExNDk6XHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIHBvcnQtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTE1MC1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTIwNzg9c3RhdGljIHZvaWQgdGVhbV9uZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIwODYtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjIwODc6c3RhdGljIGludCB0ZWFtX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjA4OC17XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMTcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGVhbV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE4NS1cdC5uZG9fcG9sbF9jb250cm9sbGVyXHQ9IHRlYW1fcG9sbF9jb250cm9sbGVyLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMTg2Olx0Lm5kb19uZXRwb2xsX3NldHVwXHQ9IHRlYW1fbmV0cG9sbF9zZXR1cCxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE4Ny1cdC5uZG9fbmV0cG9sbF9jbGVhbnVwXHQ9IHRlYW1fbmV0cG9sbF9jbGVhbnVwLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTQ0Nj1zdHJ1Y3QgbmV0X2RldmljZV9vcHMge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTUwNC1cdHZvaWQgICAgICAgICAgICAgICAgICAgICgqbmRvX3BvbGxfY29udHJvbGxlcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjE1MDU6XHRpbnRcdFx0XHQoKm5kb19uZXRwb2xsX3NldHVwKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTUwNi1cdHZvaWRcdFx0XHQoKm5kb19uZXRwb2xsX2NsZWFudXApKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oPTY1PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRwb2xsX3BvbGxfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgcmV0dXJuOyB9XG4tLVxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmgtNjctXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaDo2ODppbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6Njk6aW50IG5ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wKTtcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTcwLXZvaWQgX19uZXRwb2xsX2ZyZWUoc3RydWN0IG5ldHBvbGwgKm5wKTtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz03MTQ9c3RhdGljIHZvaWQgdmxhbl9kZXZfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzE4LVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6NzE5OnN0YXRpYyBpbnQgdmxhbl9kZXZfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzIwLXtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03MzAtXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3MzE6XHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobmV0cG9sbCwgcmVhbF9kZXYpO1xubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzMyLVx0aWYgKGVycikge1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jPTEwNzg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMgPSB7XG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTEwNC1cdC5uZG9fcG9sbF9jb250cm9sbGVyXHQ9IHZsYW5fZGV2X3BvbGxfY29udHJvbGxlcixcbm5ldC84MDIxcS92bGFuX2Rldi5jOjExMDU6XHQubmRvX25ldHBvbGxfc2V0dXBcdD0gdmxhbl9kZXZfbmV0cG9sbF9zZXR1cCxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTExMDYtXHQubmRvX25ldHBvbGxfY2xlYW51cFx0PSB2bGFuX2Rldl9uZXRwb2xsX2NsZWFudXAsXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMDY9c3RhdGljIGludCBfX2JyX25ldHBvbGxfZW5hYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0zMTQtXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjMxNTpcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgcC1cdTAwM2VkZXYpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0zMTYtXHRpZiAoZXJyKSB7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMjU9aW50IGJyX25ldHBvbGxfZW5hYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0zMzItXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjMzMzpzdGF0aWMgaW50IGJyX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMzM0LXtcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTQzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJyX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy00NTEtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjQ1MjpcdC5uZG9fbmV0cG9sbF9zZXR1cFx0ID0gYnJfbmV0cG9sbF9zZXR1cCxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNDUzLVx0Lm5kb19uZXRwb2xsX2NsZWFudXBcdCA9IGJyX25ldHBvbGxfY2xlYW51cCxcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmM9MzMwPUVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XG5uZXQvY29yZS9uZXRwb2xsLmMtMzMxLVxubmV0L2NvcmUvbmV0cG9sbC5jOjMzMjppbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG5uZXQvY29yZS9uZXRwb2xsLmMtMzMzLXtcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtMzU5LVx0XHRvcHMgPSBuZGV2LVx1MDAzZW5ldGRldl9vcHM7XG5uZXQvY29yZS9uZXRwb2xsLmM6MzYwOlx0XHRpZiAob3BzLVx1MDAzZW5kb19uZXRwb2xsX3NldHVwKSB7XG5uZXQvY29yZS9uZXRwb2xsLmM6MzYxOlx0XHRcdGVyciA9IG9wcy1cdTAwM2VuZG9fbmV0cG9sbF9zZXR1cChuZGV2KTtcbm5ldC9jb3JlL25ldHBvbGwuYy0zNjItXHRcdFx0aWYgKGVycilcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtMzgxLX1cbm5ldC9jb3JlL25ldHBvbGwuYzozODI6RVhQT1JUX1NZTUJPTF9HUEwoX19uZXRwb2xsX3NldHVwKTtcbm5ldC9jb3JlL25ldHBvbGwuYy0zODMtXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jPTQ1OT1zdGF0aWMgaW50IG5ldHBvbGxfdGFrZV9pcHY0KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTQ4Ni0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxlciBsZWZ0IG5wLVx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XG5uZXQvY29yZS9uZXRwb2xsLmM6NDg3OiAqIG5ldHBvbGxfc2V0dXAoKSBzaG91bGQgYXV0by1wb3B1bGF0ZSBpdCBmcm9tIHRoZSBlZ3Jlc3MgZGV2aWNlLlxubmV0L2NvcmUvbmV0cG9sbC5jLTQ4OC0gKlxuLS1cbm5ldC9jb3JlL25ldHBvbGwuYz00OTU9c3RhdGljIGJvb2wgbmV0cG9sbF9sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0cG9sbCAqbnApXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTUwMS1cbm5ldC9jb3JlL25ldHBvbGwuYzo1MDI6aW50IG5ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wKVxubmV0L2NvcmUvbmV0cG9sbC5jLTUwMy17XG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTU1OC1cbm5ldC9jb3JlL25ldHBvbGwuYzo1NTk6XHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpO1xubmV0L2NvcmUvbmV0cG9sbC5jLTU2MC1cdGlmIChlcnIpXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTU4MC19XG5uZXQvY29yZS9uZXRwb2xsLmM6NTgxOkVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZXR1cCk7XG5uZXQvY29yZS9uZXRwb2xsLmMtNTgyLVxuLS1cbm5ldC9kc2EvdXNlci5jPTEzMDU9c3RhdGljIGludCBkc2FfdXNlcl9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9kc2EvdXNlci5jLTEzMTMtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5uZXQvZHNhL3VzZXIuYzoxMzE0OnN0YXRpYyBpbnQgZHNhX3VzZXJfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2RzYS91c2VyLmMtMTMxNS17XG4tLVxubmV0L2RzYS91c2VyLmMtMTMyNC1cbm5ldC9kc2EvdXNlci5jOjEzMjU6XHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobmV0cG9sbCwgY29uZHVpdCk7XG5uZXQvZHNhL3VzZXIuYy0xMzI2LVx0aWYgKGVycikge1xuLS1cbm5ldC9kc2EvdXNlci5jPTI1ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkc2FfdXNlcl9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9kc2EvdXNlci5jLTI1OTctI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5uZXQvZHNhL3VzZXIuYzoyNTk4Olx0Lm5kb19uZXRwb2xsX3NldHVwXHQ9IGRzYV91c2VyX25ldHBvbGxfc2V0dXAsXG5uZXQvZHNhL3VzZXIuYy0yNTk5LVx0Lm5kb19uZXRwb2xsX2NsZWFudXBcdD0gZHNhX3VzZXJfbmV0cG9sbF9jbGVhbnVwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzkyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBOZXR3b3JrIENvbnNvbGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBuZXRjb25zb2xlYCBhbmQgYG5ldHBvbGxgLiBUaGUgYG5ldHBvbGxgIG1vZGlmaWNhdGlvbnMgYXJlIHRoZSBjb3JlIG9mIG15IGNvbmNlcm4uIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgcmVtb3ZpbmcgdGhlIGBza2JfcG9vbGAgYW5kIGByZWZpbGxfd3FgIGZyb20gdGhlIGBzdHJ1Y3QgbmV0cG9sbGAgYW5kIHRoZW4gcmlwcGluZyBvdXQgdGhlIGFzc29jaWF0ZWQgYHJlZmlsbF9za2JzYCBhbmQgYHNrYl9wb29sX2ZsdXNoYCBjYWxscyBmcm9tIGBuZXRwb2xsX3NldHVwYCBhbmQgYF9fbmV0cG9sbF9jbGVhbnVwYCwgcmVzcGVjdGl2ZWx5LgoKVGhlIGltbWVkaWF0ZSBjb25zZXF1ZW5jZSB0aGF0IGp1bXBzIG91dCBpcyB0aGUgaW1wYWN0IG9uIGFsbCAqb3RoZXIqIHVzZXJzIG9mIGBuZXRwb2xsYC4gSSBtZWFuLCB0aGluayBhYm91dCBpdDogYGJvbmRfbWFpbi5jYCwgYG1hY3ZsYW4uY2AsIGB0ZWFtX2NvcmUuY2AsIGB2bGFuX2Rldi5jYCwgYGJyX2RldmljZS5jYCwgYW5kIGV2ZW4gYGRzYS91c2VyLmNgIOKAkyB0aGV5JiMzOTtyZSBhbGwgcmVseWluZyBvbiBzb21lIGZvcm0gb2YgYG5ldHBvbGxgIHN0cnVjdHVyZS4gQW5kIG5vdywgdGhleSYjMzk7cmUgKm5vdCogZ29pbmcgdG8gaGF2ZSBhbiBgc2tiX3Bvb2xgIGF2YWlsYWJsZSB0byB0aGVtIGluIHRoZWlyIGBuZXRwb2xsYCBpbnN0YW5jZXMuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0LCBhIGJpdCB1bnNldHRsaW5nLgoKSG1tLCB0aGlzIHJhaXNlcyBhIGNydWNpYWwgcXVlc3Rpb24uIEFyZSB0aGVzZSBvdGhlciB1c2VycyBvZiBgbmV0cG9sbGAgZXZlbiB1dGlsaXppbmcgYG5ldHBvbGxfc2VuZF91ZHBgPyBJZiB0aGV5IGFyZW4mIzM5O3QsIHRoZW4gbWF5YmUgdGhpcyBpc24mIzM5O3Qgc3VjaCBhIGJpZyBkZWFsLiBUaGUgYWJzZW5jZSBvZiB0aGUgYHNrYl9wb29sYCBtaWdodCBub3QgaGF2ZSBhbiBpbW1lZGlhdGUgZnVuY3Rpb25hbCBpbXBhY3QuIEJ1dCB0aGUgaW1wbGljYXRpb25zIG9mIGEgc2hhcmVkIHJlc291cmNlIHJlbW92ZWQgY2Fubm90IGJlIGlnbm9yZWQgYW5kLCBpbiB0aGlzIGNhc2UsIG5lZWRzIGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdXNlZC4gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRwb2xsX3NlbmRfdWRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xOTMwPXN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NTItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk1MzpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NTQtXHRcdFx0ICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5OTAtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk5MTogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk5Mi0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk5NS0gKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5OTY6ICogQ2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBhbmQgY2xhc3NpZmllcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBhbiBlcnJvclxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5OTctICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5OTg6ICogT25seSBjYWxscyBuZXRwb2xsX3NlbmRfdWRwIGlmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgZGlzYWJsZWQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk5OS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMDAwPXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDAxLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDAyOlx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDAzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzgxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgTmV0Y29uc29sZSBVRFAgVHJhbnNtaXNzaW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYG5ldGNvbnNvbGVgIGhhbmRsZXMgVURQIHRyYW5zbWlzc2lvbi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBuZXRwb2xsX3NlbmRfdWRwYCBpcyBzdGF0aWNhbGx5IGRlY2xhcmVkIHdpdGhpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBpdCYjMzk7cyB0aWdodGx5IGJvdW5kIHRvIHRoYXQgc3BlY2lmaWMgbW9kdWxlLiBUaGVuIEkgcmVtZW1iZXIgdGhhdCBgbmV0cG9sbF9zZW5kX3NrYmAgaXMsIGluIGZhY3QsIGV4cG9ydGVkIGZyb20gYG5ldC9jb3JlL25ldHBvbGwuY2AuIFRoYXQmIzM5O3MgdGhlIG1vcmUgZ2VuZXJhbCBuZXR3b3JraW5nIGNvbXBvbmVudCwgYW5kIEkmIzM5O2QgZXhwZWN0IHRoYXQgdGhlIG1vcmUgZ2VuZXJhbCBzZW5kIGZ1bmN0aW9uIGBuZXRwb2xsX3NlbmRfc2tiYCBtYXkgaGF2ZSBicm9hZGVyIGFwcGxpY2FiaWxpdHkgdGhhbiB0aGUgc3RhdGljIG5ldGNvbnNvbGUgZnVuY3Rpb24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYG5ldHBvbGxfc2VuZF9za2JgIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIG9yIGludGVyYWN0aW5nIHdpdGggYHNrYl9wb29sYC4gVGhhdCB3aWxsIGJlIGFuIGltcG9ydGFudCBpbmRpY2F0b3Igb2YgbWVtb3J5IGFsbG9jYXRpb24sIGVmZmljaWVuY3ksIGFuZCBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY2FsbCBncmFwaCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0cG9sbF9zZW5kX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTI5Nz1uZXRkZXZfdHhfdCBib25kX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzA2LVx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhib25kLVx1MDAzZWRldikpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozMDc6XHRcdHJldHVybiBib25kX25ldHBvbGxfc2VuZF9za2IoYm9uZF9nZXRfc2xhdmVfYnlfZGV2KGJvbmQsIHNsYXZlX2RldiksIHNrYik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTMwOC1cbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9NTQ1PXN0YXRpYyBpbnQgbWFjdmxhbl9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU3NC1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzo1NzU6c3RhdGljIGlubGluZSBuZXRkZXZfdHhfdCBtYWN2bGFuX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU3Ni17XG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtNTc3LSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjU3ODpcdHJldHVybiBuZXRwb2xsX3NlbmRfc2tiKHZsYW4tXHUwMDNlbmV0cG9sbCwgc2tiKTtcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01NzktI2Vsc2Vcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9NTg1PXN0YXRpYyBuZXRkZXZfdHhfdCBtYWN2bGFuX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtNTkyLVx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzo1OTM6XHRcdHJldHVybiBtYWN2bGFuX25ldHBvbGxfc2VuZF9za2Iodmxhbiwgc2tiKTtcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01OTQtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE5NTM9c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk4Ni1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTg3Olx0cmV0dXJuIChpbnQpbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTg4LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaD05OT1zdGF0aWMgaW5saW5lIGJvb2wgdGVhbV9wb3J0X2Rldl90eGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTExMi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oOjExMzpzdGF0aWMgaW5saW5lIHZvaWQgdGVhbV9uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMTQtXHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTE1LXtcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oOjExNjpcdG5ldHBvbGxfc2VuZF9za2IocG9ydC1cdTAwM2VucCwgc2tiKTtcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTExNy19XG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMTgtI2Vsc2VcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oOjExOTpzdGF0aWMgaW5saW5lIHZvaWQgdGVhbV9uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMjAtXHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oPTIzNz1zdGF0aWMgaW5saW5lIGludCB0ZWFtX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCB0ZWFtICp0ZWFtLCBzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0LFxuLS1cbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTI0NS1cdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcobmV0ZGV2X2Zyb21fcHJpdih0ZWFtKSkpKSB7XG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaDoyNDY6XHRcdHRlYW1fbmV0cG9sbF9zZW5kX3NrYihwb3J0LCBza2IpO1xuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMjQ3LVx0XHRyZXR1cm4gMDtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaD03Mj12b2lkIGRvX25ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0cG9sbCAqbnApO1xuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6NzM6bmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9uZXRwb2xsLmgtNzQtdm9pZCBuZXRwb2xsX3phcF9jb21wbGV0aW9uX3F1ZXVlKHZvaWQpO1xuLS1cbmluY2x1ZGUvbmV0L2JvbmRpbmcuaD01NDg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYXZlX2xhc3RfdHgoc3RydWN0IHNsYXZlICpzbGF2ZSlcbi0tXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTUzLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjU1NDpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IGJvbmRfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1NS1cdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTU2LXtcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaDo1NTc6XHRyZXR1cm4gbmV0cG9sbF9zZW5kX3NrYihzbGF2ZS1cdTAwM2VucCwgc2tiKTtcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC01NTgtfVxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1OS0jZWxzZVxuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjU2MDpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IGJvbmRfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU2MS1cdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9NDY9c3RhdGljIGludCB2bGFuX2Rldl9oYXJkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jLTg5LVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6OTA6c3RhdGljIGlubGluZSBuZXRkZXZfdHhfdCB2bGFuX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4sIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvODAyMXEvdmxhbl9kZXYuYy05MS17XG5uZXQvODAyMXEvdmxhbl9kZXYuYy05Mi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbm5ldC84MDIxcS92bGFuX2Rldi5jOjkzOlx0cmV0dXJuIG5ldHBvbGxfc2VuZF9za2Iodmxhbi1cdTAwM2VuZXRwb2xsLCBza2IpO1xubmV0LzgwMjFxL3ZsYW5fZGV2LmMtOTQtI2Vsc2Vcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDA9c3RhdGljIG5ldGRldl90eF90IHZsYW5fZGV2X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jLTEyMy1cdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcoZGV2KSkpXG5uZXQvODAyMXEvdmxhbl9kZXYuYzoxMjQ6XHRcdHJldHVybiB2bGFuX25ldHBvbGxfc2VuZF9za2Iodmxhbiwgc2tiKTtcbm5ldC84MDIxcS92bGFuX2Rldi5jLTEyNS1cbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYz03Mz1zdGF0aWMgdm9pZCBfX2JyX2ZvcndhcmQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqdG8sXG4tLVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMTA2LVx0XHRcdGVsc2Vcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjEwNzpcdFx0XHRcdGJyX25ldHBvbGxfc2VuZF9za2IodG8sIHNrYik7XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xMDgtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTgwOT1uZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgxMC0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjgxMTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODEyLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MTMte1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6ODE0Olx0bmV0cG9sbF9zZW5kX3NrYihwLVx1MDAzZW5wLCBza2IpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODE1LX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD04MTg9dm9pZCBicl9uZXRwb2xsX2Rpc2FibGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MTktI2Vsc2Vcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjgyMDpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODIxLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jPTIzOT1zdGF0aWMgaW50IG5ldHBvbGxfb3duZXJfYWN0aXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTI1MC0vKiBjYWxsIHdpdGggSVJRIGRpc2FibGVkICovXG5uZXQvY29yZS9uZXRwb2xsLmM6MjUxOnN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvbmV0cG9sbC5jLTI1Mi17XG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTI5OS1cdFx0V0FSTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCksXG5uZXQvY29yZS9uZXRwb2xsLmM6MzAwOlx0XHRcdFwmIzM0O25ldHBvbGxfc2VuZF9za2Jfb25fZGV2KCk6ICVzIGVuYWJsZWQgaW50ZXJydXB0cyBpbiBwb2xsICglcFMpXFxuXCYjMzQ7LFxubmV0L2NvcmUvbmV0cG9sbC5jLTMwMS1cdFx0XHRkZXYtXHUwMDNlbmFtZSwgZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0YXJ0X3htaXQpO1xuLS1cbm5ldC9jb3JlL25ldHBvbGwuYy0zMTQtXG5uZXQvY29yZS9uZXRwb2xsLmM6MzE1Om5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvbmV0cG9sbC5jLTMxNi17XG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTMyNC1cdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xubmV0L2NvcmUvbmV0cG9sbC5jOjMyNTpcdFx0cmV0ID0gX19uZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xubmV0L2NvcmUvbmV0cG9sbC5jLTMyNi1cdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuLS1cbm5ldC9jb3JlL25ldHBvbGwuYy0zMjktfVxubmV0L2NvcmUvbmV0cG9sbC5jOjMzMDpFWFBPUlRfU1lNQk9MKG5ldHBvbGxfc2VuZF9za2IpO1xubmV0L2NvcmUvbmV0cG9sbC5jLTMzMS1cbi0tXG5uZXQvZHNhL3VzZXIuYz04MTk9c3RhdGljIGludCBkc2FfdXNlcl9wb3J0X29ial9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqY3R4LFxuLS1cbm5ldC9kc2EvdXNlci5jLTg2Ny1cbm5ldC9kc2EvdXNlci5jOjg2ODpzdGF0aWMgbmV0ZGV2X3R4X3QgZHNhX3VzZXJfbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2RzYS91c2VyLmMtODY5LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2RzYS91c2VyLmMtODczLVxubmV0L2RzYS91c2VyLmM6ODc0Olx0cmV0dXJuIG5ldHBvbGxfc2VuZF9za2IocC1cdTAwM2VuZXRwb2xsLCBza2IpO1xubmV0L2RzYS91c2VyLmMtODc1LSNlbHNlXG4tLVxubmV0L2RzYS91c2VyLmM9ODk1PW5ldGRldl90eF90IGRzYV9lbnF1ZXVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9kc2EvdXNlci5jLTkwMC1cdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcoZGV2KSkpXG5uZXQvZHNhL3VzZXIuYzo5MDE6XHRcdHJldHVybiBkc2FfdXNlcl9uZXRwb2xsX3NlbmRfc2tiKGRldiwgc2tiKTtcbm5ldC9kc2EvdXNlci5jLTkwMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MTgKCQkJCQkJCW91dHB1dDogMjQyCgkJCQkJCQl0aG91Z2h0czogMTE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBOZXRjb25zb2xlIGFuZCBOZXRwb2xsIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGltcGxpY2F0aW9ucyBmb3IgZnV6emluZyBqdW1wIG91dC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBuZXRwb2xsX3NlbmRfc2tiYCBsb29rZWQgbGlrZSBhIGNlbnRyYWwgcG9pbnQsIGNvbnNpZGVyaW5nIGl0cyB1c2UgYnkgdmFyaW91cyBkcml2ZXJzLiBIb3dldmVyLCB1cG9uIGNsb3NlciBpbnNwZWN0aW9uLCBJIHNlZSB0aGF0IGl0JiMzOTtzICpub3QqIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGhhbmRsaW5nIFNLQiBhbGxvY2F0aW9uIG9yIHBvb2wgbWFuYWdlbWVudC4gSXQmIzM5O3MganVzdCBhIHRyYW5zbWl0dGVyLiBUaGUga2V5IGxpZXMgaW4gYG5ldHBvbGxfc2VuZF91ZHBgLCB3aGljaCwgYXMgdGhlIGRpZmYgY2xlYXJseSBzaG93cywgd2FzIGFscmVhZHkgc3RhdGljIGFuZCBpcyBub3cgbW92ZWQgaW50byB0aGUgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3QsIGFsb25nIHdpdGggdGhlIGBza2JfcG9vbGAgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zIGxpa2UgYGZpbmRfc2tiYCBhbmQgYG5ldGNvbnNfc2tiX3BvcGAuCgpUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHNoaWZ0cyB0aGUgcmVzb3VyY2UgbWFuYWdlbWVudCBzcGVjaWZpY2FsbHkgdG8gYG5ldGNvbnNvbGUuY2AuIEVmZmVjdGl2ZWx5LCB0aGUgcGF0Y2ggaXMgcmVvcmdhbml6aW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMsIG1vdmluZyB0aGUgU0tCIHBvb2wgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gdGhlIGdlbmVyYWwgYG5ldHBvbGxgIGNvbnRleHQgdG8gYSBtb3JlIHNwZWNpZmljIGBuZXRjb25zb2xlX3RhcmdldGAgY29udGV4dC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgU0tCIHBvb2wgaXMgKm9ubHkqIHVzZWQgYnkgYG5ldGNvbnNvbGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLgoKR2l2ZW4gdGhpcywgSSBiZWxpZXZlIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gdGhlIGBuZXRjb25zb2xlYCBjb25maWd1cmF0aW9uIGFuZCB1c2FnZS4gVGhlIG1vc3QgcmVsZXZhbnQgc3ltYm9scyB0byB0YXJnZXQgYXJlIHRoZSBvbmVzIHJlbGF0ZWQgdG8gU0tCIHBvb2wgbWFuYWdlbWVudCwgc2VuZGluZyB0aGUgVURQIGRhdGFncmFtcywgdGFyZ2V0IHNldHVwL2NsZWFudXAsIGFuZCBjb25maWd1cmF0aW9uIHBhcnNpbmcuCgpNeSBpbml0aWFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBpbmNsdWRlcyBhIGNvbXByZWhlbnNpdmUgcmFuZ2Ugb2YgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBhbmQgcmVsZXZhbnQgZnVuY3Rpb25zOgoKKiAgIGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgCiogICBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAKKiAgIGByZWZpbGxfc2tic2AgJmFtcDsgYHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcmAKKiAgIGBuZXRjb25zX3NrYl9wb3BgCiogICBgZmluZF9za2JgCiogICBgcHVzaF91ZHBgCiogICBgcHVzaF9ldGhgCiogICBgbmV0cG9sbF9zZW5kX3VkcGAgJmFtcDsgYHNlbmRfdWRwYAoqICAgYHJlc3VtZV90YXJnZXRgCiogICBgcHJvY2Vzc19yZXN1bWVfdGFyZ2V0YAoqICAgYGFsbG9jX2FuZF9pbml0YAoqICAgYG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlYAoqICAgYG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyYAoqICAgYGVuYWJsZWRfc3RvcmVgCiogICBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGAKKiAgIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYAoqICAgYGFsbG9jX3BhcmFtX3RhcmdldGAKKiAgIGBmcmVlX3BhcmFtX3RhcmdldGAKKiAgIGBfX25ldHBvbGxfc2V0dXBgCiogICBgbmV0cG9sbF9zZXR1cGAKKiAgIGBfX25ldHBvbGxfY2xlYW51cGAKCkFmdGVyIHNvbWUgZnVydGhlciByZWZpbmVtZW50LCBhbmQgdG8gYXZvaWQgaW5jbHVkaW5nIHRvbyBtYW55IGdlbmVyaWMgZnVuY3Rpb25zLCBJIHdpbGwgcGFyZSB0aGUgbGlzdCBkb3duIHRvIHRoZXNlIGtleSBmdW5jdGlvbnM6CgoqICAgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdGAKKiAgIGBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoYAoqICAgYHJlZmlsbF9za2JzYAoqICAgYG5ldGNvbnNfc2tiX3BvcGAKKiAgIGBmaW5kX3NrYmAKKiAgIGBuZXRwb2xsX3NlbmRfdWRwYAoqICAgYGVuYWJsZWRfc3RvcmVgCiogICBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGAKKiAgIGBhbGxvY19wYXJhbV90YXJnZXRgCiogICBgZnJlZV9wYXJhbV90YXJnZXRgCiogICBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAKKiAgIGBfX25ldHBvbGxfc2V0dXBgCiogICBgbmV0cG9sbF9zZXR1cGAKKiAgIGBfX25ldHBvbGxfY2xlYW51cGAKClRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIHdpbGwgYmUgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGRlcGVuZGVuY2llcyBmb3IgZXhlcmNpc2luZyB0aGlzIGNvZGUuCgpUbyByZWNhcCwgdGhlIHBhdGNoIG1vdmVzIFNLQiBwb29sIG1hbmFnZW1lbnQgYW5kIHRhcmdldCBjb25maWd1cmF0aW9ucyBmcm9tIGBzdHJ1Y3QgbmV0cG9sbGAgdG8gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAsIG1vZGlmaWVzIGluaXRpYWxpemF0aW9uIGFuZCBmbHVzaGluZyBhbmQgdGhlIG5ldHBvbGwgc2V0dXAvY2xlYW51cCBwYXRocy4gVGh1cywgZnV6emluZyBzaG91bGQgY29uY2VudHJhdGUgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gY29uZmlndXJhdGlvbiwgcmVzb3VyY2UgbWFuYWdlbWVudCAoU0tCIHBvb2wpLCBhbmQgdGhlIHNlbmRpbmcgb2YgVURQIGRhdGFncmFtcy4gVGhlIHByaW1hcnkgdGFyZ2V0cyBhcmUgd2l0aGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGJ1dCBgbmV0L2NvcmUvbmV0cG9sbC5jYCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRjb25zb2xlX3NrYl9wb29sX2luaXQmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCYjMzQ7LAogICAgJiMzNDtyZWZpbGxfc2ticyYjMzQ7LAogICAgJiMzNDtuZXRjb25zX3NrYl9wb3AmIzM0OywKICAgICYjMzQ7ZmluZF9za2ImIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZW5kX3VkcCYjMzQ7LAogICAgJiMzNDtlbmFibGVkX3N0b3JlJiMzNDssCiAgICAmIzM0O2Ryb3BfbmV0Y29uc29sZV90YXJnZXQmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFyYW1fdGFyZ2V0JiMzNDssCiAgICAmIzM0O2ZyZWVfcGFyYW1fdGFyZ2V0JiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUmIzM0OywKICAgICYjMzQ7X19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7X19uZXRwb2xsX2NsZWFudXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIFNLQiBwb29sIGFuZCB0YXJnZXQgY29uZmlndXJhdGlvbiAocG9ydHMsIE1BQykgZnJvbSBgc3RydWN0IG5ldHBvbGxgIHRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLiBJdCBtb2RpZmllcyBob3cgbmV0Y29uc29sZSBpbml0aWFsaXplcyBhbmQgZmx1c2hlcyB0aGUgU0tCIHBvb2wsIGFuZCB1cGRhdGVzIHRoZSBuZXRwb2xsIHNldHVwL2NsZWFudXAgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbmV0Y29uc29sZSBkcml2ZXIgYW5kIG5ldHBvbGwgY29yZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgdmlhIGNvbmZpZ2ZzIG9yIG1vZHVsZSBwYXJhbWV0ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdCYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoJiMzNDssCiAgICAmIzM0O3JlZmlsbF9za2JzJiMzNDssCiAgICAmIzM0O25ldGNvbnNfc2tiX3BvcCYjMzQ7LAogICAgJiMzNDtmaW5kX3NrYiYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NlbmRfdWRwJiMzNDssCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7ZHJvcF9uZXRjb25zb2xlX3RhcmdldCYjMzQ7LAogICAgJiMzNDthbGxvY19wYXJhbV90YXJnZXQmIzM0OywKICAgICYjMzQ7ZnJlZV9wYXJhbV90YXJnZXQmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtfX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZXR1cCYjMzQ7LAogICAgJiMzNDtfX25ldHBvbGxfY2xlYW51cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgU0tCIHBvb2wgYW5kIHRhcmdldCBjb25maWd1cmF0aW9uIChwb3J0cywgTUFDKSBmcm9tIGBzdHJ1Y3QgbmV0cG9sbGAgdG8gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAuIEl0IG1vZGlmaWVzIGhvdyBuZXRjb25zb2xlIGluaXRpYWxpemVzIGFuZCBmbHVzaGVzIHRoZSBTS0IgcG9vbCwgYW5kIHVwZGF0ZXMgdGhlIG5ldHBvbGwgc2V0dXAvY2xlYW51cCBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBuZXRjb25zb2xlIGRyaXZlciBhbmQgbmV0cG9sbCBjb3JlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCB2aWEgY29uZmlnZnMgb3IgbW9kdWxlIHBhcmFtZXRlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjowMDo1NS44MzUwNTAyMjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk1ODc2MDQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRjb25zb2xlX3NrYl9wb29sX2luaXRcIixcbiAgICBcIm5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hcIixcbiAgICBcInJlZmlsbF9za2JzXCIsXG4gICAgXCJuZXRjb25zX3NrYl9wb3BcIixcbiAgICBcImZpbmRfc2tiXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJkcm9wX25ldGNvbnNvbGVfdGFyZ2V0XCIsXG4gICAgXCJhbGxvY19wYXJhbV90YXJnZXRcIixcbiAgICBcImZyZWVfcGFyYW1fdGFyZ2V0XCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJfX25ldHBvbGxfc2V0dXBcIixcbiAgICBcIm5ldHBvbGxfc2V0dXBcIixcbiAgICBcIl9fbmV0cG9sbF9jbGVhbnVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIFNLQiBwb29sIGFuZCB0YXJnZXQgY29uZmlndXJhdGlvbiAocG9ydHMsIE1BQykgZnJvbSBgc3RydWN0IG5ldHBvbGxgIHRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLiBJdCBtb2RpZmllcyBob3cgbmV0Y29uc29sZSBpbml0aWFsaXplcyBhbmQgZmx1c2hlcyB0aGUgU0tCIHBvb2wsIGFuZCB1cGRhdGVzIHRoZSBuZXRwb2xsIHNldHVwL2NsZWFudXAgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbmV0Y29uc29sZSBkcml2ZXIgYW5kIG5ldHBvbGwgY29yZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgdmlhIGNvbmZpZ2ZzIG9yIG1vZHVsZSBwYXJhbWV0ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjowMDo1NS44MzUwNTQ0ODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MDg3MjY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdkNmJmODQwYmY3NDhiYjRlMmMxYmVjOTQyMGUwNjMyNjVkODRlMDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMiAxNjowMDo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG5pbmRleCBjMTgxMmE5ODM2NWI3OC4uZTM2YjA5OThjODEwOTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuQEAgLTYxLDYgKzYxLDE5IEBAIE1PRFVMRV9JTVBPUlRfTlMoXFxcIk5FVERFVl9JTlRFUk5BTFxcXCIpO1xcbiAjZGVmaW5lIE1BWF9VU0VSREFUQV9JVEVNU1xcdFxcdDI1NlxcbiAjZGVmaW5lIE1BWF9QUklOVF9DSFVOS1xcdFxcdFxcdDEwMDBcXG4gXFxuKy8qXFxuKyAqIFNpemluZyBmb3IgdGhlIHBlci10YXJnZXQgZmFsbGJhY2sgc2tiIHBvb2wgY29uc3VsdGVkIGJ5IGZpbmRfc2tiKClcXG4rICogd2hlbiBpdHMgR0ZQX0FUT01JQyBhbGxvY2F0aW9uIGZhaWxzIHNvIG1lc3NhZ2VzIHN0aWxsIGdldCBvdXQgdW5kZXJcXG4rICogbWVtb3J5IHByZXNzdXJlLlxcbisgKi9cXG4rI2RlZmluZSBNQVhfVURQX0NIVU5LXFx0XFx0XFx0MTQ2MFxcbisjZGVmaW5lIE1BWF9TS0JTXFx0XFx0XFx0MzJcXG4rI2RlZmluZSBNQVhfU0tCX1NJWkVcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdChzaXplb2Yoc3RydWN0IGV0aGhkcikgK1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0IHNpemVvZihzdHJ1Y3QgaXBoZHIpICtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgK1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0IE1BWF9VRFBfQ0hVTkspXFxuK1xcbiBzdGF0aWMgY2hhciBjb25maWdbTUFYX1BBUkFNX0xFTkdUSF07XFxuIG1vZHVsZV9wYXJhbV9zdHJpbmcobmV0Y29uc29sZSwgY29uZmlnLCBNQVhfUEFSQU1fTEVOR1RILCAwKTtcXG4gTU9EVUxFX1BBUk1fREVTQyhuZXRjb25zb2xlLCBcXFwiIG5ldGNvbnNvbGU9W3NyYy1wb3J0XUBbc3JjLWlwXS9bZGV2XSxbdGd0LXBvcnRdQFxcdTAwM2N0Z3QtaXBcXHUwMDNlL1t0Z3QtbWFjYWRkcl1cXFwiKTtcXG5AQCAtMTYyLDE0ICsxNzUsMTkgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xcbiAgKiBAbnA6XFx0XFx0VGhlIG5ldHBvbGwgc3RydWN0dXJlIGZvciB0aGlzIHRhcmdldC5cXG4gICpcXHRcXHRDb250YWlucyB0aGUgb3RoZXIgdXNlcnNwYWNlIHZpc2libGUgcGFyYW1ldGVyczpcXG4gICpcXHRcXHRkZXZfbmFtZVxcdChyZWFkLXdyaXRlKVxcbi0gKlxcdFxcdGxvY2FsX3BvcnRcXHQocmVhZC13cml0ZSlcXG4tICpcXHRcXHRyZW1vdGVfcG9ydFxcdChyZWFkLXdyaXRlKVxcbiAgKlxcdFxcdGxvY2FsX2lwXFx0KHJlYWQtd3JpdGUpXFxuICAqXFx0XFx0cmVtb3RlX2lwXFx0KHJlYWQtd3JpdGUpXFxuICAqXFx0XFx0bG9jYWxfbWFjXFx0KHJlYWQtb25seSlcXG4tICpcXHRcXHRyZW1vdGVfbWFjXFx0KHJlYWQtd3JpdGUpXFxuKyAqIEBsb2NhbF9wb3J0OlxcdFNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cXG4rICogQHJlbW90ZV9wb3J0OiBEZXN0aW5hdGlvbiBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cXG4rICogQHJlbW90ZV9tYWM6XFx0RGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cXG4gICogQGJ1ZjpcXHRUaGUgYnVmZmVyIHVzZWQgdG8gc2VuZCB0aGUgZnVsbCBtc2cgdG8gdGhlIG5ldHdvcmsgc3RhY2tcXG4gICogQHJlc3VtZV93cTpcXHRXb3JrcXVldWUgdG8gcmVzdW1lIGRlYWN0aXZhdGVkIHRhcmdldFxcbisgKiBAc2tiX3Bvb2w6XFx0UGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKSB3aGVuXFxuKyAqXFx0XFx0aXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscy4gTGlmZXRpbWUgYnJhY2tldHMgYVxcbisgKlxcdFxcdHN1Y2Nlc3NmdWwgbmV0cG9sbF9zZXR1cCgpIC8gbmV0cG9sbF9jbGVhbnVwKCkgcGFpciBvbiBAbnAuXFxuKyAqIEByZWZpbGxfd3E6XFx0V29yayBpdGVtIHRoYXQgYXN5bmNocm9ub3VzbHkgdG9wcyBAc2tiX3Bvb2wgYmFjayB1cCB0b1xcbisgKlxcdFxcdE1BWF9TS0JTIGFmdGVyIGZpbmRfc2tiKCkgZHJhaW5zIGFuIGVudHJ5LlxcbiAgKi9cXG4gc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuQEAgLTE5MCwxMSArMjA4LDE1IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XFxuIFxcdGJvb2xcXHRcXHRcXHRleHRlbmRlZDtcXG4gXFx0Ym9vbFxcdFxcdFxcdHJlbGVhc2U7XFxuIFxcdHN0cnVjdCBuZXRwb2xsXFx0XFx0bnA7XFxuK1xcdHUxNlxcdFxcdFxcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbitcXHR1OFxcdFxcdFxcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xcbiBcXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgKzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzXFxuIFxcdCAqIE5VTCB0ZXJtaW5hdG9yIHNvIGEgZnVsbCBNQVhfUFJJTlRfQ0hVTksgcGF5bG9hZCBpcyBub3QgdHJ1bmNhdGVkXFxuIFxcdCAqL1xcbiBcXHRjaGFyXFx0XFx0XFx0YnVmW01BWF9QUklOVF9DSFVOSyArIDFdO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRyZXN1bWVfd3E7XFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWRcXHRza2JfcG9vbDtcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0cmVmaWxsX3dxO1xcbiB9O1xcbiBcXG4gI2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbkBAIC0yOTIsMTEgKzMxNCw1OCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zX3JlbGVhc2VfZGV2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIFxcdFxcdG1lbXNldChcXHUwMDI2bnQtXFx1MDAzZW5wLmRldl9uYW1lLCAwLCBJRk5BTVNJWik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJlZmlsbF9za2JzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqc2tiX3Bvb2wgPSBcXHUwMDI2bnQtXFx1MDAzZXNrYl9wb29sO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXG4rXFx0d2hpbGUgKFJFQURfT05DRShza2JfcG9vbC1cXHUwMDNlcWxlbikgXFx1MDAzYyBNQVhfU0tCUykge1xcbitcXHRcXHRza2IgPSBhbGxvY19za2IoTUFYX1NLQl9TSVpFLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0c2tiX3F1ZXVlX3RhaWwoc2tiX3Bvb2wsIHNrYik7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCwgcmVmaWxsX3dxKTtcXG4rXFxuK1xcdHJlZmlsbF9za2JzKG50KTtcXG4rfVxcbitcXG4rLyogSW5pdGlhbGlzZSB0aGUgcGVyLXRhcmdldCBza2IgcG9vbCB0aGF0IGZpbmRfc2tiKCkgZmFsbHMgYmFjayB0byBhbmRcXG4rICogc2VlZCBpdC4gUGFpciB3aXRoIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBhdCB0aGUgbWF0Y2hpbmdcXG4rICogbmV0cG9sbCB0ZWFyZG93bi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbit7XFxuK1xcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNm50LVxcdTAwM2Vza2JfcG9vbCk7XFxuK1xcdElOSVRfV09SSyhcXHUwMDI2bnQtXFx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcXG4rXFx0cmVmaWxsX3NrYnMobnQpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuK3tcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bnQtXFx1MDAzZXJlZmlsbF93cSk7XFxuK1xcdHNrYl9xdWV1ZV9wdXJnZV9yZWFzb24oXFx1MDAyNm50LVxcdTAwM2Vza2JfcG9vbCwgU0tCX0NPTlNVTUVEKTtcXG4rfVxcbitcXG4gLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXFxuIHN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4ge1xcbitcXHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIG1ha2VzIG50LVxcdTAwM2VucC5kZXZcXG4rXFx0ICogdmlzaWJsZSB0byB0YXJnZXRfbGlzdCB3YWxrZXJzIChlLmcuIG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSxcXG4rXFx0ICogd2hpY2ggb3RoZXJ3aXNlIG1heSBtb3ZlIHRoZSB0YXJnZXQgdG8gdGhlIGNsZWFudXAgbGlzdCBhbmRcXG4rXFx0ICogY2FsbCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkgb24gdW5pbml0aWFsaXNlZCBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XFxuK1xcbiBcXHRpZiAobmV0cG9sbF9zZXR1cChcXHUwMDI2bnQtXFx1MDAzZW5wKSkge1xcbiBcXHRcXHQvKiBuZXRwb2xsIGZhaWxzIHNldHVwIG9uY2UsIGRvIG5vdCB0cnkgYWdhaW4uICovXFxuK1xcdFxcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xcbiBcXHRcXHRudC1cXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuQEAgLTM1OCw2ICs0MjcsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRydG5sX2xvY2soKTtcXG4gXFx0aWYgKG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEIFxcdTAwMjZcXHUwMDI2IG50LVxcdTAwM2VucC5kZXYgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIG50LVxcdTAwM2VucC5kZXYtXFx1MDAzZXJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkge1xcbitcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG4gXFx0XFx0bmV0Y29uc19yZWxlYXNlX2RldihudCk7XFxuIFxcdFxcdG50LVxcdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xcbiBcXHR9XFxuQEAgLTM5Myw5ICs0NjMsOSBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxcbiBcXG4gXFx0bnQtXFx1MDAzZW5wLm5hbWUgPSBcXFwibmV0Y29uc29sZVxcXCI7XFxuIFxcdHN0cnNjcHkobnQtXFx1MDAzZW5wLmRldl9uYW1lLCBcXFwiZXRoMFxcXCIsIElGTkFNU0laKTtcXG4tXFx0bnQtXFx1MDAzZW5wLmxvY2FsX3BvcnQgPSA2NjY1O1xcbi1cXHRudC1cXHUwMDNlbnAucmVtb3RlX3BvcnQgPSA2NjY2O1xcbi1cXHRldGhfYnJvYWRjYXN0X2FkZHIobnQtXFx1MDAzZW5wLnJlbW90ZV9tYWMpO1xcbitcXHRudC1cXHUwMDNlbG9jYWxfcG9ydCA9IDY2NjU7XFxuK1xcdG50LVxcdTAwM2VyZW1vdGVfcG9ydCA9IDY2NjY7XFxuK1xcdGV0aF9icm9hZGNhc3RfYWRkcihudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuIFxcdG50LVxcdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNm50LVxcdTAwM2VyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7XFxuIFxcbkBAIC00MTcsNiArNDg3LDcgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG50LCB0bXAsIFxcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0LCBsaXN0KSB7XFxuIFxcdFxcdC8qIGFsbCBlbnRyaWVzIGluIHRoZSBjbGVhbnVwX2xpc3QgbmVlZHMgdG8gYmUgZGlzYWJsZWQgKi9cXG4gXFx0XFx0V0FSTl9PTl9PTkNFKG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKTtcXG4rXFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XFxuIFxcdFxcdG5ldGNvbnNfcmVsZWFzZV9kZXYobnQpO1xcbiBcXHRcXHQvKiBtb3ZlZCB0aGUgY2xlYW5lZCB0YXJnZXQgdG8gdGFyZ2V0X2xpc3QuIE5lZWQgdG8gaG9sZCBib3RoXFxuIFxcdFxcdCAqIGxvY2tzXFxuQEAgLTQyOSwyMSArNTAwLDIzIEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKHZvaWQpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldHBvbGwgKm5wKVxcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiB7XFxuLVxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBwb3J0ICVkXFxcXG5cXFwiLCBucC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuK1xcdHN0cnVjdCBuZXRwb2xsICpucCA9IFxcdTAwMjZudC1cXHUwMDNlbnA7XFxuK1xcbitcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgcG9ydCAlZFxcXFxuXFxcIiwgbnQtXFx1MDAzZWxvY2FsX3BvcnQpO1xcbiBcXHRpZiAobnAtXFx1MDAzZWlwdjYpXFxuIFxcdFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcXFxcblxcXCIsIFxcdTAwMjZucC1cXHUwMDNlbG9jYWxfaXAuaW42KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcXFxcblxcXCIsIFxcdTAwMjZucC1cXHUwMDNlbG9jYWxfaXAuaXApO1xcbiBcXHRucF9pbmZvKG5wLCBcXFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcXFxuXFxcIiwgbnAtXFx1MDAzZWRldl9uYW1lKTtcXG4gXFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIGV0aGVybmV0IGFkZHJlc3MgJyVwTSdcXFxcblxcXCIsIG5wLVxcdTAwM2VkZXZfbWFjKTtcXG4tXFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBwb3J0ICVkXFxcXG5cXFwiLCBucC1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbitcXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIHBvcnQgJWRcXFxcblxcXCIsIG50LVxcdTAwM2VyZW1vdGVfcG9ydCk7XFxuIFxcdGlmIChucC1cXHUwMDNlaXB2NilcXG4gXFx0XFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcXFxcblxcXCIsIFxcdTAwMjZucC1cXHUwMDNlcmVtb3RlX2lwLmluNik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBJUHY0IGFkZHJlc3MgJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm5wLVxcdTAwM2VyZW1vdGVfaXAuaXApO1xcbi1cXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxcXG5cXFwiLCBucC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuK1xcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXFxcblxcXCIsIG50LVxcdTAwM2VyZW1vdGVfbWFjKTtcXG4gfVxcbiBcXG4gLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzXFxuQEAgLTU2MSwxMiArNjM0LDEyIEBAIHN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuIFxcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuIHtcXG4tXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIHRvX3RhcmdldChpdGVtKS1cXHUwMDNlbnAubG9jYWxfcG9ydCk7XFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVkXFxcXG5cXFwiLCB0b190YXJnZXQoaXRlbSktXFx1MDAzZWxvY2FsX3BvcnQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbiB7XFxuLVxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVkXFxcXG5cXFwiLCB0b190YXJnZXQoaXRlbSktXFx1MDAzZW5wLnJlbW90ZV9wb3J0KTtcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIHRvX3RhcmdldChpdGVtKS1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbkBAIC01OTksNyArNjcyLDcgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuIFxcbiBzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuIHtcXG4tXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBNXFxcXG5cXFwiLCB0b190YXJnZXQoaXRlbSktXFx1MDAzZW5wLnJlbW90ZV9tYWMpO1xcbitcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlcE1cXFxcblxcXCIsIHRvX3RhcmdldChpdGVtKS1cXHUwMDNlcmVtb3RlX21hYyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbkBAIC03NTYsMTEgKzgyOSwyMSBAQCBzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4gXFx0XFx0ICogU2tpcCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKCkgLS0gYWxsIHRoZSBhdHRyaWJ1dGVzIGFyZVxcbiBcXHRcXHQgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgdmlhIGNvbmZpZ2ZzLiBKdXN0IHByaW50IHRoZW0gb3V0LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0bmV0Y29uc29sZV9wcmludF9iYW5uZXIoXFx1MDAyNm50LVxcdTAwM2VucCk7XFxuK1xcdFxcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTtcXG4rXFxuK1xcdFxcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2xcXG4rXFx0XFx0ICogaXMgdmFsaWQgYXMgc29vbiBhcyBudC1cXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZSB0b1xcbitcXHRcXHQgKiB0YXJnZXRfbGlzdCB3YWxrZXJzIChuZXRjb25zb2xlX25ldGRldl9ldmVudCksIHdoaWNoIHdvdWxkXFxuK1xcdFxcdCAqIG90aGVyd2lzZSBjYWxsIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBvbiB1bmluaXRpYWxpc2VkXFxuK1xcdFxcdCAqIHN0YXRlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcXG4gXFxuIFxcdFxcdHJldCA9IG5ldHBvbGxfc2V0dXAoXFx1MDAyNm50LVxcdTAwM2VucCk7XFxuLVxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0bnQtXFx1MDAzZXN0YXRlID0gU1RBVEVfRU5BQkxFRDtcXG4gXFx0XFx0cHJfaW5mbyhcXFwibmV0d29yayBsb2dnaW5nIHN0YXJ0ZWRcXFxcblxcXCIpO1xcbkBAIC04ODUsNyArOTY4LDcgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXFx1MDAyNm50LVxcdTAwM2VucC5sb2NhbF9wb3J0KTtcXG4rXFx0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdHJldCA9IGNvdW50O1xcbkBAIC05MDcsNyArOTkwLDcgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCBcXHUwMDI2bnQtXFx1MDAzZW5wLnJlbW90ZV9wb3J0KTtcXG4rXFx0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHRyZXQgPSBjb3VudDtcXG5AQCAtOTk0LDcgKzEwNzcsNyBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdGlmIChidWZbTUFDX0FERFJfU1RSX0xFTl0gXFx1MDAyNlxcdTAwMjYgYnVmW01BQ19BRERSX1NUUl9MRU5dICE9ICdcXFxcbicpXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4tXFx0bWVtY3B5KG50LVxcdTAwM2VucC5yZW1vdGVfbWFjLCByZW1vdGVfbWFjLCBFVEhfQUxFTik7XFxuK1xcdG1lbWNweShudC1cXHUwMDNlcmVtb3RlX21hYywgcmVtb3RlX21hYywgRVRIX0FMRU4pO1xcbiBcXG4gXFx0cmV0ID0gY291bnQ7XFxuIG91dF91bmxvY2s6XFxuQEAgLTE1MTQsOCArMTU5NywxMCBAQCBzdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbiBcXHQgKiBuZXRwb2xsX2NsZWFudXAoKSBpcyBpZGVtcG90ZW50IChpdCBza2lwcyB3aGVuIG5wLVxcdTAwM2VkZXYgaXMgTlVMTCksIHNvXFxuIFxcdCAqIGl0IGlzIHNhZmUgZXZlbiBpZiB0aGUgY2xlYW51cCB3b3JrZXIgYWxyZWFkeSB0b3JlIHRoZSBuZXRwb2xsIGRvd24uXFxuIFxcdCAqL1xcbi1cXHRpZiAobmVlZHNfY2xlYW51cClcXG4rXFx0aWYgKG5lZWRzX2NsZWFudXApIHtcXG4rXFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XFxuIFxcdFxcdG5ldHBvbGxfY2xlYW51cChcXHUwMDI2bnQtXFx1MDAzZW5wKTtcXG4rXFx0fVxcbiBcXG4gXFx0Y29uZmlnX2l0ZW1fcHV0KFxcdTAwMjZudC1cXHUwMDNlZ3JvdXAuY2dfaXRlbSk7XFxuIH1cXG5AQCAtMTcwNiw3ICsxNzkxLDcgQEAgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBuZXRjb25zb2xlX25ldGRldl9ub3RpZmllciA9IHtcXG4gICogcG9vbCBsb2NrcyBhbmQgaXMgdGhlcmVmb3JlIG5vdCBOTUktc2FmZS4gU2tpcCB0aGUgcmVmaWxsIHdoZW4gY2FsbGVkXFxuICAqIGZyb20gTk1JIGNvbnRleHQ7IHRoZSBuZXh0IG5vbi1OTUkgY2FsbGVyIHdpbGwgdG9wIHRoZSBwb29sIGJhY2sgdXAuXFxuICAqL1xcbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXFxuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y29uc19za2JfcG9wKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4pXFxuIHtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFxuQEAgLTE3MTgsMTkgKzE4MDMsMjEgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuKVxcbiBcXHRcXHRpZiAoIWluX25taSgpKVxcbiBcXHRcXHRcXHRuZXRfd2Fybl9yYXRlbGltaXRlZChcXFwibmV0Y29uc29sZTogZHJvcHBpbmcgbWVzc2FnZSwgcmVxdWVzdGVkIHNrYiBsZW4gJWQgZXhjZWVkcyBwb29sIGJ1ZmZlciBzaXplICV6dSBvbiAlc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBsZW4sIChzaXplX3QpTUFYX1NLQl9TSVpFLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIG5wLVxcdTAwM2VkZXYtXFx1MDAzZW5hbWUpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgIG50LVxcdTAwM2VucC5kZXYtXFx1MDAzZW5hbWUpO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0c2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNm5wLVxcdTAwM2Vza2JfcG9vbCk7XFxuK1xcdHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZudC1cXHUwMDNlc2tiX3Bvb2wpO1xcbiBcXHRpZiAoIWluX25taSgpKVxcbi1cXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZucC1cXHUwMDNlcmVmaWxsX3dxKTtcXG4rXFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bnQtXFx1MDAzZXJlZmlsbF93cSk7XFxuIFxcbiBcXHRyZXR1cm4gc2tiO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgaW50IGxlbiwgaW50IHJlc2VydmUpXFxuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbixcXG4rXFx0XFx0XFx0XFx0aW50IHJlc2VydmUpXFxuIHtcXG4rXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4gXFx0aW50IGNvdW50ID0gMDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFxuQEAgLTE3MzksNyArMTgyNiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSlcXG4gXFxuIFxcdHNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xcbiBcXHRpZiAoIXNrYilcXG4tXFx0XFx0c2tiID0gbmV0Y29uc19za2JfcG9wKG5wLCBsZW4pO1xcbitcXHRcXHRza2IgPSBuZXRjb25zX3NrYl9wb3AobnQsIGxlbik7XFxuIFxcbiBcXHRpZiAoIXNrYikge1xcbiBcXHRcXHRpZiAoKytjb3VudCBcXHUwMDNjIDEwKSB7XFxuQEAgLTE3NzksOCArMTg2Niw5IEBAIHN0YXRpYyB2b2lkIG5ldHBvbGxfdWRwX2NoZWNrc3VtKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0dWRwaC1cXHUwMDNlY2hlY2sgPSBDU1VNX01BTkdMRURfMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxcbitzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxcbiB7XFxuK1xcdHN0cnVjdCBuZXRwb2xsICpucCA9IFxcdTAwMjZudC1cXHUwMDNlbnA7XFxuIFxcdHN0cnVjdCB1ZHBoZHIgKnVkcGg7XFxuIFxcdGludCB1ZHBfbGVuO1xcbiBcXG5AQCAtMTc5MCwyMSArMTg3OCwyMiBAQCBzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuIFxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIFxcbiBcXHR1ZHBoID0gdWRwX2hkcihza2IpO1xcbi1cXHR1ZHBoLVxcdTAwM2Vzb3VyY2UgPSBodG9ucyhucC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuLVxcdHVkcGgtXFx1MDAzZWRlc3QgPSBodG9ucyhucC1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbitcXHR1ZHBoLVxcdTAwM2Vzb3VyY2UgPSBodG9ucyhudC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuK1xcdHVkcGgtXFx1MDAzZWRlc3QgPSBodG9ucyhudC1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbiBcXHR1ZHBoLVxcdTAwM2VsZW4gPSBodG9ucyh1ZHBfbGVuKTtcXG4gXFxuIFxcdG5ldHBvbGxfdWRwX2NoZWNrc3VtKG5wLCBza2IsIGxlbik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbitcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbiBcXHRzdHJ1Y3QgZXRoaGRyICpldGg7XFxuIFxcbiBcXHRldGggPSBza2JfcHVzaChza2IsIEVUSF9ITEVOKTtcXG4gXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9zb3VyY2UsIG5wLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4tXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9kZXN0LCBucC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuK1xcdGV0aGVyX2FkZHJfY29weShldGgtXFx1MDAzZWhfZGVzdCwgbnQtXFx1MDAzZXJlbW90ZV9tYWMpO1xcbiBcXHRpZiAobnAtXFx1MDAzZWlwdjYpXFxuIFxcdFxcdGV0aC1cXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbiBcXHRlbHNlXFxuQEAgLTE4NjEsOCArMTk1MCwxMCBAQCBzdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxcbiBcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG4rc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcXG4rXFx0XFx0XFx0ICAgIGludCBsZW4pXFxuIHtcXG4rXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4gXFx0aW50IHRvdGFsX2xlbiwgaXBfbGVuLCB1ZHBfbGVuO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXG5AQCAtMTg3Nyw3ICsxOTY4LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxcbiBcXG4gXFx0dG90YWxfbGVuID0gaXBfbGVuICsgTExfUkVTRVJWRURfU1BBQ0UobnAtXFx1MDAzZWRldik7XFxuIFxcbi1cXHRza2IgPSBmaW5kX3NrYihucCwgdG90YWxfbGVuICsgbnAtXFx1MDAzZWRldi1cXHUwMDNlbmVlZGVkX3RhaWxyb29tLFxcbitcXHRza2IgPSBmaW5kX3NrYihudCwgdG90YWxfbGVuICsgbnAtXFx1MDAzZWRldi1cXHUwMDNlbmVlZGVkX3RhaWxyb29tLFxcbiBcXHRcXHQgICAgICAgdG90YWxfbGVuIC0gbGVuKTtcXG4gXFx0aWYgKCFza2IpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC0xODg1LDEyICsxOTc2LDEyIEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG4gXFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBtc2csIGxlbik7XFxuIFxcdHNrYl9wdXQoc2tiLCBsZW4pO1xcbiBcXG4tXFx0cHVzaF91ZHAobnAsIHNrYiwgbGVuKTtcXG4rXFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcXG4gXFx0aWYgKG5wLVxcdTAwM2VpcHY2KVxcbiBcXHRcXHRwdXNoX2lwdjYobnAsIHNrYiwgbGVuKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRwdXNoX2lwdjQobnAsIHNrYiwgbGVuKTtcXG4tXFx0cHVzaF9ldGgobnAsIHNrYik7XFxuK1xcdHB1c2hfZXRoKG50LCBza2IpO1xcbiBcXHRza2ItXFx1MDAzZWRldiA9IG5wLVxcdTAwM2VkZXY7XFxuIFxcbiBcXHRyZXR1cm4gKGludCluZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xcbkBAIC0xOTA4LDcgKzE5OTksNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuIHtcXG4tXFx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAoXFx1MDAyNm50LVxcdTAwM2VucCwgbXNnLCBsZW4pO1xcbitcXHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xcbiBcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpIHtcXG4gXFx0XFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XFxuQEAgLTIyMDMsOCArMjI5NCw5IEBAIF9fcmVsZWFzZXMoXFx1MDAyNnRhcmdldF9saXN0X2xvY2spXFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxcbitzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxcbiB7XFxuK1xcdHN0cnVjdCBuZXRwb2xsICpucCA9IFxcdTAwMjZudC1cXHUwMDNlbnA7XFxuIFxcdGJvb2wgaXB2ZXJzaW9uX3NldCA9IGZhbHNlO1xcbiBcXHRjaGFyICpjdXIgPSBvcHQ7XFxuIFxcdGNoYXIgKmRlbGltO1xcbkBAIC0yMjE1LDcgKzIzMDcsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXFxuIFxcdFxcdGlmICghZGVsaW0pXFxuIFxcdFxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbiBcXHRcXHQqZGVsaW0gPSAwO1xcbi1cXHRcXHRpZiAoa3N0cnRvdTE2KGN1ciwgMTAsIFxcdTAwMjZucC1cXHUwMDNlbG9jYWxfcG9ydCkpXFxuK1xcdFxcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9wb3J0KSlcXG4gXFx0XFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuIFxcdFxcdGN1ciA9IGRlbGltO1xcbiBcXHR9XFxuQEAgLTIyNjIsNyArMjM1NCw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcXG4gXFx0XFx0KmRlbGltID0gMDtcXG4gXFx0XFx0aWYgKCpjdXIgPT0gJyAnIHx8ICpjdXIgPT0gJ1xcXFx0JylcXG4gXFx0XFx0XFx0bnBfaW5mbyhucCwgXFxcIndhcm5pbmc6IHdoaXRlc3BhY2UgaXMgbm90IGFsbG93ZWRcXFxcblxcXCIpO1xcbi1cXHRcXHRpZiAoa3N0cnRvdTE2KGN1ciwgMTAsIFxcdTAwMjZucC1cXHUwMDNlcmVtb3RlX3BvcnQpKVxcbitcXHRcXHRpZiAoa3N0cnRvdTE2KGN1ciwgMTAsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX3BvcnQpKVxcbiBcXHRcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4gXFx0XFx0Y3VyID0gZGVsaW07XFxuIFxcdH1cXG5AQCAtMjI4NCwxMSArMjM3NiwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXFxuIFxcbiBcXHRpZiAoKmN1ciAhPSAwKSB7XFxuIFxcdFxcdC8qIE1BQyBhZGRyZXNzICovXFxuLVxcdFxcdGlmICghbWFjX3B0b24oY3VyLCBucC1cXHUwMDNlcmVtb3RlX21hYykpXFxuK1xcdFxcdGlmICghbWFjX3B0b24oY3VyLCBudC1cXHUwMDNlcmVtb3RlX21hYykpXFxuIFxcdFxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbiBcXHR9XFxuIFxcbi1cXHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihucCk7XFxuK1xcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMjMyNiwxNCArMjQxOCwyMiBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcXG4gXFx0fVxcbiBcXG4gXFx0LyogUGFyc2UgcGFyYW1ldGVycyBhbmQgc2V0dXAgbmV0cG9sbCAqL1xcbi1cXHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKFxcdTAwMjZudC1cXHUwMDNlbnAsIHRhcmdldF9jb25maWcpO1xcbitcXHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKG50LCB0YXJnZXRfY29uZmlnKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBmYWlsO1xcbiBcXG4rXFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbCBpc1xcbitcXHQgKiB2YWxpZCBhcyBzb29uIGFzIG50LVxcdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlLiBUaGUgdGFyZ2V0IGlzIG5vdFxcbitcXHQgKiB5ZXQgb24gdGFyZ2V0X2xpc3QsIHNvIGEgbmV0ZGV2IGV2ZW50IGNhbm5vdCByZWFjaCBpdCBoZXJlLCBidXRcXG4rXFx0ICogbWlycm9yIHRoZSBjb25maWdmcyBwYXRoIGZvciBzeW1tZXRyeS5cXG4rXFx0ICovXFxuK1xcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XFxuK1xcbiBcXHRlcnIgPSBuZXRwb2xsX3NldHVwKFxcdTAwMjZudC1cXHUwMDNlbnApO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdHByX2VycihcXFwiTm90IGVuYWJsaW5nIG5ldGNvbnNvbGUgZm9yICVzJWQuIE5ldHBvbGwgc2V0dXAgZmFpbGVkXFxcXG5cXFwiLFxcbiBcXHRcXHQgICAgICAgTkVUQ09OU09MRV9QQVJBTV9UQVJHRVRfUFJFRklYLCBjbWRsaW5lX2NvdW50KTtcXG4rXFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XFxuIFxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSlcXG4gXFx0XFx0XFx0Lyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCxcXG4gXFx0XFx0XFx0ICogb3RoZXJ3aXNlLCBrZWVwIHRoZSB0YXJnZXQgaW4gdGhlIGxpc3QsIGJ1dCBkaXNhYmxlZC5cXG5AQCAtMjM1NSw2ICsyNDU1LDggQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuIHN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIHtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bnQtXFx1MDAzZXJlc3VtZV93cSk7XFxuK1xcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRClcXG4rXFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XFxuIFxcdG5ldHBvbGxfY2xlYW51cChcXHUwMDI2bnQtXFx1MDAzZW5wKTtcXG4gI2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbiBcXHRrZnJlZShudC1cXHUwMDNldXNlcmRhdGEpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaCBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXFxuaW5kZXggODhmN2RhYTg1NjBlNTguLjc5MzE1NDYxYTdiMWUwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcXG5AQCAtMjEsMjAgKzIxLDYgQEAgdW5pb24gaW5ldF9hZGRyIHtcXG4gXFx0c3RydWN0IGluNl9hZGRyXFx0aW42O1xcbiB9O1xcbiBcXG4tLypcXG4tICogTWF4aW11bSBwYXlsb2FkIG5ldHBvbGwncyBwcmVhbGxvY2F0ZWQgc2tiIHBvb2wgY2FuIGNhcnJ5LiBLZWVwIHRoaXMgaW5cXG4tICogc3luYyB3aXRoIHRoZSBidWZmZXIgc2l6ZSB1c2VkIGJ5IHJlZmlsbF9za2JzKCkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jO1xcbi0gKiBjYWxsZXJzIChlLmcuIG5ldGNvbnNvbGUpIHVzZSBpdCB0byBkZXRlY3QgcmVxdWVzdHMgdGhlIHBvb2wgY2FuIG5ldmVyXFxuLSAqIHNhdGlzZnkgYW5kIGF2b2lkIGRlcXVldWluZyBhIHBvb2xlZCBza2IgdGhhdCB3b3VsZCBsYXRlciB0cmlwXFxuLSAqIHNrYl9vdmVyX3BhbmljKCkgaW4gc2tiX3B1dCgpLlxcbi0gKi9cXG4tI2RlZmluZSBNQVhfVURQX0NIVU5LXFx0MTQ2MFxcbi0jZGVmaW5lIE1BWF9TS0JfU0laRVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0KHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArXFx0XFx0XFx0XFx0XFxcXFxcbi1cXHQgc2l6ZW9mKHN0cnVjdCBpcGhkcikgK1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArXFx0XFx0XFx0XFx0XFxcXFxcbi1cXHQgTUFYX1VEUF9DSFVOSylcXG4tXFxuIHN0cnVjdCBuZXRwb2xsIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuQEAgLTQ5LDEwICszNSw2IEBAIHN0cnVjdCBuZXRwb2xsIHtcXG4gXFxuIFxcdHVuaW9uIGluZXRfYWRkciBsb2NhbF9pcCwgcmVtb3RlX2lwO1xcbiBcXHRib29sIGlwdjY7XFxuLVxcdHUxNiBsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcXG4tXFx0dTggcmVtb3RlX21hY1tFVEhfQUxFTl07XFxuLVxcdHN0cnVjdCBza19idWZmX2hlYWQgc2tiX3Bvb2w7XFxuLVxcdHN0cnVjdCB3b3JrX3N0cnVjdCByZWZpbGxfd3E7XFxuIH07XFxuIFxcbiAjZGVmaW5lIG5wX2luZm8obnAsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jXFxuaW5kZXggODVhYTUxMzUwODgxMTcuLjEwYjYwNjMyNTFhNWJjIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL25ldHBvbGwuY1xcbisrKyBiL25ldC9jb3JlL25ldHBvbGwuY1xcbkBAIC0zNiwxMiArMzYsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL25hcGkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjb25maWcuaFxcdTAwM2VcXG4gXFxuLS8qXFxuLSAqIFdlIG1haW50YWluIGEgc21hbGwgcG9vbCBvZiBmdWxseS1zaXplZCBza2JzLCB0byBtYWtlIHN1cmUgdGhlXFxuLSAqIG1lc3NhZ2UgZ2V0cyBvdXQgZXZlbiBpbiBleHRyZW1lIE9PTSBzaXR1YXRpb25zLlxcbi0gKi9cXG4tXFxuLSNkZWZpbmUgTUFYX1NLQlMgMzJcXG4gI2RlZmluZSBVU0VDX1BFUl9QT0xMXFx0NTBcXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2Fycmllcl90aW1lb3V0ID0gNDtcXG5AQCAtMjEzLDIyICsyMDcsNiBAQCB2b2lkIG5ldHBvbGxfcG9sbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0XFx0dXAoXFx1MDAyNm5pLVxcdTAwM2VkZXZfbG9jayk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzKHN0cnVjdCBuZXRwb2xsICpucClcXG4te1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbDtcXG4tXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tXFxuLVxcdHNrYl9wb29sID0gXFx1MDAyNm5wLVxcdTAwM2Vza2JfcG9vbDtcXG4tXFxuLVxcdHdoaWxlIChSRUFEX09OQ0Uoc2tiX3Bvb2wtXFx1MDAzZXFsZW4pIFxcdTAwM2MgTUFYX1NLQlMpIHtcXG4tXFx0XFx0c2tiID0gYWxsb2Nfc2tiKE1BWF9TS0JfU0laRSwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XFxuLVxcdFxcdGlmICghc2tiKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdHNrYl9xdWV1ZV90YWlsKHNrYl9wb29sLCBza2IpO1xcbi1cXHR9XFxuLX1cXG4tXFxuIHZvaWQgbmV0cG9sbF96YXBfY29tcGxldGlvbl9xdWV1ZSh2b2lkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuQEAgLTM1MSwzMiArMzI5LDEyIEBAIG5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XFxuIFxcbi1zdGF0aWMgdm9pZCBza2JfcG9vbF9mbHVzaChzdHJ1Y3QgbmV0cG9sbCAqbnApXFxuLXtcXG4tXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqc2tiX3Bvb2w7XFxuLVxcbi1cXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZucC1cXHUwMDNlcmVmaWxsX3dxKTtcXG4tXFx0c2tiX3Bvb2wgPSBcXHUwMDI2bnAtXFx1MDAzZXNrYl9wb29sO1xcbi1cXHRza2JfcXVldWVfcHVyZ2VfcmVhc29uKHNrYl9wb29sLCBTS0JfQ09OU1VNRUQpO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi17XFxuLVxcdHN0cnVjdCBuZXRwb2xsICpucCA9XFxuLVxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0cG9sbCwgcmVmaWxsX3dxKTtcXG4tXFxuLVxcdHJlZmlsbF9za2JzKG5wKTtcXG4tfVxcbi1cXG4gaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbztcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHM7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZucC1cXHUwMDNlc2tiX3Bvb2wpO1xcbi1cXHRJTklUX1dPUksoXFx1MDAyNm5wLVxcdTAwM2VyZWZpbGxfd3EsIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcik7XFxuLVxcbiBcXHRpZiAobmRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IElGRl9ESVNBQkxFX05FVFBPTEwpIHtcXG4gXFx0XFx0bnBfZXJyKG5wLCBcXFwiJXMgZG9lc24ndCBzdXBwb3J0IHBvbGxpbmcsIGFib3J0aW5nXFxcXG5cXFwiLFxcbiBcXHRcXHQgICAgICAgbmRldi1cXHUwMDNlbmFtZSk7XFxuQEAgLTQxMSw5ICszNjksNiBAQCBpbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdG5wLVxcdTAwM2VkZXYgPSBuZGV2O1xcbiBcXHRzdHJzY3B5KG5wLVxcdTAwM2VkZXZfbmFtZSwgbmRldi1cXHUwMDNlbmFtZSwgSUZOQU1TSVopO1xcbiBcXG4tXFx0LyogZmlsbCB1cCB0aGUgc2tiIHF1ZXVlICovXFxuLVxcdHJlZmlsbF9za2JzKG5wKTtcXG4tXFxuIFxcdC8qIGxhc3QgdGhpbmcgdG8gZG8gaXMgbGluayBpdCB0byB0aGUgbmV0IGRldmljZSBzdHJ1Y3R1cmUgKi9cXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKG5kZXYtXFx1MDAzZW5waW5mbywgbnBpbmZvKTtcXG4gXFxuQEAgLTYwMyw3ICs1NTgsNyBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXFxuIFxcbiBcXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpO1xcbiBcXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIGZsdXNoO1xcbitcXHRcXHRnb3RvIHB1dDtcXG4gXFx0cnRubF91bmxvY2soKTtcXG4gXFxuIFxcdC8qIE1ha2Ugc3VyZSBhbGwgTkFQSSBwb2xscyB3aGljaCBzdGFydGVkIGJlZm9yZSBkZXYtXFx1MDAzZW5waW5mb1xcbkBAIC02MTQsOCArNTY5LDYgQEAgaW50IG5ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wKVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1mbHVzaDpcXG4tXFx0c2tiX3Bvb2xfZmx1c2gobnApO1xcbiBwdXQ6XFxuIFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobnAtXFx1MDAzZWRldik7XFxuIFxcdGlmIChpcF9vdmVyd3JpdHRlbilcXG5AQCAtNjY2LDggKzYxOSw2IEBAIHN0YXRpYyB2b2lkIF9fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRwb2xsICpucClcXG4gXFx0XFx0UkNVX0lOSVRfUE9JTlRFUihucC1cXHUwMDNlZGV2LVxcdTAwM2VucGluZm8sIE5VTEwpO1xcbiBcXHRcXHRjYWxsX3JjdShcXHUwMDI2bnBpbmZvLVxcdTAwM2VyY3UsIHJjdV9jbGVhbnVwX25ldHBvbGxfaW5mbyk7XFxuIFxcdH1cXG4tXFxuLVxcdHNrYl9wb29sX2ZsdXNoKG5wKTtcXG4gfVxcbiBcXG4gdm9pZCBfX25ldHBvbGxfZnJlZShzdHJ1Y3QgbmV0cG9sbCAqbnApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjAwOjU2LjIyNjYwMDI3OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg1NjcxOTg5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0Y29uc29sZV9za2JfcG9vbF9pbml0XCIsXG4gICAgXCJuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoXCIsXG4gICAgXCJyZWZpbGxfc2tic1wiLFxuICAgIFwibmV0Y29uc19za2JfcG9wXCIsXG4gICAgXCJmaW5kX3NrYlwiLFxuICAgIFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwiZHJvcF9uZXRjb25zb2xlX3RhcmdldFwiLFxuICAgIFwiYWxsb2NfcGFyYW1fdGFyZ2V0XCIsXG4gICAgXCJmcmVlX3BhcmFtX3RhcmdldFwiLFxuICAgIFwibmV0Y29uc29sZV9wYXJzZXJfY21kbGluZVwiLFxuICAgIFwiX19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRwb2xsX3NldHVwXCIsXG4gICAgXCJfX25ldHBvbGxfY2xlYW51cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBTS0IgcG9vbCBhbmQgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gKHBvcnRzLCBNQUMpIGZyb20gYHN0cnVjdCBuZXRwb2xsYCB0byBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YC4gSXQgbW9kaWZpZXMgaG93IG5ldGNvbnNvbGUgaW5pdGlhbGl6ZXMgYW5kIGZsdXNoZXMgdGhlIFNLQiBwb29sLCBhbmQgdXBkYXRlcyB0aGUgbmV0cG9sbCBzZXR1cC9jbGVhbnVwIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGFuZCBuZXRwb2xsIGNvcmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZDZiZjg0MGJmNzQ4YmI0ZTJjMWJlYzk0MjBlMDYzMjY1ZDg0ZTA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxNjowMDo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuaW5kZXggYzE4MTJhOTgzNjViNzguLmUzNmIwOTk4YzgxMDk2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbkBAIC02MSw2ICs2MSwxOSBAQCBNT0RVTEVfSU1QT1JUX05TKFwiTkVUREVWX0lOVEVSTkFMXCIpO1xuICNkZWZpbmUgTUFYX1VTRVJEQVRBX0lURU1TXHRcdDI1NlxuICNkZWZpbmUgTUFYX1BSSU5UX0NIVU5LXHRcdFx0MTAwMFxuIFxuKy8qXG4rICogU2l6aW5nIGZvciB0aGUgcGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKVxuKyAqIHdoZW4gaXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscyBzbyBtZXNzYWdlcyBzdGlsbCBnZXQgb3V0IHVuZGVyXG4rICogbWVtb3J5IHByZXNzdXJlLlxuKyAqL1xuKyNkZWZpbmUgTUFYX1VEUF9DSFVOS1x0XHRcdDE0NjBcbisjZGVmaW5lIE1BWF9TS0JTXHRcdFx0MzJcbisjZGVmaW5lIE1BWF9TS0JfU0laRVx0XHRcdFx0XHRcdFx0XFxcbitcdChzaXplb2Yoc3RydWN0IGV0aGhkcikgK1x0XHRcdFx0XHRcXFxuK1x0IHNpemVvZihzdHJ1Y3QgaXBoZHIpICtcdFx0XHRcdFx0XHRcXFxuK1x0IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArXHRcdFx0XHRcdFxcXG4rXHQgTUFYX1VEUF9DSFVOSylcbitcbiBzdGF0aWMgY2hhciBjb25maWdbTUFYX1BBUkFNX0xFTkdUSF07XG4gbW9kdWxlX3BhcmFtX3N0cmluZyhuZXRjb25zb2xlLCBjb25maWcsIE1BWF9QQVJBTV9MRU5HVEgsIDApO1xuIE1PRFVMRV9QQVJNX0RFU0MobmV0Y29uc29sZSwgXCIgbmV0Y29uc29sZT1bc3JjLXBvcnRdQFtzcmMtaXBdL1tkZXZdLFt0Z3QtcG9ydF1AXHUwMDNjdGd0LWlwXHUwMDNlL1t0Z3QtbWFjYWRkcl1cIik7XG5AQCAtMTYyLDE0ICsxNzUsMTkgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xuICAqIEBucDpcdFx0VGhlIG5ldHBvbGwgc3RydWN0dXJlIGZvciB0aGlzIHRhcmdldC5cbiAgKlx0XHRDb250YWlucyB0aGUgb3RoZXIgdXNlcnNwYWNlIHZpc2libGUgcGFyYW1ldGVyczpcbiAgKlx0XHRkZXZfbmFtZVx0KHJlYWQtd3JpdGUpXG4tICpcdFx0bG9jYWxfcG9ydFx0KHJlYWQtd3JpdGUpXG4tICpcdFx0cmVtb3RlX3BvcnRcdChyZWFkLXdyaXRlKVxuICAqXHRcdGxvY2FsX2lwXHQocmVhZC13cml0ZSlcbiAgKlx0XHRyZW1vdGVfaXBcdChyZWFkLXdyaXRlKVxuICAqXHRcdGxvY2FsX21hY1x0KHJlYWQtb25seSlcbi0gKlx0XHRyZW1vdGVfbWFjXHQocmVhZC13cml0ZSlcbisgKiBAbG9jYWxfcG9ydDpcdFNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbisgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuKyAqIEByZW1vdGVfbWFjOlx0RGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAYnVmOlx0VGhlIGJ1ZmZlciB1c2VkIHRvIHNlbmQgdGhlIGZ1bGwgbXNnIHRvIHRoZSBuZXR3b3JrIHN0YWNrXG4gICogQHJlc3VtZV93cTpcdFdvcmtxdWV1ZSB0byByZXN1bWUgZGVhY3RpdmF0ZWQgdGFyZ2V0XG4rICogQHNrYl9wb29sOlx0UGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKSB3aGVuXG4rICpcdFx0aXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscy4gTGlmZXRpbWUgYnJhY2tldHMgYVxuKyAqXHRcdHN1Y2Nlc3NmdWwgbmV0cG9sbF9zZXR1cCgpIC8gbmV0cG9sbF9jbGVhbnVwKCkgcGFpciBvbiBAbnAuXG4rICogQHJlZmlsbF93cTpcdFdvcmsgaXRlbSB0aGF0IGFzeW5jaHJvbm91c2x5IHRvcHMgQHNrYl9wb29sIGJhY2sgdXAgdG9cbisgKlx0XHRNQVhfU0tCUyBhZnRlciBmaW5kX3NrYigpIGRyYWlucyBhbiBlbnRyeS5cbiAgKi9cbiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbkBAIC0xOTAsMTEgKzIwOCwxNSBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuIFx0Ym9vbFx0XHRcdGV4dGVuZGVkO1xuIFx0Ym9vbFx0XHRcdHJlbGVhc2U7XG4gXHRzdHJ1Y3QgbmV0cG9sbFx0XHRucDtcbitcdHUxNlx0XHRcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xuK1x0dThcdFx0XHRyZW1vdGVfbWFjW0VUSF9BTEVOXTtcbiBcdC8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyArMSBnaXZlcyBzY25wcmludGYoKSByb29tIGZvciBpdHNcbiBcdCAqIE5VTCB0ZXJtaW5hdG9yIHNvIGEgZnVsbCBNQVhfUFJJTlRfQ0hVTksgcGF5bG9hZCBpcyBub3QgdHJ1bmNhdGVkXG4gXHQgKi9cbiBcdGNoYXJcdFx0XHRidWZbTUFYX1BSSU5UX0NIVU5LICsgMV07XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHJlc3VtZV93cTtcbitcdHN0cnVjdCBza19idWZmX2hlYWRcdHNrYl9wb29sO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0XHRyZWZpbGxfd3E7XG4gfTtcbiBcbiAjaWZkZWZcdENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbkBAIC0yOTIsMTEgKzMxNCw1OCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zX3JlbGVhc2VfZGV2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdG1lbXNldChcdTAwMjZudC1cdTAwM2VucC5kZXZfbmFtZSwgMCwgSUZOQU1TSVopO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByZWZpbGxfc2ticyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuK3tcbitcdHN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sID0gXHUwMDI2bnQtXHUwMDNlc2tiX3Bvb2w7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1xuK1x0d2hpbGUgKFJFQURfT05DRShza2JfcG9vbC1cdTAwM2VxbGVuKSBcdTAwM2MgTUFYX1NLQlMpIHtcbitcdFx0c2tiID0gYWxsb2Nfc2tiKE1BWF9TS0JfU0laRSwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4rXHRcdGlmICghc2tiKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRza2JfcXVldWVfdGFpbChza2JfcG9vbCwgc2tiKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCwgcmVmaWxsX3dxKTtcbitcbitcdHJlZmlsbF9za2JzKG50KTtcbit9XG4rXG4rLyogSW5pdGlhbGlzZSB0aGUgcGVyLXRhcmdldCBza2IgcG9vbCB0aGF0IGZpbmRfc2tiKCkgZmFsbHMgYmFjayB0byBhbmRcbisgKiBzZWVkIGl0LiBQYWlyIHdpdGggbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIGF0IHRoZSBtYXRjaGluZ1xuKyAqIG5ldHBvbGwgdGVhcmRvd24uXG4rICovXG4rc3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4rXHRJTklUX1dPUksoXHUwMDI2bnQtXHUwMDNlcmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpO1xuK1x0cmVmaWxsX3NrYnMobnQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZudC1cdTAwM2VyZWZpbGxfd3EpO1xuK1x0c2tiX3F1ZXVlX3B1cmdlX3JlYXNvbihcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCwgU0tCX0NPTlNVTUVEKTtcbit9XG4rXG4gLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXG4gc3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbitcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgbWFrZXMgbnQtXHUwMDNlbnAuZGV2XG4rXHQgKiB2aXNpYmxlIHRvIHRhcmdldF9saXN0IHdhbGtlcnMgKGUuZy4gbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQpLFxuK1x0ICogd2hpY2ggb3RoZXJ3aXNlIG1heSBtb3ZlIHRoZSB0YXJnZXQgdG8gdGhlIGNsZWFudXAgbGlzdCBhbmRcbitcdCAqIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWQgc3RhdGUuXG4rXHQgKi9cbitcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XG4rXG4gXHRpZiAobmV0cG9sbF9zZXR1cChcdTAwMjZudC1cdTAwM2VucCkpIHtcbiBcdFx0LyogbmV0cG9sbCBmYWlscyBzZXR1cCBvbmNlLCBkbyBub3QgdHJ5IGFnYWluLiAqL1xuK1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTM1OCw2ICs0MjcsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cnRubF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCBcdTAwMjZcdTAwMjYgbnQtXHUwMDNlbnAuZGV2IFx1MDAyNlx1MDAyNlxuIFx0ICAgIG50LVx1MDAzZW5wLmRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpIHtcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG5ldGNvbnNfcmVsZWFzZV9kZXYobnQpO1xuIFx0XHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xuIFx0fVxuQEAgLTM5Myw5ICs0NjMsOSBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxuIFxuIFx0bnQtXHUwMDNlbnAubmFtZSA9IFwibmV0Y29uc29sZVwiO1xuIFx0c3Ryc2NweShudC1cdTAwM2VucC5kZXZfbmFtZSwgXCJldGgwXCIsIElGTkFNU0laKTtcbi1cdG50LVx1MDAzZW5wLmxvY2FsX3BvcnQgPSA2NjY1O1xuLVx0bnQtXHUwMDNlbnAucmVtb3RlX3BvcnQgPSA2NjY2O1xuLVx0ZXRoX2Jyb2FkY2FzdF9hZGRyKG50LVx1MDAzZW5wLnJlbW90ZV9tYWMpO1xuK1x0bnQtXHUwMDNlbG9jYWxfcG9ydCA9IDY2NjU7XG4rXHRudC1cdTAwM2VyZW1vdGVfcG9ydCA9IDY2NjY7XG4rXHRldGhfYnJvYWRjYXN0X2FkZHIobnQtXHUwMDNlcmVtb3RlX21hYyk7XG4gXHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xuIFx0SU5JVF9XT1JLKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSwgcHJvY2Vzc19yZXN1bWVfdGFyZ2V0KTtcbiBcbkBAIC00MTcsNiArNDg3LDcgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShudCwgdG1wLCBcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0LCBsaXN0KSB7XG4gXHRcdC8qIGFsbCBlbnRyaWVzIGluIHRoZSBjbGVhbnVwX2xpc3QgbmVlZHMgdG8gYmUgZGlzYWJsZWQgKi9cbiBcdFx0V0FSTl9PTl9PTkNFKG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpO1xuK1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdFx0bmV0Y29uc19yZWxlYXNlX2RldihudCk7XG4gXHRcdC8qIG1vdmVkIHRoZSBjbGVhbmVkIHRhcmdldCB0byB0YXJnZXRfbGlzdC4gTmVlZCB0byBob2xkIGJvdGhcbiBcdFx0ICogbG9ja3NcbkBAIC00MjksMjEgKzUwMCwyMyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHNfY29yZSh2b2lkKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRwb2xsICpucClcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbi1cdG5wX2luZm8obnAsIFwibG9jYWwgcG9ydCAlZFxcblwiLCBucC1cdTAwM2Vsb2NhbF9wb3J0KTtcbitcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuK1xuK1x0bnBfaW5mbyhucCwgXCJsb2NhbCBwb3J0ICVkXFxuXCIsIG50LVx1MDAzZWxvY2FsX3BvcnQpO1xuIFx0aWYgKG5wLVx1MDAzZWlwdjYpXG4gXHRcdG5wX2luZm8obnAsIFwibG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXFxuXCIsIFx1MDAyNm5wLVx1MDAzZWxvY2FsX2lwLmluNik7XG4gXHRlbHNlXG4gXHRcdG5wX2luZm8obnAsIFwibG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcXG5cIiwgXHUwMDI2bnAtXHUwMDNlbG9jYWxfaXAuaXApO1xuIFx0bnBfaW5mbyhucCwgXCJpbnRlcmZhY2UgbmFtZSAnJXMnXFxuXCIsIG5wLVx1MDAzZWRldl9uYW1lKTtcbiBcdG5wX2luZm8obnAsIFwibG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAnJXBNJ1xcblwiLCBucC1cdTAwM2VkZXZfbWFjKTtcbi1cdG5wX2luZm8obnAsIFwicmVtb3RlIHBvcnQgJWRcXG5cIiwgbnAtXHUwMDNlcmVtb3RlX3BvcnQpO1xuK1x0bnBfaW5mbyhucCwgXCJyZW1vdGUgcG9ydCAlZFxcblwiLCBudC1cdTAwM2VyZW1vdGVfcG9ydCk7XG4gXHRpZiAobnAtXHUwMDNlaXB2NilcbiBcdFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgSVB2NiBhZGRyZXNzICVwSTZjXFxuXCIsIFx1MDAyNm5wLVx1MDAzZXJlbW90ZV9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcInJlbW90ZSBJUHY0IGFkZHJlc3MgJXBJNFxcblwiLCBcdTAwMjZucC1cdTAwM2VyZW1vdGVfaXAuaXApO1xuLVx0bnBfaW5mbyhucCwgXCJyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXG5cIiwgbnAtXHUwMDNlcmVtb3RlX21hYyk7XG4rXHRucF9pbmZvKG5wLCBcInJlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxcblwiLCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiB9XG4gXG4gLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzXG5AQCAtNTYxLDEyICs2MzQsMTIgQEAgc3RhdGljIHNzaXplX3QgZGV2X25hbWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiBcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuLVx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVkXFxuXCIsIHRvX3RhcmdldChpdGVtKS1cdTAwM2VucC5sb2NhbF9wb3J0KTtcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlZFxcblwiLCB0b190YXJnZXQoaXRlbSktXHUwMDNlbG9jYWxfcG9ydCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuLVx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVkXFxuXCIsIHRvX3RhcmdldChpdGVtKS1cdTAwM2VucC5yZW1vdGVfcG9ydCk7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWRcXG5cIiwgdG9fdGFyZ2V0KGl0ZW0pLVx1MDAzZXJlbW90ZV9wb3J0KTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbkBAIC01OTksNyArNjcyLDcgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcE1cXG5cIiwgdG9fdGFyZ2V0KGl0ZW0pLVx1MDAzZW5wLnJlbW90ZV9tYWMpO1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwTVxcblwiLCB0b190YXJnZXQoaXRlbSktXHUwMDNlcmVtb3RlX21hYyk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuQEAgLTc1NiwxMSArODI5LDIxIEBAIHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIFx0XHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXG4gXHRcdCAqIGFscmVhZHkgY29uZmlndXJlZCB2aWEgY29uZmlnZnMuIEp1c3QgcHJpbnQgdGhlbSBvdXQuXG4gXHRcdCAqL1xuLVx0XHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihcdTAwMjZudC1cdTAwM2VucCk7XG4rXHRcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTtcbitcbitcdFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbFxuK1x0XHQgKiBpcyB2YWxpZCBhcyBzb29uIGFzIG50LVx1MDAzZW5wLmRldiBiZWNvbWVzIHZpc2libGUgdG9cbitcdFx0ICogdGFyZ2V0X2xpc3Qgd2Fsa2VycyAobmV0Y29uc29sZV9uZXRkZXZfZXZlbnQpLCB3aGljaCB3b3VsZFxuK1x0XHQgKiBvdGhlcndpc2UgY2FsbCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkgb24gdW5pbml0aWFsaXNlZFxuK1x0XHQgKiBzdGF0ZS5cbitcdFx0ICovXG4rXHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XG4gXG4gXHRcdHJldCA9IG5ldHBvbGxfc2V0dXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuLVx0XHRpZiAocmV0KVxuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0XHR9XG4gXG4gXHRcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRU5BQkxFRDtcbiBcdFx0cHJfaW5mbyhcIm5ldHdvcmsgbG9nZ2luZyBzdGFydGVkXFxuXCIpO1xuQEAgLTg4NSw3ICs5NjgsNyBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXHUwMDI2bnQtXHUwMDNlbnAubG9jYWxfcG9ydCk7XG4rXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRyZXQgPSBjb3VudDtcbkBAIC05MDcsNyArOTkwLDcgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXHUwMDI2bnQtXHUwMDNlbnAucmVtb3RlX3BvcnQpO1xuK1x0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdHJldCA9IGNvdW50O1xuQEAgLTk5NCw3ICsxMDc3LDcgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0aWYgKGJ1ZltNQUNfQUREUl9TVFJfTEVOXSBcdTAwMjZcdTAwMjYgYnVmW01BQ19BRERSX1NUUl9MRU5dICE9ICdcXG4nKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRtZW1jcHkobnQtXHUwMDNlbnAucmVtb3RlX21hYywgcmVtb3RlX21hYywgRVRIX0FMRU4pO1xuK1x0bWVtY3B5KG50LVx1MDAzZXJlbW90ZV9tYWMsIHJlbW90ZV9tYWMsIEVUSF9BTEVOKTtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMTUxNCw4ICsxNTk3LDEwIEBAIHN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXG4gXHQgKiBuZXRwb2xsX2NsZWFudXAoKSBpcyBpZGVtcG90ZW50IChpdCBza2lwcyB3aGVuIG5wLVx1MDAzZWRldiBpcyBOVUxMKSwgc29cbiBcdCAqIGl0IGlzIHNhZmUgZXZlbiBpZiB0aGUgY2xlYW51cCB3b3JrZXIgYWxyZWFkeSB0b3JlIHRoZSBuZXRwb2xsIGRvd24uXG4gXHQgKi9cbi1cdGlmIChuZWVkc19jbGVhbnVwKVxuK1x0aWYgKG5lZWRzX2NsZWFudXApIHtcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG5ldHBvbGxfY2xlYW51cChcdTAwMjZudC1cdTAwM2VucCk7XG4rXHR9XG4gXG4gXHRjb25maWdfaXRlbV9wdXQoXHUwMDI2bnQtXHUwMDNlZ3JvdXAuY2dfaXRlbSk7XG4gfVxuQEAgLTE3MDYsNyArMTc5MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XG4gICogcG9vbCBsb2NrcyBhbmQgaXMgdGhlcmVmb3JlIG5vdCBOTUktc2FmZS4gU2tpcCB0aGUgcmVmaWxsIHdoZW4gY2FsbGVkXG4gICogZnJvbSBOTUkgY29udGV4dDsgdGhlIG5leHQgbm9uLU5NSSBjYWxsZXIgd2lsbCB0b3AgdGhlIHBvb2wgYmFjayB1cC5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbilcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuQEAgLTE3MTgsMTkgKzE4MDMsMjEgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuKVxuIFx0XHRpZiAoIWluX25taSgpKVxuIFx0XHRcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFwibmV0Y29uc29sZTogZHJvcHBpbmcgbWVzc2FnZSwgcmVxdWVzdGVkIHNrYiBsZW4gJWQgZXhjZWVkcyBwb29sIGJ1ZmZlciBzaXplICV6dSBvbiAlc1xcblwiLFxuIFx0XHRcdFx0XHQgICAgIGxlbiwgKHNpemVfdClNQVhfU0tCX1NJWkUsXG4tXHRcdFx0XHRcdCAgICAgbnAtXHUwMDNlZGV2LVx1MDAzZW5hbWUpO1xuK1x0XHRcdFx0XHQgICAgIG50LVx1MDAzZW5wLmRldi1cdTAwM2VuYW1lKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZucC1cdTAwM2Vza2JfcG9vbCk7XG4rXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4gXHRpZiAoIWluX25taSgpKVxuLVx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNm5wLVx1MDAzZXJlZmlsbF93cSk7XG4rXHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bnQtXHUwMDNlcmVmaWxsX3dxKTtcbiBcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSlcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4sXG4rXHRcdFx0XHRpbnQgcmVzZXJ2ZSlcbiB7XG4rXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGludCBjb3VudCA9IDA7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuQEAgLTE3MzksNyArMTgyNiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSlcbiBcbiBcdHNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xuIFx0aWYgKCFza2IpXG4tXHRcdHNrYiA9IG5ldGNvbnNfc2tiX3BvcChucCwgbGVuKTtcbitcdFx0c2tiID0gbmV0Y29uc19za2JfcG9wKG50LCBsZW4pO1xuIFxuIFx0aWYgKCFza2IpIHtcbiBcdFx0aWYgKCsrY291bnQgXHUwMDNjIDEwKSB7XG5AQCAtMTc3OSw4ICsxODY2LDkgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbitzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuIHtcbitcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFx0c3RydWN0IHVkcGhkciAqdWRwaDtcbiBcdGludCB1ZHBfbGVuO1xuIFxuQEAgLTE3OTAsMjEgKzE4NzgsMjIgQEAgc3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuIFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcbiBcdHVkcGggPSB1ZHBfaGRyKHNrYik7XG4tXHR1ZHBoLVx1MDAzZXNvdXJjZSA9IGh0b25zKG5wLVx1MDAzZWxvY2FsX3BvcnQpO1xuLVx0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMobnAtXHUwMDNlcmVtb3RlX3BvcnQpO1xuK1x0dWRwaC1cdTAwM2Vzb3VyY2UgPSBodG9ucyhudC1cdTAwM2Vsb2NhbF9wb3J0KTtcbitcdHVkcGgtXHUwMDNlZGVzdCA9IGh0b25zKG50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbiBcdHVkcGgtXHUwMDNlbGVuID0gaHRvbnModWRwX2xlbik7XG4gXG4gXHRuZXRwb2xsX3VkcF9jaGVja3N1bShucCwgc2tiLCBsZW4pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4rXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdHN0cnVjdCBldGhoZHIgKmV0aDtcbiBcbiBcdGV0aCA9IHNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pO1xuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9zb3VyY2UsIG5wLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4tXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfZGVzdCwgbnAtXHUwMDNlcmVtb3RlX21hYyk7XG4rXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfZGVzdCwgbnQtXHUwMDNlcmVtb3RlX21hYyk7XG4gXHRpZiAobnAtXHUwMDNlaXB2NilcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdGVsc2VcbkBAIC0xODYxLDggKzE5NTAsMTAgQEAgc3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4rc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbitcdFx0XHQgICAgaW50IGxlbilcbiB7XG4rXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGludCB0b3RhbF9sZW4sIGlwX2xlbiwgdWRwX2xlbjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG5AQCAtMTg3Nyw3ICsxOTY4LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIFxuIFx0dG90YWxfbGVuID0gaXBfbGVuICsgTExfUkVTRVJWRURfU1BBQ0UobnAtXHUwMDNlZGV2KTtcbiBcbi1cdHNrYiA9IGZpbmRfc2tiKG5wLCB0b3RhbF9sZW4gKyBucC1cdTAwM2VkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tLFxuK1x0c2tiID0gZmluZF9za2IobnQsIHRvdGFsX2xlbiArIG5wLVx1MDAzZWRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb20sXG4gXHRcdCAgICAgICB0b3RhbF9sZW4gLSBsZW4pO1xuIFx0aWYgKCFza2IpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTE4ODUsMTIgKzE5NzYsMTIgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBtc2csIGxlbik7XG4gXHRza2JfcHV0KHNrYiwgbGVuKTtcbiBcbi1cdHB1c2hfdWRwKG5wLCBza2IsIGxlbik7XG4rXHRwdXNoX3VkcChudCwgc2tiLCBsZW4pO1xuIFx0aWYgKG5wLVx1MDAzZWlwdjYpXG4gXHRcdHB1c2hfaXB2NihucCwgc2tiLCBsZW4pO1xuIFx0ZWxzZVxuIFx0XHRwdXNoX2lwdjQobnAsIHNrYiwgbGVuKTtcbi1cdHB1c2hfZXRoKG5wLCBza2IpO1xuK1x0cHVzaF9ldGgobnQsIHNrYik7XG4gXHRza2ItXHUwMDNlZGV2ID0gbnAtXHUwMDNlZGV2O1xuIFxuIFx0cmV0dXJuIChpbnQpbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKTtcbkBAIC0xOTA4LDcgKzE5OTksNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4gICovXG4gc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIHtcbi1cdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKFx1MDAyNm50LVx1MDAzZW5wLCBtc2csIGxlbik7XG4rXHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpIHtcbiBcdFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XG5AQCAtMjIwMyw4ICsyMjk0LDkgQEAgX19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcbitzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIHtcbitcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFx0Ym9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7XG4gXHRjaGFyICpjdXIgPSBvcHQ7XG4gXHRjaGFyICpkZWxpbTtcbkBAIC0yMjE1LDcgKzIzMDcsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXG4gXHRcdGlmICghZGVsaW0pXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdCpkZWxpbSA9IDA7XG4tXHRcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXHUwMDI2bnAtXHUwMDNlbG9jYWxfcG9ydCkpXG4rXHRcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfcG9ydCkpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuQEAgLTIyNjIsNyArMjM1NCw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcbiBcdFx0KmRlbGltID0gMDtcbiBcdFx0aWYgKCpjdXIgPT0gJyAnIHx8ICpjdXIgPT0gJ1xcdCcpXG4gXHRcdFx0bnBfaW5mbyhucCwgXCJ3YXJuaW5nOiB3aGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkXFxuXCIpO1xuLVx0XHRpZiAoa3N0cnRvdTE2KGN1ciwgMTAsIFx1MDAyNm5wLVx1MDAzZXJlbW90ZV9wb3J0KSlcbitcdFx0aWYgKGtzdHJ0b3UxNihjdXIsIDEwLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfcG9ydCkpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuQEAgLTIyODQsMTEgKzIzNzYsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxuIFxuIFx0aWYgKCpjdXIgIT0gMCkge1xuIFx0XHQvKiBNQUMgYWRkcmVzcyAqL1xuLVx0XHRpZiAoIW1hY19wdG9uKGN1ciwgbnAtXHUwMDNlcmVtb3RlX21hYykpXG4rXHRcdGlmICghbWFjX3B0b24oY3VyLCBudC1cdTAwM2VyZW1vdGVfbWFjKSlcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdH1cbiBcbi1cdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG5wKTtcbitcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuQEAgLTIzMjYsMTQgKzI0MTgsMjIgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gXHR9XG4gXG4gXHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXG4tXHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKFx1MDAyNm50LVx1MDAzZW5wLCB0YXJnZXRfY29uZmlnKTtcbitcdGVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUobnQsIHRhcmdldF9jb25maWcpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBmYWlsO1xuIFxuK1x0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbCBpc1xuK1x0ICogdmFsaWQgYXMgc29vbiBhcyBudC1cdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlLiBUaGUgdGFyZ2V0IGlzIG5vdFxuK1x0ICogeWV0IG9uIHRhcmdldF9saXN0LCBzbyBhIG5ldGRldiBldmVudCBjYW5ub3QgcmVhY2ggaXQgaGVyZSwgYnV0XG4rXHQgKiBtaXJyb3IgdGhlIGNvbmZpZ2ZzIHBhdGggZm9yIHN5bW1ldHJ5LlxuK1x0ICovXG4rXHRuZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpO1xuK1xuIFx0ZXJyID0gbmV0cG9sbF9zZXR1cChcdTAwMjZudC1cdTAwM2VucCk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcIk5vdCBlbmFibGluZyBuZXRjb25zb2xlIGZvciAlcyVkLiBOZXRwb2xsIHNldHVwIGZhaWxlZFxcblwiLFxuIFx0XHQgICAgICAgTkVUQ09OU09MRV9QQVJBTV9UQVJHRVRfUFJFRklYLCBjbWRsaW5lX2NvdW50KTtcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSlcbiBcdFx0XHQvKiBvbmx5IGZhaWwgaWYgZHluYW1pYyByZWNvbmZpZ3VyYXRpb24gaXMgc2V0LFxuIFx0XHRcdCAqIG90aGVyd2lzZSwga2VlcCB0aGUgdGFyZ2V0IGluIHRoZSBsaXN0LCBidXQgZGlzYWJsZWQuXG5AQCAtMjM1NSw2ICsyNDU1LDggQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSk7XG4rXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRClcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRuZXRwb2xsX2NsZWFudXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0a2ZyZWUobnQtXHUwMDNldXNlcmRhdGEpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbmluZGV4IDg4ZjdkYWE4NTYwZTU4Li43OTMxNTQ2MWE3YjFlMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuQEAgLTIxLDIwICsyMSw2IEBAIHVuaW9uIGluZXRfYWRkciB7XG4gXHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbiB9O1xuIFxuLS8qXG4tICogTWF4aW11bSBwYXlsb2FkIG5ldHBvbGwncyBwcmVhbGxvY2F0ZWQgc2tiIHBvb2wgY2FuIGNhcnJ5LiBLZWVwIHRoaXMgaW5cbi0gKiBzeW5jIHdpdGggdGhlIGJ1ZmZlciBzaXplIHVzZWQgYnkgcmVmaWxsX3NrYnMoKSBpbiBuZXQvY29yZS9uZXRwb2xsLmM7XG4tICogY2FsbGVycyAoZS5nLiBuZXRjb25zb2xlKSB1c2UgaXQgdG8gZGV0ZWN0IHJlcXVlc3RzIHRoZSBwb29sIGNhbiBuZXZlclxuLSAqIHNhdGlzZnkgYW5kIGF2b2lkIGRlcXVldWluZyBhIHBvb2xlZCBza2IgdGhhdCB3b3VsZCBsYXRlciB0cmlwXG4tICogc2tiX292ZXJfcGFuaWMoKSBpbiBza2JfcHV0KCkuXG4tICovXG4tI2RlZmluZSBNQVhfVURQX0NIVU5LXHQxNDYwXG4tI2RlZmluZSBNQVhfU0tCX1NJWkVcdFx0XHRcdFx0XHRcXFxuLVx0KHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArXHRcdFx0XHRcXFxuLVx0IHNpemVvZihzdHJ1Y3QgaXBoZHIpICtcdFx0XHRcdFx0XFxcbi1cdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgK1x0XHRcdFx0XFxcbi1cdCBNQVhfVURQX0NIVU5LKVxuLVxuIHN0cnVjdCBuZXRwb2xsIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcbkBAIC00OSwxMCArMzUsNiBAQCBzdHJ1Y3QgbmV0cG9sbCB7XG4gXG4gXHR1bmlvbiBpbmV0X2FkZHIgbG9jYWxfaXAsIHJlbW90ZV9pcDtcbiBcdGJvb2wgaXB2Njtcbi1cdHUxNiBsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcbi1cdHU4IHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuLVx0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcG9vbDtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCByZWZpbGxfd3E7XG4gfTtcbiBcbiAjZGVmaW5lIG5wX2luZm8obnAsIGZtdCwgLi4uKVx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmNcbmluZGV4IDg1YWE1MTM1MDg4MTE3Li4xMGI2MDYzMjUxYTViYyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldHBvbGwuY1xuKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jXG5AQCAtMzYsMTIgKzM2LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvbmFwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4gXG4tLypcbi0gKiBXZSBtYWludGFpbiBhIHNtYWxsIHBvb2wgb2YgZnVsbHktc2l6ZWQgc2ticywgdG8gbWFrZSBzdXJlIHRoZVxuLSAqIG1lc3NhZ2UgZ2V0cyBvdXQgZXZlbiBpbiBleHRyZW1lIE9PTSBzaXR1YXRpb25zLlxuLSAqL1xuLVxuLSNkZWZpbmUgTUFYX1NLQlMgMzJcbiAjZGVmaW5lIFVTRUNfUEVSX1BPTExcdDUwXG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBjYXJyaWVyX3RpbWVvdXQgPSA0O1xuQEAgLTIxMywyMiArMjA3LDYgQEAgdm9pZCBuZXRwb2xsX3BvbGxfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdHVwKFx1MDAyNm5pLVx1MDAzZWRldl9sb2NrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldHBvbGwgKm5wKVxuLXtcbi1cdHN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi1cbi1cdHNrYl9wb29sID0gXHUwMDI2bnAtXHUwMDNlc2tiX3Bvb2w7XG4tXG4tXHR3aGlsZSAoUkVBRF9PTkNFKHNrYl9wb29sLVx1MDAzZXFsZW4pIFx1MDAzYyBNQVhfU0tCUykge1xuLVx0XHRza2IgPSBhbGxvY19za2IoTUFYX1NLQl9TSVpFLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcbi1cdFx0aWYgKCFza2IpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdHNrYl9xdWV1ZV90YWlsKHNrYl9wb29sLCBza2IpO1xuLVx0fVxuLX1cbi1cbiB2b2lkIG5ldHBvbGxfemFwX2NvbXBsZXRpb25fcXVldWUodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuQEAgLTM1MSwzMiArMzI5LDEyIEBAIG5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBFWFBPUlRfU1lNQk9MKG5ldHBvbGxfc2VuZF9za2IpO1xuIFxuLXN0YXRpYyB2b2lkIHNrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRwb2xsICpucClcbi17XG4tXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbDtcbi1cbi1cdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bnAtXHUwMDNlcmVmaWxsX3dxKTtcbi1cdHNrYl9wb29sID0gXHUwMDI2bnAtXHUwMDNlc2tiX3Bvb2w7XG4tXHRza2JfcXVldWVfcHVyZ2VfcmVhc29uKHNrYl9wb29sLCBTS0JfQ09OU1VNRUQpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLXtcbi1cdHN0cnVjdCBuZXRwb2xsICpucCA9XG4tXHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0cG9sbCwgcmVmaWxsX3dxKTtcbi1cbi1cdHJlZmlsbF9za2JzKG5wKTtcbi19XG4tXG4gaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbztcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzO1xuIFx0aW50IGVycjtcbiBcbi1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bnAtXHUwMDNlc2tiX3Bvb2wpO1xuLVx0SU5JVF9XT1JLKFx1MDAyNm5wLVx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcbi1cbiBcdGlmIChuZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9ESVNBQkxFX05FVFBPTEwpIHtcbiBcdFx0bnBfZXJyKG5wLCBcIiVzIGRvZXNuJ3Qgc3VwcG9ydCBwb2xsaW5nLCBhYm9ydGluZ1xcblwiLFxuIFx0XHQgICAgICAgbmRldi1cdTAwM2VuYW1lKTtcbkBAIC00MTEsOSArMzY5LDYgQEAgaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0bnAtXHUwMDNlZGV2ID0gbmRldjtcbiBcdHN0cnNjcHkobnAtXHUwMDNlZGV2X25hbWUsIG5kZXYtXHUwMDNlbmFtZSwgSUZOQU1TSVopO1xuIFxuLVx0LyogZmlsbCB1cCB0aGUgc2tiIHF1ZXVlICovXG4tXHRyZWZpbGxfc2ticyhucCk7XG4tXG4gXHQvKiBsYXN0IHRoaW5nIHRvIGRvIGlzIGxpbmsgaXQgdG8gdGhlIG5ldCBkZXZpY2Ugc3RydWN0dXJlICovXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobmRldi1cdTAwM2VucGluZm8sIG5waW5mbyk7XG4gXG5AQCAtNjAzLDcgKzU1OCw3IEBAIGludCBuZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucClcbiBcbiBcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgbmRldik7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGZsdXNoO1xuK1x0XHRnb3RvIHB1dDtcbiBcdHJ0bmxfdW5sb2NrKCk7XG4gXG4gXHQvKiBNYWtlIHN1cmUgYWxsIE5BUEkgcG9sbHMgd2hpY2ggc3RhcnRlZCBiZWZvcmUgZGV2LVx1MDAzZW5waW5mb1xuQEAgLTYxNCw4ICs1NjksNiBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1mbHVzaDpcbi1cdHNrYl9wb29sX2ZsdXNoKG5wKTtcbiBwdXQ6XG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG5wLVx1MDAzZWRldik7XG4gXHRpZiAoaXBfb3ZlcndyaXR0ZW4pXG5AQCAtNjY2LDggKzYxOSw2IEBAIHN0YXRpYyB2b2lkIF9fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRwb2xsICpucClcbiBcdFx0UkNVX0lOSVRfUE9JTlRFUihucC1cdTAwM2VkZXYtXHUwMDNlbnBpbmZvLCBOVUxMKTtcbiBcdFx0Y2FsbF9yY3UoXHUwMDI2bnBpbmZvLVx1MDAzZXJjdSwgcmN1X2NsZWFudXBfbmV0cG9sbF9pbmZvKTtcbiBcdH1cbi1cbi1cdHNrYl9wb29sX2ZsdXNoKG5wKTtcbiB9XG4gXG4gdm9pZCBfX25ldHBvbGxfZnJlZShzdHJ1Y3QgbmV0cG9sbCAqbnApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjowMDo1Ni4yMjY2MDE1MjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODMzNTA2NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmc/IEl0IHNlZW1zIGxpa2UgaXQgZG9lcy4gVGhlIHBhdGNoIGlzIG1vdmluZyBzb21lIGtleSBzdHJ1Y3R1cmVzIOKAkyBgc2tiX3Bvb2xgLCBgcmVmaWxsX3dxYCwgYGxvY2FsX3BvcnRgLCBgcmVtb3RlX3BvcnRgLCBhbmQgYHJlbW90ZV9tYWNgIOKAkyBmcm9tIHRoZSBgbmV0cG9sbGAgc3RydWN0dXJlIHRvIHRoZSBgbmV0Y29uc29sZV90YXJnZXRgIHN0cnVjdHVyZS4gQW5kIGl0J3MgdXBkYXRpbmcgdGhlIGBuZXRjb25zb2xlLmNgIGFuZCBgbmV0cG9sbC5jYCBmaWxlcyB0byByZWZsZWN0IHRoZXNlIGNoYW5nZXMuIFRoYXQncyBkZWZpbml0ZWx5IGEgbW9kaWZpY2F0aW9uIHRvIGhvdyB0aGUgbmV0Y29uc29sZSBkcml2ZXIsIHNwZWNpZmljYWxseSBpdHMgU0tCIG1hbmFnZW1lbnQgYW5kIGNvcmUgY29uZmlndXJhdGlvbiwgb3BlcmF0ZXMuXG5cblRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byB0aGluayBhYm91dCBpcyByZWFjaGFiaWxpdHkgYW5kIHRlc3RhYmlsaXR5LiBOZXRjb25zb2xlLCBhcyBJIHJlY2FsbCwgaXMgYSBkcml2ZXIgZGVzaWduZWQgZm9yIHNlbmRpbmcga2VybmVsIGxvZyBtZXNzYWdlcyBvdmVyIFVEUC4gSXQgaGFzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aHJvdWdoIG1vZHVsZSBwYXJhbWV0ZXJzIGFuZCwgbW9yZSBpbnRlcmVzdGluZ2x5LCBjb25maWdmcy4gVGhlIGZpbGVzIHRvdWNoZWQgYnkgdGhlIHBhdGNoIGFyZSBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCBhbmQgYG5ldC9jb3JlL25ldHBvbGwuY2AuIEdpdmVuIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGZ1bmRhbWVudGFsIFNLQiBhbGxvY2F0aW9uIGFuZCBVRFAgdHJhbnNtaXNzaW9uIGxvZ2ljIGluIGJvdGggdGhlIG5ldGNvbnNvbGUgYW5kIG5ldHBvbGwgY29tcG9uZW50cywgaXQgY2VydGFpbmx5ICpzZWVtcyogd29ydGggZnV6emluZy4gSSBjYW4gaW1hZ2luZSBmdXp6aW5nIHRoZSBuZXRjb25zb2xlIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycyBhbmQgdGhlbiB0cmlnZ2VyaW5nIGtlcm5lbCBsb2dzIHRvIGV4ZXJjaXNlIHRoZSBjaGFuZ2VzLlxuXG5XYWl0IGEgc2Vjb25k4oCmIEkgdGhpbmsgU3l6a2FsbGVyIGNhbiBhY3R1YWxseSBpbnRlcmFjdCB3aXRoIGNvbmZpZ2ZzLCBjYW4ndCBpdD8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIHRoaXMgcGF0Y2gganVzdCBqdW1wZWQgdXAgaW4gcHJpb3JpdHkuIE5vdyBJIGp1c3QgbmVlZCB0byBkb3VibGUtY2hlY2sgd2hpY2gga2VybmVsIGNvbmZpZ3MgYXJlIHJlbGV2YW50IGhlcmUuIEknbSBwcmV0dHkgc3VyZSBgQ09ORklHX05FVENPTlNPTEVgIGFuZCBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgYXJlIHRoZSBrZXlzLCBidXQgbGV0J3MgcXVpY2tseSBzZWFyY2ggdGhlIGNvZGUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzUyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MDE6MDIuMDYwMTA5NzcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzY4NTQ5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVENPTlNPTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNDpjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDU6Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1Ni1cXHRib29sIFxcXCJQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MDE6MDQuMTM2OTc0OTkzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc2OTIzMzI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGUgY29yZSBjb25maWdzIGluIHBsYXkgYXJlIGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AuIFRoaXMgaXMgdGhlIGZpcnN0IHRoaW5nIEknZCBjaGVjayB3aGVuIGF1ZGl0aW5nIHNvbWV0aGluZyBsaWtlIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkLCBhbmQgdGhpcyBpcyB3aGVyZSBJJ2Qgc3RhcnQgZGlnZ2luZy4gSSd2ZSBub3RlZCB0aGF0IHRoZSBidWxrIG9mIHRoZSBjaGFuZ2VzIGFwcGVhciB3aXRoaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIEkndmUgbGlzdGVkIG91dCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgYSBzaW1pbGFyIGxpc3QgZm9yIGBuZXQvY29yZS9uZXRwb2xsLmNgLlxuXG5JIHF1aWNrbHkgc2VlIHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIC0gbW92aW5nIGtleSBmdW5jdGlvbnMgbGlrZSBgcmVmaWxsX3NrYnNgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAgYW5kIGByZWZpbGxfc2tic193b3JrX2hhbmRsZXJgIGZyb20gdGhlIGBuZXRwb2xsYCBzdWJzeXN0ZW0gdG8gYG5ldGNvbnNvbGVgLiBJJ2QgZXhwZWN0IHNvbWUgY2hhbmdlcyB0byBgbmV0cG9sbF9zZXR1cGAgYW5kIGBfX25ldHBvbGxfY2xlYW51cGAgdG9vLCBhbmQgaW5kZWVkIHRoZXJlIGFyZS5cblxuU28sIEkndmUgZ290IGEgcHJlbGltaW5hcnkgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgb246IHRob3NlIGludm9sdmVkIGluIGJ1ZmZlciBtYW5hZ2VtZW50IChgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YCwgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgLCBgcmVmaWxsX3NrYnNgLCBgbmV0Y29uc19za2JfcG9wYCwgYGZpbmRfc2tiYCksIHRoZSBhY3R1YWwgZGF0YSB0cmFuc21pc3Npb24gKGBwdXNoX3VkcGAsIGBwdXNoX2V0aGAsIGBuZXRwb2xsX3NlbmRfdWRwYCksIHRoZSB0YXJnZXQgY29uZmlndXJhdGlvbiAoYGFsbG9jX3BhcmFtX3RhcmdldGAsIGBmcmVlX3BhcmFtX3RhcmdldGAsIGBlbmFibGVkX3N0b3JlYCwgYGRyb3BfbmV0Y29uc29sZV90YXJnZXRgKSwgYW5kIGNvbW1hbmQtbGluZSBwYXJzaW5nIChgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWApLlxuXG5OZXh0LCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBuZXRjb25zb2xlYCBpcyByZWFjaGFibGUuIEFoLCByaWdodCwgdGhyb3VnaCBjb25maWdmcy4gR2l2ZW4gdGhpcyBmdW5jdGlvbmFsIHNoaWZ0IG9mIHN0YXRlIGZyb20gYG5ldHBvbGxgIHRvIGBuZXRjb25zb2xlX3RhcmdldGAsIGZ1enppbmcgdGhpcyBhcmVhIHNlZW1zIHdvcnRod2hpbGUuIEknZCBkZWZpbml0ZWx5IHdhbnQgdG8gZXhwbG9yZSB0aGUgZWRnZSBjYXNlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgbW92ZS5cblxuTm93LCBJJ2xsIHJlZmluZSBteSBzeW1ib2wgbGlzdC4gSXQgc2VlbXMgbGlrZSBhIHZlcnkgZ29vZCB0YXJnZXQgbGlzdC4gV2FpdCwgSSdtIGp1c3Qgbm90aWNpbmcgdGhhdCBtb3N0IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljIHdpdGhpbiBgbmV0Y29uc29sZS5jYC4gVGhhdCBpcyBrZXkgaW5mb3JtYXRpb24uIFRoaXMgbGltaXRzIHRoZWlyIGRpcmVjdCBleHRlcm5hbCBleHBvc3VyZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhleSdyZSB1c2VkIGludGVybmFsbHkuXG5cbkZpbmFsbHksIEknbGwgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHdoYXQgZWxzZSBkZXBlbmRzIG9uIGBuZXRwb2xsYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuZm9yZXNlZW4ga25vY2stb24gZWZmZWN0cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGlkZW50aWZpZWQgYWxsIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuIEFuZCB3aGlsZSBJIHNlZSBjaGFuZ2VzIHdpdGhpbiBgbmV0L2NvcmUvbmV0cG9sbC5jYCwgYXJlIHRoZXJlIG90aGVyIGNhbGxlcnM/IEkgbmVlZCB0byBjaGVjayB0aGUgZW50aXJlIGBuZXRwb2xsYCBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjg4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjAxOjEzLjkwNjIxMDY0MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQzMzg5OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHBvbGxfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTM5Mj1zdGF0aWMgaW5saW5lIGludCBzbGF2ZV9lbmFibGVfbmV0cG9sbChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xNDAxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTQwMjpcXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIHNsYXZlLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTQwMy1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE0NTE9c3RhdGljIHZvaWQgYm9uZF9uZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xNDYxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTQ2MjpzdGF0aWMgaW50IGJvbmRfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTQ2My17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU5NDk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBib25kX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5NjctI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1OTY4OlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gYm9uZF9uZXRwb2xsX3NldHVwLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTk2OS1cXHQubmRvX25ldHBvbGxfY2xlYW51cFxcdD0gYm9uZF9uZXRwb2xsX2NsZWFudXAsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9MTEzMD1zdGF0aWMgdm9pZCBtYWN2bGFuX2Rldl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTM0LVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMTM1OnN0YXRpYyBpbnQgbWFjdmxhbl9kZXZfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTM2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTQ2LVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMTQ3OlxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChuZXRwb2xsLCByZWFsX2Rldik7XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTExNDgtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTExODc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtYWN2bGFuX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTIwNi1cXHQubmRvX3BvbGxfY29udHJvbGxlclxcdD0gbWFjdmxhbl9kZXZfcG9sbF9jb250cm9sbGVyLFxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMjA3OlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gbWFjdmxhbl9kZXZfbmV0cG9sbF9zZXR1cCxcXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTIwOC1cXHQubmRvX25ldHBvbGxfY2xlYW51cFxcdD0gbWFjdmxhbl9kZXZfbmV0cG9sbF9jbGVhbnVwLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE0NT1lbnVtIHRhcmdldF9zdGF0ZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg3LSAqXFx0XFx0aXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscy4gTGlmZXRpbWUgYnJhY2tldHMgYVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODg6ICpcXHRcXHRzdWNjZXNzZnVsIG5ldHBvbGxfc2V0dXAoKSAvIG5ldHBvbGxfY2xlYW51cCgpIHBhaXIgb24gQG5wLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODktICogQHJlZmlsbF93cTpcXHRXb3JrIGl0ZW0gdGhhdCBhc3luY2hyb25vdXNseSB0b3BzIEBza2JfcG9vbCBiYWNrIHVwIHRvXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzU3PXN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzU4LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzU5OlxcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgbWFrZXMgbnQtXFx1MDAzZW5wLmRldlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNjAtXFx0ICogdmlzaWJsZSB0byB0YXJnZXRfbGlzdCB3YWxrZXJzIChlLmcuIG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNjUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjM2NjpcXHRpZiAobmV0cG9sbF9zZXR1cChcXHUwMDI2bnQtXFx1MDAzZW5wKSkge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNjctXFx0XFx0LyogbmV0cG9sbCBmYWlscyBzZXR1cCBvbmNlLCBkbyBub3QgdHJ5IGFnYWluLiAqL1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTM5MD1zdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQxNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDE2OlxcdC8qIG5ldHBvbGxfc2V0dXAoKSB0b29rIGEgbmV0X2RldmljZSByZWZlcmVuY2UgYW5kIGRyb3BwZWQgdGhlIFJUTkxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDE3LVxcdCAqIGJlZm9yZSByZXR1cm5pbmcsIGFsbCB3aGlsZSB0aGlzIHRhcmdldCB3YXMgb2ZmIHRhcmdldF9saXN0IGFuZFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTc4MD1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MzMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjgzNDpcXHRcXHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgzNS1cXHRcXHQgKiBpcyB2YWxpZCBhcyBzb29uIGFzIG50LVxcdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlIHRvXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NDI6XFx0XFx0cmV0ID0gbmV0cG9sbF9zZXR1cChcXHUwMDI2bnQtXFx1MDAzZW5wKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQzLVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMzkzPXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MjQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MjU6XFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbCBpc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDI2LVxcdCAqIHZhbGlkIGFzIHNvb24gYXMgbnQtXFx1MDAzZW5wLmRldiBiZWNvbWVzIHZpc2libGUuIFRoZSB0YXJnZXQgaXMgbm90XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQzMS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQzMjpcXHRlcnIgPSBuZXRwb2xsX3NldHVwKFxcdTAwMjZudC1cXHUwMDNlbnApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDMzLVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MTE0MD1zdGF0aWMgaW50IF9fdGVhbV9wb3J0X2VuYWJsZV9uZXRwb2xsKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTExNDgtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoxMTQ5OlxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgcG9ydC1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTExNTAtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMDc4PXN0YXRpYyB2b2lkIHRlYW1fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIwODYtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMDg3OnN0YXRpYyBpbnQgdGVhbV9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMDg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjE3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRlYW1fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE4NS1cXHQubmRvX3BvbGxfY29udHJvbGxlclxcdD0gdGVhbV9wb2xsX2NvbnRyb2xsZXIsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMTg2OlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gdGVhbV9uZXRwb2xsX3NldHVwLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE4Ny1cXHQubmRvX25ldHBvbGxfY2xlYW51cFxcdD0gdGVhbV9uZXRwb2xsX2NsZWFudXAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE0NDY9c3RydWN0IG5ldF9kZXZpY2Vfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTUwNC1cXHR2b2lkICAgICAgICAgICAgICAgICAgICAoKm5kb19wb2xsX2NvbnRyb2xsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTUwNTpcXHRpbnRcXHRcXHRcXHQoKm5kb19uZXRwb2xsX3NldHVwKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE1MDYtXFx0dm9pZFxcdFxcdFxcdCgqbmRvX25ldHBvbGxfY2xlYW51cCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaD02NT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0cG9sbF9wb2xsX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IHJldHVybjsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmgtNjctXFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6Njg6aW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaDo2OTppbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApO1xcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTcwLXZvaWQgX19uZXRwb2xsX2ZyZWUoc3RydWN0IG5ldHBvbGwgKm5wKTtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jPTcxND1zdGF0aWMgdm9pZCB2bGFuX2Rldl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTcxOC1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3MTk6c3RhdGljIGludCB2bGFuX2Rldl9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzIwLXtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTczMC1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3MzE6XFx0ZXJyID0gX19uZXRwb2xsX3NldHVwKG5ldHBvbGwsIHJlYWxfZGV2KTtcXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03MzItXFx0aWYgKGVycikge1xcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9MTA3OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTExMDQtXFx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcXHQ9IHZsYW5fZGV2X3BvbGxfY29udHJvbGxlcixcXG5uZXQvODAyMXEvdmxhbl9kZXYuYzoxMTA1OlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gdmxhbl9kZXZfbmV0cG9sbF9zZXR1cCxcXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMTA2LVxcdC5uZG9fbmV0cG9sbF9jbGVhbnVwXFx0PSB2bGFuX2Rldl9uZXRwb2xsX2NsZWFudXAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTMwNj1zdGF0aWMgaW50IF9fYnJfbmV0cG9sbF9lbmFibGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMzE0LVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MzE1OlxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgcC1cXHUwMDNlZGV2KTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTMxNi1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTMyNT1pbnQgYnJfbmV0cG9sbF9lbmFibGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMzMyLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MzMzOnN0YXRpYyBpbnQgYnJfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMzM0LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9NDM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYnJfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNDUxLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NDUyOlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdCA9IGJyX25ldHBvbGxfc2V0dXAsXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy00NTMtXFx0Lm5kb19uZXRwb2xsX2NsZWFudXBcXHQgPSBicl9uZXRwb2xsX2NsZWFudXAsXFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmM9MzMwPUVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XFxubmV0L2NvcmUvbmV0cG9sbC5jLTMzMS1cXG5uZXQvY29yZS9uZXRwb2xsLmM6MzMyOmludCBfX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG5uZXQvY29yZS9uZXRwb2xsLmMtMzMzLXtcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zNTktXFx0XFx0b3BzID0gbmRldi1cXHUwMDNlbmV0ZGV2X29wcztcXG5uZXQvY29yZS9uZXRwb2xsLmM6MzYwOlxcdFxcdGlmIChvcHMtXFx1MDAzZW5kb19uZXRwb2xsX3NldHVwKSB7XFxubmV0L2NvcmUvbmV0cG9sbC5jOjM2MTpcXHRcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19uZXRwb2xsX3NldHVwKG5kZXYpO1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zNjItXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zODEtfVxcbm5ldC9jb3JlL25ldHBvbGwuYzozODI6RVhQT1JUX1NZTUJPTF9HUEwoX19uZXRwb2xsX3NldHVwKTtcXG5uZXQvY29yZS9uZXRwb2xsLmMtMzgzLVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jPTQ1OT1zdGF0aWMgaW50IG5ldHBvbGxfdGFrZV9pcHY0KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmMtNDg2LSAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGVyIGxlZnQgbnAtXFx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XFxubmV0L2NvcmUvbmV0cG9sbC5jOjQ4NzogKiBuZXRwb2xsX3NldHVwKCkgc2hvdWxkIGF1dG8tcG9wdWxhdGUgaXQgZnJvbSB0aGUgZWdyZXNzIGRldmljZS5cXG5uZXQvY29yZS9uZXRwb2xsLmMtNDg4LSAqXFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmM9NDk1PXN0YXRpYyBib29sIG5ldHBvbGxfbG9jYWxfaXBfdW5zZXQoY29uc3Qgc3RydWN0IG5ldHBvbGwgKm5wKVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jLTUwMS1cXG5uZXQvY29yZS9uZXRwb2xsLmM6NTAyOmludCBuZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucClcXG5uZXQvY29yZS9uZXRwb2xsLmMtNTAzLXtcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy01NTgtXFxubmV0L2NvcmUvbmV0cG9sbC5jOjU1OTpcXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpO1xcbm5ldC9jb3JlL25ldHBvbGwuYy01NjAtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy01ODAtfVxcbm5ldC9jb3JlL25ldHBvbGwuYzo1ODE6RVhQT1JUX1NZTUJPTChuZXRwb2xsX3NldHVwKTtcXG5uZXQvY29yZS9uZXRwb2xsLmMtNTgyLVxcbi0tXFxubmV0L2RzYS91c2VyLmM9MTMwNT1zdGF0aWMgaW50IGRzYV91c2VyX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xMzEzLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbm5ldC9kc2EvdXNlci5jOjEzMTQ6c3RhdGljIGludCBkc2FfdXNlcl9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2RzYS91c2VyLmMtMTMxNS17XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xMzI0LVxcbm5ldC9kc2EvdXNlci5jOjEzMjU6XFx0ZXJyID0gX19uZXRwb2xsX3NldHVwKG5ldHBvbGwsIGNvbmR1aXQpO1xcbm5ldC9kc2EvdXNlci5jLTEzMjYtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L2RzYS91c2VyLmM9MjU4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRzYV91c2VyX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0yNTk3LSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbm5ldC9kc2EvdXNlci5jOjI1OTg6XFx0Lm5kb19uZXRwb2xsX3NldHVwXFx0PSBkc2FfdXNlcl9uZXRwb2xsX3NldHVwLFxcbm5ldC9kc2EvdXNlci5jLTI1OTktXFx0Lm5kb19uZXRwb2xsX2NsZWFudXBcXHQ9IGRzYV91c2VyX25ldHBvbGxfY2xlYW51cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MDE6MTYuMDQ5NjA5NjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTE4NzUwNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBOZXR3b3JrIENvbnNvbGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYG5ldGNvbnNvbGVgIGFuZCBgbmV0cG9sbGAuIFRoZSBgbmV0cG9sbGAgbW9kaWZpY2F0aW9ucyBhcmUgdGhlIGNvcmUgb2YgbXkgY29uY2Vybi4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIHJlbW92aW5nIHRoZSBgc2tiX3Bvb2xgIGFuZCBgcmVmaWxsX3dxYCBmcm9tIHRoZSBgc3RydWN0IG5ldHBvbGxgIGFuZCB0aGVuIHJpcHBpbmcgb3V0IHRoZSBhc3NvY2lhdGVkIGByZWZpbGxfc2tic2AgYW5kIGBza2JfcG9vbF9mbHVzaGAgY2FsbHMgZnJvbSBgbmV0cG9sbF9zZXR1cGAgYW5kIGBfX25ldHBvbGxfY2xlYW51cGAsIHJlc3BlY3RpdmVseS5cblxuVGhlIGltbWVkaWF0ZSBjb25zZXF1ZW5jZSB0aGF0IGp1bXBzIG91dCBpcyB0aGUgaW1wYWN0IG9uIGFsbCAqb3RoZXIqIHVzZXJzIG9mIGBuZXRwb2xsYC4gSSBtZWFuLCB0aGluayBhYm91dCBpdDogYGJvbmRfbWFpbi5jYCwgYG1hY3ZsYW4uY2AsIGB0ZWFtX2NvcmUuY2AsIGB2bGFuX2Rldi5jYCwgYGJyX2RldmljZS5jYCwgYW5kIGV2ZW4gYGRzYS91c2VyLmNgIOKAkyB0aGV5J3JlIGFsbCByZWx5aW5nIG9uIHNvbWUgZm9ybSBvZiBgbmV0cG9sbGAgc3RydWN0dXJlLiBBbmQgbm93LCB0aGV5J3JlICpub3QqIGdvaW5nIHRvIGhhdmUgYW4gYHNrYl9wb29sYCBhdmFpbGFibGUgdG8gdGhlbSBpbiB0aGVpciBgbmV0cG9sbGAgaW5zdGFuY2VzLiBUaGF0J3MgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0LCBhIGJpdCB1bnNldHRsaW5nLlxuXG5IbW0sIHRoaXMgcmFpc2VzIGEgY3J1Y2lhbCBxdWVzdGlvbi4gQXJlIHRoZXNlIG90aGVyIHVzZXJzIG9mIGBuZXRwb2xsYCBldmVuIHV0aWxpemluZyBgbmV0cG9sbF9zZW5kX3VkcGA/IElmIHRoZXkgYXJlbid0LCB0aGVuIG1heWJlIHRoaXMgaXNuJ3Qgc3VjaCBhIGJpZyBkZWFsLiBUaGUgYWJzZW5jZSBvZiB0aGUgYHNrYl9wb29sYCBtaWdodCBub3QgaGF2ZSBhbiBpbW1lZGlhdGUgZnVuY3Rpb25hbCBpbXBhY3QuIEJ1dCB0aGUgaW1wbGljYXRpb25zIG9mIGEgc2hhcmVkIHJlc291cmNlIHJlbW92ZWQgY2Fubm90IGJlIGlnbm9yZWQgYW5kLCBpbiB0aGlzIGNhc2UsIG5lZWRzIGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uLiBMZXQncyBzZWUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSB1c2VkLiBOZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzkyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjAxOjIyLjk2ODM2MzY0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU3MTY4Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHBvbGxfc2VuZF91ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xOTMwPXN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk1Mi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk1MzpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTU0LVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5OTAtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5OTE6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTkyLSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5OTUtICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk5NjogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5OTctICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk5ODogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk5OS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjAwMD1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMDEte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDAyOlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjAxOjI0LjgyNTUzODQ4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTQyMDIyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldGNvbnNvbGUgVURQIFRyYW5zbWlzc2lvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgbmV0Y29uc29sZWAgaGFuZGxlcyBVRFAgdHJhbnNtaXNzaW9uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYG5ldHBvbGxfc2VuZF91ZHBgIGlzIHN0YXRpY2FsbHkgZGVjbGFyZWQgd2l0aGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgaXQncyB0aWdodGx5IGJvdW5kIHRvIHRoYXQgc3BlY2lmaWMgbW9kdWxlLiBUaGVuIEkgcmVtZW1iZXIgdGhhdCBgbmV0cG9sbF9zZW5kX3NrYmAgaXMsIGluIGZhY3QsIGV4cG9ydGVkIGZyb20gYG5ldC9jb3JlL25ldHBvbGwuY2AuIFRoYXQncyB0aGUgbW9yZSBnZW5lcmFsIG5ldHdvcmtpbmcgY29tcG9uZW50LCBhbmQgSSdkIGV4cGVjdCB0aGF0IHRoZSBtb3JlIGdlbmVyYWwgc2VuZCBmdW5jdGlvbiBgbmV0cG9sbF9zZW5kX3NrYmAgbWF5IGhhdmUgYnJvYWRlciBhcHBsaWNhYmlsaXR5IHRoYW4gdGhlIHN0YXRpYyBuZXRjb25zb2xlIGZ1bmN0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBuZXRwb2xsX3NlbmRfc2tiYCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBvciBpbnRlcmFjdGluZyB3aXRoIGBza2JfcG9vbGAuIFRoYXQgd2lsbCBiZSBhbiBpbXBvcnRhbnQgaW5kaWNhdG9yIG9mIG1lbW9yeSBhbGxvY2F0aW9uLCBlZmZpY2llbmN5LCBhbmQgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgZ3JhcGggdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzgxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MDE6MjguMDM5NzQ0MDI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk0MDUxMjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHBvbGxfc2VuZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9Mjk3PW5ldGRldl90eF90IGJvbmRfZGV2X3F1ZXVlX3htaXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTMwNi1cXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGJvbmQtXFx1MDAzZWRldikpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzA3OlxcdFxcdHJldHVybiBib25kX25ldHBvbGxfc2VuZF9za2IoYm9uZF9nZXRfc2xhdmVfYnlfZGV2KGJvbmQsIHNsYXZlX2RldiksIHNrYik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMDgtXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9NTQ1PXN0YXRpYyBpbnQgbWFjdmxhbl9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtNTc0LVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzo1NzU6c3RhdGljIGlubGluZSBuZXRkZXZfdHhfdCBtYWN2bGFuX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01NzYte1xcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01NzctI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjU3ODpcXHRyZXR1cm4gbmV0cG9sbF9zZW5kX3NrYih2bGFuLVxcdTAwM2VuZXRwb2xsLCBza2IpO1xcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01NzktI2Vsc2VcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz01ODU9c3RhdGljIG5ldGRldl90eF90IG1hY3ZsYW5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU5Mi1cXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzo1OTM6XFx0XFx0cmV0dXJuIG1hY3ZsYW5fbmV0cG9sbF9zZW5kX3NrYih2bGFuLCBza2IpO1xcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01OTQtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTk1Mz1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5ODYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5ODc6XFx0cmV0dXJuIChpbnQpbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk4OC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaD05OT1zdGF0aWMgaW5saW5lIGJvb2wgdGVhbV9wb3J0X2Rldl90eGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTEyLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oOjExMzpzdGF0aWMgaW5saW5lIHZvaWQgdGVhbV9uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTE0LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTExNS17XFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg6MTE2OlxcdG5ldHBvbGxfc2VuZF9za2IocG9ydC1cXHUwMDNlbnAsIHNrYik7XFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTE3LX1cXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMTgtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaDoxMTk6c3RhdGljIGlubGluZSB2b2lkIHRlYW1fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0LFxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTEyMC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oPTIzNz1zdGF0aWMgaW5saW5lIGludCB0ZWFtX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCB0ZWFtICp0ZWFtLCBzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMjQ1LVxcdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcobmV0ZGV2X2Zyb21fcHJpdih0ZWFtKSkpKSB7XFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg6MjQ2OlxcdFxcdHRlYW1fbmV0cG9sbF9zZW5kX3NrYihwb3J0LCBza2IpO1xcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTI0Ny1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oPTcyPXZvaWQgZG9fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRwb2xsICpucCk7XFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6NzM6bmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTc0LXZvaWQgbmV0cG9sbF96YXBfY29tcGxldGlvbl9xdWV1ZSh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaD01NDg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYXZlX2xhc3RfdHgoc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4tLVxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC01NTMtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjU1NDpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IGJvbmRfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLFxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC01NTUtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1Ni17XFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjU1NzpcXHRyZXR1cm4gbmV0cG9sbF9zZW5kX3NrYihzbGF2ZS1cXHUwMDNlbnAsIHNrYik7XFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1OC19XFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1OS0jZWxzZVxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaDo1NjA6c3RhdGljIGlubGluZSBuZXRkZXZfdHhfdCBib25kX25ldHBvbGxfc2VuZF9za2IoY29uc3Qgc3RydWN0IHNsYXZlICpzbGF2ZSxcXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTYxLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9NDY9c3RhdGljIGludCB2bGFuX2Rldl9oYXJkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtODktXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6OTA6c3RhdGljIGlubGluZSBuZXRkZXZfdHhfdCB2bGFuX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtOTEte1xcbm5ldC84MDIxcS92bGFuX2Rldi5jLTkyLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjkzOlxcdHJldHVybiBuZXRwb2xsX3NlbmRfc2tiKHZsYW4tXFx1MDAzZW5ldHBvbGwsIHNrYik7XFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtOTQtI2Vsc2VcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jPTEwMD1zdGF0aWMgbmV0ZGV2X3R4X3Qgdmxhbl9kZXZfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMjMtXFx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcXG5uZXQvODAyMXEvdmxhbl9kZXYuYzoxMjQ6XFx0XFx0cmV0dXJuIHZsYW5fbmV0cG9sbF9zZW5kX3NrYih2bGFuLCBza2IpO1xcbm5ldC84MDIxcS92bGFuX2Rldi5jLTEyNS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTczPXN0YXRpYyB2b2lkIF9fYnJfZm9yd2FyZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICp0byxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTEwNi1cXHRcXHRcXHRlbHNlXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTA3OlxcdFxcdFxcdFxcdGJyX25ldHBvbGxfc2VuZF9za2IodG8sIHNrYik7XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMTA4LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTgwOT1uZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MTAtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6ODExOnN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRwb2xsX3NlbmRfc2tiKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODEyLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgxMy17XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6ODE0OlxcdG5ldHBvbGxfc2VuZF9za2IocC1cXHUwMDNlbnAsIHNrYik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODE1LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTgxOD12b2lkIGJyX25ldHBvbGxfZGlzYWJsZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MTktI2Vsc2VcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo4MjA6c3RhdGljIGlubGluZSB2b2lkIGJyX25ldHBvbGxfc2VuZF9za2IoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MjEtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmM9MjM5PXN0YXRpYyBpbnQgbmV0cG9sbF9vd25lcl9hY3RpdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0yNTAtLyogY2FsbCB3aXRoIElSUSBkaXNhYmxlZCAqL1xcbm5ldC9jb3JlL25ldHBvbGwuYzoyNTE6c3RhdGljIG5ldGRldl90eF90IF9fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvbmV0cG9sbC5jLTI1Mi17XFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmMtMjk5LVxcdFxcdFdBUk5fT05DRSghaXJxc19kaXNhYmxlZCgpLFxcbm5ldC9jb3JlL25ldHBvbGwuYzozMDA6XFx0XFx0XFx0XFxcIm5ldHBvbGxfc2VuZF9za2Jfb25fZGV2KCk6ICVzIGVuYWJsZWQgaW50ZXJydXB0cyBpbiBwb2xsICglcFMpXFxcXG5cXFwiLFxcbm5ldC9jb3JlL25ldHBvbGwuYy0zMDEtXFx0XFx0XFx0ZGV2LVxcdTAwM2VuYW1lLCBkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdGFydF94bWl0KTtcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zMTQtXFxubmV0L2NvcmUvbmV0cG9sbC5jOjMxNTpuZXRkZXZfdHhfdCBuZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9uZXRwb2xsLmMtMzE2LXtcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zMjQtXFx0XFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbm5ldC9jb3JlL25ldHBvbGwuYzozMjU6XFx0XFx0cmV0ID0gX19uZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zMjYtXFx0XFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jLTMyOS19XFxubmV0L2NvcmUvbmV0cG9sbC5jOjMzMDpFWFBPUlRfU1lNQk9MKG5ldHBvbGxfc2VuZF9za2IpO1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zMzEtXFxuLS1cXG5uZXQvZHNhL3VzZXIuYz04MTk9c3RhdGljIGludCBkc2FfdXNlcl9wb3J0X29ial9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqY3R4LFxcbi0tXFxubmV0L2RzYS91c2VyLmMtODY3LVxcbm5ldC9kc2EvdXNlci5jOjg2ODpzdGF0aWMgbmV0ZGV2X3R4X3QgZHNhX3VzZXJfbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9kc2EvdXNlci5jLTg2OS1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy04NzMtXFxubmV0L2RzYS91c2VyLmM6ODc0OlxcdHJldHVybiBuZXRwb2xsX3NlbmRfc2tiKHAtXFx1MDAzZW5ldHBvbGwsIHNrYik7XFxubmV0L2RzYS91c2VyLmMtODc1LSNlbHNlXFxuLS1cXG5uZXQvZHNhL3VzZXIuYz04OTU9bmV0ZGV2X3R4X3QgZHNhX2VucXVldWVfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy05MDAtXFx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcXG5uZXQvZHNhL3VzZXIuYzo5MDE6XFx0XFx0cmV0dXJuIGRzYV91c2VyX25ldHBvbGxfc2VuZF9za2IoZGV2LCBza2IpO1xcbm5ldC9kc2EvdXNlci5jLTkwMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MDE6MjkuOTMzNzk5ODc1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NzgwMDE4NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE5ldGNvbnNvbGUgYW5kIE5ldHBvbGwgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGltcGxpY2F0aW9ucyBmb3IgZnV6emluZyBqdW1wIG91dC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBuZXRwb2xsX3NlbmRfc2tiYCBsb29rZWQgbGlrZSBhIGNlbnRyYWwgcG9pbnQsIGNvbnNpZGVyaW5nIGl0cyB1c2UgYnkgdmFyaW91cyBkcml2ZXJzLiBIb3dldmVyLCB1cG9uIGNsb3NlciBpbnNwZWN0aW9uLCBJIHNlZSB0aGF0IGl0J3MgKm5vdCogdGhlIHByaW1hcnkgZnVuY3Rpb24gaGFuZGxpbmcgU0tCIGFsbG9jYXRpb24gb3IgcG9vbCBtYW5hZ2VtZW50LiBJdCdzIGp1c3QgYSB0cmFuc21pdHRlci4gVGhlIGtleSBsaWVzIGluIGBuZXRwb2xsX3NlbmRfdWRwYCwgd2hpY2gsIGFzIHRoZSBkaWZmIGNsZWFybHkgc2hvd3MsIHdhcyBhbHJlYWR5IHN0YXRpYyBhbmQgaXMgbm93IG1vdmVkIGludG8gdGhlIGBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0LCBhbG9uZyB3aXRoIHRoZSBgc2tiX3Bvb2xgIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucyBsaWtlIGBmaW5kX3NrYmAgYW5kIGBuZXRjb25zX3NrYl9wb3BgLlxuXG5UaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHNoaWZ0cyB0aGUgcmVzb3VyY2UgbWFuYWdlbWVudCBzcGVjaWZpY2FsbHkgdG8gYG5ldGNvbnNvbGUuY2AuIEVmZmVjdGl2ZWx5LCB0aGUgcGF0Y2ggaXMgcmVvcmdhbml6aW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMsIG1vdmluZyB0aGUgU0tCIHBvb2wgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gdGhlIGdlbmVyYWwgYG5ldHBvbGxgIGNvbnRleHQgdG8gYSBtb3JlIHNwZWNpZmljIGBuZXRjb25zb2xlX3RhcmdldGAgY29udGV4dC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgU0tCIHBvb2wgaXMgKm9ubHkqIHVzZWQgYnkgYG5ldGNvbnNvbGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLlxuXG5HaXZlbiB0aGlzLCBJIGJlbGlldmUgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgYG5ldGNvbnNvbGVgIGNvbmZpZ3VyYXRpb24gYW5kIHVzYWdlLiBUaGUgbW9zdCByZWxldmFudCBzeW1ib2xzIHRvIHRhcmdldCBhcmUgdGhlIG9uZXMgcmVsYXRlZCB0byBTS0IgcG9vbCBtYW5hZ2VtZW50LCBzZW5kaW5nIHRoZSBVRFAgZGF0YWdyYW1zLCB0YXJnZXQgc2V0dXAvY2xlYW51cCwgYW5kIGNvbmZpZ3VyYXRpb24gcGFyc2luZy5cblxuTXkgaW5pdGlhbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgaW5jbHVkZXMgYSBjb21wcmVoZW5zaXZlIHJhbmdlIG9mIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgYW5kIHJlbGV2YW50IGZ1bmN0aW9uczpcblxuKiAgIGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgXG4qICAgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgXG4qICAgYHJlZmlsbF9za2JzYCBcdTAwMjYgYHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcmBcbiogICBgbmV0Y29uc19za2JfcG9wYFxuKiAgIGBmaW5kX3NrYmBcbiogICBgcHVzaF91ZHBgXG4qICAgYHB1c2hfZXRoYFxuKiAgIGBuZXRwb2xsX3NlbmRfdWRwYCBcdTAwMjYgYHNlbmRfdWRwYFxuKiAgIGByZXN1bWVfdGFyZ2V0YFxuKiAgIGBwcm9jZXNzX3Jlc3VtZV90YXJnZXRgXG4qICAgYGFsbG9jX2FuZF9pbml0YFxuKiAgIGBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHNfY29yZWBcbiogICBgbmV0Y29uc29sZV9wcmludF9iYW5uZXJgXG4qICAgYGVuYWJsZWRfc3RvcmVgXG4qICAgYGRyb3BfbmV0Y29uc29sZV90YXJnZXRgXG4qICAgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgXG4qICAgYGFsbG9jX3BhcmFtX3RhcmdldGBcbiogICBgZnJlZV9wYXJhbV90YXJnZXRgXG4qICAgYF9fbmV0cG9sbF9zZXR1cGBcbiogICBgbmV0cG9sbF9zZXR1cGBcbiogICBgX19uZXRwb2xsX2NsZWFudXBgXG5cbkFmdGVyIHNvbWUgZnVydGhlciByZWZpbmVtZW50LCBhbmQgdG8gYXZvaWQgaW5jbHVkaW5nIHRvbyBtYW55IGdlbmVyaWMgZnVuY3Rpb25zLCBJIHdpbGwgcGFyZSB0aGUgbGlzdCBkb3duIHRvIHRoZXNlIGtleSBmdW5jdGlvbnM6XG5cbiogICBgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YFxuKiAgIGBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoYFxuKiAgIGByZWZpbGxfc2tic2BcbiogICBgbmV0Y29uc19za2JfcG9wYFxuKiAgIGBmaW5kX3NrYmBcbiogICBgbmV0cG9sbF9zZW5kX3VkcGBcbiogICBgZW5hYmxlZF9zdG9yZWBcbiogICBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGBcbiogICBgYWxsb2NfcGFyYW1fdGFyZ2V0YFxuKiAgIGBmcmVlX3BhcmFtX3RhcmdldGBcbiogICBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWBcbiogICBgX19uZXRwb2xsX3NldHVwYFxuKiAgIGBuZXRwb2xsX3NldHVwYFxuKiAgIGBfX25ldHBvbGxfY2xlYW51cGBcblxuVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgd2lsbCBiZSBgTkVUQ09OU09MRWAgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZGVwZW5kZW5jaWVzIGZvciBleGVyY2lzaW5nIHRoaXMgY29kZS5cblxuVG8gcmVjYXAsIHRoZSBwYXRjaCBtb3ZlcyBTS0IgcG9vbCBtYW5hZ2VtZW50IGFuZCB0YXJnZXQgY29uZmlndXJhdGlvbnMgZnJvbSBgc3RydWN0IG5ldHBvbGxgIHRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLCBtb2RpZmllcyBpbml0aWFsaXphdGlvbiBhbmQgZmx1c2hpbmcgYW5kIHRoZSBuZXRwb2xsIHNldHVwL2NsZWFudXAgcGF0aHMuIFRodXMsIGZ1enppbmcgc2hvdWxkIGNvbmNlbnRyYXRlIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGNvbmZpZ3VyYXRpb24sIHJlc291cmNlIG1hbmFnZW1lbnQgKFNLQiBwb29sKSwgYW5kIHRoZSBzZW5kaW5nIG9mIFVEUCBkYXRhZ3JhbXMuIFRoZSBwcmltYXJ5IHRhcmdldHMgYXJlIHdpdGhpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCBidXQgYG5ldC9jb3JlL25ldHBvbGwuY2AgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MTgsIk91dHB1dFRva2VucyI6MjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjowMTo0NC43MTM4MjA1NjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTk3Mjc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0Y29uc29sZV9za2JfcG9vbF9pbml0XCIsXG4gICAgXCJuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoXCIsXG4gICAgXCJyZWZpbGxfc2tic1wiLFxuICAgIFwibmV0Y29uc19za2JfcG9wXCIsXG4gICAgXCJmaW5kX3NrYlwiLFxuICAgIFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwiZHJvcF9uZXRjb25zb2xlX3RhcmdldFwiLFxuICAgIFwiYWxsb2NfcGFyYW1fdGFyZ2V0XCIsXG4gICAgXCJmcmVlX3BhcmFtX3RhcmdldFwiLFxuICAgIFwibmV0Y29uc29sZV9wYXJzZXJfY21kbGluZVwiLFxuICAgIFwiX19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRwb2xsX3NldHVwXCIsXG4gICAgXCJfX25ldHBvbGxfY2xlYW51cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBTS0IgcG9vbCBhbmQgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gKHBvcnRzLCBNQUMpIGZyb20gYHN0cnVjdCBuZXRwb2xsYCB0byBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YC4gSXQgbW9kaWZpZXMgaG93IG5ldGNvbnNvbGUgaW5pdGlhbGl6ZXMgYW5kIGZsdXNoZXMgdGhlIFNLQiBwb29sLCBhbmQgdXBkYXRlcyB0aGUgbmV0cG9sbCBzZXR1cC9jbGVhbnVwIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGFuZCBuZXRwb2xsIGNvcmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRjb25zb2xlX3NrYl9wb29sX2luaXRcIixcbiAgICBcIm5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hcIixcbiAgICBcInJlZmlsbF9za2JzXCIsXG4gICAgXCJuZXRjb25zX3NrYl9wb3BcIixcbiAgICBcImZpbmRfc2tiXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJkcm9wX25ldGNvbnNvbGVfdGFyZ2V0XCIsXG4gICAgXCJhbGxvY19wYXJhbV90YXJnZXRcIixcbiAgICBcImZyZWVfcGFyYW1fdGFyZ2V0XCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJfX25ldHBvbGxfc2V0dXBcIixcbiAgICBcIm5ldHBvbGxfc2V0dXBcIixcbiAgICBcIl9fbmV0cG9sbF9jbGVhbnVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIFNLQiBwb29sIGFuZCB0YXJnZXQgY29uZmlndXJhdGlvbiAocG9ydHMsIE1BQykgZnJvbSBgc3RydWN0IG5ldHBvbGxgIHRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLiBJdCBtb2RpZmllcyBob3cgbmV0Y29uc29sZSBpbml0aWFsaXplcyBhbmQgZmx1c2hlcyB0aGUgU0tCIHBvb2wsIGFuZCB1cGRhdGVzIHRoZSBuZXRwb2xsIHNldHVwL2NsZWFudXAgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbmV0Y29uc29sZSBkcml2ZXIgYW5kIG5ldHBvbGwgY29yZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgdmlhIGNvbmZpZ2ZzIG9yIG1vZHVsZSBwYXJhbWV0ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb7qzm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 15:52:24 +0000 UTC FinishedAt: 2026-07-02 16:01:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1c664ec4b9ea827b609d296921ed5bad8a40a158", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1c664ec4b9ea827b609d296921ed5bad8a40a158", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC" ], "series_id": "4971cf77-1ce6-4ba7-9101-201bc51c6d0f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netconsole_skb_pool_init", "netconsole_skb_pool_flush", "refill_skbs", "netcons_skb_pop", "find_skb", "netpoll_send_udp", "enabled_store", "drop_netconsole_target", "alloc_param_target", "free_param_target", "netconsole_parser_cmdline", "__netpoll_setup", "netpoll_setup", "__netpoll_cleanup" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0Y29uc29sZV9za2JfcG9vbF9pbml0JiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gmIzM0OywKICAgICYjMzQ7cmVmaWxsX3NrYnMmIzM0OywKICAgICYjMzQ7bmV0Y29uc19za2JfcG9wJiMzNDssCiAgICAmIzM0O2ZpbmRfc2tiJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtkcm9wX25ldGNvbnNvbGVfdGFyZ2V0JiMzNDssCiAgICAmIzM0O2FsbG9jX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtmcmVlX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lJiMzNDssCiAgICAmIzM0O19fbmV0cG9sbF9zZXR1cCYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O19fbmV0cG9sbF9jbGVhbnVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBTS0IgcG9vbCBhbmQgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gKHBvcnRzLCBNQUMpIGZyb20gYHN0cnVjdCBuZXRwb2xsYCB0byBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YC4gSXQgbW9kaWZpZXMgaG93IG5ldGNvbnNvbGUgaW5pdGlhbGl6ZXMgYW5kIGZsdXNoZXMgdGhlIFNLQiBwb29sLCBhbmQgdXBkYXRlcyB0aGUgbmV0cG9sbCBzZXR1cC9jbGVhbnVwIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGFuZCBuZXRwb2xsIGNvcmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdkNmJmODQwYmY3NDhiYjRlMmMxYmVjOTQyMGUwNjMyNjVkODRlMDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE2OjAwOjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuaW5kZXggYzE4MTJhOTgzNjViNzguLmUzNmIwOTk4YzgxMDk2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbkBAIC02MSw2ICYjNDM7NjEsMTkgQEAgTU9EVUxFX0lNUE9SVF9OUyhcJiMzNDtORVRERVZfSU5URVJOQUxcJiMzNDspO1xuICNkZWZpbmUgTUFYX1VTRVJEQVRBX0lURU1TXHRcdDI1NlxuICNkZWZpbmUgTUFYX1BSSU5UX0NIVU5LXHRcdFx0MTAwMFxuIFxuJiM0MzsvKlxuJiM0MzsgKiBTaXppbmcgZm9yIHRoZSBwZXItdGFyZ2V0IGZhbGxiYWNrIHNrYiBwb29sIGNvbnN1bHRlZCBieSBmaW5kX3NrYigpXG4mIzQzOyAqIHdoZW4gaXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscyBzbyBtZXNzYWdlcyBzdGlsbCBnZXQgb3V0IHVuZGVyXG4mIzQzOyAqIG1lbW9yeSBwcmVzc3VyZS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgTUFYX1VEUF9DSFVOS1x0XHRcdDE0NjBcbiYjNDM7I2RlZmluZSBNQVhfU0tCU1x0XHRcdDMyXG4mIzQzOyNkZWZpbmUgTUFYX1NLQl9TSVpFXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdChzaXplb2Yoc3RydWN0IGV0aGhkcikgJiM0MztcdFx0XHRcdFx0XFxcbiYjNDM7XHQgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MztcdFx0XHRcdFx0XHRcXFxuJiM0MztcdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MztcdFx0XHRcdFx0XFxcbiYjNDM7XHQgTUFYX1VEUF9DSFVOSylcbiYjNDM7XG4gc3RhdGljIGNoYXIgY29uZmlnW01BWF9QQVJBTV9MRU5HVEhdO1xuIG1vZHVsZV9wYXJhbV9zdHJpbmcobmV0Y29uc29sZSwgY29uZmlnLCBNQVhfUEFSQU1fTEVOR1RILCAwKTtcbiBNT0RVTEVfUEFSTV9ERVNDKG5ldGNvbnNvbGUsIFwmIzM0OyBuZXRjb25zb2xlPVtzcmMtcG9ydF1AW3NyYy1pcF0vW2Rldl0sW3RndC1wb3J0XUBcdTAwM2N0Z3QtaXBcdTAwM2UvW3RndC1tYWNhZGRyXVwmIzM0Oyk7XG5AQCAtMTYyLDE0ICYjNDM7MTc1LDE5IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcbiAgKiBAbnA6XHRcdFRoZSBuZXRwb2xsIHN0cnVjdHVyZSBmb3IgdGhpcyB0YXJnZXQuXG4gICpcdFx0Q29udGFpbnMgdGhlIG90aGVyIHVzZXJzcGFjZSB2aXNpYmxlIHBhcmFtZXRlcnM6XG4gICpcdFx0ZGV2X25hbWVcdChyZWFkLXdyaXRlKVxuLSAqXHRcdGxvY2FsX3BvcnRcdChyZWFkLXdyaXRlKVxuLSAqXHRcdHJlbW90ZV9wb3J0XHQocmVhZC13cml0ZSlcbiAgKlx0XHRsb2NhbF9pcFx0KHJlYWQtd3JpdGUpXG4gICpcdFx0cmVtb3RlX2lwXHQocmVhZC13cml0ZSlcbiAgKlx0XHRsb2NhbF9tYWNcdChyZWFkLW9ubHkpXG4tICpcdFx0cmVtb3RlX21hY1x0KHJlYWQtd3JpdGUpXG4mIzQzOyAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuJiM0MzsgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuJiM0MzsgKiBAcmVtb3RlX21hYzpcdERlc3RpbmF0aW9uIGV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQGJ1ZjpcdFRoZSBidWZmZXIgdXNlZCB0byBzZW5kIHRoZSBmdWxsIG1zZyB0byB0aGUgbmV0d29yayBzdGFja1xuICAqIEByZXN1bWVfd3E6XHRXb3JrcXVldWUgdG8gcmVzdW1lIGRlYWN0aXZhdGVkIHRhcmdldFxuJiM0MzsgKiBAc2tiX3Bvb2w6XHRQZXItdGFyZ2V0IGZhbGxiYWNrIHNrYiBwb29sIGNvbnN1bHRlZCBieSBmaW5kX3NrYigpIHdoZW5cbiYjNDM7ICpcdFx0aXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscy4gTGlmZXRpbWUgYnJhY2tldHMgYVxuJiM0MzsgKlx0XHRzdWNjZXNzZnVsIG5ldHBvbGxfc2V0dXAoKSAvIG5ldHBvbGxfY2xlYW51cCgpIHBhaXIgb24gQG5wLlxuJiM0MzsgKiBAcmVmaWxsX3dxOlx0V29yayBpdGVtIHRoYXQgYXN5bmNocm9ub3VzbHkgdG9wcyBAc2tiX3Bvb2wgYmFjayB1cCB0b1xuJiM0MzsgKlx0XHRNQVhfU0tCUyBhZnRlciBmaW5kX3NrYigpIGRyYWlucyBhbiBlbnRyeS5cbiAgKi9cbiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbkBAIC0xOTAsMTEgJiM0MzsyMDgsMTUgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdGJvb2xcdFx0XHRleHRlbmRlZDtcbiBcdGJvb2xcdFx0XHRyZWxlYXNlO1xuIFx0c3RydWN0IG5ldHBvbGxcdFx0bnA7XG4mIzQzO1x0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4mIzQzO1x0dThcdFx0XHRyZW1vdGVfbWFjW0VUSF9BTEVOXTtcbiBcdC8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyAmIzQzOzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzXG4gXHQgKiBOVUwgdGVybWluYXRvciBzbyBhIGZ1bGwgTUFYX1BSSU5UX0NIVU5LIHBheWxvYWQgaXMgbm90IHRydW5jYXRlZFxuIFx0ICovXG4gXHRjaGFyXHRcdFx0YnVmW01BWF9QUklOVF9DSFVOSyAmIzQzOyAxXTtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdFx0cmVzdW1lX3dxO1xuJiM0MztcdHN0cnVjdCBza19idWZmX2hlYWRcdHNrYl9wb29sO1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdFx0cmVmaWxsX3dxO1xuIH07XG4gXG4gI2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5AQCAtMjkyLDExICYjNDM7MzE0LDU4IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNfcmVsZWFzZV9kZXYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdFx0bWVtc2V0KFx1MDAyNm50LVx1MDAzZW5wLmRldl9uYW1lLCAwLCBJRk5BTVNJWik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCByZWZpbGxfc2ticyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmZfaGVhZCAqc2tiX3Bvb2wgPSBcdTAwMjZudC1cdTAwM2Vza2JfcG9vbDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoUkVBRF9PTkNFKHNrYl9wb29sLVx1MDAzZXFsZW4pIFx1MDAzYyBNQVhfU0tCUykge1xuJiM0MztcdFx0c2tiID0gYWxsb2Nfc2tiKE1BWF9TS0JfU0laRSwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4mIzQzO1x0XHRpZiAoIXNrYilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0c2tiX3F1ZXVlX3RhaWwoc2tiX3Bvb2wsIHNrYik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9XG4mIzQzO1x0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0LCByZWZpbGxfd3EpO1xuJiM0MztcbiYjNDM7XHRyZWZpbGxfc2ticyhudCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEluaXRpYWxpc2UgdGhlIHBlci10YXJnZXQgc2tiIHBvb2wgdGhhdCBmaW5kX3NrYigpIGZhbGxzIGJhY2sgdG8gYW5kXG4mIzQzOyAqIHNlZWQgaXQuIFBhaXIgd2l0aCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkgYXQgdGhlIG1hdGNoaW5nXG4mIzQzOyAqIG5ldHBvbGwgdGVhcmRvd24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiYjNDM7e1xuJiM0MztcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bnQtXHUwMDNlc2tiX3Bvb2wpO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZudC1cdTAwM2VyZWZpbGxfd3EsIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcik7XG4mIzQzO1x0cmVmaWxsX3NrYnMobnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4mIzQzO3tcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm50LVx1MDAzZXJlZmlsbF93cSk7XG4mIzQzO1x0c2tiX3F1ZXVlX3B1cmdlX3JlYXNvbihcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCwgU0tCX0NPTlNVTUVEKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBBdHRlbXB0cyB0byByZXN1bWUgbG9nZ2luZyB0byBhIGRlYWN0aXZhdGVkIHRhcmdldC4gKi9cbiBzdGF0aWMgdm9pZCByZXN1bWVfdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4ge1xuJiM0MztcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgbWFrZXMgbnQtXHUwMDNlbnAuZGV2XG4mIzQzO1x0ICogdmlzaWJsZSB0byB0YXJnZXRfbGlzdCB3YWxrZXJzIChlLmcuIG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSxcbiYjNDM7XHQgKiB3aGljaCBvdGhlcndpc2UgbWF5IG1vdmUgdGhlIHRhcmdldCB0byB0aGUgY2xlYW51cCBsaXN0IGFuZFxuJiM0MztcdCAqIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcbiYjNDM7XG4gXHRpZiAobmV0cG9sbF9zZXR1cChcdTAwMjZudC1cdTAwM2VucCkpIHtcbiBcdFx0LyogbmV0cG9sbCBmYWlscyBzZXR1cCBvbmNlLCBkbyBub3QgdHJ5IGFnYWluLiAqL1xuJiM0MztcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XG4gXHRcdHJldHVybjtcbiBcdH1cbkBAIC0zNTgsNiAmIzQzOzQyNyw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRydG5sX2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEIFx1MDAyNlx1MDAyNiBudC1cdTAwM2VucC5kZXYgXHUwMDI2XHUwMDI2XG4gXHQgICAgbnQtXHUwMDNlbnAuZGV2LVx1MDAzZXJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkge1xuJiM0MztcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG5ldGNvbnNfcmVsZWFzZV9kZXYobnQpO1xuIFx0XHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xuIFx0fVxuQEAgLTM5Myw5ICYjNDM7NDYzLDkgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcbiBcbiBcdG50LVx1MDAzZW5wLm5hbWUgPSBcJiMzNDtuZXRjb25zb2xlXCYjMzQ7O1xuIFx0c3Ryc2NweShudC1cdTAwM2VucC5kZXZfbmFtZSwgXCYjMzQ7ZXRoMFwmIzM0OywgSUZOQU1TSVopO1xuLVx0bnQtXHUwMDNlbnAubG9jYWxfcG9ydCA9IDY2NjU7XG4tXHRudC1cdTAwM2VucC5yZW1vdGVfcG9ydCA9IDY2NjY7XG4tXHRldGhfYnJvYWRjYXN0X2FkZHIobnQtXHUwMDNlbnAucmVtb3RlX21hYyk7XG4mIzQzO1x0bnQtXHUwMDNlbG9jYWxfcG9ydCA9IDY2NjU7XG4mIzQzO1x0bnQtXHUwMDNlcmVtb3RlX3BvcnQgPSA2NjY2O1xuJiM0MztcdGV0aF9icm9hZGNhc3RfYWRkcihudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiBcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XG4gXHRJTklUX1dPUksoXHUwMDI2bnQtXHUwMDNlcmVzdW1lX3dxLCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQpO1xuIFxuQEAgLTQxNyw2ICYjNDM7NDg3LDcgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShudCwgdG1wLCBcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0LCBsaXN0KSB7XG4gXHRcdC8qIGFsbCBlbnRyaWVzIGluIHRoZSBjbGVhbnVwX2xpc3QgbmVlZHMgdG8gYmUgZGlzYWJsZWQgKi9cbiBcdFx0V0FSTl9PTl9PTkNFKG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpO1xuJiM0MztcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG5ldGNvbnNfcmVsZWFzZV9kZXYobnQpO1xuIFx0XHQvKiBtb3ZlZCB0aGUgY2xlYW5lZCB0YXJnZXQgdG8gdGFyZ2V0X2xpc3QuIE5lZWQgdG8gaG9sZCBib3RoXG4gXHRcdCAqIGxvY2tzXG5AQCAtNDI5LDIxICYjNDM7NTAwLDIzIEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKHZvaWQpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldHBvbGwgKm5wKVxuJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbi1cdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIHBvcnQgJWRcXG5cJiMzNDssIG5wLVx1MDAzZWxvY2FsX3BvcnQpO1xuJiM0MztcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuJiM0MztcbiYjNDM7XHRucF9pbmZvKG5wLCBcJiMzNDtsb2NhbCBwb3J0ICVkXFxuXCYjMzQ7LCBudC1cdTAwM2Vsb2NhbF9wb3J0KTtcbiBcdGlmIChucC1cdTAwM2VpcHY2KVxuIFx0XHRucF9pbmZvKG5wLCBcJiMzNDtsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcXG5cJiMzNDssIFx1MDAyNm5wLVx1MDAzZWxvY2FsX2lwLmluNik7XG4gXHRlbHNlXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZucC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXHRucF9pbmZvKG5wLCBcJiMzNDtpbnRlcmZhY2UgbmFtZSAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG5wLVx1MDAzZWRldl9uYW1lKTtcbiBcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIGV0aGVybmV0IGFkZHJlc3MgJiMzOTslcE0mIzM5O1xcblwmIzM0OywgbnAtXHUwMDNlZGV2X21hYyk7XG4tXHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgcG9ydCAlZFxcblwmIzM0OywgbnAtXHUwMDNlcmVtb3RlX3BvcnQpO1xuJiM0MztcdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBwb3J0ICVkXFxuXCYjMzQ7LCBudC1cdTAwM2VyZW1vdGVfcG9ydCk7XG4gXHRpZiAobnAtXHUwMDNlaXB2NilcbiBcdFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwmIzM0OywgXHUwMDI2bnAtXHUwMDNlcmVtb3RlX2lwLmluNik7XG4gXHRlbHNlXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBJUHY0IGFkZHJlc3MgJXBJNFxcblwmIzM0OywgXHUwMDI2bnAtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbi1cdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxcblwmIzM0OywgbnAtXHUwMDNlcmVtb3RlX21hYyk7XG4mIzQzO1x0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCYjMzQ7LCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiB9XG4gXG4gLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzXG5AQCAtNTYxLDEyICYjNDM7NjM0LDEyIEBAIHN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4gXG4gc3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWRcXG5cJiMzNDssIHRvX3RhcmdldChpdGVtKS1cdTAwM2VucC5sb2NhbF9wb3J0KTtcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCB0b190YXJnZXQoaXRlbSktXHUwMDNlbG9jYWxfcG9ydCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuLVx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslZFxcblwmIzM0OywgdG9fdGFyZ2V0KGl0ZW0pLVx1MDAzZW5wLnJlbW90ZV9wb3J0KTtcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCB0b190YXJnZXQoaXRlbSktXHUwMDNlcmVtb3RlX3BvcnQpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuQEAgLTU5OSw3ICYjNDM7NjcyLDcgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBNXFxuXCYjMzQ7LCB0b190YXJnZXQoaXRlbSktXHUwMDNlbnAucmVtb3RlX21hYyk7XG4mIzQzO1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcE1cXG5cJiMzNDssIHRvX3RhcmdldChpdGVtKS1cdTAwM2VyZW1vdGVfbWFjKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfZXJyb3JzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5AQCAtNzU2LDExICYjNDM7ODI5LDIxIEBAIHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIFx0XHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXG4gXHRcdCAqIGFscmVhZHkgY29uZmlndXJlZCB2aWEgY29uZmlnZnMuIEp1c3QgcHJpbnQgdGhlbSBvdXQuXG4gXHRcdCAqL1xuLVx0XHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihcdTAwMjZudC1cdTAwM2VucCk7XG4mIzQzO1x0XHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihudCk7XG4mIzQzO1xuJiM0MztcdFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbFxuJiM0MztcdFx0ICogaXMgdmFsaWQgYXMgc29vbiBhcyBudC1cdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlIHRvXG4mIzQzO1x0XHQgKiB0YXJnZXRfbGlzdCB3YWxrZXJzIChuZXRjb25zb2xlX25ldGRldl9ldmVudCksIHdoaWNoIHdvdWxkXG4mIzQzO1x0XHQgKiBvdGhlcndpc2UgY2FsbCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkgb24gdW5pbml0aWFsaXNlZFxuJiM0MztcdFx0ICogc3RhdGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XG4gXG4gXHRcdHJldCA9IG5ldHBvbGxfc2V0dXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuLVx0XHRpZiAocmV0KVxuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRU5BQkxFRDtcbiBcdFx0cHJfaW5mbyhcJiMzNDtuZXR3b3JrIGxvZ2dpbmcgc3RhcnRlZFxcblwmIzM0Oyk7XG5AQCAtODg1LDcgJiM0Mzs5NjgsNyBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXHUwMDI2bnQtXHUwMDNlbnAubG9jYWxfcG9ydCk7XG4mIzQzO1x0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFx1MDAyNm50LVx1MDAzZWxvY2FsX3BvcnQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0cmV0ID0gY291bnQ7XG5AQCAtOTA3LDcgJiM0Mzs5OTAsNyBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdHJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCBcdTAwMjZudC1cdTAwM2VucC5yZW1vdGVfcG9ydCk7XG4mIzQzO1x0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdHJldCA9IGNvdW50O1xuQEAgLTk5NCw3ICYjNDM7MTA3Nyw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdGlmIChidWZbTUFDX0FERFJfU1RSX0xFTl0gXHUwMDI2XHUwMDI2IGJ1ZltNQUNfQUREUl9TVFJfTEVOXSAhPSAmIzM5O1xcbiYjMzk7KVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRtZW1jcHkobnQtXHUwMDNlbnAucmVtb3RlX21hYywgcmVtb3RlX21hYywgRVRIX0FMRU4pO1xuJiM0MztcdG1lbWNweShudC1cdTAwM2VyZW1vdGVfbWFjLCByZW1vdGVfbWFjLCBFVEhfQUxFTik7XG4gXG4gXHRyZXQgPSBjb3VudDtcbiBvdXRfdW5sb2NrOlxuQEAgLTE1MTQsOCAmIzQzOzE1OTcsMTAgQEAgc3RhdGljIHZvaWQgZHJvcF9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbiBcdCAqIG5ldHBvbGxfY2xlYW51cCgpIGlzIGlkZW1wb3RlbnQgKGl0IHNraXBzIHdoZW4gbnAtXHUwMDNlZGV2IGlzIE5VTEwpLCBzb1xuIFx0ICogaXQgaXMgc2FmZSBldmVuIGlmIHRoZSBjbGVhbnVwIHdvcmtlciBhbHJlYWR5IHRvcmUgdGhlIG5ldHBvbGwgZG93bi5cbiBcdCAqL1xuLVx0aWYgKG5lZWRzX2NsZWFudXApXG4mIzQzO1x0aWYgKG5lZWRzX2NsZWFudXApIHtcbiYjNDM7XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuIFx0XHRuZXRwb2xsX2NsZWFudXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuJiM0MztcdH1cbiBcbiBcdGNvbmZpZ19pdGVtX3B1dChcdTAwMjZudC1cdTAwM2Vncm91cC5jZ19pdGVtKTtcbiB9XG5AQCAtMTcwNiw3ICYjNDM7MTc5MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XG4gICogcG9vbCBsb2NrcyBhbmQgaXMgdGhlcmVmb3JlIG5vdCBOTUktc2FmZS4gU2tpcCB0aGUgcmVmaWxsIHdoZW4gY2FsbGVkXG4gICogZnJvbSBOTUkgY29udGV4dDsgdGhlIG5leHQgbm9uLU5NSSBjYWxsZXIgd2lsbCB0b3AgdGhlIHBvb2wgYmFjayB1cC5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y29uc19za2JfcG9wKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4pXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbkBAIC0xNzE4LDE5ICYjNDM7MTgwMywyMSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXG4gXHRcdGlmICghaW5fbm1pKCkpXG4gXHRcdFx0bmV0X3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7bmV0Y29uc29sZTogZHJvcHBpbmcgbWVzc2FnZSwgcmVxdWVzdGVkIHNrYiBsZW4gJWQgZXhjZWVkcyBwb29sIGJ1ZmZlciBzaXplICV6dSBvbiAlc1xcblwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgICBsZW4sIChzaXplX3QpTUFYX1NLQl9TSVpFLFxuLVx0XHRcdFx0XHQgICAgIG5wLVx1MDAzZWRldi1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgbnQtXHUwMDNlbnAuZGV2LVx1MDAzZW5hbWUpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNm5wLVx1MDAzZXNrYl9wb29sKTtcbiYjNDM7XHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4gXHRpZiAoIWluX25taSgpKVxuLVx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNm5wLVx1MDAzZXJlZmlsbF93cSk7XG4mIzQzO1x0XHRzY2hlZHVsZV93b3JrKFx1MDAyNm50LVx1MDAzZXJlZmlsbF93cSk7XG4gXG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgaW50IGxlbiwgaW50IHJlc2VydmUpXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbixcbiYjNDM7XHRcdFx0XHRpbnQgcmVzZXJ2ZSlcbiB7XG4mIzQzO1x0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXHRpbnQgY291bnQgPSAwO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbkBAIC0xNzM5LDcgJiM0MzsxODI2LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4sIGludCByZXNlcnZlKVxuIFxuIFx0c2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4gXHRpZiAoIXNrYilcbi1cdFx0c2tiID0gbmV0Y29uc19za2JfcG9wKG5wLCBsZW4pO1xuJiM0MztcdFx0c2tiID0gbmV0Y29uc19za2JfcG9wKG50LCBsZW4pO1xuIFxuIFx0aWYgKCFza2IpIHtcbiBcdFx0aWYgKCYjNDM7JiM0Mztjb3VudCBcdTAwM2MgMTApIHtcbkBAIC0xNzc5LDggJiM0MzsxODY2LDkgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiYjNDM7c3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiB7XG4mIzQzO1x0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXHRzdHJ1Y3QgdWRwaGRyICp1ZHBoO1xuIFx0aW50IHVkcF9sZW47XG4gXG5AQCAtMTc5MCwyMSAmIzQzOzE4NzgsMjIgQEAgc3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuIFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcbiBcdHVkcGggPSB1ZHBfaGRyKHNrYik7XG4tXHR1ZHBoLVx1MDAzZXNvdXJjZSA9IGh0b25zKG5wLVx1MDAzZWxvY2FsX3BvcnQpO1xuLVx0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMobnAtXHUwMDNlcmVtb3RlX3BvcnQpO1xuJiM0MztcdHVkcGgtXHUwMDNlc291cmNlID0gaHRvbnMobnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4mIzQzO1x0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMobnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuIFx0dWRwaC1cdTAwM2VsZW4gPSBodG9ucyh1ZHBfbGVuKTtcbiBcbiBcdG5ldHBvbGxfdWRwX2NoZWNrc3VtKG5wLCBza2IsIGxlbik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7c3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4mIzQzO1x0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXHRzdHJ1Y3QgZXRoaGRyICpldGg7XG4gXG4gXHRldGggPSBza2JfcHVzaChza2IsIEVUSF9ITEVOKTtcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfc291cmNlLCBucC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuLVx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX2Rlc3QsIG5wLVx1MDAzZXJlbW90ZV9tYWMpO1xuJiM0MztcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9kZXN0LCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiBcdGlmIChucC1cdTAwM2VpcHY2KVxuIFx0XHRldGgtXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIFx0ZWxzZVxuQEAgLTE4NjEsOCAmIzQzOzE5NTAsMTAgQEAgc3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4mIzQzO3N0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4mIzQzO1x0XHRcdCAgICBpbnQgbGVuKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGludCB0b3RhbF9sZW4sIGlwX2xlbiwgdWRwX2xlbjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG5AQCAtMTg3Nyw3ICYjNDM7MTk2OCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbiBcbiBcdHRvdGFsX2xlbiA9IGlwX2xlbiAmIzQzOyBMTF9SRVNFUlZFRF9TUEFDRShucC1cdTAwM2VkZXYpO1xuIFxuLVx0c2tiID0gZmluZF9za2IobnAsIHRvdGFsX2xlbiAmIzQzOyBucC1cdTAwM2VkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tLFxuJiM0MztcdHNrYiA9IGZpbmRfc2tiKG50LCB0b3RhbF9sZW4gJiM0MzsgbnAtXHUwMDNlZGV2LVx1MDAzZW5lZWRlZF90YWlscm9vbSxcbiBcdFx0ICAgICAgIHRvdGFsX2xlbiAtIGxlbik7XG4gXHRpZiAoIXNrYilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMTg4NSwxMiAmIzQzOzE5NzYsMTIgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBtc2csIGxlbik7XG4gXHRza2JfcHV0KHNrYiwgbGVuKTtcbiBcbi1cdHB1c2hfdWRwKG5wLCBza2IsIGxlbik7XG4mIzQzO1x0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcbiBcdGlmIChucC1cdTAwM2VpcHY2KVxuIFx0XHRwdXNoX2lwdjYobnAsIHNrYiwgbGVuKTtcbiBcdGVsc2VcbiBcdFx0cHVzaF9pcHY0KG5wLCBza2IsIGxlbik7XG4tXHRwdXNoX2V0aChucCwgc2tiKTtcbiYjNDM7XHRwdXNoX2V0aChudCwgc2tiKTtcbiBcdHNrYi1cdTAwM2VkZXYgPSBucC1cdTAwM2VkZXY7XG4gXG4gXHRyZXR1cm4gKGludCluZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xuQEAgLTE5MDgsNyAmIzQzOzE5OTksNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4gICovXG4gc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIHtcbi1cdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKFx1MDAyNm50LVx1MDAzZW5wLCBtc2csIGxlbik7XG4mIzQzO1x0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKSB7XG4gXHRcdGlmIChyZXN1bHQgPT0gTkVUX1hNSVRfRFJPUCkge1xuQEAgLTIyMDMsOCAmIzQzOzIyOTQsOSBAQCBfX3JlbGVhc2VzKFx1MDAyNnRhcmdldF9saXN0X2xvY2spXG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbiB9XG4gXG4tc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxuJiM0MztzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGJvb2wgaXB2ZXJzaW9uX3NldCA9IGZhbHNlO1xuIFx0Y2hhciAqY3VyID0gb3B0O1xuIFx0Y2hhciAqZGVsaW07XG5AQCAtMjIxNSw3ICYjNDM7MjMwNyw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcbiBcdFx0aWYgKCFkZWxpbSlcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdFx0KmRlbGltID0gMDtcbi1cdFx0aWYgKGtzdHJ0b3UxNihjdXIsIDEwLCBcdTAwMjZucC1cdTAwM2Vsb2NhbF9wb3J0KSlcbiYjNDM7XHRcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfcG9ydCkpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuQEAgLTIyNjIsNyAmIzQzOzIzNTQsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXG4gXHRcdCpkZWxpbSA9IDA7XG4gXHRcdGlmICgqY3VyID09ICYjMzk7ICYjMzk7IHx8ICpjdXIgPT0gJiMzOTtcXHQmIzM5OylcbiBcdFx0XHRucF9pbmZvKG5wLCBcJiMzNDt3YXJuaW5nOiB3aGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkXFxuXCYjMzQ7KTtcbi1cdFx0aWYgKGtzdHJ0b3UxNihjdXIsIDEwLCBcdTAwMjZucC1cdTAwM2VyZW1vdGVfcG9ydCkpXG4mIzQzO1x0XHRpZiAoa3N0cnRvdTE2KGN1ciwgMTAsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9wb3J0KSlcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdFx0Y3VyID0gZGVsaW07XG4gXHR9XG5AQCAtMjI4NCwxMSAmIzQzOzIzNzYsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxuIFxuIFx0aWYgKCpjdXIgIT0gMCkge1xuIFx0XHQvKiBNQUMgYWRkcmVzcyAqL1xuLVx0XHRpZiAoIW1hY19wdG9uKGN1ciwgbnAtXHUwMDNlcmVtb3RlX21hYykpXG4mIzQzO1x0XHRpZiAoIW1hY19wdG9uKGN1ciwgbnQtXHUwMDNlcmVtb3RlX21hYykpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHR9XG4gXG4tXHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihucCk7XG4mIzQzO1x0bmV0Y29uc29sZV9wcmludF9iYW5uZXIobnQpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMjMyNiwxNCAmIzQzOzI0MTgsMjIgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gXHR9XG4gXG4gXHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXG4tXHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKFx1MDAyNm50LVx1MDAzZW5wLCB0YXJnZXRfY29uZmlnKTtcbiYjNDM7XHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKG50LCB0YXJnZXRfY29uZmlnKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZmFpbDtcbiBcbiYjNDM7XHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sIGlzXG4mIzQzO1x0ICogdmFsaWQgYXMgc29vbiBhcyBudC1cdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlLiBUaGUgdGFyZ2V0IGlzIG5vdFxuJiM0MztcdCAqIHlldCBvbiB0YXJnZXRfbGlzdCwgc28gYSBuZXRkZXYgZXZlbnQgY2Fubm90IHJlYWNoIGl0IGhlcmUsIGJ1dFxuJiM0MztcdCAqIG1pcnJvciB0aGUgY29uZmlnZnMgcGF0aCBmb3Igc3ltbWV0cnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcbiYjNDM7XG4gXHRlcnIgPSBuZXRwb2xsX3NldHVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O05vdCBlbmFibGluZyBuZXRjb25zb2xlIGZvciAlcyVkLiBOZXRwb2xsIHNldHVwIGZhaWxlZFxcblwmIzM0OyxcbiBcdFx0ICAgICAgIE5FVENPTlNPTEVfUEFSQU1fVEFSR0VUX1BSRUZJWCwgY21kbGluZV9jb3VudCk7XG4mIzQzO1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKVxuIFx0XHRcdC8qIG9ubHkgZmFpbCBpZiBkeW5hbWljIHJlY29uZmlndXJhdGlvbiBpcyBzZXQsXG4gXHRcdFx0ICogb3RoZXJ3aXNlLCBrZWVwIHRoZSB0YXJnZXQgaW4gdGhlIGxpc3QsIGJ1dCBkaXNhYmxlZC5cbkBAIC0yMzU1LDYgJiM0MzsyNDU1LDggQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSk7XG4mIzQzO1x0aWYgKG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpXG4mIzQzO1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdG5ldHBvbGxfY2xlYW51cChcdTAwMjZudC1cdTAwM2VucCk7XG4gI2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4gXHRrZnJlZShudC1cdTAwM2V1c2VyZGF0YSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuaW5kZXggODhmN2RhYTg1NjBlNTguLjc5MzE1NDYxYTdiMWUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG5AQCAtMjEsMjAgJiM0MzsyMSw2IEBAIHVuaW9uIGluZXRfYWRkciB7XG4gXHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbiB9O1xuIFxuLS8qXG4tICogTWF4aW11bSBwYXlsb2FkIG5ldHBvbGwmIzM5O3MgcHJlYWxsb2NhdGVkIHNrYiBwb29sIGNhbiBjYXJyeS4gS2VlcCB0aGlzIGluXG4tICogc3luYyB3aXRoIHRoZSBidWZmZXIgc2l6ZSB1c2VkIGJ5IHJlZmlsbF9za2JzKCkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jO1xuLSAqIGNhbGxlcnMgKGUuZy4gbmV0Y29uc29sZSkgdXNlIGl0IHRvIGRldGVjdCByZXF1ZXN0cyB0aGUgcG9vbCBjYW4gbmV2ZXJcbi0gKiBzYXRpc2Z5IGFuZCBhdm9pZCBkZXF1ZXVpbmcgYSBwb29sZWQgc2tiIHRoYXQgd291bGQgbGF0ZXIgdHJpcFxuLSAqIHNrYl9vdmVyX3BhbmljKCkgaW4gc2tiX3B1dCgpLlxuLSAqL1xuLSNkZWZpbmUgTUFYX1VEUF9DSFVOS1x0MTQ2MFxuLSNkZWZpbmUgTUFYX1NLQl9TSVpFXHRcdFx0XHRcdFx0XFxcbi1cdChzaXplb2Yoc3RydWN0IGV0aGhkcikgJiM0MztcdFx0XHRcdFxcXG4tXHQgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MztcdFx0XHRcdFx0XFxcbi1cdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MztcdFx0XHRcdFxcXG4tXHQgTUFYX1VEUF9DSFVOSylcbi1cbiBzdHJ1Y3QgbmV0cG9sbCB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG5AQCAtNDksMTAgJiM0MzszNSw2IEBAIHN0cnVjdCBuZXRwb2xsIHtcbiBcbiBcdHVuaW9uIGluZXRfYWRkciBsb2NhbF9pcCwgcmVtb3RlX2lwO1xuIFx0Ym9vbCBpcHY2O1xuLVx0dTE2IGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xuLVx0dTggcmVtb3RlX21hY1tFVEhfQUxFTl07XG4tXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9wb29sO1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHJlZmlsbF93cTtcbiB9O1xuIFxuICNkZWZpbmUgbnBfaW5mbyhucCwgZm10LCAuLi4pXHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuY1xuaW5kZXggODVhYTUxMzUwODgxMTcuLjEwYjYwNjMyNTFhNWJjIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRwb2xsLmNcbkBAIC0zNiwxMiAmIzQzOzM2LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvbmFwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4gXG4tLypcbi0gKiBXZSBtYWludGFpbiBhIHNtYWxsIHBvb2wgb2YgZnVsbHktc2l6ZWQgc2ticywgdG8gbWFrZSBzdXJlIHRoZVxuLSAqIG1lc3NhZ2UgZ2V0cyBvdXQgZXZlbiBpbiBleHRyZW1lIE9PTSBzaXR1YXRpb25zLlxuLSAqL1xuLVxuLSNkZWZpbmUgTUFYX1NLQlMgMzJcbiAjZGVmaW5lIFVTRUNfUEVSX1BPTExcdDUwXG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBjYXJyaWVyX3RpbWVvdXQgPSA0O1xuQEAgLTIxMywyMiAmIzQzOzIwNyw2IEBAIHZvaWQgbmV0cG9sbF9wb2xsX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHR1cChcdTAwMjZuaS1cdTAwM2VkZXZfbG9jayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzKHN0cnVjdCBuZXRwb2xsICpucClcbi17XG4tXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbDtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXG4tXHRza2JfcG9vbCA9IFx1MDAyNm5wLVx1MDAzZXNrYl9wb29sO1xuLVxuLVx0d2hpbGUgKFJFQURfT05DRShza2JfcG9vbC1cdTAwM2VxbGVuKSBcdTAwM2MgTUFYX1NLQlMpIHtcbi1cdFx0c2tiID0gYWxsb2Nfc2tiKE1BWF9TS0JfU0laRSwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4tXHRcdGlmICghc2tiKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHRza2JfcXVldWVfdGFpbChza2JfcG9vbCwgc2tiKTtcbi1cdH1cbi19XG4tXG4gdm9pZCBuZXRwb2xsX3phcF9jb21wbGV0aW9uX3F1ZXVlKHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbkBAIC0zNTEsMzIgJiM0MzszMjksMTIgQEAgbmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIEVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XG4gXG4tc3RhdGljIHZvaWQgc2tiX3Bvb2xfZmx1c2goc3RydWN0IG5ldHBvbGwgKm5wKVxuLXtcbi1cdHN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sO1xuLVxuLVx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZucC1cdTAwM2VyZWZpbGxfd3EpO1xuLVx0c2tiX3Bvb2wgPSBcdTAwMjZucC1cdTAwM2Vza2JfcG9vbDtcbi1cdHNrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc2tiX3Bvb2wsIFNLQl9DT05TVU1FRCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4te1xuLVx0c3RydWN0IG5ldHBvbGwgKm5wID1cbi1cdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRwb2xsLCByZWZpbGxfd3EpO1xuLVxuLVx0cmVmaWxsX3NrYnMobnApO1xuLX1cbi1cbiBpbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvO1xuIFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZucC1cdTAwM2Vza2JfcG9vbCk7XG4tXHRJTklUX1dPUksoXHUwMDI2bnAtXHUwMDNlcmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpO1xuLVxuIFx0aWYgKG5kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX0RJU0FCTEVfTkVUUE9MTCkge1xuIFx0XHRucF9lcnIobnAsIFwmIzM0OyVzIGRvZXNuJiMzOTt0IHN1cHBvcnQgcG9sbGluZywgYWJvcnRpbmdcXG5cJiMzNDssXG4gXHRcdCAgICAgICBuZGV2LVx1MDAzZW5hbWUpO1xuQEAgLTQxMSw5ICYjNDM7MzY5LDYgQEAgaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0bnAtXHUwMDNlZGV2ID0gbmRldjtcbiBcdHN0cnNjcHkobnAtXHUwMDNlZGV2X25hbWUsIG5kZXYtXHUwMDNlbmFtZSwgSUZOQU1TSVopO1xuIFxuLVx0LyogZmlsbCB1cCB0aGUgc2tiIHF1ZXVlICovXG4tXHRyZWZpbGxfc2ticyhucCk7XG4tXG4gXHQvKiBsYXN0IHRoaW5nIHRvIGRvIGlzIGxpbmsgaXQgdG8gdGhlIG5ldCBkZXZpY2Ugc3RydWN0dXJlICovXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobmRldi1cdTAwM2VucGluZm8sIG5waW5mbyk7XG4gXG5AQCAtNjAzLDcgJiM0Mzs1NTgsNyBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXG4gXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBmbHVzaDtcbiYjNDM7XHRcdGdvdG8gcHV0O1xuIFx0cnRubF91bmxvY2soKTtcbiBcbiBcdC8qIE1ha2Ugc3VyZSBhbGwgTkFQSSBwb2xscyB3aGljaCBzdGFydGVkIGJlZm9yZSBkZXYtXHUwMDNlbnBpbmZvXG5AQCAtNjE0LDggJiM0Mzs1NjksNiBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1mbHVzaDpcbi1cdHNrYl9wb29sX2ZsdXNoKG5wKTtcbiBwdXQ6XG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG5wLVx1MDAzZWRldik7XG4gXHRpZiAoaXBfb3ZlcndyaXR0ZW4pXG5AQCAtNjY2LDggJiM0Mzs2MTksNiBAQCBzdGF0aWMgdm9pZCBfX25ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXHRcdFJDVV9JTklUX1BPSU5URVIobnAtXHUwMDNlZGV2LVx1MDAzZW5waW5mbywgTlVMTCk7XG4gXHRcdGNhbGxfcmN1KFx1MDAyNm5waW5mby1cdTAwM2VyY3UsIHJjdV9jbGVhbnVwX25ldHBvbGxfaW5mbyk7XG4gXHR9XG4tXG4tXHRza2JfcG9vbF9mbHVzaChucCk7XG4gfVxuIFxuIHZvaWQgX19uZXRwb2xsX2ZyZWUoc3RydWN0IG5ldHBvbGwgKm5wKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0Y29uc29sZV9za2JfcG9vbF9pbml0JiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gmIzM0OywKICAgICYjMzQ7cmVmaWxsX3NrYnMmIzM0OywKICAgICYjMzQ7bmV0Y29uc19za2JfcG9wJiMzNDssCiAgICAmIzM0O2ZpbmRfc2tiJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtkcm9wX25ldGNvbnNvbGVfdGFyZ2V0JiMzNDssCiAgICAmIzM0O2FsbG9jX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtmcmVlX3BhcmFtX3RhcmdldCYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lJiMzNDssCiAgICAmIzM0O19fbmV0cG9sbF9zZXR1cCYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O19fbmV0cG9sbF9jbGVhbnVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBTS0IgcG9vbCBhbmQgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gKHBvcnRzLCBNQUMpIGZyb20gYHN0cnVjdCBuZXRwb2xsYCB0byBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YC4gSXQgbW9kaWZpZXMgaG93IG5ldGNvbnNvbGUgaW5pdGlhbGl6ZXMgYW5kIGZsdXNoZXMgdGhlIFNLQiBwb29sLCBhbmQgdXBkYXRlcyB0aGUgbmV0cG9sbCBzZXR1cC9jbGVhbnVwIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGFuZCBuZXRwb2xsIGNvcmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2Q2YmY4NDBiZjc0OGJiNGUyYzFiZWM5NDIwZTA2MzI2NWQ4NGUwOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMTY6MDA6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKaW5kZXggYzE4MTJhOTgzNjViNzguLmUzNmIwOTk4YzgxMDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCkBAIC02MSw2ICYjNDM7NjEsMTkgQEAgTU9EVUxFX0lNUE9SVF9OUygmIzM0O05FVERFVl9JTlRFUk5BTCYjMzQ7KTsKICNkZWZpbmUgTUFYX1VTRVJEQVRBX0lURU1TCQkyNTYKICNkZWZpbmUgTUFYX1BSSU5UX0NIVU5LCQkJMTAwMAogCiYjNDM7LyoKJiM0MzsgKiBTaXppbmcgZm9yIHRoZSBwZXItdGFyZ2V0IGZhbGxiYWNrIHNrYiBwb29sIGNvbnN1bHRlZCBieSBmaW5kX3NrYigpCiYjNDM7ICogd2hlbiBpdHMgR0ZQX0FUT01JQyBhbGxvY2F0aW9uIGZhaWxzIHNvIG1lc3NhZ2VzIHN0aWxsIGdldCBvdXQgdW5kZXIKJiM0MzsgKiBtZW1vcnkgcHJlc3N1cmUuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBNQVhfVURQX0NIVU5LCQkJMTQ2MAomIzQzOyNkZWZpbmUgTUFYX1NLQlMJCQkzMgomIzQzOyNkZWZpbmUgTUFYX1NLQl9TSVpFCQkJCQkJCVwKJiM0MzsJKHNpemVvZihzdHJ1Y3QgZXRoaGRyKSAmIzQzOwkJCQkJXAomIzQzOwkgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsJCQkJCQlcCiYjNDM7CSBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MzsJCQkJCVwKJiM0MzsJIE1BWF9VRFBfQ0hVTkspCiYjNDM7CiBzdGF0aWMgY2hhciBjb25maWdbTUFYX1BBUkFNX0xFTkdUSF07CiBtb2R1bGVfcGFyYW1fc3RyaW5nKG5ldGNvbnNvbGUsIGNvbmZpZywgTUFYX1BBUkFNX0xFTkdUSCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5ldGNvbnNvbGUsICYjMzQ7IG5ldGNvbnNvbGU9W3NyYy1wb3J0XUBbc3JjLWlwXS9bZGV2XSxbdGd0LXBvcnRdQCZsdDt0Z3QtaXAmZ3Q7L1t0Z3QtbWFjYWRkcl0mIzM0Oyk7CkBAIC0xNjIsMTQgJiM0MzsxNzUsMTkgQEAgZW51bSB0YXJnZXRfc3RhdGUgewogICogQG5wOgkJVGhlIG5ldHBvbGwgc3RydWN0dXJlIGZvciB0aGlzIHRhcmdldC4KICAqCQlDb250YWlucyB0aGUgb3RoZXIgdXNlcnNwYWNlIHZpc2libGUgcGFyYW1ldGVyczoKICAqCQlkZXZfbmFtZQkocmVhZC13cml0ZSkKLSAqCQlsb2NhbF9wb3J0CShyZWFkLXdyaXRlKQotICoJCXJlbW90ZV9wb3J0CShyZWFkLXdyaXRlKQogICoJCWxvY2FsX2lwCShyZWFkLXdyaXRlKQogICoJCXJlbW90ZV9pcAkocmVhZC13cml0ZSkKICAqCQlsb2NhbF9tYWMJKHJlYWQtb25seSkKLSAqCQlyZW1vdGVfbWFjCShyZWFkLXdyaXRlKQomIzQzOyAqIEBsb2NhbF9wb3J0OglTb3VyY2UgVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiYjNDM7ICogQHJlbW90ZV9wb3J0OiBEZXN0aW5hdGlvbiBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KJiM0MzsgKiBAcmVtb3RlX21hYzoJRGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KICAqIEBidWY6CVRoZSBidWZmZXIgdXNlZCB0byBzZW5kIHRoZSBmdWxsIG1zZyB0byB0aGUgbmV0d29yayBzdGFjawogICogQHJlc3VtZV93cToJV29ya3F1ZXVlIHRvIHJlc3VtZSBkZWFjdGl2YXRlZCB0YXJnZXQKJiM0MzsgKiBAc2tiX3Bvb2w6CVBlci10YXJnZXQgZmFsbGJhY2sgc2tiIHBvb2wgY29uc3VsdGVkIGJ5IGZpbmRfc2tiKCkgd2hlbgomIzQzOyAqCQlpdHMgR0ZQX0FUT01JQyBhbGxvY2F0aW9uIGZhaWxzLiBMaWZldGltZSBicmFja2V0cyBhCiYjNDM7ICoJCXN1Y2Nlc3NmdWwgbmV0cG9sbF9zZXR1cCgpIC8gbmV0cG9sbF9jbGVhbnVwKCkgcGFpciBvbiBAbnAuCiYjNDM7ICogQHJlZmlsbF93cToJV29yayBpdGVtIHRoYXQgYXN5bmNocm9ub3VzbHkgdG9wcyBAc2tiX3Bvb2wgYmFjayB1cCB0bwomIzQzOyAqCQlNQVhfU0tCUyBhZnRlciBmaW5kX3NrYigpIGRyYWlucyBhbiBlbnRyeS4KICAqLwogc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CkBAIC0xOTAsMTEgJiM0MzsyMDgsMTUgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHsKIAlib29sCQkJZXh0ZW5kZWQ7CiAJYm9vbAkJCXJlbGVhc2U7CiAJc3RydWN0IG5ldHBvbGwJCW5wOwomIzQzOwl1MTYJCQlsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDsKJiM0MzsJdTgJCQlyZW1vdGVfbWFjW0VUSF9BTEVOXTsKIAkvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgJiM0MzsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0cwogCSAqIE5VTCB0ZXJtaW5hdG9yIHNvIGEgZnVsbCBNQVhfUFJJTlRfQ0hVTksgcGF5bG9hZCBpcyBub3QgdHJ1bmNhdGVkCiAJICovCiAJY2hhcgkJCWJ1ZltNQVhfUFJJTlRfQ0hVTksgJiM0MzsgMV07CiAJc3RydWN0IHdvcmtfc3RydWN0CXJlc3VtZV93cTsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZAlza2JfcG9vbDsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CXJlZmlsbF93cTsKIH07CiAKICNpZmRlZglDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDCkBAIC0yOTIsMTEgJiM0MzszMTQsNTggQEAgc3RhdGljIHZvaWQgbmV0Y29uc19yZWxlYXNlX2RldihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCQltZW1zZXQoJmFtcDtudC0mZ3Q7bnAuZGV2X25hbWUsIDAsIElGTkFNU0laKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJlZmlsbF9za2JzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbCA9ICZhbXA7bnQtJmd0O3NrYl9wb29sOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwl3aGlsZSAoUkVBRF9PTkNFKHNrYl9wb29sLSZndDtxbGVuKSAmbHQ7IE1BWF9TS0JTKSB7CiYjNDM7CQlza2IgPSBhbGxvY19za2IoTUFYX1NLQl9TSVpFLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTsKJiM0MzsJCWlmICghc2tiKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJc2tiX3F1ZXVlX3RhaWwoc2tiX3Bvb2wsIHNrYik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCwgcmVmaWxsX3dxKTsKJiM0MzsKJiM0MzsJcmVmaWxsX3NrYnMobnQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBJbml0aWFsaXNlIHRoZSBwZXItdGFyZ2V0IHNrYiBwb29sIHRoYXQgZmluZF9za2IoKSBmYWxscyBiYWNrIHRvIGFuZAomIzQzOyAqIHNlZWQgaXQuIFBhaXIgd2l0aCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkgYXQgdGhlIG1hdGNoaW5nCiYjNDM7ICogbmV0cG9sbCB0ZWFyZG93bi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7CXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtudC0mZ3Q7c2tiX3Bvb2wpOwomIzQzOwlJTklUX1dPUksoJmFtcDtudC0mZ3Q7cmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpOwomIzQzOwlyZWZpbGxfc2ticyhudCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKJiM0Mzt7CiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtudC0mZ3Q7cmVmaWxsX3dxKTsKJiM0MzsJc2tiX3F1ZXVlX3B1cmdlX3JlYXNvbigmYW1wO250LSZndDtza2JfcG9vbCwgU0tCX0NPTlNVTUVEKTsKJiM0Mzt9CiYjNDM7CiAvKiBBdHRlbXB0cyB0byByZXN1bWUgbG9nZ2luZyB0byBhIGRlYWN0aXZhdGVkIHRhcmdldC4gKi8KIHN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKJiM0MzsJLyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBtYWtlcyBudC0mZ3Q7bnAuZGV2CiYjNDM7CSAqIHZpc2libGUgdG8gdGFyZ2V0X2xpc3Qgd2Fsa2VycyAoZS5nLiBuZXRjb25zb2xlX25ldGRldl9ldmVudCksCiYjNDM7CSAqIHdoaWNoIG90aGVyd2lzZSBtYXkgbW92ZSB0aGUgdGFyZ2V0IHRvIHRoZSBjbGVhbnVwIGxpc3QgYW5kCiYjNDM7CSAqIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWQgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwluZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpOwomIzQzOwogCWlmIChuZXRwb2xsX3NldHVwKCZhbXA7bnQtJmd0O25wKSkgewogCQkvKiBuZXRwb2xsIGZhaWxzIHNldHVwIG9uY2UsIGRvIG5vdCB0cnkgYWdhaW4uICovCiYjNDM7CQluZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTsKIAkJbnQtJmd0O3N0YXRlID0gU1RBVEVfRElTQUJMRUQ7CiAJCXJldHVybjsKIAl9CkBAIC0zNTgsNiAmIzQzOzQyNyw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJcnRubF9sb2NrKCk7CiAJaWYgKG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEICZhbXA7JmFtcDsgbnQtJmd0O25wLmRldiAmYW1wOyZhbXA7CiAJICAgIG50LSZndDtucC5kZXYtJmd0O3JlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkgewomIzQzOwkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJCW5ldGNvbnNfcmVsZWFzZV9kZXYobnQpOwogCQludC0mZ3Q7c3RhdGUgPSBTVEFURV9ESVNBQkxFRDsKIAl9CkBAIC0zOTMsOSAmIzQzOzQ2Myw5IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpCiAKIAludC0mZ3Q7bnAubmFtZSA9ICYjMzQ7bmV0Y29uc29sZSYjMzQ7OwogCXN0cnNjcHkobnQtJmd0O25wLmRldl9uYW1lLCAmIzM0O2V0aDAmIzM0OywgSUZOQU1TSVopOwotCW50LSZndDtucC5sb2NhbF9wb3J0ID0gNjY2NTsKLQludC0mZ3Q7bnAucmVtb3RlX3BvcnQgPSA2NjY2OwotCWV0aF9icm9hZGNhc3RfYWRkcihudC0mZ3Q7bnAucmVtb3RlX21hYyk7CiYjNDM7CW50LSZndDtsb2NhbF9wb3J0ID0gNjY2NTsKJiM0MzsJbnQtJmd0O3JlbW90ZV9wb3J0ID0gNjY2NjsKJiM0MzsJZXRoX2Jyb2FkY2FzdF9hZGRyKG50LSZndDtyZW1vdGVfbWFjKTsKIAludC0mZ3Q7c3RhdGUgPSBTVEFURV9ESVNBQkxFRDsKIAlJTklUX1dPUksoJmFtcDtudC0mZ3Q7cmVzdW1lX3dxLCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQpOwogCkBAIC00MTcsNiAmIzQzOzQ4Nyw3IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKHZvaWQpCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG50LCB0bXAsICZhbXA7dGFyZ2V0X2NsZWFudXBfbGlzdCwgbGlzdCkgewogCQkvKiBhbGwgZW50cmllcyBpbiB0aGUgY2xlYW51cF9saXN0IG5lZWRzIHRvIGJlIGRpc2FibGVkICovCiAJCVdBUk5fT05fT05DRShudC0mZ3Q7c3RhdGUgPT0gU1RBVEVfRU5BQkxFRCk7CiYjNDM7CQluZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTsKIAkJbmV0Y29uc19yZWxlYXNlX2RldihudCk7CiAJCS8qIG1vdmVkIHRoZSBjbGVhbmVkIHRhcmdldCB0byB0YXJnZXRfbGlzdC4gTmVlZCB0byBob2xkIGJvdGgKIAkJICogbG9ja3MKQEAgLTQyOSwyMSAmIzQzOzUwMCwyMyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHNfY29yZSh2b2lkKQogCW11dGV4X3VubG9jaygmYW1wO3RhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRwb2xsICpucCkKJiM0MztzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogewotCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgcG9ydCAlZFxuJiMzNDssIG5wLSZndDtsb2NhbF9wb3J0KTsKJiM0MzsJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7CiYjNDM7CiYjNDM7CW5wX2luZm8obnAsICYjMzQ7bG9jYWwgcG9ydCAlZFxuJiMzNDssIG50LSZndDtsb2NhbF9wb3J0KTsKIAlpZiAobnAtJmd0O2lwdjYpCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXG4mIzM0OywgJmFtcDtucC0mZ3Q7bG9jYWxfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcbiYjMzQ7LCAmYW1wO25wLSZndDtsb2NhbF9pcC5pcCk7CiAJbnBfaW5mbyhucCwgJiMzNDtpbnRlcmZhY2UgbmFtZSAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBucC0mZ3Q7ZGV2X25hbWUpOwogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAmIzM5OyVwTSYjMzk7XG4mIzM0OywgbnAtJmd0O2Rldl9tYWMpOwotCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIHBvcnQgJWRcbiYjMzQ7LCBucC0mZ3Q7cmVtb3RlX3BvcnQpOwomIzQzOwlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBwb3J0ICVkXG4mIzM0OywgbnQtJmd0O3JlbW90ZV9wb3J0KTsKIAlpZiAobnAtJmd0O2lwdjYpCiAJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xuJiMzNDssICZhbXA7bnAtJmd0O3JlbW90ZV9pcC5pbjYpOwogCWVsc2UKIAkJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcbiYjMzQ7LCAmYW1wO25wLSZndDtyZW1vdGVfaXAuaXApOwotCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXG4mIzM0OywgbnAtJmd0O3JlbW90ZV9tYWMpOwomIzQzOwlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxuJiMzNDssIG50LSZndDtyZW1vdGVfbWFjKTsKIH0KIAogLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzCkBAIC01NjEsMTIgJiM0Mzs2MzQsMTIgQEAgc3RhdGljIHNzaXplX3QgZGV2X25hbWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKIAogc3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslZFxuJiMzNDssIHRvX3RhcmdldChpdGVtKS0mZ3Q7bnAubG9jYWxfcG9ydCk7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslZFxuJiMzNDssIHRvX3RhcmdldChpdGVtKS0mZ3Q7bG9jYWxfcG9ydCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVkXG4mIzM0OywgdG9fdGFyZ2V0KGl0ZW0pLSZndDtucC5yZW1vdGVfcG9ydCk7CiYjNDM7CXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslZFxuJiMzNDssIHRvX3RhcmdldChpdGVtKS0mZ3Q7cmVtb3RlX3BvcnQpOwogfQogCiBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQpAQCAtNTk5LDcgJiM0Mzs2NzIsNyBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKIAogc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewotCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcE1cbiYjMzQ7LCB0b190YXJnZXQoaXRlbSktJmd0O25wLnJlbW90ZV9tYWMpOwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBNXG4mIzM0OywgdG9fdGFyZ2V0KGl0ZW0pLSZndDtyZW1vdGVfbWFjKTsKIH0KIAogc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfZXJyb3JzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCkBAIC03NTYsMTEgJiM0Mzs4MjksMjEgQEAgc3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCiAJCSAqIFNraXAgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSgpIC0tIGFsbCB0aGUgYXR0cmlidXRlcyBhcmUKIAkJICogYWxyZWFkeSBjb25maWd1cmVkIHZpYSBjb25maWdmcy4gSnVzdCBwcmludCB0aGVtIG91dC4KIAkJICovCi0JCW5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKCZhbXA7bnQtJmd0O25wKTsKJiM0MzsJCW5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTsKJiM0MzsKJiM0MzsJCS8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2wKJiM0MzsJCSAqIGlzIHZhbGlkIGFzIHNvb24gYXMgbnQtJmd0O25wLmRldiBiZWNvbWVzIHZpc2libGUgdG8KJiM0MzsJCSAqIHRhcmdldF9saXN0IHdhbGtlcnMgKG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSwgd2hpY2ggd291bGQKJiM0MzsJCSAqIG90aGVyd2lzZSBjYWxsIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBvbiB1bmluaXRpYWxpc2VkCiYjNDM7CQkgKiBzdGF0ZS4KJiM0MzsJCSAqLwomIzQzOwkJbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTsKIAogCQlyZXQgPSBuZXRwb2xsX3NldHVwKCZhbXA7bnQtJmd0O25wKTsKLQkJaWYgKHJldCkKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQluZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTsKIAkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KIAogCQludC0mZ3Q7c3RhdGUgPSBTVEFURV9FTkFCTEVEOwogCQlwcl9pbmZvKCYjMzQ7bmV0d29yayBsb2dnaW5nIHN0YXJ0ZWRcbiYjMzQ7KTsKQEAgLTg4NSw3ICYjNDM7OTY4LDcgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCAmYW1wO250LSZndDtucC5sb2NhbF9wb3J0KTsKJiM0MzsJcmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsICZhbXA7bnQtJmd0O2xvY2FsX3BvcnQpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIG91dF91bmxvY2s7CiAJcmV0ID0gY291bnQ7CkBAIC05MDcsNyAmIzQzOzk5MCw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCAmYW1wO250LSZndDtucC5yZW1vdGVfcG9ydCk7CiYjNDM7CXJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCAmYW1wO250LSZndDtyZW1vdGVfcG9ydCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gb3V0X3VubG9jazsKIAlyZXQgPSBjb3VudDsKQEAgLTk5NCw3ICYjNDM7MTA3Nyw3IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiAJCWdvdG8gb3V0X3VubG9jazsKIAlpZiAoYnVmW01BQ19BRERSX1NUUl9MRU5dICZhbXA7JmFtcDsgYnVmW01BQ19BRERSX1NUUl9MRU5dICE9ICYjMzk7XG4mIzM5OykKIAkJZ290byBvdXRfdW5sb2NrOwotCW1lbWNweShudC0mZ3Q7bnAucmVtb3RlX21hYywgcmVtb3RlX21hYywgRVRIX0FMRU4pOwomIzQzOwltZW1jcHkobnQtJmd0O3JlbW90ZV9tYWMsIHJlbW90ZV9tYWMsIEVUSF9BTEVOKTsKIAogCXJldCA9IGNvdW50Owogb3V0X3VubG9jazoKQEAgLTE1MTQsOCAmIzQzOzE1OTcsMTAgQEAgc3RhdGljIHZvaWQgZHJvcF9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKIAkgKiBuZXRwb2xsX2NsZWFudXAoKSBpcyBpZGVtcG90ZW50IChpdCBza2lwcyB3aGVuIG5wLSZndDtkZXYgaXMgTlVMTCksIHNvCiAJICogaXQgaXMgc2FmZSBldmVuIGlmIHRoZSBjbGVhbnVwIHdvcmtlciBhbHJlYWR5IHRvcmUgdGhlIG5ldHBvbGwgZG93bi4KIAkgKi8KLQlpZiAobmVlZHNfY2xlYW51cCkKJiM0MzsJaWYgKG5lZWRzX2NsZWFudXApIHsKJiM0MzsJCW5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpOwogCQluZXRwb2xsX2NsZWFudXAoJmFtcDtudC0mZ3Q7bnApOwomIzQzOwl9CiAKIAljb25maWdfaXRlbV9wdXQoJmFtcDtudC0mZ3Q7Z3JvdXAuY2dfaXRlbSk7CiB9CkBAIC0xNzA2LDcgJiM0MzsxNzkxLDcgQEAgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBuZXRjb25zb2xlX25ldGRldl9ub3RpZmllciA9IHsKICAqIHBvb2wgbG9ja3MgYW5kIGlzIHRoZXJlZm9yZSBub3QgTk1JLXNhZmUuIFNraXAgdGhlIHJlZmlsbCB3aGVuIGNhbGxlZAogICogZnJvbSBOTUkgY29udGV4dDsgdGhlIG5leHQgbm9uLU5NSSBjYWxsZXIgd2lsbCB0b3AgdGhlIHBvb2wgYmFjayB1cC4KICAqLwotc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuKQomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y29uc19za2JfcG9wKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIApAQCAtMTcxOCwxOSAmIzQzOzE4MDMsMjEgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuKQogCQlpZiAoIWluX25taSgpKQogCQkJbmV0X3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtuZXRjb25zb2xlOiBkcm9wcGluZyBtZXNzYWdlLCByZXF1ZXN0ZWQgc2tiIGxlbiAlZCBleGNlZWRzIHBvb2wgYnVmZmVyIHNpemUgJXp1IG9uICVzXG4mIzM0OywKIAkJCQkJICAgICBsZW4sIChzaXplX3QpTUFYX1NLQl9TSVpFLAotCQkJCQkgICAgIG5wLSZndDtkZXYtJmd0O25hbWUpOwomIzQzOwkJCQkJICAgICBudC0mZ3Q7bnAuZGV2LSZndDtuYW1lKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc2tiID0gc2tiX2RlcXVldWUoJmFtcDtucC0mZ3Q7c2tiX3Bvb2wpOwomIzQzOwlza2IgPSBza2JfZGVxdWV1ZSgmYW1wO250LSZndDtza2JfcG9vbCk7CiAJaWYgKCFpbl9ubWkoKSkKLQkJc2NoZWR1bGVfd29yaygmYW1wO25wLSZndDtyZWZpbGxfd3EpOwomIzQzOwkJc2NoZWR1bGVfd29yaygmYW1wO250LSZndDtyZWZpbGxfd3EpOwogCiAJcmV0dXJuIHNrYjsKIH0KIAotc3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4sIGludCByZXNlcnZlKQomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbiwKJiM0MzsJCQkJaW50IHJlc2VydmUpCiB7CiYjNDM7CXN0cnVjdCBuZXRwb2xsICpucCA9ICZhbXA7bnQtJmd0O25wOwogCWludCBjb3VudCA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIApAQCAtMTczOSw3ICYjNDM7MTgyNiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSkKIAogCXNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pOwogCWlmICghc2tiKQotCQlza2IgPSBuZXRjb25zX3NrYl9wb3AobnAsIGxlbik7CiYjNDM7CQlza2IgPSBuZXRjb25zX3NrYl9wb3AobnQsIGxlbik7CiAKIAlpZiAoIXNrYikgewogCQlpZiAoJiM0MzsmIzQzO2NvdW50ICZsdDsgMTApIHsKQEAgLTE3NzksOCAmIzQzOzE4NjYsOSBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXVkcGgtJmd0O2NoZWNrID0gQ1NVTV9NQU5HTEVEXzA7CiB9CiAKLXN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKJiM0MztzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKQogewomIzQzOwlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSAmYW1wO250LSZndDtucDsKIAlzdHJ1Y3QgdWRwaGRyICp1ZHBoOwogCWludCB1ZHBfbGVuOwogCkBAIC0xNzkwLDIxICYjNDM7MTg3OCwyMiBAQCBzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pCiAJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAogCXVkcGggPSB1ZHBfaGRyKHNrYik7Ci0JdWRwaC0mZ3Q7c291cmNlID0gaHRvbnMobnAtJmd0O2xvY2FsX3BvcnQpOwotCXVkcGgtJmd0O2Rlc3QgPSBodG9ucyhucC0mZ3Q7cmVtb3RlX3BvcnQpOwomIzQzOwl1ZHBoLSZndDtzb3VyY2UgPSBodG9ucyhudC0mZ3Q7bG9jYWxfcG9ydCk7CiYjNDM7CXVkcGgtJmd0O2Rlc3QgPSBodG9ucyhudC0mZ3Q7cmVtb3RlX3BvcnQpOwogCXVkcGgtJmd0O2xlbiA9IGh0b25zKHVkcF9sZW4pOwogCiAJbmV0cG9sbF91ZHBfY2hlY2tzdW0obnAsIHNrYiwgbGVuKTsKIH0KIAotc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiYjNDM7CXN0cnVjdCBuZXRwb2xsICpucCA9ICZhbXA7bnQtJmd0O25wOwogCXN0cnVjdCBldGhoZHIgKmV0aDsKIAogCWV0aCA9IHNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9zb3VyY2UsIG5wLSZndDtkZXYtJmd0O2Rldl9hZGRyKTsKLQlldGhlcl9hZGRyX2NvcHkoZXRoLSZndDtoX2Rlc3QsIG5wLSZndDtyZW1vdGVfbWFjKTsKJiM0MzsJZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9kZXN0LCBudC0mZ3Q7cmVtb3RlX21hYyk7CiAJaWYgKG5wLSZndDtpcHY2KQogCQlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTsKIAllbHNlCkBAIC0xODYxLDggJiM0MzsxOTUwLDEwIEBAIHN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pCiAJc2tiLSZndDtwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpOwogfQogCi1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pCiYjNDM7c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywKJiM0MzsJCQkgICAgaW50IGxlbikKIHsKJiM0MzsJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7CiAJaW50IHRvdGFsX2xlbiwgaXBfbGVuLCB1ZHBfbGVuOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKQEAgLTE4NzcsNyAmIzQzOzE5NjgsNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pCiAKIAl0b3RhbF9sZW4gPSBpcF9sZW4gJiM0MzsgTExfUkVTRVJWRURfU1BBQ0UobnAtJmd0O2Rldik7CiAKLQlza2IgPSBmaW5kX3NrYihucCwgdG90YWxfbGVuICYjNDM7IG5wLSZndDtkZXYtJmd0O25lZWRlZF90YWlscm9vbSwKJiM0MzsJc2tiID0gZmluZF9za2IobnQsIHRvdGFsX2xlbiAmIzQzOyBucC0mZ3Q7ZGV2LSZndDtuZWVkZWRfdGFpbHJvb20sCiAJCSAgICAgICB0b3RhbF9sZW4gLSBsZW4pOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE4ODUsMTIgJiM0MzsxOTc2LDEyIEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbikKIAlza2JfY29weV90b19saW5lYXJfZGF0YShza2IsIG1zZywgbGVuKTsKIAlza2JfcHV0KHNrYiwgbGVuKTsKIAotCXB1c2hfdWRwKG5wLCBza2IsIGxlbik7CiYjNDM7CXB1c2hfdWRwKG50LCBza2IsIGxlbik7CiAJaWYgKG5wLSZndDtpcHY2KQogCQlwdXNoX2lwdjYobnAsIHNrYiwgbGVuKTsKIAllbHNlCiAJCXB1c2hfaXB2NChucCwgc2tiLCBsZW4pOwotCXB1c2hfZXRoKG5wLCBza2IpOwomIzQzOwlwdXNoX2V0aChudCwgc2tiKTsKIAlza2ItJmd0O2RldiA9IG5wLSZndDtkZXY7CiAKIAlyZXR1cm4gKGludCluZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpOwpAQCAtMTkwOCw3ICYjNDM7MTk5OSw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbikKICAqLwogc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKQogewotCWludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKCZhbXA7bnQtJmd0O25wLCBtc2csIGxlbik7CiYjNDM7CWludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSkgewogCQlpZiAocmVzdWx0ID09IE5FVF9YTUlUX0RST1ApIHsKQEAgLTIyMDMsOCAmIzQzOzIyOTQsOSBAQCBfX3JlbGVhc2VzKCZhbXA7dGFyZ2V0X2xpc3RfbG9jaykKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpCiYjNDM7c3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdCkKIHsKJiM0MzsJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7CiAJYm9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7CiAJY2hhciAqY3VyID0gb3B0OwogCWNoYXIgKmRlbGltOwpAQCAtMjIxNSw3ICYjNDM7MjMwNyw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdCkKIAkJaWYgKCFkZWxpbSkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwogCQkqZGVsaW0gPSAwOwotCQlpZiAoa3N0cnRvdTE2KGN1ciwgMTAsICZhbXA7bnAtJmd0O2xvY2FsX3BvcnQpKQomIzQzOwkJaWYgKGtzdHJ0b3UxNihjdXIsIDEwLCAmYW1wO250LSZndDtsb2NhbF9wb3J0KSkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwogCQljdXIgPSBkZWxpbTsKIAl9CkBAIC0yMjYyLDcgJiM0MzsyMzU0LDcgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KQogCQkqZGVsaW0gPSAwOwogCQlpZiAoKmN1ciA9PSAmIzM5OyAmIzM5OyB8fCAqY3VyID09ICYjMzk7XHQmIzM5OykKIAkJCW5wX2luZm8obnAsICYjMzQ7d2FybmluZzogd2hpdGVzcGFjZSBpcyBub3QgYWxsb3dlZFxuJiMzNDspOwotCQlpZiAoa3N0cnRvdTE2KGN1ciwgMTAsICZhbXA7bnAtJmd0O3JlbW90ZV9wb3J0KSkKJiM0MzsJCWlmIChrc3RydG91MTYoY3VyLCAxMCwgJmFtcDtudC0mZ3Q7cmVtb3RlX3BvcnQpKQogCQkJZ290byBwYXJzZV9mYWlsZWQ7CiAJCWN1ciA9IGRlbGltOwogCX0KQEAgLTIyODQsMTEgJiM0MzsyMzc2LDExIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdCkKIAogCWlmICgqY3VyICE9IDApIHsKIAkJLyogTUFDIGFkZHJlc3MgKi8KLQkJaWYgKCFtYWNfcHRvbihjdXIsIG5wLSZndDtyZW1vdGVfbWFjKSkKJiM0MzsJCWlmICghbWFjX3B0b24oY3VyLCBudC0mZ3Q7cmVtb3RlX21hYykpCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKIAl9CiAKLQluZXRjb25zb2xlX3ByaW50X2Jhbm5lcihucCk7CiYjNDM7CW5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTsKIAogCXJldHVybiAwOwogCkBAIC0yMzI2LDE0ICYjNDM7MjQxOCwyMiBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZywKIAl9CiAKIAkvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovCi0JZXJyID0gbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSgmYW1wO250LSZndDtucCwgdGFyZ2V0X2NvbmZpZyk7CiYjNDM7CWVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUobnQsIHRhcmdldF9jb25maWcpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDsKIAomIzQzOwkvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sIGlzCiYjNDM7CSAqIHZhbGlkIGFzIHNvb24gYXMgbnQtJmd0O25wLmRldiBiZWNvbWVzIHZpc2libGUuIFRoZSB0YXJnZXQgaXMgbm90CiYjNDM7CSAqIHlldCBvbiB0YXJnZXRfbGlzdCwgc28gYSBuZXRkZXYgZXZlbnQgY2Fubm90IHJlYWNoIGl0IGhlcmUsIGJ1dAomIzQzOwkgKiBtaXJyb3IgdGhlIGNvbmZpZ2ZzIHBhdGggZm9yIHN5bW1ldHJ5LgomIzQzOwkgKi8KJiM0MzsJbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTsKJiM0MzsKIAllcnIgPSBuZXRwb2xsX3NldHVwKCZhbXA7bnQtJmd0O25wKTsKIAlpZiAoZXJyKSB7CiAJCXByX2VycigmIzM0O05vdCBlbmFibGluZyBuZXRjb25zb2xlIGZvciAlcyVkLiBOZXRwb2xsIHNldHVwIGZhaWxlZFxuJiMzNDssCiAJCSAgICAgICBORVRDT05TT0xFX1BBUkFNX1RBUkdFVF9QUkVGSVgsIGNtZGxpbmVfY291bnQpOwomIzQzOwkJbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7CiAJCWlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSkKIAkJCS8qIG9ubHkgZmFpbCBpZiBkeW5hbWljIHJlY29uZmlndXJhdGlvbiBpcyBzZXQsCiAJCQkgKiBvdGhlcndpc2UsIGtlZXAgdGhlIHRhcmdldCBpbiB0aGUgbGlzdCwgYnV0IGRpc2FibGVkLgpAQCAtMjM1NSw2ICYjNDM7MjQ1NSw4IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLAogc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7bnQtJmd0O3Jlc3VtZV93cSk7CiYjNDM7CWlmIChudC0mZ3Q7c3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkKJiM0MzsJCW5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpOwogCW5ldHBvbGxfY2xlYW51cCgmYW1wO250LSZndDtucCk7CiAjaWZkZWYJQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQwogCWtmcmVlKG50LSZndDt1c2VyZGF0YSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaCBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCmluZGV4IDg4ZjdkYWE4NTYwZTU4Li43OTMxNTQ2MWE3YjFlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKQEAgLTIxLDIwICYjNDM7MjEsNiBAQCB1bmlvbiBpbmV0X2FkZHIgewogCXN0cnVjdCBpbjZfYWRkcglpbjY7CiB9OwogCi0vKgotICogTWF4aW11bSBwYXlsb2FkIG5ldHBvbGwmIzM5O3MgcHJlYWxsb2NhdGVkIHNrYiBwb29sIGNhbiBjYXJyeS4gS2VlcCB0aGlzIGluCi0gKiBzeW5jIHdpdGggdGhlIGJ1ZmZlciBzaXplIHVzZWQgYnkgcmVmaWxsX3NrYnMoKSBpbiBuZXQvY29yZS9uZXRwb2xsLmM7Ci0gKiBjYWxsZXJzIChlLmcuIG5ldGNvbnNvbGUpIHVzZSBpdCB0byBkZXRlY3QgcmVxdWVzdHMgdGhlIHBvb2wgY2FuIG5ldmVyCi0gKiBzYXRpc2Z5IGFuZCBhdm9pZCBkZXF1ZXVpbmcgYSBwb29sZWQgc2tiIHRoYXQgd291bGQgbGF0ZXIgdHJpcAotICogc2tiX292ZXJfcGFuaWMoKSBpbiBza2JfcHV0KCkuCi0gKi8KLSNkZWZpbmUgTUFYX1VEUF9DSFVOSwkxNDYwCi0jZGVmaW5lIE1BWF9TS0JfU0laRQkJCQkJCVwKLQkoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7CQkJCVwKLQkgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsJCQkJCVwKLQkgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICYjNDM7CQkJCVwKLQkgTUFYX1VEUF9DSFVOSykKLQogc3RydWN0IG5ldHBvbGwgewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJbmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7CkBAIC00OSwxMCAmIzQzOzM1LDYgQEAgc3RydWN0IG5ldHBvbGwgewogCiAJdW5pb24gaW5ldF9hZGRyIGxvY2FsX2lwLCByZW1vdGVfaXA7CiAJYm9vbCBpcHY2OwotCXUxNiBsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDsKLQl1OCByZW1vdGVfbWFjW0VUSF9BTEVOXTsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9wb29sOwotCXN0cnVjdCB3b3JrX3N0cnVjdCByZWZpbGxfd3E7CiB9OwogCiAjZGVmaW5lIG5wX2luZm8obnAsIGZtdCwgLi4uKQkJCQlcCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmMKaW5kZXggODVhYTUxMzUwODgxMTcuLjEwYjYwNjMyNTFhNWJjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC0zNiwxMiAmIzQzOzM2LDYgQEAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvbmFwaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tjb25maWcuaCZndDsKIAotLyoKLSAqIFdlIG1haW50YWluIGEgc21hbGwgcG9vbCBvZiBmdWxseS1zaXplZCBza2JzLCB0byBtYWtlIHN1cmUgdGhlCi0gKiBtZXNzYWdlIGdldHMgb3V0IGV2ZW4gaW4gZXh0cmVtZSBPT00gc2l0dWF0aW9ucy4KLSAqLwotCi0jZGVmaW5lIE1BWF9TS0JTIDMyCiAjZGVmaW5lIFVTRUNfUEVSX1BPTEwJNTAKIAogc3RhdGljIHVuc2lnbmVkIGludCBjYXJyaWVyX3RpbWVvdXQgPSA0OwpAQCAtMjEzLDIyICYjNDM7MjA3LDYgQEAgdm9pZCBuZXRwb2xsX3BvbGxfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCXVwKCZhbXA7bmktJmd0O2Rldl9sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldHBvbGwgKm5wKQotewotCXN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQlza2JfcG9vbCA9ICZhbXA7bnAtJmd0O3NrYl9wb29sOwotCi0Jd2hpbGUgKFJFQURfT05DRShza2JfcG9vbC0mZ3Q7cWxlbikgJmx0OyBNQVhfU0tCUykgewotCQlza2IgPSBhbGxvY19za2IoTUFYX1NLQl9TSVpFLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTsKLQkJaWYgKCFza2IpCi0JCQlicmVhazsKLQotCQlza2JfcXVldWVfdGFpbChza2JfcG9vbCwgc2tiKTsKLQl9Ci19Ci0KIHZvaWQgbmV0cG9sbF96YXBfY29tcGxldGlvbl9xdWV1ZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zNTEsMzIgJiM0MzszMjksMTIgQEAgbmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpCiB9CiBFWFBPUlRfU1lNQk9MKG5ldHBvbGxfc2VuZF9za2IpOwogCi1zdGF0aWMgdm9pZCBza2JfcG9vbF9mbHVzaChzdHJ1Y3QgbmV0cG9sbCAqbnApCi17Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCAqc2tiX3Bvb2w7Ci0KLQljYW5jZWxfd29ya19zeW5jKCZhbXA7bnAtJmd0O3JlZmlsbF93cSk7Ci0Jc2tiX3Bvb2wgPSAmYW1wO25wLSZndDtza2JfcG9vbDsKLQlza2JfcXVldWVfcHVyZ2VfcmVhc29uKHNrYl9wb29sLCBTS0JfQ09OU1VNRUQpOwotfQotCi1zdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBuZXRwb2xsICpucCA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0cG9sbCwgcmVmaWxsX3dxKTsKLQotCXJlZmlsbF9za2JzKG5wKTsKLX0KLQogaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbzsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wczsKIAlpbnQgZXJyOwogCi0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO25wLSZndDtza2JfcG9vbCk7Ci0JSU5JVF9XT1JLKCZhbXA7bnAtJmd0O3JlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTsKLQogCWlmIChuZGV2LSZndDtwcml2X2ZsYWdzICZhbXA7IElGRl9ESVNBQkxFX05FVFBPTEwpIHsKIAkJbnBfZXJyKG5wLCAmIzM0OyVzIGRvZXNuJiMzOTt0IHN1cHBvcnQgcG9sbGluZywgYWJvcnRpbmdcbiYjMzQ7LAogCQkgICAgICAgbmRldi0mZ3Q7bmFtZSk7CkBAIC00MTEsOSAmIzQzOzM2OSw2IEBAIGludCBfX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAlucC0mZ3Q7ZGV2ID0gbmRldjsKIAlzdHJzY3B5KG5wLSZndDtkZXZfbmFtZSwgbmRldi0mZ3Q7bmFtZSwgSUZOQU1TSVopOwogCi0JLyogZmlsbCB1cCB0aGUgc2tiIHF1ZXVlICovCi0JcmVmaWxsX3NrYnMobnApOwotCiAJLyogbGFzdCB0aGluZyB0byBkbyBpcyBsaW5rIGl0IHRvIHRoZSBuZXQgZGV2aWNlIHN0cnVjdHVyZSAqLwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZGV2LSZndDtucGluZm8sIG5waW5mbyk7CiAKQEAgLTYwMyw3ICYjNDM7NTU4LDcgQEAgaW50IG5ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wKQogCiAJZXJyID0gX19uZXRwb2xsX3NldHVwKG5wLCBuZGV2KTsKIAlpZiAoZXJyKQotCQlnb3RvIGZsdXNoOwomIzQzOwkJZ290byBwdXQ7CiAJcnRubF91bmxvY2soKTsKIAogCS8qIE1ha2Ugc3VyZSBhbGwgTkFQSSBwb2xscyB3aGljaCBzdGFydGVkIGJlZm9yZSBkZXYtJmd0O25waW5mbwpAQCAtNjE0LDggJiM0Mzs1NjksNiBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApCiAKIAlyZXR1cm4gMDsKIAotZmx1c2g6Ci0Jc2tiX3Bvb2xfZmx1c2gobnApOwogcHV0OgogCURFQlVHX05FVF9XQVJOX09OX09OQ0UobnAtJmd0O2Rldik7CiAJaWYgKGlwX292ZXJ3cml0dGVuKQpAQCAtNjY2LDggJiM0Mzs2MTksNiBAQCBzdGF0aWMgdm9pZCBfX25ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0cG9sbCAqbnApCiAJCVJDVV9JTklUX1BPSU5URVIobnAtJmd0O2Rldi0mZ3Q7bnBpbmZvLCBOVUxMKTsKIAkJY2FsbF9yY3UoJmFtcDtucGluZm8tJmd0O3JjdSwgcmN1X2NsZWFudXBfbmV0cG9sbF9pbmZvKTsKIAl9Ci0KLQlza2JfcG9vbF9mbHVzaChucCk7CiB9CiAKIHZvaWQgX19uZXRwb2xsX2ZyZWUoc3RydWN0IG5ldHBvbGwgKm5wKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzUyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogZG9lcyB0aGlzIGludHJvZHVjZSBmdW5jdGlvbmFsIGNoYW5nZXMgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIHdhcnJhbnQgZnV6emluZz8gSXQgc2VlbXMgbGlrZSBpdCBkb2VzLiBUaGUgcGF0Y2ggaXMgbW92aW5nIHNvbWUga2V5IHN0cnVjdHVyZXMg4oCTIGBza2JfcG9vbGAsIGByZWZpbGxfd3FgLCBgbG9jYWxfcG9ydGAsIGByZW1vdGVfcG9ydGAsIGFuZCBgcmVtb3RlX21hY2Ag4oCTIGZyb20gdGhlIGBuZXRwb2xsYCBzdHJ1Y3R1cmUgdG8gdGhlIGBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0dXJlLiBBbmQgaXQmIzM5O3MgdXBkYXRpbmcgdGhlIGBuZXRjb25zb2xlLmNgIGFuZCBgbmV0cG9sbC5jYCBmaWxlcyB0byByZWZsZWN0IHRoZXNlIGNoYW5nZXMuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIG1vZGlmaWNhdGlvbiB0byBob3cgdGhlIG5ldGNvbnNvbGUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaXRzIFNLQiBtYW5hZ2VtZW50IGFuZCBjb3JlIGNvbmZpZ3VyYXRpb24sIG9wZXJhdGVzLgoKVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGlzIHJlYWNoYWJpbGl0eSBhbmQgdGVzdGFiaWxpdHkuIE5ldGNvbnNvbGUsIGFzIEkgcmVjYWxsLCBpcyBhIGRyaXZlciBkZXNpZ25lZCBmb3Igc2VuZGluZyBrZXJuZWwgbG9nIG1lc3NhZ2VzIG92ZXIgVURQLiBJdCBoYXMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRocm91Z2ggbW9kdWxlIHBhcmFtZXRlcnMgYW5kLCBtb3JlIGludGVyZXN0aW5nbHksIGNvbmZpZ2ZzLiBUaGUgZmlsZXMgdG91Y2hlZCBieSB0aGUgcGF0Y2ggYXJlIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGFuZCBgbmV0L2NvcmUvbmV0cG9sbC5jYC4gR2l2ZW4gdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgZnVuZGFtZW50YWwgU0tCIGFsbG9jYXRpb24gYW5kIFVEUCB0cmFuc21pc3Npb24gbG9naWMgaW4gYm90aCB0aGUgbmV0Y29uc29sZSBhbmQgbmV0cG9sbCBjb21wb25lbnRzLCBpdCBjZXJ0YWlubHkgKnNlZW1zKiB3b3J0aCBmdXp6aW5nLiBJIGNhbiBpbWFnaW5lIGZ1enppbmcgdGhlIG5ldGNvbnNvbGUgY29uZmlndXJhdGlvbiB0aHJvdWdoIGNvbmZpZ2ZzIG9yIG1vZHVsZSBwYXJhbWV0ZXJzIGFuZCB0aGVuIHRyaWdnZXJpbmcga2VybmVsIGxvZ3MgdG8gZXhlcmNpc2UgdGhlIGNoYW5nZXMuCgpXYWl0IGEgc2Vjb25k4oCmIEkgdGhpbmsgU3l6a2FsbGVyIGNhbiBhY3R1YWxseSBpbnRlcmFjdCB3aXRoIGNvbmZpZ2ZzLCBjYW4mIzM5O3QgaXQ/IElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIHRoZW4gdGhpcyBwYXRjaCBqdXN0IGp1bXBlZCB1cCBpbiBwcmlvcml0eS4gTm93IEkganVzdCBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGljaCBrZXJuZWwgY29uZmlncyBhcmUgcmVsZXZhbnQgaGVyZS4gSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09ORklHX05FVENPTlNPTEVgIGFuZCBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgYXJlIHRoZSBrZXlzLCBidXQgbGV0JiMzOTtzIHF1aWNrbHkgc2VhcmNoIHRoZSBjb2RlIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUQ09OU09MRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTMxOD1jb25maWcgTUFDU0VDXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXG5kcml2ZXJzL25ldC9LY29uZmlnOjMyNzpjb25maWcgTkVUQ09OU09MRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzMtXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNDpjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cdGJvb2wgXCYjMzQ7RHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NTpjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcbmRyaXZlcnMvbmV0L0tjb25maWctMzQ2LVx0Ym9vbCBcJiMzNDtTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzU0LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozNTU6Y29uZmlnIE5FVENPTlNPTEVfUFJFUEVORF9SRUxFQVNFXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1Ni1cdGJvb2wgXCYjMzQ7UHJlcGVuZCBrZXJuZWwgcmVsZWFzZSB2ZXJzaW9uIGluIHRoZSBtZXNzYWdlIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY4OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDg3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoZSBjb3JlIGNvbmZpZ3MgaW4gcGxheSBhcmUgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYC4gVGhpcyBpcyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7ZCBjaGVjayB3aGVuIGF1ZGl0aW5nIHNvbWV0aGluZyBsaWtlIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkLCBhbmQgdGhpcyBpcyB3aGVyZSBJJiMzOTtkIHN0YXJ0IGRpZ2dpbmcuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgdGhlIGJ1bGsgb2YgdGhlIGNoYW5nZXMgYXBwZWFyIHdpdGhpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gSSYjMzk7dmUgbGlzdGVkIG91dCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgYSBzaW1pbGFyIGxpc3QgZm9yIGBuZXQvY29yZS9uZXRwb2xsLmNgLgoKSSBxdWlja2x5IHNlZSB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgc2lnbmlmaWNhbnQgcmVmYWN0b3JpbmcgLSBtb3Zpbmcga2V5IGZ1bmN0aW9ucyBsaWtlIGByZWZpbGxfc2tic2AsIGBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoYCBhbmQgYHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcmAgZnJvbSB0aGUgYG5ldHBvbGxgIHN1YnN5c3RlbSB0byBgbmV0Y29uc29sZWAuIEkmIzM5O2QgZXhwZWN0IHNvbWUgY2hhbmdlcyB0byBgbmV0cG9sbF9zZXR1cGAgYW5kIGBfX25ldHBvbGxfY2xlYW51cGAgdG9vLCBhbmQgaW5kZWVkIHRoZXJlIGFyZS4KClNvLCBJJiMzOTt2ZSBnb3QgYSBwcmVsaW1pbmFyeSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBmb2N1cyBvbjogdGhvc2UgaW52b2x2ZWQgaW4gYnVmZmVyIG1hbmFnZW1lbnQgKGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAsIGByZWZpbGxfc2tic2AsIGBuZXRjb25zX3NrYl9wb3BgLCBgZmluZF9za2JgKSwgdGhlIGFjdHVhbCBkYXRhIHRyYW5zbWlzc2lvbiAoYHB1c2hfdWRwYCwgYHB1c2hfZXRoYCwgYG5ldHBvbGxfc2VuZF91ZHBgKSwgdGhlIHRhcmdldCBjb25maWd1cmF0aW9uIChgYWxsb2NfcGFyYW1fdGFyZ2V0YCwgYGZyZWVfcGFyYW1fdGFyZ2V0YCwgYGVuYWJsZWRfc3RvcmVgLCBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGApLCBhbmQgY29tbWFuZC1saW5lIHBhcnNpbmcgKGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCkuCgpOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbmV0Y29uc29sZWAgaXMgcmVhY2hhYmxlLiBBaCwgcmlnaHQsIHRocm91Z2ggY29uZmlnZnMuIEdpdmVuIHRoaXMgZnVuY3Rpb25hbCBzaGlmdCBvZiBzdGF0ZSBmcm9tIGBuZXRwb2xsYCB0byBgbmV0Y29uc29sZV90YXJnZXRgLCBmdXp6aW5nIHRoaXMgYXJlYSBzZWVtcyB3b3J0aHdoaWxlLiBJJiMzOTtkIGRlZmluaXRlbHkgd2FudCB0byBleHBsb3JlIHRoZSBlZGdlIGNhc2VzIGludHJvZHVjZWQgYnkgdGhpcyBtb3ZlLgoKTm93LCBJJiMzOTtsbCByZWZpbmUgbXkgc3ltYm9sIGxpc3QuIEl0IHNlZW1zIGxpa2UgYSB2ZXJ5IGdvb2QgdGFyZ2V0IGxpc3QuIFdhaXQsIEkmIzM5O20ganVzdCBub3RpY2luZyB0aGF0IG1vc3Qgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMgd2l0aGluIGBuZXRjb25zb2xlLmNgLiBUaGF0IGlzIGtleSBpbmZvcm1hdGlvbi4gVGhpcyBsaW1pdHMgdGhlaXIgZGlyZWN0IGV4dGVybmFsIGV4cG9zdXJlLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgdXNlZCBpbnRlcm5hbGx5LgoKRmluYWxseSwgSSYjMzk7bGwgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHdoYXQgZWxzZSBkZXBlbmRzIG9uIGBuZXRwb2xsYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuZm9yZXNlZW4ga25vY2stb24gZWZmZWN0cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBpZGVudGlmaWVkIGFsbCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBBbmQgd2hpbGUgSSBzZWUgY2hhbmdlcyB3aXRoaW4gYG5ldC9jb3JlL25ldHBvbGwuY2AsIGFyZSB0aGVyZSBvdGhlciBjYWxsZXJzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGVudGlyZSBgbmV0cG9sbGAgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldHBvbGxfc2V0dXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xMzkyPXN0YXRpYyBpbmxpbmUgaW50IHNsYXZlX2VuYWJsZV9uZXRwb2xsKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xNDAxLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxNDAyOlx0ZXJyID0gX19uZXRwb2xsX3NldHVwKG5wLCBzbGF2ZS1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xNDAzLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTQ1MT1zdGF0aWMgdm9pZCBib25kX25ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xNDYxLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxNDYyOnN0YXRpYyBpbnQgYm9uZF9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE0NjMte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTk0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJvbmRfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5NjctI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU5Njg6XHQubmRvX25ldHBvbGxfc2V0dXBcdD0gYm9uZF9uZXRwb2xsX3NldHVwLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01OTY5LVx0Lm5kb19uZXRwb2xsX2NsZWFudXBcdD0gYm9uZF9uZXRwb2xsX2NsZWFudXAsXG4tLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTExMzA9c3RhdGljIHZvaWQgbWFjdmxhbl9kZXZfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTExMzQtXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6MTEzNTpzdGF0aWMgaW50IG1hY3ZsYW5fZGV2X25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTM2LXtcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTE0Ni1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMTQ3Olx0ZXJyID0gX19uZXRwb2xsX3NldHVwKG5ldHBvbGwsIHJlYWxfZGV2KTtcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTQ4LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz0xMTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWFjdmxhbl9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMjA2LVx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcdD0gbWFjdmxhbl9kZXZfcG9sbF9jb250cm9sbGVyLFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjEyMDc6XHQubmRvX25ldHBvbGxfc2V0dXBcdD0gbWFjdmxhbl9kZXZfbmV0cG9sbF9zZXR1cCxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMjA4LVx0Lm5kb19uZXRwb2xsX2NsZWFudXBcdD0gbWFjdmxhbl9kZXZfbmV0cG9sbF9jbGVhbnVwLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDU9ZW51bSB0YXJnZXRfc3RhdGUge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODctICpcdFx0aXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscy4gTGlmZXRpbWUgYnJhY2tldHMgYVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4ODogKlx0XHRzdWNjZXNzZnVsIG5ldHBvbGxfc2V0dXAoKSAvIG5ldHBvbGxfY2xlYW51cCgpIHBhaXIgb24gQG5wLlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4OS0gKiBAcmVmaWxsX3dxOlx0V29yayBpdGVtIHRoYXQgYXN5bmNocm9ub3VzbHkgdG9wcyBAc2tiX3Bvb2wgYmFjayB1cCB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zNTc9c3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM1OC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzU5Olx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBtYWtlcyBudC1cdTAwM2VucC5kZXZcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNjAtXHQgKiB2aXNpYmxlIHRvIHRhcmdldF9saXN0IHdhbGtlcnMgKGUuZy4gbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQpLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNjUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzY2Olx0aWYgKG5ldHBvbGxfc2V0dXAoXHUwMDI2bnQtXHUwMDNlbnApKSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzY3LVx0XHQvKiBuZXRwb2xsIGZhaWxzIHNldHVwIG9uY2UsIGRvIG5vdCB0cnkgYWdhaW4uICovXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTM5MD1zdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MTUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDE2Olx0LyogbmV0cG9sbF9zZXR1cCgpIHRvb2sgYSBuZXRfZGV2aWNlIHJlZmVyZW5jZSBhbmQgZHJvcHBlZCB0aGUgUlROTFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQxNy1cdCAqIGJlZm9yZSByZXR1cm5pbmcsIGFsbCB3aGlsZSB0aGlzIHRhcmdldCB3YXMgb2ZmIHRhcmdldF9saXN0IGFuZFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03ODA9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgzMy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MzQ6XHRcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MzUtXHRcdCAqIGlzIHZhbGlkIGFzIHNvb24gYXMgbnQtXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NDEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODQyOlx0XHRyZXQgPSBuZXRwb2xsX3NldHVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NDMtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM5Mz1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQyNC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDI1Olx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbCBpc1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MjYtXHQgKiB2YWxpZCBhcyBzb29uIGFzIG50LVx1MDAzZW5wLmRldiBiZWNvbWVzIHZpc2libGUuIFRoZSB0YXJnZXQgaXMgbm90XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MzEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQzMjpcdGVyciA9IG5ldHBvbGxfc2V0dXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MzMtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0xMTQwPXN0YXRpYyBpbnQgX190ZWFtX3BvcnRfZW5hYmxlX25ldHBvbGwoc3RydWN0IHRlYW1fcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTExNDgtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjExNDk6XHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIHBvcnQtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMTE1MC1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTIwNzg9c3RhdGljIHZvaWQgdGVhbV9uZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIwODYtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjIwODc6c3RhdGljIGludCB0ZWFtX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjA4OC17XG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMTcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGVhbV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE4NS1cdC5uZG9fcG9sbF9jb250cm9sbGVyXHQ9IHRlYW1fcG9sbF9jb250cm9sbGVyLFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMTg2Olx0Lm5kb19uZXRwb2xsX3NldHVwXHQ9IHRlYW1fbmV0cG9sbF9zZXR1cCxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE4Ny1cdC5uZG9fbmV0cG9sbF9jbGVhbnVwXHQ9IHRlYW1fbmV0cG9sbF9jbGVhbnVwLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTQ0Nj1zdHJ1Y3QgbmV0X2RldmljZV9vcHMge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTUwNC1cdHZvaWQgICAgICAgICAgICAgICAgICAgICgqbmRvX3BvbGxfY29udHJvbGxlcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjE1MDU6XHRpbnRcdFx0XHQoKm5kb19uZXRwb2xsX3NldHVwKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTUwNi1cdHZvaWRcdFx0XHQoKm5kb19uZXRwb2xsX2NsZWFudXApKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oPTY1PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRwb2xsX3BvbGxfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgcmV0dXJuOyB9XG4tLVxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmgtNjctXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaDo2ODppbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6Njk6aW50IG5ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wKTtcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTcwLXZvaWQgX19uZXRwb2xsX2ZyZWUoc3RydWN0IG5ldHBvbGwgKm5wKTtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz03MTQ9c3RhdGljIHZvaWQgdmxhbl9kZXZfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzE4LVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6NzE5OnN0YXRpYyBpbnQgdmxhbl9kZXZfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzIwLXtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03MzAtXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3MzE6XHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobmV0cG9sbCwgcmVhbF9kZXYpO1xubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzMyLVx0aWYgKGVycikge1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jPTEwNzg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMgPSB7XG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTEwNC1cdC5uZG9fcG9sbF9jb250cm9sbGVyXHQ9IHZsYW5fZGV2X3BvbGxfY29udHJvbGxlcixcbm5ldC84MDIxcS92bGFuX2Rldi5jOjExMDU6XHQubmRvX25ldHBvbGxfc2V0dXBcdD0gdmxhbl9kZXZfbmV0cG9sbF9zZXR1cCxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTExMDYtXHQubmRvX25ldHBvbGxfY2xlYW51cFx0PSB2bGFuX2Rldl9uZXRwb2xsX2NsZWFudXAsXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMDY9c3RhdGljIGludCBfX2JyX25ldHBvbGxfZW5hYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0zMTQtXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjMxNTpcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgcC1cdTAwM2VkZXYpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0zMTYtXHRpZiAoZXJyKSB7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMjU9aW50IGJyX25ldHBvbGxfZW5hYmxlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0zMzItXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjMzMzpzdGF0aWMgaW50IGJyX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMzM0LXtcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTQzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJyX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy00NTEtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjQ1MjpcdC5uZG9fbmV0cG9sbF9zZXR1cFx0ID0gYnJfbmV0cG9sbF9zZXR1cCxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNDUzLVx0Lm5kb19uZXRwb2xsX2NsZWFudXBcdCA9IGJyX25ldHBvbGxfY2xlYW51cCxcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmM9MzMwPUVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XG5uZXQvY29yZS9uZXRwb2xsLmMtMzMxLVxubmV0L2NvcmUvbmV0cG9sbC5jOjMzMjppbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG5uZXQvY29yZS9uZXRwb2xsLmMtMzMzLXtcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtMzU5LVx0XHRvcHMgPSBuZGV2LVx1MDAzZW5ldGRldl9vcHM7XG5uZXQvY29yZS9uZXRwb2xsLmM6MzYwOlx0XHRpZiAob3BzLVx1MDAzZW5kb19uZXRwb2xsX3NldHVwKSB7XG5uZXQvY29yZS9uZXRwb2xsLmM6MzYxOlx0XHRcdGVyciA9IG9wcy1cdTAwM2VuZG9fbmV0cG9sbF9zZXR1cChuZGV2KTtcbm5ldC9jb3JlL25ldHBvbGwuYy0zNjItXHRcdFx0aWYgKGVycilcbi0tXG5uZXQvY29yZS9uZXRwb2xsLmMtMzgxLX1cbm5ldC9jb3JlL25ldHBvbGwuYzozODI6RVhQT1JUX1NZTUJPTF9HUEwoX19uZXRwb2xsX3NldHVwKTtcbm5ldC9jb3JlL25ldHBvbGwuYy0zODMtXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jPTQ1OT1zdGF0aWMgaW50IG5ldHBvbGxfdGFrZV9pcHY0KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTQ4Ni0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxlciBsZWZ0IG5wLVx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XG5uZXQvY29yZS9uZXRwb2xsLmM6NDg3OiAqIG5ldHBvbGxfc2V0dXAoKSBzaG91bGQgYXV0by1wb3B1bGF0ZSBpdCBmcm9tIHRoZSBlZ3Jlc3MgZGV2aWNlLlxubmV0L2NvcmUvbmV0cG9sbC5jLTQ4OC0gKlxuLS1cbm5ldC9jb3JlL25ldHBvbGwuYz00OTU9c3RhdGljIGJvb2wgbmV0cG9sbF9sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0cG9sbCAqbnApXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTUwMS1cbm5ldC9jb3JlL25ldHBvbGwuYzo1MDI6aW50IG5ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wKVxubmV0L2NvcmUvbmV0cG9sbC5jLTUwMy17XG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTU1OC1cbm5ldC9jb3JlL25ldHBvbGwuYzo1NTk6XHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpO1xubmV0L2NvcmUvbmV0cG9sbC5jLTU2MC1cdGlmIChlcnIpXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTU4MC19XG5uZXQvY29yZS9uZXRwb2xsLmM6NTgxOkVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZXR1cCk7XG5uZXQvY29yZS9uZXRwb2xsLmMtNTgyLVxuLS1cbm5ldC9kc2EvdXNlci5jPTEzMDU9c3RhdGljIGludCBkc2FfdXNlcl9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9kc2EvdXNlci5jLTEzMTMtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5uZXQvZHNhL3VzZXIuYzoxMzE0OnN0YXRpYyBpbnQgZHNhX3VzZXJfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2RzYS91c2VyLmMtMTMxNS17XG4tLVxubmV0L2RzYS91c2VyLmMtMTMyNC1cbm5ldC9kc2EvdXNlci5jOjEzMjU6XHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobmV0cG9sbCwgY29uZHVpdCk7XG5uZXQvZHNhL3VzZXIuYy0xMzI2LVx0aWYgKGVycikge1xuLS1cbm5ldC9kc2EvdXNlci5jPTI1ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkc2FfdXNlcl9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9kc2EvdXNlci5jLTI1OTctI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5uZXQvZHNhL3VzZXIuYzoyNTk4Olx0Lm5kb19uZXRwb2xsX3NldHVwXHQ9IGRzYV91c2VyX25ldHBvbGxfc2V0dXAsXG5uZXQvZHNhL3VzZXIuYy0yNTk5LVx0Lm5kb19uZXRwb2xsX2NsZWFudXBcdD0gZHNhX3VzZXJfbmV0cG9sbF9jbGVhbnVwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzkyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBOZXR3b3JrIENvbnNvbGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBuZXRjb25zb2xlYCBhbmQgYG5ldHBvbGxgLiBUaGUgYG5ldHBvbGxgIG1vZGlmaWNhdGlvbnMgYXJlIHRoZSBjb3JlIG9mIG15IGNvbmNlcm4uIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgcmVtb3ZpbmcgdGhlIGBza2JfcG9vbGAgYW5kIGByZWZpbGxfd3FgIGZyb20gdGhlIGBzdHJ1Y3QgbmV0cG9sbGAgYW5kIHRoZW4gcmlwcGluZyBvdXQgdGhlIGFzc29jaWF0ZWQgYHJlZmlsbF9za2JzYCBhbmQgYHNrYl9wb29sX2ZsdXNoYCBjYWxscyBmcm9tIGBuZXRwb2xsX3NldHVwYCBhbmQgYF9fbmV0cG9sbF9jbGVhbnVwYCwgcmVzcGVjdGl2ZWx5LgoKVGhlIGltbWVkaWF0ZSBjb25zZXF1ZW5jZSB0aGF0IGp1bXBzIG91dCBpcyB0aGUgaW1wYWN0IG9uIGFsbCAqb3RoZXIqIHVzZXJzIG9mIGBuZXRwb2xsYC4gSSBtZWFuLCB0aGluayBhYm91dCBpdDogYGJvbmRfbWFpbi5jYCwgYG1hY3ZsYW4uY2AsIGB0ZWFtX2NvcmUuY2AsIGB2bGFuX2Rldi5jYCwgYGJyX2RldmljZS5jYCwgYW5kIGV2ZW4gYGRzYS91c2VyLmNgIOKAkyB0aGV5JiMzOTtyZSBhbGwgcmVseWluZyBvbiBzb21lIGZvcm0gb2YgYG5ldHBvbGxgIHN0cnVjdHVyZS4gQW5kIG5vdywgdGhleSYjMzk7cmUgKm5vdCogZ29pbmcgdG8gaGF2ZSBhbiBgc2tiX3Bvb2xgIGF2YWlsYWJsZSB0byB0aGVtIGluIHRoZWlyIGBuZXRwb2xsYCBpbnN0YW5jZXMuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0LCBhIGJpdCB1bnNldHRsaW5nLgoKSG1tLCB0aGlzIHJhaXNlcyBhIGNydWNpYWwgcXVlc3Rpb24uIEFyZSB0aGVzZSBvdGhlciB1c2VycyBvZiBgbmV0cG9sbGAgZXZlbiB1dGlsaXppbmcgYG5ldHBvbGxfc2VuZF91ZHBgPyBJZiB0aGV5IGFyZW4mIzM5O3QsIHRoZW4gbWF5YmUgdGhpcyBpc24mIzM5O3Qgc3VjaCBhIGJpZyBkZWFsLiBUaGUgYWJzZW5jZSBvZiB0aGUgYHNrYl9wb29sYCBtaWdodCBub3QgaGF2ZSBhbiBpbW1lZGlhdGUgZnVuY3Rpb25hbCBpbXBhY3QuIEJ1dCB0aGUgaW1wbGljYXRpb25zIG9mIGEgc2hhcmVkIHJlc291cmNlIHJlbW92ZWQgY2Fubm90IGJlIGlnbm9yZWQgYW5kLCBpbiB0aGlzIGNhc2UsIG5lZWRzIGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdXNlZC4gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRwb2xsX3NlbmRfdWRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xOTMwPXN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NTItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk1MzpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NTQtXHRcdFx0ICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5OTAtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk5MTogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk5Mi0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk5NS0gKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5OTY6ICogQ2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBhbmQgY2xhc3NpZmllcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBhbiBlcnJvclxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5OTctICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5OTg6ICogT25seSBjYWxscyBuZXRwb2xsX3NlbmRfdWRwIGlmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgZGlzYWJsZWQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk5OS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMDAwPXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDAxLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDAyOlx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDAzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzgxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgTmV0Y29uc29sZSBVRFAgVHJhbnNtaXNzaW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYG5ldGNvbnNvbGVgIGhhbmRsZXMgVURQIHRyYW5zbWlzc2lvbi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBuZXRwb2xsX3NlbmRfdWRwYCBpcyBzdGF0aWNhbGx5IGRlY2xhcmVkIHdpdGhpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBpdCYjMzk7cyB0aWdodGx5IGJvdW5kIHRvIHRoYXQgc3BlY2lmaWMgbW9kdWxlLiBUaGVuIEkgcmVtZW1iZXIgdGhhdCBgbmV0cG9sbF9zZW5kX3NrYmAgaXMsIGluIGZhY3QsIGV4cG9ydGVkIGZyb20gYG5ldC9jb3JlL25ldHBvbGwuY2AuIFRoYXQmIzM5O3MgdGhlIG1vcmUgZ2VuZXJhbCBuZXR3b3JraW5nIGNvbXBvbmVudCwgYW5kIEkmIzM5O2QgZXhwZWN0IHRoYXQgdGhlIG1vcmUgZ2VuZXJhbCBzZW5kIGZ1bmN0aW9uIGBuZXRwb2xsX3NlbmRfc2tiYCBtYXkgaGF2ZSBicm9hZGVyIGFwcGxpY2FiaWxpdHkgdGhhbiB0aGUgc3RhdGljIG5ldGNvbnNvbGUgZnVuY3Rpb24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYG5ldHBvbGxfc2VuZF9za2JgIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIG9yIGludGVyYWN0aW5nIHdpdGggYHNrYl9wb29sYC4gVGhhdCB3aWxsIGJlIGFuIGltcG9ydGFudCBpbmRpY2F0b3Igb2YgbWVtb3J5IGFsbG9jYXRpb24sIGVmZmljaWVuY3ksIGFuZCBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY2FsbCBncmFwaCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0cG9sbF9zZW5kX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTI5Nz1uZXRkZXZfdHhfdCBib25kX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzA2LVx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhib25kLVx1MDAzZWRldikpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozMDc6XHRcdHJldHVybiBib25kX25ldHBvbGxfc2VuZF9za2IoYm9uZF9nZXRfc2xhdmVfYnlfZGV2KGJvbmQsIHNsYXZlX2RldiksIHNrYik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTMwOC1cbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9NTQ1PXN0YXRpYyBpbnQgbWFjdmxhbl9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU3NC1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzo1NzU6c3RhdGljIGlubGluZSBuZXRkZXZfdHhfdCBtYWN2bGFuX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU3Ni17XG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtNTc3LSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjU3ODpcdHJldHVybiBuZXRwb2xsX3NlbmRfc2tiKHZsYW4tXHUwMDNlbmV0cG9sbCwgc2tiKTtcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01NzktI2Vsc2Vcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9NTg1PXN0YXRpYyBuZXRkZXZfdHhfdCBtYWN2bGFuX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtNTkyLVx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzo1OTM6XHRcdHJldHVybiBtYWN2bGFuX25ldHBvbGxfc2VuZF9za2Iodmxhbiwgc2tiKTtcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01OTQtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE5NTM9c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk4Ni1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTg3Olx0cmV0dXJuIChpbnQpbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTg4LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaD05OT1zdGF0aWMgaW5saW5lIGJvb2wgdGVhbV9wb3J0X2Rldl90eGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTExMi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oOjExMzpzdGF0aWMgaW5saW5lIHZvaWQgdGVhbV9uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMTQtXHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTE1LXtcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oOjExNjpcdG5ldHBvbGxfc2VuZF9za2IocG9ydC1cdTAwM2VucCwgc2tiKTtcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTExNy19XG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMTgtI2Vsc2VcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oOjExOTpzdGF0aWMgaW5saW5lIHZvaWQgdGVhbV9uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMjAtXHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oPTIzNz1zdGF0aWMgaW5saW5lIGludCB0ZWFtX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCB0ZWFtICp0ZWFtLCBzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0LFxuLS1cbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTI0NS1cdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcobmV0ZGV2X2Zyb21fcHJpdih0ZWFtKSkpKSB7XG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaDoyNDY6XHRcdHRlYW1fbmV0cG9sbF9zZW5kX3NrYihwb3J0LCBza2IpO1xuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMjQ3LVx0XHRyZXR1cm4gMDtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaD03Mj12b2lkIGRvX25ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0cG9sbCAqbnApO1xuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6NzM6bmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9uZXRwb2xsLmgtNzQtdm9pZCBuZXRwb2xsX3phcF9jb21wbGV0aW9uX3F1ZXVlKHZvaWQpO1xuLS1cbmluY2x1ZGUvbmV0L2JvbmRpbmcuaD01NDg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYXZlX2xhc3RfdHgoc3RydWN0IHNsYXZlICpzbGF2ZSlcbi0tXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTUzLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjU1NDpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IGJvbmRfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1NS1cdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTU2LXtcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaDo1NTc6XHRyZXR1cm4gbmV0cG9sbF9zZW5kX3NrYihzbGF2ZS1cdTAwM2VucCwgc2tiKTtcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC01NTgtfVxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1OS0jZWxzZVxuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjU2MDpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IGJvbmRfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU2MS1cdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9NDY9c3RhdGljIGludCB2bGFuX2Rldl9oYXJkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jLTg5LVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6OTA6c3RhdGljIGlubGluZSBuZXRkZXZfdHhfdCB2bGFuX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4sIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvODAyMXEvdmxhbl9kZXYuYy05MS17XG5uZXQvODAyMXEvdmxhbl9kZXYuYy05Mi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbm5ldC84MDIxcS92bGFuX2Rldi5jOjkzOlx0cmV0dXJuIG5ldHBvbGxfc2VuZF9za2Iodmxhbi1cdTAwM2VuZXRwb2xsLCBza2IpO1xubmV0LzgwMjFxL3ZsYW5fZGV2LmMtOTQtI2Vsc2Vcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDA9c3RhdGljIG5ldGRldl90eF90IHZsYW5fZGV2X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jLTEyMy1cdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcoZGV2KSkpXG5uZXQvODAyMXEvdmxhbl9kZXYuYzoxMjQ6XHRcdHJldHVybiB2bGFuX25ldHBvbGxfc2VuZF9za2Iodmxhbiwgc2tiKTtcbm5ldC84MDIxcS92bGFuX2Rldi5jLTEyNS1cbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYz03Mz1zdGF0aWMgdm9pZCBfX2JyX2ZvcndhcmQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqdG8sXG4tLVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMTA2LVx0XHRcdGVsc2Vcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjEwNzpcdFx0XHRcdGJyX25ldHBvbGxfc2VuZF9za2IodG8sIHNrYik7XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xMDgtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTgwOT1uZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgxMC0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjgxMTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODEyLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MTMte1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6ODE0Olx0bmV0cG9sbF9zZW5kX3NrYihwLVx1MDAzZW5wLCBza2IpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODE1LX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD04MTg9dm9pZCBicl9uZXRwb2xsX2Rpc2FibGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MTktI2Vsc2Vcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjgyMDpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODIxLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jPTIzOT1zdGF0aWMgaW50IG5ldHBvbGxfb3duZXJfYWN0aXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTI1MC0vKiBjYWxsIHdpdGggSVJRIGRpc2FibGVkICovXG5uZXQvY29yZS9uZXRwb2xsLmM6MjUxOnN0YXRpYyBuZXRkZXZfdHhfdCBfX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvbmV0cG9sbC5jLTI1Mi17XG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTI5OS1cdFx0V0FSTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCksXG5uZXQvY29yZS9uZXRwb2xsLmM6MzAwOlx0XHRcdFwmIzM0O25ldHBvbGxfc2VuZF9za2Jfb25fZGV2KCk6ICVzIGVuYWJsZWQgaW50ZXJydXB0cyBpbiBwb2xsICglcFMpXFxuXCYjMzQ7LFxubmV0L2NvcmUvbmV0cG9sbC5jLTMwMS1cdFx0XHRkZXYtXHUwMDNlbmFtZSwgZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0YXJ0X3htaXQpO1xuLS1cbm5ldC9jb3JlL25ldHBvbGwuYy0zMTQtXG5uZXQvY29yZS9uZXRwb2xsLmM6MzE1Om5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvbmV0cG9sbC5jLTMxNi17XG4tLVxubmV0L2NvcmUvbmV0cG9sbC5jLTMyNC1cdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xubmV0L2NvcmUvbmV0cG9sbC5jOjMyNTpcdFx0cmV0ID0gX19uZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xubmV0L2NvcmUvbmV0cG9sbC5jLTMyNi1cdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuLS1cbm5ldC9jb3JlL25ldHBvbGwuYy0zMjktfVxubmV0L2NvcmUvbmV0cG9sbC5jOjMzMDpFWFBPUlRfU1lNQk9MKG5ldHBvbGxfc2VuZF9za2IpO1xubmV0L2NvcmUvbmV0cG9sbC5jLTMzMS1cbi0tXG5uZXQvZHNhL3VzZXIuYz04MTk9c3RhdGljIGludCBkc2FfdXNlcl9wb3J0X29ial9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqY3R4LFxuLS1cbm5ldC9kc2EvdXNlci5jLTg2Ny1cbm5ldC9kc2EvdXNlci5jOjg2ODpzdGF0aWMgbmV0ZGV2X3R4X3QgZHNhX3VzZXJfbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2RzYS91c2VyLmMtODY5LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2RzYS91c2VyLmMtODczLVxubmV0L2RzYS91c2VyLmM6ODc0Olx0cmV0dXJuIG5ldHBvbGxfc2VuZF9za2IocC1cdTAwM2VuZXRwb2xsLCBza2IpO1xubmV0L2RzYS91c2VyLmMtODc1LSNlbHNlXG4tLVxubmV0L2RzYS91c2VyLmM9ODk1PW5ldGRldl90eF90IGRzYV9lbnF1ZXVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9kc2EvdXNlci5jLTkwMC1cdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcoZGV2KSkpXG5uZXQvZHNhL3VzZXIuYzo5MDE6XHRcdHJldHVybiBkc2FfdXNlcl9uZXRwb2xsX3NlbmRfc2tiKGRldiwgc2tiKTtcbm5ldC9kc2EvdXNlci5jLTkwMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MTgKCQkJCQkJCW91dHB1dDogMjQyCgkJCQkJCQl0aG91Z2h0czogMTE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBOZXRjb25zb2xlIGFuZCBOZXRwb2xsIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGltcGxpY2F0aW9ucyBmb3IgZnV6emluZyBqdW1wIG91dC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBuZXRwb2xsX3NlbmRfc2tiYCBsb29rZWQgbGlrZSBhIGNlbnRyYWwgcG9pbnQsIGNvbnNpZGVyaW5nIGl0cyB1c2UgYnkgdmFyaW91cyBkcml2ZXJzLiBIb3dldmVyLCB1cG9uIGNsb3NlciBpbnNwZWN0aW9uLCBJIHNlZSB0aGF0IGl0JiMzOTtzICpub3QqIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGhhbmRsaW5nIFNLQiBhbGxvY2F0aW9uIG9yIHBvb2wgbWFuYWdlbWVudC4gSXQmIzM5O3MganVzdCBhIHRyYW5zbWl0dGVyLiBUaGUga2V5IGxpZXMgaW4gYG5ldHBvbGxfc2VuZF91ZHBgLCB3aGljaCwgYXMgdGhlIGRpZmYgY2xlYXJseSBzaG93cywgd2FzIGFscmVhZHkgc3RhdGljIGFuZCBpcyBub3cgbW92ZWQgaW50byB0aGUgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3QsIGFsb25nIHdpdGggdGhlIGBza2JfcG9vbGAgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zIGxpa2UgYGZpbmRfc2tiYCBhbmQgYG5ldGNvbnNfc2tiX3BvcGAuCgpUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHNoaWZ0cyB0aGUgcmVzb3VyY2UgbWFuYWdlbWVudCBzcGVjaWZpY2FsbHkgdG8gYG5ldGNvbnNvbGUuY2AuIEVmZmVjdGl2ZWx5LCB0aGUgcGF0Y2ggaXMgcmVvcmdhbml6aW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMsIG1vdmluZyB0aGUgU0tCIHBvb2wgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gdGhlIGdlbmVyYWwgYG5ldHBvbGxgIGNvbnRleHQgdG8gYSBtb3JlIHNwZWNpZmljIGBuZXRjb25zb2xlX3RhcmdldGAgY29udGV4dC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgU0tCIHBvb2wgaXMgKm9ubHkqIHVzZWQgYnkgYG5ldGNvbnNvbGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLgoKR2l2ZW4gdGhpcywgSSBiZWxpZXZlIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gdGhlIGBuZXRjb25zb2xlYCBjb25maWd1cmF0aW9uIGFuZCB1c2FnZS4gVGhlIG1vc3QgcmVsZXZhbnQgc3ltYm9scyB0byB0YXJnZXQgYXJlIHRoZSBvbmVzIHJlbGF0ZWQgdG8gU0tCIHBvb2wgbWFuYWdlbWVudCwgc2VuZGluZyB0aGUgVURQIGRhdGFncmFtcywgdGFyZ2V0IHNldHVwL2NsZWFudXAsIGFuZCBjb25maWd1cmF0aW9uIHBhcnNpbmcuCgpNeSBpbml0aWFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBpbmNsdWRlcyBhIGNvbXByZWhlbnNpdmUgcmFuZ2Ugb2YgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBhbmQgcmVsZXZhbnQgZnVuY3Rpb25zOgoKKiAgIGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgCiogICBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAKKiAgIGByZWZpbGxfc2tic2AgJmFtcDsgYHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcmAKKiAgIGBuZXRjb25zX3NrYl9wb3BgCiogICBgZmluZF9za2JgCiogICBgcHVzaF91ZHBgCiogICBgcHVzaF9ldGhgCiogICBgbmV0cG9sbF9zZW5kX3VkcGAgJmFtcDsgYHNlbmRfdWRwYAoqICAgYHJlc3VtZV90YXJnZXRgCiogICBgcHJvY2Vzc19yZXN1bWVfdGFyZ2V0YAoqICAgYGFsbG9jX2FuZF9pbml0YAoqICAgYG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlYAoqICAgYG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyYAoqICAgYGVuYWJsZWRfc3RvcmVgCiogICBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGAKKiAgIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYAoqICAgYGFsbG9jX3BhcmFtX3RhcmdldGAKKiAgIGBmcmVlX3BhcmFtX3RhcmdldGAKKiAgIGBfX25ldHBvbGxfc2V0dXBgCiogICBgbmV0cG9sbF9zZXR1cGAKKiAgIGBfX25ldHBvbGxfY2xlYW51cGAKCkFmdGVyIHNvbWUgZnVydGhlciByZWZpbmVtZW50LCBhbmQgdG8gYXZvaWQgaW5jbHVkaW5nIHRvbyBtYW55IGdlbmVyaWMgZnVuY3Rpb25zLCBJIHdpbGwgcGFyZSB0aGUgbGlzdCBkb3duIHRvIHRoZXNlIGtleSBmdW5jdGlvbnM6CgoqICAgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdGAKKiAgIGBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoYAoqICAgYHJlZmlsbF9za2JzYAoqICAgYG5ldGNvbnNfc2tiX3BvcGAKKiAgIGBmaW5kX3NrYmAKKiAgIGBuZXRwb2xsX3NlbmRfdWRwYAoqICAgYGVuYWJsZWRfc3RvcmVgCiogICBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGAKKiAgIGBhbGxvY19wYXJhbV90YXJnZXRgCiogICBgZnJlZV9wYXJhbV90YXJnZXRgCiogICBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAKKiAgIGBfX25ldHBvbGxfc2V0dXBgCiogICBgbmV0cG9sbF9zZXR1cGAKKiAgIGBfX25ldHBvbGxfY2xlYW51cGAKClRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIHdpbGwgYmUgYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGRlcGVuZGVuY2llcyBmb3IgZXhlcmNpc2luZyB0aGlzIGNvZGUuCgpUbyByZWNhcCwgdGhlIHBhdGNoIG1vdmVzIFNLQiBwb29sIG1hbmFnZW1lbnQgYW5kIHRhcmdldCBjb25maWd1cmF0aW9ucyBmcm9tIGBzdHJ1Y3QgbmV0cG9sbGAgdG8gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAsIG1vZGlmaWVzIGluaXRpYWxpemF0aW9uIGFuZCBmbHVzaGluZyBhbmQgdGhlIG5ldHBvbGwgc2V0dXAvY2xlYW51cCBwYXRocy4gVGh1cywgZnV6emluZyBzaG91bGQgY29uY2VudHJhdGUgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gY29uZmlndXJhdGlvbiwgcmVzb3VyY2UgbWFuYWdlbWVudCAoU0tCIHBvb2wpLCBhbmQgdGhlIHNlbmRpbmcgb2YgVURQIGRhdGFncmFtcy4gVGhlIHByaW1hcnkgdGFyZ2V0cyBhcmUgd2l0aGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGJ1dCBgbmV0L2NvcmUvbmV0cG9sbC5jYCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRjb25zb2xlX3NrYl9wb29sX2luaXQmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCYjMzQ7LAogICAgJiMzNDtyZWZpbGxfc2ticyYjMzQ7LAogICAgJiMzNDtuZXRjb25zX3NrYl9wb3AmIzM0OywKICAgICYjMzQ7ZmluZF9za2ImIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZW5kX3VkcCYjMzQ7LAogICAgJiMzNDtlbmFibGVkX3N0b3JlJiMzNDssCiAgICAmIzM0O2Ryb3BfbmV0Y29uc29sZV90YXJnZXQmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFyYW1fdGFyZ2V0JiMzNDssCiAgICAmIzM0O2ZyZWVfcGFyYW1fdGFyZ2V0JiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUmIzM0OywKICAgICYjMzQ7X19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7X19uZXRwb2xsX2NsZWFudXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIFNLQiBwb29sIGFuZCB0YXJnZXQgY29uZmlndXJhdGlvbiAocG9ydHMsIE1BQykgZnJvbSBgc3RydWN0IG5ldHBvbGxgIHRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLiBJdCBtb2RpZmllcyBob3cgbmV0Y29uc29sZSBpbml0aWFsaXplcyBhbmQgZmx1c2hlcyB0aGUgU0tCIHBvb2wsIGFuZCB1cGRhdGVzIHRoZSBuZXRwb2xsIHNldHVwL2NsZWFudXAgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbmV0Y29uc29sZSBkcml2ZXIgYW5kIG5ldHBvbGwgY29yZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgdmlhIGNvbmZpZ2ZzIG9yIG1vZHVsZSBwYXJhbWV0ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdCYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoJiMzNDssCiAgICAmIzM0O3JlZmlsbF9za2JzJiMzNDssCiAgICAmIzM0O25ldGNvbnNfc2tiX3BvcCYjMzQ7LAogICAgJiMzNDtmaW5kX3NrYiYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NlbmRfdWRwJiMzNDssCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7ZHJvcF9uZXRjb25zb2xlX3RhcmdldCYjMzQ7LAogICAgJiMzNDthbGxvY19wYXJhbV90YXJnZXQmIzM0OywKICAgICYjMzQ7ZnJlZV9wYXJhbV90YXJnZXQmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtfX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZXR1cCYjMzQ7LAogICAgJiMzNDtfX25ldHBvbGxfY2xlYW51cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgU0tCIHBvb2wgYW5kIHRhcmdldCBjb25maWd1cmF0aW9uIChwb3J0cywgTUFDKSBmcm9tIGBzdHJ1Y3QgbmV0cG9sbGAgdG8gYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAuIEl0IG1vZGlmaWVzIGhvdyBuZXRjb25zb2xlIGluaXRpYWxpemVzIGFuZCBmbHVzaGVzIHRoZSBTS0IgcG9vbCwgYW5kIHVwZGF0ZXMgdGhlIG5ldHBvbGwgc2V0dXAvY2xlYW51cCBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBuZXRjb25zb2xlIGRyaXZlciBhbmQgbmV0cG9sbCBjb3JlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCB2aWEgY29uZmlnZnMgb3IgbW9kdWxlIHBhcmFtZXRlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjowMDo1NS44MzUwNTAyMjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk1ODc2MDQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRjb25zb2xlX3NrYl9wb29sX2luaXRcIixcbiAgICBcIm5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hcIixcbiAgICBcInJlZmlsbF9za2JzXCIsXG4gICAgXCJuZXRjb25zX3NrYl9wb3BcIixcbiAgICBcImZpbmRfc2tiXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJkcm9wX25ldGNvbnNvbGVfdGFyZ2V0XCIsXG4gICAgXCJhbGxvY19wYXJhbV90YXJnZXRcIixcbiAgICBcImZyZWVfcGFyYW1fdGFyZ2V0XCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJfX25ldHBvbGxfc2V0dXBcIixcbiAgICBcIm5ldHBvbGxfc2V0dXBcIixcbiAgICBcIl9fbmV0cG9sbF9jbGVhbnVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIFNLQiBwb29sIGFuZCB0YXJnZXQgY29uZmlndXJhdGlvbiAocG9ydHMsIE1BQykgZnJvbSBgc3RydWN0IG5ldHBvbGxgIHRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLiBJdCBtb2RpZmllcyBob3cgbmV0Y29uc29sZSBpbml0aWFsaXplcyBhbmQgZmx1c2hlcyB0aGUgU0tCIHBvb2wsIGFuZCB1cGRhdGVzIHRoZSBuZXRwb2xsIHNldHVwL2NsZWFudXAgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbmV0Y29uc29sZSBkcml2ZXIgYW5kIG5ldHBvbGwgY29yZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgdmlhIGNvbmZpZ2ZzIG9yIG1vZHVsZSBwYXJhbWV0ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjowMDo1NS44MzUwNTQ0ODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MDg3MjY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdkNmJmODQwYmY3NDhiYjRlMmMxYmVjOTQyMGUwNjMyNjVkODRlMDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMiAxNjowMDo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG5pbmRleCBjMTgxMmE5ODM2NWI3OC4uZTM2YjA5OThjODEwOTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuQEAgLTYxLDYgKzYxLDE5IEBAIE1PRFVMRV9JTVBPUlRfTlMoXFxcIk5FVERFVl9JTlRFUk5BTFxcXCIpO1xcbiAjZGVmaW5lIE1BWF9VU0VSREFUQV9JVEVNU1xcdFxcdDI1NlxcbiAjZGVmaW5lIE1BWF9QUklOVF9DSFVOS1xcdFxcdFxcdDEwMDBcXG4gXFxuKy8qXFxuKyAqIFNpemluZyBmb3IgdGhlIHBlci10YXJnZXQgZmFsbGJhY2sgc2tiIHBvb2wgY29uc3VsdGVkIGJ5IGZpbmRfc2tiKClcXG4rICogd2hlbiBpdHMgR0ZQX0FUT01JQyBhbGxvY2F0aW9uIGZhaWxzIHNvIG1lc3NhZ2VzIHN0aWxsIGdldCBvdXQgdW5kZXJcXG4rICogbWVtb3J5IHByZXNzdXJlLlxcbisgKi9cXG4rI2RlZmluZSBNQVhfVURQX0NIVU5LXFx0XFx0XFx0MTQ2MFxcbisjZGVmaW5lIE1BWF9TS0JTXFx0XFx0XFx0MzJcXG4rI2RlZmluZSBNQVhfU0tCX1NJWkVcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdChzaXplb2Yoc3RydWN0IGV0aGhkcikgK1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0IHNpemVvZihzdHJ1Y3QgaXBoZHIpICtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgK1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0IE1BWF9VRFBfQ0hVTkspXFxuK1xcbiBzdGF0aWMgY2hhciBjb25maWdbTUFYX1BBUkFNX0xFTkdUSF07XFxuIG1vZHVsZV9wYXJhbV9zdHJpbmcobmV0Y29uc29sZSwgY29uZmlnLCBNQVhfUEFSQU1fTEVOR1RILCAwKTtcXG4gTU9EVUxFX1BBUk1fREVTQyhuZXRjb25zb2xlLCBcXFwiIG5ldGNvbnNvbGU9W3NyYy1wb3J0XUBbc3JjLWlwXS9bZGV2XSxbdGd0LXBvcnRdQFxcdTAwM2N0Z3QtaXBcXHUwMDNlL1t0Z3QtbWFjYWRkcl1cXFwiKTtcXG5AQCAtMTYyLDE0ICsxNzUsMTkgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xcbiAgKiBAbnA6XFx0XFx0VGhlIG5ldHBvbGwgc3RydWN0dXJlIGZvciB0aGlzIHRhcmdldC5cXG4gICpcXHRcXHRDb250YWlucyB0aGUgb3RoZXIgdXNlcnNwYWNlIHZpc2libGUgcGFyYW1ldGVyczpcXG4gICpcXHRcXHRkZXZfbmFtZVxcdChyZWFkLXdyaXRlKVxcbi0gKlxcdFxcdGxvY2FsX3BvcnRcXHQocmVhZC13cml0ZSlcXG4tICpcXHRcXHRyZW1vdGVfcG9ydFxcdChyZWFkLXdyaXRlKVxcbiAgKlxcdFxcdGxvY2FsX2lwXFx0KHJlYWQtd3JpdGUpXFxuICAqXFx0XFx0cmVtb3RlX2lwXFx0KHJlYWQtd3JpdGUpXFxuICAqXFx0XFx0bG9jYWxfbWFjXFx0KHJlYWQtb25seSlcXG4tICpcXHRcXHRyZW1vdGVfbWFjXFx0KHJlYWQtd3JpdGUpXFxuKyAqIEBsb2NhbF9wb3J0OlxcdFNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cXG4rICogQHJlbW90ZV9wb3J0OiBEZXN0aW5hdGlvbiBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cXG4rICogQHJlbW90ZV9tYWM6XFx0RGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cXG4gICogQGJ1ZjpcXHRUaGUgYnVmZmVyIHVzZWQgdG8gc2VuZCB0aGUgZnVsbCBtc2cgdG8gdGhlIG5ldHdvcmsgc3RhY2tcXG4gICogQHJlc3VtZV93cTpcXHRXb3JrcXVldWUgdG8gcmVzdW1lIGRlYWN0aXZhdGVkIHRhcmdldFxcbisgKiBAc2tiX3Bvb2w6XFx0UGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKSB3aGVuXFxuKyAqXFx0XFx0aXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscy4gTGlmZXRpbWUgYnJhY2tldHMgYVxcbisgKlxcdFxcdHN1Y2Nlc3NmdWwgbmV0cG9sbF9zZXR1cCgpIC8gbmV0cG9sbF9jbGVhbnVwKCkgcGFpciBvbiBAbnAuXFxuKyAqIEByZWZpbGxfd3E6XFx0V29yayBpdGVtIHRoYXQgYXN5bmNocm9ub3VzbHkgdG9wcyBAc2tiX3Bvb2wgYmFjayB1cCB0b1xcbisgKlxcdFxcdE1BWF9TS0JTIGFmdGVyIGZpbmRfc2tiKCkgZHJhaW5zIGFuIGVudHJ5LlxcbiAgKi9cXG4gc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuQEAgLTE5MCwxMSArMjA4LDE1IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XFxuIFxcdGJvb2xcXHRcXHRcXHRleHRlbmRlZDtcXG4gXFx0Ym9vbFxcdFxcdFxcdHJlbGVhc2U7XFxuIFxcdHN0cnVjdCBuZXRwb2xsXFx0XFx0bnA7XFxuK1xcdHUxNlxcdFxcdFxcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbitcXHR1OFxcdFxcdFxcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xcbiBcXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgKzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzXFxuIFxcdCAqIE5VTCB0ZXJtaW5hdG9yIHNvIGEgZnVsbCBNQVhfUFJJTlRfQ0hVTksgcGF5bG9hZCBpcyBub3QgdHJ1bmNhdGVkXFxuIFxcdCAqL1xcbiBcXHRjaGFyXFx0XFx0XFx0YnVmW01BWF9QUklOVF9DSFVOSyArIDFdO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRyZXN1bWVfd3E7XFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWRcXHRza2JfcG9vbDtcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0cmVmaWxsX3dxO1xcbiB9O1xcbiBcXG4gI2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbkBAIC0yOTIsMTEgKzMxNCw1OCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zX3JlbGVhc2VfZGV2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIFxcdFxcdG1lbXNldChcXHUwMDI2bnQtXFx1MDAzZW5wLmRldl9uYW1lLCAwLCBJRk5BTVNJWik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJlZmlsbF9za2JzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqc2tiX3Bvb2wgPSBcXHUwMDI2bnQtXFx1MDAzZXNrYl9wb29sO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXG4rXFx0d2hpbGUgKFJFQURfT05DRShza2JfcG9vbC1cXHUwMDNlcWxlbikgXFx1MDAzYyBNQVhfU0tCUykge1xcbitcXHRcXHRza2IgPSBhbGxvY19za2IoTUFYX1NLQl9TSVpFLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0c2tiX3F1ZXVlX3RhaWwoc2tiX3Bvb2wsIHNrYik7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCwgcmVmaWxsX3dxKTtcXG4rXFxuK1xcdHJlZmlsbF9za2JzKG50KTtcXG4rfVxcbitcXG4rLyogSW5pdGlhbGlzZSB0aGUgcGVyLXRhcmdldCBza2IgcG9vbCB0aGF0IGZpbmRfc2tiKCkgZmFsbHMgYmFjayB0byBhbmRcXG4rICogc2VlZCBpdC4gUGFpciB3aXRoIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBhdCB0aGUgbWF0Y2hpbmdcXG4rICogbmV0cG9sbCB0ZWFyZG93bi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbit7XFxuK1xcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNm50LVxcdTAwM2Vza2JfcG9vbCk7XFxuK1xcdElOSVRfV09SSyhcXHUwMDI2bnQtXFx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcXG4rXFx0cmVmaWxsX3NrYnMobnQpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuK3tcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bnQtXFx1MDAzZXJlZmlsbF93cSk7XFxuK1xcdHNrYl9xdWV1ZV9wdXJnZV9yZWFzb24oXFx1MDAyNm50LVxcdTAwM2Vza2JfcG9vbCwgU0tCX0NPTlNVTUVEKTtcXG4rfVxcbitcXG4gLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXFxuIHN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4ge1xcbitcXHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIG1ha2VzIG50LVxcdTAwM2VucC5kZXZcXG4rXFx0ICogdmlzaWJsZSB0byB0YXJnZXRfbGlzdCB3YWxrZXJzIChlLmcuIG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSxcXG4rXFx0ICogd2hpY2ggb3RoZXJ3aXNlIG1heSBtb3ZlIHRoZSB0YXJnZXQgdG8gdGhlIGNsZWFudXAgbGlzdCBhbmRcXG4rXFx0ICogY2FsbCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkgb24gdW5pbml0aWFsaXNlZCBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XFxuK1xcbiBcXHRpZiAobmV0cG9sbF9zZXR1cChcXHUwMDI2bnQtXFx1MDAzZW5wKSkge1xcbiBcXHRcXHQvKiBuZXRwb2xsIGZhaWxzIHNldHVwIG9uY2UsIGRvIG5vdCB0cnkgYWdhaW4uICovXFxuK1xcdFxcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xcbiBcXHRcXHRudC1cXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuQEAgLTM1OCw2ICs0MjcsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRydG5sX2xvY2soKTtcXG4gXFx0aWYgKG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEIFxcdTAwMjZcXHUwMDI2IG50LVxcdTAwM2VucC5kZXYgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIG50LVxcdTAwM2VucC5kZXYtXFx1MDAzZXJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkge1xcbitcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG4gXFx0XFx0bmV0Y29uc19yZWxlYXNlX2RldihudCk7XFxuIFxcdFxcdG50LVxcdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xcbiBcXHR9XFxuQEAgLTM5Myw5ICs0NjMsOSBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxcbiBcXG4gXFx0bnQtXFx1MDAzZW5wLm5hbWUgPSBcXFwibmV0Y29uc29sZVxcXCI7XFxuIFxcdHN0cnNjcHkobnQtXFx1MDAzZW5wLmRldl9uYW1lLCBcXFwiZXRoMFxcXCIsIElGTkFNU0laKTtcXG4tXFx0bnQtXFx1MDAzZW5wLmxvY2FsX3BvcnQgPSA2NjY1O1xcbi1cXHRudC1cXHUwMDNlbnAucmVtb3RlX3BvcnQgPSA2NjY2O1xcbi1cXHRldGhfYnJvYWRjYXN0X2FkZHIobnQtXFx1MDAzZW5wLnJlbW90ZV9tYWMpO1xcbitcXHRudC1cXHUwMDNlbG9jYWxfcG9ydCA9IDY2NjU7XFxuK1xcdG50LVxcdTAwM2VyZW1vdGVfcG9ydCA9IDY2NjY7XFxuK1xcdGV0aF9icm9hZGNhc3RfYWRkcihudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuIFxcdG50LVxcdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNm50LVxcdTAwM2VyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7XFxuIFxcbkBAIC00MTcsNiArNDg3LDcgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG50LCB0bXAsIFxcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0LCBsaXN0KSB7XFxuIFxcdFxcdC8qIGFsbCBlbnRyaWVzIGluIHRoZSBjbGVhbnVwX2xpc3QgbmVlZHMgdG8gYmUgZGlzYWJsZWQgKi9cXG4gXFx0XFx0V0FSTl9PTl9PTkNFKG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKTtcXG4rXFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XFxuIFxcdFxcdG5ldGNvbnNfcmVsZWFzZV9kZXYobnQpO1xcbiBcXHRcXHQvKiBtb3ZlZCB0aGUgY2xlYW5lZCB0YXJnZXQgdG8gdGFyZ2V0X2xpc3QuIE5lZWQgdG8gaG9sZCBib3RoXFxuIFxcdFxcdCAqIGxvY2tzXFxuQEAgLTQyOSwyMSArNTAwLDIzIEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKHZvaWQpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldHBvbGwgKm5wKVxcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiB7XFxuLVxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBwb3J0ICVkXFxcXG5cXFwiLCBucC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuK1xcdHN0cnVjdCBuZXRwb2xsICpucCA9IFxcdTAwMjZudC1cXHUwMDNlbnA7XFxuK1xcbitcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgcG9ydCAlZFxcXFxuXFxcIiwgbnQtXFx1MDAzZWxvY2FsX3BvcnQpO1xcbiBcXHRpZiAobnAtXFx1MDAzZWlwdjYpXFxuIFxcdFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcXFxcblxcXCIsIFxcdTAwMjZucC1cXHUwMDNlbG9jYWxfaXAuaW42KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcXFxcblxcXCIsIFxcdTAwMjZucC1cXHUwMDNlbG9jYWxfaXAuaXApO1xcbiBcXHRucF9pbmZvKG5wLCBcXFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcXFxuXFxcIiwgbnAtXFx1MDAzZWRldl9uYW1lKTtcXG4gXFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIGV0aGVybmV0IGFkZHJlc3MgJyVwTSdcXFxcblxcXCIsIG5wLVxcdTAwM2VkZXZfbWFjKTtcXG4tXFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBwb3J0ICVkXFxcXG5cXFwiLCBucC1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbitcXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIHBvcnQgJWRcXFxcblxcXCIsIG50LVxcdTAwM2VyZW1vdGVfcG9ydCk7XFxuIFxcdGlmIChucC1cXHUwMDNlaXB2NilcXG4gXFx0XFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcXFxcblxcXCIsIFxcdTAwMjZucC1cXHUwMDNlcmVtb3RlX2lwLmluNik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBJUHY0IGFkZHJlc3MgJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm5wLVxcdTAwM2VyZW1vdGVfaXAuaXApO1xcbi1cXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxcXG5cXFwiLCBucC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuK1xcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXFxcblxcXCIsIG50LVxcdTAwM2VyZW1vdGVfbWFjKTtcXG4gfVxcbiBcXG4gLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzXFxuQEAgLTU2MSwxMiArNjM0LDEyIEBAIHN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuIFxcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuIHtcXG4tXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIHRvX3RhcmdldChpdGVtKS1cXHUwMDNlbnAubG9jYWxfcG9ydCk7XFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVkXFxcXG5cXFwiLCB0b190YXJnZXQoaXRlbSktXFx1MDAzZWxvY2FsX3BvcnQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbiB7XFxuLVxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVkXFxcXG5cXFwiLCB0b190YXJnZXQoaXRlbSktXFx1MDAzZW5wLnJlbW90ZV9wb3J0KTtcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIHRvX3RhcmdldChpdGVtKS1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbkBAIC01OTksNyArNjcyLDcgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuIFxcbiBzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuIHtcXG4tXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBNXFxcXG5cXFwiLCB0b190YXJnZXQoaXRlbSktXFx1MDAzZW5wLnJlbW90ZV9tYWMpO1xcbitcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlcE1cXFxcblxcXCIsIHRvX3RhcmdldChpdGVtKS1cXHUwMDNlcmVtb3RlX21hYyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbkBAIC03NTYsMTEgKzgyOSwyMSBAQCBzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4gXFx0XFx0ICogU2tpcCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKCkgLS0gYWxsIHRoZSBhdHRyaWJ1dGVzIGFyZVxcbiBcXHRcXHQgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgdmlhIGNvbmZpZ2ZzLiBKdXN0IHByaW50IHRoZW0gb3V0LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0bmV0Y29uc29sZV9wcmludF9iYW5uZXIoXFx1MDAyNm50LVxcdTAwM2VucCk7XFxuK1xcdFxcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTtcXG4rXFxuK1xcdFxcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2xcXG4rXFx0XFx0ICogaXMgdmFsaWQgYXMgc29vbiBhcyBudC1cXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZSB0b1xcbitcXHRcXHQgKiB0YXJnZXRfbGlzdCB3YWxrZXJzIChuZXRjb25zb2xlX25ldGRldl9ldmVudCksIHdoaWNoIHdvdWxkXFxuK1xcdFxcdCAqIG90aGVyd2lzZSBjYWxsIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBvbiB1bmluaXRpYWxpc2VkXFxuK1xcdFxcdCAqIHN0YXRlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcXG4gXFxuIFxcdFxcdHJldCA9IG5ldHBvbGxfc2V0dXAoXFx1MDAyNm50LVxcdTAwM2VucCk7XFxuLVxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0bnQtXFx1MDAzZXN0YXRlID0gU1RBVEVfRU5BQkxFRDtcXG4gXFx0XFx0cHJfaW5mbyhcXFwibmV0d29yayBsb2dnaW5nIHN0YXJ0ZWRcXFxcblxcXCIpO1xcbkBAIC04ODUsNyArOTY4LDcgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXFx1MDAyNm50LVxcdTAwM2VucC5sb2NhbF9wb3J0KTtcXG4rXFx0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdHJldCA9IGNvdW50O1xcbkBAIC05MDcsNyArOTkwLDcgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IGtzdHJ0b3UxNihidWYsIDEwLCBcXHUwMDI2bnQtXFx1MDAzZW5wLnJlbW90ZV9wb3J0KTtcXG4rXFx0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHRyZXQgPSBjb3VudDtcXG5AQCAtOTk0LDcgKzEwNzcsNyBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdGlmIChidWZbTUFDX0FERFJfU1RSX0xFTl0gXFx1MDAyNlxcdTAwMjYgYnVmW01BQ19BRERSX1NUUl9MRU5dICE9ICdcXFxcbicpXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4tXFx0bWVtY3B5KG50LVxcdTAwM2VucC5yZW1vdGVfbWFjLCByZW1vdGVfbWFjLCBFVEhfQUxFTik7XFxuK1xcdG1lbWNweShudC1cXHUwMDNlcmVtb3RlX21hYywgcmVtb3RlX21hYywgRVRIX0FMRU4pO1xcbiBcXG4gXFx0cmV0ID0gY291bnQ7XFxuIG91dF91bmxvY2s6XFxuQEAgLTE1MTQsOCArMTU5NywxMCBAQCBzdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbiBcXHQgKiBuZXRwb2xsX2NsZWFudXAoKSBpcyBpZGVtcG90ZW50IChpdCBza2lwcyB3aGVuIG5wLVxcdTAwM2VkZXYgaXMgTlVMTCksIHNvXFxuIFxcdCAqIGl0IGlzIHNhZmUgZXZlbiBpZiB0aGUgY2xlYW51cCB3b3JrZXIgYWxyZWFkeSB0b3JlIHRoZSBuZXRwb2xsIGRvd24uXFxuIFxcdCAqL1xcbi1cXHRpZiAobmVlZHNfY2xlYW51cClcXG4rXFx0aWYgKG5lZWRzX2NsZWFudXApIHtcXG4rXFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XFxuIFxcdFxcdG5ldHBvbGxfY2xlYW51cChcXHUwMDI2bnQtXFx1MDAzZW5wKTtcXG4rXFx0fVxcbiBcXG4gXFx0Y29uZmlnX2l0ZW1fcHV0KFxcdTAwMjZudC1cXHUwMDNlZ3JvdXAuY2dfaXRlbSk7XFxuIH1cXG5AQCAtMTcwNiw3ICsxNzkxLDcgQEAgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBuZXRjb25zb2xlX25ldGRldl9ub3RpZmllciA9IHtcXG4gICogcG9vbCBsb2NrcyBhbmQgaXMgdGhlcmVmb3JlIG5vdCBOTUktc2FmZS4gU2tpcCB0aGUgcmVmaWxsIHdoZW4gY2FsbGVkXFxuICAqIGZyb20gTk1JIGNvbnRleHQ7IHRoZSBuZXh0IG5vbi1OTUkgY2FsbGVyIHdpbGwgdG9wIHRoZSBwb29sIGJhY2sgdXAuXFxuICAqL1xcbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXFxuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y29uc19za2JfcG9wKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4pXFxuIHtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFxuQEAgLTE3MTgsMTkgKzE4MDMsMjEgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuKVxcbiBcXHRcXHRpZiAoIWluX25taSgpKVxcbiBcXHRcXHRcXHRuZXRfd2Fybl9yYXRlbGltaXRlZChcXFwibmV0Y29uc29sZTogZHJvcHBpbmcgbWVzc2FnZSwgcmVxdWVzdGVkIHNrYiBsZW4gJWQgZXhjZWVkcyBwb29sIGJ1ZmZlciBzaXplICV6dSBvbiAlc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBsZW4sIChzaXplX3QpTUFYX1NLQl9TSVpFLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIG5wLVxcdTAwM2VkZXYtXFx1MDAzZW5hbWUpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgIG50LVxcdTAwM2VucC5kZXYtXFx1MDAzZW5hbWUpO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0c2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNm5wLVxcdTAwM2Vza2JfcG9vbCk7XFxuK1xcdHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZudC1cXHUwMDNlc2tiX3Bvb2wpO1xcbiBcXHRpZiAoIWluX25taSgpKVxcbi1cXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZucC1cXHUwMDNlcmVmaWxsX3dxKTtcXG4rXFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bnQtXFx1MDAzZXJlZmlsbF93cSk7XFxuIFxcbiBcXHRyZXR1cm4gc2tiO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgaW50IGxlbiwgaW50IHJlc2VydmUpXFxuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbixcXG4rXFx0XFx0XFx0XFx0aW50IHJlc2VydmUpXFxuIHtcXG4rXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4gXFx0aW50IGNvdW50ID0gMDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFxuQEAgLTE3MzksNyArMTgyNiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSlcXG4gXFxuIFxcdHNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xcbiBcXHRpZiAoIXNrYilcXG4tXFx0XFx0c2tiID0gbmV0Y29uc19za2JfcG9wKG5wLCBsZW4pO1xcbitcXHRcXHRza2IgPSBuZXRjb25zX3NrYl9wb3AobnQsIGxlbik7XFxuIFxcbiBcXHRpZiAoIXNrYikge1xcbiBcXHRcXHRpZiAoKytjb3VudCBcXHUwMDNjIDEwKSB7XFxuQEAgLTE3NzksOCArMTg2Niw5IEBAIHN0YXRpYyB2b2lkIG5ldHBvbGxfdWRwX2NoZWNrc3VtKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0dWRwaC1cXHUwMDNlY2hlY2sgPSBDU1VNX01BTkdMRURfMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxcbitzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxcbiB7XFxuK1xcdHN0cnVjdCBuZXRwb2xsICpucCA9IFxcdTAwMjZudC1cXHUwMDNlbnA7XFxuIFxcdHN0cnVjdCB1ZHBoZHIgKnVkcGg7XFxuIFxcdGludCB1ZHBfbGVuO1xcbiBcXG5AQCAtMTc5MCwyMSArMTg3OCwyMiBAQCBzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuIFxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIFxcbiBcXHR1ZHBoID0gdWRwX2hkcihza2IpO1xcbi1cXHR1ZHBoLVxcdTAwM2Vzb3VyY2UgPSBodG9ucyhucC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuLVxcdHVkcGgtXFx1MDAzZWRlc3QgPSBodG9ucyhucC1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbitcXHR1ZHBoLVxcdTAwM2Vzb3VyY2UgPSBodG9ucyhudC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuK1xcdHVkcGgtXFx1MDAzZWRlc3QgPSBodG9ucyhudC1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbiBcXHR1ZHBoLVxcdTAwM2VsZW4gPSBodG9ucyh1ZHBfbGVuKTtcXG4gXFxuIFxcdG5ldHBvbGxfdWRwX2NoZWNrc3VtKG5wLCBza2IsIGxlbik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbitcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbiBcXHRzdHJ1Y3QgZXRoaGRyICpldGg7XFxuIFxcbiBcXHRldGggPSBza2JfcHVzaChza2IsIEVUSF9ITEVOKTtcXG4gXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9zb3VyY2UsIG5wLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4tXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9kZXN0LCBucC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuK1xcdGV0aGVyX2FkZHJfY29weShldGgtXFx1MDAzZWhfZGVzdCwgbnQtXFx1MDAzZXJlbW90ZV9tYWMpO1xcbiBcXHRpZiAobnAtXFx1MDAzZWlwdjYpXFxuIFxcdFxcdGV0aC1cXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbiBcXHRlbHNlXFxuQEAgLTE4NjEsOCArMTk1MCwxMCBAQCBzdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxcbiBcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG4rc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcXG4rXFx0XFx0XFx0ICAgIGludCBsZW4pXFxuIHtcXG4rXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4gXFx0aW50IHRvdGFsX2xlbiwgaXBfbGVuLCB1ZHBfbGVuO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXG5AQCAtMTg3Nyw3ICsxOTY4LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxcbiBcXG4gXFx0dG90YWxfbGVuID0gaXBfbGVuICsgTExfUkVTRVJWRURfU1BBQ0UobnAtXFx1MDAzZWRldik7XFxuIFxcbi1cXHRza2IgPSBmaW5kX3NrYihucCwgdG90YWxfbGVuICsgbnAtXFx1MDAzZWRldi1cXHUwMDNlbmVlZGVkX3RhaWxyb29tLFxcbitcXHRza2IgPSBmaW5kX3NrYihudCwgdG90YWxfbGVuICsgbnAtXFx1MDAzZWRldi1cXHUwMDNlbmVlZGVkX3RhaWxyb29tLFxcbiBcXHRcXHQgICAgICAgdG90YWxfbGVuIC0gbGVuKTtcXG4gXFx0aWYgKCFza2IpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC0xODg1LDEyICsxOTc2LDEyIEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG4gXFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBtc2csIGxlbik7XFxuIFxcdHNrYl9wdXQoc2tiLCBsZW4pO1xcbiBcXG4tXFx0cHVzaF91ZHAobnAsIHNrYiwgbGVuKTtcXG4rXFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcXG4gXFx0aWYgKG5wLVxcdTAwM2VpcHY2KVxcbiBcXHRcXHRwdXNoX2lwdjYobnAsIHNrYiwgbGVuKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRwdXNoX2lwdjQobnAsIHNrYiwgbGVuKTtcXG4tXFx0cHVzaF9ldGgobnAsIHNrYik7XFxuK1xcdHB1c2hfZXRoKG50LCBza2IpO1xcbiBcXHRza2ItXFx1MDAzZWRldiA9IG5wLVxcdTAwM2VkZXY7XFxuIFxcbiBcXHRyZXR1cm4gKGludCluZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xcbkBAIC0xOTA4LDcgKzE5OTksNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuIHtcXG4tXFx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAoXFx1MDAyNm50LVxcdTAwM2VucCwgbXNnLCBsZW4pO1xcbitcXHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xcbiBcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpIHtcXG4gXFx0XFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XFxuQEAgLTIyMDMsOCArMjI5NCw5IEBAIF9fcmVsZWFzZXMoXFx1MDAyNnRhcmdldF9saXN0X2xvY2spXFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxcbitzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxcbiB7XFxuK1xcdHN0cnVjdCBuZXRwb2xsICpucCA9IFxcdTAwMjZudC1cXHUwMDNlbnA7XFxuIFxcdGJvb2wgaXB2ZXJzaW9uX3NldCA9IGZhbHNlO1xcbiBcXHRjaGFyICpjdXIgPSBvcHQ7XFxuIFxcdGNoYXIgKmRlbGltO1xcbkBAIC0yMjE1LDcgKzIzMDcsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXFxuIFxcdFxcdGlmICghZGVsaW0pXFxuIFxcdFxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbiBcXHRcXHQqZGVsaW0gPSAwO1xcbi1cXHRcXHRpZiAoa3N0cnRvdTE2KGN1ciwgMTAsIFxcdTAwMjZucC1cXHUwMDNlbG9jYWxfcG9ydCkpXFxuK1xcdFxcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9wb3J0KSlcXG4gXFx0XFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuIFxcdFxcdGN1ciA9IGRlbGltO1xcbiBcXHR9XFxuQEAgLTIyNjIsNyArMjM1NCw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcXG4gXFx0XFx0KmRlbGltID0gMDtcXG4gXFx0XFx0aWYgKCpjdXIgPT0gJyAnIHx8ICpjdXIgPT0gJ1xcXFx0JylcXG4gXFx0XFx0XFx0bnBfaW5mbyhucCwgXFxcIndhcm5pbmc6IHdoaXRlc3BhY2UgaXMgbm90IGFsbG93ZWRcXFxcblxcXCIpO1xcbi1cXHRcXHRpZiAoa3N0cnRvdTE2KGN1ciwgMTAsIFxcdTAwMjZucC1cXHUwMDNlcmVtb3RlX3BvcnQpKVxcbitcXHRcXHRpZiAoa3N0cnRvdTE2KGN1ciwgMTAsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX3BvcnQpKVxcbiBcXHRcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4gXFx0XFx0Y3VyID0gZGVsaW07XFxuIFxcdH1cXG5AQCAtMjI4NCwxMSArMjM3NiwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXFxuIFxcbiBcXHRpZiAoKmN1ciAhPSAwKSB7XFxuIFxcdFxcdC8qIE1BQyBhZGRyZXNzICovXFxuLVxcdFxcdGlmICghbWFjX3B0b24oY3VyLCBucC1cXHUwMDNlcmVtb3RlX21hYykpXFxuK1xcdFxcdGlmICghbWFjX3B0b24oY3VyLCBudC1cXHUwMDNlcmVtb3RlX21hYykpXFxuIFxcdFxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbiBcXHR9XFxuIFxcbi1cXHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihucCk7XFxuK1xcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMjMyNiwxNCArMjQxOCwyMiBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcXG4gXFx0fVxcbiBcXG4gXFx0LyogUGFyc2UgcGFyYW1ldGVycyBhbmQgc2V0dXAgbmV0cG9sbCAqL1xcbi1cXHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKFxcdTAwMjZudC1cXHUwMDNlbnAsIHRhcmdldF9jb25maWcpO1xcbitcXHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKG50LCB0YXJnZXRfY29uZmlnKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBmYWlsO1xcbiBcXG4rXFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbCBpc1xcbitcXHQgKiB2YWxpZCBhcyBzb29uIGFzIG50LVxcdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlLiBUaGUgdGFyZ2V0IGlzIG5vdFxcbitcXHQgKiB5ZXQgb24gdGFyZ2V0X2xpc3QsIHNvIGEgbmV0ZGV2IGV2ZW50IGNhbm5vdCByZWFjaCBpdCBoZXJlLCBidXRcXG4rXFx0ICogbWlycm9yIHRoZSBjb25maWdmcyBwYXRoIGZvciBzeW1tZXRyeS5cXG4rXFx0ICovXFxuK1xcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XFxuK1xcbiBcXHRlcnIgPSBuZXRwb2xsX3NldHVwKFxcdTAwMjZudC1cXHUwMDNlbnApO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdHByX2VycihcXFwiTm90IGVuYWJsaW5nIG5ldGNvbnNvbGUgZm9yICVzJWQuIE5ldHBvbGwgc2V0dXAgZmFpbGVkXFxcXG5cXFwiLFxcbiBcXHRcXHQgICAgICAgTkVUQ09OU09MRV9QQVJBTV9UQVJHRVRfUFJFRklYLCBjbWRsaW5lX2NvdW50KTtcXG4rXFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XFxuIFxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSlcXG4gXFx0XFx0XFx0Lyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCxcXG4gXFx0XFx0XFx0ICogb3RoZXJ3aXNlLCBrZWVwIHRoZSB0YXJnZXQgaW4gdGhlIGxpc3QsIGJ1dCBkaXNhYmxlZC5cXG5AQCAtMjM1NSw2ICsyNDU1LDggQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuIHN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIHtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bnQtXFx1MDAzZXJlc3VtZV93cSk7XFxuK1xcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRClcXG4rXFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XFxuIFxcdG5ldHBvbGxfY2xlYW51cChcXHUwMDI2bnQtXFx1MDAzZW5wKTtcXG4gI2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbiBcXHRrZnJlZShudC1cXHUwMDNldXNlcmRhdGEpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaCBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXFxuaW5kZXggODhmN2RhYTg1NjBlNTguLjc5MzE1NDYxYTdiMWUwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcXG5AQCAtMjEsMjAgKzIxLDYgQEAgdW5pb24gaW5ldF9hZGRyIHtcXG4gXFx0c3RydWN0IGluNl9hZGRyXFx0aW42O1xcbiB9O1xcbiBcXG4tLypcXG4tICogTWF4aW11bSBwYXlsb2FkIG5ldHBvbGwncyBwcmVhbGxvY2F0ZWQgc2tiIHBvb2wgY2FuIGNhcnJ5LiBLZWVwIHRoaXMgaW5cXG4tICogc3luYyB3aXRoIHRoZSBidWZmZXIgc2l6ZSB1c2VkIGJ5IHJlZmlsbF9za2JzKCkgaW4gbmV0L2NvcmUvbmV0cG9sbC5jO1xcbi0gKiBjYWxsZXJzIChlLmcuIG5ldGNvbnNvbGUpIHVzZSBpdCB0byBkZXRlY3QgcmVxdWVzdHMgdGhlIHBvb2wgY2FuIG5ldmVyXFxuLSAqIHNhdGlzZnkgYW5kIGF2b2lkIGRlcXVldWluZyBhIHBvb2xlZCBza2IgdGhhdCB3b3VsZCBsYXRlciB0cmlwXFxuLSAqIHNrYl9vdmVyX3BhbmljKCkgaW4gc2tiX3B1dCgpLlxcbi0gKi9cXG4tI2RlZmluZSBNQVhfVURQX0NIVU5LXFx0MTQ2MFxcbi0jZGVmaW5lIE1BWF9TS0JfU0laRVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0KHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArXFx0XFx0XFx0XFx0XFxcXFxcbi1cXHQgc2l6ZW9mKHN0cnVjdCBpcGhkcikgK1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArXFx0XFx0XFx0XFx0XFxcXFxcbi1cXHQgTUFYX1VEUF9DSFVOSylcXG4tXFxuIHN0cnVjdCBuZXRwb2xsIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuQEAgLTQ5LDEwICszNSw2IEBAIHN0cnVjdCBuZXRwb2xsIHtcXG4gXFxuIFxcdHVuaW9uIGluZXRfYWRkciBsb2NhbF9pcCwgcmVtb3RlX2lwO1xcbiBcXHRib29sIGlwdjY7XFxuLVxcdHUxNiBsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcXG4tXFx0dTggcmVtb3RlX21hY1tFVEhfQUxFTl07XFxuLVxcdHN0cnVjdCBza19idWZmX2hlYWQgc2tiX3Bvb2w7XFxuLVxcdHN0cnVjdCB3b3JrX3N0cnVjdCByZWZpbGxfd3E7XFxuIH07XFxuIFxcbiAjZGVmaW5lIG5wX2luZm8obnAsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jXFxuaW5kZXggODVhYTUxMzUwODgxMTcuLjEwYjYwNjMyNTFhNWJjIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL25ldHBvbGwuY1xcbisrKyBiL25ldC9jb3JlL25ldHBvbGwuY1xcbkBAIC0zNiwxMiArMzYsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL25hcGkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjb25maWcuaFxcdTAwM2VcXG4gXFxuLS8qXFxuLSAqIFdlIG1haW50YWluIGEgc21hbGwgcG9vbCBvZiBmdWxseS1zaXplZCBza2JzLCB0byBtYWtlIHN1cmUgdGhlXFxuLSAqIG1lc3NhZ2UgZ2V0cyBvdXQgZXZlbiBpbiBleHRyZW1lIE9PTSBzaXR1YXRpb25zLlxcbi0gKi9cXG4tXFxuLSNkZWZpbmUgTUFYX1NLQlMgMzJcXG4gI2RlZmluZSBVU0VDX1BFUl9QT0xMXFx0NTBcXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2Fycmllcl90aW1lb3V0ID0gNDtcXG5AQCAtMjEzLDIyICsyMDcsNiBAQCB2b2lkIG5ldHBvbGxfcG9sbF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0XFx0dXAoXFx1MDAyNm5pLVxcdTAwM2VkZXZfbG9jayk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJlZmlsbF9za2JzKHN0cnVjdCBuZXRwb2xsICpucClcXG4te1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbDtcXG4tXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tXFxuLVxcdHNrYl9wb29sID0gXFx1MDAyNm5wLVxcdTAwM2Vza2JfcG9vbDtcXG4tXFxuLVxcdHdoaWxlIChSRUFEX09OQ0Uoc2tiX3Bvb2wtXFx1MDAzZXFsZW4pIFxcdTAwM2MgTUFYX1NLQlMpIHtcXG4tXFx0XFx0c2tiID0gYWxsb2Nfc2tiKE1BWF9TS0JfU0laRSwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XFxuLVxcdFxcdGlmICghc2tiKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdHNrYl9xdWV1ZV90YWlsKHNrYl9wb29sLCBza2IpO1xcbi1cXHR9XFxuLX1cXG4tXFxuIHZvaWQgbmV0cG9sbF96YXBfY29tcGxldGlvbl9xdWV1ZSh2b2lkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuQEAgLTM1MSwzMiArMzI5LDEyIEBAIG5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XFxuIFxcbi1zdGF0aWMgdm9pZCBza2JfcG9vbF9mbHVzaChzdHJ1Y3QgbmV0cG9sbCAqbnApXFxuLXtcXG4tXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqc2tiX3Bvb2w7XFxuLVxcbi1cXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZucC1cXHUwMDNlcmVmaWxsX3dxKTtcXG4tXFx0c2tiX3Bvb2wgPSBcXHUwMDI2bnAtXFx1MDAzZXNrYl9wb29sO1xcbi1cXHRza2JfcXVldWVfcHVyZ2VfcmVhc29uKHNrYl9wb29sLCBTS0JfQ09OU1VNRUQpO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi17XFxuLVxcdHN0cnVjdCBuZXRwb2xsICpucCA9XFxuLVxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0cG9sbCwgcmVmaWxsX3dxKTtcXG4tXFxuLVxcdHJlZmlsbF9za2JzKG5wKTtcXG4tfVxcbi1cXG4gaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbztcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHM7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZucC1cXHUwMDNlc2tiX3Bvb2wpO1xcbi1cXHRJTklUX1dPUksoXFx1MDAyNm5wLVxcdTAwM2VyZWZpbGxfd3EsIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcik7XFxuLVxcbiBcXHRpZiAobmRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IElGRl9ESVNBQkxFX05FVFBPTEwpIHtcXG4gXFx0XFx0bnBfZXJyKG5wLCBcXFwiJXMgZG9lc24ndCBzdXBwb3J0IHBvbGxpbmcsIGFib3J0aW5nXFxcXG5cXFwiLFxcbiBcXHRcXHQgICAgICAgbmRldi1cXHUwMDNlbmFtZSk7XFxuQEAgLTQxMSw5ICszNjksNiBAQCBpbnQgX19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdG5wLVxcdTAwM2VkZXYgPSBuZGV2O1xcbiBcXHRzdHJzY3B5KG5wLVxcdTAwM2VkZXZfbmFtZSwgbmRldi1cXHUwMDNlbmFtZSwgSUZOQU1TSVopO1xcbiBcXG4tXFx0LyogZmlsbCB1cCB0aGUgc2tiIHF1ZXVlICovXFxuLVxcdHJlZmlsbF9za2JzKG5wKTtcXG4tXFxuIFxcdC8qIGxhc3QgdGhpbmcgdG8gZG8gaXMgbGluayBpdCB0byB0aGUgbmV0IGRldmljZSBzdHJ1Y3R1cmUgKi9cXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKG5kZXYtXFx1MDAzZW5waW5mbywgbnBpbmZvKTtcXG4gXFxuQEAgLTYwMyw3ICs1NTgsNyBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXFxuIFxcbiBcXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpO1xcbiBcXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIGZsdXNoO1xcbitcXHRcXHRnb3RvIHB1dDtcXG4gXFx0cnRubF91bmxvY2soKTtcXG4gXFxuIFxcdC8qIE1ha2Ugc3VyZSBhbGwgTkFQSSBwb2xscyB3aGljaCBzdGFydGVkIGJlZm9yZSBkZXYtXFx1MDAzZW5waW5mb1xcbkBAIC02MTQsOCArNTY5LDYgQEAgaW50IG5ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wKVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1mbHVzaDpcXG4tXFx0c2tiX3Bvb2xfZmx1c2gobnApO1xcbiBwdXQ6XFxuIFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobnAtXFx1MDAzZWRldik7XFxuIFxcdGlmIChpcF9vdmVyd3JpdHRlbilcXG5AQCAtNjY2LDggKzYxOSw2IEBAIHN0YXRpYyB2b2lkIF9fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRwb2xsICpucClcXG4gXFx0XFx0UkNVX0lOSVRfUE9JTlRFUihucC1cXHUwMDNlZGV2LVxcdTAwM2VucGluZm8sIE5VTEwpO1xcbiBcXHRcXHRjYWxsX3JjdShcXHUwMDI2bnBpbmZvLVxcdTAwM2VyY3UsIHJjdV9jbGVhbnVwX25ldHBvbGxfaW5mbyk7XFxuIFxcdH1cXG4tXFxuLVxcdHNrYl9wb29sX2ZsdXNoKG5wKTtcXG4gfVxcbiBcXG4gdm9pZCBfX25ldHBvbGxfZnJlZShzdHJ1Y3QgbmV0cG9sbCAqbnApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjAwOjU2LjIyNjYwMDI3OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg1NjcxOTg5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0Y29uc29sZV9za2JfcG9vbF9pbml0XCIsXG4gICAgXCJuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoXCIsXG4gICAgXCJyZWZpbGxfc2tic1wiLFxuICAgIFwibmV0Y29uc19za2JfcG9wXCIsXG4gICAgXCJmaW5kX3NrYlwiLFxuICAgIFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwiZHJvcF9uZXRjb25zb2xlX3RhcmdldFwiLFxuICAgIFwiYWxsb2NfcGFyYW1fdGFyZ2V0XCIsXG4gICAgXCJmcmVlX3BhcmFtX3RhcmdldFwiLFxuICAgIFwibmV0Y29uc29sZV9wYXJzZXJfY21kbGluZVwiLFxuICAgIFwiX19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRwb2xsX3NldHVwXCIsXG4gICAgXCJfX25ldHBvbGxfY2xlYW51cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBTS0IgcG9vbCBhbmQgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gKHBvcnRzLCBNQUMpIGZyb20gYHN0cnVjdCBuZXRwb2xsYCB0byBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YC4gSXQgbW9kaWZpZXMgaG93IG5ldGNvbnNvbGUgaW5pdGlhbGl6ZXMgYW5kIGZsdXNoZXMgdGhlIFNLQiBwb29sLCBhbmQgdXBkYXRlcyB0aGUgbmV0cG9sbCBzZXR1cC9jbGVhbnVwIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGFuZCBuZXRwb2xsIGNvcmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZDZiZjg0MGJmNzQ4YmI0ZTJjMWJlYzk0MjBlMDYzMjY1ZDg0ZTA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxNjowMDo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuaW5kZXggYzE4MTJhOTgzNjViNzguLmUzNmIwOTk4YzgxMDk2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbkBAIC02MSw2ICs2MSwxOSBAQCBNT0RVTEVfSU1QT1JUX05TKFwiTkVUREVWX0lOVEVSTkFMXCIpO1xuICNkZWZpbmUgTUFYX1VTRVJEQVRBX0lURU1TXHRcdDI1NlxuICNkZWZpbmUgTUFYX1BSSU5UX0NIVU5LXHRcdFx0MTAwMFxuIFxuKy8qXG4rICogU2l6aW5nIGZvciB0aGUgcGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKVxuKyAqIHdoZW4gaXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscyBzbyBtZXNzYWdlcyBzdGlsbCBnZXQgb3V0IHVuZGVyXG4rICogbWVtb3J5IHByZXNzdXJlLlxuKyAqL1xuKyNkZWZpbmUgTUFYX1VEUF9DSFVOS1x0XHRcdDE0NjBcbisjZGVmaW5lIE1BWF9TS0JTXHRcdFx0MzJcbisjZGVmaW5lIE1BWF9TS0JfU0laRVx0XHRcdFx0XHRcdFx0XFxcbitcdChzaXplb2Yoc3RydWN0IGV0aGhkcikgK1x0XHRcdFx0XHRcXFxuK1x0IHNpemVvZihzdHJ1Y3QgaXBoZHIpICtcdFx0XHRcdFx0XHRcXFxuK1x0IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArXHRcdFx0XHRcdFxcXG4rXHQgTUFYX1VEUF9DSFVOSylcbitcbiBzdGF0aWMgY2hhciBjb25maWdbTUFYX1BBUkFNX0xFTkdUSF07XG4gbW9kdWxlX3BhcmFtX3N0cmluZyhuZXRjb25zb2xlLCBjb25maWcsIE1BWF9QQVJBTV9MRU5HVEgsIDApO1xuIE1PRFVMRV9QQVJNX0RFU0MobmV0Y29uc29sZSwgXCIgbmV0Y29uc29sZT1bc3JjLXBvcnRdQFtzcmMtaXBdL1tkZXZdLFt0Z3QtcG9ydF1AXHUwMDNjdGd0LWlwXHUwMDNlL1t0Z3QtbWFjYWRkcl1cIik7XG5AQCAtMTYyLDE0ICsxNzUsMTkgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xuICAqIEBucDpcdFx0VGhlIG5ldHBvbGwgc3RydWN0dXJlIGZvciB0aGlzIHRhcmdldC5cbiAgKlx0XHRDb250YWlucyB0aGUgb3RoZXIgdXNlcnNwYWNlIHZpc2libGUgcGFyYW1ldGVyczpcbiAgKlx0XHRkZXZfbmFtZVx0KHJlYWQtd3JpdGUpXG4tICpcdFx0bG9jYWxfcG9ydFx0KHJlYWQtd3JpdGUpXG4tICpcdFx0cmVtb3RlX3BvcnRcdChyZWFkLXdyaXRlKVxuICAqXHRcdGxvY2FsX2lwXHQocmVhZC13cml0ZSlcbiAgKlx0XHRyZW1vdGVfaXBcdChyZWFkLXdyaXRlKVxuICAqXHRcdGxvY2FsX21hY1x0KHJlYWQtb25seSlcbi0gKlx0XHRyZW1vdGVfbWFjXHQocmVhZC13cml0ZSlcbisgKiBAbG9jYWxfcG9ydDpcdFNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbisgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuKyAqIEByZW1vdGVfbWFjOlx0RGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAYnVmOlx0VGhlIGJ1ZmZlciB1c2VkIHRvIHNlbmQgdGhlIGZ1bGwgbXNnIHRvIHRoZSBuZXR3b3JrIHN0YWNrXG4gICogQHJlc3VtZV93cTpcdFdvcmtxdWV1ZSB0byByZXN1bWUgZGVhY3RpdmF0ZWQgdGFyZ2V0XG4rICogQHNrYl9wb29sOlx0UGVyLXRhcmdldCBmYWxsYmFjayBza2IgcG9vbCBjb25zdWx0ZWQgYnkgZmluZF9za2IoKSB3aGVuXG4rICpcdFx0aXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscy4gTGlmZXRpbWUgYnJhY2tldHMgYVxuKyAqXHRcdHN1Y2Nlc3NmdWwgbmV0cG9sbF9zZXR1cCgpIC8gbmV0cG9sbF9jbGVhbnVwKCkgcGFpciBvbiBAbnAuXG4rICogQHJlZmlsbF93cTpcdFdvcmsgaXRlbSB0aGF0IGFzeW5jaHJvbm91c2x5IHRvcHMgQHNrYl9wb29sIGJhY2sgdXAgdG9cbisgKlx0XHRNQVhfU0tCUyBhZnRlciBmaW5kX3NrYigpIGRyYWlucyBhbiBlbnRyeS5cbiAgKi9cbiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbkBAIC0xOTAsMTEgKzIwOCwxNSBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuIFx0Ym9vbFx0XHRcdGV4dGVuZGVkO1xuIFx0Ym9vbFx0XHRcdHJlbGVhc2U7XG4gXHRzdHJ1Y3QgbmV0cG9sbFx0XHRucDtcbitcdHUxNlx0XHRcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xuK1x0dThcdFx0XHRyZW1vdGVfbWFjW0VUSF9BTEVOXTtcbiBcdC8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyArMSBnaXZlcyBzY25wcmludGYoKSByb29tIGZvciBpdHNcbiBcdCAqIE5VTCB0ZXJtaW5hdG9yIHNvIGEgZnVsbCBNQVhfUFJJTlRfQ0hVTksgcGF5bG9hZCBpcyBub3QgdHJ1bmNhdGVkXG4gXHQgKi9cbiBcdGNoYXJcdFx0XHRidWZbTUFYX1BSSU5UX0NIVU5LICsgMV07XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHJlc3VtZV93cTtcbitcdHN0cnVjdCBza19idWZmX2hlYWRcdHNrYl9wb29sO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0XHRyZWZpbGxfd3E7XG4gfTtcbiBcbiAjaWZkZWZcdENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbkBAIC0yOTIsMTEgKzMxNCw1OCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zX3JlbGVhc2VfZGV2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdG1lbXNldChcdTAwMjZudC1cdTAwM2VucC5kZXZfbmFtZSwgMCwgSUZOQU1TSVopO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByZWZpbGxfc2ticyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuK3tcbitcdHN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sID0gXHUwMDI2bnQtXHUwMDNlc2tiX3Bvb2w7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1xuK1x0d2hpbGUgKFJFQURfT05DRShza2JfcG9vbC1cdTAwM2VxbGVuKSBcdTAwM2MgTUFYX1NLQlMpIHtcbitcdFx0c2tiID0gYWxsb2Nfc2tiKE1BWF9TS0JfU0laRSwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4rXHRcdGlmICghc2tiKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRza2JfcXVldWVfdGFpbChza2JfcG9vbCwgc2tiKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCwgcmVmaWxsX3dxKTtcbitcbitcdHJlZmlsbF9za2JzKG50KTtcbit9XG4rXG4rLyogSW5pdGlhbGlzZSB0aGUgcGVyLXRhcmdldCBza2IgcG9vbCB0aGF0IGZpbmRfc2tiKCkgZmFsbHMgYmFjayB0byBhbmRcbisgKiBzZWVkIGl0LiBQYWlyIHdpdGggbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIGF0IHRoZSBtYXRjaGluZ1xuKyAqIG5ldHBvbGwgdGVhcmRvd24uXG4rICovXG4rc3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4rXHRJTklUX1dPUksoXHUwMDI2bnQtXHUwMDNlcmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpO1xuK1x0cmVmaWxsX3NrYnMobnQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4re1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZudC1cdTAwM2VyZWZpbGxfd3EpO1xuK1x0c2tiX3F1ZXVlX3B1cmdlX3JlYXNvbihcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCwgU0tCX0NPTlNVTUVEKTtcbit9XG4rXG4gLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXG4gc3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbitcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgbWFrZXMgbnQtXHUwMDNlbnAuZGV2XG4rXHQgKiB2aXNpYmxlIHRvIHRhcmdldF9saXN0IHdhbGtlcnMgKGUuZy4gbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQpLFxuK1x0ICogd2hpY2ggb3RoZXJ3aXNlIG1heSBtb3ZlIHRoZSB0YXJnZXQgdG8gdGhlIGNsZWFudXAgbGlzdCBhbmRcbitcdCAqIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWQgc3RhdGUuXG4rXHQgKi9cbitcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XG4rXG4gXHRpZiAobmV0cG9sbF9zZXR1cChcdTAwMjZudC1cdTAwM2VucCkpIHtcbiBcdFx0LyogbmV0cG9sbCBmYWlscyBzZXR1cCBvbmNlLCBkbyBub3QgdHJ5IGFnYWluLiAqL1xuK1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTM1OCw2ICs0MjcsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cnRubF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCBcdTAwMjZcdTAwMjYgbnQtXHUwMDNlbnAuZGV2IFx1MDAyNlx1MDAyNlxuIFx0ICAgIG50LVx1MDAzZW5wLmRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpIHtcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG5ldGNvbnNfcmVsZWFzZV9kZXYobnQpO1xuIFx0XHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xuIFx0fVxuQEAgLTM5Myw5ICs0NjMsOSBAQCBzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxuIFxuIFx0bnQtXHUwMDNlbnAubmFtZSA9IFwibmV0Y29uc29sZVwiO1xuIFx0c3Ryc2NweShudC1cdTAwM2VucC5kZXZfbmFtZSwgXCJldGgwXCIsIElGTkFNU0laKTtcbi1cdG50LVx1MDAzZW5wLmxvY2FsX3BvcnQgPSA2NjY1O1xuLVx0bnQtXHUwMDNlbnAucmVtb3RlX3BvcnQgPSA2NjY2O1xuLVx0ZXRoX2Jyb2FkY2FzdF9hZGRyKG50LVx1MDAzZW5wLnJlbW90ZV9tYWMpO1xuK1x0bnQtXHUwMDNlbG9jYWxfcG9ydCA9IDY2NjU7XG4rXHRudC1cdTAwM2VyZW1vdGVfcG9ydCA9IDY2NjY7XG4rXHRldGhfYnJvYWRjYXN0X2FkZHIobnQtXHUwMDNlcmVtb3RlX21hYyk7XG4gXHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RJU0FCTEVEO1xuIFx0SU5JVF9XT1JLKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSwgcHJvY2Vzc19yZXN1bWVfdGFyZ2V0KTtcbiBcbkBAIC00MTcsNiArNDg3LDcgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShudCwgdG1wLCBcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0LCBsaXN0KSB7XG4gXHRcdC8qIGFsbCBlbnRyaWVzIGluIHRoZSBjbGVhbnVwX2xpc3QgbmVlZHMgdG8gYmUgZGlzYWJsZWQgKi9cbiBcdFx0V0FSTl9PTl9PTkNFKG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpO1xuK1x0XHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcbiBcdFx0bmV0Y29uc19yZWxlYXNlX2RldihudCk7XG4gXHRcdC8qIG1vdmVkIHRoZSBjbGVhbmVkIHRhcmdldCB0byB0YXJnZXRfbGlzdC4gTmVlZCB0byBob2xkIGJvdGhcbiBcdFx0ICogbG9ja3NcbkBAIC00MjksMjEgKzUwMCwyMyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHNfY29yZSh2b2lkKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRwb2xsICpucClcbitzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbi1cdG5wX2luZm8obnAsIFwibG9jYWwgcG9ydCAlZFxcblwiLCBucC1cdTAwM2Vsb2NhbF9wb3J0KTtcbitcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuK1xuK1x0bnBfaW5mbyhucCwgXCJsb2NhbCBwb3J0ICVkXFxuXCIsIG50LVx1MDAzZWxvY2FsX3BvcnQpO1xuIFx0aWYgKG5wLVx1MDAzZWlwdjYpXG4gXHRcdG5wX2luZm8obnAsIFwibG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXFxuXCIsIFx1MDAyNm5wLVx1MDAzZWxvY2FsX2lwLmluNik7XG4gXHRlbHNlXG4gXHRcdG5wX2luZm8obnAsIFwibG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcXG5cIiwgXHUwMDI2bnAtXHUwMDNlbG9jYWxfaXAuaXApO1xuIFx0bnBfaW5mbyhucCwgXCJpbnRlcmZhY2UgbmFtZSAnJXMnXFxuXCIsIG5wLVx1MDAzZWRldl9uYW1lKTtcbiBcdG5wX2luZm8obnAsIFwibG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAnJXBNJ1xcblwiLCBucC1cdTAwM2VkZXZfbWFjKTtcbi1cdG5wX2luZm8obnAsIFwicmVtb3RlIHBvcnQgJWRcXG5cIiwgbnAtXHUwMDNlcmVtb3RlX3BvcnQpO1xuK1x0bnBfaW5mbyhucCwgXCJyZW1vdGUgcG9ydCAlZFxcblwiLCBudC1cdTAwM2VyZW1vdGVfcG9ydCk7XG4gXHRpZiAobnAtXHUwMDNlaXB2NilcbiBcdFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgSVB2NiBhZGRyZXNzICVwSTZjXFxuXCIsIFx1MDAyNm5wLVx1MDAzZXJlbW90ZV9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcInJlbW90ZSBJUHY0IGFkZHJlc3MgJXBJNFxcblwiLCBcdTAwMjZucC1cdTAwM2VyZW1vdGVfaXAuaXApO1xuLVx0bnBfaW5mbyhucCwgXCJyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXG5cIiwgbnAtXHUwMDNlcmVtb3RlX21hYyk7XG4rXHRucF9pbmZvKG5wLCBcInJlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxcblwiLCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiB9XG4gXG4gLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzXG5AQCAtNTYxLDEyICs2MzQsMTIgQEAgc3RhdGljIHNzaXplX3QgZGV2X25hbWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiBcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuLVx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVkXFxuXCIsIHRvX3RhcmdldChpdGVtKS1cdTAwM2VucC5sb2NhbF9wb3J0KTtcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlZFxcblwiLCB0b190YXJnZXQoaXRlbSktXHUwMDNlbG9jYWxfcG9ydCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuLVx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVkXFxuXCIsIHRvX3RhcmdldChpdGVtKS1cdTAwM2VucC5yZW1vdGVfcG9ydCk7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJWRcXG5cIiwgdG9fdGFyZ2V0KGl0ZW0pLVx1MDAzZXJlbW90ZV9wb3J0KTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbkBAIC01OTksNyArNjcyLDcgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbi1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcE1cXG5cIiwgdG9fdGFyZ2V0KGl0ZW0pLVx1MDAzZW5wLnJlbW90ZV9tYWMpO1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwTVxcblwiLCB0b190YXJnZXQoaXRlbSktXHUwMDNlcmVtb3RlX21hYyk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuQEAgLTc1NiwxMSArODI5LDIxIEBAIHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIFx0XHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXG4gXHRcdCAqIGFscmVhZHkgY29uZmlndXJlZCB2aWEgY29uZmlnZnMuIEp1c3QgcHJpbnQgdGhlbSBvdXQuXG4gXHRcdCAqL1xuLVx0XHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihcdTAwMjZudC1cdTAwM2VucCk7XG4rXHRcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTtcbitcbitcdFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbFxuK1x0XHQgKiBpcyB2YWxpZCBhcyBzb29uIGFzIG50LVx1MDAzZW5wLmRldiBiZWNvbWVzIHZpc2libGUgdG9cbitcdFx0ICogdGFyZ2V0X2xpc3Qgd2Fsa2VycyAobmV0Y29uc29sZV9uZXRkZXZfZXZlbnQpLCB3aGljaCB3b3VsZFxuK1x0XHQgKiBvdGhlcndpc2UgY2FsbCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKCkgb24gdW5pbml0aWFsaXNlZFxuK1x0XHQgKiBzdGF0ZS5cbitcdFx0ICovXG4rXHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChudCk7XG4gXG4gXHRcdHJldCA9IG5ldHBvbGxfc2V0dXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuLVx0XHRpZiAocmV0KVxuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0XHR9XG4gXG4gXHRcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRU5BQkxFRDtcbiBcdFx0cHJfaW5mbyhcIm5ldHdvcmsgbG9nZ2luZyBzdGFydGVkXFxuXCIpO1xuQEAgLTg4NSw3ICs5NjgsNyBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXHUwMDI2bnQtXHUwMDNlbnAubG9jYWxfcG9ydCk7XG4rXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHRyZXQgPSBjb3VudDtcbkBAIC05MDcsNyArOTkwLDcgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXHUwMDI2bnQtXHUwMDNlbnAucmVtb3RlX3BvcnQpO1xuK1x0cmV0ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdHJldCA9IGNvdW50O1xuQEAgLTk5NCw3ICsxMDc3LDcgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX21hY19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0aWYgKGJ1ZltNQUNfQUREUl9TVFJfTEVOXSBcdTAwMjZcdTAwMjYgYnVmW01BQ19BRERSX1NUUl9MRU5dICE9ICdcXG4nKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRtZW1jcHkobnQtXHUwMDNlbnAucmVtb3RlX21hYywgcmVtb3RlX21hYywgRVRIX0FMRU4pO1xuK1x0bWVtY3B5KG50LVx1MDAzZXJlbW90ZV9tYWMsIHJlbW90ZV9tYWMsIEVUSF9BTEVOKTtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMTUxNCw4ICsxNTk3LDEwIEBAIHN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXG4gXHQgKiBuZXRwb2xsX2NsZWFudXAoKSBpcyBpZGVtcG90ZW50IChpdCBza2lwcyB3aGVuIG5wLVx1MDAzZWRldiBpcyBOVUxMKSwgc29cbiBcdCAqIGl0IGlzIHNhZmUgZXZlbiBpZiB0aGUgY2xlYW51cCB3b3JrZXIgYWxyZWFkeSB0b3JlIHRoZSBuZXRwb2xsIGRvd24uXG4gXHQgKi9cbi1cdGlmIChuZWVkc19jbGVhbnVwKVxuK1x0aWYgKG5lZWRzX2NsZWFudXApIHtcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdG5ldHBvbGxfY2xlYW51cChcdTAwMjZudC1cdTAwM2VucCk7XG4rXHR9XG4gXG4gXHRjb25maWdfaXRlbV9wdXQoXHUwMDI2bnQtXHUwMDNlZ3JvdXAuY2dfaXRlbSk7XG4gfVxuQEAgLTE3MDYsNyArMTc5MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XG4gICogcG9vbCBsb2NrcyBhbmQgaXMgdGhlcmVmb3JlIG5vdCBOTUktc2FmZS4gU2tpcCB0aGUgcmVmaWxsIHdoZW4gY2FsbGVkXG4gICogZnJvbSBOTUkgY29udGV4dDsgdGhlIG5leHQgbm9uLU5NSSBjYWxsZXIgd2lsbCB0b3AgdGhlIHBvb2wgYmFjayB1cC5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNvbnNfc2tiX3BvcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4pXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbilcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuQEAgLTE3MTgsMTkgKzE4MDMsMjEgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuKVxuIFx0XHRpZiAoIWluX25taSgpKVxuIFx0XHRcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFwibmV0Y29uc29sZTogZHJvcHBpbmcgbWVzc2FnZSwgcmVxdWVzdGVkIHNrYiBsZW4gJWQgZXhjZWVkcyBwb29sIGJ1ZmZlciBzaXplICV6dSBvbiAlc1xcblwiLFxuIFx0XHRcdFx0XHQgICAgIGxlbiwgKHNpemVfdClNQVhfU0tCX1NJWkUsXG4tXHRcdFx0XHRcdCAgICAgbnAtXHUwMDNlZGV2LVx1MDAzZW5hbWUpO1xuK1x0XHRcdFx0XHQgICAgIG50LVx1MDAzZW5wLmRldi1cdTAwM2VuYW1lKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZucC1cdTAwM2Vza2JfcG9vbCk7XG4rXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4gXHRpZiAoIWluX25taSgpKVxuLVx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNm5wLVx1MDAzZXJlZmlsbF93cSk7XG4rXHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bnQtXHUwMDNlcmVmaWxsX3dxKTtcbiBcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSlcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4sXG4rXHRcdFx0XHRpbnQgcmVzZXJ2ZSlcbiB7XG4rXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGludCBjb3VudCA9IDA7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuQEAgLTE3MzksNyArMTgyNiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSlcbiBcbiBcdHNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xuIFx0aWYgKCFza2IpXG4tXHRcdHNrYiA9IG5ldGNvbnNfc2tiX3BvcChucCwgbGVuKTtcbitcdFx0c2tiID0gbmV0Y29uc19za2JfcG9wKG50LCBsZW4pO1xuIFxuIFx0aWYgKCFza2IpIHtcbiBcdFx0aWYgKCsrY291bnQgXHUwMDNjIDEwKSB7XG5AQCAtMTc3OSw4ICsxODY2LDkgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbitzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuIHtcbitcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFx0c3RydWN0IHVkcGhkciAqdWRwaDtcbiBcdGludCB1ZHBfbGVuO1xuIFxuQEAgLTE3OTAsMjEgKzE4NzgsMjIgQEAgc3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuIFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiBcbiBcdHVkcGggPSB1ZHBfaGRyKHNrYik7XG4tXHR1ZHBoLVx1MDAzZXNvdXJjZSA9IGh0b25zKG5wLVx1MDAzZWxvY2FsX3BvcnQpO1xuLVx0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMobnAtXHUwMDNlcmVtb3RlX3BvcnQpO1xuK1x0dWRwaC1cdTAwM2Vzb3VyY2UgPSBodG9ucyhudC1cdTAwM2Vsb2NhbF9wb3J0KTtcbitcdHVkcGgtXHUwMDNlZGVzdCA9IGh0b25zKG50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbiBcdHVkcGgtXHUwMDNlbGVuID0gaHRvbnModWRwX2xlbik7XG4gXG4gXHRuZXRwb2xsX3VkcF9jaGVja3N1bShucCwgc2tiLCBsZW4pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4rXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdHN0cnVjdCBldGhoZHIgKmV0aDtcbiBcbiBcdGV0aCA9IHNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pO1xuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9zb3VyY2UsIG5wLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4tXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfZGVzdCwgbnAtXHUwMDNlcmVtb3RlX21hYyk7XG4rXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfZGVzdCwgbnQtXHUwMDNlcmVtb3RlX21hYyk7XG4gXHRpZiAobnAtXHUwMDNlaXB2NilcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdGVsc2VcbkBAIC0xODYxLDggKzE5NTAsMTAgQEAgc3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4rc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbitcdFx0XHQgICAgaW50IGxlbilcbiB7XG4rXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcdGludCB0b3RhbF9sZW4sIGlwX2xlbiwgdWRwX2xlbjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG5AQCAtMTg3Nyw3ICsxOTY4LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIFxuIFx0dG90YWxfbGVuID0gaXBfbGVuICsgTExfUkVTRVJWRURfU1BBQ0UobnAtXHUwMDNlZGV2KTtcbiBcbi1cdHNrYiA9IGZpbmRfc2tiKG5wLCB0b3RhbF9sZW4gKyBucC1cdTAwM2VkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tLFxuK1x0c2tiID0gZmluZF9za2IobnQsIHRvdGFsX2xlbiArIG5wLVx1MDAzZWRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb20sXG4gXHRcdCAgICAgICB0b3RhbF9sZW4gLSBsZW4pO1xuIFx0aWYgKCFza2IpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTE4ODUsMTIgKzE5NzYsMTIgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBtc2csIGxlbik7XG4gXHRza2JfcHV0KHNrYiwgbGVuKTtcbiBcbi1cdHB1c2hfdWRwKG5wLCBza2IsIGxlbik7XG4rXHRwdXNoX3VkcChudCwgc2tiLCBsZW4pO1xuIFx0aWYgKG5wLVx1MDAzZWlwdjYpXG4gXHRcdHB1c2hfaXB2NihucCwgc2tiLCBsZW4pO1xuIFx0ZWxzZVxuIFx0XHRwdXNoX2lwdjQobnAsIHNrYiwgbGVuKTtcbi1cdHB1c2hfZXRoKG5wLCBza2IpO1xuK1x0cHVzaF9ldGgobnQsIHNrYik7XG4gXHRza2ItXHUwMDNlZGV2ID0gbnAtXHUwMDNlZGV2O1xuIFxuIFx0cmV0dXJuIChpbnQpbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKTtcbkBAIC0xOTA4LDcgKzE5OTksNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4gICovXG4gc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIHtcbi1cdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKFx1MDAyNm50LVx1MDAzZW5wLCBtc2csIGxlbik7XG4rXHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpIHtcbiBcdFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XG5AQCAtMjIwMyw4ICsyMjk0LDkgQEAgX19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcbitzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIHtcbitcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFx0Ym9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7XG4gXHRjaGFyICpjdXIgPSBvcHQ7XG4gXHRjaGFyICpkZWxpbTtcbkBAIC0yMjE1LDcgKzIzMDcsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXG4gXHRcdGlmICghZGVsaW0pXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdCpkZWxpbSA9IDA7XG4tXHRcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXHUwMDI2bnAtXHUwMDNlbG9jYWxfcG9ydCkpXG4rXHRcdGlmIChrc3RydG91MTYoY3VyLCAxMCwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfcG9ydCkpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuQEAgLTIyNjIsNyArMjM1NCw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKm9wdClcbiBcdFx0KmRlbGltID0gMDtcbiBcdFx0aWYgKCpjdXIgPT0gJyAnIHx8ICpjdXIgPT0gJ1xcdCcpXG4gXHRcdFx0bnBfaW5mbyhucCwgXCJ3YXJuaW5nOiB3aGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkXFxuXCIpO1xuLVx0XHRpZiAoa3N0cnRvdTE2KGN1ciwgMTAsIFx1MDAyNm5wLVx1MDAzZXJlbW90ZV9wb3J0KSlcbitcdFx0aWYgKGtzdHJ0b3UxNihjdXIsIDEwLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfcG9ydCkpXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuQEAgLTIyODQsMTEgKzIzNzYsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxuIFxuIFx0aWYgKCpjdXIgIT0gMCkge1xuIFx0XHQvKiBNQUMgYWRkcmVzcyAqL1xuLVx0XHRpZiAoIW1hY19wdG9uKGN1ciwgbnAtXHUwMDNlcmVtb3RlX21hYykpXG4rXHRcdGlmICghbWFjX3B0b24oY3VyLCBudC1cdTAwM2VyZW1vdGVfbWFjKSlcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdH1cbiBcbi1cdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG5wKTtcbitcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuQEAgLTIzMjYsMTQgKzI0MTgsMjIgQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gXHR9XG4gXG4gXHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXG4tXHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKFx1MDAyNm50LVx1MDAzZW5wLCB0YXJnZXRfY29uZmlnKTtcbitcdGVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUobnQsIHRhcmdldF9jb25maWcpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBmYWlsO1xuIFxuK1x0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbCBpc1xuK1x0ICogdmFsaWQgYXMgc29vbiBhcyBudC1cdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlLiBUaGUgdGFyZ2V0IGlzIG5vdFxuK1x0ICogeWV0IG9uIHRhcmdldF9saXN0LCBzbyBhIG5ldGRldiBldmVudCBjYW5ub3QgcmVhY2ggaXQgaGVyZSwgYnV0XG4rXHQgKiBtaXJyb3IgdGhlIGNvbmZpZ2ZzIHBhdGggZm9yIHN5bW1ldHJ5LlxuK1x0ICovXG4rXHRuZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpO1xuK1xuIFx0ZXJyID0gbmV0cG9sbF9zZXR1cChcdTAwMjZudC1cdTAwM2VucCk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHByX2VycihcIk5vdCBlbmFibGluZyBuZXRjb25zb2xlIGZvciAlcyVkLiBOZXRwb2xsIHNldHVwIGZhaWxlZFxcblwiLFxuIFx0XHQgICAgICAgTkVUQ09OU09MRV9QQVJBTV9UQVJHRVRfUFJFRklYLCBjbWRsaW5lX2NvdW50KTtcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDKSlcbiBcdFx0XHQvKiBvbmx5IGZhaWwgaWYgZHluYW1pYyByZWNvbmZpZ3VyYXRpb24gaXMgc2V0LFxuIFx0XHRcdCAqIG90aGVyd2lzZSwga2VlcCB0aGUgdGFyZ2V0IGluIHRoZSBsaXN0LCBidXQgZGlzYWJsZWQuXG5AQCAtMjM1NSw2ICsyNDU1LDggQEAgc3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4gc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSk7XG4rXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRClcbitcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG4gXHRuZXRwb2xsX2NsZWFudXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0a2ZyZWUobnQtXHUwMDNldXNlcmRhdGEpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbmluZGV4IDg4ZjdkYWE4NTYwZTU4Li43OTMxNTQ2MWE3YjFlMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuQEAgLTIxLDIwICsyMSw2IEBAIHVuaW9uIGluZXRfYWRkciB7XG4gXHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbiB9O1xuIFxuLS8qXG4tICogTWF4aW11bSBwYXlsb2FkIG5ldHBvbGwncyBwcmVhbGxvY2F0ZWQgc2tiIHBvb2wgY2FuIGNhcnJ5LiBLZWVwIHRoaXMgaW5cbi0gKiBzeW5jIHdpdGggdGhlIGJ1ZmZlciBzaXplIHVzZWQgYnkgcmVmaWxsX3NrYnMoKSBpbiBuZXQvY29yZS9uZXRwb2xsLmM7XG4tICogY2FsbGVycyAoZS5nLiBuZXRjb25zb2xlKSB1c2UgaXQgdG8gZGV0ZWN0IHJlcXVlc3RzIHRoZSBwb29sIGNhbiBuZXZlclxuLSAqIHNhdGlzZnkgYW5kIGF2b2lkIGRlcXVldWluZyBhIHBvb2xlZCBza2IgdGhhdCB3b3VsZCBsYXRlciB0cmlwXG4tICogc2tiX292ZXJfcGFuaWMoKSBpbiBza2JfcHV0KCkuXG4tICovXG4tI2RlZmluZSBNQVhfVURQX0NIVU5LXHQxNDYwXG4tI2RlZmluZSBNQVhfU0tCX1NJWkVcdFx0XHRcdFx0XHRcXFxuLVx0KHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArXHRcdFx0XHRcXFxuLVx0IHNpemVvZihzdHJ1Y3QgaXBoZHIpICtcdFx0XHRcdFx0XFxcbi1cdCBzaXplb2Yoc3RydWN0IHVkcGhkcikgK1x0XHRcdFx0XFxcbi1cdCBNQVhfVURQX0NIVU5LKVxuLVxuIHN0cnVjdCBuZXRwb2xsIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcbkBAIC00OSwxMCArMzUsNiBAQCBzdHJ1Y3QgbmV0cG9sbCB7XG4gXG4gXHR1bmlvbiBpbmV0X2FkZHIgbG9jYWxfaXAsIHJlbW90ZV9pcDtcbiBcdGJvb2wgaXB2Njtcbi1cdHUxNiBsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcbi1cdHU4IHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuLVx0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcG9vbDtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCByZWZpbGxfd3E7XG4gfTtcbiBcbiAjZGVmaW5lIG5wX2luZm8obnAsIGZtdCwgLi4uKVx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmNcbmluZGV4IDg1YWE1MTM1MDg4MTE3Li4xMGI2MDYzMjUxYTViYyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldHBvbGwuY1xuKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jXG5AQCAtMzYsMTIgKzM2LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvbmFwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4gXG4tLypcbi0gKiBXZSBtYWludGFpbiBhIHNtYWxsIHBvb2wgb2YgZnVsbHktc2l6ZWQgc2ticywgdG8gbWFrZSBzdXJlIHRoZVxuLSAqIG1lc3NhZ2UgZ2V0cyBvdXQgZXZlbiBpbiBleHRyZW1lIE9PTSBzaXR1YXRpb25zLlxuLSAqL1xuLVxuLSNkZWZpbmUgTUFYX1NLQlMgMzJcbiAjZGVmaW5lIFVTRUNfUEVSX1BPTExcdDUwXG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBjYXJyaWVyX3RpbWVvdXQgPSA0O1xuQEAgLTIxMywyMiArMjA3LDYgQEAgdm9pZCBuZXRwb2xsX3BvbGxfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdHVwKFx1MDAyNm5pLVx1MDAzZWRldl9sb2NrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldHBvbGwgKm5wKVxuLXtcbi1cdHN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9wb29sO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi1cbi1cdHNrYl9wb29sID0gXHUwMDI2bnAtXHUwMDNlc2tiX3Bvb2w7XG4tXG4tXHR3aGlsZSAoUkVBRF9PTkNFKHNrYl9wb29sLVx1MDAzZXFsZW4pIFx1MDAzYyBNQVhfU0tCUykge1xuLVx0XHRza2IgPSBhbGxvY19za2IoTUFYX1NLQl9TSVpFLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcbi1cdFx0aWYgKCFza2IpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdHNrYl9xdWV1ZV90YWlsKHNrYl9wb29sLCBza2IpO1xuLVx0fVxuLX1cbi1cbiB2b2lkIG5ldHBvbGxfemFwX2NvbXBsZXRpb25fcXVldWUodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuQEAgLTM1MSwzMiArMzI5LDEyIEBAIG5ldGRldl90eF90IG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBFWFBPUlRfU1lNQk9MKG5ldHBvbGxfc2VuZF9za2IpO1xuIFxuLXN0YXRpYyB2b2lkIHNrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRwb2xsICpucClcbi17XG4tXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcG9vbDtcbi1cbi1cdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bnAtXHUwMDNlcmVmaWxsX3dxKTtcbi1cdHNrYl9wb29sID0gXHUwMDI2bnAtXHUwMDNlc2tiX3Bvb2w7XG4tXHRza2JfcXVldWVfcHVyZ2VfcmVhc29uKHNrYl9wb29sLCBTS0JfQ09OU1VNRUQpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLXtcbi1cdHN0cnVjdCBuZXRwb2xsICpucCA9XG4tXHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0cG9sbCwgcmVmaWxsX3dxKTtcbi1cbi1cdHJlZmlsbF9za2JzKG5wKTtcbi19XG4tXG4gaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbztcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzO1xuIFx0aW50IGVycjtcbiBcbi1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bnAtXHUwMDNlc2tiX3Bvb2wpO1xuLVx0SU5JVF9XT1JLKFx1MDAyNm5wLVx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcbi1cbiBcdGlmIChuZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9ESVNBQkxFX05FVFBPTEwpIHtcbiBcdFx0bnBfZXJyKG5wLCBcIiVzIGRvZXNuJ3Qgc3VwcG9ydCBwb2xsaW5nLCBhYm9ydGluZ1xcblwiLFxuIFx0XHQgICAgICAgbmRldi1cdTAwM2VuYW1lKTtcbkBAIC00MTEsOSArMzY5LDYgQEAgaW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0bnAtXHUwMDNlZGV2ID0gbmRldjtcbiBcdHN0cnNjcHkobnAtXHUwMDNlZGV2X25hbWUsIG5kZXYtXHUwMDNlbmFtZSwgSUZOQU1TSVopO1xuIFxuLVx0LyogZmlsbCB1cCB0aGUgc2tiIHF1ZXVlICovXG4tXHRyZWZpbGxfc2ticyhucCk7XG4tXG4gXHQvKiBsYXN0IHRoaW5nIHRvIGRvIGlzIGxpbmsgaXQgdG8gdGhlIG5ldCBkZXZpY2Ugc3RydWN0dXJlICovXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobmRldi1cdTAwM2VucGluZm8sIG5waW5mbyk7XG4gXG5AQCAtNjAzLDcgKzU1OCw3IEBAIGludCBuZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucClcbiBcbiBcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgbmRldik7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGZsdXNoO1xuK1x0XHRnb3RvIHB1dDtcbiBcdHJ0bmxfdW5sb2NrKCk7XG4gXG4gXHQvKiBNYWtlIHN1cmUgYWxsIE5BUEkgcG9sbHMgd2hpY2ggc3RhcnRlZCBiZWZvcmUgZGV2LVx1MDAzZW5waW5mb1xuQEAgLTYxNCw4ICs1NjksNiBAQCBpbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApXG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1mbHVzaDpcbi1cdHNrYl9wb29sX2ZsdXNoKG5wKTtcbiBwdXQ6XG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG5wLVx1MDAzZWRldik7XG4gXHRpZiAoaXBfb3ZlcndyaXR0ZW4pXG5AQCAtNjY2LDggKzYxOSw2IEBAIHN0YXRpYyB2b2lkIF9fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRwb2xsICpucClcbiBcdFx0UkNVX0lOSVRfUE9JTlRFUihucC1cdTAwM2VkZXYtXHUwMDNlbnBpbmZvLCBOVUxMKTtcbiBcdFx0Y2FsbF9yY3UoXHUwMDI2bnBpbmZvLVx1MDAzZXJjdSwgcmN1X2NsZWFudXBfbmV0cG9sbF9pbmZvKTtcbiBcdH1cbi1cbi1cdHNrYl9wb29sX2ZsdXNoKG5wKTtcbiB9XG4gXG4gdm9pZCBfX25ldHBvbGxfZnJlZShzdHJ1Y3QgbmV0cG9sbCAqbnApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjowMDo1Ni4yMjY2MDE1MjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODMzNTA2NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmc/IEl0IHNlZW1zIGxpa2UgaXQgZG9lcy4gVGhlIHBhdGNoIGlzIG1vdmluZyBzb21lIGtleSBzdHJ1Y3R1cmVzIOKAkyBgc2tiX3Bvb2xgLCBgcmVmaWxsX3dxYCwgYGxvY2FsX3BvcnRgLCBgcmVtb3RlX3BvcnRgLCBhbmQgYHJlbW90ZV9tYWNgIOKAkyBmcm9tIHRoZSBgbmV0cG9sbGAgc3RydWN0dXJlIHRvIHRoZSBgbmV0Y29uc29sZV90YXJnZXRgIHN0cnVjdHVyZS4gQW5kIGl0J3MgdXBkYXRpbmcgdGhlIGBuZXRjb25zb2xlLmNgIGFuZCBgbmV0cG9sbC5jYCBmaWxlcyB0byByZWZsZWN0IHRoZXNlIGNoYW5nZXMuIFRoYXQncyBkZWZpbml0ZWx5IGEgbW9kaWZpY2F0aW9uIHRvIGhvdyB0aGUgbmV0Y29uc29sZSBkcml2ZXIsIHNwZWNpZmljYWxseSBpdHMgU0tCIG1hbmFnZW1lbnQgYW5kIGNvcmUgY29uZmlndXJhdGlvbiwgb3BlcmF0ZXMuXG5cblRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byB0aGluayBhYm91dCBpcyByZWFjaGFiaWxpdHkgYW5kIHRlc3RhYmlsaXR5LiBOZXRjb25zb2xlLCBhcyBJIHJlY2FsbCwgaXMgYSBkcml2ZXIgZGVzaWduZWQgZm9yIHNlbmRpbmcga2VybmVsIGxvZyBtZXNzYWdlcyBvdmVyIFVEUC4gSXQgaGFzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aHJvdWdoIG1vZHVsZSBwYXJhbWV0ZXJzIGFuZCwgbW9yZSBpbnRlcmVzdGluZ2x5LCBjb25maWdmcy4gVGhlIGZpbGVzIHRvdWNoZWQgYnkgdGhlIHBhdGNoIGFyZSBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCBhbmQgYG5ldC9jb3JlL25ldHBvbGwuY2AuIEdpdmVuIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGZ1bmRhbWVudGFsIFNLQiBhbGxvY2F0aW9uIGFuZCBVRFAgdHJhbnNtaXNzaW9uIGxvZ2ljIGluIGJvdGggdGhlIG5ldGNvbnNvbGUgYW5kIG5ldHBvbGwgY29tcG9uZW50cywgaXQgY2VydGFpbmx5ICpzZWVtcyogd29ydGggZnV6emluZy4gSSBjYW4gaW1hZ2luZSBmdXp6aW5nIHRoZSBuZXRjb25zb2xlIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycyBhbmQgdGhlbiB0cmlnZ2VyaW5nIGtlcm5lbCBsb2dzIHRvIGV4ZXJjaXNlIHRoZSBjaGFuZ2VzLlxuXG5XYWl0IGEgc2Vjb25k4oCmIEkgdGhpbmsgU3l6a2FsbGVyIGNhbiBhY3R1YWxseSBpbnRlcmFjdCB3aXRoIGNvbmZpZ2ZzLCBjYW4ndCBpdD8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIHRoaXMgcGF0Y2gganVzdCBqdW1wZWQgdXAgaW4gcHJpb3JpdHkuIE5vdyBJIGp1c3QgbmVlZCB0byBkb3VibGUtY2hlY2sgd2hpY2gga2VybmVsIGNvbmZpZ3MgYXJlIHJlbGV2YW50IGhlcmUuIEknbSBwcmV0dHkgc3VyZSBgQ09ORklHX05FVENPTlNPTEVgIGFuZCBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgYXJlIHRoZSBrZXlzLCBidXQgbGV0J3MgcXVpY2tseSBzZWFyY2ggdGhlIGNvZGUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzUyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MDE6MDIuMDYwMTA5NzcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzY4NTQ5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVENPTlNPTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNDpjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDU6Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1Ni1cXHRib29sIFxcXCJQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MDE6MDQuMTM2OTc0OTkzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc2OTIzMzI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGUgY29yZSBjb25maWdzIGluIHBsYXkgYXJlIGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AuIFRoaXMgaXMgdGhlIGZpcnN0IHRoaW5nIEknZCBjaGVjayB3aGVuIGF1ZGl0aW5nIHNvbWV0aGluZyBsaWtlIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkLCBhbmQgdGhpcyBpcyB3aGVyZSBJJ2Qgc3RhcnQgZGlnZ2luZy4gSSd2ZSBub3RlZCB0aGF0IHRoZSBidWxrIG9mIHRoZSBjaGFuZ2VzIGFwcGVhciB3aXRoaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIEkndmUgbGlzdGVkIG91dCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgYSBzaW1pbGFyIGxpc3QgZm9yIGBuZXQvY29yZS9uZXRwb2xsLmNgLlxuXG5JIHF1aWNrbHkgc2VlIHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIC0gbW92aW5nIGtleSBmdW5jdGlvbnMgbGlrZSBgcmVmaWxsX3NrYnNgLCBgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaGAgYW5kIGByZWZpbGxfc2tic193b3JrX2hhbmRsZXJgIGZyb20gdGhlIGBuZXRwb2xsYCBzdWJzeXN0ZW0gdG8gYG5ldGNvbnNvbGVgLiBJJ2QgZXhwZWN0IHNvbWUgY2hhbmdlcyB0byBgbmV0cG9sbF9zZXR1cGAgYW5kIGBfX25ldHBvbGxfY2xlYW51cGAgdG9vLCBhbmQgaW5kZWVkIHRoZXJlIGFyZS5cblxuU28sIEkndmUgZ290IGEgcHJlbGltaW5hcnkgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgb246IHRob3NlIGludm9sdmVkIGluIGJ1ZmZlciBtYW5hZ2VtZW50IChgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YCwgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgLCBgcmVmaWxsX3NrYnNgLCBgbmV0Y29uc19za2JfcG9wYCwgYGZpbmRfc2tiYCksIHRoZSBhY3R1YWwgZGF0YSB0cmFuc21pc3Npb24gKGBwdXNoX3VkcGAsIGBwdXNoX2V0aGAsIGBuZXRwb2xsX3NlbmRfdWRwYCksIHRoZSB0YXJnZXQgY29uZmlndXJhdGlvbiAoYGFsbG9jX3BhcmFtX3RhcmdldGAsIGBmcmVlX3BhcmFtX3RhcmdldGAsIGBlbmFibGVkX3N0b3JlYCwgYGRyb3BfbmV0Y29uc29sZV90YXJnZXRgKSwgYW5kIGNvbW1hbmQtbGluZSBwYXJzaW5nIChgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWApLlxuXG5OZXh0LCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBuZXRjb25zb2xlYCBpcyByZWFjaGFibGUuIEFoLCByaWdodCwgdGhyb3VnaCBjb25maWdmcy4gR2l2ZW4gdGhpcyBmdW5jdGlvbmFsIHNoaWZ0IG9mIHN0YXRlIGZyb20gYG5ldHBvbGxgIHRvIGBuZXRjb25zb2xlX3RhcmdldGAsIGZ1enppbmcgdGhpcyBhcmVhIHNlZW1zIHdvcnRod2hpbGUuIEknZCBkZWZpbml0ZWx5IHdhbnQgdG8gZXhwbG9yZSB0aGUgZWRnZSBjYXNlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgbW92ZS5cblxuTm93LCBJJ2xsIHJlZmluZSBteSBzeW1ib2wgbGlzdC4gSXQgc2VlbXMgbGlrZSBhIHZlcnkgZ29vZCB0YXJnZXQgbGlzdC4gV2FpdCwgSSdtIGp1c3Qgbm90aWNpbmcgdGhhdCBtb3N0IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljIHdpdGhpbiBgbmV0Y29uc29sZS5jYC4gVGhhdCBpcyBrZXkgaW5mb3JtYXRpb24uIFRoaXMgbGltaXRzIHRoZWlyIGRpcmVjdCBleHRlcm5hbCBleHBvc3VyZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhleSdyZSB1c2VkIGludGVybmFsbHkuXG5cbkZpbmFsbHksIEknbGwgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHdoYXQgZWxzZSBkZXBlbmRzIG9uIGBuZXRwb2xsYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuZm9yZXNlZW4ga25vY2stb24gZWZmZWN0cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGlkZW50aWZpZWQgYWxsIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuIEFuZCB3aGlsZSBJIHNlZSBjaGFuZ2VzIHdpdGhpbiBgbmV0L2NvcmUvbmV0cG9sbC5jYCwgYXJlIHRoZXJlIG90aGVyIGNhbGxlcnM/IEkgbmVlZCB0byBjaGVjayB0aGUgZW50aXJlIGBuZXRwb2xsYCBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjg4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjAxOjEzLjkwNjIxMDY0MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQzMzg5OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHBvbGxfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTM5Mj1zdGF0aWMgaW5saW5lIGludCBzbGF2ZV9lbmFibGVfbmV0cG9sbChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xNDAxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTQwMjpcXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIHNsYXZlLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTQwMy1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE0NTE9c3RhdGljIHZvaWQgYm9uZF9uZXRwb2xsX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xNDYxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTQ2MjpzdGF0aWMgaW50IGJvbmRfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTQ2My17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU5NDk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBib25kX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5NjctI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1OTY4OlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gYm9uZF9uZXRwb2xsX3NldHVwLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTk2OS1cXHQubmRvX25ldHBvbGxfY2xlYW51cFxcdD0gYm9uZF9uZXRwb2xsX2NsZWFudXAsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9MTEzMD1zdGF0aWMgdm9pZCBtYWN2bGFuX2Rldl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTM0LVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMTM1OnN0YXRpYyBpbnQgbWFjdmxhbl9kZXZfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTM2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy0xMTQ2LVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMTQ3OlxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChuZXRwb2xsLCByZWFsX2Rldik7XFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTExNDgtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jPTExODc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtYWN2bGFuX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTIwNi1cXHQubmRvX3BvbGxfY29udHJvbGxlclxcdD0gbWFjdmxhbl9kZXZfcG9sbF9jb250cm9sbGVyLFxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzoxMjA3OlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gbWFjdmxhbl9kZXZfbmV0cG9sbF9zZXR1cCxcXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtMTIwOC1cXHQubmRvX25ldHBvbGxfY2xlYW51cFxcdD0gbWFjdmxhbl9kZXZfbmV0cG9sbF9jbGVhbnVwLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE0NT1lbnVtIHRhcmdldF9zdGF0ZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg3LSAqXFx0XFx0aXRzIEdGUF9BVE9NSUMgYWxsb2NhdGlvbiBmYWlscy4gTGlmZXRpbWUgYnJhY2tldHMgYVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODg6ICpcXHRcXHRzdWNjZXNzZnVsIG5ldHBvbGxfc2V0dXAoKSAvIG5ldHBvbGxfY2xlYW51cCgpIHBhaXIgb24gQG5wLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODktICogQHJlZmlsbF93cTpcXHRXb3JrIGl0ZW0gdGhhdCBhc3luY2hyb25vdXNseSB0b3BzIEBza2JfcG9vbCBiYWNrIHVwIHRvXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzU3PXN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzU4LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzU5OlxcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgbWFrZXMgbnQtXFx1MDAzZW5wLmRldlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNjAtXFx0ICogdmlzaWJsZSB0byB0YXJnZXRfbGlzdCB3YWxrZXJzIChlLmcuIG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNjUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjM2NjpcXHRpZiAobmV0cG9sbF9zZXR1cChcXHUwMDI2bnQtXFx1MDAzZW5wKSkge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNjctXFx0XFx0LyogbmV0cG9sbCBmYWlscyBzZXR1cCBvbmNlLCBkbyBub3QgdHJ5IGFnYWluLiAqL1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTM5MD1zdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQxNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDE2OlxcdC8qIG5ldHBvbGxfc2V0dXAoKSB0b29rIGEgbmV0X2RldmljZSByZWZlcmVuY2UgYW5kIGRyb3BwZWQgdGhlIFJUTkxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDE3LVxcdCAqIGJlZm9yZSByZXR1cm5pbmcsIGFsbCB3aGlsZSB0aGlzIHRhcmdldCB3YXMgb2ZmIHRhcmdldF9saXN0IGFuZFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTc4MD1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MzMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjgzNDpcXHRcXHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgzNS1cXHRcXHQgKiBpcyB2YWxpZCBhcyBzb29uIGFzIG50LVxcdTAwM2VucC5kZXYgYmVjb21lcyB2aXNpYmxlIHRvXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NDI6XFx0XFx0cmV0ID0gbmV0cG9sbF9zZXR1cChcXHUwMDI2bnQtXFx1MDAzZW5wKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQzLVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMzkzPXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MjQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MjU6XFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbCBpc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDI2LVxcdCAqIHZhbGlkIGFzIHNvb24gYXMgbnQtXFx1MDAzZW5wLmRldiBiZWNvbWVzIHZpc2libGUuIFRoZSB0YXJnZXQgaXMgbm90XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQzMS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQzMjpcXHRlcnIgPSBuZXRwb2xsX3NldHVwKFxcdTAwMjZudC1cXHUwMDNlbnApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDMzLVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MTE0MD1zdGF0aWMgaW50IF9fdGVhbV9wb3J0X2VuYWJsZV9uZXRwb2xsKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTExNDgtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoxMTQ5OlxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgcG9ydC1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTExNTAtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0yMDc4PXN0YXRpYyB2b2lkIHRlYW1fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTIwODYtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMDg3OnN0YXRpYyBpbnQgdGVhbV9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYy0yMDg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MjE3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRlYW1fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE4NS1cXHQubmRvX3BvbGxfY29udHJvbGxlclxcdD0gdGVhbV9wb2xsX2NvbnRyb2xsZXIsXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzoyMTg2OlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gdGVhbV9uZXRwb2xsX3NldHVwLFxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMjE4Ny1cXHQubmRvX25ldHBvbGxfY2xlYW51cFxcdD0gdGVhbV9uZXRwb2xsX2NsZWFudXAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE0NDY9c3RydWN0IG5ldF9kZXZpY2Vfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTUwNC1cXHR2b2lkICAgICAgICAgICAgICAgICAgICAoKm5kb19wb2xsX2NvbnRyb2xsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTUwNTpcXHRpbnRcXHRcXHRcXHQoKm5kb19uZXRwb2xsX3NldHVwKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE1MDYtXFx0dm9pZFxcdFxcdFxcdCgqbmRvX25ldHBvbGxfY2xlYW51cCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaD02NT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0cG9sbF9wb2xsX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IHJldHVybjsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmgtNjctXFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6Njg6aW50IF9fbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG5pbmNsdWRlL2xpbnV4L25ldHBvbGwuaDo2OTppbnQgbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0cG9sbCAqbnApO1xcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTcwLXZvaWQgX19uZXRwb2xsX2ZyZWUoc3RydWN0IG5ldHBvbGwgKm5wKTtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jPTcxND1zdGF0aWMgdm9pZCB2bGFuX2Rldl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTcxOC1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3MTk6c3RhdGljIGludCB2bGFuX2Rldl9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzIwLXtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTczMC1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3MzE6XFx0ZXJyID0gX19uZXRwb2xsX3NldHVwKG5ldHBvbGwsIHJlYWxfZGV2KTtcXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03MzItXFx0aWYgKGVycikge1xcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9MTA3OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTExMDQtXFx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcXHQ9IHZsYW5fZGV2X3BvbGxfY29udHJvbGxlcixcXG5uZXQvODAyMXEvdmxhbl9kZXYuYzoxMTA1OlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdD0gdmxhbl9kZXZfbmV0cG9sbF9zZXR1cCxcXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMTA2LVxcdC5uZG9fbmV0cG9sbF9jbGVhbnVwXFx0PSB2bGFuX2Rldl9uZXRwb2xsX2NsZWFudXAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTMwNj1zdGF0aWMgaW50IF9fYnJfbmV0cG9sbF9lbmFibGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMzE0LVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MzE1OlxcdGVyciA9IF9fbmV0cG9sbF9zZXR1cChucCwgcC1cXHUwMDNlZGV2KTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTMxNi1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTMyNT1pbnQgYnJfbmV0cG9sbF9lbmFibGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMzMyLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MzMzOnN0YXRpYyBpbnQgYnJfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMzM0LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9NDM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYnJfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNDUxLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NDUyOlxcdC5uZG9fbmV0cG9sbF9zZXR1cFxcdCA9IGJyX25ldHBvbGxfc2V0dXAsXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy00NTMtXFx0Lm5kb19uZXRwb2xsX2NsZWFudXBcXHQgPSBicl9uZXRwb2xsX2NsZWFudXAsXFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmM9MzMwPUVYUE9SVF9TWU1CT0wobmV0cG9sbF9zZW5kX3NrYik7XFxubmV0L2NvcmUvbmV0cG9sbC5jLTMzMS1cXG5uZXQvY29yZS9uZXRwb2xsLmM6MzMyOmludCBfX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG5uZXQvY29yZS9uZXRwb2xsLmMtMzMzLXtcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zNTktXFx0XFx0b3BzID0gbmRldi1cXHUwMDNlbmV0ZGV2X29wcztcXG5uZXQvY29yZS9uZXRwb2xsLmM6MzYwOlxcdFxcdGlmIChvcHMtXFx1MDAzZW5kb19uZXRwb2xsX3NldHVwKSB7XFxubmV0L2NvcmUvbmV0cG9sbC5jOjM2MTpcXHRcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19uZXRwb2xsX3NldHVwKG5kZXYpO1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zNjItXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zODEtfVxcbm5ldC9jb3JlL25ldHBvbGwuYzozODI6RVhQT1JUX1NZTUJPTF9HUEwoX19uZXRwb2xsX3NldHVwKTtcXG5uZXQvY29yZS9uZXRwb2xsLmMtMzgzLVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jPTQ1OT1zdGF0aWMgaW50IG5ldHBvbGxfdGFrZV9pcHY0KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmMtNDg2LSAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGVyIGxlZnQgbnAtXFx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XFxubmV0L2NvcmUvbmV0cG9sbC5jOjQ4NzogKiBuZXRwb2xsX3NldHVwKCkgc2hvdWxkIGF1dG8tcG9wdWxhdGUgaXQgZnJvbSB0aGUgZWdyZXNzIGRldmljZS5cXG5uZXQvY29yZS9uZXRwb2xsLmMtNDg4LSAqXFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmM9NDk1PXN0YXRpYyBib29sIG5ldHBvbGxfbG9jYWxfaXBfdW5zZXQoY29uc3Qgc3RydWN0IG5ldHBvbGwgKm5wKVxcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jLTUwMS1cXG5uZXQvY29yZS9uZXRwb2xsLmM6NTAyOmludCBuZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRwb2xsICpucClcXG5uZXQvY29yZS9uZXRwb2xsLmMtNTAzLXtcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy01NTgtXFxubmV0L2NvcmUvbmV0cG9sbC5jOjU1OTpcXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpO1xcbm5ldC9jb3JlL25ldHBvbGwuYy01NjAtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy01ODAtfVxcbm5ldC9jb3JlL25ldHBvbGwuYzo1ODE6RVhQT1JUX1NZTUJPTChuZXRwb2xsX3NldHVwKTtcXG5uZXQvY29yZS9uZXRwb2xsLmMtNTgyLVxcbi0tXFxubmV0L2RzYS91c2VyLmM9MTMwNT1zdGF0aWMgaW50IGRzYV91c2VyX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xMzEzLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbm5ldC9kc2EvdXNlci5jOjEzMTQ6c3RhdGljIGludCBkc2FfdXNlcl9uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2RzYS91c2VyLmMtMTMxNS17XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xMzI0LVxcbm5ldC9kc2EvdXNlci5jOjEzMjU6XFx0ZXJyID0gX19uZXRwb2xsX3NldHVwKG5ldHBvbGwsIGNvbmR1aXQpO1xcbm5ldC9kc2EvdXNlci5jLTEzMjYtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L2RzYS91c2VyLmM9MjU4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRzYV91c2VyX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0yNTk3LSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbm5ldC9kc2EvdXNlci5jOjI1OTg6XFx0Lm5kb19uZXRwb2xsX3NldHVwXFx0PSBkc2FfdXNlcl9uZXRwb2xsX3NldHVwLFxcbm5ldC9kc2EvdXNlci5jLTI1OTktXFx0Lm5kb19uZXRwb2xsX2NsZWFudXBcXHQ9IGRzYV91c2VyX25ldHBvbGxfY2xlYW51cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MDE6MTYuMDQ5NjA5NjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTE4NzUwNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBOZXR3b3JrIENvbnNvbGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYG5ldGNvbnNvbGVgIGFuZCBgbmV0cG9sbGAuIFRoZSBgbmV0cG9sbGAgbW9kaWZpY2F0aW9ucyBhcmUgdGhlIGNvcmUgb2YgbXkgY29uY2Vybi4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIHJlbW92aW5nIHRoZSBgc2tiX3Bvb2xgIGFuZCBgcmVmaWxsX3dxYCBmcm9tIHRoZSBgc3RydWN0IG5ldHBvbGxgIGFuZCB0aGVuIHJpcHBpbmcgb3V0IHRoZSBhc3NvY2lhdGVkIGByZWZpbGxfc2tic2AgYW5kIGBza2JfcG9vbF9mbHVzaGAgY2FsbHMgZnJvbSBgbmV0cG9sbF9zZXR1cGAgYW5kIGBfX25ldHBvbGxfY2xlYW51cGAsIHJlc3BlY3RpdmVseS5cblxuVGhlIGltbWVkaWF0ZSBjb25zZXF1ZW5jZSB0aGF0IGp1bXBzIG91dCBpcyB0aGUgaW1wYWN0IG9uIGFsbCAqb3RoZXIqIHVzZXJzIG9mIGBuZXRwb2xsYC4gSSBtZWFuLCB0aGluayBhYm91dCBpdDogYGJvbmRfbWFpbi5jYCwgYG1hY3ZsYW4uY2AsIGB0ZWFtX2NvcmUuY2AsIGB2bGFuX2Rldi5jYCwgYGJyX2RldmljZS5jYCwgYW5kIGV2ZW4gYGRzYS91c2VyLmNgIOKAkyB0aGV5J3JlIGFsbCByZWx5aW5nIG9uIHNvbWUgZm9ybSBvZiBgbmV0cG9sbGAgc3RydWN0dXJlLiBBbmQgbm93LCB0aGV5J3JlICpub3QqIGdvaW5nIHRvIGhhdmUgYW4gYHNrYl9wb29sYCBhdmFpbGFibGUgdG8gdGhlbSBpbiB0aGVpciBgbmV0cG9sbGAgaW5zdGFuY2VzLiBUaGF0J3MgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0LCBhIGJpdCB1bnNldHRsaW5nLlxuXG5IbW0sIHRoaXMgcmFpc2VzIGEgY3J1Y2lhbCBxdWVzdGlvbi4gQXJlIHRoZXNlIG90aGVyIHVzZXJzIG9mIGBuZXRwb2xsYCBldmVuIHV0aWxpemluZyBgbmV0cG9sbF9zZW5kX3VkcGA/IElmIHRoZXkgYXJlbid0LCB0aGVuIG1heWJlIHRoaXMgaXNuJ3Qgc3VjaCBhIGJpZyBkZWFsLiBUaGUgYWJzZW5jZSBvZiB0aGUgYHNrYl9wb29sYCBtaWdodCBub3QgaGF2ZSBhbiBpbW1lZGlhdGUgZnVuY3Rpb25hbCBpbXBhY3QuIEJ1dCB0aGUgaW1wbGljYXRpb25zIG9mIGEgc2hhcmVkIHJlc291cmNlIHJlbW92ZWQgY2Fubm90IGJlIGlnbm9yZWQgYW5kLCBpbiB0aGlzIGNhc2UsIG5lZWRzIGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uLiBMZXQncyBzZWUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSB1c2VkLiBOZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzkyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjAxOjIyLjk2ODM2MzY0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU3MTY4Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHBvbGxfc2VuZF91ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xOTMwPXN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk1Mi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk1MzpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTU0LVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5OTAtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5OTE6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTkyLSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5OTUtICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk5NjogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5OTctICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk5ODogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk5OS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjAwMD1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMDEte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDAyOlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE2OjAxOjI0LjgyNTUzODQ4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTQyMDIyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldGNvbnNvbGUgVURQIFRyYW5zbWlzc2lvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgbmV0Y29uc29sZWAgaGFuZGxlcyBVRFAgdHJhbnNtaXNzaW9uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYG5ldHBvbGxfc2VuZF91ZHBgIGlzIHN0YXRpY2FsbHkgZGVjbGFyZWQgd2l0aGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgaXQncyB0aWdodGx5IGJvdW5kIHRvIHRoYXQgc3BlY2lmaWMgbW9kdWxlLiBUaGVuIEkgcmVtZW1iZXIgdGhhdCBgbmV0cG9sbF9zZW5kX3NrYmAgaXMsIGluIGZhY3QsIGV4cG9ydGVkIGZyb20gYG5ldC9jb3JlL25ldHBvbGwuY2AuIFRoYXQncyB0aGUgbW9yZSBnZW5lcmFsIG5ldHdvcmtpbmcgY29tcG9uZW50LCBhbmQgSSdkIGV4cGVjdCB0aGF0IHRoZSBtb3JlIGdlbmVyYWwgc2VuZCBmdW5jdGlvbiBgbmV0cG9sbF9zZW5kX3NrYmAgbWF5IGhhdmUgYnJvYWRlciBhcHBsaWNhYmlsaXR5IHRoYW4gdGhlIHN0YXRpYyBuZXRjb25zb2xlIGZ1bmN0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBuZXRwb2xsX3NlbmRfc2tiYCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBvciBpbnRlcmFjdGluZyB3aXRoIGBza2JfcG9vbGAuIFRoYXQgd2lsbCBiZSBhbiBpbXBvcnRhbnQgaW5kaWNhdG9yIG9mIG1lbW9yeSBhbGxvY2F0aW9uLCBlZmZpY2llbmN5LCBhbmQgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgZ3JhcGggdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzgxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MDE6MjguMDM5NzQ0MDI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk0MDUxMjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldHBvbGxfc2VuZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9Mjk3PW5ldGRldl90eF90IGJvbmRfZGV2X3F1ZXVlX3htaXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTMwNi1cXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGJvbmQtXFx1MDAzZWRldikpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzA3OlxcdFxcdHJldHVybiBib25kX25ldHBvbGxfc2VuZF9za2IoYm9uZF9nZXRfc2xhdmVfYnlfZGV2KGJvbmQsIHNsYXZlX2RldiksIHNrYik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMDgtXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9NTQ1PXN0YXRpYyBpbnQgbWFjdmxhbl9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtNTc0LVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzo1NzU6c3RhdGljIGlubGluZSBuZXRkZXZfdHhfdCBtYWN2bGFuX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01NzYte1xcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01NzctI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jOjU3ODpcXHRyZXR1cm4gbmV0cG9sbF9zZW5kX3NrYih2bGFuLVxcdTAwM2VuZXRwb2xsLCBza2IpO1xcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01NzktI2Vsc2VcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz01ODU9c3RhdGljIG5ldGRldl90eF90IG1hY3ZsYW5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTU5Mi1cXHRpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKGRldikpKVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzo1OTM6XFx0XFx0cmV0dXJuIG1hY3ZsYW5fbmV0cG9sbF9zZW5kX3NrYih2bGFuLCBza2IpO1xcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy01OTQtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTk1Mz1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5ODYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5ODc6XFx0cmV0dXJuIChpbnQpbmV0cG9sbF9zZW5kX3NrYihucCwgc2tiKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk4OC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaD05OT1zdGF0aWMgaW5saW5lIGJvb2wgdGVhbV9wb3J0X2Rldl90eGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTEyLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oOjExMzpzdGF0aWMgaW5saW5lIHZvaWQgdGVhbV9uZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTE0LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTExNS17XFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg6MTE2OlxcdG5ldHBvbGxfc2VuZF9za2IocG9ydC1cXHUwMDNlbnAsIHNrYik7XFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMTE3LX1cXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaC0xMTgtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2lmX3RlYW0uaDoxMTk6c3RhdGljIGlubGluZSB2b2lkIHRlYW1fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0LFxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTEyMC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oPTIzNz1zdGF0aWMgaW5saW5lIGludCB0ZWFtX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCB0ZWFtICp0ZWFtLCBzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmgtMjQ1LVxcdGlmICh1bmxpa2VseShuZXRwb2xsX3R4X3J1bm5pbmcobmV0ZGV2X2Zyb21fcHJpdih0ZWFtKSkpKSB7XFxuaW5jbHVkZS9saW51eC9pZl90ZWFtLmg6MjQ2OlxcdFxcdHRlYW1fbmV0cG9sbF9zZW5kX3NrYihwb3J0LCBza2IpO1xcbmluY2x1ZGUvbGludXgvaWZfdGVhbS5oLTI0Ny1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oPTcyPXZvaWQgZG9fbmV0cG9sbF9jbGVhbnVwKHN0cnVjdCBuZXRwb2xsICpucCk7XFxuaW5jbHVkZS9saW51eC9uZXRwb2xsLmg6NzM6bmV0ZGV2X3R4X3QgbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvbmV0cG9sbC5oLTc0LXZvaWQgbmV0cG9sbF96YXBfY29tcGxldGlvbl9xdWV1ZSh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaD01NDg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYXZlX2xhc3RfdHgoc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4tLVxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC01NTMtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjU1NDpzdGF0aWMgaW5saW5lIG5ldGRldl90eF90IGJvbmRfbmV0cG9sbF9zZW5kX3NrYihjb25zdCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLFxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC01NTUtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1Ni17XFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjU1NzpcXHRyZXR1cm4gbmV0cG9sbF9zZW5kX3NrYihzbGF2ZS1cXHUwMDNlbnAsIHNrYik7XFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1OC19XFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTU1OS0jZWxzZVxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaDo1NjA6c3RhdGljIGlubGluZSBuZXRkZXZfdHhfdCBib25kX25ldHBvbGxfc2VuZF9za2IoY29uc3Qgc3RydWN0IHNsYXZlICpzbGF2ZSxcXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNTYxLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9NDY9c3RhdGljIGludCB2bGFuX2Rldl9oYXJkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtODktXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6OTA6c3RhdGljIGlubGluZSBuZXRkZXZfdHhfdCB2bGFuX25ldHBvbGxfc2VuZF9za2Ioc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtOTEte1xcbm5ldC84MDIxcS92bGFuX2Rldi5jLTkyLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjkzOlxcdHJldHVybiBuZXRwb2xsX3NlbmRfc2tiKHZsYW4tXFx1MDAzZW5ldHBvbGwsIHNrYik7XFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtOTQtI2Vsc2VcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jPTEwMD1zdGF0aWMgbmV0ZGV2X3R4X3Qgdmxhbl9kZXZfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMjMtXFx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcXG5uZXQvODAyMXEvdmxhbl9kZXYuYzoxMjQ6XFx0XFx0cmV0dXJuIHZsYW5fbmV0cG9sbF9zZW5kX3NrYih2bGFuLCBza2IpO1xcbm5ldC84MDIxcS92bGFuX2Rldi5jLTEyNS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTczPXN0YXRpYyB2b2lkIF9fYnJfZm9yd2FyZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICp0byxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTEwNi1cXHRcXHRcXHRlbHNlXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTA3OlxcdFxcdFxcdFxcdGJyX25ldHBvbGxfc2VuZF9za2IodG8sIHNrYik7XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMTA4LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTgwOT1uZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MTAtI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6ODExOnN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRwb2xsX3NlbmRfc2tiKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODEyLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTgxMy17XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6ODE0OlxcdG5ldHBvbGxfc2VuZF9za2IocC1cXHUwMDNlbnAsIHNrYik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtODE1LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTgxOD12b2lkIGJyX25ldHBvbGxfZGlzYWJsZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MTktI2Vsc2VcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo4MjA6c3RhdGljIGlubGluZSB2b2lkIGJyX25ldHBvbGxfc2VuZF9za2IoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC04MjEtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmM9MjM5PXN0YXRpYyBpbnQgbmV0cG9sbF9vd25lcl9hY3RpdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0yNTAtLyogY2FsbCB3aXRoIElSUSBkaXNhYmxlZCAqL1xcbm5ldC9jb3JlL25ldHBvbGwuYzoyNTE6c3RhdGljIG5ldGRldl90eF90IF9fbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvbmV0cG9sbC5jLTI1Mi17XFxuLS1cXG5uZXQvY29yZS9uZXRwb2xsLmMtMjk5LVxcdFxcdFdBUk5fT05DRSghaXJxc19kaXNhYmxlZCgpLFxcbm5ldC9jb3JlL25ldHBvbGwuYzozMDA6XFx0XFx0XFx0XFxcIm5ldHBvbGxfc2VuZF9za2Jfb25fZGV2KCk6ICVzIGVuYWJsZWQgaW50ZXJydXB0cyBpbiBwb2xsICglcFMpXFxcXG5cXFwiLFxcbm5ldC9jb3JlL25ldHBvbGwuYy0zMDEtXFx0XFx0XFx0ZGV2LVxcdTAwM2VuYW1lLCBkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdGFydF94bWl0KTtcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zMTQtXFxubmV0L2NvcmUvbmV0cG9sbC5jOjMxNTpuZXRkZXZfdHhfdCBuZXRwb2xsX3NlbmRfc2tiKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9uZXRwb2xsLmMtMzE2LXtcXG4tLVxcbm5ldC9jb3JlL25ldHBvbGwuYy0zMjQtXFx0XFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbm5ldC9jb3JlL25ldHBvbGwuYzozMjU6XFx0XFx0cmV0ID0gX19uZXRwb2xsX3NlbmRfc2tiKG5wLCBza2IpO1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zMjYtXFx0XFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvbmV0cG9sbC5jLTMyOS19XFxubmV0L2NvcmUvbmV0cG9sbC5jOjMzMDpFWFBPUlRfU1lNQk9MKG5ldHBvbGxfc2VuZF9za2IpO1xcbm5ldC9jb3JlL25ldHBvbGwuYy0zMzEtXFxuLS1cXG5uZXQvZHNhL3VzZXIuYz04MTk9c3RhdGljIGludCBkc2FfdXNlcl9wb3J0X29ial9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqY3R4LFxcbi0tXFxubmV0L2RzYS91c2VyLmMtODY3LVxcbm5ldC9kc2EvdXNlci5jOjg2ODpzdGF0aWMgbmV0ZGV2X3R4X3QgZHNhX3VzZXJfbmV0cG9sbF9zZW5kX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9kc2EvdXNlci5jLTg2OS1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy04NzMtXFxubmV0L2RzYS91c2VyLmM6ODc0OlxcdHJldHVybiBuZXRwb2xsX3NlbmRfc2tiKHAtXFx1MDAzZW5ldHBvbGwsIHNrYik7XFxubmV0L2RzYS91c2VyLmMtODc1LSNlbHNlXFxuLS1cXG5uZXQvZHNhL3VzZXIuYz04OTU9bmV0ZGV2X3R4X3QgZHNhX2VucXVldWVfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy05MDAtXFx0aWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhkZXYpKSlcXG5uZXQvZHNhL3VzZXIuYzo5MDE6XFx0XFx0cmV0dXJuIGRzYV91c2VyX25ldHBvbGxfc2VuZF9za2IoZGV2LCBza2IpO1xcbm5ldC9kc2EvdXNlci5jLTkwMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTY6MDE6MjkuOTMzNzk5ODc1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NzgwMDE4NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE5ldGNvbnNvbGUgYW5kIE5ldHBvbGwgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGltcGxpY2F0aW9ucyBmb3IgZnV6emluZyBqdW1wIG91dC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBuZXRwb2xsX3NlbmRfc2tiYCBsb29rZWQgbGlrZSBhIGNlbnRyYWwgcG9pbnQsIGNvbnNpZGVyaW5nIGl0cyB1c2UgYnkgdmFyaW91cyBkcml2ZXJzLiBIb3dldmVyLCB1cG9uIGNsb3NlciBpbnNwZWN0aW9uLCBJIHNlZSB0aGF0IGl0J3MgKm5vdCogdGhlIHByaW1hcnkgZnVuY3Rpb24gaGFuZGxpbmcgU0tCIGFsbG9jYXRpb24gb3IgcG9vbCBtYW5hZ2VtZW50LiBJdCdzIGp1c3QgYSB0cmFuc21pdHRlci4gVGhlIGtleSBsaWVzIGluIGBuZXRwb2xsX3NlbmRfdWRwYCwgd2hpY2gsIGFzIHRoZSBkaWZmIGNsZWFybHkgc2hvd3MsIHdhcyBhbHJlYWR5IHN0YXRpYyBhbmQgaXMgbm93IG1vdmVkIGludG8gdGhlIGBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0LCBhbG9uZyB3aXRoIHRoZSBgc2tiX3Bvb2xgIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucyBsaWtlIGBmaW5kX3NrYmAgYW5kIGBuZXRjb25zX3NrYl9wb3BgLlxuXG5UaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHNoaWZ0cyB0aGUgcmVzb3VyY2UgbWFuYWdlbWVudCBzcGVjaWZpY2FsbHkgdG8gYG5ldGNvbnNvbGUuY2AuIEVmZmVjdGl2ZWx5LCB0aGUgcGF0Y2ggaXMgcmVvcmdhbml6aW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMsIG1vdmluZyB0aGUgU0tCIHBvb2wgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gdGhlIGdlbmVyYWwgYG5ldHBvbGxgIGNvbnRleHQgdG8gYSBtb3JlIHNwZWNpZmljIGBuZXRjb25zb2xlX3RhcmdldGAgY29udGV4dC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgU0tCIHBvb2wgaXMgKm9ubHkqIHVzZWQgYnkgYG5ldGNvbnNvbGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLlxuXG5HaXZlbiB0aGlzLCBJIGJlbGlldmUgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgYG5ldGNvbnNvbGVgIGNvbmZpZ3VyYXRpb24gYW5kIHVzYWdlLiBUaGUgbW9zdCByZWxldmFudCBzeW1ib2xzIHRvIHRhcmdldCBhcmUgdGhlIG9uZXMgcmVsYXRlZCB0byBTS0IgcG9vbCBtYW5hZ2VtZW50LCBzZW5kaW5nIHRoZSBVRFAgZGF0YWdyYW1zLCB0YXJnZXQgc2V0dXAvY2xlYW51cCwgYW5kIGNvbmZpZ3VyYXRpb24gcGFyc2luZy5cblxuTXkgaW5pdGlhbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgaW5jbHVkZXMgYSBjb21wcmVoZW5zaXZlIHJhbmdlIG9mIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgYW5kIHJlbGV2YW50IGZ1bmN0aW9uczpcblxuKiAgIGBuZXRjb25zb2xlX3NrYl9wb29sX2luaXRgXG4qICAgYG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hgXG4qICAgYHJlZmlsbF9za2JzYCBcdTAwMjYgYHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcmBcbiogICBgbmV0Y29uc19za2JfcG9wYFxuKiAgIGBmaW5kX3NrYmBcbiogICBgcHVzaF91ZHBgXG4qICAgYHB1c2hfZXRoYFxuKiAgIGBuZXRwb2xsX3NlbmRfdWRwYCBcdTAwMjYgYHNlbmRfdWRwYFxuKiAgIGByZXN1bWVfdGFyZ2V0YFxuKiAgIGBwcm9jZXNzX3Jlc3VtZV90YXJnZXRgXG4qICAgYGFsbG9jX2FuZF9pbml0YFxuKiAgIGBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHNfY29yZWBcbiogICBgbmV0Y29uc29sZV9wcmludF9iYW5uZXJgXG4qICAgYGVuYWJsZWRfc3RvcmVgXG4qICAgYGRyb3BfbmV0Y29uc29sZV90YXJnZXRgXG4qICAgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgXG4qICAgYGFsbG9jX3BhcmFtX3RhcmdldGBcbiogICBgZnJlZV9wYXJhbV90YXJnZXRgXG4qICAgYF9fbmV0cG9sbF9zZXR1cGBcbiogICBgbmV0cG9sbF9zZXR1cGBcbiogICBgX19uZXRwb2xsX2NsZWFudXBgXG5cbkFmdGVyIHNvbWUgZnVydGhlciByZWZpbmVtZW50LCBhbmQgdG8gYXZvaWQgaW5jbHVkaW5nIHRvbyBtYW55IGdlbmVyaWMgZnVuY3Rpb25zLCBJIHdpbGwgcGFyZSB0aGUgbGlzdCBkb3duIHRvIHRoZXNlIGtleSBmdW5jdGlvbnM6XG5cbiogICBgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0YFxuKiAgIGBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoYFxuKiAgIGByZWZpbGxfc2tic2BcbiogICBgbmV0Y29uc19za2JfcG9wYFxuKiAgIGBmaW5kX3NrYmBcbiogICBgbmV0cG9sbF9zZW5kX3VkcGBcbiogICBgZW5hYmxlZF9zdG9yZWBcbiogICBgZHJvcF9uZXRjb25zb2xlX3RhcmdldGBcbiogICBgYWxsb2NfcGFyYW1fdGFyZ2V0YFxuKiAgIGBmcmVlX3BhcmFtX3RhcmdldGBcbiogICBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWBcbiogICBgX19uZXRwb2xsX3NldHVwYFxuKiAgIGBuZXRwb2xsX3NldHVwYFxuKiAgIGBfX25ldHBvbGxfY2xlYW51cGBcblxuVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgd2lsbCBiZSBgTkVUQ09OU09MRWAgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZGVwZW5kZW5jaWVzIGZvciBleGVyY2lzaW5nIHRoaXMgY29kZS5cblxuVG8gcmVjYXAsIHRoZSBwYXRjaCBtb3ZlcyBTS0IgcG9vbCBtYW5hZ2VtZW50IGFuZCB0YXJnZXQgY29uZmlndXJhdGlvbnMgZnJvbSBgc3RydWN0IG5ldHBvbGxgIHRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLCBtb2RpZmllcyBpbml0aWFsaXphdGlvbiBhbmQgZmx1c2hpbmcgYW5kIHRoZSBuZXRwb2xsIHNldHVwL2NsZWFudXAgcGF0aHMuIFRodXMsIGZ1enppbmcgc2hvdWxkIGNvbmNlbnRyYXRlIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGNvbmZpZ3VyYXRpb24sIHJlc291cmNlIG1hbmFnZW1lbnQgKFNLQiBwb29sKSwgYW5kIHRoZSBzZW5kaW5nIG9mIFVEUCBkYXRhZ3JhbXMuIFRoZSBwcmltYXJ5IHRhcmdldHMgYXJlIHdpdGhpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCBidXQgYG5ldC9jb3JlL25ldHBvbGwuY2AgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MTgsIk91dHB1dFRva2VucyI6MjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxNjowMTo0NC43MTM4MjA1NjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTk3Mjc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0Y29uc29sZV9za2JfcG9vbF9pbml0XCIsXG4gICAgXCJuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoXCIsXG4gICAgXCJyZWZpbGxfc2tic1wiLFxuICAgIFwibmV0Y29uc19za2JfcG9wXCIsXG4gICAgXCJmaW5kX3NrYlwiLFxuICAgIFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwiZHJvcF9uZXRjb25zb2xlX3RhcmdldFwiLFxuICAgIFwiYWxsb2NfcGFyYW1fdGFyZ2V0XCIsXG4gICAgXCJmcmVlX3BhcmFtX3RhcmdldFwiLFxuICAgIFwibmV0Y29uc29sZV9wYXJzZXJfY21kbGluZVwiLFxuICAgIFwiX19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRwb2xsX3NldHVwXCIsXG4gICAgXCJfX25ldHBvbGxfY2xlYW51cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBTS0IgcG9vbCBhbmQgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gKHBvcnRzLCBNQUMpIGZyb20gYHN0cnVjdCBuZXRwb2xsYCB0byBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YC4gSXQgbW9kaWZpZXMgaG93IG5ldGNvbnNvbGUgaW5pdGlhbGl6ZXMgYW5kIGZsdXNoZXMgdGhlIFNLQiBwb29sLCBhbmQgdXBkYXRlcyB0aGUgbmV0cG9sbCBzZXR1cC9jbGVhbnVwIHBhdGhzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldGNvbnNvbGUgZHJpdmVyIGFuZCBuZXRwb2xsIGNvcmUsIHdoaWNoIGNhbiBiZSByZWFjaGVkIHZpYSBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRjb25zb2xlX3NrYl9wb29sX2luaXRcIixcbiAgICBcIm5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2hcIixcbiAgICBcInJlZmlsbF9za2JzXCIsXG4gICAgXCJuZXRjb25zX3NrYl9wb3BcIixcbiAgICBcImZpbmRfc2tiXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJkcm9wX25ldGNvbnNvbGVfdGFyZ2V0XCIsXG4gICAgXCJhbGxvY19wYXJhbV90YXJnZXRcIixcbiAgICBcImZyZWVfcGFyYW1fdGFyZ2V0XCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJfX25ldHBvbGxfc2V0dXBcIixcbiAgICBcIm5ldHBvbGxfc2V0dXBcIixcbiAgICBcIl9fbmV0cG9sbF9jbGVhbnVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIFNLQiBwb29sIGFuZCB0YXJnZXQgY29uZmlndXJhdGlvbiAocG9ydHMsIE1BQykgZnJvbSBgc3RydWN0IG5ldHBvbGxgIHRvIGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgLiBJdCBtb2RpZmllcyBob3cgbmV0Y29uc29sZSBpbml0aWFsaXplcyBhbmQgZmx1c2hlcyB0aGUgU0tCIHBvb2wsIGFuZCB1cGRhdGVzIHRoZSBuZXRwb2xsIHNldHVwL2NsZWFudXAgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbmV0Y29uc29sZSBkcml2ZXIgYW5kIG5ldHBvbGwgY29yZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgdmlhIGNvbmZpZ2ZzIG9yIG1vZHVsZSBwYXJhbWV0ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb7qzm[1] Phase: Succeeded StartedAt: 2026-07-02 16:03:04 +0000 UTC FinishedAt: 2026-07-02 16:03:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 16:03:04 +0000 UTC FinishedAt: 2026-07-02 16:03:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2] Phase: Succeeded StartedAt: 2026-07-02 16:03:04 +0000 UTC FinishedAt: 2026-07-02 17:55:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-02 16:03:04 +0000 UTC FinishedAt: 2026-07-02 17:55:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 16:03:04 +0000 UTC FinishedAt: 2026-07-02 16:03:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 16:03:04 +0000 UTC FinishedAt: 2026-07-02 16:03:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowb7qzm/series-workflowb7qzm-convert-artifact-43893905/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 16:03:30 +0000 UTC FinishedAt: 2026-07-02 17:03:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 16:03:30 +0000 UTC FinishedAt: 2026-07-02 17:03:11 +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:*26822d39-e8f3-430a-bfdd-7a7a123ddb54,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-workflowb7qzm/series-workflowb7qzm-convert-artifact-43893905/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": "e8a60ff6-f82e-418c-a1e2-f9d6a5232b1f", "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-workflowb7qzm/series-workflowb7qzm-build-action-2413243268/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Failed StartedAt: 2026-07-02 16:03:30 +0000 UTC FinishedAt: 2026-07-02 16:06:38 +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:*26822d39-e8f3-430a-bfdd-7a7a123ddb54,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-workflowb7qzm/series-workflowb7qzm-convert-artifact-43893905/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(1) Phase: Failed StartedAt: 2026-07-02 16:11:50 +0000 UTC FinishedAt: 2026-07-02 16:14:26 +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:*26822d39-e8f3-430a-bfdd-7a7a123ddb54,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-workflowb7qzm/series-workflowb7qzm-convert-artifact-43893905/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(2) Phase: Failed StartedAt: 2026-07-02 16:19:32 +0000 UTC FinishedAt: 2026-07-02 16:23:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*26822d39-e8f3-430a-bfdd-7a7a123ddb54,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-workflowb7qzm/series-workflowb7qzm-convert-artifact-43893905/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(3) Phase: Succeeded StartedAt: 2026-07-02 16:28:24 +0000 UTC FinishedAt: 2026-07-02 17:03:01 +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:*26822d39-e8f3-430a-bfdd-7a7a123ddb54,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-workflowb7qzm/series-workflowb7qzm-convert-artifact-43893905/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": "e8a60ff6-f82e-418c-a1e2-f9d6a5232b1f", "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-workflowb7qzm/series-workflowb7qzm-build-action-2413243268/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 17:03:11 +0000 UTC FinishedAt: 2026-07-02 17:03:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 17:03:11 +0000 UTC FinishedAt: 2026-07-02 17:03:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 17:03:11 +0000 UTC FinishedAt: 2026-07-02 17:03:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 17:03:11 +0000 UTC FinishedAt: 2026-07-02 17:03:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowb7qzm/series-workflowb7qzm-convert-artifact-1916577380/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 17:03:31 +0000 UTC FinishedAt: 2026-07-02 17:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 17:03:31 +0000 UTC FinishedAt: 2026-07-02 17:05:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e8a60ff6-f82e-418c-a1e2-f9d6a5232b1f,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-workflowb7qzm/series-workflowb7qzm-build-action-2413243268/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-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 17:05:49 +0000 UTC FinishedAt: 2026-07-02 17:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 17:05:49 +0000 UTC FinishedAt: 2026-07-02 17:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 17:05:49 +0000 UTC FinishedAt: 2026-07-02 17:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 17:05:49 +0000 UTC FinishedAt: 2026-07-02 17:36:45 +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:*26822d39-e8f3-430a-bfdd-7a7a123ddb54,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-workflowb7qzm/series-workflowb7qzm-convert-artifact-1916577380/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": "f84e9615-5889-4962-b232-91b1303adaa1", "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-workflowb7qzm/series-workflowb7qzm-build-action-1362800624/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 17:05:49 +0000 UTC FinishedAt: 2026-07-02 17:32:35 +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:*26822d39-e8f3-430a-bfdd-7a7a123ddb54,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-workflowb7qzm/series-workflowb7qzm-convert-artifact-1916577380/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": "f84e9615-5889-4962-b232-91b1303adaa1", "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-workflowb7qzm/series-workflowb7qzm-build-action-1362800624/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 17:36:45 +0000 UTC FinishedAt: 2026-07-02 17:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 17:36:45 +0000 UTC FinishedAt: 2026-07-02 17:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 17:36:45 +0000 UTC FinishedAt: 2026-07-02 17:39:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 17:36:45 +0000 UTC FinishedAt: 2026-07-02 17:38:35 +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:*f84e9615-5889-4962-b232-91b1303adaa1,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-workflowb7qzm/series-workflowb7qzm-build-action-1362800624/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-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-07-02 17:39:01 +0000 UTC FinishedAt: 2026-07-02 17:55:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 17:39:01 +0000 UTC FinishedAt: 2026-07-02 17:39:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 17:39:01 +0000 UTC FinishedAt: 2026-07-02 17:39:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-07-02 17:39:02 +0000 UTC FinishedAt: 2026-07-02 17:55:42 +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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"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:*e8a60ff6-f82e-418c-a1e2-f9d6a5232b1f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f84e9615-5889-4962-b232-91b1303adaa1,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-workflowb7qzm/series-workflowb7qzm-build-action-2413243268/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-workflowb7qzm/series-workflowb7qzm-build-action-1362800624/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 17:39:02 +0000 UTC FinishedAt: 2026-07-02 17:45:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 17:39:02 +0000 UTC FinishedAt: 2026-07-02 17:45:05 +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":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"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-workflowb7qzm/series-workflowb7qzm-convert-artifact-718060525/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 17:39:02 +0000 UTC FinishedAt: 2026-07-02 17:39:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Failed StartedAt: 2026-07-02 17:45:17 +0000 UTC FinishedAt: 2026-07-02 17:55:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7qzm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netconsole_skb_pool_init","netconsole_skb_pool_flush","refill_skbs","netcons_skb_pop","find_skb","netpoll_send_udp","enabled_store","drop_netconsole_target","alloc_param_target","free_param_target","netconsole_parser_cmdline","__netpoll_setup","netpoll_setup","__netpoll_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC"],"series_id":"4971cf77-1ce6-4ba7-9101-201bc51c6d0f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Error StartedAt: 2026-07-02 17:45:17 +0000 UTC FinishedAt: 2026-07-02 17:55:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e8a60ff6-f82e-418c-a1e2-f9d6a5232b1f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f84e9615-5889-4962-b232-91b1303adaa1,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-workflowb7qzm/series-workflowb7qzm-build-action-2413243268/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-workflowb7qzm/series-workflowb7qzm-build-action-1362800624/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-workflowb7qzm/series-workflowb7qzm-convert-artifact-718060525/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil