Name: series-workflow8z9cr Phase: Succeeded StartedAt: 2026-08-31 07:25:13 +0000 UTC FinishedAt: 2026-08-31 11:54:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[0] Phase: Succeeded StartedAt: 2026-08-31 07:25:13 +0000 UTC FinishedAt: 2026-08-31 08:09:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 07:25:13 +0000 UTC FinishedAt: 2026-08-31 08:09:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3ba13f5e7180c034b0a1ef7e052fb780856b134e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET", "VLAN_8021Q" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3ba13f5e7180c034b0a1ef7e052fb780856b134e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET", "VLAN_8021Q" ], "series_id": "9000a737-e212-4d64-9e1e-b17a5cd6f3a4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "packet_sendmsg", "packet_sendmsg_spkt", "packet_snd", "tpacket_snd" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFja2V0X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgcGFja2V0X3BhcnNlX2hlYWRlcnMoKWAgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIHRvIHByb3Blcmx5IHBvc2l0aW9uIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgZm9yIG5vbi1WTEFOIGBTT0NLX1JBV2AgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hlcmUgYG1pbl9oZWFkZXJfbGVuIFx1MDAzYyBoYXJkX2hlYWRlcl9sZW5gLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSAqKktNU0FOKio6IEtNU0FOIGRldGVjdHMgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSBhbGxvY2F0aW9ucykgYW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpbmdsZSBib29sZWFuIGxvY2FsIHZhcmlhYmxlIChgaXNfdmxhbmApLCB3aGljaCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYW5kIHNldCB0byBgZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBTYW5pdGl6ZXJzKio6IFRoZSBjaGFuZ2VzIG9ubHkgYWRqdXN0IGludGVybmFsIGBza2JgIGhlYWRlciBvZmZzZXRzIChgbWFjX2hlYWRlcmAsIGBuZXR3b3JrX2hlYWRlcmAsIGB0cmFuc3BvcnRfaGVhZGVyYCkgZm9yIHBhY2tldCB0cmFuc21pc3Npb24uIEFueSBwb3RlbnRpYWwgb2Zmc2V0IG9yIHNpemluZyBpc3N1ZXMgYWZmZWN0aW5nIHBheWxvYWQgYm91bmRzIGR1cmluZyBwYWNrZXQgcGFyc2luZyBvciBHU08gd291bGQgYmUgb3V0LW9mLWJvdW5kcy9ib3VuZHMtY2hlY2sgaXNzdWVzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBoZWFkZXIgcGFyc2luZyBpbiBhZl9wYWNrZXQgKHBhY2tldF9wYXJzZV9oZWFkZXJzKSBmb3IgU09DS19SQVcgcGFja2V0IHNvY2tldHMgb3ZlciBFdGhlcm5ldCBkZXZpY2VzIHdoZXJlIGhhcmRfaGVhZGVyX2xlbiBleGNlZWRzIG1pbl9oZWFkZXJfbGVuLiBUaGlzIGNoYW5nZXMgdGhlIG5ldHdvcmsgYW5kIHRyYW5zcG9ydCBoZWFkZXIgb2Zmc2V0cyB1c2VkIGR1cmluZyB0cmFuc21pc3Npb24gYW5kIEdTTywgYWZmZWN0aW5nIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIEFGX1BBQ0tFVCBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmEyNzczNzhiMDU0OTJmNWRkMWMxNTY2NmVjZGQ2MDljYWQ1ODFhNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA4OjA4OjEwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5pbmRleCAxMTY4YmQ2YjA5Y2Q2Li5iZTViZjlkYjdlYTE1IDEwMDY0NFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuQEAgLTE5MzUsNiAmIzQzOzE5MzUsNyBAQCBzdGF0aWMgaW50IHBhY2tldF9yY3Zfc3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXG4ge1xuIFx0aW50IGRlcHRoO1xuJiM0MztcdGJvb2wgaXNfdmxhbiA9IGZhbHNlO1xuIFxuIFx0LyogT24gVFggc2tiLVx1MDAzZWRhdGEgaXMgdGhlIEwyIGhlYWRlcjsgYW5jaG9yIGl0IGZvciBhbGwgc29ja2V0IHR5cGVzLiAqL1xuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbkBAIC0xOTQzLDExICYjNDM7MTk0NCwyOCBAQCBzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0ICAgIHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVylcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZGV2X3BhcnNlX2hlYWRlcl9wcm90b2NvbChza2IpO1xuIFxuJiM0MztcdGlmIChsaWtlbHkoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpIHtcbiYjNDM7XHRcdGlzX3ZsYW4gPSBldGhfdHlwZV92bGFuKHNrYi1cdTAwM2Vwcm90b2NvbCk7XG4mIzQzO1xuJiM0MztcdFx0LyogRm9yIG5vbi1WTEFOIFNPQ0tfUkFXIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdob3NlXG4mIzQzO1x0XHQgKiBoYXJkX2hlYWRlcl9sZW4gZXhjZWVkcyB0aGUgb24td2lyZSBMMiBoZWFkZXIgbGVuZ3RoXG4mIzQzO1x0XHQgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsXG4mIzQzO1x0XHQgKiBvciBFdGhlcm5ldCBkcml2ZXJzIHRoYXQgcmVzZXJ2ZSBleHRyYSBzcGFjZSBpblxuJiM0MztcdFx0ICogaGFyZF9oZWFkZXJfbGVuIGZvciBkcml2ZXItaW50ZXJuYWwgd3JhcHBpbmcgLS0gdGhlIFNPQ0tfUkFXXG4mIzQzO1x0XHQgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlXG4mIzQzO1x0XHQgKiB1c2VyIGZyYW1lJiMzOTtzIEwzIHNpdHMgYXQgbWluX2hlYWRlcl9sZW4uIE1vdmUgbmV0d29ya19oZWFkZXJcbiYjNDM7XHRcdCAqIHRvIHRoZSBhY3R1YWwgTDIvTDMgYm91bmRhcnkgc28gdGhlIHRyYW5zcG9ydCBoZWFkZXIgcHJvYmVcbiYjNDM7XHRcdCAqIGJlbG93IGFuZCBzdWJzZXF1ZW50IEdTTyBzZWUgdGhlIHJpZ2h0IEwzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWlzX3ZsYW4gXHUwMDI2XHUwMDI2IHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBza2ItXHUwMDNlZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuIFx1MDAzYyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbilcbiYjNDM7XHRcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlbWluX2hlYWRlcl9sZW4pO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIFxuIFx0LyogTW92ZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgcmlnaHQgcG9zaXRpb24gZm9yIFZMQU4gdGFnZ2VkIHBhY2tldHMgKi9cbi1cdGlmIChsaWtlbHkoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikgXHUwMDI2XHUwMDI2XG4tXHQgICAgZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpIFx1MDAyNlx1MDAyNlxuJiM0MztcdGlmIChpc192bGFuIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCwgXHUwMDI2ZGVwdGgpICE9IDApXG4gXHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFja2V0X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRlciBwYXJzaW5nIGluIGFmX3BhY2tldCAocGFja2V0X3BhcnNlX2hlYWRlcnMpIGZvciBTT0NLX1JBVyBwYWNrZXQgc29ja2V0cyBvdmVyIEV0aGVybmV0IGRldmljZXMgd2hlcmUgaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgbWluX2hlYWRlcl9sZW4uIFRoaXMgY2hhbmdlcyB0aGUgbmV0d29yayBhbmQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIHVzZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiBhbmQgR1NPLCBhZmZlY3RpbmcgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgQUZfUEFDS0VUIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyYTI3NzM3OGIwNTQ5MmY1ZGQxYzE1NjY2ZWNkZDYwOWNhZDU4MWE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDg6MDg6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCAxMTY4YmQ2YjA5Y2Q2Li5iZTViZjlkYjdlYTE1IDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTE5MzUsNiAmIzQzOzE5MzUsNyBAQCBzdGF0aWMgaW50IHBhY2tldF9yY3Zfc3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogc3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlpbnQgZGVwdGg7CiYjNDM7CWJvb2wgaXNfdmxhbiA9IGZhbHNlOwogCiAJLyogT24gVFggc2tiLSZndDtkYXRhIGlzIHRoZSBMMiBoZWFkZXI7IGFuY2hvciBpdCBmb3IgYWxsIHNvY2tldCB0eXBlcy4gKi8KIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwpAQCAtMTk0MywxMSAmIzQzOzE5NDQsMjggQEAgc3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaykKIAkgICAgc29jay0mZ3Q7dHlwZSA9PSBTT0NLX1JBVykKIAkJc2tiLSZndDtwcm90b2NvbCA9IGRldl9wYXJzZV9oZWFkZXJfcHJvdG9jb2woc2tiKTsKIAomIzQzOwlpZiAobGlrZWx5KHNrYi0mZ3Q7ZGV2LSZndDt0eXBlID09IEFSUEhSRF9FVEhFUikpIHsKJiM0MzsJCWlzX3ZsYW4gPSBldGhfdHlwZV92bGFuKHNrYi0mZ3Q7cHJvdG9jb2wpOwomIzQzOwomIzQzOwkJLyogRm9yIG5vbi1WTEFOIFNPQ0tfUkFXIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdob3NlCiYjNDM7CQkgKiBoYXJkX2hlYWRlcl9sZW4gZXhjZWVkcyB0aGUgb24td2lyZSBMMiBoZWFkZXIgbGVuZ3RoCiYjNDM7CQkgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsCiYjNDM7CQkgKiBvciBFdGhlcm5ldCBkcml2ZXJzIHRoYXQgcmVzZXJ2ZSBleHRyYSBzcGFjZSBpbgomIzQzOwkJICogaGFyZF9oZWFkZXJfbGVuIGZvciBkcml2ZXItaW50ZXJuYWwgd3JhcHBpbmcgLS0gdGhlIFNPQ0tfUkFXCiYjNDM7CQkgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlCiYjNDM7CQkgKiB1c2VyIGZyYW1lJiMzOTtzIEwzIHNpdHMgYXQgbWluX2hlYWRlcl9sZW4uIE1vdmUgbmV0d29ya19oZWFkZXIKJiM0MzsJCSAqIHRvIHRoZSBhY3R1YWwgTDIvTDMgYm91bmRhcnkgc28gdGhlIHRyYW5zcG9ydCBoZWFkZXIgcHJvYmUKJiM0MzsJCSAqIGJlbG93IGFuZCBzdWJzZXF1ZW50IEdTTyBzZWUgdGhlIHJpZ2h0IEwzLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIWlzX3ZsYW4gJmFtcDsmYW1wOyBzb2NrLSZndDt0eXBlID09IFNPQ0tfUkFXICZhbXA7JmFtcDsKJiM0MzsJCSAgICBza2ItJmd0O2Rldi0mZ3Q7bWluX2hlYWRlcl9sZW4gJmx0OyBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKQomIzQzOwkJCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2ItJmd0O2Rldi0mZ3Q7bWluX2hlYWRlcl9sZW4pOwomIzQzOwl9CiYjNDM7CiAJc2tiX3Byb2JlX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAogCS8qIE1vdmUgbmV0d29yayBoZWFkZXIgdG8gdGhlIHJpZ2h0IHBvc2l0aW9uIGZvciBWTEFOIHRhZ2dlZCBwYWNrZXRzICovCi0JaWYgKGxpa2VseShza2ItJmd0O2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfRVRIRVIpICZhbXA7JmFtcDsKLQkgICAgZXRoX3R5cGVfdmxhbihza2ItJmd0O3Byb3RvY29sKSAmYW1wOyZhbXA7CiYjNDM7CWlmIChpc192bGFuICZhbXA7JmFtcDsKIAkgICAgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHNrYiwgc2tiLSZndDtwcm90b2NvbCwgJmFtcDtkZXB0aCkgIT0gMCkKIAkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIGRlcHRoKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IERlY29kaW5nIHRoZSBOZXR3b3JrIFBhY2tldCBIZWFkZXIgUGFyc2luZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRoZSBtb2RpZmljYXRpb24gdG8gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgZnVuY3Rpb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mICpob3cqIGBhZl9wYWNrZXQuY2AgZnVuY3Rpb25zIG92ZXJhbGwgYW5kIGhvdyBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGZpdHMgaW50byB0aGF0IGFyY2hpdGVjdHVyZS4KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgdXNlIGVpdGhlciBgZ3JlcHBlcmAgb3IgYSBzaW1wbGUgYHJlYWQtZmlsZWAgY29tbWFuZC4gR2l2ZW4gdGhlIGxvY2F0aW9uIG1lbnRpb24gb2YgbGluZXMgMTkzNS0xOTcwLCB0aGF0JiMzOTtzIHdoZXJlIG15IGZvY3VzIG5lZWRzIHRvIGJlLiBJIHdhbnQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgY29udGV4dCBvZiB0aGUgY2FsbCwgYW5kIHdoYXQmIzM5O3MgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCBgcGFja2V0X3BhcnNlX2hlYWRlcnNgLiBMZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgbGFyZ2VyIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTMwOlx0XHRrZnJlZV9za2Ioc2tiKTtcbjE5MzE6XHRvb206XG4xOTMyOlx0XHRyZXR1cm4gMDtcbjE5MzM6XHR9XG4xOTM0Olx0XG4xOTM1Olx0c3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcbjE5MzY6XHR7XG4xOTM3Olx0XHRpbnQgZGVwdGg7XG4xOTM4Olx0XHRib29sIGlzX3ZsYW4gPSBmYWxzZTtcbjE5Mzk6XHRcbjE5NDA6XHRcdC8qIE9uIFRYIHNrYi1cdTAwM2VkYXRhIGlzIHRoZSBMMiBoZWFkZXI7IGFuY2hvciBpdCBmb3IgYWxsIHNvY2tldCB0eXBlcy4gKi9cbjE5NDE6XHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4xOTQyOlx0XG4xOTQzOlx0XHRpZiAoKCFza2ItXHUwMDNlcHJvdG9jb2wgfHwgc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0FMTCkpIFx1MDAyNlx1MDAyNlxuMTk0NDpcdFx0ICAgIHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVylcbjE5NDU6XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZGV2X3BhcnNlX2hlYWRlcl9wcm90b2NvbChza2IpO1xuMTk0NjpcdFxuMTk0NzpcdFx0aWYgKGxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSkge1xuMTk0ODpcdFx0XHRpc192bGFuID0gZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpO1xuMTk0OTpcdFxuMTk1MDpcdFx0XHQvKiBGb3Igbm9uLVZMQU4gU09DS19SQVcgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hvc2VcbjE5NTE6XHRcdFx0ICogaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgdGhlIG9uLXdpcmUgTDIgaGVhZGVyIGxlbmd0aFxuMTk1MjpcdFx0XHQgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsXG4xOTUzOlx0XHRcdCAqIG9yIEV0aGVybmV0IGRyaXZlcnMgdGhhdCByZXNlcnZlIGV4dHJhIHNwYWNlIGluXG4xOTU0Olx0XHRcdCAqIGhhcmRfaGVhZGVyX2xlbiBmb3IgZHJpdmVyLWludGVybmFsIHdyYXBwaW5nIC0tIHRoZSBTT0NLX1JBV1xuMTk1NTpcdFx0XHQgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlXG4xOTU2Olx0XHRcdCAqIHVzZXIgZnJhbWUmIzM5O3MgTDMgc2l0cyBhdCBtaW5faGVhZGVyX2xlbi4gTW92ZSBuZXR3b3JrX2hlYWRlclxuMTk1NzpcdFx0XHQgKiB0byB0aGUgYWN0dWFsIEwyL0wzIGJvdW5kYXJ5IHNvIHRoZSB0cmFuc3BvcnQgaGVhZGVyIHByb2JlXG4xOTU4Olx0XHRcdCAqIGJlbG93IGFuZCBzdWJzZXF1ZW50IEdTTyBzZWUgdGhlIHJpZ2h0IEwzLlxuMTk1OTpcdFx0XHQgKi9cbjE5NjA6XHRcdFx0aWYgKCFpc192bGFuIFx1MDAyNlx1MDAyNiBzb2NrLVx1MDAzZXR5cGUgPT0gU09DS19SQVcgXHUwMDI2XHUwMDI2XG4xOTYxOlx0XHRcdCAgICBza2ItXHUwMDNlZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuIFx1MDAzYyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbilcbjE5NjI6XHRcdFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VtaW5faGVhZGVyX2xlbik7XG4xOTYzOlx0XHR9XG4xOTY0Olx0XG4xOTY1Olx0XHRza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuMTk2NjpcdFxuMTk2NzpcdFx0LyogTW92ZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgcmlnaHQgcG9zaXRpb24gZm9yIFZMQU4gdGFnZ2VkIHBhY2tldHMgKi9cbjE5Njg6XHRcdGlmIChpc192bGFuIFx1MDAyNlx1MDAyNlxuMTk2OTpcdFx0ICAgIHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCwgXHUwMDI2ZGVwdGgpICE9IDApXG4xOTcwOlx0XHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7XG4xOTcxOlx0fVxuMTk3MjpcdFxuMTk3MzpcdC8qXG4xOTc0Olx0ICpcdE91dHB1dCBhIHJhdyBwYWNrZXQgdG8gYSBkZXZpY2UgbGF5ZXIuIFRoaXMgYnlwYXNzZXMgYWxsIHRoZSBvdGhlclxuMTk3NTpcdCAqXHRwcm90b2NvbCBsYXllcnMgYW5kIHlvdSBtdXN0IHRoZXJlZm9yZSBzdXBwbHkgaXQgd2l0aCBhIGNvbXBsZXRlIGZyYW1lXG4xOTc2Olx0ICovXG4xOTc3Olx0XG4xOTc4Olx0c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbjE5Nzk6XHRcdFx0XHQgICAgICAgc2l6ZV90IGxlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzc0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBhY2tldCBIZWFkZXIgUGFyc2luZyBpbiBhZl9wYWNrZXQuYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBzdHJ1Y3R1cmUgb2YgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCB3aXRoaW4gdGhlIGBhZl9wYWNrZXQuY2AgbW9kdWxlLiBNeSBnb2FsIGhlcmUgaXMgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aGVyZSB0aGlzIGNydWNpYWwgZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhpcyBpcyBvZnRlbiB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGRlYnVnZ2luZyBvciB1bmRlcnN0YW5kaW5nIGRhdGEgZmxvdywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwYWNrZXQgaGFuZGxpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbuKAmXMgY29udGV4dCB3aXRoaW4gdGhlIGFmX3BhY2tldCBtb2R1bGUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgaW5mb3JtYXRpb24gYmVpbmcgcGFyc2VkIGNvbWVzIGZyb20gYW5kIHdoZXJlIGl0IGlzIHN1YnNlcXVlbnRseSBzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhY2tldF9wYXJzZV9oZWFkZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xODY5PXN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTM0LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxOTM1OnN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5MzYte1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTk3OD1zdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjA5NS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjA5NjpcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIwOTctXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNjA1PXN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY4My1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjY4NDpcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2ODUtXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yOTg3PXN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTE0LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTE1Olx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzExNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzkyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQWN0aXZhdGlvbiBvZiBhZl9wYWNrZXQuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyBgYWZfcGFja2V0LmNgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsJiMzOTtzIHNvdXJjZSBhbmQgcGlucG9pbnQgdGhlIHJlbGV2YW50IEtjb25maWcgYW5kIE1ha2VmaWxlIGVudHJpZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgc3RhcnRpbmcgYnkgZXhhbWluaW5nIGBuZXQvcGFja2V0L0tjb25maWdgIGFuZCBgbmV0L3BhY2tldC9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNsdWVzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHByb2Nlc3MuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGl0IGJhY2sgdG8gdGhlIGhpZ2hlci1sZXZlbCBjb25maWcgb3B0aW9ucyBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz01OTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9oZWFkICpwdHlwZV9oZWFkKGNvbnN0IHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTk2LVx0aWYgKHB0LVx1MDAzZXR5cGUgPT0gaHRvbnMoRVRIX1BfQUxMKSkge1xubmV0L2NvcmUvZGV2LmM6NTk3Olx0XHRpZiAoIXB0LVx1MDAzZWFmX3BhY2tldF9uZXQgXHUwMDI2XHUwMDI2ICFwdC1cdTAwM2VkZXYpXG5uZXQvY29yZS9kZXYuYy01OTgtXHRcdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2NvcmUvZGV2LmMtNjAwLVx0XHRyZXR1cm4gcHQtXHUwMDNlZGV2ID8gXHUwMDI2cHQtXHUwMDNlZGV2LVx1MDAzZXB0eXBlX2FsbCA6XG5uZXQvY29yZS9kZXYuYzo2MDE6XHRcdFx0XHQgXHUwMDI2cHQtXHUwMDNlYWZfcGFja2V0X25ldC1cdTAwM2VwdHlwZV9hbGw7XG5uZXQvY29yZS9kZXYuYy02MDItXHR9XG4tLVxubmV0L2NvcmUvZGV2LmMtNjA2LVxubmV0L2NvcmUvZGV2LmM6NjA3Olx0cmV0dXJuIHB0LVx1MDAzZWFmX3BhY2tldF9uZXQgPyBcdTAwMjZwdC1cdTAwM2VhZl9wYWNrZXRfbmV0LVx1MDAzZXB0eXBlX3NwZWNpZmljIDpcbm5ldC9jb3JlL2Rldi5jLTYwOC1cdFx0XHRcdCBcdTAwMjZwdHlwZV9iYXNlW250b2hzKHB0LVx1MDAzZXR5cGUpIFx1MDAyNiBQVFlQRV9IQVNIX01BU0tdO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTI1Mzk9c3RhdGljIGlubGluZSBib29sIHNrYl9sb29wX3NrKHN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9kZXYuYy0yNTQwLXtcbm5ldC9jb3JlL2Rldi5jOjI1NDE6XHRpZiAoIXB0eXBlLVx1MDAzZWFmX3BhY2tldF9wcml2IHx8ICFza2ItXHUwMDNlc2spXG5uZXQvY29yZS9kZXYuYy0yNTQyLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubmV0L2NvcmUvZGV2LmMtMjU0NS1cdFx0cmV0dXJuIHB0eXBlLVx1MDAzZWlkX21hdGNoKHB0eXBlLCBza2ItXHUwMDNlc2spO1xubmV0L2NvcmUvZGV2LmM6MjU0NjpcdGVsc2UgaWYgKChzdHJ1Y3Qgc29jayAqKXB0eXBlLVx1MDAzZWFmX3BhY2tldF9wcml2ID09IHNrYi1cdTAwM2Vzaylcbm5ldC9jb3JlL2Rldi5jLTI1NDctXHRcdHJldHVybiB0cnVlO1xuLS1cbm5ldC9jb3JlL25ldC1wcm9jZnMuYz0yMjk9c3RhdGljIHZvaWQgKnB0eXBlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbi0tXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMjYwLVxubmV0L2NvcmUvbmV0LXByb2Nmcy5jOjI2MTpcdGlmIChwdC1cdTAwM2VhZl9wYWNrZXRfbmV0KSB7XG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMjYyLW5ldF9wdHlwZV9hbGw6XG4tLVxubmV0L2NvcmUvbmV0LXByb2Nmcy5jPTI5Mz1zdGF0aWMgaW50IHB0eXBlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0zMDMtXHRkZXYgPSBpdGVyLVx1MDAzZWRldjtcbm5ldC9jb3JlL25ldC1wcm9jZnMuYzozMDQ6XHRpZiAoKCFwdC1cdTAwM2VhZl9wYWNrZXRfbmV0IHx8IG5ldF9lcShwdC1cdTAwM2VhZl9wYWNrZXRfbmV0LCBzZXFfZmlsZV9uZXQoc2VxKSkpIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvbmV0LXByb2Nmcy5jLTMwNS1cdFx0ICghZGV2IHx8IG5ldF9lcShkZXZfbmV0KGRldiksIHNlcV9maWxlX25ldChzZXEpKSkpIHtcbi0tXG5uZXQvY29yZS9zZWxmdGVzdHMuYz0xNTk9c3RhdGljIGludCBuZXRfdGVzdF9sb29wYmFja192YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTE2My17XG5uZXQvY29yZS9zZWxmdGVzdHMuYzoxNjQ6XHRzdHJ1Y3QgbmV0X3Rlc3RfcHJpdiAqdHByaXYgPSBwdC1cdTAwM2VhZl9wYWNrZXRfcHJpdjtcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTE2NS1cdGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYyA9IHRwcml2LVx1MDAzZXBhY2tldC1cdTAwM2VzcmM7XG4tLVxubmV0L2NvcmUvc2VsZnRlc3RzLmM9MjMzPXN0YXRpYyBpbnQgX19uZXRfdGVzdF9sb29wYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5uZXQvY29yZS9zZWxmdGVzdHMuYy0yNDktXHR0cHJpdi1cdTAwM2VwdC5kZXYgPSBuZGV2O1xubmV0L2NvcmUvc2VsZnRlc3RzLmM6MjUwOlx0dHByaXYtXHUwMDNlcHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjtcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTI1MS1cdHRwcml2LVx1MDAzZXBhY2tldCA9IGF0dHI7XG4tLVxubmV0L3BhY2tldC9LY29uZmlnPTY9Y29uZmlnIFBBQ0tFVFxuLS1cbm5ldC9wYWNrZXQvS2NvbmZpZy0xNC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG5uZXQvcGFja2V0L0tjb25maWc6MTU6XHQgIGJlIGNhbGxlZCBhZl9wYWNrZXQuXG5uZXQvcGFja2V0L0tjb25maWctMTYtXG4tLVxubmV0L3BhY2tldC9NYWtlZmlsZS01LVxubmV0L3BhY2tldC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19QQUNLRVQpICYjNDM7PSBhZl9wYWNrZXQub1xubmV0L3BhY2tldC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19QQUNLRVRfRElBRykgJiM0Mzs9IGFmX3BhY2tldF9kaWFnLm9cbm5ldC9wYWNrZXQvTWFrZWZpbGU6ODphZl9wYWNrZXRfZGlhZy15ICYjNDM7PSBkaWFnLm9cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE0Njg9c3RhdGljIGludCBwYWNrZXRfcmN2X2Zhbm91dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTQ3MC17XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE0NzE6XHRzdHJ1Y3QgcGFja2V0X2Zhbm91dCAqZiA9IHB0LVx1MDAzZWFmX3BhY2tldF9wcml2O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNDcyLVx0dW5zaWduZWQgaW50IG51bSA9IFJFQURfT05DRShmLVx1MDAzZW51bV9tZW1iZXJzKTtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE1NTk9c3RhdGljIGJvb2wgbWF0Y2hfZmFub3V0X2dyb3VwKHN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE1NjMtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE1NjQ6XHRyZXR1cm4gcHR5cGUtXHUwMDNlYWZfcGFja2V0X3ByaXYgPT0gcGt0X3NrKHNrKS1cdTAwM2VmYW5vdXQ7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE1NjUtfVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTY5MD1zdGF0aWMgaW50IGZhbm91dF9hZGQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmFub3V0X2FyZ3MgKmFyZ3MpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNzgzLVx0XHRtYXRjaC1cdTAwM2Vwcm90X2hvb2suZnVuYyA9IHBhY2tldF9yY3ZfZmFub3V0O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxNzg0Olx0XHRtYXRjaC1cdTAwM2Vwcm90X2hvb2suYWZfcGFja2V0X3ByaXYgPSBtYXRjaDtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTc4NTpcdFx0bWF0Y2gtXHUwMDNlcHJvdF9ob29rLmFmX3BhY2tldF9uZXQgPSByZWFkX3BuZXQoXHUwMDI2bWF0Y2gtXHUwMDNlbmV0KTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTc4Ni1cdFx0bWF0Y2gtXHUwMDNlcHJvdF9ob29rLmlkX21hdGNoID0gbWF0Y2hfZmFub3V0X2dyb3VwO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTg2OT1zdGF0aWMgaW50IHBhY2tldF9yY3Zfc3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTg3OS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTg4MDpcdHNrID0gcHQtXHUwMDNlYWZfcGFja2V0X3ByaXY7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE4ODEtXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMTUxPXN0YXRpYyBpbnQgcGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjE2NC1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjE2NTpcdHNrID0gcHQtXHUwMDNlYWZfcGFja2V0X3ByaXY7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxNjYtXHRwbyA9IHBrdF9zayhzayk7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjY0PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIyOTMtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIyOTQ6XHRzayA9IHB0LVx1MDAzZWFmX3BhY2tldF9wcml2O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjk1LVx0cG8gPSBwa3Rfc2soc2spO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MzM4MT1zdGF0aWMgaW50IHBhY2tldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zNDMyLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozNDMzOlx0cG8tXHUwMDNlcHJvdF9ob29rLmFmX3BhY2tldF9wcml2ID0gc2s7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjM0MzQ6XHRwby1cdTAwM2Vwcm90X2hvb2suYWZfcGFja2V0X25ldCA9IHNvY2tfbmV0KHNrKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQzNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTkyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIFBhY2tldCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXJuZWwmIzM5O3MgcGFja2V0IGhhbmRsaW5nIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gY3JhY2sgb3BlbiB0aGUgYG5ldC9wYWNrZXQvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCwgY3JpdGljYWxseSwgdGhlaXIgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHVuZGVyc3RhbmRpbmcgaG93IHZhcmlvdXMgcGFja2V0IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGxpZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MsIHRoZSBjb3JlIGtub2JzIHRoYXQgY29udHJvbCB0aGUgZW50aXJlIHBhY2tldCBwcm9jZXNzaW5nIHN1YnN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGVxdWFsbHkgaW1wb3J0YW50OyBzZWVpbmcgd2hpY2ggb3B0aW9ucyBhcmUgY29udGluZ2VudCBvbiBvdGhlcnMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHZpZXcgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJhY3Rpb24gb3IgY29uZmxpY3QuIExldCYjMzk7cyBzZWUgd2hhdCBgS2NvbmZpZ2AgcmV2ZWFscy4uLiB0aW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcGFja2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBQYWNrZXQgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgUEFDS0VUXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgc29ja2V0XCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoZSBQYWNrZXQgcHJvdG9jb2wgaXMgdXNlZCBieSBhcHBsaWNhdGlvbnMgd2hpY2ggY29tbXVuaWNhdGVcbiAgMTA6XHRcdCAgZGlyZWN0bHkgd2l0aCBuZXR3b3JrIGRldmljZXMgd2l0aG91dCBhbiBpbnRlcm1lZGlhdGUgbmV0d29ya1xuICAxMTpcdFx0ICBwcm90b2NvbCBpbXBsZW1lbnRlZCBpbiB0aGUga2VybmVsLCBlLmcuIHRjcGR1bXAuICBJZiB5b3Ugd2FudCB0aGVtXG4gIDEyOlx0XHQgIHRvIHdvcmssIGNob29zZSBZLlxuICAxMzpcdFxuICAxNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMTU6XHRcdCAgYmUgY2FsbGVkIGFmX3BhY2tldC5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgUEFDS0VUX0RJQUdcbiAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O1BhY2tldDogc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBQQUNLRVRcbiAgMjI6XHRcdGRlZmF1bHQgblxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBTdXBwb3J0IGZvciBQRl9QQUNLRVQgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxuICAyNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTA4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlZMQU4vODAyLjFRIFJlbGV2YW5jZSBDaGVjayoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIFZMQU4gb3IgODAyLjFRIGlzIGV2ZW4gcGxheWluZyBhIHJvbGUgaGVyZS4gVGhlIGNvZGUmIzM5O3MgZG9pbmcgYSBmZXcgdGhpbmdzIHRoYXQgZ2l2ZSBtZSBhIGh1bmNoOiBgaXNfdmxhbiA9IGV0aF90eXBlX3ZsYW4oc2tiLSZndDtwcm90b2NvbClgLCBgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHNrYiwgc2tiLSZndDtwcm90b2NvbCwgJmFtcDtkZXB0aClgLCBhbmQgdGhlbiBpdCYjMzk7cyBjb21wYXJpbmcgYHNrYi0mZ3Q7ZGV2LSZndDttaW5faGVhZGVyX2xlbmAgYWdhaW5zdCBgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbmAuIFRoYXQgbGFzdCBvbmUgaGFzIG15IGF0dGVudGlvbi4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBWTEFOIGludGVyZmFjZXMgbGlrZSA4MDIuMVEgc3ViaW50ZXJmYWNlcyBvciBtYWN2bGFuIGRldmljZXMuIFdpdGggVkxBTnMsIHdlIG9mdGVuIHNlZSBgaGFyZF9oZWFkZXJfbGVuYCBiZWluZyBncmVhdGVyIHRoYW4gYG1pbl9oZWFkZXJfbGVuYCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgYENPTkZJR19WTEFOXzgwMjFRYCBpbiB0aGUga2VybmVsIGNvbmZpZyBtaWdodCBiZSB0aGUga2V5LiBMZXQgbWUgZ28gY2hlY2sgdGhhdCBLY29uZmlnIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZMQU5fODAyMVEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9LY29uZmlnLTUtXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXG5uZXQvODAyMXEvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XCYjMzQ7XG4tLVxubmV0LzgwMjFxL0tjb25maWctMjEtXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7R1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC84MDIxcS9LY29uZmlnLTMxLVxubmV0LzgwMjFxL0tjb25maWc6MzI6Y29uZmlnIFZMQU5fODAyMVFfTVZSUFxubmV0LzgwMjFxL0tjb25maWctMzMtXHRib29sIFwmIzM0O01WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NDQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhY2tldCBTb2NrZXQgSGVhZGVyIFBhcnNpbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZm9jdXMgc3ltYm9scyBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUsIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGF0IGlzLiBJJiMzOTtsbCBzdGFydCBieSB0cmFjaW5nIHRoZSBlbnRyeSBwb2ludHMgb3IgdGhlIGNhbGxlcnMgb2YgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCB3aXRoaW4gYGFmX3BhY2tldC5jYC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHRoZSBjb250cm9sIGZsb3cuCgpPa2F5LCBzbyBpbiBgYWZfcGFja2V0LmNgLCBJIHNlZSBhIGZldyBrZXkgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ6IGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfZmlsbF9za2JgIOKAkyB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGVpdGhlciBgcGFja2V0X3NuZGAgb3IgYHRwYWNrZXRfc25kYCDigJMgYW5kIHRoZW4gYHBhY2tldF9zbmRgIGRpcmVjdGx5LiBHb29kLgoKTm93IHRoYXQgSSBoYXZlIGEgaGFuZGxlIG9uIHRoZSBtYWluIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhlIGhlYWRlciBwYXJzaW5nIHByb2Nlc3MsIEkmIzM5O2xsIHR1cm4gbXkgYXR0ZW50aW9uIHRvd2FyZHMgYSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiBob3cgcGFja2V0IHNvY2tldHMgdHJhbnNtaXQgcGFja2V0cyB3aXRoaW4gYGFmX3BhY2tldC5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBwcm9wZXIgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFja2V0X3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGFja2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE5MzU9c3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5NzctXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE5Nzg6c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTk3OS1cdFx0XHQgICAgICAgc2l6ZV90IGxlbilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI3NTc9c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzc5LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzgwOlx0LyogcGFja2V0X3NlbmRtc2coKSBjaGVjayBvbiB0eF9yaW5nLnBnX3ZlYyB3YXMgbG9ja2xlc3MsXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3ODEtXHQgKiB3ZSBuZWVkIHRvIGNvbmZpcm0gaXQgdW5kZXIgcHJvdGVjdGlvbiBvZiBwZ192ZWNfbG9jay5cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5ODc9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxNDUtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxNDY6c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxNDcte1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDY5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzX3Nwa3QgPSB7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NzA1LVx0LnNodXRkb3duID1cdHNvY2tfbm9fc2h1dGRvd24sXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ3MDY6XHQuc2VuZG1zZyA9XHRwYWNrZXRfc2VuZG1zZ19zcGt0LFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NzA3LVx0LnJlY3Ztc2cgPVx0cGFja2V0X3JlY3Ztc2csXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00NzExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHMgPSB7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NzI2LVx0LmdldHNvY2tvcHRfaXRlciA9XHRwYWNrZXRfZ2V0c29ja29wdCxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDcyNzpcdC5zZW5kbXNnID1cdHBhY2tldF9zZW5kbXNnLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NzI4LVx0LnJlY3Ztc2cgPVx0cGFja2V0X3JlY3Ztc2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2ODUKCQkJCQkJCW91dHB1dDogMTQ0CgkJCQkJCQl0aG91Z2h0czogNjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IEFGX1BBQ0tFVCBUWCBQYXRoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgaW52ZXN0aWdhdGlvbiBmb2N1c2VkIG9uIHRoZSB0cmFuc21pc3Npb24gKFRYKSBwYXRocyB3aXRoaW4gdGhlIGBhZl9wYWNrZXRgIHN1YnN5c3RlbS4gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUga2V5IGZ1bmN0aW9uIGNhbGxzOiBgcGFja2V0X3NlbmRtc2dgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgLCBhbG9uZyB3aXRoIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCB3aGljaCBpcyBzcGVjaWZpYyB0byBgcGFja2V0X29wc19zcGt0YC4gSXQmIzM5O3Mgd29ydGggbm90aW5nIHRoYXQgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBpcyBhIHN0YXRpYyBoZWxwZXIgdXNlZCBieSBzZXZlcmFsIG9mIHRoZXNlLCBwYXJ0aWN1bGFybHkgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgdHBhY2tldF9maWxsX3NrYmAsIGFuZCBgcGFja2V0X3NuZGAuIEltcG9ydGFudGx5LCBgcGFja2V0X3NuZGAsIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zZW5kbXNnYCwgYW5kIGB0cGFja2V0X3NuZGAgY29uc3RpdHV0ZSB0aGUgcHJpbWFyeSBUWCBlbnRyeSBwb2ludHMuCgpUaGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgYXJlYSBpcyBzdWl0YWJsZSBmb3IgZnV6emluZywgYW5kIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gdG91Y2hlcyByZWFjaGFibGUga2VybmVsIG5ldHdvcmtpbmcgbG9naWMgd2l0aGluIGBhZl9wYWNrZXQuY2AuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0byBtb2RpZnkgdGhlIGBuZXR3b3JrX2hlYWRlcmAgZm9yIG5vbi1WTEFOIGBTT0NLX1JBV2AgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hlcmUgYGhhcmRfaGVhZGVyX2xlbiAmZ3Q7IG1pbl9oZWFkZXJfbGVuYC4gVGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBmb2N1c2VzIG9uIHRoZSBwYXJzaW5nIG9mIGhlYWRlcnMgZm9yIHJhdyBmcmFtZXMgc2VudCB2aWEgcGFja2V0IHNvY2tldHMuIFRoZSBhdHRhY2sgc3VyZmFjZSBpcyBlYXNpbHkgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzLCBuYW1lbHkgYHNvY2tldChBRl9QQUNLRVQsIFNPQ0tfUkFXLCAuLi4pYCBhbmQgYHNlbmR0bygpYC9gc2VuZG1zZygpYC4gVGhpcyBtYWtlcyBpdCBpZGVhbCBmb3IgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIHNvbGlkaWZ5IHRoZSByZXF1aXJlbWVudHMgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLiBXZSBuZWVkIHRvIGRlZmluZSB0d28gY3J1Y2lhbCBjb21wb25lbnRzOiBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBGb3IgdGhlIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTt2ZSBzZWxlY3RlZCB0aGUgbWFpbiBlbnRyeSBwb2ludHM6IGBwYWNrZXRfc2VuZG1zZ2AsIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gQWx0aG91Z2ggYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBpcyByZWxldmFudCwgSSBwcmVmZXIgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLgoKRm9yIGBFbmFibGVDb25maWdzYCwgd2UgbmVlZCB0byBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgYFBBQ0tFVGAgaXMgZXNzZW50aWFsIChkdWgpLCBhbmQgYFZMQU5fODAyMVFgIGlzIGJlbmVmaWNpYWwgYmVjYXVzZSBpdCBoZWxwcyB0cmlnZ2VyIHRoZSBgbWluX2hlYWRlcl9sZW4gJmx0OyBoYXJkX2hlYWRlcl9sZW5gIGNvbmRpdGlvbiwgYXMgaGlnaGxpZ2h0ZWQgaW4gdGhlIGFzc29jaWF0ZWQgY29tbWVudHMuIEkgdmVyaWZpZWQgdGhlc2UgbWFwcGluZ3MgaW4gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgKGBuZXQvcGFja2V0L0tjb25maWdgIGFuZCBgbmV0LzgwMjFxL0tjb25maWdgKS4KCkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyOgoKKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O1BBQ0tFVCYjMzQ7LCAmIzM0O1ZMQU5fODAyMVEmIzM0O11gCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O3BhY2tldF9zZW5kbXNnJiMzNDssICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7LCAmIzM0O3BhY2tldF9zbmQmIzM0OywgJiMzNDt0cGFja2V0X3NuZCYjMzQ7XWAKKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAKKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGFuZCBmdW5jdGlvbmFsIGFuYWx5c2lzLCBqdXN0aWZ5aW5nIHRoZSBmdXp6aW5nIGRlY2lzaW9uLgoKV2l0aCB0aGlzIGNvbXByZWhlbnNpdmUgYW5hbHlzaXMgY29tcGxldGUsIEkmIzM5O20gY29uZmlkZW50IHdlIGNhbiBwcm9jZWVkIHdpdGggZnV6emluZyB0aGlzIHRhcmdldC4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFja2V0X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRlciBwYXJzaW5nIGluIGFmX3BhY2tldCAocGFja2V0X3BhcnNlX2hlYWRlcnMpIGZvciBTT0NLX1JBVyBwYWNrZXQgc29ja2V0cyBvdmVyIEV0aGVybmV0IGRldmljZXMgd2hlcmUgaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgbWluX2hlYWRlcl9sZW4uIFRoaXMgY2hhbmdlcyB0aGUgbmV0d29yayBhbmQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIHVzZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiBhbmQgR1NPLCBhZmZlY3RpbmcgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgQUZfUEFDS0VUIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFja2V0X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRlciBwYXJzaW5nIGluIGFmX3BhY2tldCAocGFja2V0X3BhcnNlX2hlYWRlcnMpIGZvciBTT0NLX1JBVyBwYWNrZXQgc29ja2V0cyBvdmVyIEV0aGVybmV0IGRldmljZXMgd2hlcmUgaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgbWluX2hlYWRlcl9sZW4uIFRoaXMgY2hhbmdlcyB0aGUgbmV0d29yayBhbmQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIHVzZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiBhbmQgR1NPLCBhZmZlY3RpbmcgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgQUZfUEFDS0VUIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBwYWNrZXRfcGFyc2VfaGVhZGVycygpYCBpbiBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgdG8gcHJvcGVybHkgcG9zaXRpb24gdGhlIG5ldHdvcmsgaGVhZGVyIG9mZnNldCBmb3Igbm9uLVZMQU4gYFNPQ0tfUkFXYCBmcmFtZXMgb24gRXRoZXJuZXQgZGV2aWNlcyB3aGVyZSBgbWluX2hlYWRlcl9sZW4gXHUwMDNjIGhhcmRfaGVhZGVyX2xlbmAuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tICoqS01TQU4qKjogS01TQU4gZGV0ZWN0cyB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlIGJvb2xlYW4gbG9jYWwgdmFyaWFibGUgKGBpc192bGFuYCksIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgc2V0IHRvIGBldGhfdHlwZV92bGFuKHNrYi1cdTAwM2Vwcm90b2NvbClgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgc3RydWN0dXJlcywgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbi0gKipLQVNBTiAvIFN0YW5kYXJkIFNhbml0aXplcnMqKjogVGhlIGNoYW5nZXMgb25seSBhZGp1c3QgaW50ZXJuYWwgYHNrYmAgaGVhZGVyIG9mZnNldHMgKGBtYWNfaGVhZGVyYCwgYG5ldHdvcmtfaGVhZGVyYCwgYHRyYW5zcG9ydF9oZWFkZXJgKSBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbi4gQW55IHBvdGVudGlhbCBvZmZzZXQgb3Igc2l6aW5nIGlzc3VlcyBhZmZlY3RpbmcgcGF5bG9hZCBib3VuZHMgZHVyaW5nIHBhY2tldCBwYXJzaW5nIG9yIEdTTyB3b3VsZCBiZSBvdXQtb2YtYm91bmRzL2JvdW5kcy1jaGVjayBpc3N1ZXMgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJhMjc3Mzc4YjA1NDkyZjVkZDFjMTU2NjZlY2RkNjA5Y2FkNTgxYTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwODowODoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IDExNjhiZDZiMDljZDYuLmJlNWJmOWRiN2VhMTUgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtMTkzNSw2ICYjNDM7MTkzNSw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiBzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewogCWludCBkZXB0aDsKJiM0MzsJYm9vbCBpc192bGFuID0gZmFsc2U7CiAKIAkvKiBPbiBUWCBza2ItJmd0O2RhdGEgaXMgdGhlIEwyIGhlYWRlcjsgYW5jaG9yIGl0IGZvciBhbGwgc29ja2V0IHR5cGVzLiAqLwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CkBAIC0xOTQzLDExICYjNDM7MTk0NCwyOCBAQCBzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogCSAgICBzb2NrLSZndDt0eXBlID09IFNPQ0tfUkFXKQogCQlza2ItJmd0O3Byb3RvY29sID0gZGV2X3BhcnNlX2hlYWRlcl9wcm90b2NvbChza2IpOwogCiYjNDM7CWlmIChsaWtlbHkoc2tiLSZndDtkZXYtJmd0O3R5cGUgPT0gQVJQSFJEX0VUSEVSKSkgewomIzQzOwkJaXNfdmxhbiA9IGV0aF90eXBlX3ZsYW4oc2tiLSZndDtwcm90b2NvbCk7CiYjNDM7CiYjNDM7CQkvKiBGb3Igbm9uLVZMQU4gU09DS19SQVcgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hvc2UKJiM0MzsJCSAqIGhhcmRfaGVhZGVyX2xlbiBleGNlZWRzIHRoZSBvbi13aXJlIEwyIGhlYWRlciBsZW5ndGgKJiM0MzsJCSAqIChtaW5faGVhZGVyX2xlbikgLS0gZS5nLiBzb2Z0d2FyZS1vZmZsb2FkIFZMQU4gc3ViaW50ZXJmYWNlcywKJiM0MzsJCSAqIG9yIEV0aGVybmV0IGRyaXZlcnMgdGhhdCByZXNlcnZlIGV4dHJhIHNwYWNlIGluCiYjNDM7CQkgKiBoYXJkX2hlYWRlcl9sZW4gZm9yIGRyaXZlci1pbnRlcm5hbCB3cmFwcGluZyAtLSB0aGUgU09DS19SQVcKJiM0MzsJCSAqIHNlbmQgcGF0aHMgbGVhdmUgbmV0d29ya19oZWFkZXIgYXQgaGFyZF9oZWFkZXJfbGVuLCB3aGlsZSB0aGUKJiM0MzsJCSAqIHVzZXIgZnJhbWUmIzM5O3MgTDMgc2l0cyBhdCBtaW5faGVhZGVyX2xlbi4gTW92ZSBuZXR3b3JrX2hlYWRlcgomIzQzOwkJICogdG8gdGhlIGFjdHVhbCBMMi9MMyBib3VuZGFyeSBzbyB0aGUgdHJhbnNwb3J0IGhlYWRlciBwcm9iZQomIzQzOwkJICogYmVsb3cgYW5kIHN1YnNlcXVlbnQgR1NPIHNlZSB0aGUgcmlnaHQgTDMuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghaXNfdmxhbiAmYW1wOyZhbXA7IHNvY2stJmd0O3R5cGUgPT0gU09DS19SQVcgJmFtcDsmYW1wOwomIzQzOwkJICAgIHNrYi0mZ3Q7ZGV2LSZndDttaW5faGVhZGVyX2xlbiAmbHQ7IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pCiYjNDM7CQkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYi0mZ3Q7ZGV2LSZndDttaW5faGVhZGVyX2xlbik7CiYjNDM7CX0KJiM0MzsKIAlza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCiAJLyogTW92ZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgcmlnaHQgcG9zaXRpb24gZm9yIFZMQU4gdGFnZ2VkIHBhY2tldHMgKi8KLQlpZiAobGlrZWx5KHNrYi0mZ3Q7ZGV2LSZndDt0eXBlID09IEFSUEhSRF9FVEhFUikgJmFtcDsmYW1wOwotCSAgICBldGhfdHlwZV92bGFuKHNrYi0mZ3Q7cHJvdG9jb2wpICZhbXA7JmFtcDsKJiM0MzsJaWYgKGlzX3ZsYW4gJmFtcDsmYW1wOwogCSAgICB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItJmd0O3Byb3RvY29sLCAmYW1wO2RlcHRoKSAhPSAwKQogCQlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIE5lZWQgZm9yIGEgRGVkaWNhdGVkIEtNU0FOIEZ1enppbmcgU2Vzc2lvbioqCgpPa2F5LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIHRvIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCB3YXJyYW50cyBhIGZ1bGwtYmxvd24gS01TQU4gZnV6emluZyBzZXNzaW9uIHdpdGhpbiBzeXprYWxsZXIuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHksIHRoZSB3YXkgSSBhbHdheXMgZG8uCgpGaXJzdCwgcmlzayBhc3Nlc3NtZW50LiBObyByZWQgZmxhZ3MgaGVyZS4gVGhpcyBpc24mIzM5O3QgYWJvdXQgb2ZmZW5zaXZlIGNvZGUsIGV4cGxvaXQgZ2VuZXJhdGlvbiwgb3IgYW55dGhpbmcgbWFsaWNpb3VzLiBJdCYjMzk7cyBhIHN0cmFpZ2h0LXVwIGNvZGUgcmV2aWV3L3NlY3VyaXR5IGFzc2Vzc21lbnQgYW5kIGZ1enppbmcgY29uZmlndXJhdGlvbiBkZWNpc2lvbi4gSSBjbGFzc2lmeSB0aGlzIGFzICYjMzQ7QmVuaWduJiMzNDsgLSBkZXZlbG9wZXIgdG9vbGluZy9rZXJuZWwgZnV6emluZyBhbmFseXNpcy4gVGhlIHJlcXVlc3QgaXMgZnVsbHkgZnVsZmlsbGFibGUuIEdvb2QuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLiBUaW1lIHRvIGdldCBhIGNsb3NlIGxvb2suIEkmIzM5O2xsIHJlYWQgYXJvdW5kIGxpbmUgMTkzNSBpbiBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AsIHByb2JhYmx5IHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXImIzM5O3MgZmFzdGVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzIHRvIG1ha2UgYSB3ZWxsLWluZm9ybWVkIGRlY2lzaW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkzMDpcdFx0a2ZyZWVfc2tiKHNrYik7XG4xOTMxOlx0b29tOlxuMTkzMjpcdFx0cmV0dXJuIDA7XG4xOTMzOlx0fVxuMTkzNDpcdFxuMTkzNTpcdHN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXG4xOTM2Olx0e1xuMTkzNzpcdFx0aW50IGRlcHRoO1xuMTkzODpcdFx0Ym9vbCBpc192bGFuID0gZmFsc2U7XG4xOTM5Olx0XG4xOTQwOlx0XHQvKiBPbiBUWCBza2ItXHUwMDNlZGF0YSBpcyB0aGUgTDIgaGVhZGVyOyBhbmNob3IgaXQgZm9yIGFsbCBzb2NrZXQgdHlwZXMuICovXG4xOTQxOlx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuMTk0MjpcdFxuMTk0MzpcdFx0aWYgKCghc2tiLVx1MDAzZXByb3RvY29sIHx8IHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BTEwpKSBcdTAwMjZcdTAwMjZcbjE5NDQ6XHRcdCAgICBzb2NrLVx1MDAzZXR5cGUgPT0gU09DS19SQVcpXG4xOTQ1Olx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGRldl9wYXJzZV9oZWFkZXJfcHJvdG9jb2woc2tiKTtcbjE5NDY6XHRcbjE5NDc6XHRcdGlmIChsaWtlbHkoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpIHtcbjE5NDg6XHRcdFx0aXNfdmxhbiA9IGV0aF90eXBlX3ZsYW4oc2tiLVx1MDAzZXByb3RvY29sKTtcbjE5NDk6XHRcbjE5NTA6XHRcdFx0LyogRm9yIG5vbi1WTEFOIFNPQ0tfUkFXIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdob3NlXG4xOTUxOlx0XHRcdCAqIGhhcmRfaGVhZGVyX2xlbiBleGNlZWRzIHRoZSBvbi13aXJlIEwyIGhlYWRlciBsZW5ndGhcbjE5NTI6XHRcdFx0ICogKG1pbl9oZWFkZXJfbGVuKSAtLSBlLmcuIHNvZnR3YXJlLW9mZmxvYWQgVkxBTiBzdWJpbnRlcmZhY2VzLFxuMTk1MzpcdFx0XHQgKiBvciBFdGhlcm5ldCBkcml2ZXJzIHRoYXQgcmVzZXJ2ZSBleHRyYSBzcGFjZSBpblxuMTk1NDpcdFx0XHQgKiBoYXJkX2hlYWRlcl9sZW4gZm9yIGRyaXZlci1pbnRlcm5hbCB3cmFwcGluZyAtLSB0aGUgU09DS19SQVdcbjE5NTU6XHRcdFx0ICogc2VuZCBwYXRocyBsZWF2ZSBuZXR3b3JrX2hlYWRlciBhdCBoYXJkX2hlYWRlcl9sZW4sIHdoaWxlIHRoZVxuMTk1NjpcdFx0XHQgKiB1c2VyIGZyYW1lJiMzOTtzIEwzIHNpdHMgYXQgbWluX2hlYWRlcl9sZW4uIE1vdmUgbmV0d29ya19oZWFkZXJcbjE5NTc6XHRcdFx0ICogdG8gdGhlIGFjdHVhbCBMMi9MMyBib3VuZGFyeSBzbyB0aGUgdHJhbnNwb3J0IGhlYWRlciBwcm9iZVxuMTk1ODpcdFx0XHQgKiBiZWxvdyBhbmQgc3Vic2VxdWVudCBHU08gc2VlIHRoZSByaWdodCBMMy5cbjE5NTk6XHRcdFx0ICovXG4xOTYwOlx0XHRcdGlmICghaXNfdmxhbiBcdTAwMjZcdTAwMjYgc29jay1cdTAwM2V0eXBlID09IFNPQ0tfUkFXIFx1MDAyNlx1MDAyNlxuMTk2MTpcdFx0XHQgICAgc2tiLVx1MDAzZWRldi1cdTAwM2VtaW5faGVhZGVyX2xlbiBcdTAwM2Mgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pXG4xOTYyOlx0XHRcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlbWluX2hlYWRlcl9sZW4pO1xuMTk2MzpcdFx0fVxuMTk2NDpcdFxuMTk2NTpcdFx0c2tiX3Byb2JlX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbjE5NjY6XHRcbjE5Njc6XHRcdC8qIE1vdmUgbmV0d29yayBoZWFkZXIgdG8gdGhlIHJpZ2h0IHBvc2l0aW9uIGZvciBWTEFOIHRhZ2dlZCBwYWNrZXRzICovXG4xOTY4Olx0XHRpZiAoaXNfdmxhbiBcdTAwMjZcdTAwMjZcbjE5Njk6XHRcdCAgICB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXHUwMDNlcHJvdG9jb2wsIFx1MDAyNmRlcHRoKSAhPSAwKVxuMTk3MDpcdFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xuMTk3MTpcdH1cbjE5NzI6XHRcbjE5NzM6XHQvKlxuMTk3NDpcdCAqXHRPdXRwdXQgYSByYXcgcGFja2V0IHRvIGEgZGV2aWNlIGxheWVyLiBUaGlzIGJ5cGFzc2VzIGFsbCB0aGUgb3RoZXJcbjE5NzU6XHQgKlx0cHJvdG9jb2wgbGF5ZXJzIGFuZCB5b3UgbXVzdCB0aGVyZWZvcmUgc3VwcGx5IGl0IHdpdGggYSBjb21wbGV0ZSBmcmFtZVxuMTk3NjpcdCAqL1xuMTk3NzpcdFxuMTk3ODpcdHN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4xOTc5Olx0XHRcdFx0ICAgICAgIHNpemVfdCBsZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkZpbmRpbmcgdGhlIENhbGxlcnMgb2YgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY2FsbCBzaXRlcyBmb3IgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCB3aXRoaW4gdGhlIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCBmaWxlLiBObyBwcm9ibGVtLiBUaGF0JiMzOTtzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgdGFzayBmb3IgYSBnb29kIGNvZGUgc2VhcmNoLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgdG9vbCwgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBpcyBlaXRoZXIgYGdyZXBgLCBgYWNrYCwgYHJpcGdyZXBgLCBvciBwZXJoYXBzIGV2ZW4gbXkgSURFJiMzOTtzIGJ1aWx0LWluIHNlYXJjaCBmdW5jdGlvbmFsaXR5LCBkZXBlbmRpbmcgb24gd2hhdCBJJiMzOTttIHdvcmtpbmcgd2l0aCBhdCB0aGUgbW9tZW50LiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBhbGwgaW5zdGFuY2VzIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZC4gT25jZSBJIGhhdmUgdGhlIGxpc3Qgb2YgY2FsbGluZyBmdW5jdGlvbnMsIEkgY2FuIHRoZW4gZXhhbWluZSBlYWNoIG9uZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgaXMgYmVpbmcgdXNlZCBhbmQgd2hhdCB0aGUgdXBzdHJlYW0gZGF0YSBmbG93IGxvb2tzIGxpa2UuIFRoaXMgaXMgZm91bmRhdGlvbmFsIHRvIGFueSByZWFsIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgcG9ydGlvbiBvZiB0aGUgbmV0d29ya2luZyBzdGFjayB3b3Jrcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHR5cGUgb2YgcGFja2V0cyBiZWluZyBwcm9jZXNzZWQsIGVycm9yIGhhbmRsaW5nLCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGxvY2tpbmcuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWNrZXRfcGFyc2VfaGVhZGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xODY5PXN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTM0LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxOTM1OnN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5MzYte1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTk3OD1zdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjA5NS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjA5NjpcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIwOTctXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNjA1PXN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY4My1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjY4NDpcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2ODUtXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yOTg3PXN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTE0LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTE1Olx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzExNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSYjMzk7bGwgc3RhcnQgYnkgZGlzc2VjdGluZyBgcGFja2V0X3BhcnNlX2hlYWRlcnNgLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IGl0IHByb2Nlc3NlcyB0aGUgZGF0YSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHdoYXQgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0aGUgY2FsbGVycyBhcmUgcHJvdmlkaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnB1dHMgYW5kIG91dHB1dHMgaXMgY3J1Y2lhbCBmb3IgZ3Jhc3BpbmcgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBzeXN0ZW0uCgpUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBwYXRoIHRvIHNlZSBob3cgdGhlIHBhcnNlZCBoZWFkZXJzIGFyZSB1c2VkLiBJJiMzOTtsbCBsb29rIGludG8gYHBhY2tldF9zbmRgLCBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGFuZCBgdHBhY2tldF9maWxsX3NrYmAuIEV4YW1pbmluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGUgcGFyc2VkIGhlYWRlcnMgaW5mb3JtIHRoZSBhY3R1YWwgcGFja2V0IHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgaGVhZGVycyBhcmUgcGFja2FnZWQgaW50byB0aGUgcGFja2V0IGFuZCB3aGF0IGNvbnNpZGVyYXRpb25zIGFyZSBtYWRlIGZvciBkaWZmZXJlbnQgdHJhbnNtaXNzaW9uIG1ldGhvZHMuIEJ5IHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIG9mIHRoZXNlIGNvbXBvbmVudHMsIEkgc2hvdWxkIGdhaW4gYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgYXNwZWN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwODA6XHRcdH0gZWxzZSBpZiAocmVzZXJ2ZSkge1xuMzA4MTpcdFx0XHRza2JfcmVzZXJ2ZShza2IsIC1yZXNlcnZlKTtcbjMwODI6XHRcdFx0aWYgKGxlbiBcdTAwM2MgcmVzZXJ2ZSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpIFx1MDAyNlx1MDAyNlxuMzA4MzpcdFx0XHQgICAgZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuICE9IGhhcmRfaGVhZGVyX2xlbilcbjMwODQ6XHRcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbjMwODU6XHRcdH1cbjMwODY6XHRcbjMwODc6XHRcdC8qIFJldHVybnMgLUVGQVVMVCBvbiBlcnJvciAqL1xuMzA4ODpcdFx0ZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyKHNrYiwgb2Zmc2V0LCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIsIGxlbik7XG4zMDg5Olx0XHRpZiAoZXJyKVxuMzA5MDpcdFx0XHRnb3RvIG91dF9mcmVlO1xuMzA5MTpcdFxuMzA5MjpcdFx0aWYgKChzb2NrLVx1MDAzZXR5cGUgPT0gU09DS19SQVcgXHUwMDI2XHUwMDI2XG4zMDkzOlx0XHQgICAgICFkZXZfdmFsaWRhdGVfaGVhZGVyKGRldiwgc2tiLVx1MDAzZWRhdGEsIGxlbikpIHx8ICFza2ItXHUwMDNlbGVuKSB7XG4zMDk0Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4zMDk1Olx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4zMDk2Olx0XHR9XG4zMDk3Olx0XG4zMDk4Olx0XHRza2Jfc2V0dXBfdHhfdGltZXN0YW1wKHNrYiwgXHUwMDI2c29ja2MpO1xuMzA5OTpcdFxuMzEwMDpcdFx0aWYgKCF2bmV0X2hkci5nc29fdHlwZSBcdTAwMjZcdTAwMjYgKGxlbiBcdTAwM2UgZGV2LVx1MDAzZW10dSAmIzQzOyByZXNlcnZlICYjNDM7IGV4dHJhX2xlbikgXHUwMDI2XHUwMDI2XG4zMTAxOlx0XHQgICAgIXBhY2tldF9leHRyYV92bGFuX2xlbl9hbGxvd2VkKGRldiwgc2tiKSkge1xuMzEwMjpcdFx0XHRlcnIgPSAtRU1TR1NJWkU7XG4zMTAzOlx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4zMTA0Olx0XHR9XG4zMTA1Olx0XG4zMTA2Olx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBwcm90bztcbjMxMDc6XHRcdHNrYi1cdTAwM2VkZXYgPSBkZXY7XG4zMTA4Olx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSBzb2NrYy5wcmlvcml0eTtcbjMxMDk6XHRcdHNrYi1cdTAwM2VtYXJrID0gc29ja2MubWFyaztcbjMxMTA6XHRcdHNrYl9zZXRfZGVsaXZlcnlfdHlwZV9ieV9jbG9ja2lkKHNrYiwgc29ja2MudHJhbnNtaXRfdGltZSwgc2stXHUwMDNlc2tfY2xvY2tpZCk7XG4zMTExOlx0XG4zMTEyOlx0XHRpZiAodW5saWtlbHkoZXh0cmFfbGVuID09IDQpKVxuMzExMzpcdFx0XHRza2ItXHUwMDNlbm9fZmNzID0gMTtcbjMxMTQ6XHRcbjMxMTU6XHRcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XG4zMTE2Olx0XG4zMTE3Olx0XHRpZiAodm5ldF9oZHJfc3opIHtcbjMxMTg6XHRcdFx0ZXJyID0gdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgXHUwMDI2dm5ldF9oZHIsIHZpb19sZSgpKTtcbjMxMTk6XHRcdFx0aWYgKGVycilcbjMxMjA6XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuMzEyMTpcdFx0XHRsZW4gJiM0Mzs9IHZuZXRfaGRyX3N6O1xuMzEyMjpcdFx0XHR2aXJ0aW9fbmV0X2hkcl9zZXRfcHJvdG8oc2tiLCBcdTAwMjZ2bmV0X2hkcik7XG4zMTIzOlx0XHR9XG4zMTI0Olx0XG4zMTI1Olx0XHRlcnIgPSBwYWNrZXRfeG1pdChwbywgc2tiKTtcbjMxMjY6XHRcbjMxMjc6XHRcdGlmICh1bmxpa2VseShlcnIgIT0gMCkpIHtcbjMxMjg6XHRcdFx0aWYgKGVyciBcdTAwM2UgMClcbjMxMjk6XHRcdFx0XHRlcnIgPSBuZXRfeG1pdF9lcnJubyhlcnIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjgzCgkJCQkJCQlvdXRwdXQ6IDI4NwoJCQkJCQkJdGhvdWdodHM6IDg3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIGNvZGUgY2hhbmdlcyBhcmUgaW4gYHBhY2tldF9wYXJzZV9oZWFkZXJzYCwgc3BlY2lmaWNhbGx5IGZvciBub24tVkxBTiBgU09DS19SQVdgIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzLiBXaGF0JiMzOTtzIGhhcHBlbmluZyBpcyBhbiBhZGp1c3RtZW50IHRvIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgdXNpbmcgYHNrYl9zZXRfbmV0d29ya19oZWFkZXJgIHdoZW4gYHNrYi0mZ3Q7ZGV2LSZndDttaW5faGVhZGVyX2xlbmAgaXMgbGVzcyB0aGFuIGBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuYCwgYWZ0ZXIgd2hpY2ggYHNrYl9wcm9iZV90cmFuc3BvcnRfaGVhZGVyYCBpcyBjYWxsZWQsIGFuZCB0aGVuIHRoZSBWTEFOIGNoZWNrIGlmIGFwcGxpY2FibGUuCgpGaXJzdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNyaXRlcmlhIGZvciBhIEtNU0FOIGlzc3VlOiBrZXJuZWwgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbmV3IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgYm91bmRzIGNoZWNrIHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkZyb20gbXkgcmV2aWV3LCBub25lIG9mIHRoZXNlIGFyZSB0cmlnZ2VyZWQuIFRoaXMgcGF0Y2ggZGVhbHMgd2l0aCBUWCBwYXJzaW5nIGluIGBhZl9wYWNrZXRgLCBubyBrZXJuZWwgbWVtb3J5IGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYGlzX3ZsYW5gIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvciBhbnkgY2hhbmdlcyB0byB0aGUgYWxsb2NhdGlvbiByb3V0aW5lcy4gVGhlIHNrYiBidWZmZXIgcGF5bG9hZCBpcyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLCBhbmQgYWRqdXN0aW5nIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQganVzdCBjaGFuZ2VzIHdoZXJlIHRoZSBrZXJuZWwgbG9va3Mgd2l0aGluIHRoYXQgcHJlLWV4aXN0aW5nIGJ1ZmZlciBmcm9tIHVzZXIgc3BhY2UsIHNvLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEV2ZW4gaWYgYG1pbl9oZWFkZXJfbGVuYCBhbmQgYHNrYi0mZ3Q7bGVuYCBjYXVzZWQgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHRoYXQgd291bGQgYmUgYSBLQVNBTiBpc3N1ZSAoYm91bmRzLWNoZWNrKSBub3QgYSBLTVNBTiBpc3N1ZSAodW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCkuCgpUbyByZWNhcCwgdGhlIHBhdGNoIHByaW1hcmlseSBhZGp1c3RzIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgZm9yIGNlcnRhaW4gdHlwZXMgb2YgcmF3IHBhY2tldCBzb2NrZXRzLiAgS01TQU4gaXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBub3QgYm91bmRzIGNoZWNraW5nLgoKSGVyZSYjMzk7cyBteSBjbGVhciBjb25jbHVzaW9uOiB0aGVyZSYjMzk7cyBubyBldmlkZW5jZSBvZiBLTVNBTi1yZWxhdGVkIHByb2JsZW1zIGhlcmUuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgbm8gaW5mb3JtYXRpb24gbGVha2FnZSB0byB1c2VyIHNwYWNlLiAgVGhlIHZhcmlhYmxlcyBpdCB1c2VzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gU28sIGJhc2VkIG9uIG15IGV4cGVydCByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgcGFja2V0X3BhcnNlX2hlYWRlcnMoKWAgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIHRvIHByb3Blcmx5IHBvc2l0aW9uIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgZm9yIG5vbi1WTEFOIGBTT0NLX1JBV2AgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hlcmUgYG1pbl9oZWFkZXJfbGVuIFx1MDAzYyBoYXJkX2hlYWRlcl9sZW5gLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSAqKktNU0FOKio6IEtNU0FOIGRldGVjdHMgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSBhbGxvY2F0aW9ucykgYW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpbmdsZSBib29sZWFuIGxvY2FsIHZhcmlhYmxlIChgaXNfdmxhbmApLCB3aGljaCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYW5kIHNldCB0byBgZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBTYW5pdGl6ZXJzKio6IFRoZSBjaGFuZ2VzIG9ubHkgYWRqdXN0IGludGVybmFsIGBza2JgIGhlYWRlciBvZmZzZXRzIChgbWFjX2hlYWRlcmAsIGBuZXR3b3JrX2hlYWRlcmAsIGB0cmFuc3BvcnRfaGVhZGVyYCkgZm9yIHBhY2tldCB0cmFuc21pc3Npb24uIEFueSBwb3RlbnRpYWwgb2Zmc2V0IG9yIHNpemluZyBpc3N1ZXMgYWZmZWN0aW5nIHBheWxvYWQgYm91bmRzIGR1cmluZyBwYWNrZXQgcGFyc2luZyBvciBHU08gd291bGQgYmUgb3V0LW9mLWJvdW5kcy9ib3VuZHMtY2hlY2sgaXNzdWVzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgcGFja2V0X3BhcnNlX2hlYWRlcnMoKWAgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIHRvIHByb3Blcmx5IHBvc2l0aW9uIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgZm9yIG5vbi1WTEFOIGBTT0NLX1JBV2AgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hlcmUgYG1pbl9oZWFkZXJfbGVuIFx1MDAzYyBoYXJkX2hlYWRlcl9sZW5gLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSAqKktNU0FOKio6IEtNU0FOIGRldGVjdHMgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSBhbGxvY2F0aW9ucykgYW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpbmdsZSBib29sZWFuIGxvY2FsIHZhcmlhYmxlIChgaXNfdmxhbmApLCB3aGljaCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYW5kIHNldCB0byBgZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBTYW5pdGl6ZXJzKio6IFRoZSBjaGFuZ2VzIG9ubHkgYWRqdXN0IGludGVybmFsIGBza2JgIGhlYWRlciBvZmZzZXRzIChgbWFjX2hlYWRlcmAsIGBuZXR3b3JrX2hlYWRlcmAsIGB0cmFuc3BvcnRfaGVhZGVyYCkgZm9yIHBhY2tldCB0cmFuc21pc3Npb24uIEFueSBwb3RlbnRpYWwgb2Zmc2V0IG9yIHNpemluZyBpc3N1ZXMgYWZmZWN0aW5nIHBheWxvYWQgYm91bmRzIGR1cmluZyBwYWNrZXQgcGFyc2luZyBvciBHU08gd291bGQgYmUgb3V0LW9mLWJvdW5kcy9ib3VuZHMtY2hlY2sgaXNzdWVzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODoxMS45OTgxMzM4ODVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjEwNzE3NzE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUNLRVRcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ1wiLFxuICAgIFwicGFja2V0X3NlbmRtc2dfc3BrdFwiLFxuICAgIFwicGFja2V0X3NuZFwiLFxuICAgIFwidHBhY2tldF9zbmRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYHBhY2tldF9wYXJzZV9oZWFkZXJzKClgIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCB0byBwcm9wZXJseSBwb3NpdGlvbiB0aGUgbmV0d29yayBoZWFkZXIgb2Zmc2V0IGZvciBub24tVkxBTiBgU09DS19SQVdgIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdoZXJlIGBtaW5faGVhZGVyX2xlbiBcXHUwMDNjIGhhcmRfaGVhZGVyX2xlbmAuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tICoqS01TQU4qKjogS01TQU4gZGV0ZWN0cyB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlIGJvb2xlYW4gbG9jYWwgdmFyaWFibGUgKGBpc192bGFuYCksIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgc2V0IHRvIGBldGhfdHlwZV92bGFuKHNrYi1cXHUwMDNlcHJvdG9jb2wpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXFxuLSAqKktBU0FOIC8gU3RhbmRhcmQgU2FuaXRpemVycyoqOiBUaGUgY2hhbmdlcyBvbmx5IGFkanVzdCBpbnRlcm5hbCBgc2tiYCBoZWFkZXIgb2Zmc2V0cyAoYG1hY19oZWFkZXJgLCBgbmV0d29ya19oZWFkZXJgLCBgdHJhbnNwb3J0X2hlYWRlcmApIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLiBBbnkgcG90ZW50aWFsIG9mZnNldCBvciBzaXppbmcgaXNzdWVzIGFmZmVjdGluZyBwYXlsb2FkIGJvdW5kcyBkdXJpbmcgcGFja2V0IHBhcnNpbmcgb3IgR1NPIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMvYm91bmRzLWNoZWNrIGlzc3VlcyBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRlciBwYXJzaW5nIGluIGFmX3BhY2tldCAocGFja2V0X3BhcnNlX2hlYWRlcnMpIGZvciBTT0NLX1JBVyBwYWNrZXQgc29ja2V0cyBvdmVyIEV0aGVybmV0IGRldmljZXMgd2hlcmUgaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgbWluX2hlYWRlcl9sZW4uIFRoaXMgY2hhbmdlcyB0aGUgbmV0d29yayBhbmQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIHVzZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiBhbmQgR1NPLCBhZmZlY3RpbmcgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgQUZfUEFDS0VUIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA4OjExLjk5ODEzOTA5NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyOTI1OTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJhMjc3Mzc4YjA1NDkyZjVkZDFjMTU2NjZlY2RkNjA5Y2FkNTgxYTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDg6MDg6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcXG5pbmRleCAxMTY4YmQ2YjA5Y2Q2Li5iZTViZjlkYjdlYTE1IDEwMDY0NFxcbi0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcXG4rKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXFxuQEAgLTE5MzUsNiArMTkzNSw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuIHtcXG4gXFx0aW50IGRlcHRoO1xcbitcXHRib29sIGlzX3ZsYW4gPSBmYWxzZTtcXG4gXFxuIFxcdC8qIE9uIFRYIHNrYi1cXHUwMDNlZGF0YSBpcyB0aGUgTDIgaGVhZGVyOyBhbmNob3IgaXQgZm9yIGFsbCBzb2NrZXQgdHlwZXMuICovXFxuIFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuQEAgLTE5NDMsMTEgKzE5NDQsMjggQEAgc3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcXG4gXFx0ICAgIHNvY2stXFx1MDAzZXR5cGUgPT0gU09DS19SQVcpXFxuIFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBkZXZfcGFyc2VfaGVhZGVyX3Byb3RvY29sKHNrYik7XFxuIFxcbitcXHRpZiAobGlrZWx5KHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpIHtcXG4rXFx0XFx0aXNfdmxhbiA9IGV0aF90eXBlX3ZsYW4oc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuK1xcbitcXHRcXHQvKiBGb3Igbm9uLVZMQU4gU09DS19SQVcgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hvc2VcXG4rXFx0XFx0ICogaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgdGhlIG9uLXdpcmUgTDIgaGVhZGVyIGxlbmd0aFxcbitcXHRcXHQgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsXFxuK1xcdFxcdCAqIG9yIEV0aGVybmV0IGRyaXZlcnMgdGhhdCByZXNlcnZlIGV4dHJhIHNwYWNlIGluXFxuK1xcdFxcdCAqIGhhcmRfaGVhZGVyX2xlbiBmb3IgZHJpdmVyLWludGVybmFsIHdyYXBwaW5nIC0tIHRoZSBTT0NLX1JBV1xcbitcXHRcXHQgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlXFxuK1xcdFxcdCAqIHVzZXIgZnJhbWUncyBMMyBzaXRzIGF0IG1pbl9oZWFkZXJfbGVuLiBNb3ZlIG5ldHdvcmtfaGVhZGVyXFxuK1xcdFxcdCAqIHRvIHRoZSBhY3R1YWwgTDIvTDMgYm91bmRhcnkgc28gdGhlIHRyYW5zcG9ydCBoZWFkZXIgcHJvYmVcXG4rXFx0XFx0ICogYmVsb3cgYW5kIHN1YnNlcXVlbnQgR1NPIHNlZSB0aGUgcmlnaHQgTDMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIWlzX3ZsYW4gXFx1MDAyNlxcdTAwMjYgc29jay1cXHUwMDNldHlwZSA9PSBTT0NLX1JBVyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZW1pbl9oZWFkZXJfbGVuIFxcdTAwM2Mgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbilcXG4rXFx0XFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VtaW5faGVhZGVyX2xlbik7XFxuK1xcdH1cXG4rXFxuIFxcdHNrYl9wcm9iZV90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIFxcbiBcXHQvKiBNb3ZlIG5ldHdvcmsgaGVhZGVyIHRvIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgVkxBTiB0YWdnZWQgcGFja2V0cyAqL1xcbi1cXHRpZiAobGlrZWx5KHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGV0aF90eXBlX3ZsYW4oc2tiLVxcdTAwM2Vwcm90b2NvbCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0aWYgKGlzX3ZsYW4gXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cXHUwMDNlcHJvdG9jb2wsIFxcdTAwMjZkZXB0aCkgIT0gMClcXG4gXFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIGRlcHRoKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODoxMy40MjgxNTI2NTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM1MjkyODQ2MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBQ0tFVFwiLFxuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhY2tldF9zZW5kbXNnXCIsXG4gICAgXCJwYWNrZXRfc2VuZG1zZ19zcGt0XCIsXG4gICAgXCJwYWNrZXRfc25kXCIsXG4gICAgXCJ0cGFja2V0X3NuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRlciBwYXJzaW5nIGluIGFmX3BhY2tldCAocGFja2V0X3BhcnNlX2hlYWRlcnMpIGZvciBTT0NLX1JBVyBwYWNrZXQgc29ja2V0cyBvdmVyIEV0aGVybmV0IGRldmljZXMgd2hlcmUgaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgbWluX2hlYWRlcl9sZW4uIFRoaXMgY2hhbmdlcyB0aGUgbmV0d29yayBhbmQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIHVzZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiBhbmQgR1NPLCBhZmZlY3RpbmcgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgQUZfUEFDS0VUIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJhMjc3Mzc4YjA1NDkyZjVkZDFjMTU2NjZlY2RkNjA5Y2FkNTgxYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODowODoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5pbmRleCAxMTY4YmQ2YjA5Y2Q2Li5iZTViZjlkYjdlYTE1IDEwMDY0NFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuQEAgLTE5MzUsNiArMTkzNSw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gc3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcbiB7XG4gXHRpbnQgZGVwdGg7XG4rXHRib29sIGlzX3ZsYW4gPSBmYWxzZTtcbiBcbiBcdC8qIE9uIFRYIHNrYi1cdTAwM2VkYXRhIGlzIHRoZSBMMiBoZWFkZXI7IGFuY2hvciBpdCBmb3IgYWxsIHNvY2tldCB0eXBlcy4gKi9cbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG5AQCAtMTk0MywxMSArMTk0NCwyOCBAQCBzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0ICAgIHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVylcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZGV2X3BhcnNlX2hlYWRlcl9wcm90b2NvbChza2IpO1xuIFxuK1x0aWYgKGxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSkge1xuK1x0XHRpc192bGFuID0gZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpO1xuK1xuK1x0XHQvKiBGb3Igbm9uLVZMQU4gU09DS19SQVcgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hvc2VcbitcdFx0ICogaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgdGhlIG9uLXdpcmUgTDIgaGVhZGVyIGxlbmd0aFxuK1x0XHQgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsXG4rXHRcdCAqIG9yIEV0aGVybmV0IGRyaXZlcnMgdGhhdCByZXNlcnZlIGV4dHJhIHNwYWNlIGluXG4rXHRcdCAqIGhhcmRfaGVhZGVyX2xlbiBmb3IgZHJpdmVyLWludGVybmFsIHdyYXBwaW5nIC0tIHRoZSBTT0NLX1JBV1xuK1x0XHQgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlXG4rXHRcdCAqIHVzZXIgZnJhbWUncyBMMyBzaXRzIGF0IG1pbl9oZWFkZXJfbGVuLiBNb3ZlIG5ldHdvcmtfaGVhZGVyXG4rXHRcdCAqIHRvIHRoZSBhY3R1YWwgTDIvTDMgYm91bmRhcnkgc28gdGhlIHRyYW5zcG9ydCBoZWFkZXIgcHJvYmVcbitcdFx0ICogYmVsb3cgYW5kIHN1YnNlcXVlbnQgR1NPIHNlZSB0aGUgcmlnaHQgTDMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWlzX3ZsYW4gXHUwMDI2XHUwMDI2IHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHNrYi1cdTAwM2VkZXYtXHUwMDNlbWluX2hlYWRlcl9sZW4gXHUwMDNjIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKVxuK1x0XHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuKTtcbitcdH1cbitcbiBcdHNrYl9wcm9iZV90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gXG4gXHQvKiBNb3ZlIG5ldHdvcmsgaGVhZGVyIHRvIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgVkxBTiB0YWdnZWQgcGFja2V0cyAqL1xuLVx0aWYgKGxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBldGhfdHlwZV92bGFuKHNrYi1cdTAwM2Vwcm90b2NvbCkgXHUwMDI2XHUwMDI2XG4rXHRpZiAoaXNfdmxhbiBcdTAwMjZcdTAwMjZcbiBcdCAgICB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXHUwMDNlcHJvdG9jb2wsIFx1MDAyNmRlcHRoKSAhPSAwKVxuIFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA4OjEzLjQyODE1NDY5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNTU1MjY0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogRGVjb2RpbmcgdGhlIE5ldHdvcmsgUGFja2V0IEhlYWRlciBQYXJzaW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRoZSBtb2RpZmljYXRpb24gdG8gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgZnVuY3Rpb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mICpob3cqIGBhZl9wYWNrZXQuY2AgZnVuY3Rpb25zIG92ZXJhbGwgYW5kIGhvdyBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGZpdHMgaW50byB0aGF0IGFyY2hpdGVjdHVyZS5cblxuSSdtIHRoaW5raW5nIEknbGwgdXNlIGVpdGhlciBgZ3JlcHBlcmAgb3IgYSBzaW1wbGUgYHJlYWQtZmlsZWAgY29tbWFuZC4gR2l2ZW4gdGhlIGxvY2F0aW9uIG1lbnRpb24gb2YgbGluZXMgMTkzNS0xOTcwLCB0aGF0J3Mgd2hlcmUgbXkgZm9jdXMgbmVlZHMgdG8gYmUuIEkgd2FudCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsLCBhbmQgd2hhdCdzIGRpcmVjdGx5IGludGVyYWN0aW5nIHdpdGggYHBhY2tldF9wYXJzZV9oZWFkZXJzYC4gTGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBsYXJnZXIgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwaXBlbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDg6MTcuNDgzNjgzMDU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkzMDpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xOTMxOlxcdG9vbTpcXG4xOTMyOlxcdFxcdHJldHVybiAwO1xcbjE5MzM6XFx0fVxcbjE5MzQ6XFx0XFxuMTkzNTpcXHRzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbjE5MzY6XFx0e1xcbjE5Mzc6XFx0XFx0aW50IGRlcHRoO1xcbjE5Mzg6XFx0XFx0Ym9vbCBpc192bGFuID0gZmFsc2U7XFxuMTkzOTpcXHRcXG4xOTQwOlxcdFxcdC8qIE9uIFRYIHNrYi1cXHUwMDNlZGF0YSBpcyB0aGUgTDIgaGVhZGVyOyBhbmNob3IgaXQgZm9yIGFsbCBzb2NrZXQgdHlwZXMuICovXFxuMTk0MTpcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbjE5NDI6XFx0XFxuMTk0MzpcXHRcXHRpZiAoKCFza2ItXFx1MDAzZXByb3RvY29sIHx8IHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQUxMKSkgXFx1MDAyNlxcdTAwMjZcXG4xOTQ0OlxcdFxcdCAgICBzb2NrLVxcdTAwM2V0eXBlID09IFNPQ0tfUkFXKVxcbjE5NDU6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGRldl9wYXJzZV9oZWFkZXJfcHJvdG9jb2woc2tiKTtcXG4xOTQ2OlxcdFxcbjE5NDc6XFx0XFx0aWYgKGxpa2VseShza2ItXFx1MDAzZWRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpKSB7XFxuMTk0ODpcXHRcXHRcXHRpc192bGFuID0gZXRoX3R5cGVfdmxhbihza2ItXFx1MDAzZXByb3RvY29sKTtcXG4xOTQ5OlxcdFxcbjE5NTA6XFx0XFx0XFx0LyogRm9yIG5vbi1WTEFOIFNPQ0tfUkFXIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdob3NlXFxuMTk1MTpcXHRcXHRcXHQgKiBoYXJkX2hlYWRlcl9sZW4gZXhjZWVkcyB0aGUgb24td2lyZSBMMiBoZWFkZXIgbGVuZ3RoXFxuMTk1MjpcXHRcXHRcXHQgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsXFxuMTk1MzpcXHRcXHRcXHQgKiBvciBFdGhlcm5ldCBkcml2ZXJzIHRoYXQgcmVzZXJ2ZSBleHRyYSBzcGFjZSBpblxcbjE5NTQ6XFx0XFx0XFx0ICogaGFyZF9oZWFkZXJfbGVuIGZvciBkcml2ZXItaW50ZXJuYWwgd3JhcHBpbmcgLS0gdGhlIFNPQ0tfUkFXXFxuMTk1NTpcXHRcXHRcXHQgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlXFxuMTk1NjpcXHRcXHRcXHQgKiB1c2VyIGZyYW1lJ3MgTDMgc2l0cyBhdCBtaW5faGVhZGVyX2xlbi4gTW92ZSBuZXR3b3JrX2hlYWRlclxcbjE5NTc6XFx0XFx0XFx0ICogdG8gdGhlIGFjdHVhbCBMMi9MMyBib3VuZGFyeSBzbyB0aGUgdHJhbnNwb3J0IGhlYWRlciBwcm9iZVxcbjE5NTg6XFx0XFx0XFx0ICogYmVsb3cgYW5kIHN1YnNlcXVlbnQgR1NPIHNlZSB0aGUgcmlnaHQgTDMuXFxuMTk1OTpcXHRcXHRcXHQgKi9cXG4xOTYwOlxcdFxcdFxcdGlmICghaXNfdmxhbiBcXHUwMDI2XFx1MDAyNiBzb2NrLVxcdTAwM2V0eXBlID09IFNPQ0tfUkFXIFxcdTAwMjZcXHUwMDI2XFxuMTk2MTpcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZW1pbl9oZWFkZXJfbGVuIFxcdTAwM2Mgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbilcXG4xOTYyOlxcdFxcdFxcdFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2ItXFx1MDAzZWRldi1cXHUwMDNlbWluX2hlYWRlcl9sZW4pO1xcbjE5NjM6XFx0XFx0fVxcbjE5NjQ6XFx0XFxuMTk2NTpcXHRcXHRza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbjE5NjY6XFx0XFxuMTk2NzpcXHRcXHQvKiBNb3ZlIG5ldHdvcmsgaGVhZGVyIHRvIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgVkxBTiB0YWdnZWQgcGFja2V0cyAqL1xcbjE5Njg6XFx0XFx0aWYgKGlzX3ZsYW4gXFx1MDAyNlxcdTAwMjZcXG4xOTY5OlxcdFxcdCAgICB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXFx1MDAzZXByb3RvY29sLCBcXHUwMDI2ZGVwdGgpICE9IDApXFxuMTk3MDpcXHRcXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xcbjE5NzE6XFx0fVxcbjE5NzI6XFx0XFxuMTk3MzpcXHQvKlxcbjE5NzQ6XFx0ICpcXHRPdXRwdXQgYSByYXcgcGFja2V0IHRvIGEgZGV2aWNlIGxheWVyLiBUaGlzIGJ5cGFzc2VzIGFsbCB0aGUgb3RoZXJcXG4xOTc1OlxcdCAqXFx0cHJvdG9jb2wgbGF5ZXJzIGFuZCB5b3UgbXVzdCB0aGVyZWZvcmUgc3VwcGx5IGl0IHdpdGggYSBjb21wbGV0ZSBmcmFtZVxcbjE5NzY6XFx0ICovXFxuMTk3NzpcXHRcXG4xOTc4OlxcdHN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuMTk3OTpcXHRcXHRcXHRcXHQgICAgICAgc2l6ZV90IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDg6MTcuNDgzODQyNTI4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgwMzYxODY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFBhY2tldCBIZWFkZXIgUGFyc2luZyBpbiBhZl9wYWNrZXQuYyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHN0cnVjdHVyZSBvZiBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIHdpdGhpbiB0aGUgYGFmX3BhY2tldC5jYCBtb2R1bGUuIE15IGdvYWwgaGVyZSBpcyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgY3J1Y2lhbCBmdW5jdGlvbiBpcyBpbnZva2VkLiBUaGlzIGlzIG9mdGVuIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZGVidWdnaW5nIG9yIHVuZGVyc3RhbmRpbmcgZGF0YSBmbG93LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHBhY2tldCBoYW5kbGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9u4oCZcyBjb250ZXh0IHdpdGhpbiB0aGUgYWZfcGFja2V0IG1vZHVsZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGluZm9ybWF0aW9uIGJlaW5nIHBhcnNlZCBjb21lcyBmcm9tIGFuZCB3aGVyZSBpdCBpcyBzdWJzZXF1ZW50bHkgc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc3NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDg6MjAuMjg3NDYzMjI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTA1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhY2tldF9wYXJzZV9oZWFkZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9wYWNrZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTg2OT1zdGF0aWMgaW50IHBhY2tldF9yY3Zfc3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTM0LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTkzNTpzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTkzNi17XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE5Nzg9c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjA5NS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIwOTY6XFx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIwOTctXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI2MDU9c3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2ODMtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNjg0OlxcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjg1LVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yOTg3PXN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMTQtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTE1OlxcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODoyMC4zMzMzNzE3MTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzMxOTQzMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEFjdGl2YXRpb24gb2YgYWZfcGFja2V0LmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb24gaXMgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIGBhZl9wYWNrZXQuY2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwncyBzb3VyY2UgYW5kIHBpbnBvaW50IHRoZSByZWxldmFudCBLY29uZmlnIGFuZCBNYWtlZmlsZSBlbnRyaWVzLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgc3RhcnRpbmcgYnkgZXhhbWluaW5nIGBuZXQvcGFja2V0L0tjb25maWdgIGFuZCBgbmV0L3BhY2tldC9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNsdWVzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHByb2Nlc3MuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGl0IGJhY2sgdG8gdGhlIGhpZ2hlci1sZXZlbCBjb25maWcgb3B0aW9ucyBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODoyNC42NjUzMTcwNTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1MDE4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NTk0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqcHR5cGVfaGVhZChjb25zdCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTk2LVxcdGlmIChwdC1cXHUwMDNldHlwZSA9PSBodG9ucyhFVEhfUF9BTEwpKSB7XFxubmV0L2NvcmUvZGV2LmM6NTk3OlxcdFxcdGlmICghcHQtXFx1MDAzZWFmX3BhY2tldF9uZXQgXFx1MDAyNlxcdTAwMjYgIXB0LVxcdTAwM2VkZXYpXFxubmV0L2NvcmUvZGV2LmMtNTk4LVxcdFxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjAwLVxcdFxcdHJldHVybiBwdC1cXHUwMDNlZGV2ID8gXFx1MDAyNnB0LVxcdTAwM2VkZXYtXFx1MDAzZXB0eXBlX2FsbCA6XFxubmV0L2NvcmUvZGV2LmM6NjAxOlxcdFxcdFxcdFxcdCBcXHUwMDI2cHQtXFx1MDAzZWFmX3BhY2tldF9uZXQtXFx1MDAzZXB0eXBlX2FsbDtcXG5uZXQvY29yZS9kZXYuYy02MDItXFx0fVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjA2LVxcbm5ldC9jb3JlL2Rldi5jOjYwNzpcXHRyZXR1cm4gcHQtXFx1MDAzZWFmX3BhY2tldF9uZXQgPyBcXHUwMDI2cHQtXFx1MDAzZWFmX3BhY2tldF9uZXQtXFx1MDAzZXB0eXBlX3NwZWNpZmljIDpcXG5uZXQvY29yZS9kZXYuYy02MDgtXFx0XFx0XFx0XFx0IFxcdTAwMjZwdHlwZV9iYXNlW250b2hzKHB0LVxcdTAwM2V0eXBlKSBcXHUwMDI2IFBUWVBFX0hBU0hfTUFTS107XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0yNTM5PXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfbG9vcF9zayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL2Rldi5jLTI1NDAte1xcbm5ldC9jb3JlL2Rldi5jOjI1NDE6XFx0aWYgKCFwdHlwZS1cXHUwMDNlYWZfcGFja2V0X3ByaXYgfHwgIXNrYi1cXHUwMDNlc2spXFxubmV0L2NvcmUvZGV2LmMtMjU0Mi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0yNTQ1LVxcdFxcdHJldHVybiBwdHlwZS1cXHUwMDNlaWRfbWF0Y2gocHR5cGUsIHNrYi1cXHUwMDNlc2spO1xcbm5ldC9jb3JlL2Rldi5jOjI1NDY6XFx0ZWxzZSBpZiAoKHN0cnVjdCBzb2NrICopcHR5cGUtXFx1MDAzZWFmX3BhY2tldF9wcml2ID09IHNrYi1cXHUwMDNlc2spXFxubmV0L2NvcmUvZGV2LmMtMjU0Ny1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm5ldC9jb3JlL25ldC1wcm9jZnMuYz0yMjk9c3RhdGljIHZvaWQgKnB0eXBlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4tLVxcbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0yNjAtXFxubmV0L2NvcmUvbmV0LXByb2Nmcy5jOjI2MTpcXHRpZiAocHQtXFx1MDAzZWFmX3BhY2tldF9uZXQpIHtcXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMjYyLW5ldF9wdHlwZV9hbGw6XFxuLS1cXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmM9MjkzPXN0YXRpYyBpbnQgcHR5cGVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMzAzLVxcdGRldiA9IGl0ZXItXFx1MDAzZWRldjtcXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmM6MzA0OlxcdGlmICgoIXB0LVxcdTAwM2VhZl9wYWNrZXRfbmV0IHx8IG5ldF9lcShwdC1cXHUwMDNlYWZfcGFja2V0X25ldCwgc2VxX2ZpbGVfbmV0KHNlcSkpKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0zMDUtXFx0XFx0ICghZGV2IHx8IG5ldF9lcShkZXZfbmV0KGRldiksIHNlcV9maWxlX25ldChzZXEpKSkpIHtcXG4tLVxcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jPTE1OT1zdGF0aWMgaW50IG5ldF90ZXN0X2xvb3BiYWNrX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9zZWxmdGVzdHMuYy0xNjMte1xcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jOjE2NDpcXHRzdHJ1Y3QgbmV0X3Rlc3RfcHJpdiAqdHByaXYgPSBwdC1cXHUwMDNlYWZfcGFja2V0X3ByaXY7XFxubmV0L2NvcmUvc2VsZnRlc3RzLmMtMTY1LVxcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYyA9IHRwcml2LVxcdTAwM2VwYWNrZXQtXFx1MDAzZXNyYztcXG4tLVxcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jPTIzMz1zdGF0aWMgaW50IF9fbmV0X3Rlc3RfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5uZXQvY29yZS9zZWxmdGVzdHMuYy0yNDktXFx0dHByaXYtXFx1MDAzZXB0LmRldiA9IG5kZXY7XFxubmV0L2NvcmUvc2VsZnRlc3RzLmM6MjUwOlxcdHRwcml2LVxcdTAwM2VwdC5hZl9wYWNrZXRfcHJpdiA9IHRwcml2O1xcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTI1MS1cXHR0cHJpdi1cXHUwMDNlcGFja2V0ID0gYXR0cjtcXG4tLVxcbm5ldC9wYWNrZXQvS2NvbmZpZz02PWNvbmZpZyBQQUNLRVRcXG4tLVxcbm5ldC9wYWNrZXQvS2NvbmZpZy0xNC1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbm5ldC9wYWNrZXQvS2NvbmZpZzoxNTpcXHQgIGJlIGNhbGxlZCBhZl9wYWNrZXQuXFxubmV0L3BhY2tldC9LY29uZmlnLTE2LVxcbi0tXFxubmV0L3BhY2tldC9NYWtlZmlsZS01LVxcbm5ldC9wYWNrZXQvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUEFDS0VUKSArPSBhZl9wYWNrZXQub1xcbm5ldC9wYWNrZXQvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUEFDS0VUX0RJQUcpICs9IGFmX3BhY2tldF9kaWFnLm9cXG5uZXQvcGFja2V0L01ha2VmaWxlOjg6YWZfcGFja2V0X2RpYWcteSArPSBkaWFnLm9cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTQ2OD1zdGF0aWMgaW50IHBhY2tldF9yY3ZfZmFub3V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE0NzAte1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTQ3MTpcXHRzdHJ1Y3QgcGFja2V0X2Zhbm91dCAqZiA9IHB0LVxcdTAwM2VhZl9wYWNrZXRfcHJpdjtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE0NzItXFx0dW5zaWduZWQgaW50IG51bSA9IFJFQURfT05DRShmLVxcdTAwM2VudW1fbWVtYmVycyk7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE1NTk9c3RhdGljIGJvb2wgbWF0Y2hfZmFub3V0X2dyb3VwKHN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTU2My1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE1NjQ6XFx0cmV0dXJuIHB0eXBlLVxcdTAwM2VhZl9wYWNrZXRfcHJpdiA9PSBwa3Rfc2soc2spLVxcdTAwM2VmYW5vdXQ7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNTY1LX1cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTY5MD1zdGF0aWMgaW50IGZhbm91dF9hZGQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmFub3V0X2FyZ3MgKmFyZ3MpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE3ODMtXFx0XFx0bWF0Y2gtXFx1MDAzZXByb3RfaG9vay5mdW5jID0gcGFja2V0X3Jjdl9mYW5vdXQ7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxNzg0OlxcdFxcdG1hdGNoLVxcdTAwM2Vwcm90X2hvb2suYWZfcGFja2V0X3ByaXYgPSBtYXRjaDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE3ODU6XFx0XFx0bWF0Y2gtXFx1MDAzZXByb3RfaG9vay5hZl9wYWNrZXRfbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZtYXRjaC1cXHUwMDNlbmV0KTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE3ODYtXFx0XFx0bWF0Y2gtXFx1MDAzZXByb3RfaG9vay5pZF9tYXRjaCA9IG1hdGNoX2Zhbm91dF9ncm91cDtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTg2OT1zdGF0aWMgaW50IHBhY2tldF9yY3Zfc3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xODc5LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTg4MDpcXHRzayA9IHB0LVxcdTAwM2VhZl9wYWNrZXRfcHJpdjtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE4ODEtXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTIxNTE9c3RhdGljIGludCBwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxNjQtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMTY1OlxcdHNrID0gcHQtXFx1MDAzZWFmX3BhY2tldF9wcml2O1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjE2Ni1cXHRwbyA9IHBrdF9zayhzayk7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTIyNjQ9c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjkzLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjI5NDpcXHRzayA9IHB0LVxcdTAwM2VhZl9wYWNrZXRfcHJpdjtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIyOTUtXFx0cG8gPSBwa3Rfc2soc2spO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zMzgxPXN0YXRpYyBpbnQgcGFja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQzMi1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjM0MzM6XFx0cG8tXFx1MDAzZXByb3RfaG9vay5hZl9wYWNrZXRfcHJpdiA9IHNrO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzQzNDpcXHRwby1cXHUwMDNlcHJvdF9ob29rLmFmX3BhY2tldF9uZXQgPSBzb2NrX25ldChzayk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zNDM1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODoyNC43MzI4MjE3MTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI1Mzk0NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgUGFja2V0IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2VybmVsJ3MgcGFja2V0IGhhbmRsaW5nIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gY3JhY2sgb3BlbiB0aGUgYG5ldC9wYWNrZXQvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCwgY3JpdGljYWxseSwgdGhlaXIgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHVuZGVyc3RhbmRpbmcgaG93IHZhcmlvdXMgcGFja2V0IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGxpZXMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcywgdGhlIGNvcmUga25vYnMgdGhhdCBjb250cm9sIHRoZSBlbnRpcmUgcGFja2V0IHByb2Nlc3Npbmcgc3Vic3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgZXF1YWxseSBpbXBvcnRhbnQ7IHNlZWluZyB3aGljaCBvcHRpb25zIGFyZSBjb250aW5nZW50IG9uIG90aGVycyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdmlldyBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmFjdGlvbiBvciBjb25mbGljdC4gTGV0J3Mgc2VlIHdoYXQgYEtjb25maWdgIHJldmVhbHMuLi4gdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1OTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODoyNi42NTgyMTgyODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3BhY2tldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFBhY2tldCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBQQUNLRVRcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgc29ja2V0XFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGUgUGFja2V0IHByb3RvY29sIGlzIHVzZWQgYnkgYXBwbGljYXRpb25zIHdoaWNoIGNvbW11bmljYXRlXFxuICAxMDpcXHRcXHQgIGRpcmVjdGx5IHdpdGggbmV0d29yayBkZXZpY2VzIHdpdGhvdXQgYW4gaW50ZXJtZWRpYXRlIG5ldHdvcmtcXG4gIDExOlxcdFxcdCAgcHJvdG9jb2wgaW1wbGVtZW50ZWQgaW4gdGhlIGtlcm5lbCwgZS5nLiB0Y3BkdW1wLiAgSWYgeW91IHdhbnQgdGhlbVxcbiAgMTI6XFx0XFx0ICB0byB3b3JrLCBjaG9vc2UgWS5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDE1OlxcdFxcdCAgYmUgY2FsbGVkIGFmX3BhY2tldC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgUEFDS0VUX0RJQUdcXG4gIDIwOlxcdFxcdHRyaXN0YXRlIFxcXCJQYWNrZXQ6IHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFBBQ0tFVFxcbiAgMjI6XFx0XFx0ZGVmYXVsdCBuXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBGX1BBQ0tFVCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuICAyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA4OjI2LjY1ODI4NDkwMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NDk1NDk0NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZMQU4vODAyLjFRIFJlbGV2YW5jZSBDaGVjayoqXG5cbk9rYXksIGxldCdzIHNlZSBpZiBWTEFOIG9yIDgwMi4xUSBpcyBldmVuIHBsYXlpbmcgYSByb2xlIGhlcmUuIFRoZSBjb2RlJ3MgZG9pbmcgYSBmZXcgdGhpbmdzIHRoYXQgZ2l2ZSBtZSBhIGh1bmNoOiBgaXNfdmxhbiA9IGV0aF90eXBlX3ZsYW4oc2tiLVx1MDAzZXByb3RvY29sKWAsIGB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXHUwMDNlcHJvdG9jb2wsIFx1MDAyNmRlcHRoKWAsIGFuZCB0aGVuIGl0J3MgY29tcGFyaW5nIGBza2ItXHUwMDNlZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuYCBhZ2FpbnN0IGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAuIFRoYXQgbGFzdCBvbmUgaGFzIG15IGF0dGVudGlvbi4gSSdtIHRoaW5raW5nIGFib3V0IFZMQU4gaW50ZXJmYWNlcyBsaWtlIDgwMi4xUSBzdWJpbnRlcmZhY2VzIG9yIG1hY3ZsYW4gZGV2aWNlcy4gV2l0aCBWTEFOcywgd2Ugb2Z0ZW4gc2VlIGBoYXJkX2hlYWRlcl9sZW5gIGJlaW5nIGdyZWF0ZXIgdGhhbiBgbWluX2hlYWRlcl9sZW5gLCB3aGljaCBtYWtlcyBtZSB0aGluayBgQ09ORklHX1ZMQU5fODAyMVFgIGluIHRoZSBrZXJuZWwgY29uZmlnIG1pZ2h0IGJlIHRoZSBrZXkuIExldCBtZSBnbyBjaGVjayB0aGF0IEtjb25maWcgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTA4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDg6MzYuMTUzNzgxNTcxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTc2OTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkxBTl84MDIxUVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC84MDIxcS9LY29uZmlnLTUtXFxubmV0LzgwMjFxL0tjb25maWc6Njpjb25maWcgVkxBTl84MDIxUVxcbm5ldC84MDIxcS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIjgwMi4xUS84MDIuMWFkIFZMQU4gU3VwcG9ydFxcXCJcXG4tLVxcbm5ldC84MDIxcS9LY29uZmlnLTIxLVxcbm5ldC84MDIxcS9LY29uZmlnOjIyOmNvbmZpZyBWTEFOXzgwMjFRX0dWUlBcXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cXHRib29sIFxcXCJHVlJQIChHQVJQIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0LzgwMjFxL0tjb25maWctMzEtXFxubmV0LzgwMjFxL0tjb25maWc6MzI6Y29uZmlnIFZMQU5fODAyMVFfTVZSUFxcbm5ldC84MDIxcS9LY29uZmlnLTMzLVxcdGJvb2wgXFxcIk1WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODozNi4yMTk1NjczNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTM1ODAxMjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYWNrZXQgU29ja2V0IEhlYWRlciBQYXJzaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZm9jdXMgc3ltYm9scyBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUsIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGF0IGlzLiBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGVudHJ5IHBvaW50cyBvciB0aGUgY2FsbGVycyBvZiBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIHdpdGhpbiBgYWZfcGFja2V0LmNgLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB0aGUgY29udHJvbCBmbG93LlxuXG5Pa2F5LCBzbyBpbiBgYWZfcGFja2V0LmNgLCBJIHNlZSBhIGZldyBrZXkgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ6IGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfZmlsbF9za2JgIOKAkyB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGVpdGhlciBgcGFja2V0X3NuZGAgb3IgYHRwYWNrZXRfc25kYCDigJMgYW5kIHRoZW4gYHBhY2tldF9zbmRgIGRpcmVjdGx5LiBHb29kLlxuXG5Ob3cgdGhhdCBJIGhhdmUgYSBoYW5kbGUgb24gdGhlIG1haW4gZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgaGVhZGVyIHBhcnNpbmcgcHJvY2VzcywgSSdsbCB0dXJuIG15IGF0dGVudGlvbiB0b3dhcmRzIGEgdGhvcm91Z2ggZXhhbWluYXRpb24gb2YgaG93IHBhY2tldCBzb2NrZXRzIHRyYW5zbWl0IHBhY2tldHMgd2l0aGluIGBhZl9wYWNrZXQuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NDQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDg6NDIuMzU1Mzc2MTMyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUxOTY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWNrZXRfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE5MzU9c3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTk3Ny1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE5Nzg6c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5NzktXFx0XFx0XFx0ICAgICAgIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI3NTc9c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3NzktXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzgwOlxcdC8qIHBhY2tldF9zZW5kbXNnKCkgY2hlY2sgb24gdHhfcmluZy5wZ192ZWMgd2FzIGxvY2tsZXNzLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc4MS1cXHQgKiB3ZSBuZWVkIHRvIGNvbmZpcm0gaXQgdW5kZXIgcHJvdGVjdGlvbiBvZiBwZ192ZWNfbG9jay5cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk4Nz1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTQ1LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzE0NjpzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxNDcte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00NjkyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHNfc3BrdCA9IHtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDcwNS1cXHQuc2h1dGRvd24gPVxcdHNvY2tfbm9fc2h1dGRvd24sXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NzA2OlxcdC5zZW5kbXNnID1cXHRwYWNrZXRfc2VuZG1zZ19zcGt0LFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDcwNy1cXHQucmVjdm1zZyA9XFx0cGFja2V0X3JlY3Ztc2csXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQ3MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcyA9IHtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDcyNi1cXHQuZ2V0c29ja29wdF9pdGVyID1cXHRwYWNrZXRfZ2V0c29ja29wdCxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ3Mjc6XFx0LnNlbmRtc2cgPVxcdHBhY2tldF9zZW5kbXNnLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDcyOC1cXHQucmVjdm1zZyA9XFx0cGFja2V0X3JlY3Ztc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA4OjQyLjQwMTkwMTIxMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjQzMDg2ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IEFGX1BBQ0tFVCBUWCBQYXRoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGludmVzdGlnYXRpb24gZm9jdXNlZCBvbiB0aGUgdHJhbnNtaXNzaW9uIChUWCkgcGF0aHMgd2l0aGluIHRoZSBgYWZfcGFja2V0YCBzdWJzeXN0ZW0uIEkndmUgaWRlbnRpZmllZCB0aGUga2V5IGZ1bmN0aW9uIGNhbGxzOiBgcGFja2V0X3NlbmRtc2dgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgLCBhbG9uZyB3aXRoIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCB3aGljaCBpcyBzcGVjaWZpYyB0byBgcGFja2V0X29wc19zcGt0YC4gSXQncyB3b3J0aCBub3RpbmcgdGhhdCBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGlzIGEgc3RhdGljIGhlbHBlciB1c2VkIGJ5IHNldmVyYWwgb2YgdGhlc2UsIHBhcnRpY3VsYXJseSBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGB0cGFja2V0X2ZpbGxfc2tiYCwgYW5kIGBwYWNrZXRfc25kYC4gSW1wb3J0YW50bHksIGBwYWNrZXRfc25kYCwgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgcGFja2V0X3NlbmRtc2dgLCBhbmQgYHRwYWNrZXRfc25kYCBjb25zdGl0dXRlIHRoZSBwcmltYXJ5IFRYIGVudHJ5IHBvaW50cy5cblxuVGhlIGNvcmUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGFyZWEgaXMgc3VpdGFibGUgZm9yIGZ1enppbmcsIGFuZCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFRoZSBjb2RlIGluIHF1ZXN0aW9uIHRvdWNoZXMgcmVhY2hhYmxlIGtlcm5lbCBuZXR3b3JraW5nIGxvZ2ljIHdpdGhpbiBgYWZfcGFja2V0LmNgLiBTcGVjaWZpY2FsbHksIGl0IGFwcGVhcnMgdG8gbW9kaWZ5IHRoZSBgbmV0d29ya19oZWFkZXJgIGZvciBub24tVkxBTiBgU09DS19SQVdgIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdoZXJlIGBoYXJkX2hlYWRlcl9sZW4gXHUwMDNlIG1pbl9oZWFkZXJfbGVuYC4gVGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBmb2N1c2VzIG9uIHRoZSBwYXJzaW5nIG9mIGhlYWRlcnMgZm9yIHJhdyBmcmFtZXMgc2VudCB2aWEgcGFja2V0IHNvY2tldHMuIFRoZSBhdHRhY2sgc3VyZmFjZSBpcyBlYXNpbHkgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzLCBuYW1lbHkgYHNvY2tldChBRl9QQUNLRVQsIFNPQ0tfUkFXLCAuLi4pYCBhbmQgYHNlbmR0bygpYC9gc2VuZG1zZygpYC4gVGhpcyBtYWtlcyBpdCBpZGVhbCBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBzb2xpZGlmeSB0aGUgcmVxdWlyZW1lbnRzIGZvciBlZmZlY3RpdmUgZnV6emluZy4gV2UgbmVlZCB0byBkZWZpbmUgdHdvIGNydWNpYWwgY29tcG9uZW50czogYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gRm9yIHRoZSBgRm9jdXNTeW1ib2xzYCwgSSd2ZSBzZWxlY3RlZCB0aGUgbWFpbiBlbnRyeSBwb2ludHM6IGBwYWNrZXRfc2VuZG1zZ2AsIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gQWx0aG91Z2ggYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBpcyByZWxldmFudCwgSSBwcmVmZXIgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLlxuXG5Gb3IgYEVuYWJsZUNvbmZpZ3NgLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gU3BlY2lmaWNhbGx5LCBgUEFDS0VUYCBpcyBlc3NlbnRpYWwgKGR1aCksIGFuZCBgVkxBTl84MDIxUWAgaXMgYmVuZWZpY2lhbCBiZWNhdXNlIGl0IGhlbHBzIHRyaWdnZXIgdGhlIGBtaW5faGVhZGVyX2xlbiBcdTAwM2MgaGFyZF9oZWFkZXJfbGVuYCBjb25kaXRpb24sIGFzIGhpZ2hsaWdodGVkIGluIHRoZSBhc3NvY2lhdGVkIGNvbW1lbnRzLiBJIHZlcmlmaWVkIHRoZXNlIG1hcHBpbmdzIGluIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIChgbmV0L3BhY2tldC9LY29uZmlnYCBhbmQgYG5ldC84MDIxcS9LY29uZmlnYCkuXG5cbkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyOlxuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiUEFDS0VUXCIsIFwiVkxBTl84MDIxUVwiXWBcbiogICBgRm9jdXNTeW1ib2xzYDogYFtcInBhY2tldF9zZW5kbXNnXCIsIFwicGFja2V0X3NlbmRtc2dfc3BrdFwiLCBcInBhY2tldF9zbmRcIiwgXCJ0cGFja2V0X3NuZFwiXWBcbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgYW5kIGZ1bmN0aW9uYWwgYW5hbHlzaXMsIGp1c3RpZnlpbmcgdGhlIGZ1enppbmcgZGVjaXNpb24uXG5cbldpdGggdGhpcyBjb21wcmVoZW5zaXZlIGFuYWx5c2lzIGNvbXBsZXRlLCBJJ20gY29uZmlkZW50IHdlIGNhbiBwcm9jZWVkIHdpdGggZnV6emluZyB0aGlzIHRhcmdldC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njg1LCJPdXRwdXRUb2tlbnMiOjE0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODo0OC42NDQ5OTAyMTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjAwNjMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFDS0VUXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFja2V0X3NlbmRtc2dcIixcbiAgICBcInBhY2tldF9zZW5kbXNnX3Nwa3RcIixcbiAgICBcInBhY2tldF9zbmRcIixcbiAgICBcInRwYWNrZXRfc25kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaGVhZGVyIHBhcnNpbmcgaW4gYWZfcGFja2V0IChwYWNrZXRfcGFyc2VfaGVhZGVycykgZm9yIFNPQ0tfUkFXIHBhY2tldCBzb2NrZXRzIG92ZXIgRXRoZXJuZXQgZGV2aWNlcyB3aGVyZSBoYXJkX2hlYWRlcl9sZW4gZXhjZWVkcyBtaW5faGVhZGVyX2xlbi4gVGhpcyBjaGFuZ2VzIHRoZSBuZXR3b3JrIGFuZCB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldHMgdXNlZCBkdXJpbmcgdHJhbnNtaXNzaW9uIGFuZCBHU08sIGFmZmVjdGluZyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBBRl9QQUNLRVQgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUNLRVRcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ1wiLFxuICAgIFwicGFja2V0X3NlbmRtc2dfc3BrdFwiLFxuICAgIFwicGFja2V0X3NuZFwiLFxuICAgIFwidHBhY2tldF9zbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBoZWFkZXIgcGFyc2luZyBpbiBhZl9wYWNrZXQgKHBhY2tldF9wYXJzZV9oZWFkZXJzKSBmb3IgU09DS19SQVcgcGFja2V0IHNvY2tldHMgb3ZlciBFdGhlcm5ldCBkZXZpY2VzIHdoZXJlIGhhcmRfaGVhZGVyX2xlbiBleGNlZWRzIG1pbl9oZWFkZXJfbGVuLiBUaGlzIGNoYW5nZXMgdGhlIG5ldHdvcmsgYW5kIHRyYW5zcG9ydCBoZWFkZXIgb2Zmc2V0cyB1c2VkIGR1cmluZyB0cmFuc21pc3Npb24gYW5kIEdTTywgYWZmZWN0aW5nIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIEFGX1BBQ0tFVCBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODo0OC43MjEwMDI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTM4NDI5OTQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA4OjQ4LjcyMTQ2Mjk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjUzODM4MzUxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYHBhY2tldF9wYXJzZV9oZWFkZXJzKClgIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCB0byBwcm9wZXJseSBwb3NpdGlvbiB0aGUgbmV0d29yayBoZWFkZXIgb2Zmc2V0IGZvciBub24tVkxBTiBgU09DS19SQVdgIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdoZXJlIGBtaW5faGVhZGVyX2xlbiBcXHUwMDNjIGhhcmRfaGVhZGVyX2xlbmAuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tICoqS01TQU4qKjogS01TQU4gZGV0ZWN0cyB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlIGJvb2xlYW4gbG9jYWwgdmFyaWFibGUgKGBpc192bGFuYCksIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgc2V0IHRvIGBldGhfdHlwZV92bGFuKHNrYi1cXHUwMDNlcHJvdG9jb2wpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXFxuLSAqKktBU0FOIC8gU3RhbmRhcmQgU2FuaXRpemVycyoqOiBUaGUgY2hhbmdlcyBvbmx5IGFkanVzdCBpbnRlcm5hbCBgc2tiYCBoZWFkZXIgb2Zmc2V0cyAoYG1hY19oZWFkZXJgLCBgbmV0d29ya19oZWFkZXJgLCBgdHJhbnNwb3J0X2hlYWRlcmApIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLiBBbnkgcG90ZW50aWFsIG9mZnNldCBvciBzaXppbmcgaXNzdWVzIGFmZmVjdGluZyBwYXlsb2FkIGJvdW5kcyBkdXJpbmcgcGFja2V0IHBhcnNpbmcgb3IgR1NPIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMvYm91bmRzLWNoZWNrIGlzc3VlcyBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJhMjc3Mzc4YjA1NDkyZjVkZDFjMTU2NjZlY2RkNjA5Y2FkNTgxYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODowODoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5pbmRleCAxMTY4YmQ2YjA5Y2Q2Li5iZTViZjlkYjdlYTE1IDEwMDY0NFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuQEAgLTE5MzUsNiArMTkzNSw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gc3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcbiB7XG4gXHRpbnQgZGVwdGg7XG4rXHRib29sIGlzX3ZsYW4gPSBmYWxzZTtcbiBcbiBcdC8qIE9uIFRYIHNrYi1cdTAwM2VkYXRhIGlzIHRoZSBMMiBoZWFkZXI7IGFuY2hvciBpdCBmb3IgYWxsIHNvY2tldCB0eXBlcy4gKi9cbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG5AQCAtMTk0MywxMSArMTk0NCwyOCBAQCBzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0ICAgIHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVylcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZGV2X3BhcnNlX2hlYWRlcl9wcm90b2NvbChza2IpO1xuIFxuK1x0aWYgKGxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSkge1xuK1x0XHRpc192bGFuID0gZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpO1xuK1xuK1x0XHQvKiBGb3Igbm9uLVZMQU4gU09DS19SQVcgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hvc2VcbitcdFx0ICogaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgdGhlIG9uLXdpcmUgTDIgaGVhZGVyIGxlbmd0aFxuK1x0XHQgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsXG4rXHRcdCAqIG9yIEV0aGVybmV0IGRyaXZlcnMgdGhhdCByZXNlcnZlIGV4dHJhIHNwYWNlIGluXG4rXHRcdCAqIGhhcmRfaGVhZGVyX2xlbiBmb3IgZHJpdmVyLWludGVybmFsIHdyYXBwaW5nIC0tIHRoZSBTT0NLX1JBV1xuK1x0XHQgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlXG4rXHRcdCAqIHVzZXIgZnJhbWUncyBMMyBzaXRzIGF0IG1pbl9oZWFkZXJfbGVuLiBNb3ZlIG5ldHdvcmtfaGVhZGVyXG4rXHRcdCAqIHRvIHRoZSBhY3R1YWwgTDIvTDMgYm91bmRhcnkgc28gdGhlIHRyYW5zcG9ydCBoZWFkZXIgcHJvYmVcbitcdFx0ICogYmVsb3cgYW5kIHN1YnNlcXVlbnQgR1NPIHNlZSB0aGUgcmlnaHQgTDMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWlzX3ZsYW4gXHUwMDI2XHUwMDI2IHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHNrYi1cdTAwM2VkZXYtXHUwMDNlbWluX2hlYWRlcl9sZW4gXHUwMDNjIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKVxuK1x0XHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuKTtcbitcdH1cbitcbiBcdHNrYl9wcm9iZV90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gXG4gXHQvKiBNb3ZlIG5ldHdvcmsgaGVhZGVyIHRvIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgVkxBTiB0YWdnZWQgcGFja2V0cyAqL1xuLVx0aWYgKGxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBldGhfdHlwZV92bGFuKHNrYi1cdTAwM2Vwcm90b2NvbCkgXHUwMDI2XHUwMDI2XG4rXHRpZiAoaXNfdmxhbiBcdTAwMjZcdTAwMjZcbiBcdCAgICB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXHUwMDNlcHJvdG9jb2wsIFx1MDAyNmRlcHRoKSAhPSAwKVxuIFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA4OjQ4LjcyMTQ2MzgyWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTM4MzA4MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgTmVlZCBmb3IgYSBEZWRpY2F0ZWQgS01TQU4gRnV6emluZyBTZXNzaW9uKipcblxuT2theSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCB0byBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2Agd2FycmFudHMgYSBmdWxsLWJsb3duIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB3aXRoaW4gc3l6a2FsbGVyLiBMZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHksIHRoZSB3YXkgSSBhbHdheXMgZG8uXG5cbkZpcnN0LCByaXNrIGFzc2Vzc21lbnQuIE5vIHJlZCBmbGFncyBoZXJlLiBUaGlzIGlzbid0IGFib3V0IG9mZmVuc2l2ZSBjb2RlLCBleHBsb2l0IGdlbmVyYXRpb24sIG9yIGFueXRoaW5nIG1hbGljaW91cy4gSXQncyBhIHN0cmFpZ2h0LXVwIGNvZGUgcmV2aWV3L3NlY3VyaXR5IGFzc2Vzc21lbnQgYW5kIGZ1enppbmcgY29uZmlndXJhdGlvbiBkZWNpc2lvbi4gSSBjbGFzc2lmeSB0aGlzIGFzIFwiQmVuaWduXCIgLSBkZXZlbG9wZXIgdG9vbGluZy9rZXJuZWwgZnV6emluZyBhbmFseXNpcy4gVGhlIHJlcXVlc3QgaXMgZnVsbHkgZnVsZmlsbGFibGUuIEdvb2QuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYC4gVGltZSB0byBnZXQgYSBjbG9zZSBsb29rLiBJJ2xsIHJlYWQgYXJvdW5kIGxpbmUgMTkzNSBpbiBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AsIHByb2JhYmx5IHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIncyBmYXN0ZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMgdG8gbWFrZSBhIHdlbGwtaW5mb3JtZWQgZGVjaXNpb24uIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODo1OS42NTk3NzQ4NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkzMDpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xOTMxOlxcdG9vbTpcXG4xOTMyOlxcdFxcdHJldHVybiAwO1xcbjE5MzM6XFx0fVxcbjE5MzQ6XFx0XFxuMTkzNTpcXHRzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbjE5MzY6XFx0e1xcbjE5Mzc6XFx0XFx0aW50IGRlcHRoO1xcbjE5Mzg6XFx0XFx0Ym9vbCBpc192bGFuID0gZmFsc2U7XFxuMTkzOTpcXHRcXG4xOTQwOlxcdFxcdC8qIE9uIFRYIHNrYi1cXHUwMDNlZGF0YSBpcyB0aGUgTDIgaGVhZGVyOyBhbmNob3IgaXQgZm9yIGFsbCBzb2NrZXQgdHlwZXMuICovXFxuMTk0MTpcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbjE5NDI6XFx0XFxuMTk0MzpcXHRcXHRpZiAoKCFza2ItXFx1MDAzZXByb3RvY29sIHx8IHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQUxMKSkgXFx1MDAyNlxcdTAwMjZcXG4xOTQ0OlxcdFxcdCAgICBzb2NrLVxcdTAwM2V0eXBlID09IFNPQ0tfUkFXKVxcbjE5NDU6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGRldl9wYXJzZV9oZWFkZXJfcHJvdG9jb2woc2tiKTtcXG4xOTQ2OlxcdFxcbjE5NDc6XFx0XFx0aWYgKGxpa2VseShza2ItXFx1MDAzZWRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpKSB7XFxuMTk0ODpcXHRcXHRcXHRpc192bGFuID0gZXRoX3R5cGVfdmxhbihza2ItXFx1MDAzZXByb3RvY29sKTtcXG4xOTQ5OlxcdFxcbjE5NTA6XFx0XFx0XFx0LyogRm9yIG5vbi1WTEFOIFNPQ0tfUkFXIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdob3NlXFxuMTk1MTpcXHRcXHRcXHQgKiBoYXJkX2hlYWRlcl9sZW4gZXhjZWVkcyB0aGUgb24td2lyZSBMMiBoZWFkZXIgbGVuZ3RoXFxuMTk1MjpcXHRcXHRcXHQgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsXFxuMTk1MzpcXHRcXHRcXHQgKiBvciBFdGhlcm5ldCBkcml2ZXJzIHRoYXQgcmVzZXJ2ZSBleHRyYSBzcGFjZSBpblxcbjE5NTQ6XFx0XFx0XFx0ICogaGFyZF9oZWFkZXJfbGVuIGZvciBkcml2ZXItaW50ZXJuYWwgd3JhcHBpbmcgLS0gdGhlIFNPQ0tfUkFXXFxuMTk1NTpcXHRcXHRcXHQgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlXFxuMTk1NjpcXHRcXHRcXHQgKiB1c2VyIGZyYW1lJ3MgTDMgc2l0cyBhdCBtaW5faGVhZGVyX2xlbi4gTW92ZSBuZXR3b3JrX2hlYWRlclxcbjE5NTc6XFx0XFx0XFx0ICogdG8gdGhlIGFjdHVhbCBMMi9MMyBib3VuZGFyeSBzbyB0aGUgdHJhbnNwb3J0IGhlYWRlciBwcm9iZVxcbjE5NTg6XFx0XFx0XFx0ICogYmVsb3cgYW5kIHN1YnNlcXVlbnQgR1NPIHNlZSB0aGUgcmlnaHQgTDMuXFxuMTk1OTpcXHRcXHRcXHQgKi9cXG4xOTYwOlxcdFxcdFxcdGlmICghaXNfdmxhbiBcXHUwMDI2XFx1MDAyNiBzb2NrLVxcdTAwM2V0eXBlID09IFNPQ0tfUkFXIFxcdTAwMjZcXHUwMDI2XFxuMTk2MTpcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZW1pbl9oZWFkZXJfbGVuIFxcdTAwM2Mgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbilcXG4xOTYyOlxcdFxcdFxcdFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2ItXFx1MDAzZWRldi1cXHUwMDNlbWluX2hlYWRlcl9sZW4pO1xcbjE5NjM6XFx0XFx0fVxcbjE5NjQ6XFx0XFxuMTk2NTpcXHRcXHRza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbjE5NjY6XFx0XFxuMTk2NzpcXHRcXHQvKiBNb3ZlIG5ldHdvcmsgaGVhZGVyIHRvIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgVkxBTiB0YWdnZWQgcGFja2V0cyAqL1xcbjE5Njg6XFx0XFx0aWYgKGlzX3ZsYW4gXFx1MDAyNlxcdTAwMjZcXG4xOTY5OlxcdFxcdCAgICB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXFx1MDAzZXByb3RvY29sLCBcXHUwMDI2ZGVwdGgpICE9IDApXFxuMTk3MDpcXHRcXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xcbjE5NzE6XFx0fVxcbjE5NzI6XFx0XFxuMTk3MzpcXHQvKlxcbjE5NzQ6XFx0ICpcXHRPdXRwdXQgYSByYXcgcGFja2V0IHRvIGEgZGV2aWNlIGxheWVyLiBUaGlzIGJ5cGFzc2VzIGFsbCB0aGUgb3RoZXJcXG4xOTc1OlxcdCAqXFx0cHJvdG9jb2wgbGF5ZXJzIGFuZCB5b3UgbXVzdCB0aGVyZWZvcmUgc3VwcGx5IGl0IHdpdGggYSBjb21wbGV0ZSBmcmFtZVxcbjE5NzY6XFx0ICovXFxuMTk3NzpcXHRcXG4xOTc4OlxcdHN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuMTk3OTpcXHRcXHRcXHRcXHQgICAgICAgc2l6ZV90IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDg6NTkuNjYwMDM3NDI2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MjUxNjkzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqRmluZGluZyB0aGUgQ2FsbGVycyBvZiBgcGFja2V0X3BhcnNlX2hlYWRlcnNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNhbGwgc2l0ZXMgZm9yIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2Agd2l0aGluIHRoZSBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgZmlsZS4gTm8gcHJvYmxlbS4gVGhhdCdzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgdGFzayBmb3IgYSBnb29kIGNvZGUgc2VhcmNoLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCB0b29sLCB3aGljaCBJJ20gYXNzdW1pbmcgaXMgZWl0aGVyIGBncmVwYCwgYGFja2AsIGByaXBncmVwYCwgb3IgcGVyaGFwcyBldmVuIG15IElERSdzIGJ1aWx0LWluIHNlYXJjaCBmdW5jdGlvbmFsaXR5LCBkZXBlbmRpbmcgb24gd2hhdCBJJ20gd29ya2luZyB3aXRoIGF0IHRoZSBtb21lbnQuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGFsbCBpbnN0YW5jZXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBPbmNlIEkgaGF2ZSB0aGUgbGlzdCBvZiBjYWxsaW5nIGZ1bmN0aW9ucywgSSBjYW4gdGhlbiBleGFtaW5lIGVhY2ggb25lIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBpcyBiZWluZyB1c2VkIGFuZCB3aGF0IHRoZSB1cHN0cmVhbSBkYXRhIGZsb3cgbG9va3MgbGlrZS4gVGhpcyBpcyBmb3VuZGF0aW9uYWwgdG8gYW55IHJlYWwgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwb3J0aW9uIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIHdvcmtzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSB0eXBlIG9mIHBhY2tldHMgYmVpbmcgcHJvY2Vzc2VkLCBlcnJvciBoYW5kbGluZywgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBvciBsb2NraW5nLiBJdCdzIHRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowOTowMy4xODUyMDk2NloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MjI0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFja2V0X3BhcnNlX2hlYWRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE4Njk9c3RhdGljIGludCBwYWNrZXRfcmN2X3Nwa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTkzNC1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE5MzU6c3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5MzYte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xOTc4PXN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIwOTUtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMDk2OlxcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMDk3LVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNjA1PXN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjgzLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjY4NDpcXHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY4NS1cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk4Nz1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTE0LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzExNTpcXHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzExNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDk6MDMuMjMxMTQzOTI5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTg0Mzk4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNvIEknbGwgc3RhcnQgYnkgZGlzc2VjdGluZyBgcGFja2V0X3BhcnNlX2hlYWRlcnNgLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IGl0IHByb2Nlc3NlcyB0aGUgZGF0YSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHdoYXQgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0aGUgY2FsbGVycyBhcmUgcHJvdmlkaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnB1dHMgYW5kIG91dHB1dHMgaXMgY3J1Y2lhbCBmb3IgZ3Jhc3BpbmcgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblRoZW4sIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIGRhdGEgcGF0aCB0byBzZWUgaG93IHRoZSBwYXJzZWQgaGVhZGVycyBhcmUgdXNlZC4gSSdsbCBsb29rIGludG8gYHBhY2tldF9zbmRgLCBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGFuZCBgdHBhY2tldF9maWxsX3NrYmAuIEV4YW1pbmluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGUgcGFyc2VkIGhlYWRlcnMgaW5mb3JtIHRoZSBhY3R1YWwgcGFja2V0IHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgaGVhZGVycyBhcmUgcGFja2FnZWQgaW50byB0aGUgcGFja2V0IGFuZCB3aGF0IGNvbnNpZGVyYXRpb25zIGFyZSBtYWRlIGZvciBkaWZmZXJlbnQgdHJhbnNtaXNzaW9uIG1ldGhvZHMuIEJ5IHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIG9mIHRoZXNlIGNvbXBvbmVudHMsIEkgc2hvdWxkIGdhaW4gYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgYXNwZWN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDk6MDUuNzI5NTg3MzU5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwODA6XFx0XFx0fSBlbHNlIGlmIChyZXNlcnZlKSB7XFxuMzA4MTpcXHRcXHRcXHRza2JfcmVzZXJ2ZShza2IsIC1yZXNlcnZlKTtcXG4zMDgyOlxcdFxcdFxcdGlmIChsZW4gXFx1MDAzYyByZXNlcnZlICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSBcXHUwMDI2XFx1MDAyNlxcbjMwODM6XFx0XFx0XFx0ICAgIGRldi1cXHUwMDNlbWluX2hlYWRlcl9sZW4gIT0gaGFyZF9oZWFkZXJfbGVuKVxcbjMwODQ6XFx0XFx0XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuMzA4NTpcXHRcXHR9XFxuMzA4NjpcXHRcXG4zMDg3OlxcdFxcdC8qIFJldHVybnMgLUVGQVVMVCBvbiBlcnJvciAqL1xcbjMwODg6XFx0XFx0ZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyKHNrYiwgb2Zmc2V0LCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuKTtcXG4zMDg5OlxcdFxcdGlmIChlcnIpXFxuMzA5MDpcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbjMwOTE6XFx0XFxuMzA5MjpcXHRcXHRpZiAoKHNvY2stXFx1MDAzZXR5cGUgPT0gU09DS19SQVcgXFx1MDAyNlxcdTAwMjZcXG4zMDkzOlxcdFxcdCAgICAgIWRldl92YWxpZGF0ZV9oZWFkZXIoZGV2LCBza2ItXFx1MDAzZWRhdGEsIGxlbikpIHx8ICFza2ItXFx1MDAzZWxlbikge1xcbjMwOTQ6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4zMDk1OlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMzA5NjpcXHRcXHR9XFxuMzA5NzpcXHRcXG4zMDk4OlxcdFxcdHNrYl9zZXR1cF90eF90aW1lc3RhbXAoc2tiLCBcXHUwMDI2c29ja2MpO1xcbjMwOTk6XFx0XFxuMzEwMDpcXHRcXHRpZiAoIXZuZXRfaGRyLmdzb190eXBlIFxcdTAwMjZcXHUwMDI2IChsZW4gXFx1MDAzZSBkZXYtXFx1MDAzZW10dSArIHJlc2VydmUgKyBleHRyYV9sZW4pIFxcdTAwMjZcXHUwMDI2XFxuMzEwMTpcXHRcXHQgICAgIXBhY2tldF9leHRyYV92bGFuX2xlbl9hbGxvd2VkKGRldiwgc2tiKSkge1xcbjMxMDI6XFx0XFx0XFx0ZXJyID0gLUVNU0dTSVpFO1xcbjMxMDM6XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4zMTA0OlxcdFxcdH1cXG4zMTA1OlxcdFxcbjMxMDY6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IHByb3RvO1xcbjMxMDc6XFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBkZXY7XFxuMzEwODpcXHRcXHRza2ItXFx1MDAzZXByaW9yaXR5ID0gc29ja2MucHJpb3JpdHk7XFxuMzEwOTpcXHRcXHRza2ItXFx1MDAzZW1hcmsgPSBzb2NrYy5tYXJrO1xcbjMxMTA6XFx0XFx0c2tiX3NldF9kZWxpdmVyeV90eXBlX2J5X2Nsb2NraWQoc2tiLCBzb2NrYy50cmFuc21pdF90aW1lLCBzay1cXHUwMDNlc2tfY2xvY2tpZCk7XFxuMzExMTpcXHRcXG4zMTEyOlxcdFxcdGlmICh1bmxpa2VseShleHRyYV9sZW4gPT0gNCkpXFxuMzExMzpcXHRcXHRcXHRza2ItXFx1MDAzZW5vX2ZjcyA9IDE7XFxuMzExNDpcXHRcXG4zMTE1OlxcdFxcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XFxuMzExNjpcXHRcXG4zMTE3OlxcdFxcdGlmICh2bmV0X2hkcl9zeikge1xcbjMxMTg6XFx0XFx0XFx0ZXJyID0gdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgXFx1MDAyNnZuZXRfaGRyLCB2aW9fbGUoKSk7XFxuMzExOTpcXHRcXHRcXHRpZiAoZXJyKVxcbjMxMjA6XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4zMTIxOlxcdFxcdFxcdGxlbiArPSB2bmV0X2hkcl9zejtcXG4zMTIyOlxcdFxcdFxcdHZpcnRpb19uZXRfaGRyX3NldF9wcm90byhza2IsIFxcdTAwMjZ2bmV0X2hkcik7XFxuMzEyMzpcXHRcXHR9XFxuMzEyNDpcXHRcXG4zMTI1OlxcdFxcdGVyciA9IHBhY2tldF94bWl0KHBvLCBza2IpO1xcbjMxMjY6XFx0XFxuMzEyNzpcXHRcXHRpZiAodW5saWtlbHkoZXJyICE9IDApKSB7XFxuMzEyODpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2UgMClcXG4zMTI5OlxcdFxcdFxcdFxcdGVyciA9IG5ldF94bWl0X2Vycm5vKGVycik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA5OjA1LjcyOTg2MDQ3OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4Mzc1NDE0MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIGNvZGUgY2hhbmdlcyBhcmUgaW4gYHBhY2tldF9wYXJzZV9oZWFkZXJzYCwgc3BlY2lmaWNhbGx5IGZvciBub24tVkxBTiBgU09DS19SQVdgIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzLiBXaGF0J3MgaGFwcGVuaW5nIGlzIGFuIGFkanVzdG1lbnQgdG8gdGhlIG5ldHdvcmsgaGVhZGVyIG9mZnNldCB1c2luZyBgc2tiX3NldF9uZXR3b3JrX2hlYWRlcmAgd2hlbiBgc2tiLVx1MDAzZWRldi1cdTAwM2VtaW5faGVhZGVyX2xlbmAgaXMgbGVzcyB0aGFuIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAsIGFmdGVyIHdoaWNoIGBza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcmAgaXMgY2FsbGVkLCBhbmQgdGhlbiB0aGUgVkxBTiBjaGVjayBpZiBhcHBsaWNhYmxlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNyaXRlcmlhIGZvciBhIEtNU0FOIGlzc3VlOiBrZXJuZWwgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbmV3IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgYm91bmRzIGNoZWNrIHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuRnJvbSBteSByZXZpZXcsIG5vbmUgb2YgdGhlc2UgYXJlIHRyaWdnZXJlZC4gVGhpcyBwYXRjaCBkZWFscyB3aXRoIFRYIHBhcnNpbmcgaW4gYGFmX3BhY2tldGAsIG5vIGtlcm5lbCBtZW1vcnkgaXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBgaXNfdmxhbmAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9yIGFueSBjaGFuZ2VzIHRvIHRoZSBhbGxvY2F0aW9uIHJvdXRpbmVzLiBUaGUgc2tiIGJ1ZmZlciBwYXlsb2FkIGlzIGNvcGllZCBmcm9tIHVzZXIgc3BhY2UsIGFuZCBhZGp1c3RpbmcgdGhlIG5ldHdvcmsgaGVhZGVyIG9mZnNldCBqdXN0IGNoYW5nZXMgd2hlcmUgdGhlIGtlcm5lbCBsb29rcyB3aXRoaW4gdGhhdCBwcmUtZXhpc3RpbmcgYnVmZmVyIGZyb20gdXNlciBzcGFjZSwgc28sIG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gRXZlbiBpZiBgbWluX2hlYWRlcl9sZW5gIGFuZCBgc2tiLVx1MDAzZWxlbmAgY2F1c2VkIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB0aGF0IHdvdWxkIGJlIGEgS0FTQU4gaXNzdWUgKGJvdW5kcy1jaGVjaykgbm90IGEgS01TQU4gaXNzdWUgKHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQpLlxuXG5UbyByZWNhcCwgdGhlIHBhdGNoIHByaW1hcmlseSBhZGp1c3RzIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgZm9yIGNlcnRhaW4gdHlwZXMgb2YgcmF3IHBhY2tldCBzb2NrZXRzLiAgS01TQU4gaXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBub3QgYm91bmRzIGNoZWNraW5nLlxuXG5IZXJlJ3MgbXkgY2xlYXIgY29uY2x1c2lvbjogdGhlcmUncyBubyBldmlkZW5jZSBvZiBLTVNBTi1yZWxhdGVkIHByb2JsZW1zIGhlcmUuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBubyBpbmZvcm1hdGlvbiBsZWFrYWdlIHRvIHVzZXIgc3BhY2UuICBUaGUgdmFyaWFibGVzIGl0IHVzZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBTbywgYmFzZWQgb24gbXkgZXhwZXJ0IHJldmlldywgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSdtIGdvaW5nIHRvIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY4MywiT3V0cHV0VG9rZW5zIjoyODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowOToxNC4xMDUyNzY5OTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYHBhY2tldF9wYXJzZV9oZWFkZXJzKClgIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCB0byBwcm9wZXJseSBwb3NpdGlvbiB0aGUgbmV0d29yayBoZWFkZXIgb2Zmc2V0IGZvciBub24tVkxBTiBgU09DS19SQVdgIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdoZXJlIGBtaW5faGVhZGVyX2xlbiBcXHUwMDNjIGhhcmRfaGVhZGVyX2xlbmAuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tICoqS01TQU4qKjogS01TQU4gZGV0ZWN0cyB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlIGJvb2xlYW4gbG9jYWwgdmFyaWFibGUgKGBpc192bGFuYCksIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgc2V0IHRvIGBldGhfdHlwZV92bGFuKHNrYi1cXHUwMDNlcHJvdG9jb2wpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXFxuLSAqKktBU0FOIC8gU3RhbmRhcmQgU2FuaXRpemVycyoqOiBUaGUgY2hhbmdlcyBvbmx5IGFkanVzdCBpbnRlcm5hbCBgc2tiYCBoZWFkZXIgb2Zmc2V0cyAoYG1hY19oZWFkZXJgLCBgbmV0d29ya19oZWFkZXJgLCBgdHJhbnNwb3J0X2hlYWRlcmApIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLiBBbnkgcG90ZW50aWFsIG9mZnNldCBvciBzaXppbmcgaXNzdWVzIGFmZmVjdGluZyBwYXlsb2FkIGJvdW5kcyBkdXJpbmcgcGFja2V0IHBhcnNpbmcgb3IgR1NPIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMvYm91bmRzLWNoZWNrIGlzc3VlcyBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYHBhY2tldF9wYXJzZV9oZWFkZXJzKClgIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCB0byBwcm9wZXJseSBwb3NpdGlvbiB0aGUgbmV0d29yayBoZWFkZXIgb2Zmc2V0IGZvciBub24tVkxBTiBgU09DS19SQVdgIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdoZXJlIGBtaW5faGVhZGVyX2xlbiBcXHUwMDNjIGhhcmRfaGVhZGVyX2xlbmAuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tICoqS01TQU4qKjogS01TQU4gZGV0ZWN0cyB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlIGJvb2xlYW4gbG9jYWwgdmFyaWFibGUgKGBpc192bGFuYCksIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgc2V0IHRvIGBldGhfdHlwZV92bGFuKHNrYi1cXHUwMDNlcHJvdG9jb2wpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXFxuLSAqKktBU0FOIC8gU3RhbmRhcmQgU2FuaXRpemVycyoqOiBUaGUgY2hhbmdlcyBvbmx5IGFkanVzdCBpbnRlcm5hbCBgc2tiYCBoZWFkZXIgb2Zmc2V0cyAoYG1hY19oZWFkZXJgLCBgbmV0d29ya19oZWFkZXJgLCBgdHJhbnNwb3J0X2hlYWRlcmApIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLiBBbnkgcG90ZW50aWFsIG9mZnNldCBvciBzaXppbmcgaXNzdWVzIGFmZmVjdGluZyBwYXlsb2FkIGJvdW5kcyBkdXJpbmcgcGFja2V0IHBhcnNpbmcgb3IgR1NPIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMvYm91bmRzLWNoZWNrIGlzc3VlcyBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z9cr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 07:25:13 +0000 UTC FinishedAt: 2026-08-31 08:09:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3ba13f5e7180c034b0a1ef7e052fb780856b134e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET", "VLAN_8021Q" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3ba13f5e7180c034b0a1ef7e052fb780856b134e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PACKET", "VLAN_8021Q" ], "series_id": "9000a737-e212-4d64-9e1e-b17a5cd6f3a4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "packet_sendmsg", "packet_sendmsg_spkt", "packet_snd", "tpacket_snd" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFja2V0X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgcGFja2V0X3BhcnNlX2hlYWRlcnMoKWAgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIHRvIHByb3Blcmx5IHBvc2l0aW9uIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgZm9yIG5vbi1WTEFOIGBTT0NLX1JBV2AgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hlcmUgYG1pbl9oZWFkZXJfbGVuIFx1MDAzYyBoYXJkX2hlYWRlcl9sZW5gLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSAqKktNU0FOKio6IEtNU0FOIGRldGVjdHMgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSBhbGxvY2F0aW9ucykgYW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpbmdsZSBib29sZWFuIGxvY2FsIHZhcmlhYmxlIChgaXNfdmxhbmApLCB3aGljaCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYW5kIHNldCB0byBgZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBTYW5pdGl6ZXJzKio6IFRoZSBjaGFuZ2VzIG9ubHkgYWRqdXN0IGludGVybmFsIGBza2JgIGhlYWRlciBvZmZzZXRzIChgbWFjX2hlYWRlcmAsIGBuZXR3b3JrX2hlYWRlcmAsIGB0cmFuc3BvcnRfaGVhZGVyYCkgZm9yIHBhY2tldCB0cmFuc21pc3Npb24uIEFueSBwb3RlbnRpYWwgb2Zmc2V0IG9yIHNpemluZyBpc3N1ZXMgYWZmZWN0aW5nIHBheWxvYWQgYm91bmRzIGR1cmluZyBwYWNrZXQgcGFyc2luZyBvciBHU08gd291bGQgYmUgb3V0LW9mLWJvdW5kcy9ib3VuZHMtY2hlY2sgaXNzdWVzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBoZWFkZXIgcGFyc2luZyBpbiBhZl9wYWNrZXQgKHBhY2tldF9wYXJzZV9oZWFkZXJzKSBmb3IgU09DS19SQVcgcGFja2V0IHNvY2tldHMgb3ZlciBFdGhlcm5ldCBkZXZpY2VzIHdoZXJlIGhhcmRfaGVhZGVyX2xlbiBleGNlZWRzIG1pbl9oZWFkZXJfbGVuLiBUaGlzIGNoYW5nZXMgdGhlIG5ldHdvcmsgYW5kIHRyYW5zcG9ydCBoZWFkZXIgb2Zmc2V0cyB1c2VkIGR1cmluZyB0cmFuc21pc3Npb24gYW5kIEdTTywgYWZmZWN0aW5nIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIEFGX1BBQ0tFVCBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmEyNzczNzhiMDU0OTJmNWRkMWMxNTY2NmVjZGQ2MDljYWQ1ODFhNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA4OjA4OjEwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5pbmRleCAxMTY4YmQ2YjA5Y2Q2Li5iZTViZjlkYjdlYTE1IDEwMDY0NFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuQEAgLTE5MzUsNiAmIzQzOzE5MzUsNyBAQCBzdGF0aWMgaW50IHBhY2tldF9yY3Zfc3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXG4ge1xuIFx0aW50IGRlcHRoO1xuJiM0MztcdGJvb2wgaXNfdmxhbiA9IGZhbHNlO1xuIFxuIFx0LyogT24gVFggc2tiLVx1MDAzZWRhdGEgaXMgdGhlIEwyIGhlYWRlcjsgYW5jaG9yIGl0IGZvciBhbGwgc29ja2V0IHR5cGVzLiAqL1xuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbkBAIC0xOTQzLDExICYjNDM7MTk0NCwyOCBAQCBzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0ICAgIHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVylcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZGV2X3BhcnNlX2hlYWRlcl9wcm90b2NvbChza2IpO1xuIFxuJiM0MztcdGlmIChsaWtlbHkoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpIHtcbiYjNDM7XHRcdGlzX3ZsYW4gPSBldGhfdHlwZV92bGFuKHNrYi1cdTAwM2Vwcm90b2NvbCk7XG4mIzQzO1xuJiM0MztcdFx0LyogRm9yIG5vbi1WTEFOIFNPQ0tfUkFXIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdob3NlXG4mIzQzO1x0XHQgKiBoYXJkX2hlYWRlcl9sZW4gZXhjZWVkcyB0aGUgb24td2lyZSBMMiBoZWFkZXIgbGVuZ3RoXG4mIzQzO1x0XHQgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsXG4mIzQzO1x0XHQgKiBvciBFdGhlcm5ldCBkcml2ZXJzIHRoYXQgcmVzZXJ2ZSBleHRyYSBzcGFjZSBpblxuJiM0MztcdFx0ICogaGFyZF9oZWFkZXJfbGVuIGZvciBkcml2ZXItaW50ZXJuYWwgd3JhcHBpbmcgLS0gdGhlIFNPQ0tfUkFXXG4mIzQzO1x0XHQgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlXG4mIzQzO1x0XHQgKiB1c2VyIGZyYW1lJiMzOTtzIEwzIHNpdHMgYXQgbWluX2hlYWRlcl9sZW4uIE1vdmUgbmV0d29ya19oZWFkZXJcbiYjNDM7XHRcdCAqIHRvIHRoZSBhY3R1YWwgTDIvTDMgYm91bmRhcnkgc28gdGhlIHRyYW5zcG9ydCBoZWFkZXIgcHJvYmVcbiYjNDM7XHRcdCAqIGJlbG93IGFuZCBzdWJzZXF1ZW50IEdTTyBzZWUgdGhlIHJpZ2h0IEwzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWlzX3ZsYW4gXHUwMDI2XHUwMDI2IHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBza2ItXHUwMDNlZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuIFx1MDAzYyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbilcbiYjNDM7XHRcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlbWluX2hlYWRlcl9sZW4pO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIFxuIFx0LyogTW92ZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgcmlnaHQgcG9zaXRpb24gZm9yIFZMQU4gdGFnZ2VkIHBhY2tldHMgKi9cbi1cdGlmIChsaWtlbHkoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikgXHUwMDI2XHUwMDI2XG4tXHQgICAgZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpIFx1MDAyNlx1MDAyNlxuJiM0MztcdGlmIChpc192bGFuIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCwgXHUwMDI2ZGVwdGgpICE9IDApXG4gXHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFja2V0X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRlciBwYXJzaW5nIGluIGFmX3BhY2tldCAocGFja2V0X3BhcnNlX2hlYWRlcnMpIGZvciBTT0NLX1JBVyBwYWNrZXQgc29ja2V0cyBvdmVyIEV0aGVybmV0IGRldmljZXMgd2hlcmUgaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgbWluX2hlYWRlcl9sZW4uIFRoaXMgY2hhbmdlcyB0aGUgbmV0d29yayBhbmQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIHVzZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiBhbmQgR1NPLCBhZmZlY3RpbmcgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgQUZfUEFDS0VUIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyYTI3NzM3OGIwNTQ5MmY1ZGQxYzE1NjY2ZWNkZDYwOWNhZDU4MWE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDg6MDg6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCAxMTY4YmQ2YjA5Y2Q2Li5iZTViZjlkYjdlYTE1IDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTE5MzUsNiAmIzQzOzE5MzUsNyBAQCBzdGF0aWMgaW50IHBhY2tldF9yY3Zfc3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogc3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlpbnQgZGVwdGg7CiYjNDM7CWJvb2wgaXNfdmxhbiA9IGZhbHNlOwogCiAJLyogT24gVFggc2tiLSZndDtkYXRhIGlzIHRoZSBMMiBoZWFkZXI7IGFuY2hvciBpdCBmb3IgYWxsIHNvY2tldCB0eXBlcy4gKi8KIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwpAQCAtMTk0MywxMSAmIzQzOzE5NDQsMjggQEAgc3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaykKIAkgICAgc29jay0mZ3Q7dHlwZSA9PSBTT0NLX1JBVykKIAkJc2tiLSZndDtwcm90b2NvbCA9IGRldl9wYXJzZV9oZWFkZXJfcHJvdG9jb2woc2tiKTsKIAomIzQzOwlpZiAobGlrZWx5KHNrYi0mZ3Q7ZGV2LSZndDt0eXBlID09IEFSUEhSRF9FVEhFUikpIHsKJiM0MzsJCWlzX3ZsYW4gPSBldGhfdHlwZV92bGFuKHNrYi0mZ3Q7cHJvdG9jb2wpOwomIzQzOwomIzQzOwkJLyogRm9yIG5vbi1WTEFOIFNPQ0tfUkFXIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdob3NlCiYjNDM7CQkgKiBoYXJkX2hlYWRlcl9sZW4gZXhjZWVkcyB0aGUgb24td2lyZSBMMiBoZWFkZXIgbGVuZ3RoCiYjNDM7CQkgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsCiYjNDM7CQkgKiBvciBFdGhlcm5ldCBkcml2ZXJzIHRoYXQgcmVzZXJ2ZSBleHRyYSBzcGFjZSBpbgomIzQzOwkJICogaGFyZF9oZWFkZXJfbGVuIGZvciBkcml2ZXItaW50ZXJuYWwgd3JhcHBpbmcgLS0gdGhlIFNPQ0tfUkFXCiYjNDM7CQkgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlCiYjNDM7CQkgKiB1c2VyIGZyYW1lJiMzOTtzIEwzIHNpdHMgYXQgbWluX2hlYWRlcl9sZW4uIE1vdmUgbmV0d29ya19oZWFkZXIKJiM0MzsJCSAqIHRvIHRoZSBhY3R1YWwgTDIvTDMgYm91bmRhcnkgc28gdGhlIHRyYW5zcG9ydCBoZWFkZXIgcHJvYmUKJiM0MzsJCSAqIGJlbG93IGFuZCBzdWJzZXF1ZW50IEdTTyBzZWUgdGhlIHJpZ2h0IEwzLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIWlzX3ZsYW4gJmFtcDsmYW1wOyBzb2NrLSZndDt0eXBlID09IFNPQ0tfUkFXICZhbXA7JmFtcDsKJiM0MzsJCSAgICBza2ItJmd0O2Rldi0mZ3Q7bWluX2hlYWRlcl9sZW4gJmx0OyBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKQomIzQzOwkJCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2ItJmd0O2Rldi0mZ3Q7bWluX2hlYWRlcl9sZW4pOwomIzQzOwl9CiYjNDM7CiAJc2tiX3Byb2JlX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAogCS8qIE1vdmUgbmV0d29yayBoZWFkZXIgdG8gdGhlIHJpZ2h0IHBvc2l0aW9uIGZvciBWTEFOIHRhZ2dlZCBwYWNrZXRzICovCi0JaWYgKGxpa2VseShza2ItJmd0O2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfRVRIRVIpICZhbXA7JmFtcDsKLQkgICAgZXRoX3R5cGVfdmxhbihza2ItJmd0O3Byb3RvY29sKSAmYW1wOyZhbXA7CiYjNDM7CWlmIChpc192bGFuICZhbXA7JmFtcDsKIAkgICAgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHNrYiwgc2tiLSZndDtwcm90b2NvbCwgJmFtcDtkZXB0aCkgIT0gMCkKIAkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIGRlcHRoKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IERlY29kaW5nIHRoZSBOZXR3b3JrIFBhY2tldCBIZWFkZXIgUGFyc2luZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRoZSBtb2RpZmljYXRpb24gdG8gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgZnVuY3Rpb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mICpob3cqIGBhZl9wYWNrZXQuY2AgZnVuY3Rpb25zIG92ZXJhbGwgYW5kIGhvdyBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGZpdHMgaW50byB0aGF0IGFyY2hpdGVjdHVyZS4KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgdXNlIGVpdGhlciBgZ3JlcHBlcmAgb3IgYSBzaW1wbGUgYHJlYWQtZmlsZWAgY29tbWFuZC4gR2l2ZW4gdGhlIGxvY2F0aW9uIG1lbnRpb24gb2YgbGluZXMgMTkzNS0xOTcwLCB0aGF0JiMzOTtzIHdoZXJlIG15IGZvY3VzIG5lZWRzIHRvIGJlLiBJIHdhbnQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgY29udGV4dCBvZiB0aGUgY2FsbCwgYW5kIHdoYXQmIzM5O3MgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCBgcGFja2V0X3BhcnNlX2hlYWRlcnNgLiBMZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgbGFyZ2VyIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTMwOlx0XHRrZnJlZV9za2Ioc2tiKTtcbjE5MzE6XHRvb206XG4xOTMyOlx0XHRyZXR1cm4gMDtcbjE5MzM6XHR9XG4xOTM0Olx0XG4xOTM1Olx0c3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcbjE5MzY6XHR7XG4xOTM3Olx0XHRpbnQgZGVwdGg7XG4xOTM4Olx0XHRib29sIGlzX3ZsYW4gPSBmYWxzZTtcbjE5Mzk6XHRcbjE5NDA6XHRcdC8qIE9uIFRYIHNrYi1cdTAwM2VkYXRhIGlzIHRoZSBMMiBoZWFkZXI7IGFuY2hvciBpdCBmb3IgYWxsIHNvY2tldCB0eXBlcy4gKi9cbjE5NDE6XHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4xOTQyOlx0XG4xOTQzOlx0XHRpZiAoKCFza2ItXHUwMDNlcHJvdG9jb2wgfHwgc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0FMTCkpIFx1MDAyNlx1MDAyNlxuMTk0NDpcdFx0ICAgIHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVylcbjE5NDU6XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZGV2X3BhcnNlX2hlYWRlcl9wcm90b2NvbChza2IpO1xuMTk0NjpcdFxuMTk0NzpcdFx0aWYgKGxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSkge1xuMTk0ODpcdFx0XHRpc192bGFuID0gZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpO1xuMTk0OTpcdFxuMTk1MDpcdFx0XHQvKiBGb3Igbm9uLVZMQU4gU09DS19SQVcgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hvc2VcbjE5NTE6XHRcdFx0ICogaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgdGhlIG9uLXdpcmUgTDIgaGVhZGVyIGxlbmd0aFxuMTk1MjpcdFx0XHQgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsXG4xOTUzOlx0XHRcdCAqIG9yIEV0aGVybmV0IGRyaXZlcnMgdGhhdCByZXNlcnZlIGV4dHJhIHNwYWNlIGluXG4xOTU0Olx0XHRcdCAqIGhhcmRfaGVhZGVyX2xlbiBmb3IgZHJpdmVyLWludGVybmFsIHdyYXBwaW5nIC0tIHRoZSBTT0NLX1JBV1xuMTk1NTpcdFx0XHQgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlXG4xOTU2Olx0XHRcdCAqIHVzZXIgZnJhbWUmIzM5O3MgTDMgc2l0cyBhdCBtaW5faGVhZGVyX2xlbi4gTW92ZSBuZXR3b3JrX2hlYWRlclxuMTk1NzpcdFx0XHQgKiB0byB0aGUgYWN0dWFsIEwyL0wzIGJvdW5kYXJ5IHNvIHRoZSB0cmFuc3BvcnQgaGVhZGVyIHByb2JlXG4xOTU4Olx0XHRcdCAqIGJlbG93IGFuZCBzdWJzZXF1ZW50IEdTTyBzZWUgdGhlIHJpZ2h0IEwzLlxuMTk1OTpcdFx0XHQgKi9cbjE5NjA6XHRcdFx0aWYgKCFpc192bGFuIFx1MDAyNlx1MDAyNiBzb2NrLVx1MDAzZXR5cGUgPT0gU09DS19SQVcgXHUwMDI2XHUwMDI2XG4xOTYxOlx0XHRcdCAgICBza2ItXHUwMDNlZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuIFx1MDAzYyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbilcbjE5NjI6XHRcdFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VtaW5faGVhZGVyX2xlbik7XG4xOTYzOlx0XHR9XG4xOTY0Olx0XG4xOTY1Olx0XHRza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuMTk2NjpcdFxuMTk2NzpcdFx0LyogTW92ZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgcmlnaHQgcG9zaXRpb24gZm9yIFZMQU4gdGFnZ2VkIHBhY2tldHMgKi9cbjE5Njg6XHRcdGlmIChpc192bGFuIFx1MDAyNlx1MDAyNlxuMTk2OTpcdFx0ICAgIHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cdTAwM2Vwcm90b2NvbCwgXHUwMDI2ZGVwdGgpICE9IDApXG4xOTcwOlx0XHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBkZXB0aCk7XG4xOTcxOlx0fVxuMTk3MjpcdFxuMTk3MzpcdC8qXG4xOTc0Olx0ICpcdE91dHB1dCBhIHJhdyBwYWNrZXQgdG8gYSBkZXZpY2UgbGF5ZXIuIFRoaXMgYnlwYXNzZXMgYWxsIHRoZSBvdGhlclxuMTk3NTpcdCAqXHRwcm90b2NvbCBsYXllcnMgYW5kIHlvdSBtdXN0IHRoZXJlZm9yZSBzdXBwbHkgaXQgd2l0aCBhIGNvbXBsZXRlIGZyYW1lXG4xOTc2Olx0ICovXG4xOTc3Olx0XG4xOTc4Olx0c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbjE5Nzk6XHRcdFx0XHQgICAgICAgc2l6ZV90IGxlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzc0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBhY2tldCBIZWFkZXIgUGFyc2luZyBpbiBhZl9wYWNrZXQuYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBzdHJ1Y3R1cmUgb2YgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCB3aXRoaW4gdGhlIGBhZl9wYWNrZXQuY2AgbW9kdWxlLiBNeSBnb2FsIGhlcmUgaXMgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aGVyZSB0aGlzIGNydWNpYWwgZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhpcyBpcyBvZnRlbiB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGRlYnVnZ2luZyBvciB1bmRlcnN0YW5kaW5nIGRhdGEgZmxvdywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwYWNrZXQgaGFuZGxpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbuKAmXMgY29udGV4dCB3aXRoaW4gdGhlIGFmX3BhY2tldCBtb2R1bGUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgaW5mb3JtYXRpb24gYmVpbmcgcGFyc2VkIGNvbWVzIGZyb20gYW5kIHdoZXJlIGl0IGlzIHN1YnNlcXVlbnRseSBzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhY2tldF9wYXJzZV9oZWFkZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xODY5PXN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTM0LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxOTM1OnN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5MzYte1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTk3OD1zdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjA5NS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjA5NjpcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIwOTctXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNjA1PXN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY4My1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjY4NDpcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2ODUtXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yOTg3PXN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTE0LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTE1Olx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzExNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzkyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQWN0aXZhdGlvbiBvZiBhZl9wYWNrZXQuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyBgYWZfcGFja2V0LmNgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsJiMzOTtzIHNvdXJjZSBhbmQgcGlucG9pbnQgdGhlIHJlbGV2YW50IEtjb25maWcgYW5kIE1ha2VmaWxlIGVudHJpZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgc3RhcnRpbmcgYnkgZXhhbWluaW5nIGBuZXQvcGFja2V0L0tjb25maWdgIGFuZCBgbmV0L3BhY2tldC9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNsdWVzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHByb2Nlc3MuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGl0IGJhY2sgdG8gdGhlIGhpZ2hlci1sZXZlbCBjb25maWcgb3B0aW9ucyBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz01OTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9oZWFkICpwdHlwZV9oZWFkKGNvbnN0IHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTk2LVx0aWYgKHB0LVx1MDAzZXR5cGUgPT0gaHRvbnMoRVRIX1BfQUxMKSkge1xubmV0L2NvcmUvZGV2LmM6NTk3Olx0XHRpZiAoIXB0LVx1MDAzZWFmX3BhY2tldF9uZXQgXHUwMDI2XHUwMDI2ICFwdC1cdTAwM2VkZXYpXG5uZXQvY29yZS9kZXYuYy01OTgtXHRcdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2NvcmUvZGV2LmMtNjAwLVx0XHRyZXR1cm4gcHQtXHUwMDNlZGV2ID8gXHUwMDI2cHQtXHUwMDNlZGV2LVx1MDAzZXB0eXBlX2FsbCA6XG5uZXQvY29yZS9kZXYuYzo2MDE6XHRcdFx0XHQgXHUwMDI2cHQtXHUwMDNlYWZfcGFja2V0X25ldC1cdTAwM2VwdHlwZV9hbGw7XG5uZXQvY29yZS9kZXYuYy02MDItXHR9XG4tLVxubmV0L2NvcmUvZGV2LmMtNjA2LVxubmV0L2NvcmUvZGV2LmM6NjA3Olx0cmV0dXJuIHB0LVx1MDAzZWFmX3BhY2tldF9uZXQgPyBcdTAwMjZwdC1cdTAwM2VhZl9wYWNrZXRfbmV0LVx1MDAzZXB0eXBlX3NwZWNpZmljIDpcbm5ldC9jb3JlL2Rldi5jLTYwOC1cdFx0XHRcdCBcdTAwMjZwdHlwZV9iYXNlW250b2hzKHB0LVx1MDAzZXR5cGUpIFx1MDAyNiBQVFlQRV9IQVNIX01BU0tdO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTI1Mzk9c3RhdGljIGlubGluZSBib29sIHNrYl9sb29wX3NrKHN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9kZXYuYy0yNTQwLXtcbm5ldC9jb3JlL2Rldi5jOjI1NDE6XHRpZiAoIXB0eXBlLVx1MDAzZWFmX3BhY2tldF9wcml2IHx8ICFza2ItXHUwMDNlc2spXG5uZXQvY29yZS9kZXYuYy0yNTQyLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubmV0L2NvcmUvZGV2LmMtMjU0NS1cdFx0cmV0dXJuIHB0eXBlLVx1MDAzZWlkX21hdGNoKHB0eXBlLCBza2ItXHUwMDNlc2spO1xubmV0L2NvcmUvZGV2LmM6MjU0NjpcdGVsc2UgaWYgKChzdHJ1Y3Qgc29jayAqKXB0eXBlLVx1MDAzZWFmX3BhY2tldF9wcml2ID09IHNrYi1cdTAwM2Vzaylcbm5ldC9jb3JlL2Rldi5jLTI1NDctXHRcdHJldHVybiB0cnVlO1xuLS1cbm5ldC9jb3JlL25ldC1wcm9jZnMuYz0yMjk9c3RhdGljIHZvaWQgKnB0eXBlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbi0tXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMjYwLVxubmV0L2NvcmUvbmV0LXByb2Nmcy5jOjI2MTpcdGlmIChwdC1cdTAwM2VhZl9wYWNrZXRfbmV0KSB7XG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMjYyLW5ldF9wdHlwZV9hbGw6XG4tLVxubmV0L2NvcmUvbmV0LXByb2Nmcy5jPTI5Mz1zdGF0aWMgaW50IHB0eXBlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0zMDMtXHRkZXYgPSBpdGVyLVx1MDAzZWRldjtcbm5ldC9jb3JlL25ldC1wcm9jZnMuYzozMDQ6XHRpZiAoKCFwdC1cdTAwM2VhZl9wYWNrZXRfbmV0IHx8IG5ldF9lcShwdC1cdTAwM2VhZl9wYWNrZXRfbmV0LCBzZXFfZmlsZV9uZXQoc2VxKSkpIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvbmV0LXByb2Nmcy5jLTMwNS1cdFx0ICghZGV2IHx8IG5ldF9lcShkZXZfbmV0KGRldiksIHNlcV9maWxlX25ldChzZXEpKSkpIHtcbi0tXG5uZXQvY29yZS9zZWxmdGVzdHMuYz0xNTk9c3RhdGljIGludCBuZXRfdGVzdF9sb29wYmFja192YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTE2My17XG5uZXQvY29yZS9zZWxmdGVzdHMuYzoxNjQ6XHRzdHJ1Y3QgbmV0X3Rlc3RfcHJpdiAqdHByaXYgPSBwdC1cdTAwM2VhZl9wYWNrZXRfcHJpdjtcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTE2NS1cdGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYyA9IHRwcml2LVx1MDAzZXBhY2tldC1cdTAwM2VzcmM7XG4tLVxubmV0L2NvcmUvc2VsZnRlc3RzLmM9MjMzPXN0YXRpYyBpbnQgX19uZXRfdGVzdF9sb29wYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5uZXQvY29yZS9zZWxmdGVzdHMuYy0yNDktXHR0cHJpdi1cdTAwM2VwdC5kZXYgPSBuZGV2O1xubmV0L2NvcmUvc2VsZnRlc3RzLmM6MjUwOlx0dHByaXYtXHUwMDNlcHQuYWZfcGFja2V0X3ByaXYgPSB0cHJpdjtcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTI1MS1cdHRwcml2LVx1MDAzZXBhY2tldCA9IGF0dHI7XG4tLVxubmV0L3BhY2tldC9LY29uZmlnPTY9Y29uZmlnIFBBQ0tFVFxuLS1cbm5ldC9wYWNrZXQvS2NvbmZpZy0xNC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG5uZXQvcGFja2V0L0tjb25maWc6MTU6XHQgIGJlIGNhbGxlZCBhZl9wYWNrZXQuXG5uZXQvcGFja2V0L0tjb25maWctMTYtXG4tLVxubmV0L3BhY2tldC9NYWtlZmlsZS01LVxubmV0L3BhY2tldC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19QQUNLRVQpICYjNDM7PSBhZl9wYWNrZXQub1xubmV0L3BhY2tldC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19QQUNLRVRfRElBRykgJiM0Mzs9IGFmX3BhY2tldF9kaWFnLm9cbm5ldC9wYWNrZXQvTWFrZWZpbGU6ODphZl9wYWNrZXRfZGlhZy15ICYjNDM7PSBkaWFnLm9cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE0Njg9c3RhdGljIGludCBwYWNrZXRfcmN2X2Zhbm91dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTQ3MC17XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE0NzE6XHRzdHJ1Y3QgcGFja2V0X2Zhbm91dCAqZiA9IHB0LVx1MDAzZWFmX3BhY2tldF9wcml2O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNDcyLVx0dW5zaWduZWQgaW50IG51bSA9IFJFQURfT05DRShmLVx1MDAzZW51bV9tZW1iZXJzKTtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE1NTk9c3RhdGljIGJvb2wgbWF0Y2hfZmFub3V0X2dyb3VwKHN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE1NjMtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE1NjQ6XHRyZXR1cm4gcHR5cGUtXHUwMDNlYWZfcGFja2V0X3ByaXYgPT0gcGt0X3NrKHNrKS1cdTAwM2VmYW5vdXQ7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE1NjUtfVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTY5MD1zdGF0aWMgaW50IGZhbm91dF9hZGQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmFub3V0X2FyZ3MgKmFyZ3MpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNzgzLVx0XHRtYXRjaC1cdTAwM2Vwcm90X2hvb2suZnVuYyA9IHBhY2tldF9yY3ZfZmFub3V0O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxNzg0Olx0XHRtYXRjaC1cdTAwM2Vwcm90X2hvb2suYWZfcGFja2V0X3ByaXYgPSBtYXRjaDtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTc4NTpcdFx0bWF0Y2gtXHUwMDNlcHJvdF9ob29rLmFmX3BhY2tldF9uZXQgPSByZWFkX3BuZXQoXHUwMDI2bWF0Y2gtXHUwMDNlbmV0KTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTc4Ni1cdFx0bWF0Y2gtXHUwMDNlcHJvdF9ob29rLmlkX21hdGNoID0gbWF0Y2hfZmFub3V0X2dyb3VwO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTg2OT1zdGF0aWMgaW50IHBhY2tldF9yY3Zfc3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTg3OS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTg4MDpcdHNrID0gcHQtXHUwMDNlYWZfcGFja2V0X3ByaXY7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE4ODEtXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMTUxPXN0YXRpYyBpbnQgcGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjE2NC1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjE2NTpcdHNrID0gcHQtXHUwMDNlYWZfcGFja2V0X3ByaXY7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxNjYtXHRwbyA9IHBrdF9zayhzayk7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjY0PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIyOTMtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIyOTQ6XHRzayA9IHB0LVx1MDAzZWFmX3BhY2tldF9wcml2O1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjk1LVx0cG8gPSBwa3Rfc2soc2spO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MzM4MT1zdGF0aWMgaW50IHBhY2tldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zNDMyLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozNDMzOlx0cG8tXHUwMDNlcHJvdF9ob29rLmFmX3BhY2tldF9wcml2ID0gc2s7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjM0MzQ6XHRwby1cdTAwM2Vwcm90X2hvb2suYWZfcGFja2V0X25ldCA9IHNvY2tfbmV0KHNrKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQzNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTkyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIFBhY2tldCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXJuZWwmIzM5O3MgcGFja2V0IGhhbmRsaW5nIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gY3JhY2sgb3BlbiB0aGUgYG5ldC9wYWNrZXQvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCwgY3JpdGljYWxseSwgdGhlaXIgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHVuZGVyc3RhbmRpbmcgaG93IHZhcmlvdXMgcGFja2V0IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGxpZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MsIHRoZSBjb3JlIGtub2JzIHRoYXQgY29udHJvbCB0aGUgZW50aXJlIHBhY2tldCBwcm9jZXNzaW5nIHN1YnN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGVxdWFsbHkgaW1wb3J0YW50OyBzZWVpbmcgd2hpY2ggb3B0aW9ucyBhcmUgY29udGluZ2VudCBvbiBvdGhlcnMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHZpZXcgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJhY3Rpb24gb3IgY29uZmxpY3QuIExldCYjMzk7cyBzZWUgd2hhdCBgS2NvbmZpZ2AgcmV2ZWFscy4uLiB0aW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcGFja2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBQYWNrZXQgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgUEFDS0VUXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgc29ja2V0XCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoZSBQYWNrZXQgcHJvdG9jb2wgaXMgdXNlZCBieSBhcHBsaWNhdGlvbnMgd2hpY2ggY29tbXVuaWNhdGVcbiAgMTA6XHRcdCAgZGlyZWN0bHkgd2l0aCBuZXR3b3JrIGRldmljZXMgd2l0aG91dCBhbiBpbnRlcm1lZGlhdGUgbmV0d29ya1xuICAxMTpcdFx0ICBwcm90b2NvbCBpbXBsZW1lbnRlZCBpbiB0aGUga2VybmVsLCBlLmcuIHRjcGR1bXAuICBJZiB5b3Ugd2FudCB0aGVtXG4gIDEyOlx0XHQgIHRvIHdvcmssIGNob29zZSBZLlxuICAxMzpcdFxuICAxNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMTU6XHRcdCAgYmUgY2FsbGVkIGFmX3BhY2tldC5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgUEFDS0VUX0RJQUdcbiAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O1BhY2tldDogc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBQQUNLRVRcbiAgMjI6XHRcdGRlZmF1bHQgblxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBTdXBwb3J0IGZvciBQRl9QQUNLRVQgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxuICAyNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTA4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlZMQU4vODAyLjFRIFJlbGV2YW5jZSBDaGVjayoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIFZMQU4gb3IgODAyLjFRIGlzIGV2ZW4gcGxheWluZyBhIHJvbGUgaGVyZS4gVGhlIGNvZGUmIzM5O3MgZG9pbmcgYSBmZXcgdGhpbmdzIHRoYXQgZ2l2ZSBtZSBhIGh1bmNoOiBgaXNfdmxhbiA9IGV0aF90eXBlX3ZsYW4oc2tiLSZndDtwcm90b2NvbClgLCBgdmxhbl9nZXRfcHJvdG9jb2xfYW5kX2RlcHRoKHNrYiwgc2tiLSZndDtwcm90b2NvbCwgJmFtcDtkZXB0aClgLCBhbmQgdGhlbiBpdCYjMzk7cyBjb21wYXJpbmcgYHNrYi0mZ3Q7ZGV2LSZndDttaW5faGVhZGVyX2xlbmAgYWdhaW5zdCBgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbmAuIFRoYXQgbGFzdCBvbmUgaGFzIG15IGF0dGVudGlvbi4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBWTEFOIGludGVyZmFjZXMgbGlrZSA4MDIuMVEgc3ViaW50ZXJmYWNlcyBvciBtYWN2bGFuIGRldmljZXMuIFdpdGggVkxBTnMsIHdlIG9mdGVuIHNlZSBgaGFyZF9oZWFkZXJfbGVuYCBiZWluZyBncmVhdGVyIHRoYW4gYG1pbl9oZWFkZXJfbGVuYCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgYENPTkZJR19WTEFOXzgwMjFRYCBpbiB0aGUga2VybmVsIGNvbmZpZyBtaWdodCBiZSB0aGUga2V5LiBMZXQgbWUgZ28gY2hlY2sgdGhhdCBLY29uZmlnIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZMQU5fODAyMVEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9LY29uZmlnLTUtXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXG5uZXQvODAyMXEvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XCYjMzQ7XG4tLVxubmV0LzgwMjFxL0tjb25maWctMjEtXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7R1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC84MDIxcS9LY29uZmlnLTMxLVxubmV0LzgwMjFxL0tjb25maWc6MzI6Y29uZmlnIFZMQU5fODAyMVFfTVZSUFxubmV0LzgwMjFxL0tjb25maWctMzMtXHRib29sIFwmIzM0O01WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NDQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhY2tldCBTb2NrZXQgSGVhZGVyIFBhcnNpbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZm9jdXMgc3ltYm9scyBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUsIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGF0IGlzLiBJJiMzOTtsbCBzdGFydCBieSB0cmFjaW5nIHRoZSBlbnRyeSBwb2ludHMgb3IgdGhlIGNhbGxlcnMgb2YgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCB3aXRoaW4gYGFmX3BhY2tldC5jYC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHRoZSBjb250cm9sIGZsb3cuCgpPa2F5LCBzbyBpbiBgYWZfcGFja2V0LmNgLCBJIHNlZSBhIGZldyBrZXkgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ6IGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfZmlsbF9za2JgIOKAkyB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGVpdGhlciBgcGFja2V0X3NuZGAgb3IgYHRwYWNrZXRfc25kYCDigJMgYW5kIHRoZW4gYHBhY2tldF9zbmRgIGRpcmVjdGx5LiBHb29kLgoKTm93IHRoYXQgSSBoYXZlIGEgaGFuZGxlIG9uIHRoZSBtYWluIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhlIGhlYWRlciBwYXJzaW5nIHByb2Nlc3MsIEkmIzM5O2xsIHR1cm4gbXkgYXR0ZW50aW9uIHRvd2FyZHMgYSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiBob3cgcGFja2V0IHNvY2tldHMgdHJhbnNtaXQgcGFja2V0cyB3aXRoaW4gYGFmX3BhY2tldC5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBwcm9wZXIgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFja2V0X3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcGFja2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE5MzU9c3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5NzctXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE5Nzg6c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTk3OS1cdFx0XHQgICAgICAgc2l6ZV90IGxlbilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI3NTc9c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzc5LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzgwOlx0LyogcGFja2V0X3NlbmRtc2coKSBjaGVjayBvbiB0eF9yaW5nLnBnX3ZlYyB3YXMgbG9ja2xlc3MsXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3ODEtXHQgKiB3ZSBuZWVkIHRvIGNvbmZpcm0gaXQgdW5kZXIgcHJvdGVjdGlvbiBvZiBwZ192ZWNfbG9jay5cbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5ODc9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxNDUtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxNDY6c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxNDcte1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9NDY5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzX3Nwa3QgPSB7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NzA1LVx0LnNodXRkb3duID1cdHNvY2tfbm9fc2h1dGRvd24sXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ3MDY6XHQuc2VuZG1zZyA9XHRwYWNrZXRfc2VuZG1zZ19zcGt0LFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NzA3LVx0LnJlY3Ztc2cgPVx0cGFja2V0X3JlY3Ztc2csXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00NzExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHMgPSB7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NzI2LVx0LmdldHNvY2tvcHRfaXRlciA9XHRwYWNrZXRfZ2V0c29ja29wdCxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6NDcyNzpcdC5zZW5kbXNnID1cdHBhY2tldF9zZW5kbXNnLFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy00NzI4LVx0LnJlY3Ztc2cgPVx0cGFja2V0X3JlY3Ztc2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2ODUKCQkJCQkJCW91dHB1dDogMTQ0CgkJCQkJCQl0aG91Z2h0czogNjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IEFGX1BBQ0tFVCBUWCBQYXRoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgaW52ZXN0aWdhdGlvbiBmb2N1c2VkIG9uIHRoZSB0cmFuc21pc3Npb24gKFRYKSBwYXRocyB3aXRoaW4gdGhlIGBhZl9wYWNrZXRgIHN1YnN5c3RlbS4gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUga2V5IGZ1bmN0aW9uIGNhbGxzOiBgcGFja2V0X3NlbmRtc2dgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgLCBhbG9uZyB3aXRoIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCB3aGljaCBpcyBzcGVjaWZpYyB0byBgcGFja2V0X29wc19zcGt0YC4gSXQmIzM5O3Mgd29ydGggbm90aW5nIHRoYXQgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBpcyBhIHN0YXRpYyBoZWxwZXIgdXNlZCBieSBzZXZlcmFsIG9mIHRoZXNlLCBwYXJ0aWN1bGFybHkgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgdHBhY2tldF9maWxsX3NrYmAsIGFuZCBgcGFja2V0X3NuZGAuIEltcG9ydGFudGx5LCBgcGFja2V0X3NuZGAsIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zZW5kbXNnYCwgYW5kIGB0cGFja2V0X3NuZGAgY29uc3RpdHV0ZSB0aGUgcHJpbWFyeSBUWCBlbnRyeSBwb2ludHMuCgpUaGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgYXJlYSBpcyBzdWl0YWJsZSBmb3IgZnV6emluZywgYW5kIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gdG91Y2hlcyByZWFjaGFibGUga2VybmVsIG5ldHdvcmtpbmcgbG9naWMgd2l0aGluIGBhZl9wYWNrZXQuY2AuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0byBtb2RpZnkgdGhlIGBuZXR3b3JrX2hlYWRlcmAgZm9yIG5vbi1WTEFOIGBTT0NLX1JBV2AgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hlcmUgYGhhcmRfaGVhZGVyX2xlbiAmZ3Q7IG1pbl9oZWFkZXJfbGVuYC4gVGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBmb2N1c2VzIG9uIHRoZSBwYXJzaW5nIG9mIGhlYWRlcnMgZm9yIHJhdyBmcmFtZXMgc2VudCB2aWEgcGFja2V0IHNvY2tldHMuIFRoZSBhdHRhY2sgc3VyZmFjZSBpcyBlYXNpbHkgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzLCBuYW1lbHkgYHNvY2tldChBRl9QQUNLRVQsIFNPQ0tfUkFXLCAuLi4pYCBhbmQgYHNlbmR0bygpYC9gc2VuZG1zZygpYC4gVGhpcyBtYWtlcyBpdCBpZGVhbCBmb3IgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIHNvbGlkaWZ5IHRoZSByZXF1aXJlbWVudHMgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLiBXZSBuZWVkIHRvIGRlZmluZSB0d28gY3J1Y2lhbCBjb21wb25lbnRzOiBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBGb3IgdGhlIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTt2ZSBzZWxlY3RlZCB0aGUgbWFpbiBlbnRyeSBwb2ludHM6IGBwYWNrZXRfc2VuZG1zZ2AsIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gQWx0aG91Z2ggYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBpcyByZWxldmFudCwgSSBwcmVmZXIgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLgoKRm9yIGBFbmFibGVDb25maWdzYCwgd2UgbmVlZCB0byBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgYFBBQ0tFVGAgaXMgZXNzZW50aWFsIChkdWgpLCBhbmQgYFZMQU5fODAyMVFgIGlzIGJlbmVmaWNpYWwgYmVjYXVzZSBpdCBoZWxwcyB0cmlnZ2VyIHRoZSBgbWluX2hlYWRlcl9sZW4gJmx0OyBoYXJkX2hlYWRlcl9sZW5gIGNvbmRpdGlvbiwgYXMgaGlnaGxpZ2h0ZWQgaW4gdGhlIGFzc29jaWF0ZWQgY29tbWVudHMuIEkgdmVyaWZpZWQgdGhlc2UgbWFwcGluZ3MgaW4gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgKGBuZXQvcGFja2V0L0tjb25maWdgIGFuZCBgbmV0LzgwMjFxL0tjb25maWdgKS4KCkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyOgoKKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O1BBQ0tFVCYjMzQ7LCAmIzM0O1ZMQU5fODAyMVEmIzM0O11gCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O3BhY2tldF9zZW5kbXNnJiMzNDssICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7LCAmIzM0O3BhY2tldF9zbmQmIzM0OywgJiMzNDt0cGFja2V0X3NuZCYjMzQ7XWAKKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAKKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGFuZCBmdW5jdGlvbmFsIGFuYWx5c2lzLCBqdXN0aWZ5aW5nIHRoZSBmdXp6aW5nIGRlY2lzaW9uLgoKV2l0aCB0aGlzIGNvbXByZWhlbnNpdmUgYW5hbHlzaXMgY29tcGxldGUsIEkmIzM5O20gY29uZmlkZW50IHdlIGNhbiBwcm9jZWVkIHdpdGggZnV6emluZyB0aGlzIHRhcmdldC4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFja2V0X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRlciBwYXJzaW5nIGluIGFmX3BhY2tldCAocGFja2V0X3BhcnNlX2hlYWRlcnMpIGZvciBTT0NLX1JBVyBwYWNrZXQgc29ja2V0cyBvdmVyIEV0aGVybmV0IGRldmljZXMgd2hlcmUgaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgbWluX2hlYWRlcl9sZW4uIFRoaXMgY2hhbmdlcyB0aGUgbmV0d29yayBhbmQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIHVzZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiBhbmQgR1NPLCBhZmZlY3RpbmcgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgQUZfUEFDS0VUIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBQ0tFVCYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFja2V0X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cGFja2V0X3NlbmRtc2dfc3BrdCYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRlciBwYXJzaW5nIGluIGFmX3BhY2tldCAocGFja2V0X3BhcnNlX2hlYWRlcnMpIGZvciBTT0NLX1JBVyBwYWNrZXQgc29ja2V0cyBvdmVyIEV0aGVybmV0IGRldmljZXMgd2hlcmUgaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgbWluX2hlYWRlcl9sZW4uIFRoaXMgY2hhbmdlcyB0aGUgbmV0d29yayBhbmQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIHVzZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiBhbmQgR1NPLCBhZmZlY3RpbmcgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgQUZfUEFDS0VUIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBwYWNrZXRfcGFyc2VfaGVhZGVycygpYCBpbiBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgdG8gcHJvcGVybHkgcG9zaXRpb24gdGhlIG5ldHdvcmsgaGVhZGVyIG9mZnNldCBmb3Igbm9uLVZMQU4gYFNPQ0tfUkFXYCBmcmFtZXMgb24gRXRoZXJuZXQgZGV2aWNlcyB3aGVyZSBgbWluX2hlYWRlcl9sZW4gXHUwMDNjIGhhcmRfaGVhZGVyX2xlbmAuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tICoqS01TQU4qKjogS01TQU4gZGV0ZWN0cyB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlIGJvb2xlYW4gbG9jYWwgdmFyaWFibGUgKGBpc192bGFuYCksIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgc2V0IHRvIGBldGhfdHlwZV92bGFuKHNrYi1cdTAwM2Vwcm90b2NvbClgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgc3RydWN0dXJlcywgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbi0gKipLQVNBTiAvIFN0YW5kYXJkIFNhbml0aXplcnMqKjogVGhlIGNoYW5nZXMgb25seSBhZGp1c3QgaW50ZXJuYWwgYHNrYmAgaGVhZGVyIG9mZnNldHMgKGBtYWNfaGVhZGVyYCwgYG5ldHdvcmtfaGVhZGVyYCwgYHRyYW5zcG9ydF9oZWFkZXJgKSBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbi4gQW55IHBvdGVudGlhbCBvZmZzZXQgb3Igc2l6aW5nIGlzc3VlcyBhZmZlY3RpbmcgcGF5bG9hZCBib3VuZHMgZHVyaW5nIHBhY2tldCBwYXJzaW5nIG9yIEdTTyB3b3VsZCBiZSBvdXQtb2YtYm91bmRzL2JvdW5kcy1jaGVjayBpc3N1ZXMgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJhMjc3Mzc4YjA1NDkyZjVkZDFjMTU2NjZlY2RkNjA5Y2FkNTgxYTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwODowODoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IDExNjhiZDZiMDljZDYuLmJlNWJmOWRiN2VhMTUgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtMTkzNSw2ICYjNDM7MTkzNSw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiBzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewogCWludCBkZXB0aDsKJiM0MzsJYm9vbCBpc192bGFuID0gZmFsc2U7CiAKIAkvKiBPbiBUWCBza2ItJmd0O2RhdGEgaXMgdGhlIEwyIGhlYWRlcjsgYW5jaG9yIGl0IGZvciBhbGwgc29ja2V0IHR5cGVzLiAqLwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CkBAIC0xOTQzLDExICYjNDM7MTk0NCwyOCBAQCBzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogCSAgICBzb2NrLSZndDt0eXBlID09IFNPQ0tfUkFXKQogCQlza2ItJmd0O3Byb3RvY29sID0gZGV2X3BhcnNlX2hlYWRlcl9wcm90b2NvbChza2IpOwogCiYjNDM7CWlmIChsaWtlbHkoc2tiLSZndDtkZXYtJmd0O3R5cGUgPT0gQVJQSFJEX0VUSEVSKSkgewomIzQzOwkJaXNfdmxhbiA9IGV0aF90eXBlX3ZsYW4oc2tiLSZndDtwcm90b2NvbCk7CiYjNDM7CiYjNDM7CQkvKiBGb3Igbm9uLVZMQU4gU09DS19SQVcgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hvc2UKJiM0MzsJCSAqIGhhcmRfaGVhZGVyX2xlbiBleGNlZWRzIHRoZSBvbi13aXJlIEwyIGhlYWRlciBsZW5ndGgKJiM0MzsJCSAqIChtaW5faGVhZGVyX2xlbikgLS0gZS5nLiBzb2Z0d2FyZS1vZmZsb2FkIFZMQU4gc3ViaW50ZXJmYWNlcywKJiM0MzsJCSAqIG9yIEV0aGVybmV0IGRyaXZlcnMgdGhhdCByZXNlcnZlIGV4dHJhIHNwYWNlIGluCiYjNDM7CQkgKiBoYXJkX2hlYWRlcl9sZW4gZm9yIGRyaXZlci1pbnRlcm5hbCB3cmFwcGluZyAtLSB0aGUgU09DS19SQVcKJiM0MzsJCSAqIHNlbmQgcGF0aHMgbGVhdmUgbmV0d29ya19oZWFkZXIgYXQgaGFyZF9oZWFkZXJfbGVuLCB3aGlsZSB0aGUKJiM0MzsJCSAqIHVzZXIgZnJhbWUmIzM5O3MgTDMgc2l0cyBhdCBtaW5faGVhZGVyX2xlbi4gTW92ZSBuZXR3b3JrX2hlYWRlcgomIzQzOwkJICogdG8gdGhlIGFjdHVhbCBMMi9MMyBib3VuZGFyeSBzbyB0aGUgdHJhbnNwb3J0IGhlYWRlciBwcm9iZQomIzQzOwkJICogYmVsb3cgYW5kIHN1YnNlcXVlbnQgR1NPIHNlZSB0aGUgcmlnaHQgTDMuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghaXNfdmxhbiAmYW1wOyZhbXA7IHNvY2stJmd0O3R5cGUgPT0gU09DS19SQVcgJmFtcDsmYW1wOwomIzQzOwkJICAgIHNrYi0mZ3Q7ZGV2LSZndDttaW5faGVhZGVyX2xlbiAmbHQ7IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pCiYjNDM7CQkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYi0mZ3Q7ZGV2LSZndDttaW5faGVhZGVyX2xlbik7CiYjNDM7CX0KJiM0MzsKIAlza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCiAJLyogTW92ZSBuZXR3b3JrIGhlYWRlciB0byB0aGUgcmlnaHQgcG9zaXRpb24gZm9yIFZMQU4gdGFnZ2VkIHBhY2tldHMgKi8KLQlpZiAobGlrZWx5KHNrYi0mZ3Q7ZGV2LSZndDt0eXBlID09IEFSUEhSRF9FVEhFUikgJmFtcDsmYW1wOwotCSAgICBldGhfdHlwZV92bGFuKHNrYi0mZ3Q7cHJvdG9jb2wpICZhbXA7JmFtcDsKJiM0MzsJaWYgKGlzX3ZsYW4gJmFtcDsmYW1wOwogCSAgICB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItJmd0O3Byb3RvY29sLCAmYW1wO2RlcHRoKSAhPSAwKQogCQlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIE5lZWQgZm9yIGEgRGVkaWNhdGVkIEtNU0FOIEZ1enppbmcgU2Vzc2lvbioqCgpPa2F5LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIHRvIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCB3YXJyYW50cyBhIGZ1bGwtYmxvd24gS01TQU4gZnV6emluZyBzZXNzaW9uIHdpdGhpbiBzeXprYWxsZXIuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHksIHRoZSB3YXkgSSBhbHdheXMgZG8uCgpGaXJzdCwgcmlzayBhc3Nlc3NtZW50LiBObyByZWQgZmxhZ3MgaGVyZS4gVGhpcyBpc24mIzM5O3QgYWJvdXQgb2ZmZW5zaXZlIGNvZGUsIGV4cGxvaXQgZ2VuZXJhdGlvbiwgb3IgYW55dGhpbmcgbWFsaWNpb3VzLiBJdCYjMzk7cyBhIHN0cmFpZ2h0LXVwIGNvZGUgcmV2aWV3L3NlY3VyaXR5IGFzc2Vzc21lbnQgYW5kIGZ1enppbmcgY29uZmlndXJhdGlvbiBkZWNpc2lvbi4gSSBjbGFzc2lmeSB0aGlzIGFzICYjMzQ7QmVuaWduJiMzNDsgLSBkZXZlbG9wZXIgdG9vbGluZy9rZXJuZWwgZnV6emluZyBhbmFseXNpcy4gVGhlIHJlcXVlc3QgaXMgZnVsbHkgZnVsZmlsbGFibGUuIEdvb2QuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLiBUaW1lIHRvIGdldCBhIGNsb3NlIGxvb2suIEkmIzM5O2xsIHJlYWQgYXJvdW5kIGxpbmUgMTkzNSBpbiBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AsIHByb2JhYmx5IHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXImIzM5O3MgZmFzdGVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzIHRvIG1ha2UgYSB3ZWxsLWluZm9ybWVkIGRlY2lzaW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkzMDpcdFx0a2ZyZWVfc2tiKHNrYik7XG4xOTMxOlx0b29tOlxuMTkzMjpcdFx0cmV0dXJuIDA7XG4xOTMzOlx0fVxuMTkzNDpcdFxuMTkzNTpcdHN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXG4xOTM2Olx0e1xuMTkzNzpcdFx0aW50IGRlcHRoO1xuMTkzODpcdFx0Ym9vbCBpc192bGFuID0gZmFsc2U7XG4xOTM5Olx0XG4xOTQwOlx0XHQvKiBPbiBUWCBza2ItXHUwMDNlZGF0YSBpcyB0aGUgTDIgaGVhZGVyOyBhbmNob3IgaXQgZm9yIGFsbCBzb2NrZXQgdHlwZXMuICovXG4xOTQxOlx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuMTk0MjpcdFxuMTk0MzpcdFx0aWYgKCghc2tiLVx1MDAzZXByb3RvY29sIHx8IHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BTEwpKSBcdTAwMjZcdTAwMjZcbjE5NDQ6XHRcdCAgICBzb2NrLVx1MDAzZXR5cGUgPT0gU09DS19SQVcpXG4xOTQ1Olx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGRldl9wYXJzZV9oZWFkZXJfcHJvdG9jb2woc2tiKTtcbjE5NDY6XHRcbjE5NDc6XHRcdGlmIChsaWtlbHkoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpIHtcbjE5NDg6XHRcdFx0aXNfdmxhbiA9IGV0aF90eXBlX3ZsYW4oc2tiLVx1MDAzZXByb3RvY29sKTtcbjE5NDk6XHRcbjE5NTA6XHRcdFx0LyogRm9yIG5vbi1WTEFOIFNPQ0tfUkFXIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdob3NlXG4xOTUxOlx0XHRcdCAqIGhhcmRfaGVhZGVyX2xlbiBleGNlZWRzIHRoZSBvbi13aXJlIEwyIGhlYWRlciBsZW5ndGhcbjE5NTI6XHRcdFx0ICogKG1pbl9oZWFkZXJfbGVuKSAtLSBlLmcuIHNvZnR3YXJlLW9mZmxvYWQgVkxBTiBzdWJpbnRlcmZhY2VzLFxuMTk1MzpcdFx0XHQgKiBvciBFdGhlcm5ldCBkcml2ZXJzIHRoYXQgcmVzZXJ2ZSBleHRyYSBzcGFjZSBpblxuMTk1NDpcdFx0XHQgKiBoYXJkX2hlYWRlcl9sZW4gZm9yIGRyaXZlci1pbnRlcm5hbCB3cmFwcGluZyAtLSB0aGUgU09DS19SQVdcbjE5NTU6XHRcdFx0ICogc2VuZCBwYXRocyBsZWF2ZSBuZXR3b3JrX2hlYWRlciBhdCBoYXJkX2hlYWRlcl9sZW4sIHdoaWxlIHRoZVxuMTk1NjpcdFx0XHQgKiB1c2VyIGZyYW1lJiMzOTtzIEwzIHNpdHMgYXQgbWluX2hlYWRlcl9sZW4uIE1vdmUgbmV0d29ya19oZWFkZXJcbjE5NTc6XHRcdFx0ICogdG8gdGhlIGFjdHVhbCBMMi9MMyBib3VuZGFyeSBzbyB0aGUgdHJhbnNwb3J0IGhlYWRlciBwcm9iZVxuMTk1ODpcdFx0XHQgKiBiZWxvdyBhbmQgc3Vic2VxdWVudCBHU08gc2VlIHRoZSByaWdodCBMMy5cbjE5NTk6XHRcdFx0ICovXG4xOTYwOlx0XHRcdGlmICghaXNfdmxhbiBcdTAwMjZcdTAwMjYgc29jay1cdTAwM2V0eXBlID09IFNPQ0tfUkFXIFx1MDAyNlx1MDAyNlxuMTk2MTpcdFx0XHQgICAgc2tiLVx1MDAzZWRldi1cdTAwM2VtaW5faGVhZGVyX2xlbiBcdTAwM2Mgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pXG4xOTYyOlx0XHRcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlbWluX2hlYWRlcl9sZW4pO1xuMTk2MzpcdFx0fVxuMTk2NDpcdFxuMTk2NTpcdFx0c2tiX3Byb2JlX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbjE5NjY6XHRcbjE5Njc6XHRcdC8qIE1vdmUgbmV0d29yayBoZWFkZXIgdG8gdGhlIHJpZ2h0IHBvc2l0aW9uIGZvciBWTEFOIHRhZ2dlZCBwYWNrZXRzICovXG4xOTY4Olx0XHRpZiAoaXNfdmxhbiBcdTAwMjZcdTAwMjZcbjE5Njk6XHRcdCAgICB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXHUwMDNlcHJvdG9jb2wsIFx1MDAyNmRlcHRoKSAhPSAwKVxuMTk3MDpcdFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xuMTk3MTpcdH1cbjE5NzI6XHRcbjE5NzM6XHQvKlxuMTk3NDpcdCAqXHRPdXRwdXQgYSByYXcgcGFja2V0IHRvIGEgZGV2aWNlIGxheWVyLiBUaGlzIGJ5cGFzc2VzIGFsbCB0aGUgb3RoZXJcbjE5NzU6XHQgKlx0cHJvdG9jb2wgbGF5ZXJzIGFuZCB5b3UgbXVzdCB0aGVyZWZvcmUgc3VwcGx5IGl0IHdpdGggYSBjb21wbGV0ZSBmcmFtZVxuMTk3NjpcdCAqL1xuMTk3NzpcdFxuMTk3ODpcdHN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4xOTc5Olx0XHRcdFx0ICAgICAgIHNpemVfdCBsZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkZpbmRpbmcgdGhlIENhbGxlcnMgb2YgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY2FsbCBzaXRlcyBmb3IgYHBhY2tldF9wYXJzZV9oZWFkZXJzYCB3aXRoaW4gdGhlIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCBmaWxlLiBObyBwcm9ibGVtLiBUaGF0JiMzOTtzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgdGFzayBmb3IgYSBnb29kIGNvZGUgc2VhcmNoLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgdG9vbCwgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBpcyBlaXRoZXIgYGdyZXBgLCBgYWNrYCwgYHJpcGdyZXBgLCBvciBwZXJoYXBzIGV2ZW4gbXkgSURFJiMzOTtzIGJ1aWx0LWluIHNlYXJjaCBmdW5jdGlvbmFsaXR5LCBkZXBlbmRpbmcgb24gd2hhdCBJJiMzOTttIHdvcmtpbmcgd2l0aCBhdCB0aGUgbW9tZW50LiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBhbGwgaW5zdGFuY2VzIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZC4gT25jZSBJIGhhdmUgdGhlIGxpc3Qgb2YgY2FsbGluZyBmdW5jdGlvbnMsIEkgY2FuIHRoZW4gZXhhbWluZSBlYWNoIG9uZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgaXMgYmVpbmcgdXNlZCBhbmQgd2hhdCB0aGUgdXBzdHJlYW0gZGF0YSBmbG93IGxvb2tzIGxpa2UuIFRoaXMgaXMgZm91bmRhdGlvbmFsIHRvIGFueSByZWFsIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgcG9ydGlvbiBvZiB0aGUgbmV0d29ya2luZyBzdGFjayB3b3Jrcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHR5cGUgb2YgcGFja2V0cyBiZWluZyBwcm9jZXNzZWQsIGVycm9yIGhhbmRsaW5nLCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGxvY2tpbmcuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWNrZXRfcGFyc2VfaGVhZGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xODY5PXN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTM0LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxOTM1OnN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5MzYte1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTk3OD1zdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjA5NS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjA5NjpcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIwOTctXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNjA1PXN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY4My1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjY4NDpcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2ODUtXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yOTg3PXN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTE0LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTE1Olx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzExNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSYjMzk7bGwgc3RhcnQgYnkgZGlzc2VjdGluZyBgcGFja2V0X3BhcnNlX2hlYWRlcnNgLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IGl0IHByb2Nlc3NlcyB0aGUgZGF0YSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHdoYXQgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0aGUgY2FsbGVycyBhcmUgcHJvdmlkaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnB1dHMgYW5kIG91dHB1dHMgaXMgY3J1Y2lhbCBmb3IgZ3Jhc3BpbmcgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBzeXN0ZW0uCgpUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBwYXRoIHRvIHNlZSBob3cgdGhlIHBhcnNlZCBoZWFkZXJzIGFyZSB1c2VkLiBJJiMzOTtsbCBsb29rIGludG8gYHBhY2tldF9zbmRgLCBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGFuZCBgdHBhY2tldF9maWxsX3NrYmAuIEV4YW1pbmluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGUgcGFyc2VkIGhlYWRlcnMgaW5mb3JtIHRoZSBhY3R1YWwgcGFja2V0IHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgaGVhZGVycyBhcmUgcGFja2FnZWQgaW50byB0aGUgcGFja2V0IGFuZCB3aGF0IGNvbnNpZGVyYXRpb25zIGFyZSBtYWRlIGZvciBkaWZmZXJlbnQgdHJhbnNtaXNzaW9uIG1ldGhvZHMuIEJ5IHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIG9mIHRoZXNlIGNvbXBvbmVudHMsIEkgc2hvdWxkIGdhaW4gYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgYXNwZWN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9wYWNrZXQvYWZfcGFja2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwODA6XHRcdH0gZWxzZSBpZiAocmVzZXJ2ZSkge1xuMzA4MTpcdFx0XHRza2JfcmVzZXJ2ZShza2IsIC1yZXNlcnZlKTtcbjMwODI6XHRcdFx0aWYgKGxlbiBcdTAwM2MgcmVzZXJ2ZSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpIFx1MDAyNlx1MDAyNlxuMzA4MzpcdFx0XHQgICAgZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuICE9IGhhcmRfaGVhZGVyX2xlbilcbjMwODQ6XHRcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbjMwODU6XHRcdH1cbjMwODY6XHRcbjMwODc6XHRcdC8qIFJldHVybnMgLUVGQVVMVCBvbiBlcnJvciAqL1xuMzA4ODpcdFx0ZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyKHNrYiwgb2Zmc2V0LCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIsIGxlbik7XG4zMDg5Olx0XHRpZiAoZXJyKVxuMzA5MDpcdFx0XHRnb3RvIG91dF9mcmVlO1xuMzA5MTpcdFxuMzA5MjpcdFx0aWYgKChzb2NrLVx1MDAzZXR5cGUgPT0gU09DS19SQVcgXHUwMDI2XHUwMDI2XG4zMDkzOlx0XHQgICAgICFkZXZfdmFsaWRhdGVfaGVhZGVyKGRldiwgc2tiLVx1MDAzZWRhdGEsIGxlbikpIHx8ICFza2ItXHUwMDNlbGVuKSB7XG4zMDk0Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4zMDk1Olx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4zMDk2Olx0XHR9XG4zMDk3Olx0XG4zMDk4Olx0XHRza2Jfc2V0dXBfdHhfdGltZXN0YW1wKHNrYiwgXHUwMDI2c29ja2MpO1xuMzA5OTpcdFxuMzEwMDpcdFx0aWYgKCF2bmV0X2hkci5nc29fdHlwZSBcdTAwMjZcdTAwMjYgKGxlbiBcdTAwM2UgZGV2LVx1MDAzZW10dSAmIzQzOyByZXNlcnZlICYjNDM7IGV4dHJhX2xlbikgXHUwMDI2XHUwMDI2XG4zMTAxOlx0XHQgICAgIXBhY2tldF9leHRyYV92bGFuX2xlbl9hbGxvd2VkKGRldiwgc2tiKSkge1xuMzEwMjpcdFx0XHRlcnIgPSAtRU1TR1NJWkU7XG4zMTAzOlx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4zMTA0Olx0XHR9XG4zMTA1Olx0XG4zMTA2Olx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBwcm90bztcbjMxMDc6XHRcdHNrYi1cdTAwM2VkZXYgPSBkZXY7XG4zMTA4Olx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSBzb2NrYy5wcmlvcml0eTtcbjMxMDk6XHRcdHNrYi1cdTAwM2VtYXJrID0gc29ja2MubWFyaztcbjMxMTA6XHRcdHNrYl9zZXRfZGVsaXZlcnlfdHlwZV9ieV9jbG9ja2lkKHNrYiwgc29ja2MudHJhbnNtaXRfdGltZSwgc2stXHUwMDNlc2tfY2xvY2tpZCk7XG4zMTExOlx0XG4zMTEyOlx0XHRpZiAodW5saWtlbHkoZXh0cmFfbGVuID09IDQpKVxuMzExMzpcdFx0XHRza2ItXHUwMDNlbm9fZmNzID0gMTtcbjMxMTQ6XHRcbjMxMTU6XHRcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XG4zMTE2Olx0XG4zMTE3Olx0XHRpZiAodm5ldF9oZHJfc3opIHtcbjMxMTg6XHRcdFx0ZXJyID0gdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgXHUwMDI2dm5ldF9oZHIsIHZpb19sZSgpKTtcbjMxMTk6XHRcdFx0aWYgKGVycilcbjMxMjA6XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuMzEyMTpcdFx0XHRsZW4gJiM0Mzs9IHZuZXRfaGRyX3N6O1xuMzEyMjpcdFx0XHR2aXJ0aW9fbmV0X2hkcl9zZXRfcHJvdG8oc2tiLCBcdTAwMjZ2bmV0X2hkcik7XG4zMTIzOlx0XHR9XG4zMTI0Olx0XG4zMTI1Olx0XHRlcnIgPSBwYWNrZXRfeG1pdChwbywgc2tiKTtcbjMxMjY6XHRcbjMxMjc6XHRcdGlmICh1bmxpa2VseShlcnIgIT0gMCkpIHtcbjMxMjg6XHRcdFx0aWYgKGVyciBcdTAwM2UgMClcbjMxMjk6XHRcdFx0XHRlcnIgPSBuZXRfeG1pdF9lcnJubyhlcnIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjgzCgkJCQkJCQlvdXRwdXQ6IDI4NwoJCQkJCQkJdGhvdWdodHM6IDg3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIGNvZGUgY2hhbmdlcyBhcmUgaW4gYHBhY2tldF9wYXJzZV9oZWFkZXJzYCwgc3BlY2lmaWNhbGx5IGZvciBub24tVkxBTiBgU09DS19SQVdgIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzLiBXaGF0JiMzOTtzIGhhcHBlbmluZyBpcyBhbiBhZGp1c3RtZW50IHRvIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgdXNpbmcgYHNrYl9zZXRfbmV0d29ya19oZWFkZXJgIHdoZW4gYHNrYi0mZ3Q7ZGV2LSZndDttaW5faGVhZGVyX2xlbmAgaXMgbGVzcyB0aGFuIGBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuYCwgYWZ0ZXIgd2hpY2ggYHNrYl9wcm9iZV90cmFuc3BvcnRfaGVhZGVyYCBpcyBjYWxsZWQsIGFuZCB0aGVuIHRoZSBWTEFOIGNoZWNrIGlmIGFwcGxpY2FibGUuCgpGaXJzdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNyaXRlcmlhIGZvciBhIEtNU0FOIGlzc3VlOiBrZXJuZWwgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbmV3IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgYm91bmRzIGNoZWNrIHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkZyb20gbXkgcmV2aWV3LCBub25lIG9mIHRoZXNlIGFyZSB0cmlnZ2VyZWQuIFRoaXMgcGF0Y2ggZGVhbHMgd2l0aCBUWCBwYXJzaW5nIGluIGBhZl9wYWNrZXRgLCBubyBrZXJuZWwgbWVtb3J5IGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYGlzX3ZsYW5gIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvciBhbnkgY2hhbmdlcyB0byB0aGUgYWxsb2NhdGlvbiByb3V0aW5lcy4gVGhlIHNrYiBidWZmZXIgcGF5bG9hZCBpcyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLCBhbmQgYWRqdXN0aW5nIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQganVzdCBjaGFuZ2VzIHdoZXJlIHRoZSBrZXJuZWwgbG9va3Mgd2l0aGluIHRoYXQgcHJlLWV4aXN0aW5nIGJ1ZmZlciBmcm9tIHVzZXIgc3BhY2UsIHNvLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEV2ZW4gaWYgYG1pbl9oZWFkZXJfbGVuYCBhbmQgYHNrYi0mZ3Q7bGVuYCBjYXVzZWQgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHRoYXQgd291bGQgYmUgYSBLQVNBTiBpc3N1ZSAoYm91bmRzLWNoZWNrKSBub3QgYSBLTVNBTiBpc3N1ZSAodW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCkuCgpUbyByZWNhcCwgdGhlIHBhdGNoIHByaW1hcmlseSBhZGp1c3RzIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgZm9yIGNlcnRhaW4gdHlwZXMgb2YgcmF3IHBhY2tldCBzb2NrZXRzLiAgS01TQU4gaXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBub3QgYm91bmRzIGNoZWNraW5nLgoKSGVyZSYjMzk7cyBteSBjbGVhciBjb25jbHVzaW9uOiB0aGVyZSYjMzk7cyBubyBldmlkZW5jZSBvZiBLTVNBTi1yZWxhdGVkIHByb2JsZW1zIGhlcmUuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgbm8gaW5mb3JtYXRpb24gbGVha2FnZSB0byB1c2VyIHNwYWNlLiAgVGhlIHZhcmlhYmxlcyBpdCB1c2VzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gU28sIGJhc2VkIG9uIG15IGV4cGVydCByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgcGFja2V0X3BhcnNlX2hlYWRlcnMoKWAgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIHRvIHByb3Blcmx5IHBvc2l0aW9uIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgZm9yIG5vbi1WTEFOIGBTT0NLX1JBV2AgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hlcmUgYG1pbl9oZWFkZXJfbGVuIFx1MDAzYyBoYXJkX2hlYWRlcl9sZW5gLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSAqKktNU0FOKio6IEtNU0FOIGRldGVjdHMgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSBhbGxvY2F0aW9ucykgYW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpbmdsZSBib29sZWFuIGxvY2FsIHZhcmlhYmxlIChgaXNfdmxhbmApLCB3aGljaCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYW5kIHNldCB0byBgZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBTYW5pdGl6ZXJzKio6IFRoZSBjaGFuZ2VzIG9ubHkgYWRqdXN0IGludGVybmFsIGBza2JgIGhlYWRlciBvZmZzZXRzIChgbWFjX2hlYWRlcmAsIGBuZXR3b3JrX2hlYWRlcmAsIGB0cmFuc3BvcnRfaGVhZGVyYCkgZm9yIHBhY2tldCB0cmFuc21pc3Npb24uIEFueSBwb3RlbnRpYWwgb2Zmc2V0IG9yIHNpemluZyBpc3N1ZXMgYWZmZWN0aW5nIHBheWxvYWQgYm91bmRzIGR1cmluZyBwYWNrZXQgcGFyc2luZyBvciBHU08gd291bGQgYmUgb3V0LW9mLWJvdW5kcy9ib3VuZHMtY2hlY2sgaXNzdWVzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgcGFja2V0X3BhcnNlX2hlYWRlcnMoKWAgaW4gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgIHRvIHByb3Blcmx5IHBvc2l0aW9uIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgZm9yIG5vbi1WTEFOIGBTT0NLX1JBV2AgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hlcmUgYG1pbl9oZWFkZXJfbGVuIFx1MDAzYyBoYXJkX2hlYWRlcl9sZW5gLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSAqKktNU0FOKio6IEtNU0FOIGRldGVjdHMgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSBhbGxvY2F0aW9ucykgYW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpbmdsZSBib29sZWFuIGxvY2FsIHZhcmlhYmxlIChgaXNfdmxhbmApLCB3aGljaCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYW5kIHNldCB0byBgZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBTYW5pdGl6ZXJzKio6IFRoZSBjaGFuZ2VzIG9ubHkgYWRqdXN0IGludGVybmFsIGBza2JgIGhlYWRlciBvZmZzZXRzIChgbWFjX2hlYWRlcmAsIGBuZXR3b3JrX2hlYWRlcmAsIGB0cmFuc3BvcnRfaGVhZGVyYCkgZm9yIHBhY2tldCB0cmFuc21pc3Npb24uIEFueSBwb3RlbnRpYWwgb2Zmc2V0IG9yIHNpemluZyBpc3N1ZXMgYWZmZWN0aW5nIHBheWxvYWQgYm91bmRzIGR1cmluZyBwYWNrZXQgcGFyc2luZyBvciBHU08gd291bGQgYmUgb3V0LW9mLWJvdW5kcy9ib3VuZHMtY2hlY2sgaXNzdWVzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODoxMS45OTgxMzM4ODVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjEwNzE3NzE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUNLRVRcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ1wiLFxuICAgIFwicGFja2V0X3NlbmRtc2dfc3BrdFwiLFxuICAgIFwicGFja2V0X3NuZFwiLFxuICAgIFwidHBhY2tldF9zbmRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYHBhY2tldF9wYXJzZV9oZWFkZXJzKClgIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCB0byBwcm9wZXJseSBwb3NpdGlvbiB0aGUgbmV0d29yayBoZWFkZXIgb2Zmc2V0IGZvciBub24tVkxBTiBgU09DS19SQVdgIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdoZXJlIGBtaW5faGVhZGVyX2xlbiBcXHUwMDNjIGhhcmRfaGVhZGVyX2xlbmAuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tICoqS01TQU4qKjogS01TQU4gZGV0ZWN0cyB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlIGJvb2xlYW4gbG9jYWwgdmFyaWFibGUgKGBpc192bGFuYCksIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgc2V0IHRvIGBldGhfdHlwZV92bGFuKHNrYi1cXHUwMDNlcHJvdG9jb2wpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXFxuLSAqKktBU0FOIC8gU3RhbmRhcmQgU2FuaXRpemVycyoqOiBUaGUgY2hhbmdlcyBvbmx5IGFkanVzdCBpbnRlcm5hbCBgc2tiYCBoZWFkZXIgb2Zmc2V0cyAoYG1hY19oZWFkZXJgLCBgbmV0d29ya19oZWFkZXJgLCBgdHJhbnNwb3J0X2hlYWRlcmApIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLiBBbnkgcG90ZW50aWFsIG9mZnNldCBvciBzaXppbmcgaXNzdWVzIGFmZmVjdGluZyBwYXlsb2FkIGJvdW5kcyBkdXJpbmcgcGFja2V0IHBhcnNpbmcgb3IgR1NPIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMvYm91bmRzLWNoZWNrIGlzc3VlcyBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRlciBwYXJzaW5nIGluIGFmX3BhY2tldCAocGFja2V0X3BhcnNlX2hlYWRlcnMpIGZvciBTT0NLX1JBVyBwYWNrZXQgc29ja2V0cyBvdmVyIEV0aGVybmV0IGRldmljZXMgd2hlcmUgaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgbWluX2hlYWRlcl9sZW4uIFRoaXMgY2hhbmdlcyB0aGUgbmV0d29yayBhbmQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIHVzZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiBhbmQgR1NPLCBhZmZlY3RpbmcgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgQUZfUEFDS0VUIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA4OjExLjk5ODEzOTA5NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyOTI1OTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJhMjc3Mzc4YjA1NDkyZjVkZDFjMTU2NjZlY2RkNjA5Y2FkNTgxYTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDg6MDg6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcXG5pbmRleCAxMTY4YmQ2YjA5Y2Q2Li5iZTViZjlkYjdlYTE1IDEwMDY0NFxcbi0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmNcXG4rKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXFxuQEAgLTE5MzUsNiArMTkzNSw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHN0YXRpYyB2b2lkIHBhY2tldF9wYXJzZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuIHtcXG4gXFx0aW50IGRlcHRoO1xcbitcXHRib29sIGlzX3ZsYW4gPSBmYWxzZTtcXG4gXFxuIFxcdC8qIE9uIFRYIHNrYi1cXHUwMDNlZGF0YSBpcyB0aGUgTDIgaGVhZGVyOyBhbmNob3IgaXQgZm9yIGFsbCBzb2NrZXQgdHlwZXMuICovXFxuIFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuQEAgLTE5NDMsMTEgKzE5NDQsMjggQEAgc3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcXG4gXFx0ICAgIHNvY2stXFx1MDAzZXR5cGUgPT0gU09DS19SQVcpXFxuIFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBkZXZfcGFyc2VfaGVhZGVyX3Byb3RvY29sKHNrYik7XFxuIFxcbitcXHRpZiAobGlrZWx5KHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikpIHtcXG4rXFx0XFx0aXNfdmxhbiA9IGV0aF90eXBlX3ZsYW4oc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuK1xcbitcXHRcXHQvKiBGb3Igbm9uLVZMQU4gU09DS19SQVcgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hvc2VcXG4rXFx0XFx0ICogaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgdGhlIG9uLXdpcmUgTDIgaGVhZGVyIGxlbmd0aFxcbitcXHRcXHQgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsXFxuK1xcdFxcdCAqIG9yIEV0aGVybmV0IGRyaXZlcnMgdGhhdCByZXNlcnZlIGV4dHJhIHNwYWNlIGluXFxuK1xcdFxcdCAqIGhhcmRfaGVhZGVyX2xlbiBmb3IgZHJpdmVyLWludGVybmFsIHdyYXBwaW5nIC0tIHRoZSBTT0NLX1JBV1xcbitcXHRcXHQgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlXFxuK1xcdFxcdCAqIHVzZXIgZnJhbWUncyBMMyBzaXRzIGF0IG1pbl9oZWFkZXJfbGVuLiBNb3ZlIG5ldHdvcmtfaGVhZGVyXFxuK1xcdFxcdCAqIHRvIHRoZSBhY3R1YWwgTDIvTDMgYm91bmRhcnkgc28gdGhlIHRyYW5zcG9ydCBoZWFkZXIgcHJvYmVcXG4rXFx0XFx0ICogYmVsb3cgYW5kIHN1YnNlcXVlbnQgR1NPIHNlZSB0aGUgcmlnaHQgTDMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIWlzX3ZsYW4gXFx1MDAyNlxcdTAwMjYgc29jay1cXHUwMDNldHlwZSA9PSBTT0NLX1JBVyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZW1pbl9oZWFkZXJfbGVuIFxcdTAwM2Mgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbilcXG4rXFx0XFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VtaW5faGVhZGVyX2xlbik7XFxuK1xcdH1cXG4rXFxuIFxcdHNrYl9wcm9iZV90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIFxcbiBcXHQvKiBNb3ZlIG5ldHdvcmsgaGVhZGVyIHRvIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgVkxBTiB0YWdnZWQgcGFja2V0cyAqL1xcbi1cXHRpZiAobGlrZWx5KHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGV0aF90eXBlX3ZsYW4oc2tiLVxcdTAwM2Vwcm90b2NvbCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0aWYgKGlzX3ZsYW4gXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHZsYW5fZ2V0X3Byb3RvY29sX2FuZF9kZXB0aChza2IsIHNrYi1cXHUwMDNlcHJvdG9jb2wsIFxcdTAwMjZkZXB0aCkgIT0gMClcXG4gXFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIGRlcHRoKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODoxMy40MjgxNTI2NTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM1MjkyODQ2MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBQ0tFVFwiLFxuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhY2tldF9zZW5kbXNnXCIsXG4gICAgXCJwYWNrZXRfc2VuZG1zZ19zcGt0XCIsXG4gICAgXCJwYWNrZXRfc25kXCIsXG4gICAgXCJ0cGFja2V0X3NuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRlciBwYXJzaW5nIGluIGFmX3BhY2tldCAocGFja2V0X3BhcnNlX2hlYWRlcnMpIGZvciBTT0NLX1JBVyBwYWNrZXQgc29ja2V0cyBvdmVyIEV0aGVybmV0IGRldmljZXMgd2hlcmUgaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgbWluX2hlYWRlcl9sZW4uIFRoaXMgY2hhbmdlcyB0aGUgbmV0d29yayBhbmQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzIHVzZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiBhbmQgR1NPLCBhZmZlY3RpbmcgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgQUZfUEFDS0VUIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJhMjc3Mzc4YjA1NDkyZjVkZDFjMTU2NjZlY2RkNjA5Y2FkNTgxYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODowODoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5pbmRleCAxMTY4YmQ2YjA5Y2Q2Li5iZTViZjlkYjdlYTE1IDEwMDY0NFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuQEAgLTE5MzUsNiArMTkzNSw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gc3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcbiB7XG4gXHRpbnQgZGVwdGg7XG4rXHRib29sIGlzX3ZsYW4gPSBmYWxzZTtcbiBcbiBcdC8qIE9uIFRYIHNrYi1cdTAwM2VkYXRhIGlzIHRoZSBMMiBoZWFkZXI7IGFuY2hvciBpdCBmb3IgYWxsIHNvY2tldCB0eXBlcy4gKi9cbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG5AQCAtMTk0MywxMSArMTk0NCwyOCBAQCBzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0ICAgIHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVylcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZGV2X3BhcnNlX2hlYWRlcl9wcm90b2NvbChza2IpO1xuIFxuK1x0aWYgKGxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSkge1xuK1x0XHRpc192bGFuID0gZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpO1xuK1xuK1x0XHQvKiBGb3Igbm9uLVZMQU4gU09DS19SQVcgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hvc2VcbitcdFx0ICogaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgdGhlIG9uLXdpcmUgTDIgaGVhZGVyIGxlbmd0aFxuK1x0XHQgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsXG4rXHRcdCAqIG9yIEV0aGVybmV0IGRyaXZlcnMgdGhhdCByZXNlcnZlIGV4dHJhIHNwYWNlIGluXG4rXHRcdCAqIGhhcmRfaGVhZGVyX2xlbiBmb3IgZHJpdmVyLWludGVybmFsIHdyYXBwaW5nIC0tIHRoZSBTT0NLX1JBV1xuK1x0XHQgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlXG4rXHRcdCAqIHVzZXIgZnJhbWUncyBMMyBzaXRzIGF0IG1pbl9oZWFkZXJfbGVuLiBNb3ZlIG5ldHdvcmtfaGVhZGVyXG4rXHRcdCAqIHRvIHRoZSBhY3R1YWwgTDIvTDMgYm91bmRhcnkgc28gdGhlIHRyYW5zcG9ydCBoZWFkZXIgcHJvYmVcbitcdFx0ICogYmVsb3cgYW5kIHN1YnNlcXVlbnQgR1NPIHNlZSB0aGUgcmlnaHQgTDMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWlzX3ZsYW4gXHUwMDI2XHUwMDI2IHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHNrYi1cdTAwM2VkZXYtXHUwMDNlbWluX2hlYWRlcl9sZW4gXHUwMDNjIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKVxuK1x0XHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuKTtcbitcdH1cbitcbiBcdHNrYl9wcm9iZV90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gXG4gXHQvKiBNb3ZlIG5ldHdvcmsgaGVhZGVyIHRvIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgVkxBTiB0YWdnZWQgcGFja2V0cyAqL1xuLVx0aWYgKGxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBldGhfdHlwZV92bGFuKHNrYi1cdTAwM2Vwcm90b2NvbCkgXHUwMDI2XHUwMDI2XG4rXHRpZiAoaXNfdmxhbiBcdTAwMjZcdTAwMjZcbiBcdCAgICB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXHUwMDNlcHJvdG9jb2wsIFx1MDAyNmRlcHRoKSAhPSAwKVxuIFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA4OjEzLjQyODE1NDY5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNTU1MjY0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogRGVjb2RpbmcgdGhlIE5ldHdvcmsgUGFja2V0IEhlYWRlciBQYXJzaW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRoZSBtb2RpZmljYXRpb24gdG8gYG5ldC9wYWNrZXQvYWZfcGFja2V0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2AgZnVuY3Rpb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mICpob3cqIGBhZl9wYWNrZXQuY2AgZnVuY3Rpb25zIG92ZXJhbGwgYW5kIGhvdyBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGZpdHMgaW50byB0aGF0IGFyY2hpdGVjdHVyZS5cblxuSSdtIHRoaW5raW5nIEknbGwgdXNlIGVpdGhlciBgZ3JlcHBlcmAgb3IgYSBzaW1wbGUgYHJlYWQtZmlsZWAgY29tbWFuZC4gR2l2ZW4gdGhlIGxvY2F0aW9uIG1lbnRpb24gb2YgbGluZXMgMTkzNS0xOTcwLCB0aGF0J3Mgd2hlcmUgbXkgZm9jdXMgbmVlZHMgdG8gYmUuIEkgd2FudCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsLCBhbmQgd2hhdCdzIGRpcmVjdGx5IGludGVyYWN0aW5nIHdpdGggYHBhY2tldF9wYXJzZV9oZWFkZXJzYC4gTGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBsYXJnZXIgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBwaXBlbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDg6MTcuNDgzNjgzMDU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkzMDpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xOTMxOlxcdG9vbTpcXG4xOTMyOlxcdFxcdHJldHVybiAwO1xcbjE5MzM6XFx0fVxcbjE5MzQ6XFx0XFxuMTkzNTpcXHRzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbjE5MzY6XFx0e1xcbjE5Mzc6XFx0XFx0aW50IGRlcHRoO1xcbjE5Mzg6XFx0XFx0Ym9vbCBpc192bGFuID0gZmFsc2U7XFxuMTkzOTpcXHRcXG4xOTQwOlxcdFxcdC8qIE9uIFRYIHNrYi1cXHUwMDNlZGF0YSBpcyB0aGUgTDIgaGVhZGVyOyBhbmNob3IgaXQgZm9yIGFsbCBzb2NrZXQgdHlwZXMuICovXFxuMTk0MTpcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbjE5NDI6XFx0XFxuMTk0MzpcXHRcXHRpZiAoKCFza2ItXFx1MDAzZXByb3RvY29sIHx8IHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQUxMKSkgXFx1MDAyNlxcdTAwMjZcXG4xOTQ0OlxcdFxcdCAgICBzb2NrLVxcdTAwM2V0eXBlID09IFNPQ0tfUkFXKVxcbjE5NDU6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGRldl9wYXJzZV9oZWFkZXJfcHJvdG9jb2woc2tiKTtcXG4xOTQ2OlxcdFxcbjE5NDc6XFx0XFx0aWYgKGxpa2VseShza2ItXFx1MDAzZWRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpKSB7XFxuMTk0ODpcXHRcXHRcXHRpc192bGFuID0gZXRoX3R5cGVfdmxhbihza2ItXFx1MDAzZXByb3RvY29sKTtcXG4xOTQ5OlxcdFxcbjE5NTA6XFx0XFx0XFx0LyogRm9yIG5vbi1WTEFOIFNPQ0tfUkFXIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdob3NlXFxuMTk1MTpcXHRcXHRcXHQgKiBoYXJkX2hlYWRlcl9sZW4gZXhjZWVkcyB0aGUgb24td2lyZSBMMiBoZWFkZXIgbGVuZ3RoXFxuMTk1MjpcXHRcXHRcXHQgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsXFxuMTk1MzpcXHRcXHRcXHQgKiBvciBFdGhlcm5ldCBkcml2ZXJzIHRoYXQgcmVzZXJ2ZSBleHRyYSBzcGFjZSBpblxcbjE5NTQ6XFx0XFx0XFx0ICogaGFyZF9oZWFkZXJfbGVuIGZvciBkcml2ZXItaW50ZXJuYWwgd3JhcHBpbmcgLS0gdGhlIFNPQ0tfUkFXXFxuMTk1NTpcXHRcXHRcXHQgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlXFxuMTk1NjpcXHRcXHRcXHQgKiB1c2VyIGZyYW1lJ3MgTDMgc2l0cyBhdCBtaW5faGVhZGVyX2xlbi4gTW92ZSBuZXR3b3JrX2hlYWRlclxcbjE5NTc6XFx0XFx0XFx0ICogdG8gdGhlIGFjdHVhbCBMMi9MMyBib3VuZGFyeSBzbyB0aGUgdHJhbnNwb3J0IGhlYWRlciBwcm9iZVxcbjE5NTg6XFx0XFx0XFx0ICogYmVsb3cgYW5kIHN1YnNlcXVlbnQgR1NPIHNlZSB0aGUgcmlnaHQgTDMuXFxuMTk1OTpcXHRcXHRcXHQgKi9cXG4xOTYwOlxcdFxcdFxcdGlmICghaXNfdmxhbiBcXHUwMDI2XFx1MDAyNiBzb2NrLVxcdTAwM2V0eXBlID09IFNPQ0tfUkFXIFxcdTAwMjZcXHUwMDI2XFxuMTk2MTpcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZW1pbl9oZWFkZXJfbGVuIFxcdTAwM2Mgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbilcXG4xOTYyOlxcdFxcdFxcdFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2ItXFx1MDAzZWRldi1cXHUwMDNlbWluX2hlYWRlcl9sZW4pO1xcbjE5NjM6XFx0XFx0fVxcbjE5NjQ6XFx0XFxuMTk2NTpcXHRcXHRza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbjE5NjY6XFx0XFxuMTk2NzpcXHRcXHQvKiBNb3ZlIG5ldHdvcmsgaGVhZGVyIHRvIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgVkxBTiB0YWdnZWQgcGFja2V0cyAqL1xcbjE5Njg6XFx0XFx0aWYgKGlzX3ZsYW4gXFx1MDAyNlxcdTAwMjZcXG4xOTY5OlxcdFxcdCAgICB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXFx1MDAzZXByb3RvY29sLCBcXHUwMDI2ZGVwdGgpICE9IDApXFxuMTk3MDpcXHRcXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xcbjE5NzE6XFx0fVxcbjE5NzI6XFx0XFxuMTk3MzpcXHQvKlxcbjE5NzQ6XFx0ICpcXHRPdXRwdXQgYSByYXcgcGFja2V0IHRvIGEgZGV2aWNlIGxheWVyLiBUaGlzIGJ5cGFzc2VzIGFsbCB0aGUgb3RoZXJcXG4xOTc1OlxcdCAqXFx0cHJvdG9jb2wgbGF5ZXJzIGFuZCB5b3UgbXVzdCB0aGVyZWZvcmUgc3VwcGx5IGl0IHdpdGggYSBjb21wbGV0ZSBmcmFtZVxcbjE5NzY6XFx0ICovXFxuMTk3NzpcXHRcXG4xOTc4OlxcdHN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuMTk3OTpcXHRcXHRcXHRcXHQgICAgICAgc2l6ZV90IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDg6MTcuNDgzODQyNTI4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgwMzYxODY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFBhY2tldCBIZWFkZXIgUGFyc2luZyBpbiBhZl9wYWNrZXQuYyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHN0cnVjdHVyZSBvZiBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIHdpdGhpbiB0aGUgYGFmX3BhY2tldC5jYCBtb2R1bGUuIE15IGdvYWwgaGVyZSBpcyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgY3J1Y2lhbCBmdW5jdGlvbiBpcyBpbnZva2VkLiBUaGlzIGlzIG9mdGVuIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZGVidWdnaW5nIG9yIHVuZGVyc3RhbmRpbmcgZGF0YSBmbG93LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHBhY2tldCBoYW5kbGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9u4oCZcyBjb250ZXh0IHdpdGhpbiB0aGUgYWZfcGFja2V0IG1vZHVsZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGluZm9ybWF0aW9uIGJlaW5nIHBhcnNlZCBjb21lcyBmcm9tIGFuZCB3aGVyZSBpdCBpcyBzdWJzZXF1ZW50bHkgc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc3NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDg6MjAuMjg3NDYzMjI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTA1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhY2tldF9wYXJzZV9oZWFkZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9wYWNrZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTg2OT1zdGF0aWMgaW50IHBhY2tldF9yY3Zfc3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xOTM0LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTkzNTpzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTkzNi17XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE5Nzg9c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjA5NS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjIwOTY6XFx0cGFja2V0X3BhcnNlX2hlYWRlcnMoc2tiLCBzb2NrKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIwOTctXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI2MDU9c3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI2ODMtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNjg0OlxcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjg1LVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yOTg3PXN0YXRpYyBpbnQgcGFja2V0X3NuZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMTQtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTE1OlxcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODoyMC4zMzMzNzE3MTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzMxOTQzMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEFjdGl2YXRpb24gb2YgYWZfcGFja2V0LmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb24gaXMgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIGBhZl9wYWNrZXQuY2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwncyBzb3VyY2UgYW5kIHBpbnBvaW50IHRoZSByZWxldmFudCBLY29uZmlnIGFuZCBNYWtlZmlsZSBlbnRyaWVzLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgc3RhcnRpbmcgYnkgZXhhbWluaW5nIGBuZXQvcGFja2V0L0tjb25maWdgIGFuZCBgbmV0L3BhY2tldC9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNsdWVzIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHByb2Nlc3MuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGl0IGJhY2sgdG8gdGhlIGhpZ2hlci1sZXZlbCBjb25maWcgb3B0aW9ucyBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODoyNC42NjUzMTcwNTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1MDE4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NTk0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqcHR5cGVfaGVhZChjb25zdCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTk2LVxcdGlmIChwdC1cXHUwMDNldHlwZSA9PSBodG9ucyhFVEhfUF9BTEwpKSB7XFxubmV0L2NvcmUvZGV2LmM6NTk3OlxcdFxcdGlmICghcHQtXFx1MDAzZWFmX3BhY2tldF9uZXQgXFx1MDAyNlxcdTAwMjYgIXB0LVxcdTAwM2VkZXYpXFxubmV0L2NvcmUvZGV2LmMtNTk4LVxcdFxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjAwLVxcdFxcdHJldHVybiBwdC1cXHUwMDNlZGV2ID8gXFx1MDAyNnB0LVxcdTAwM2VkZXYtXFx1MDAzZXB0eXBlX2FsbCA6XFxubmV0L2NvcmUvZGV2LmM6NjAxOlxcdFxcdFxcdFxcdCBcXHUwMDI2cHQtXFx1MDAzZWFmX3BhY2tldF9uZXQtXFx1MDAzZXB0eXBlX2FsbDtcXG5uZXQvY29yZS9kZXYuYy02MDItXFx0fVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjA2LVxcbm5ldC9jb3JlL2Rldi5jOjYwNzpcXHRyZXR1cm4gcHQtXFx1MDAzZWFmX3BhY2tldF9uZXQgPyBcXHUwMDI2cHQtXFx1MDAzZWFmX3BhY2tldF9uZXQtXFx1MDAzZXB0eXBlX3NwZWNpZmljIDpcXG5uZXQvY29yZS9kZXYuYy02MDgtXFx0XFx0XFx0XFx0IFxcdTAwMjZwdHlwZV9iYXNlW250b2hzKHB0LVxcdTAwM2V0eXBlKSBcXHUwMDI2IFBUWVBFX0hBU0hfTUFTS107XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0yNTM5PXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfbG9vcF9zayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL2Rldi5jLTI1NDAte1xcbm5ldC9jb3JlL2Rldi5jOjI1NDE6XFx0aWYgKCFwdHlwZS1cXHUwMDNlYWZfcGFja2V0X3ByaXYgfHwgIXNrYi1cXHUwMDNlc2spXFxubmV0L2NvcmUvZGV2LmMtMjU0Mi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0yNTQ1LVxcdFxcdHJldHVybiBwdHlwZS1cXHUwMDNlaWRfbWF0Y2gocHR5cGUsIHNrYi1cXHUwMDNlc2spO1xcbm5ldC9jb3JlL2Rldi5jOjI1NDY6XFx0ZWxzZSBpZiAoKHN0cnVjdCBzb2NrICopcHR5cGUtXFx1MDAzZWFmX3BhY2tldF9wcml2ID09IHNrYi1cXHUwMDNlc2spXFxubmV0L2NvcmUvZGV2LmMtMjU0Ny1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm5ldC9jb3JlL25ldC1wcm9jZnMuYz0yMjk9c3RhdGljIHZvaWQgKnB0eXBlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4tLVxcbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0yNjAtXFxubmV0L2NvcmUvbmV0LXByb2Nmcy5jOjI2MTpcXHRpZiAocHQtXFx1MDAzZWFmX3BhY2tldF9uZXQpIHtcXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMjYyLW5ldF9wdHlwZV9hbGw6XFxuLS1cXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmM9MjkzPXN0YXRpYyBpbnQgcHR5cGVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMzAzLVxcdGRldiA9IGl0ZXItXFx1MDAzZWRldjtcXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmM6MzA0OlxcdGlmICgoIXB0LVxcdTAwM2VhZl9wYWNrZXRfbmV0IHx8IG5ldF9lcShwdC1cXHUwMDNlYWZfcGFja2V0X25ldCwgc2VxX2ZpbGVfbmV0KHNlcSkpKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0zMDUtXFx0XFx0ICghZGV2IHx8IG5ldF9lcShkZXZfbmV0KGRldiksIHNlcV9maWxlX25ldChzZXEpKSkpIHtcXG4tLVxcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jPTE1OT1zdGF0aWMgaW50IG5ldF90ZXN0X2xvb3BiYWNrX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9zZWxmdGVzdHMuYy0xNjMte1xcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jOjE2NDpcXHRzdHJ1Y3QgbmV0X3Rlc3RfcHJpdiAqdHByaXYgPSBwdC1cXHUwMDNlYWZfcGFja2V0X3ByaXY7XFxubmV0L2NvcmUvc2VsZnRlc3RzLmMtMTY1LVxcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYyA9IHRwcml2LVxcdTAwM2VwYWNrZXQtXFx1MDAzZXNyYztcXG4tLVxcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jPTIzMz1zdGF0aWMgaW50IF9fbmV0X3Rlc3RfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5uZXQvY29yZS9zZWxmdGVzdHMuYy0yNDktXFx0dHByaXYtXFx1MDAzZXB0LmRldiA9IG5kZXY7XFxubmV0L2NvcmUvc2VsZnRlc3RzLmM6MjUwOlxcdHRwcml2LVxcdTAwM2VwdC5hZl9wYWNrZXRfcHJpdiA9IHRwcml2O1xcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTI1MS1cXHR0cHJpdi1cXHUwMDNlcGFja2V0ID0gYXR0cjtcXG4tLVxcbm5ldC9wYWNrZXQvS2NvbmZpZz02PWNvbmZpZyBQQUNLRVRcXG4tLVxcbm5ldC9wYWNrZXQvS2NvbmZpZy0xNC1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbm5ldC9wYWNrZXQvS2NvbmZpZzoxNTpcXHQgIGJlIGNhbGxlZCBhZl9wYWNrZXQuXFxubmV0L3BhY2tldC9LY29uZmlnLTE2LVxcbi0tXFxubmV0L3BhY2tldC9NYWtlZmlsZS01LVxcbm5ldC9wYWNrZXQvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUEFDS0VUKSArPSBhZl9wYWNrZXQub1xcbm5ldC9wYWNrZXQvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfUEFDS0VUX0RJQUcpICs9IGFmX3BhY2tldF9kaWFnLm9cXG5uZXQvcGFja2V0L01ha2VmaWxlOjg6YWZfcGFja2V0X2RpYWcteSArPSBkaWFnLm9cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTQ2OD1zdGF0aWMgaW50IHBhY2tldF9yY3ZfZmFub3V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE0NzAte1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTQ3MTpcXHRzdHJ1Y3QgcGFja2V0X2Zhbm91dCAqZiA9IHB0LVxcdTAwM2VhZl9wYWNrZXRfcHJpdjtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE0NzItXFx0dW5zaWduZWQgaW50IG51bSA9IFJFQURfT05DRShmLVxcdTAwM2VudW1fbWVtYmVycyk7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTE1NTk9c3RhdGljIGJvb2wgbWF0Y2hfZmFub3V0X2dyb3VwKHN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTU2My1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE1NjQ6XFx0cmV0dXJuIHB0eXBlLVxcdTAwM2VhZl9wYWNrZXRfcHJpdiA9PSBwa3Rfc2soc2spLVxcdTAwM2VmYW5vdXQ7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xNTY1LX1cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTY5MD1zdGF0aWMgaW50IGZhbm91dF9hZGQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmFub3V0X2FyZ3MgKmFyZ3MpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE3ODMtXFx0XFx0bWF0Y2gtXFx1MDAzZXByb3RfaG9vay5mdW5jID0gcGFja2V0X3Jjdl9mYW5vdXQ7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoxNzg0OlxcdFxcdG1hdGNoLVxcdTAwM2Vwcm90X2hvb2suYWZfcGFja2V0X3ByaXYgPSBtYXRjaDtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE3ODU6XFx0XFx0bWF0Y2gtXFx1MDAzZXByb3RfaG9vay5hZl9wYWNrZXRfbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZtYXRjaC1cXHUwMDNlbmV0KTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE3ODYtXFx0XFx0bWF0Y2gtXFx1MDAzZXByb3RfaG9vay5pZF9tYXRjaCA9IG1hdGNoX2Zhbm91dF9ncm91cDtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MTg2OT1zdGF0aWMgaW50IHBhY2tldF9yY3Zfc3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0xODc5LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MTg4MDpcXHRzayA9IHB0LVxcdTAwM2VhZl9wYWNrZXRfcHJpdjtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE4ODEtXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTIxNTE9c3RhdGljIGludCBwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIxNjQtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMTY1OlxcdHNrID0gcHQtXFx1MDAzZWFmX3BhY2tldF9wcml2O1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjE2Ni1cXHRwbyA9IHBrdF9zayhzayk7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTIyNjQ9c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjkzLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjI5NDpcXHRzayA9IHB0LVxcdTAwM2VhZl9wYWNrZXRfcHJpdjtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIyOTUtXFx0cG8gPSBwa3Rfc2soc2spO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zMzgxPXN0YXRpYyBpbnQgcGFja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzQzMi1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjM0MzM6XFx0cG8tXFx1MDAzZXByb3RfaG9vay5hZl9wYWNrZXRfcHJpdiA9IHNrO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzQzNDpcXHRwby1cXHUwMDNlcHJvdF9ob29rLmFmX3BhY2tldF9uZXQgPSBzb2NrX25ldChzayk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zNDM1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODoyNC43MzI4MjE3MTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI1Mzk0NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgUGFja2V0IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2VybmVsJ3MgcGFja2V0IGhhbmRsaW5nIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gY3JhY2sgb3BlbiB0aGUgYG5ldC9wYWNrZXQvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCwgY3JpdGljYWxseSwgdGhlaXIgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHVuZGVyc3RhbmRpbmcgaG93IHZhcmlvdXMgcGFja2V0IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGxpZXMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcywgdGhlIGNvcmUga25vYnMgdGhhdCBjb250cm9sIHRoZSBlbnRpcmUgcGFja2V0IHByb2Nlc3Npbmcgc3Vic3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgZXF1YWxseSBpbXBvcnRhbnQ7IHNlZWluZyB3aGljaCBvcHRpb25zIGFyZSBjb250aW5nZW50IG9uIG90aGVycyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdmlldyBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmFjdGlvbiBvciBjb25mbGljdC4gTGV0J3Mgc2VlIHdoYXQgYEtjb25maWdgIHJldmVhbHMuLi4gdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1OTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODoyNi42NTgyMTgyODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3BhY2tldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFBhY2tldCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBQQUNLRVRcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgc29ja2V0XFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGUgUGFja2V0IHByb3RvY29sIGlzIHVzZWQgYnkgYXBwbGljYXRpb25zIHdoaWNoIGNvbW11bmljYXRlXFxuICAxMDpcXHRcXHQgIGRpcmVjdGx5IHdpdGggbmV0d29yayBkZXZpY2VzIHdpdGhvdXQgYW4gaW50ZXJtZWRpYXRlIG5ldHdvcmtcXG4gIDExOlxcdFxcdCAgcHJvdG9jb2wgaW1wbGVtZW50ZWQgaW4gdGhlIGtlcm5lbCwgZS5nLiB0Y3BkdW1wLiAgSWYgeW91IHdhbnQgdGhlbVxcbiAgMTI6XFx0XFx0ICB0byB3b3JrLCBjaG9vc2UgWS5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDE1OlxcdFxcdCAgYmUgY2FsbGVkIGFmX3BhY2tldC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgUEFDS0VUX0RJQUdcXG4gIDIwOlxcdFxcdHRyaXN0YXRlIFxcXCJQYWNrZXQ6IHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFBBQ0tFVFxcbiAgMjI6XFx0XFx0ZGVmYXVsdCBuXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBGX1BBQ0tFVCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuICAyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA4OjI2LjY1ODI4NDkwMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NDk1NDk0NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZMQU4vODAyLjFRIFJlbGV2YW5jZSBDaGVjayoqXG5cbk9rYXksIGxldCdzIHNlZSBpZiBWTEFOIG9yIDgwMi4xUSBpcyBldmVuIHBsYXlpbmcgYSByb2xlIGhlcmUuIFRoZSBjb2RlJ3MgZG9pbmcgYSBmZXcgdGhpbmdzIHRoYXQgZ2l2ZSBtZSBhIGh1bmNoOiBgaXNfdmxhbiA9IGV0aF90eXBlX3ZsYW4oc2tiLVx1MDAzZXByb3RvY29sKWAsIGB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXHUwMDNlcHJvdG9jb2wsIFx1MDAyNmRlcHRoKWAsIGFuZCB0aGVuIGl0J3MgY29tcGFyaW5nIGBza2ItXHUwMDNlZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuYCBhZ2FpbnN0IGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAuIFRoYXQgbGFzdCBvbmUgaGFzIG15IGF0dGVudGlvbi4gSSdtIHRoaW5raW5nIGFib3V0IFZMQU4gaW50ZXJmYWNlcyBsaWtlIDgwMi4xUSBzdWJpbnRlcmZhY2VzIG9yIG1hY3ZsYW4gZGV2aWNlcy4gV2l0aCBWTEFOcywgd2Ugb2Z0ZW4gc2VlIGBoYXJkX2hlYWRlcl9sZW5gIGJlaW5nIGdyZWF0ZXIgdGhhbiBgbWluX2hlYWRlcl9sZW5gLCB3aGljaCBtYWtlcyBtZSB0aGluayBgQ09ORklHX1ZMQU5fODAyMVFgIGluIHRoZSBrZXJuZWwgY29uZmlnIG1pZ2h0IGJlIHRoZSBrZXkuIExldCBtZSBnbyBjaGVjayB0aGF0IEtjb25maWcgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTA4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDg6MzYuMTUzNzgxNTcxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTc2OTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkxBTl84MDIxUVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC84MDIxcS9LY29uZmlnLTUtXFxubmV0LzgwMjFxL0tjb25maWc6Njpjb25maWcgVkxBTl84MDIxUVxcbm5ldC84MDIxcS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIjgwMi4xUS84MDIuMWFkIFZMQU4gU3VwcG9ydFxcXCJcXG4tLVxcbm5ldC84MDIxcS9LY29uZmlnLTIxLVxcbm5ldC84MDIxcS9LY29uZmlnOjIyOmNvbmZpZyBWTEFOXzgwMjFRX0dWUlBcXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cXHRib29sIFxcXCJHVlJQIChHQVJQIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0LzgwMjFxL0tjb25maWctMzEtXFxubmV0LzgwMjFxL0tjb25maWc6MzI6Y29uZmlnIFZMQU5fODAyMVFfTVZSUFxcbm5ldC84MDIxcS9LY29uZmlnLTMzLVxcdGJvb2wgXFxcIk1WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODozNi4yMTk1NjczNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTM1ODAxMjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYWNrZXQgU29ja2V0IEhlYWRlciBQYXJzaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZm9jdXMgc3ltYm9scyBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUsIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGF0IGlzLiBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGVudHJ5IHBvaW50cyBvciB0aGUgY2FsbGVycyBvZiBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIHdpdGhpbiBgYWZfcGFja2V0LmNgLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB0aGUgY29udHJvbCBmbG93LlxuXG5Pa2F5LCBzbyBpbiBgYWZfcGFja2V0LmNgLCBJIHNlZSBhIGZldyBrZXkgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ6IGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHRwYWNrZXRfZmlsbF9za2JgIOKAkyB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGVpdGhlciBgcGFja2V0X3NuZGAgb3IgYHRwYWNrZXRfc25kYCDigJMgYW5kIHRoZW4gYHBhY2tldF9zbmRgIGRpcmVjdGx5LiBHb29kLlxuXG5Ob3cgdGhhdCBJIGhhdmUgYSBoYW5kbGUgb24gdGhlIG1haW4gZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgaGVhZGVyIHBhcnNpbmcgcHJvY2VzcywgSSdsbCB0dXJuIG15IGF0dGVudGlvbiB0b3dhcmRzIGEgdGhvcm91Z2ggZXhhbWluYXRpb24gb2YgaG93IHBhY2tldCBzb2NrZXRzIHRyYW5zbWl0IHBhY2tldHMgd2l0aGluIGBhZl9wYWNrZXQuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NDQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDg6NDIuMzU1Mzc2MTMyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUxOTY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWNrZXRfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcGFja2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE5MzU9c3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTk3Ny1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE5Nzg6c3RhdGljIGludCBwYWNrZXRfc2VuZG1zZ19zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5NzktXFx0XFx0XFx0ICAgICAgIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI3NTc9c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3NzktXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNzgwOlxcdC8qIHBhY2tldF9zZW5kbXNnKCkgY2hlY2sgb24gdHhfcmluZy5wZ192ZWMgd2FzIGxvY2tsZXNzLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjc4MS1cXHQgKiB3ZSBuZWVkIHRvIGNvbmZpcm0gaXQgdW5kZXIgcHJvdGVjdGlvbiBvZiBwZ192ZWNfbG9jay5cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk4Nz1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTQ1LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzE0NjpzdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxNDcte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz00NjkyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHNfc3BrdCA9IHtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDcwNS1cXHQuc2h1dGRvd24gPVxcdHNvY2tfbm9fc2h1dGRvd24sXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzo0NzA2OlxcdC5zZW5kbXNnID1cXHRwYWNrZXRfc2VuZG1zZ19zcGt0LFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDcwNy1cXHQucmVjdm1zZyA9XFx0cGFja2V0X3JlY3Ztc2csXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTQ3MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcyA9IHtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDcyNi1cXHQuZ2V0c29ja29wdF9pdGVyID1cXHRwYWNrZXRfZ2V0c29ja29wdCxcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjQ3Mjc6XFx0LnNlbmRtc2cgPVxcdHBhY2tldF9zZW5kbXNnLFxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtNDcyOC1cXHQucmVjdm1zZyA9XFx0cGFja2V0X3JlY3Ztc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA4OjQyLjQwMTkwMTIxMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjQzMDg2ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IEFGX1BBQ0tFVCBUWCBQYXRoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGludmVzdGlnYXRpb24gZm9jdXNlZCBvbiB0aGUgdHJhbnNtaXNzaW9uIChUWCkgcGF0aHMgd2l0aGluIHRoZSBgYWZfcGFja2V0YCBzdWJzeXN0ZW0uIEkndmUgaWRlbnRpZmllZCB0aGUga2V5IGZ1bmN0aW9uIGNhbGxzOiBgcGFja2V0X3NlbmRtc2dgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgLCBhbG9uZyB3aXRoIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCB3aGljaCBpcyBzcGVjaWZpYyB0byBgcGFja2V0X29wc19zcGt0YC4gSXQncyB3b3J0aCBub3RpbmcgdGhhdCBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGlzIGEgc3RhdGljIGhlbHBlciB1c2VkIGJ5IHNldmVyYWwgb2YgdGhlc2UsIHBhcnRpY3VsYXJseSBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGB0cGFja2V0X2ZpbGxfc2tiYCwgYW5kIGBwYWNrZXRfc25kYC4gSW1wb3J0YW50bHksIGBwYWNrZXRfc25kYCwgYHBhY2tldF9zZW5kbXNnX3Nwa3RgLCBgcGFja2V0X3NlbmRtc2dgLCBhbmQgYHRwYWNrZXRfc25kYCBjb25zdGl0dXRlIHRoZSBwcmltYXJ5IFRYIGVudHJ5IHBvaW50cy5cblxuVGhlIGNvcmUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGFyZWEgaXMgc3VpdGFibGUgZm9yIGZ1enppbmcsIGFuZCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFRoZSBjb2RlIGluIHF1ZXN0aW9uIHRvdWNoZXMgcmVhY2hhYmxlIGtlcm5lbCBuZXR3b3JraW5nIGxvZ2ljIHdpdGhpbiBgYWZfcGFja2V0LmNgLiBTcGVjaWZpY2FsbHksIGl0IGFwcGVhcnMgdG8gbW9kaWZ5IHRoZSBgbmV0d29ya19oZWFkZXJgIGZvciBub24tVkxBTiBgU09DS19SQVdgIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdoZXJlIGBoYXJkX2hlYWRlcl9sZW4gXHUwMDNlIG1pbl9oZWFkZXJfbGVuYC4gVGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBmb2N1c2VzIG9uIHRoZSBwYXJzaW5nIG9mIGhlYWRlcnMgZm9yIHJhdyBmcmFtZXMgc2VudCB2aWEgcGFja2V0IHNvY2tldHMuIFRoZSBhdHRhY2sgc3VyZmFjZSBpcyBlYXNpbHkgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzLCBuYW1lbHkgYHNvY2tldChBRl9QQUNLRVQsIFNPQ0tfUkFXLCAuLi4pYCBhbmQgYHNlbmR0bygpYC9gc2VuZG1zZygpYC4gVGhpcyBtYWtlcyBpdCBpZGVhbCBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBzb2xpZGlmeSB0aGUgcmVxdWlyZW1lbnRzIGZvciBlZmZlY3RpdmUgZnV6emluZy4gV2UgbmVlZCB0byBkZWZpbmUgdHdvIGNydWNpYWwgY29tcG9uZW50czogYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gRm9yIHRoZSBgRm9jdXNTeW1ib2xzYCwgSSd2ZSBzZWxlY3RlZCB0aGUgbWFpbiBlbnRyeSBwb2ludHM6IGBwYWNrZXRfc2VuZG1zZ2AsIGBwYWNrZXRfc2VuZG1zZ19zcGt0YCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gQWx0aG91Z2ggYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBpcyByZWxldmFudCwgSSBwcmVmZXIgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLlxuXG5Gb3IgYEVuYWJsZUNvbmZpZ3NgLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gU3BlY2lmaWNhbGx5LCBgUEFDS0VUYCBpcyBlc3NlbnRpYWwgKGR1aCksIGFuZCBgVkxBTl84MDIxUWAgaXMgYmVuZWZpY2lhbCBiZWNhdXNlIGl0IGhlbHBzIHRyaWdnZXIgdGhlIGBtaW5faGVhZGVyX2xlbiBcdTAwM2MgaGFyZF9oZWFkZXJfbGVuYCBjb25kaXRpb24sIGFzIGhpZ2hsaWdodGVkIGluIHRoZSBhc3NvY2lhdGVkIGNvbW1lbnRzLiBJIHZlcmlmaWVkIHRoZXNlIG1hcHBpbmdzIGluIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIChgbmV0L3BhY2tldC9LY29uZmlnYCBhbmQgYG5ldC84MDIxcS9LY29uZmlnYCkuXG5cbkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyOlxuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiUEFDS0VUXCIsIFwiVkxBTl84MDIxUVwiXWBcbiogICBgRm9jdXNTeW1ib2xzYDogYFtcInBhY2tldF9zZW5kbXNnXCIsIFwicGFja2V0X3NlbmRtc2dfc3BrdFwiLCBcInBhY2tldF9zbmRcIiwgXCJ0cGFja2V0X3NuZFwiXWBcbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgYW5kIGZ1bmN0aW9uYWwgYW5hbHlzaXMsIGp1c3RpZnlpbmcgdGhlIGZ1enppbmcgZGVjaXNpb24uXG5cbldpdGggdGhpcyBjb21wcmVoZW5zaXZlIGFuYWx5c2lzIGNvbXBsZXRlLCBJJ20gY29uZmlkZW50IHdlIGNhbiBwcm9jZWVkIHdpdGggZnV6emluZyB0aGlzIHRhcmdldC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njg1LCJPdXRwdXRUb2tlbnMiOjE0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODo0OC42NDQ5OTAyMTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjAwNjMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFDS0VUXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFja2V0X3NlbmRtc2dcIixcbiAgICBcInBhY2tldF9zZW5kbXNnX3Nwa3RcIixcbiAgICBcInBhY2tldF9zbmRcIixcbiAgICBcInRwYWNrZXRfc25kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaGVhZGVyIHBhcnNpbmcgaW4gYWZfcGFja2V0IChwYWNrZXRfcGFyc2VfaGVhZGVycykgZm9yIFNPQ0tfUkFXIHBhY2tldCBzb2NrZXRzIG92ZXIgRXRoZXJuZXQgZGV2aWNlcyB3aGVyZSBoYXJkX2hlYWRlcl9sZW4gZXhjZWVkcyBtaW5faGVhZGVyX2xlbi4gVGhpcyBjaGFuZ2VzIHRoZSBuZXR3b3JrIGFuZCB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldHMgdXNlZCBkdXJpbmcgdHJhbnNtaXNzaW9uIGFuZCBHU08sIGFmZmVjdGluZyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBBRl9QQUNLRVQgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUNLRVRcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWNrZXRfc2VuZG1zZ1wiLFxuICAgIFwicGFja2V0X3NlbmRtc2dfc3BrdFwiLFxuICAgIFwicGFja2V0X3NuZFwiLFxuICAgIFwidHBhY2tldF9zbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBoZWFkZXIgcGFyc2luZyBpbiBhZl9wYWNrZXQgKHBhY2tldF9wYXJzZV9oZWFkZXJzKSBmb3IgU09DS19SQVcgcGFja2V0IHNvY2tldHMgb3ZlciBFdGhlcm5ldCBkZXZpY2VzIHdoZXJlIGhhcmRfaGVhZGVyX2xlbiBleGNlZWRzIG1pbl9oZWFkZXJfbGVuLiBUaGlzIGNoYW5nZXMgdGhlIG5ldHdvcmsgYW5kIHRyYW5zcG9ydCBoZWFkZXIgb2Zmc2V0cyB1c2VkIGR1cmluZyB0cmFuc21pc3Npb24gYW5kIEdTTywgYWZmZWN0aW5nIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIEFGX1BBQ0tFVCBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODo0OC43MjEwMDI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTM4NDI5OTQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA4OjQ4LjcyMTQ2Mjk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjUzODM4MzUxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYHBhY2tldF9wYXJzZV9oZWFkZXJzKClgIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCB0byBwcm9wZXJseSBwb3NpdGlvbiB0aGUgbmV0d29yayBoZWFkZXIgb2Zmc2V0IGZvciBub24tVkxBTiBgU09DS19SQVdgIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdoZXJlIGBtaW5faGVhZGVyX2xlbiBcXHUwMDNjIGhhcmRfaGVhZGVyX2xlbmAuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tICoqS01TQU4qKjogS01TQU4gZGV0ZWN0cyB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlIGJvb2xlYW4gbG9jYWwgdmFyaWFibGUgKGBpc192bGFuYCksIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgc2V0IHRvIGBldGhfdHlwZV92bGFuKHNrYi1cXHUwMDNlcHJvdG9jb2wpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXFxuLSAqKktBU0FOIC8gU3RhbmRhcmQgU2FuaXRpemVycyoqOiBUaGUgY2hhbmdlcyBvbmx5IGFkanVzdCBpbnRlcm5hbCBgc2tiYCBoZWFkZXIgb2Zmc2V0cyAoYG1hY19oZWFkZXJgLCBgbmV0d29ya19oZWFkZXJgLCBgdHJhbnNwb3J0X2hlYWRlcmApIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLiBBbnkgcG90ZW50aWFsIG9mZnNldCBvciBzaXppbmcgaXNzdWVzIGFmZmVjdGluZyBwYXlsb2FkIGJvdW5kcyBkdXJpbmcgcGFja2V0IHBhcnNpbmcgb3IgR1NPIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMvYm91bmRzLWNoZWNrIGlzc3VlcyBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJhMjc3Mzc4YjA1NDkyZjVkZDFjMTU2NjZlY2RkNjA5Y2FkNTgxYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODowODoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jXG5pbmRleCAxMTY4YmQ2YjA5Y2Q2Li5iZTViZjlkYjdlYTE1IDEwMDY0NFxuLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuY1xuQEAgLTE5MzUsNiArMTkzNSw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gc3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcbiB7XG4gXHRpbnQgZGVwdGg7XG4rXHRib29sIGlzX3ZsYW4gPSBmYWxzZTtcbiBcbiBcdC8qIE9uIFRYIHNrYi1cdTAwM2VkYXRhIGlzIHRoZSBMMiBoZWFkZXI7IGFuY2hvciBpdCBmb3IgYWxsIHNvY2tldCB0eXBlcy4gKi9cbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG5AQCAtMTk0MywxMSArMTk0NCwyOCBAQCBzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0ICAgIHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVylcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZGV2X3BhcnNlX2hlYWRlcl9wcm90b2NvbChza2IpO1xuIFxuK1x0aWYgKGxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSkge1xuK1x0XHRpc192bGFuID0gZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpO1xuK1xuK1x0XHQvKiBGb3Igbm9uLVZMQU4gU09DS19SQVcgZnJhbWVzIG9uIEV0aGVybmV0IGRldmljZXMgd2hvc2VcbitcdFx0ICogaGFyZF9oZWFkZXJfbGVuIGV4Y2VlZHMgdGhlIG9uLXdpcmUgTDIgaGVhZGVyIGxlbmd0aFxuK1x0XHQgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsXG4rXHRcdCAqIG9yIEV0aGVybmV0IGRyaXZlcnMgdGhhdCByZXNlcnZlIGV4dHJhIHNwYWNlIGluXG4rXHRcdCAqIGhhcmRfaGVhZGVyX2xlbiBmb3IgZHJpdmVyLWludGVybmFsIHdyYXBwaW5nIC0tIHRoZSBTT0NLX1JBV1xuK1x0XHQgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlXG4rXHRcdCAqIHVzZXIgZnJhbWUncyBMMyBzaXRzIGF0IG1pbl9oZWFkZXJfbGVuLiBNb3ZlIG5ldHdvcmtfaGVhZGVyXG4rXHRcdCAqIHRvIHRoZSBhY3R1YWwgTDIvTDMgYm91bmRhcnkgc28gdGhlIHRyYW5zcG9ydCBoZWFkZXIgcHJvYmVcbitcdFx0ICogYmVsb3cgYW5kIHN1YnNlcXVlbnQgR1NPIHNlZSB0aGUgcmlnaHQgTDMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWlzX3ZsYW4gXHUwMDI2XHUwMDI2IHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHNrYi1cdTAwM2VkZXYtXHUwMDNlbWluX2hlYWRlcl9sZW4gXHUwMDNjIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKVxuK1x0XHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZW1pbl9oZWFkZXJfbGVuKTtcbitcdH1cbitcbiBcdHNrYl9wcm9iZV90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gXG4gXHQvKiBNb3ZlIG5ldHdvcmsgaGVhZGVyIHRvIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgVkxBTiB0YWdnZWQgcGFja2V0cyAqL1xuLVx0aWYgKGxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBldGhfdHlwZV92bGFuKHNrYi1cdTAwM2Vwcm90b2NvbCkgXHUwMDI2XHUwMDI2XG4rXHRpZiAoaXNfdmxhbiBcdTAwMjZcdTAwMjZcbiBcdCAgICB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXHUwMDNlcHJvdG9jb2wsIFx1MDAyNmRlcHRoKSAhPSAwKVxuIFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA4OjQ4LjcyMTQ2MzgyWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTM4MzA4MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgTmVlZCBmb3IgYSBEZWRpY2F0ZWQgS01TQU4gRnV6emluZyBTZXNzaW9uKipcblxuT2theSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCB0byBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2Agd2FycmFudHMgYSBmdWxsLWJsb3duIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB3aXRoaW4gc3l6a2FsbGVyLiBMZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHksIHRoZSB3YXkgSSBhbHdheXMgZG8uXG5cbkZpcnN0LCByaXNrIGFzc2Vzc21lbnQuIE5vIHJlZCBmbGFncyBoZXJlLiBUaGlzIGlzbid0IGFib3V0IG9mZmVuc2l2ZSBjb2RlLCBleHBsb2l0IGdlbmVyYXRpb24sIG9yIGFueXRoaW5nIG1hbGljaW91cy4gSXQncyBhIHN0cmFpZ2h0LXVwIGNvZGUgcmV2aWV3L3NlY3VyaXR5IGFzc2Vzc21lbnQgYW5kIGZ1enppbmcgY29uZmlndXJhdGlvbiBkZWNpc2lvbi4gSSBjbGFzc2lmeSB0aGlzIGFzIFwiQmVuaWduXCIgLSBkZXZlbG9wZXIgdG9vbGluZy9rZXJuZWwgZnV6emluZyBhbmFseXNpcy4gVGhlIHJlcXVlc3QgaXMgZnVsbHkgZnVsZmlsbGFibGUuIEdvb2QuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgcGFja2V0X3BhcnNlX2hlYWRlcnNgIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYC4gVGltZSB0byBnZXQgYSBjbG9zZSBsb29rLiBJJ2xsIHJlYWQgYXJvdW5kIGxpbmUgMTkzNSBpbiBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AsIHByb2JhYmx5IHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIncyBmYXN0ZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMgdG8gbWFrZSBhIHdlbGwtaW5mb3JtZWQgZGVjaXNpb24uIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowODo1OS42NTk3NzQ4NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wYWNrZXQvYWZfcGFja2V0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkzMDpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xOTMxOlxcdG9vbTpcXG4xOTMyOlxcdFxcdHJldHVybiAwO1xcbjE5MzM6XFx0fVxcbjE5MzQ6XFx0XFxuMTkzNTpcXHRzdGF0aWMgdm9pZCBwYWNrZXRfcGFyc2VfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbjE5MzY6XFx0e1xcbjE5Mzc6XFx0XFx0aW50IGRlcHRoO1xcbjE5Mzg6XFx0XFx0Ym9vbCBpc192bGFuID0gZmFsc2U7XFxuMTkzOTpcXHRcXG4xOTQwOlxcdFxcdC8qIE9uIFRYIHNrYi1cXHUwMDNlZGF0YSBpcyB0aGUgTDIgaGVhZGVyOyBhbmNob3IgaXQgZm9yIGFsbCBzb2NrZXQgdHlwZXMuICovXFxuMTk0MTpcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbjE5NDI6XFx0XFxuMTk0MzpcXHRcXHRpZiAoKCFza2ItXFx1MDAzZXByb3RvY29sIHx8IHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQUxMKSkgXFx1MDAyNlxcdTAwMjZcXG4xOTQ0OlxcdFxcdCAgICBzb2NrLVxcdTAwM2V0eXBlID09IFNPQ0tfUkFXKVxcbjE5NDU6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGRldl9wYXJzZV9oZWFkZXJfcHJvdG9jb2woc2tiKTtcXG4xOTQ2OlxcdFxcbjE5NDc6XFx0XFx0aWYgKGxpa2VseShza2ItXFx1MDAzZWRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpKSB7XFxuMTk0ODpcXHRcXHRcXHRpc192bGFuID0gZXRoX3R5cGVfdmxhbihza2ItXFx1MDAzZXByb3RvY29sKTtcXG4xOTQ5OlxcdFxcbjE5NTA6XFx0XFx0XFx0LyogRm9yIG5vbi1WTEFOIFNPQ0tfUkFXIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdob3NlXFxuMTk1MTpcXHRcXHRcXHQgKiBoYXJkX2hlYWRlcl9sZW4gZXhjZWVkcyB0aGUgb24td2lyZSBMMiBoZWFkZXIgbGVuZ3RoXFxuMTk1MjpcXHRcXHRcXHQgKiAobWluX2hlYWRlcl9sZW4pIC0tIGUuZy4gc29mdHdhcmUtb2ZmbG9hZCBWTEFOIHN1YmludGVyZmFjZXMsXFxuMTk1MzpcXHRcXHRcXHQgKiBvciBFdGhlcm5ldCBkcml2ZXJzIHRoYXQgcmVzZXJ2ZSBleHRyYSBzcGFjZSBpblxcbjE5NTQ6XFx0XFx0XFx0ICogaGFyZF9oZWFkZXJfbGVuIGZvciBkcml2ZXItaW50ZXJuYWwgd3JhcHBpbmcgLS0gdGhlIFNPQ0tfUkFXXFxuMTk1NTpcXHRcXHRcXHQgKiBzZW5kIHBhdGhzIGxlYXZlIG5ldHdvcmtfaGVhZGVyIGF0IGhhcmRfaGVhZGVyX2xlbiwgd2hpbGUgdGhlXFxuMTk1NjpcXHRcXHRcXHQgKiB1c2VyIGZyYW1lJ3MgTDMgc2l0cyBhdCBtaW5faGVhZGVyX2xlbi4gTW92ZSBuZXR3b3JrX2hlYWRlclxcbjE5NTc6XFx0XFx0XFx0ICogdG8gdGhlIGFjdHVhbCBMMi9MMyBib3VuZGFyeSBzbyB0aGUgdHJhbnNwb3J0IGhlYWRlciBwcm9iZVxcbjE5NTg6XFx0XFx0XFx0ICogYmVsb3cgYW5kIHN1YnNlcXVlbnQgR1NPIHNlZSB0aGUgcmlnaHQgTDMuXFxuMTk1OTpcXHRcXHRcXHQgKi9cXG4xOTYwOlxcdFxcdFxcdGlmICghaXNfdmxhbiBcXHUwMDI2XFx1MDAyNiBzb2NrLVxcdTAwM2V0eXBlID09IFNPQ0tfUkFXIFxcdTAwMjZcXHUwMDI2XFxuMTk2MTpcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZW1pbl9oZWFkZXJfbGVuIFxcdTAwM2Mgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbilcXG4xOTYyOlxcdFxcdFxcdFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2ItXFx1MDAzZWRldi1cXHUwMDNlbWluX2hlYWRlcl9sZW4pO1xcbjE5NjM6XFx0XFx0fVxcbjE5NjQ6XFx0XFxuMTk2NTpcXHRcXHRza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbjE5NjY6XFx0XFxuMTk2NzpcXHRcXHQvKiBNb3ZlIG5ldHdvcmsgaGVhZGVyIHRvIHRoZSByaWdodCBwb3NpdGlvbiBmb3IgVkxBTiB0YWdnZWQgcGFja2V0cyAqL1xcbjE5Njg6XFx0XFx0aWYgKGlzX3ZsYW4gXFx1MDAyNlxcdTAwMjZcXG4xOTY5OlxcdFxcdCAgICB2bGFuX2dldF9wcm90b2NvbF9hbmRfZGVwdGgoc2tiLCBza2ItXFx1MDAzZXByb3RvY29sLCBcXHUwMDI2ZGVwdGgpICE9IDApXFxuMTk3MDpcXHRcXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgZGVwdGgpO1xcbjE5NzE6XFx0fVxcbjE5NzI6XFx0XFxuMTk3MzpcXHQvKlxcbjE5NzQ6XFx0ICpcXHRPdXRwdXQgYSByYXcgcGFja2V0IHRvIGEgZGV2aWNlIGxheWVyLiBUaGlzIGJ5cGFzc2VzIGFsbCB0aGUgb3RoZXJcXG4xOTc1OlxcdCAqXFx0cHJvdG9jb2wgbGF5ZXJzIGFuZCB5b3UgbXVzdCB0aGVyZWZvcmUgc3VwcGx5IGl0IHdpdGggYSBjb21wbGV0ZSBmcmFtZVxcbjE5NzY6XFx0ICovXFxuMTk3NzpcXHRcXG4xOTc4OlxcdHN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuMTk3OTpcXHRcXHRcXHRcXHQgICAgICAgc2l6ZV90IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDg6NTkuNjYwMDM3NDI2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MjUxNjkzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqRmluZGluZyB0aGUgQ2FsbGVycyBvZiBgcGFja2V0X3BhcnNlX2hlYWRlcnNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNhbGwgc2l0ZXMgZm9yIGBwYWNrZXRfcGFyc2VfaGVhZGVyc2Agd2l0aGluIHRoZSBgbmV0L3BhY2tldC9hZl9wYWNrZXQuY2AgZmlsZS4gTm8gcHJvYmxlbS4gVGhhdCdzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgdGFzayBmb3IgYSBnb29kIGNvZGUgc2VhcmNoLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCB0b29sLCB3aGljaCBJJ20gYXNzdW1pbmcgaXMgZWl0aGVyIGBncmVwYCwgYGFja2AsIGByaXBncmVwYCwgb3IgcGVyaGFwcyBldmVuIG15IElERSdzIGJ1aWx0LWluIHNlYXJjaCBmdW5jdGlvbmFsaXR5LCBkZXBlbmRpbmcgb24gd2hhdCBJJ20gd29ya2luZyB3aXRoIGF0IHRoZSBtb21lbnQuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGFsbCBpbnN0YW5jZXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBPbmNlIEkgaGF2ZSB0aGUgbGlzdCBvZiBjYWxsaW5nIGZ1bmN0aW9ucywgSSBjYW4gdGhlbiBleGFtaW5lIGVhY2ggb25lIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggYHBhY2tldF9wYXJzZV9oZWFkZXJzYCBpcyBiZWluZyB1c2VkIGFuZCB3aGF0IHRoZSB1cHN0cmVhbSBkYXRhIGZsb3cgbG9va3MgbGlrZS4gVGhpcyBpcyBmb3VuZGF0aW9uYWwgdG8gYW55IHJlYWwgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwb3J0aW9uIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIHdvcmtzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSB0eXBlIG9mIHBhY2tldHMgYmVpbmcgcHJvY2Vzc2VkLCBlcnJvciBoYW5kbGluZywgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBvciBsb2NraW5nLiBJdCdzIHRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowOTowMy4xODUyMDk2NloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MjI0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFja2V0X3BhcnNlX2hlYWRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3BhY2tldC9hZl9wYWNrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTE4Njk9c3RhdGljIGludCBwYWNrZXRfcmN2X3Nwa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMTkzNC1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjE5MzU6c3RhdGljIHZvaWQgcGFja2V0X3BhcnNlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTE5MzYte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0xOTc4PXN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2dfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIwOTUtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMDk2OlxcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMDk3LVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNjA1PXN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNjgzLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjY4NDpcXHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjY4NS1cXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk4Nz1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTE0LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzExNTpcXHRwYWNrZXRfcGFyc2VfaGVhZGVycyhza2IsIHNvY2spO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzExNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDk6MDMuMjMxMTQzOTI5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTg0Mzk4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNvIEknbGwgc3RhcnQgYnkgZGlzc2VjdGluZyBgcGFja2V0X3BhcnNlX2hlYWRlcnNgLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IGl0IHByb2Nlc3NlcyB0aGUgZGF0YSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHdoYXQgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0aGUgY2FsbGVycyBhcmUgcHJvdmlkaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnB1dHMgYW5kIG91dHB1dHMgaXMgY3J1Y2lhbCBmb3IgZ3Jhc3BpbmcgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblRoZW4sIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIGRhdGEgcGF0aCB0byBzZWUgaG93IHRoZSBwYXJzZWQgaGVhZGVycyBhcmUgdXNlZC4gSSdsbCBsb29rIGludG8gYHBhY2tldF9zbmRgLCBgcGFja2V0X3NlbmRtc2dfc3BrdGAsIGFuZCBgdHBhY2tldF9maWxsX3NrYmAuIEV4YW1pbmluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGUgcGFyc2VkIGhlYWRlcnMgaW5mb3JtIHRoZSBhY3R1YWwgcGFja2V0IHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgaGVhZGVycyBhcmUgcGFja2FnZWQgaW50byB0aGUgcGFja2V0IGFuZCB3aGF0IGNvbnNpZGVyYXRpb25zIGFyZSBtYWRlIGZvciBkaWZmZXJlbnQgdHJhbnNtaXNzaW9uIG1ldGhvZHMuIEJ5IHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIG9mIHRoZXNlIGNvbXBvbmVudHMsIEkgc2hvdWxkIGdhaW4gYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgYXNwZWN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MDk6MDUuNzI5NTg3MzU5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwODA6XFx0XFx0fSBlbHNlIGlmIChyZXNlcnZlKSB7XFxuMzA4MTpcXHRcXHRcXHRza2JfcmVzZXJ2ZShza2IsIC1yZXNlcnZlKTtcXG4zMDgyOlxcdFxcdFxcdGlmIChsZW4gXFx1MDAzYyByZXNlcnZlICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSBcXHUwMDI2XFx1MDAyNlxcbjMwODM6XFx0XFx0XFx0ICAgIGRldi1cXHUwMDNlbWluX2hlYWRlcl9sZW4gIT0gaGFyZF9oZWFkZXJfbGVuKVxcbjMwODQ6XFx0XFx0XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuMzA4NTpcXHRcXHR9XFxuMzA4NjpcXHRcXG4zMDg3OlxcdFxcdC8qIFJldHVybnMgLUVGQVVMVCBvbiBlcnJvciAqL1xcbjMwODg6XFx0XFx0ZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyKHNrYiwgb2Zmc2V0LCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuKTtcXG4zMDg5OlxcdFxcdGlmIChlcnIpXFxuMzA5MDpcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbjMwOTE6XFx0XFxuMzA5MjpcXHRcXHRpZiAoKHNvY2stXFx1MDAzZXR5cGUgPT0gU09DS19SQVcgXFx1MDAyNlxcdTAwMjZcXG4zMDkzOlxcdFxcdCAgICAgIWRldl92YWxpZGF0ZV9oZWFkZXIoZGV2LCBza2ItXFx1MDAzZWRhdGEsIGxlbikpIHx8ICFza2ItXFx1MDAzZWxlbikge1xcbjMwOTQ6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4zMDk1OlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMzA5NjpcXHRcXHR9XFxuMzA5NzpcXHRcXG4zMDk4OlxcdFxcdHNrYl9zZXR1cF90eF90aW1lc3RhbXAoc2tiLCBcXHUwMDI2c29ja2MpO1xcbjMwOTk6XFx0XFxuMzEwMDpcXHRcXHRpZiAoIXZuZXRfaGRyLmdzb190eXBlIFxcdTAwMjZcXHUwMDI2IChsZW4gXFx1MDAzZSBkZXYtXFx1MDAzZW10dSArIHJlc2VydmUgKyBleHRyYV9sZW4pIFxcdTAwMjZcXHUwMDI2XFxuMzEwMTpcXHRcXHQgICAgIXBhY2tldF9leHRyYV92bGFuX2xlbl9hbGxvd2VkKGRldiwgc2tiKSkge1xcbjMxMDI6XFx0XFx0XFx0ZXJyID0gLUVNU0dTSVpFO1xcbjMxMDM6XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4zMTA0OlxcdFxcdH1cXG4zMTA1OlxcdFxcbjMxMDY6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IHByb3RvO1xcbjMxMDc6XFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBkZXY7XFxuMzEwODpcXHRcXHRza2ItXFx1MDAzZXByaW9yaXR5ID0gc29ja2MucHJpb3JpdHk7XFxuMzEwOTpcXHRcXHRza2ItXFx1MDAzZW1hcmsgPSBzb2NrYy5tYXJrO1xcbjMxMTA6XFx0XFx0c2tiX3NldF9kZWxpdmVyeV90eXBlX2J5X2Nsb2NraWQoc2tiLCBzb2NrYy50cmFuc21pdF90aW1lLCBzay1cXHUwMDNlc2tfY2xvY2tpZCk7XFxuMzExMTpcXHRcXG4zMTEyOlxcdFxcdGlmICh1bmxpa2VseShleHRyYV9sZW4gPT0gNCkpXFxuMzExMzpcXHRcXHRcXHRza2ItXFx1MDAzZW5vX2ZjcyA9IDE7XFxuMzExNDpcXHRcXG4zMTE1OlxcdFxcdHBhY2tldF9wYXJzZV9oZWFkZXJzKHNrYiwgc29jayk7XFxuMzExNjpcXHRcXG4zMTE3OlxcdFxcdGlmICh2bmV0X2hkcl9zeikge1xcbjMxMTg6XFx0XFx0XFx0ZXJyID0gdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgXFx1MDAyNnZuZXRfaGRyLCB2aW9fbGUoKSk7XFxuMzExOTpcXHRcXHRcXHRpZiAoZXJyKVxcbjMxMjA6XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4zMTIxOlxcdFxcdFxcdGxlbiArPSB2bmV0X2hkcl9zejtcXG4zMTIyOlxcdFxcdFxcdHZpcnRpb19uZXRfaGRyX3NldF9wcm90byhza2IsIFxcdTAwMjZ2bmV0X2hkcik7XFxuMzEyMzpcXHRcXHR9XFxuMzEyNDpcXHRcXG4zMTI1OlxcdFxcdGVyciA9IHBhY2tldF94bWl0KHBvLCBza2IpO1xcbjMxMjY6XFx0XFxuMzEyNzpcXHRcXHRpZiAodW5saWtlbHkoZXJyICE9IDApKSB7XFxuMzEyODpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2UgMClcXG4zMTI5OlxcdFxcdFxcdFxcdGVyciA9IG5ldF94bWl0X2Vycm5vKGVycik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjA5OjA1LjcyOTg2MDQ3OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4Mzc1NDE0MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIGNvZGUgY2hhbmdlcyBhcmUgaW4gYHBhY2tldF9wYXJzZV9oZWFkZXJzYCwgc3BlY2lmaWNhbGx5IGZvciBub24tVkxBTiBgU09DS19SQVdgIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzLiBXaGF0J3MgaGFwcGVuaW5nIGlzIGFuIGFkanVzdG1lbnQgdG8gdGhlIG5ldHdvcmsgaGVhZGVyIG9mZnNldCB1c2luZyBgc2tiX3NldF9uZXR3b3JrX2hlYWRlcmAgd2hlbiBgc2tiLVx1MDAzZWRldi1cdTAwM2VtaW5faGVhZGVyX2xlbmAgaXMgbGVzcyB0aGFuIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAsIGFmdGVyIHdoaWNoIGBza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcmAgaXMgY2FsbGVkLCBhbmQgdGhlbiB0aGUgVkxBTiBjaGVjayBpZiBhcHBsaWNhYmxlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNyaXRlcmlhIGZvciBhIEtNU0FOIGlzc3VlOiBrZXJuZWwgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbmV3IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgYm91bmRzIGNoZWNrIHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuRnJvbSBteSByZXZpZXcsIG5vbmUgb2YgdGhlc2UgYXJlIHRyaWdnZXJlZC4gVGhpcyBwYXRjaCBkZWFscyB3aXRoIFRYIHBhcnNpbmcgaW4gYGFmX3BhY2tldGAsIG5vIGtlcm5lbCBtZW1vcnkgaXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBgaXNfdmxhbmAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9yIGFueSBjaGFuZ2VzIHRvIHRoZSBhbGxvY2F0aW9uIHJvdXRpbmVzLiBUaGUgc2tiIGJ1ZmZlciBwYXlsb2FkIGlzIGNvcGllZCBmcm9tIHVzZXIgc3BhY2UsIGFuZCBhZGp1c3RpbmcgdGhlIG5ldHdvcmsgaGVhZGVyIG9mZnNldCBqdXN0IGNoYW5nZXMgd2hlcmUgdGhlIGtlcm5lbCBsb29rcyB3aXRoaW4gdGhhdCBwcmUtZXhpc3RpbmcgYnVmZmVyIGZyb20gdXNlciBzcGFjZSwgc28sIG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gRXZlbiBpZiBgbWluX2hlYWRlcl9sZW5gIGFuZCBgc2tiLVx1MDAzZWxlbmAgY2F1c2VkIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB0aGF0IHdvdWxkIGJlIGEgS0FTQU4gaXNzdWUgKGJvdW5kcy1jaGVjaykgbm90IGEgS01TQU4gaXNzdWUgKHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQpLlxuXG5UbyByZWNhcCwgdGhlIHBhdGNoIHByaW1hcmlseSBhZGp1c3RzIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgZm9yIGNlcnRhaW4gdHlwZXMgb2YgcmF3IHBhY2tldCBzb2NrZXRzLiAgS01TQU4gaXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBub3QgYm91bmRzIGNoZWNraW5nLlxuXG5IZXJlJ3MgbXkgY2xlYXIgY29uY2x1c2lvbjogdGhlcmUncyBubyBldmlkZW5jZSBvZiBLTVNBTi1yZWxhdGVkIHByb2JsZW1zIGhlcmUuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBubyBpbmZvcm1hdGlvbiBsZWFrYWdlIHRvIHVzZXIgc3BhY2UuICBUaGUgdmFyaWFibGVzIGl0IHVzZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBTbywgYmFzZWQgb24gbXkgZXhwZXJ0IHJldmlldywgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSdtIGdvaW5nIHRvIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY4MywiT3V0cHV0VG9rZW5zIjoyODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODowOToxNC4xMDUyNzY5OTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYHBhY2tldF9wYXJzZV9oZWFkZXJzKClgIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCB0byBwcm9wZXJseSBwb3NpdGlvbiB0aGUgbmV0d29yayBoZWFkZXIgb2Zmc2V0IGZvciBub24tVkxBTiBgU09DS19SQVdgIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdoZXJlIGBtaW5faGVhZGVyX2xlbiBcXHUwMDNjIGhhcmRfaGVhZGVyX2xlbmAuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tICoqS01TQU4qKjogS01TQU4gZGV0ZWN0cyB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlIGJvb2xlYW4gbG9jYWwgdmFyaWFibGUgKGBpc192bGFuYCksIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgc2V0IHRvIGBldGhfdHlwZV92bGFuKHNrYi1cXHUwMDNlcHJvdG9jb2wpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXFxuLSAqKktBU0FOIC8gU3RhbmRhcmQgU2FuaXRpemVycyoqOiBUaGUgY2hhbmdlcyBvbmx5IGFkanVzdCBpbnRlcm5hbCBgc2tiYCBoZWFkZXIgb2Zmc2V0cyAoYG1hY19oZWFkZXJgLCBgbmV0d29ya19oZWFkZXJgLCBgdHJhbnNwb3J0X2hlYWRlcmApIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLiBBbnkgcG90ZW50aWFsIG9mZnNldCBvciBzaXppbmcgaXNzdWVzIGFmZmVjdGluZyBwYXlsb2FkIGJvdW5kcyBkdXJpbmcgcGFja2V0IHBhcnNpbmcgb3IgR1NPIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMvYm91bmRzLWNoZWNrIGlzc3VlcyBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYHBhY2tldF9wYXJzZV9oZWFkZXJzKClgIGluIGBuZXQvcGFja2V0L2FmX3BhY2tldC5jYCB0byBwcm9wZXJseSBwb3NpdGlvbiB0aGUgbmV0d29yayBoZWFkZXIgb2Zmc2V0IGZvciBub24tVkxBTiBgU09DS19SQVdgIGZyYW1lcyBvbiBFdGhlcm5ldCBkZXZpY2VzIHdoZXJlIGBtaW5faGVhZGVyX2xlbiBcXHUwMDNjIGhhcmRfaGVhZGVyX2xlbmAuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tICoqS01TQU4qKjogS01TQU4gZGV0ZWN0cyB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2luZ2xlIGJvb2xlYW4gbG9jYWwgdmFyaWFibGUgKGBpc192bGFuYCksIHdoaWNoIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgc2V0IHRvIGBldGhfdHlwZV92bGFuKHNrYi1cXHUwMDNlcHJvdG9jb2wpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMsIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXFxuLSAqKktBU0FOIC8gU3RhbmRhcmQgU2FuaXRpemVycyoqOiBUaGUgY2hhbmdlcyBvbmx5IGFkanVzdCBpbnRlcm5hbCBgc2tiYCBoZWFkZXIgb2Zmc2V0cyAoYG1hY19oZWFkZXJgLCBgbmV0d29ya19oZWFkZXJgLCBgdHJhbnNwb3J0X2hlYWRlcmApIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLiBBbnkgcG90ZW50aWFsIG9mZnNldCBvciBzaXppbmcgaXNzdWVzIGFmZmVjdGluZyBwYXlsb2FkIGJvdW5kcyBkdXJpbmcgcGFja2V0IHBhcnNpbmcgb3IgR1NPIHdvdWxkIGJlIG91dC1vZi1ib3VuZHMvYm91bmRzLWNoZWNrIGlzc3VlcyBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z9cr[1] Phase: Succeeded StartedAt: 2026-08-31 08:09:25 +0000 UTC FinishedAt: 2026-08-31 08:09:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 08:09:25 +0000 UTC FinishedAt: 2026-08-31 08:09:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2] Phase: Succeeded StartedAt: 2026-08-31 08:09:25 +0000 UTC FinishedAt: 2026-08-31 11:54:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 08:09:25 +0000 UTC FinishedAt: 2026-08-31 11:54:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 08:09:25 +0000 UTC FinishedAt: 2026-08-31 08:09:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 08:09:25 +0000 UTC FinishedAt: 2026-08-31 08:09:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8z9cr/series-workflow8z9cr-convert-artifact-1379065840/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 08:09:35 +0000 UTC FinishedAt: 2026-08-31 08:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 08:09:35 +0000 UTC FinishedAt: 2026-08-31 08:28:41 +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:*b7b095ce-9a82-4f4a-9abb-e286dfb857eb,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-workflow8z9cr/series-workflow8z9cr-convert-artifact-1379065840/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": "b8467efb-a9d2-4176-b6c9-3c6d18b9562e", "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-workflow8z9cr/series-workflow8z9cr-build-action-3972786934/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 08:09:35 +0000 UTC FinishedAt: 2026-08-31 08:28:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b7b095ce-9a82-4f4a-9abb-e286dfb857eb,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-workflow8z9cr/series-workflow8z9cr-convert-artifact-1379065840/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": "b8467efb-a9d2-4176-b6c9-3c6d18b9562e", "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-workflow8z9cr/series-workflow8z9cr-build-action-3972786934/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 08:28:41 +0000 UTC FinishedAt: 2026-08-31 08:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 08:28:41 +0000 UTC FinishedAt: 2026-08-31 08:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 08:28:41 +0000 UTC FinishedAt: 2026-08-31 08:29:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 08:28:41 +0000 UTC FinishedAt: 2026-08-31 08:28:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8z9cr/series-workflow8z9cr-convert-artifact-210079191/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 08:29:04 +0000 UTC FinishedAt: 2026-08-31 08:30:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 08:29:04 +0000 UTC FinishedAt: 2026-08-31 08:30:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b8467efb-a9d2-4176-b6c9-3c6d18b9562e,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-workflow8z9cr/series-workflow8z9cr-build-action-3972786934/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-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 08:30:45 +0000 UTC FinishedAt: 2026-08-31 08:30:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 08:30:45 +0000 UTC FinishedAt: 2026-08-31 08:30:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 08:30:45 +0000 UTC FinishedAt: 2026-08-31 08:50:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 08:30:45 +0000 UTC FinishedAt: 2026-08-31 08:50:07 +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:*b7b095ce-9a82-4f4a-9abb-e286dfb857eb,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-workflow8z9cr/series-workflow8z9cr-convert-artifact-210079191/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": "ef0b0fbd-24af-410c-8a12-4f8dcc83b2da", "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-workflow8z9cr/series-workflow8z9cr-build-action-3446146331/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 08:30:45 +0000 UTC FinishedAt: 2026-08-31 08:49:57 +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:*b7b095ce-9a82-4f4a-9abb-e286dfb857eb,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-workflow8z9cr/series-workflow8z9cr-convert-artifact-210079191/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": "ef0b0fbd-24af-410c-8a12-4f8dcc83b2da", "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-workflow8z9cr/series-workflow8z9cr-build-action-3446146331/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 08:50:07 +0000 UTC FinishedAt: 2026-08-31 08:50:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 08:50:07 +0000 UTC FinishedAt: 2026-08-31 08:50:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 08:50:07 +0000 UTC FinishedAt: 2026-08-31 08:52:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 08:50:07 +0000 UTC FinishedAt: 2026-08-31 08:51:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ef0b0fbd-24af-410c-8a12-4f8dcc83b2da,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-workflow8z9cr/series-workflow8z9cr-build-action-3446146331/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-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 08:52:04 +0000 UTC FinishedAt: 2026-08-31 11:54:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 08:52:04 +0000 UTC FinishedAt: 2026-08-31 11:54:57 +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":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"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:*b8467efb-a9d2-4176-b6c9-3c6d18b9562e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ef0b0fbd-24af-410c-8a12-4f8dcc83b2da,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-workflow8z9cr/series-workflow8z9cr-build-action-3972786934/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-workflow8z9cr/series-workflow8z9cr-build-action-3446146331/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 08:52:04 +0000 UTC FinishedAt: 2026-08-31 08:52:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 08:52:04 +0000 UTC FinishedAt: 2026-08-31 08:52:11 +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":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"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-workflow8z9cr/series-workflow8z9cr-convert-artifact-399495568/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 08:52:04 +0000 UTC FinishedAt: 2026-08-31 08:52:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 08:52:04 +0000 UTC FinishedAt: 2026-08-31 08:52:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 08:52:05 +0000 UTC FinishedAt: 2026-08-31 08:52:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 08:52:15 +0000 UTC FinishedAt: 2026-08-31 11:54:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z9cr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["packet_sendmsg","packet_sendmsg_spkt","packet_snd","tpacket_snd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PACKET","VLAN_8021Q"],"series_id":"9000a737-e212-4d64-9e1e-b17a5cd6f3a4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 08:52:15 +0000 UTC FinishedAt: 2026-08-31 11:54:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b8467efb-a9d2-4176-b6c9-3c6d18b9562e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ef0b0fbd-24af-410c-8a12-4f8dcc83b2da,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-workflow8z9cr/series-workflow8z9cr-build-action-3972786934/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-workflow8z9cr/series-workflow8z9cr-build-action-3446146331/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-workflow8z9cr/series-workflow8z9cr-convert-artifact-399495568/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}