Name: series-workflowq26sj Phase: Succeeded StartedAt: 2026-09-09 01:49:43 +0000 UTC FinishedAt: 2026-09-09 06:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[0] Phase: Succeeded StartedAt: 2026-09-09 01:49:43 +0000 UTC FinishedAt: 2026-09-09 02:39:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 01:49:43 +0000 UTC FinishedAt: 2026-09-09 02:39:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e2573085497807b551324de20d368127602151ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e2573085497807b551324de20d368127602151ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "b646945b-f87e-41bb-829b-c27f09eae19c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtnl_dump_mcaddr", "rtnl_dump_mcaddr_dev", "rtnl_valid_dump_mcaddr_req", "rtnl_fill_mcaddr" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKEFGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgbmV0bGluay4gXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFx1MDAyNiBJbmZvLWxlYWtzIChLTVNBTik6IEFsbCBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSBpbiBuZXRsaW5rIHJlc3BvbnNlcyBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGBzdHJ1Y3QgaWZhZGRybXNnYCBoZWFkZXIgaGFzIGEgOC1ieXRlIGxheW91dCB3aXRob3V0IGludGVybmFsIHBhZGRpbmcgaG9sZXMsIGFuZCBhbGwgZmllbGRzIChgaWZhX2ZhbWlseWAsIGBpZmFfcHJlZml4bGVuYCwgYGlmYV9mbGFnc2AsIGBpZmFfc2NvcGVgLCBgaWZhX2luZGV4YCkgYXJlIGV4cGxpY2l0bHkgc2V0LiBUaGUgbmV0bGluayBhdHRyaWJ1dGVzIChgSUZBX01VTFRJQ0FTVGAgYW5kIGBJRkFfTUNfVVNFUlNgKSBhcmUgYWRkZWQgd2l0aCBgbmxhX3B1dGAgLyBgbmxhX3B1dF91MzJgIHdoaWNoIHplcm8gYW55IHRyYWlsaW5nIGF0dHJpYnV0ZSBhbGlnbm1lbnQgcGFkZGluZy4gQWRkcmVzcyBieXRlcyBpbiBgaGEtXHUwMDNlYWRkcmAgYXJlIGluaXRpYWxpemVkIGR1cmluZyBoYXJkd2FyZSBhZGRyZXNzIGNyZWF0aW9uIHVwIHRvIGBkZXYtXHUwMDNlYWRkcl9sZW5gLiBDb250cm9sIGZsb3cgdmFyaWFibGVzIChzdWNoIGFzIGR1bXAgYGN0eGAgYW5kIGBpZmluZGV4YCkgYXJlIGVpdGhlciB6ZXJvZWQgYnkgdGhlIG5ldGxpbmsgc3Vic3lzdGVtIG9yIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG4tIE1lbW9yeSBTYWZldHkgXHUwMDI2IENvbmN1cnJlbmN5IChLQVNBTi9MT0NLREVQKTogVGhlIGNoYW5nZXMgaW52b2x2ZSBSQ1UgbG9va3VwcywgbmV0bGluayBkdW1wIGNhbGxiYWNrcywgYW5kIGRldmljZSBhZGRyZXNzIGxpc3QgbG9ja3MgKGBuZXRpZl9hZGRyX2xvY2tfYmhgKSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgY29uZmlndXJhdGlvbnMuXG5cblRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXRsaW5rIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgLyBSVE1fR0VUTVVMVElDQVNUKSBpbiBydG5ldGxpbmsuIFRoZSBuZXdseSBhZGRlZCBjb2RlIHZhbGlkYXRlcyB1c2VyIGR1bXAgcmVxdWVzdHMsIHRyYXZlcnNlcyBkZXZpY2UgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgdW5kZXIgbG9jaywgYW5kIHNlcmlhbGl6ZXMgcnRuZXRsaW5rIGF0dHJpYnV0ZXMsIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB2aWEgbmV0bGluayBzb2NrZXQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI5ZjIyOWFjOGU2NmRiNDc0NzFhZTk5NzA5NTE4OWM4OTU0NmEyMzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDAyOjM3OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5pbmRleCAwZWNiZDI0Yzg5MGM2Li4yYTIzMTBjYjBkZjAxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuQEAgLTE2OCw3ICYjNDM7MTY4LDEyIEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZmFkZHItYWxsXG4gICAgIC1cbiAgICAgICBuYW1lOiBnZXRtdWx0aWNhc3Rcbi0gICAgICBkb2M6IEdldCAvIGR1bXAgSVB2NC9JUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMuXG4mIzQzOyAgICAgIGRvYzogfFxuJiM0MzsgICAgICAgIEdldCAvIGR1bXAgbXVsdGljYXN0IGFkZHJlc3Nlcy4gaWZhLWZhbWlseSBzZWxlY3RzIHRoZSBhZGRyZXNzXG4mIzQzOyAgICAgICAgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2IGZvciB0aGUgSVAgbXVsdGljYXN0IGdyb3VwcyBqb2luZWQgb25cbiYjNDM7ICAgICAgICBhIGRldmljZSwgQUZfUEFDS0VUIGZvciB0aGUgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIHRoZVxuJiM0MzsgICAgICAgIGRldmljZSBmaWx0ZXIuIExpbmstbGF5ZXIgZW50cmllcyBhZGRlZCB3aXRoIFNJT0NBRERNVUxUSSBhcmVcbiYjNDM7ICAgICAgICByZXBvcnRlZCB3aXRoIHRoZSBwZXJtYW5lbnQgZmxhZyBzZXQuXG4gICAgICAgYXR0cmlidXRlLXNldDogYWRkci1hdHRyc1xuICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnXG4gICAgICAgZG86XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggODFjNWE2MTA0ZGVhMS4uYjJmZWJkYjY5MTVlOCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTQ1NjYsNiAmIzQzOzQ1NjYsMTMzIEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbiA/IDogcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhLCB1MzIgcG9ydGlkLFxuJiM0MztcdFx0XHQgICAgdTMyIHNlcSwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuJiM0MztcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuJiM0MztcbiYjNDM7XHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLFxuJiM0MztcdFx0XHRmbGFncyk7XG4mIzQzO1x0aWYgKCFubGgpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRpZm0gPSBubG1zZ19kYXRhKG5saCk7XG4mIzQzO1x0aWZtLVx1MDAzZWlmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7XG4mIzQzO1x0aWZtLVx1MDAzZWlmYV9wcmVmaXhsZW4gPSAwO1xuJiM0MztcdGlmbS1cdTAwM2VpZmFfZmxhZ3MgPSBoYS1cdTAwM2VnbG9iYWxfdXNlID8gSUZBX0ZfUEVSTUFORU5UIDogMDtcbiYjNDM7XHRpZm0tXHUwMDNlaWZhX3Njb3BlID0gUlRfU0NPUEVfTElOSztcbiYjNDM7XHRpZm0tXHUwMDNlaWZhX2luZGV4ID0gZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1xuJiM0MztcdGlmIChubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVx1MDAzZWFkZHJfbGVuLCBoYS1cdTAwM2VhZGRyKSB8fFxuJiM0MztcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXHUwMDNlcmVmY291bnQpKSB7XG4mIzQzO1x0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuJiM0MztcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5sbXNnX2VuZChza2IsIG5saCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuJiM0MztcdGludCBhZGRyX2lkeCA9IDA7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xuJiM0MztcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHtcbiYjNDM7XHRcdGlmIChhZGRyX2lkeCBcdTAwM2MgKnNfYWRkcl9pZHgpIHtcbiYjNDM7XHRcdFx0YWRkcl9pZHgmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVyciA9IHJ0bmxfZmlsbF9tY2FkZHIoc2tiLCBkZXYsIGhhLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuJiM0MztcdFx0XHRcdCAgICAgICBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncyk7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGFkZHJfaWR4JiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcbiYjNDM7XG4mIzQzO1x0KnNfYWRkcl9pZHggPSBlcnIgXHUwMDNjIDAgPyBhZGRyX2lkeCA6IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgIGludCAqcGlmaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XG4mIzQzO1xuJiM0MztcdGlmbSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKmlmbSkpO1xuJiM0MztcdGlmICghaWZtKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtJbnZhbGlkIGhlYWRlciBmb3IgbXVsdGljYXN0IGR1bXAgcmVxdWVzdFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXHUwMDNlaWZhX2ZsYWdzIHx8IGlmbS1cdTAwM2VpZmFfc2NvcGUpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O0ludmFsaWQgdmFsdWVzIGluIG11bHRpY2FzdCBkdW1wIGhlYWRlclwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChubG1zZ19hdHRybGVuKG5saCwgc2l6ZW9mKCppZm0pKSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7SW52YWxpZCBkYXRhIGFmdGVyIG11bHRpY2FzdCBkdW1wIGhlYWRlclwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpwaWZpbmRleCA9IGlmbS1cdTAwM2VpZmFfaW5kZXg7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuJiM0MztcdFx0aW50IGFkZHJfaWR4O1xuJiM0MztcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4mIzQzO1x0aW50IGlmaW5kZXg7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItXHUwMDNlbmxoLCBjYi1cdTAwM2VleHRhY2ssIFx1MDAyNmlmaW5kZXgpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmIChpZmluZGV4KSB7XG4mIzQzO1x0XHRjYi1cdTAwM2VhbnN3ZXJfZmxhZ3MgfD0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcbiYjNDM7XHRcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4mIzQzO1x0XHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIGlmaW5kZXgpO1xuJiM0MztcdFx0aWYgKCFkZXYpIHtcbiYjNDM7XHRcdFx0ZXJyID0gLUVOT0RFVjtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbiYjNDM7XHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LFxuJiM0MztcdFx0XHRcdFx0ICAgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztvdXQ6XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3Qgc2tfYnVmZiAqcnRtc2dfaWZpbmZvX2J1aWxkX3NrYihpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLFxuIFx0XHRcdFx0ICAgICAgIHUzMiBldmVudCwgZ2ZwX3QgZmxhZ3MsIGludCAqbmV3X25zaWQsXG5AQCAtNzI1MSw2ICYjNDM7NzM3OCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XG4gXHR7Lm1zZ3R5cGUgPSBSVE1fU0VUU1RBVFMsIC5kb2l0ID0gcnRubF9zdGF0c19zZXR9LFxuIFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LFxuIFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxuJiM0MztcdHsucHJvdG9jb2wgPSBQRl9QQUNLRVQsIC5tc2d0eXBlID0gUlRNX0dFVE1VTFRJQ0FTVCxcbiYjNDM7XHQgLmR1bXBpdCA9IHJ0bmxfZHVtcF9tY2FkZHIsIC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssXG4gXHQgLmR1bXBpdCA9IHJ0bmxfYnJpZGdlX2dldGxpbmt9LFxuIFx0ey5wcm90b2NvbCA9IFBGX0JSSURHRSwgLm1zZ3R5cGUgPSBSVE1fREVMTElOSyxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggNWNjM2ViZGNmMDhkZS4uY2VhNjM2ZjEwYWViNiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC0xLDE3ICYjNDM7MSwyMSBAQFxuICMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4mIzQzO2ltcG9ydCBlcnJub1xuIGltcG9ydCBzb2NrZXRcbiBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4tZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9pbiwga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBkZWZlclxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1xceGUwXFx4MDBcXHgwMFxceDAxJiMzOTtcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYiYjMzk7XFx4ZWZcXHgwMVxceDAxXFx4MDEmIzM5O1xuIElQVjZfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCYjMzk7ZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMmIzM5OylcbiYjNDM7RVRIX0FMTF9IT1NUU19NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCYjMzk7MDEwMDVlMDAwMDAxJiMzOTspXG4mIzQzO0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAmIzM5OzAxOjAwOjVlOjAxOjAxOjAxJiMzOTtcbiYjNDM7RVRIX1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleChFVEhfVEVTVF9NVUxUSUNBU1RfU1RSLnJlcGxhY2UoJiMzOTs6JiMzOTssICYjMzk7JiMzOTspKVxuIFxuIFxuIGRlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KTpcbkBAIC0xMDUsNiAmIzQzOzEwOSw1MiBAQCBkZWYgZHVtcF9tY2FkZHI2X2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXG4gXG4gXG4mIzQzO2RlZiBkdW1wX21jYWRkcl9sMl9jaGVjaygpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxuJiM0MzsgICAgZHVtcDogdGhlIGlmYS1pbmRleCBmaWx0ZXIsIG1jLXVzZXJzIGFuZCB0aGUgcGVybWFuZW50IGZsYWcuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4mIzQzOyAgICAgICAgZm9yIGlmbmFtZSBpbiAoXCYjMzQ7ZHVtbXkxXCYjMzQ7LCBcJiMzNDtkdW1teTJcJiMzNDspOlxuJiM0MzsgICAgICAgICAgICBpcChmXCYjMzQ7bGluayBhZGQgbmFtZSB7aWZuYW1lfSB0eXBlIGR1bW15XCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBpcChmXCYjMzQ7bGluayBzZXQge2lmbmFtZX0gdXBcJiMzNDspXG4mIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleChcJiMzNDtkdW1teTFcJiMzNDspXG4mIzQzOyAgICAgICAgaXAoZlwmIzM0O21hZGRyIGFkZCB7RVRIX1RFU1RfTVVMVElDQVNUX1NUUn0gZGV2IGR1bW15MVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcbiYjNDM7ICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuJiM0MzsgICAgICAgICAgICAgICAge1wmIzM0O2lmYS1mYW1pbHlcJiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsIFwmIzM0O2lmYS1pbmRleFwmIzM0OzogZGV2X2lkeH0sXG4mIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXG4mIzQzOyAgICAgICAgZXhjZXB0IE5sRXJyb3IgYXMgZTpcbiYjNDM7ICAgICAgICAgICAgaWYgZS5lcnJvciA9PSBlcnJuby5FT1BOT1RTVVBQOlxuJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXBcJiMzNDspXG4mIzQzOyAgICAgICAgICAgIHJhaXNlXG4mIzQzO1xuJiM0MzsgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcbiYjNDM7ICAgICAgICBrc2Z0X2VxKHthZGRyWyYjMzk7aWZhLWluZGV4JiMzOTtdIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O0FGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCBpZ25vcmVkIGlmYS1pbmRleCBmaWx0ZXJcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgIGVudHJpZXMgPSB7YWRkclsmIzM5O211bHRpY2FzdCYjMzk7XTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9XG4mIzQzO1xuJiM0MzsgICAgICAgICMgQnJpbmdpbmcgYW4gRXRoZXJuZXQgZGV2aWNlIHVwIGpvaW5zIDIyNC4wLjAuMSwgd2hpY2ggbWFwc1xuJiM0MzsgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC5cbiYjNDM7ICAgICAgICBrc2Z0X2luKEVUSF9BTExfSE9TVFNfTVVMVElDQVNULCBlbnRyaWVzLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3NcJiMzNDspXG4mIzQzOyAgICAgICAga3NmdF9ub3RfaW4oJiMzOTtwZXJtYW5lbnQmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBlbnRyaWVzW0VUSF9BTExfSE9TVFNfTVVMVElDQVNUXVsmIzM5O2lmYS1mbGFncyYjMzk7XSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtwcm90b2NvbCBlbnRyeSBpcyBwZXJtYW5lbnRcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgIGtzZnRfaW4oRVRIX1RFU1RfTVVMVElDQVNULCBlbnRyaWVzLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXCYjMzQ7KVxuJiM0MzsgICAgICAgIGtzZnRfZXEoZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWyYjMzk7bWMtdXNlcnMmIzM5O10sIDEsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDt1bmV4cGVjdGVkIG1jLXVzZXJzIGZvciB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcJiMzNDspXG4mIzQzOyAgICAgICAga3NmdF9pbigmIzM5O3Blcm1hbmVudCYjMzk7LCBlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJiMzOTtpZmEtZmxhZ3MmIzM5O10sXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IHBlcm1hbmVudFwmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiAgICAgQ29uZmlndXJlIGFuIGludGVyZmFjZSBhbmQgc2V0IGlwdjQtZGV2Y29uZiB2YWx1ZXMgdGhyb3VnaCBuZXRsaW5rXG5AQCAtMzE1LDcgJiM0MzszNjUsOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbiBcbiBcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4mIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssXG4mIzQzOyAgICAgICAgICAgICAgaXB2NF9kZXZjb25mX25vdGlmeSxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldGxpbmsgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCAvIFJUTV9HRVRNVUxUSUNBU1QpIGluIHJ0bmV0bGluay4gVGhlIG5ld2x5IGFkZGVkIGNvZGUgdmFsaWRhdGVzIHVzZXIgZHVtcCByZXF1ZXN0cywgdHJhdmVyc2VzIGRldmljZSBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyB1bmRlciBsb2NrLCBhbmQgc2VyaWFsaXplcyBydG5ldGxpbmsgYXR0cmlidXRlcywgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHNvY2tldCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjlmMjI5YWM4ZTY2ZGI0NzQ3MWFlOTk3MDk1MTg5Yzg5NTQ2YTIzNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDI6Mzc6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbAppbmRleCAwZWNiZDI0Yzg5MGM2Li4yYTIzMTBjYjBkZjAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwKQEAgLTE2OCw3ICYjNDM7MTY4LDEyIEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGwKICAgICAtCiAgICAgICBuYW1lOiBnZXRtdWx0aWNhc3QKLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy4KJiM0MzsgICAgICBkb2M6IHwKJiM0MzsgICAgICAgIEdldCAvIGR1bXAgbXVsdGljYXN0IGFkZHJlc3Nlcy4gaWZhLWZhbWlseSBzZWxlY3RzIHRoZSBhZGRyZXNzCiYjNDM7ICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvbgomIzQzOyAgICAgICAgYSBkZXZpY2UsIEFGX1BBQ0tFVCBmb3IgdGhlIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiB0aGUKJiM0MzsgICAgICAgIGRldmljZSBmaWx0ZXIuIExpbmstbGF5ZXIgZW50cmllcyBhZGRlZCB3aXRoIFNJT0NBRERNVUxUSSBhcmUKJiM0MzsgICAgICAgIHJlcG9ydGVkIHdpdGggdGhlIHBlcm1hbmVudCBmbGFnIHNldC4KICAgICAgIGF0dHJpYnV0ZS1zZXQ6IGFkZHItYXR0cnMKICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnCiAgICAgICBkbzoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggODFjNWE2MTA0ZGVhMS4uYjJmZWJkYjY5MTVlOCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTQ1NjYsNiAmIzQzOzQ1NjYsMTMzIEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJcmV0dXJuIHNrYi0mZ3Q7bGVuID8gOiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCwKJiM0MzsJCQkgICAgdTMyIHNlcSwgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKJiM0MzsKJiM0MzsJbmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSwKJiM0MzsJCQlmbGFncyk7CiYjNDM7CWlmICghbmxoKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJaWZtID0gbmxtc2dfZGF0YShubGgpOwomIzQzOwlpZm0tJmd0O2lmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7CiYjNDM7CWlmbS0mZ3Q7aWZhX3ByZWZpeGxlbiA9IDA7CiYjNDM7CWlmbS0mZ3Q7aWZhX2ZsYWdzID0gaGEtJmd0O2dsb2JhbF91c2UgPyBJRkFfRl9QRVJNQU5FTlQgOiAwOwomIzQzOwlpZm0tJmd0O2lmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7CiYjNDM7CWlmbS0mZ3Q7aWZhX2luZGV4ID0gZGV2LSZndDtpZmluZGV4OwomIzQzOwomIzQzOwlpZiAobmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi0mZ3Q7YWRkcl9sZW4sIGhhLSZndDthZGRyKSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLSZndDtyZWZjb3VudCkpIHsKJiM0MzsJCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5sbXNnX2VuZChza2IsIG5saCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50ICpzX2FkZHJfaWR4LAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwomIzQzOwlpbnQgYWRkcl9pZHggPSAwOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJbmV0aWZfYWRkcl9sb2NrX2JoKGRldik7CiYjNDM7CW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHsKJiM0MzsJCWlmIChhZGRyX2lkeCAmbHQ7ICpzX2FkZHJfaWR4KSB7CiYjNDM7CQkJYWRkcl9pZHgmIzQzOyYjNDM7OwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItJmd0O3NrYikucG9ydGlkLAomIzQzOwkJCQkgICAgICAgY2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncyk7CiYjNDM7CQlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCQlicmVhazsKJiM0MzsJCWFkZHJfaWR4JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwluZXRpZl9hZGRyX3VubG9ja19iaChkZXYpOwomIzQzOwomIzQzOwkqc19hZGRyX2lkeCA9IGVyciAmbHQ7IDAgPyBhZGRyX2lkeCA6IDA7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywKJiM0MzsJCQkJICAgICAgaW50ICpwaWZpbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZmFkZHJtc2cgKmlmbTsKJiM0MzsKJiM0MzsJaWZtID0gbmxtc2dfcGF5bG9hZChubGgsIHNpemVvZigqaWZtKSk7CiYjNDM7CWlmICghaWZtKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7SW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3QmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaWZtLSZndDtpZmFfcHJlZml4bGVuIHx8IGlmbS0mZ3Q7aWZhX2ZsYWdzIHx8IGlmbS0mZ3Q7aWZhX3Njb3BlKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7SW52YWxpZCB2YWx1ZXMgaW4gbXVsdGljYXN0IGR1bXAgaGVhZGVyJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG5sbXNnX2F0dHJsZW4obmxoLCBzaXplb2YoKmlmbSkpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7SW52YWxpZCBkYXRhIGFmdGVyIG11bHRpY2FzdCBkdW1wIGhlYWRlciYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpwaWZpbmRleCA9IGlmbS0mZ3Q7aWZhX2luZGV4OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgaWZpbmRleDsKJiM0MzsJCWludCBhZGRyX2lkeDsKJiM0MzsJfSAqY3R4ID0gKHZvaWQgKiljYi0mZ3Q7Y3R4OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwomIzQzOwlpbnQgaWZpbmRleDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItJmd0O25saCwgY2ItJmd0O2V4dGFjaywgJmFtcDtpZmluZGV4KTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CiYjNDM7CWlmIChpZmluZGV4KSB7CiYjNDM7CQljYi0mZ3Q7YW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CiYjNDM7CQlmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEOwomIzQzOwkJZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBpZmluZGV4KTsKJiM0MzsJCWlmICghZGV2KSB7CiYjNDM7CQkJZXJyID0gLUVOT0RFVjsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCWVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgJmFtcDtjdHgtJmd0O2FkZHJfaWR4LCBmbGFncyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LSZndDtpZmluZGV4KSB7CiYjNDM7CQllcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsICZhbXA7Y3R4LSZndDthZGRyX2lkeCwKJiM0MzsJCQkJCSAgIGZsYWdzKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7b3V0OgomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3Qgc2tfYnVmZiAqcnRtc2dfaWZpbmZvX2J1aWxkX3NrYihpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSwKIAkJCQkgICAgICAgdTMyIGV2ZW50LCBnZnBfdCBmbGFncywgaW50ICpuZXdfbnNpZCwKQEAgLTcyNTEsNiAmIzQzOzczNzgsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPQogCXsubXNndHlwZSA9IFJUTV9TRVRTVEFUUywgLmRvaXQgPSBydG5sX3N0YXRzX3NldH0sCiAJey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LAogCXsubXNndHlwZSA9IFJUTV9ERUxMSU5LUFJPUCwgLmRvaXQgPSBydG5sX2RlbGxpbmtwcm9wfSwKJiM0MzsJey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULAomIzQzOwkgLmR1bXBpdCA9IHJ0bmxfZHVtcF9tY2FkZHIsIC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSwKIAl7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLAogCSAuZHVtcGl0ID0gcnRubF9icmlkZ2VfZ2V0bGlua30sCiAJey5wcm90b2NvbCA9IFBGX0JSSURHRSwgLm1zZ3R5cGUgPSBSVE1fREVMTElOSywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CmluZGV4IDVjYzNlYmRjZjA4ZGUuLmNlYTYzNmYxMGFlYjYgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQpAQCAtMSwxNyAmIzQzOzEsMjEgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIAomIzQzO2ltcG9ydCBlcnJubwogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHRpbWUKIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXgKLWZyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZQotZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X2luLCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZQomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIE5sRXJyb3IsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHkKIGZyb20gbGliLnB5IGltcG9ydCBkZWZlcgogCiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtceGUwXHgwMFx4MDBceDAxJiMzOTsKIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJiMzOTtceGVmXHgwMVx4MDFceDAxJiMzOTsKIElQVjZfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCYjMzk7ZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMmIzM5OykKJiM0MztFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzOTswMTAwNWUwMDAwMDEmIzM5OykKJiM0MztFVEhfVEVTVF9NVUxUSUNBU1RfU1RSID0gJiMzOTswMTowMDo1ZTowMTowMTowMSYjMzk7CiYjNDM7RVRIX1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleChFVEhfVEVTVF9NVUxUSUNBU1RfU1RSLnJlcGxhY2UoJiMzOTs6JiMzOTssICYjMzk7JiMzOTspKQogCiAKIGRlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KToKQEAgLTEwNSw2ICYjNDM7MTA5LDUyIEBAIGRlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtJmd0OyBOb25lOgogICAgICAgICAgICAgICAgIHMyLmNsb3NlKCkKIAogCiYjNDM7ZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIFZlcmlmeSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gYW4gQUZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QKJiM0MzsgICAgZHVtcDogdGhlIGlmYS1pbmRleCBmaWx0ZXIsIG1jLXVzZXJzIGFuZCB0aGUgcGVybWFuZW50IGZsYWcuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBmb3IgaWZuYW1lIGluICgmIzM0O2R1bW15MSYjMzQ7LCAmIzM0O2R1bW15MiYjMzQ7KToKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXkmIzM0OykKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIHNldCB7aWZuYW1lfSB1cCYjMzQ7KQomIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM0O2R1bW15MSYjMzQ7KQomIzQzOyAgICAgICAgaXAoZiYjMzQ7bWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KAomIzQzOyAgICAgICAgICAgICAgICB7JiMzNDtpZmEtZmFtaWx5JiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsICYjMzQ7aWZhLWluZGV4JiMzNDs6IGRldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpCiYjNDM7ICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOgomIzQzOyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDoKJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7a2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wJiMzNDspCiYjNDM7ICAgICAgICAgICAgcmFpc2UKJiM0MzsKJiM0MzsgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWQKJiM0MzsgICAgICAgIGtzZnRfZXEoe2FkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10gZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwge2Rldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O0FGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCBpZ25vcmVkIGlmYS1pbmRleCBmaWx0ZXImIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIGVudHJpZXMgPSB7YWRkclsmIzM5O211bHRpY2FzdCYjMzk7XTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9CiYjNDM7CiYjNDM7ICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHMKJiM0MzsgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC4KJiM0MzsgICAgICAgIGtzZnRfaW4oRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QsIGVudHJpZXMsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3MmIzM0OykKJiM0MzsgICAgICAgIGtzZnRfbm90X2luKCYjMzk7cGVybWFuZW50JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICBlbnRyaWVzW0VUSF9BTExfSE9TVFNfTVVMVElDQVNUXVsmIzM5O2lmYS1mbGFncyYjMzk7XSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7cHJvdG9jb2wgZW50cnkgaXMgcGVybWFuZW50JiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBrc2Z0X2luKEVUSF9URVNUX01VTFRJQ0FTVCwgZW50cmllcywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3MmIzM0OykKJiM0MzsgICAgICAgIGtzZnRfZXEoZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWyYjMzk7bWMtdXNlcnMmIzM5O10sIDEsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7dW5leHBlY3RlZCBtYy11c2VycyBmb3IgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzJiMzNDspCiYjNDM7ICAgICAgICBrc2Z0X2luKCYjMzk7cGVybWFuZW50JiMzOTssIGVudHJpZXNbRVRIX1RFU1RfTVVMVElDQVNUXVsmIzM5O2lmYS1mbGFncyYjMzk7XSwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IHBlcm1hbmVudCYjMzQ7KQomIzQzOwomIzQzOwogZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtJmd0OyBOb25lOgogICAgICYjMzQ7JiMzNDsmIzM0OwogICAgIENvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgYW5kIHNldCBpcHY0LWRldmNvbmYgdmFsdWVzIHRocm91Z2ggbmV0bGluawpAQCAtMzE1LDcgJiM0MzszNjUsOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC0mZ3Q7IE5vbmU6CiAKIAogZGVmIG1haW4oKSAtJmd0OyBOb25lOgotICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LAomIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssCiYjNDM7ICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3biwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMDIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBhbmQgZmlndXJlIG91dCB0aGUgYmVzdCBmdXp6aW5nIHN0cmF0ZWd5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgdmFsdWUgaW4gdGFyZ2V0aW5nIGl0LiBUaGUgZGlmZiBzaG93cyBtb2RpZmljYXRpb25zIHRvIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sYCwgYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5YC4gVGhlIGRvY3VtZW50YXRpb24gY2hhbmdlIGlzIGdlbmVyYWxseSBnb29kIG5ld3M7IGl0IG1lYW5zIHNvbWVvbmUmIzM5O3MgdGhpbmtpbmcgYWJvdXQgdGhpcyBzdHVmZiBmb3JtYWxseS4gVGhlIGBydG5ldGxpbmsuY2AgY2hhbmdlIGlzIHRoZSByZWFsIG1lYXQsIHRob3VnaC4KCkxvb2tpbmcgY2xvc2VyIGF0IGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIEkgc2VlIGEgY2x1c3RlciBvZiBuZXcgZnVuY3Rpb25zOiBgcnRubF9maWxsX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcWAsIGFuZCBgcnRubF9kdW1wX21jYWRkcmAuICBBaCwgdGhpcyBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGltcGxlbWVudGluZyBhIG5ldyBmZWF0dXJlOiBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyB2aWEgcnRuZXRsaW5rICh1c2luZyBgUEZfUEFDS0VUYCBhbmQgYFJUTV9HRVRNVUxUSUNBU1RgKS4gSW1wb3J0YW50bHksIHRoZXJlJiMzOTtzIGEgbmV3IGhhbmRsZXIgaW4gYHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc2AgZm9yIHRoaXMgc3BlY2lmaWMgbWVzc2FnZSB0eXBlLgoKVGhlIGltbWVkaWF0ZSBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gYSB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnQgbGlrZSBzeXprYWxsZXI/ICBUaGUgYW5zd2VyLCB0aGFua2Z1bGx5LCBzZWVtcyB0byBiZSB5ZXMhIFJ0bmV0bGluayBpcyBwYXJ0IG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGV4cG9zZWQgdGhyb3VnaCBuZXRsaW5rIHNvY2tldHMgKGBBRl9ORVRMSU5LYCwgYE5FVExJTktfUk9VVEVgKS4gU3l6a2FsbGVyIGFscmVhZHkgdW5kZXJzdGFuZHMgbmV0bGluayBhbmQgY2FuIGdlbmVyYXRlIHJ0bmV0bGluayBtZXNzYWdlcy4gVGhpcyBpcyBnb29kIG5ld3M7IGl0IG1lYW5zIHdlIGNhbiBsaWtlbHkgaGl0IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBuZWVkaW5nIHRvIGJ1aWxkIGFueSBjdXN0b20gZHJpdmVycyBvciBzZXQgdXAgZXhvdGljIGVudmlyb25tZW50cy4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIHJlcXVpcmVzIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlLiBJJiMzOTtsbCBzZWFyY2ggdGhyb3VnaCBLY29uZmlnIGFuZCB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCBmb3IgZWl0aGVyICYjMzQ7cnRuZXRsaW5rLmMmIzM0OyBvciAmIzM0O05FVExJTktfUk9VVEUmIzM0OyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBidWlsZC10aW1lIG9wdGlvbnMgd2UgbmVlZCB0byB3b3JyeSBhYm91dC4gVGhlIGdvYWwgaXMgdG8gbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlICptaW5pbXVtKiBjb25maWd1cmF0aW9ucyB0byBhY2hpZXZlIGNvbXBsZXRlIGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmV0bGluay5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZToxMzpcdFx0XHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXHRcdFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNjMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFJUTkVUTElOSyBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCBzbyBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgIGlzIGRlZmluaXRlbHkgc2hvd2luZyB1cCBpbiB0aGUgYnVpbGQgYXMgcGFydCBvZiBgbmV0L2NvcmVgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gU2luY2UgYENPTkZJR19ORVRgIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCB0aGVzZSBkYXlzLCBpdCBzaG91bGQgYmUgYmFrZWQgaW4uIFRoZSBxdWVzdGlvbiBpcywgaG93ICpleGFjdGx5KiBpcyBpdCBiZWluZyBwdWxsZWQgaW50byB0aGUgb2JqZWN0IGZpbGVzPyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgZWl0aGVyIGBuZXQvS2NvbmZpZ2AgKHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGJhc2VkIG9uIGEgc2VwYXJhdGUgS2NvbmZpZyBvcHRpb24pIG9yIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIGl0c2VsZi4gVGhhdCBNYWtlZmlsZSB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgZGlyZWN0IGFuc3dlciBhcyB0byB3aHkgYHJ0bmV0bGluay5jYCBpcyBiZWluZyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUYCBpcyB0cnVlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBsb29rIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotXFwkXFwoQ09ORklHX05FVFxcKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBkZWxpdmVyZWQgYXMgaWYgaXQmIzM5O3MgY29taW5nIGZyb20gbWU6CgoqKkRpdmluZyBpbnRvIHRoZSBgbmV0L01ha2VmaWxlYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBzdGFydGVkLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoaXMgcHJvYmxlbS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgYG5ldC9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBidWlsZCBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgbmV0d29ya2luZyBjb21wb25lbnRzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uYWwgcnVsZXMsIHZhcmlhYmxlcywgYW5kIHBvdGVudGlhbGx5IGluY2x1ZGUgc3RhdGVtZW50cyB0aGF0IGdvdmVybiBob3cgdGhlc2UgbmV0d29yay1yZWxhdGVkIG9iamVjdHMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQuIEkgd2FudCB0byBxdWlja2x5IGdhaW4gYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG5ldHdvcmsgbW9kdWxlIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGFuZCwgaW4gdHVybiwgaG93IGl0JiMzOTtzIHN0cnVjdHVyZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBob3BpbmcgdG8gZmluZCBjbHVlcyBhYm91dCB3aGF0IHRhcmdldHMgYXJlIGJlaW5nIGJ1aWx0LCB3aGF0IHNvdXJjZSBmaWxlcyBhcmUgaW52b2x2ZWQsIGFuZCBhbnkgc3BlY2lmaWMgY29tcGlsZXIgZmxhZ3Mgb3IgbGlua2VyIG9wdGlvbnMgdGhhdCBhcmUgYmVpbmcgZW1wbG95ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBuZXR3b3JraW5nLlxuICAgNDpcdCNcbiAgIDU6XHQjIDIgU2VwIDIwMDAsIENocmlzdG9waCBIZWxsd2lnIFx1MDAzY2hjaEBpbmZyYWRlYWQub3JnXHUwMDNlXG4gICA2Olx0IyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy5cbiAgIDc6XHQjXG4gICA4Olx0XG4gICA5Olx0b2JqLXlcdFx0XHRcdDo9IGRldnJlcy5vIHNvY2tldC5vIGNvcmUvXG4gIDEwOlx0XG4gIDExOlx0b2JqLSQoQ09ORklHX0NPTVBBVClcdFx0JiM0Mzs9IGNvbXBhdC5vXG4gIDEyOlx0XG4gIDEzOlx0IyBMTEMgaGFzIHRvIGJlIGxpbmtlZCBiZWZvcmUgdGhlIGZpbGVzIGluIG5ldC84MDIvXG4gIDE0Olx0b2JqLSQoQ09ORklHX0xMQylcdFx0JiM0Mzs9IGxsYy9cbiAgMTU6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGV0aGVybmV0LyA4MDIvIHNjaGVkLyBuZXRsaW5rLyBicGYvIGV0aHRvb2wvXG4gIDE2Olx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcdFx0JiM0Mzs9IG5ldGZpbHRlci9cbiAgMTc6XHRvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IGlwdjQvXG4gIDE4Olx0b2JqLSQoQ09ORklHX1RMUylcdFx0JiM0Mzs9IHRscy9cbiAgMTk6XHRvYmotJChDT05GSUdfWEZSTSlcdFx0JiM0Mzs9IHhmcm0vXG4gIDIwOlx0b2JqLSQoQ09ORklHX1VOSVgpXHRcdCYjNDM7PSB1bml4L1xuICAyMTpcdG9iai0kKENPTkZJR19JTkVUX1BTUClcdFx0JiM0Mzs9IHBzcC9cbiAgMjI6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGlwdjYvXG4gIDIzOlx0b2JqLSQoQ09ORklHX1BBQ0tFVClcdFx0JiM0Mzs9IHBhY2tldC9cbiAgMjQ6XHRvYmotJChDT05GSUdfTkVUX0tFWSlcdFx0JiM0Mzs9IGtleS9cbiAgMjU6XHRvYmotJChDT05GSUdfQlJJREdFKVx0XHQmIzQzOz0gYnJpZGdlL1xuICAyNjpcdG9iai0kKENPTkZJR19ORVRfREVWTElOSylcdCYjNDM7PSBkZXZsaW5rL1xuICAyNzpcdG9iai15XHRcdFx0XHQmIzQzOz0gZHNhL1xuICAyODpcdG9iai0kKENPTkZJR19YMjUpXHRcdCYjNDM7PSB4MjUvXG4gIDI5Olx0b2JqLSQoQ09ORklHX0xBUEIpXHRcdCYjNDM7PSBsYXBiL1xuICAzMDpcdG9iai0kKENPTkZJR19DQU4pXHRcdCYjNDM7PSBjYW4vXG4gIDMxOlx0b2JqLSQoQ09ORklHX0JUKVx0XHQmIzQzOz0gYmx1ZXRvb3RoL1xuICAzMjpcdG9iai0kKENPTkZJR19TVU5SUEMpXHRcdCYjNDM7PSBzdW5ycGMvXG4gIDMzOlx0b2JqLSQoQ09ORklHX0FGX1JYUlBDKVx0XHQmIzQzOz0gcnhycGMvXG4gIDM0Olx0b2JqLSQoQ09ORklHX0FGX0tDTSlcdFx0JiM0Mzs9IGtjbS9cbiAgMzU6XHRvYmotJChDT05GSUdfU1RSRUFNX1BBUlNFUilcdCYjNDM7PSBzdHJwYXJzZXIvXG4gIDM2Olx0b2JqLSQoQ09ORklHX0FUTSlcdFx0JiM0Mzs9IGF0bS9cbiAgMzc6XHRvYmotJChDT05GSUdfTDJUUClcdFx0JiM0Mzs9IGwydHAvXG4gIDM4Olx0b2JqLSQoQ09ORklHX1BIT05FVClcdFx0JiM0Mzs9IHBob25ldC9cbiAgMzk6XHRpZm5lcSAoJChDT05GSUdfVkxBTl84MDIxUSksKVxuICA0MDpcdG9iai15XHRcdFx0XHQmIzQzOz0gODAyMXEvXG4gIDQxOlx0ZW5kaWZcbiAgNDI6XHRvYmotJChDT05GSUdfSVBfU0NUUClcdFx0JiM0Mzs9IHNjdHAvXG4gIDQzOlx0b2JqLSQoQ09ORklHX1JEUylcdFx0JiM0Mzs9IHJkcy9cbiAgNDQ6XHRvYmotJChDT05GSUdfV0lSRUxFU1MpXHRcdCYjNDM7PSB3aXJlbGVzcy9cbiAgNDU6XHRvYmotJChDT05GSUdfTUFDODAyMTEpXHRcdCYjNDM7PSBtYWM4MDIxMS9cbiAgNDY6XHRvYmotJChDT05GSUdfVElQQylcdFx0JiM0Mzs9IHRpcGMvXG4gIDQ3Olx0b2JqLSQoQ09ORklHX05FVExBQkVMKVx0XHQmIzQzOz0gbmV0bGFiZWwvXG4gIDQ4Olx0b2JqLSQoQ09ORklHX0lVQ1YpXHRcdCYjNDM7PSBpdWN2L1xuICA0OTpcdG9iai0kKENPTkZJR19TTUMpXHRcdCYjNDM7PSBzbWMvXG4gIDUwOlx0b2JqLSQoQ09ORklHX1JGS0lMTClcdFx0JiM0Mzs9IHJma2lsbC9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDY3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIGNvbnNjaW91c25lc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb2YgYG5ldC9jb3JlL2AqKgoKQWxyaWdodCwgc28gYG5ldC9jb3JlL2AgYWx3YXlzIHNlZW1zIHRvIGJlIGluY2x1ZGVkIHdoZW4gdGhlIGBDT05GSUdfTkVUPXlgIGZsYWcgaXMgc2V0LiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIHN0YW5kYXJkIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgcmlnaHQ/IEJ1dCB0aGUga2V5IHF1ZXN0aW9uIGZvciBtZSBpczogaXMgKmp1c3QqIGBDT05GSUdfTkVUYCBzdWZmaWNpZW50LCBvciBpcyB0aGVyZSBzb21lIG90aGVyLCBwb3RlbnRpYWxseSBvYnNjdXJlLCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0JiMzOTtzICphbHNvKiByZXF1aXJlZCB0byBlbnN1cmUgZXZlcnl0aGluZyB3b3JrcyBhcyBleHBlY3RlZD8gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhlcmUgaXNuJiMzOTt0IHNvbWUgY29ybmVyIGNhc2UgSSYjMzk7bSBtaXNzaW5nLgoKR2l2ZW4gdGhhdCBJIGFtIGZvY3VzZWQgb24gcnRuZXRsaW5rLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IHJlbGF0ZSB0byBpdC4gSXTigJlzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvIHZlcmlmeSBhc3N1bXB0aW9ucy4KCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IHRoZSByZWxhdGlvbnNoaXBzIGFyZSBhcm91bmQgdGhlIGBORVRgIG9wdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayBhbmQgYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMuIEkgaGF2ZSB0byBtYWtlIHN1cmUgbm90aGluZyBpcyBtaXNzZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnLTUtXG5uZXQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUXG5uZXQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtOZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgzNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENoYW5nZXMgdG8gTmV0d29yayBNdWx0aWNhc3QgQWRkcmVzcyBIYW5kbGluZyoqCgpPa2F5LCBzbyBgQ09ORklHX05FVGAgaXMgdGhlIGJpZyBwaWN0dXJlIGhlcmUsIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZWxlbWVudC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnM6IGBydG5sX2R1bXBfbWNhZGRyYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCwgYW5kIGBydG5sX2ZpbGxfbWNhZGRyYC4gVGhleSBzY3JlYW0gJiMzNDttdWx0aWNhc3QgYWRkcmVzcyBkdW1wJiMzNDsgYW5kICYjMzQ7bWFuYWdlbWVudCYjMzQ7IHRvIG1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBleGFjdCByb2xlcyBhbmQgaG93IHRoZXkgZml0IGludG8gdGhlIGV4aXN0aW5nIGFyY2hpdGVjdHVyZS4KCk15IG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIGEgc3ltYm9sIHNlYXJjaCBhbmQgY2FsbGVyIGFuYWx5c2lzIHRvIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGVzZSBmdW5jdGlvbnMsIHVuY292ZXJpbmcgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3IgYXJlYXMgb2YgaW1wYWN0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYG5ldC9jb3JlL3J0bmV0bGluay5jYCBhbmQgdGhvcm91Z2hseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIGNsZWFuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDU2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NTYwOlx0XHRcdHJldCA9IGR1bXBpdChza2IsIGNiKTtcbjQ1NjE6XHRcdFx0aWYgKHJldClcbjQ1NjI6XHRcdFx0XHRicmVhaztcbjQ1NjM6XHRcdH1cbjQ1NjQ6XHRcdGNiLVx1MDAzZWZhbWlseSA9IGlkeDtcbjQ1NjU6XHRcbjQ1NjY6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuID8gOiByZXQ7XG40NTY3Olx0fVxuNDU2ODpcdFxuNDU2OTpcdHN0YXRpYyBpbnQgcnRubF9maWxsX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuNDU3MDpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhLCB1MzIgcG9ydGlkLFxuNDU3MTpcdFx0XHRcdCAgICB1MzIgc2VxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG40NTcyOlx0e1xuNDU3MzpcdFx0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuNDU3NDpcdFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG40NTc1Olx0XG40NTc2Olx0XHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLFxuNDU3NzpcdFx0XHRcdGZsYWdzKTtcbjQ1Nzg6XHRcdGlmICghbmxoKVxuNDU3OTpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuNDU4MDpcdFxuNDU4MTpcdFx0aWZtID0gbmxtc2dfZGF0YShubGgpO1xuNDU4MjpcdFx0aWZtLVx1MDAzZWlmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7XG40NTgzOlx0XHRpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiA9IDA7XG40NTg0Olx0XHRpZm0tXHUwMDNlaWZhX2ZsYWdzID0gaGEtXHUwMDNlZ2xvYmFsX3VzZSA/IElGQV9GX1BFUk1BTkVOVCA6IDA7XG40NTg1Olx0XHRpZm0tXHUwMDNlaWZhX3Njb3BlID0gUlRfU0NPUEVfTElOSztcbjQ1ODY6XHRcdGlmbS1cdTAwM2VpZmFfaW5kZXggPSBkZXYtXHUwMDNlaWZpbmRleDtcbjQ1ODc6XHRcbjQ1ODg6XHRcdGlmIChubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVx1MDAzZWFkZHJfbGVuLCBoYS1cdTAwM2VhZGRyKSB8fFxuNDU4OTpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBoYS1cdTAwM2VyZWZjb3VudCkpIHtcbjQ1OTA6XHRcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbjQ1OTE6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjQ1OTI6XHRcdH1cbjQ1OTM6XHRcbjQ1OTQ6XHRcdG5sbXNnX2VuZChza2IsIG5saCk7XG40NTk1Olx0XHRyZXR1cm4gMDtcbjQ1OTY6XHR9XG40NTk3Olx0XG40NTk4Olx0c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuNDU5OTpcdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgKnNfYWRkcl9pZHgsXG40NjAwOlx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpXG40NjAxOlx0e1xuNDYwMjpcdFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbjQ2MDM6XHRcdGludCBhZGRyX2lkeCA9IDA7XG40NjA0Olx0XHRpbnQgZXJyID0gMDtcbjQ2MDU6XHRcbjQ2MDY6XHRcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xuNDYwNzpcdFx0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikge1xuNDYwODpcdFx0XHRpZiAoYWRkcl9pZHggXHUwMDNjICpzX2FkZHJfaWR4KSB7XG40NjA5Olx0XHRcdFx0YWRkcl9pZHgmIzQzOyYjNDM7O1xuNDYxMDpcdFx0XHRcdGNvbnRpbnVlO1xuNDYxMTpcdFx0XHR9XG40NjEyOlx0XHRcdGVyciA9IHJ0bmxfZmlsbF9tY2FkZHIoc2tiLCBkZXYsIGhhLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuNDYxMzpcdFx0XHRcdFx0ICAgICAgIGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzKTtcbjQ2MTQ6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjQ2MTU6XHRcdFx0XHRicmVhaztcbjQ2MTY6XHRcdFx0YWRkcl9pZHgmIzQzOyYjNDM7O1xuNDYxNzpcdFx0fVxuNDYxODpcdFx0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcbjQ2MTk6XHRcbjQ2MjA6XHRcdCpzX2FkZHJfaWR4ID0gZXJyIFx1MDAzYyAwID8gYWRkcl9pZHggOiAwO1xuNDYyMTpcdFxuNDYyMjpcdFx0cmV0dXJuIGVycjtcbjQ2MjM6XHR9XG40NjI0Olx0XG40NjI1Olx0c3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbjQ2MjY6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbjQ2Mjc6XHRcdFx0XHRcdCAgICAgIGludCAqcGlmaW5kZXgpXG40NjI4Olx0e1xuNDYyOTpcdFx0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuNDYzMDpcdFxuNDYzMTpcdFx0aWZtID0gbmxtc2dfcGF5bG9hZChubGgsIHNpemVvZigqaWZtKSk7XG40NjMyOlx0XHRpZiAoIWlmbSkge1xuNDYzMzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG40NjM0Olx0XHRcdFx0ICAgICAgIFwmIzM0O0ludmFsaWQgaGVhZGVyIGZvciBtdWx0aWNhc3QgZHVtcCByZXF1ZXN0XCYjMzQ7KTtcbjQ2MzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NjM2Olx0XHR9XG40NjM3Olx0XG40NjM4Olx0XHRpZiAoaWZtLVx1MDAzZWlmYV9wcmVmaXhsZW4gfHwgaWZtLVx1MDAzZWlmYV9mbGFncyB8fCBpZm0tXHUwMDNlaWZhX3Njb3BlKSB7XG40NjM5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzOTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgaWYgSSBhbSB0aGUgZXhwZXJ0IHRoaW5raW5nIGl0OgoKKipGb2N1c2luZyBvbiBhIENydWNpYWwgU2VjdGlvbioqCgpSaWdodCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYSBzcGVjaWZpYyByYW5nZSBvZiBsaW5lcyBpbiB0aGlzIGFuYWx5c2lzLiBMaW5lcyA0NjQwLTQ3MDAuLi4gdGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgZnVydGhlciBzY3J1dGlueS4gQmFzZWQgb24gdGhlIGluaXRpYWwgc2NhbiwgdGhpcyBibG9jayBpcyB3aGVyZSB0aGUgYW5vbWFseSBpcyBtb3N0IGxpa2VseSBsb2NhdGVkLCB0aGF0IHdpbGwgYmUgd2hlcmUgSSBiZWdpbiBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDY0MDpcdFx0XHRcdCAgICAgICBcJiMzNDtJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXJcJiMzNDspO1xuNDY0MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ2NDI6XHRcdH1cbjQ2NDM6XHRcbjQ2NDQ6XHRcdGlmIChubG1zZ19hdHRybGVuKG5saCwgc2l6ZW9mKCppZm0pKSkge1xuNDY0NTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG40NjQ2Olx0XHRcdFx0ICAgICAgIFwmIzM0O0ludmFsaWQgZGF0YSBhZnRlciBtdWx0aWNhc3QgZHVtcCBoZWFkZXJcJiMzNDspO1xuNDY0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ2NDg6XHRcdH1cbjQ2NDk6XHRcbjQ2NTA6XHRcdCpwaWZpbmRleCA9IGlmbS1cdTAwM2VpZmFfaW5kZXg7XG40NjUxOlx0XG40NjUyOlx0XHRyZXR1cm4gMDtcbjQ2NTM6XHR9XG40NjU0Olx0XG40NjU1Olx0c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbjQ2NTY6XHR7XG40NjU3Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuNDY1ODpcdFx0dW5zaWduZWQgaW50IGZsYWdzID0gTkxNX0ZfTVVMVEk7XG40NjU5Olx0XHRzdHJ1Y3Qge1xuNDY2MDpcdFx0XHR1bnNpZ25lZCBsb25nIGlmaW5kZXg7XG40NjYxOlx0XHRcdGludCBhZGRyX2lkeDtcbjQ2NjI6XHRcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuNDY2MzpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjQ2NjQ6XHRcdGludCBpZmluZGV4O1xuNDY2NTpcdFx0aW50IGVycjtcbjQ2NjY6XHRcbjQ2Njc6XHRcdGVyciA9IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNiLVx1MDAzZW5saCwgY2ItXHUwMDNlZXh0YWNrLCBcdTAwMjZpZmluZGV4KTtcbjQ2Njg6XHRcdGlmIChlcnIgXHUwMDNjIDApXG40NjY5Olx0XHRcdHJldHVybiBlcnI7XG40NjcwOlx0XG40NjcxOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG40NjcyOlx0XG40NjczOlx0XHRpZiAoaWZpbmRleCkge1xuNDY3NDpcdFx0XHRjYi1cdTAwM2VhbnN3ZXJfZmxhZ3MgfD0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcbjQ2NzU6XHRcdFx0ZmxhZ3MgfD0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcbjQ2NzY6XHRcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBpZmluZGV4KTtcbjQ2Nzc6XHRcdFx0aWYgKCFkZXYpIHtcbjQ2Nzg6XHRcdFx0XHRlcnIgPSAtRU5PREVWO1xuNDY3OTpcdFx0XHRcdGdvdG8gb3V0O1xuNDY4MDpcdFx0XHR9XG40NjgxOlx0XHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LCBmbGFncyk7XG40NjgyOlx0XHRcdGdvdG8gb3V0O1xuNDY4MzpcdFx0fVxuNDY4NDpcdFxuNDY4NTpcdFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG40Njg2Olx0XHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LFxuNDY4NzpcdFx0XHRcdFx0XHQgICBmbGFncyk7XG40Njg4Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG40Njg5Olx0XHRcdFx0YnJlYWs7XG40NjkwOlx0XHR9XG40NjkxOlx0b3V0OlxuNDY5MjpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG40NjkzOlx0XHRyZXR1cm4gZXJyO1xuNDY5NDpcdH1cbjQ2OTU6XHRcbjQ2OTY6XHRzdHJ1Y3Qgc2tfYnVmZiAqcnRtc2dfaWZpbmZvX2J1aWxkX3NrYihpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbjQ2OTc6XHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLFxuNDY5ODpcdFx0XHRcdFx0ICAgICAgIHUzMiBldmVudCwgZ2ZwX3QgZmxhZ3MsIGludCAqbmV3X25zaWQsXG40Njk5Olx0XHRcdFx0XHQgICAgICAgaW50IG5ld19pZmluZGV4LCB1MzIgcG9ydGlkLFxuNDcwMDpcdFx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoKVxuNDcwMTpcdHtcbjQ3MDI6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcbjQ3MDM6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG40NzA0Olx0XHRpbnQgZXJyID0gLUVOT0JVRlM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTAxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFJ0bmV0bGluayBSZWdpc3RyYXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIGBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNgIGdldCBob29rZWQgdXAsIHdoaWNoIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHJvdXRpbmcgbWVzc2FnZXMgYXJlIG1hbmFnZWQgaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgc3RhcnRpbmcgcG9pbnQgc2VlbXMgdG8gYmUgYHJ0bmV0bGlua19pbml0KClgLiBBaGEsIHRoZXJlIGl0IGlzISBgcnRubF9yZWdpc3Rlcl9tYW55KHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVycyk7YCBUaGF0JiMzOTtzIHRoZSBrZXkgbGluZS4gU28gYHJ0bmxfcmVnaXN0ZXJfbWFueWAgaXMgbGlrZWx5IHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyBhbGwgdGhlIGhhbmRsZXIgZnVuY3Rpb25zIHdpdGhpbiBgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzYC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgcnRuZXRsaW5rX2luaXRgIHdvcmtzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmV0bGlua19ydG5sX21zZ19oYW5kbGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jPTczNTY9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBydG5ldGxpbmtfbmV0X29wcyA9IHtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MzYwLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzM2MTpzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MzYyLVx0ey5tc2d0eXBlID0gUlRNX05FV0xJTkssIC5kb2l0ID0gcnRubF9uZXdsaW5rLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTc0MDE9dm9pZCBfX2luaXQgcnRuZXRsaW5rX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03NDA3LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzQwODpcdHJ0bmxfcmVnaXN0ZXJfbWFueShydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnMpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNzQwOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMDkKCQkJCQkJCW91dHB1dDogMTQ2CgkJCQkJCQl0aG91Z2h0czogNTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IE11bHRpY2FzdCBBZGRyZXNzIER1bXBpbmcgdmlhIHJ0bmV0bGluayoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gZHVtcGluZyBtdWx0aWNhc3QgYWRkcmVzc2VzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBhIGZ1enppbmcgY2FtcGFpZ24uIFRoZSBjb2RlIHRvdWNoZXMgYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgd2hpY2gsIGFzIHdlIGFsbCBrbm93LCBpcyAqY29yZSogbmV0d29ya2luZyBjb2RlIOKAkyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIG9mIGl0cyBjZW50cmFsIHJvbGUgaW4gdGhlIGtlcm5lbC4gVGhpcyBzcGVjaWZpYyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbmFsaXR5IGZvciBkdW1waW5nIG11bHRpY2FzdCBhZGRyZXNzZXMgYXNzb2NpYXRlZCB3aXRoIGBQRl9QQUNLRVRgIHNvY2tldHMgdXNpbmcgYFJUTV9HRVRNVUxUSUNBU1RgIHJlcXVlc3RzIHRocm91Z2ggcnRuZXRsaW5rLiBXZSBoYXZlIHRoZSB1c3VhbCBzdXNwZWN0czogYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLCBhbmQgYHJ0bmxfZmlsbF9tY2FkZHJgLgoKVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIG5ldyBjb2RlIGlzIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIG1lc3NhZ2VzLiBTcGVjaWZpY2FsbHksIHVzZXJzcGFjZSBjYW4gdHJpZ2dlciB0aGlzIHdpdGggYW4gYFJUTV9HRVRNVUxUSUNBU1RgIHJlcXVlc3QgYW5kIGBBRl9QQUNLRVRgLiBTbywgdGhlIGF0dGFjayBzdXJmYWNlIGlzIHJpZ2h0IHRoZXJlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBoYW5kbGluZyB1c2VyLXN1cHBsaWVkIHJlcXVlc3QgaGVhZGVycywgaXRlcmF0aW5nIG92ZXIgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgc2VyaWFsaXppbmcgbmV0bGluayBhdHRyaWJ1dGVzLiBUaGlzIGlzIGEgY2xhc3NpYyBwYXR0ZXJuIHRoYXTigJlzIHlpZWxkZWQgbWFueSBrZXJuZWwgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBwYXN0LCBhbmQgSSYjMzk7bSBwcmFjdGljYWxseSBzZWVpbmcgYnVnIHJlcG9ydHMgYWxyZWFkeS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgc2V0dXAuIFRoZSBgTkVUYCBjb25maWcgZmxhZyBpcyBvYnZpb3VzbHkgbmVjZXNzYXJ5OyB0aGF0JiMzOTtzIHdoYXQgY29tcGlsZXMgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYC4gR29vZCwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIEl0IHNlZW1zIHdlIGRvbiYjMzk7dCBuZWVkIGFueSBzcGVjaWFsaXplZCBuZXR3b3JrIGZsYWdzIGxpa2UgYENPTkZJR19JTkVUYCBiZWNhdXNlIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBjZW50ZXJlZCBhcm91bmQgYEFGX1BBQ0tFVGAsIHdoaWNoIGlzIGp1c3QgYSBjb25zdGFudCAoMTcpLCBhbmQgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMuIFRoZSBgZGV2X2FkZHJfbGlzdHNgIGFuZCBgcnRuZXRsaW5rYCBzdHJ1Y3R1cmVzIHdlIGFyZSBpbnRlcmFjdGluZyB3aXRoIGFyZSBidWlsdC1pbiBpZiBgQ09ORklHX05FVGAgaXMgZW5hYmxlZC4gRXhjZWxsZW50LgoKVGhlcmVmb3JlLCB0aGUgZmluYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gVGhlIGBFbmFibGVDb25maWdzYCBpcyBqdXN0IGBORVRgLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSB0aGUgZm91ciBmdW5jdGlvbnMgbGlzdGVkIHByZXZpb3VzbHkuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuIFdlIGhhdmUgb3VyIGZ1enppbmcgdGFyZ2V0IHJlYWR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfbWNhZGRyX2RldiYjMzQ7LAogICAgJiMzNDtydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcSYjMzQ7LAogICAgJiMzNDtydG5sX2ZpbGxfbWNhZGRyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV0bGluayBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoUEZfUEFDS0VUIC8gUlRNX0dFVE1VTFRJQ0FTVCkgaW4gcnRuZXRsaW5rLiBUaGUgbmV3bHkgYWRkZWQgY29kZSB2YWxpZGF0ZXMgdXNlciBkdW1wIHJlcXVlc3RzLCB0cmF2ZXJzZXMgZGV2aWNlIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIHVuZGVyIGxvY2ssIGFuZCBzZXJpYWxpemVzIHJ0bmV0bGluayBhdHRyaWJ1dGVzLCB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgdmlhIG5ldGxpbmsgc29ja2V0IG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldGxpbmsgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCAvIFJUTV9HRVRNVUxUSUNBU1QpIGluIHJ0bmV0bGluay4gVGhlIG5ld2x5IGFkZGVkIGNvZGUgdmFsaWRhdGVzIHVzZXIgZHVtcCByZXF1ZXN0cywgdHJhdmVyc2VzIGRldmljZSBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyB1bmRlciBsb2NrLCBhbmQgc2VyaWFsaXplcyBydG5ldGxpbmsgYXR0cmlidXRlcywgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHNvY2tldCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoQUZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QpIHZpYSBuZXRsaW5rLiBcblxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgXHUwMDI2IEluZm8tbGVha3MgKEtNU0FOKTogQWxsIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIGluIG5ldGxpbmsgcmVzcG9uc2VzIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBpZmFkZHJtc2dgIGhlYWRlciBoYXMgYSA4LWJ5dGUgbGF5b3V0IHdpdGhvdXQgaW50ZXJuYWwgcGFkZGluZyBob2xlcywgYW5kIGFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBzZXQuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBJRkFfTVVMVElDQVNUYCBhbmQgYElGQV9NQ19VU0VSU2ApIGFyZSBhZGRlZCB3aXRoIGBubGFfcHV0YCAvIGBubGFfcHV0X3UzMmAgd2hpY2ggemVybyBhbnkgdHJhaWxpbmcgYXR0cmlidXRlIGFsaWdubWVudCBwYWRkaW5nLiBBZGRyZXNzIGJ5dGVzIGluIGBoYS1cdTAwM2VhZGRyYCBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIGhhcmR3YXJlIGFkZHJlc3MgY3JlYXRpb24gdXAgdG8gYGRldi1cdTAwM2VhZGRyX2xlbmAuIENvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgZHVtcCBgY3R4YCBhbmQgYGlmaW5kZXhgKSBhcmUgZWl0aGVyIHplcm9lZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0gb3IgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbi0gTWVtb3J5IFNhZmV0eSBcdTAwMjYgQ29uY3VycmVuY3kgKEtBU0FOL0xPQ0tERVApOiBUaGUgY2hhbmdlcyBpbnZvbHZlIFJDVSBsb29rdXBzLCBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzLCBhbmQgZGV2aWNlIGFkZHJlc3MgbGlzdCBsb2NrcyAoYG5ldGlmX2FkZHJfbG9ja19iaGApLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBjb25maWd1cmF0aW9ucy5cblxuVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjlmMjI5YWM4ZTY2ZGI0NzQ3MWFlOTk3MDk1MTg5Yzg5NTQ2YTIzNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDI6Mzc6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbAppbmRleCAwZWNiZDI0Yzg5MGM2Li4yYTIzMTBjYjBkZjAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwKQEAgLTE2OCw3ICYjNDM7MTY4LDEyIEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGwKICAgICAtCiAgICAgICBuYW1lOiBnZXRtdWx0aWNhc3QKLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy4KJiM0MzsgICAgICBkb2M6IHwKJiM0MzsgICAgICAgIEdldCAvIGR1bXAgbXVsdGljYXN0IGFkZHJlc3Nlcy4gaWZhLWZhbWlseSBzZWxlY3RzIHRoZSBhZGRyZXNzCiYjNDM7ICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvbgomIzQzOyAgICAgICAgYSBkZXZpY2UsIEFGX1BBQ0tFVCBmb3IgdGhlIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiB0aGUKJiM0MzsgICAgICAgIGRldmljZSBmaWx0ZXIuIExpbmstbGF5ZXIgZW50cmllcyBhZGRlZCB3aXRoIFNJT0NBRERNVUxUSSBhcmUKJiM0MzsgICAgICAgIHJlcG9ydGVkIHdpdGggdGhlIHBlcm1hbmVudCBmbGFnIHNldC4KICAgICAgIGF0dHJpYnV0ZS1zZXQ6IGFkZHItYXR0cnMKICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnCiAgICAgICBkbzoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggODFjNWE2MTA0ZGVhMS4uYjJmZWJkYjY5MTVlOCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTQ1NjYsNiAmIzQzOzQ1NjYsMTMzIEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJcmV0dXJuIHNrYi0mZ3Q7bGVuID8gOiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCwKJiM0MzsJCQkgICAgdTMyIHNlcSwgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKJiM0MzsKJiM0MzsJbmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSwKJiM0MzsJCQlmbGFncyk7CiYjNDM7CWlmICghbmxoKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJaWZtID0gbmxtc2dfZGF0YShubGgpOwomIzQzOwlpZm0tJmd0O2lmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7CiYjNDM7CWlmbS0mZ3Q7aWZhX3ByZWZpeGxlbiA9IDA7CiYjNDM7CWlmbS0mZ3Q7aWZhX2ZsYWdzID0gaGEtJmd0O2dsb2JhbF91c2UgPyBJRkFfRl9QRVJNQU5FTlQgOiAwOwomIzQzOwlpZm0tJmd0O2lmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7CiYjNDM7CWlmbS0mZ3Q7aWZhX2luZGV4ID0gZGV2LSZndDtpZmluZGV4OwomIzQzOwomIzQzOwlpZiAobmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi0mZ3Q7YWRkcl9sZW4sIGhhLSZndDthZGRyKSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLSZndDtyZWZjb3VudCkpIHsKJiM0MzsJCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5sbXNnX2VuZChza2IsIG5saCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50ICpzX2FkZHJfaWR4LAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwomIzQzOwlpbnQgYWRkcl9pZHggPSAwOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJbmV0aWZfYWRkcl9sb2NrX2JoKGRldik7CiYjNDM7CW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHsKJiM0MzsJCWlmIChhZGRyX2lkeCAmbHQ7ICpzX2FkZHJfaWR4KSB7CiYjNDM7CQkJYWRkcl9pZHgmIzQzOyYjNDM7OwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItJmd0O3NrYikucG9ydGlkLAomIzQzOwkJCQkgICAgICAgY2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncyk7CiYjNDM7CQlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCQlicmVhazsKJiM0MzsJCWFkZHJfaWR4JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwluZXRpZl9hZGRyX3VubG9ja19iaChkZXYpOwomIzQzOwomIzQzOwkqc19hZGRyX2lkeCA9IGVyciAmbHQ7IDAgPyBhZGRyX2lkeCA6IDA7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywKJiM0MzsJCQkJICAgICAgaW50ICpwaWZpbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZmFkZHJtc2cgKmlmbTsKJiM0MzsKJiM0MzsJaWZtID0gbmxtc2dfcGF5bG9hZChubGgsIHNpemVvZigqaWZtKSk7CiYjNDM7CWlmICghaWZtKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7SW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3QmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaWZtLSZndDtpZmFfcHJlZml4bGVuIHx8IGlmbS0mZ3Q7aWZhX2ZsYWdzIHx8IGlmbS0mZ3Q7aWZhX3Njb3BlKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7SW52YWxpZCB2YWx1ZXMgaW4gbXVsdGljYXN0IGR1bXAgaGVhZGVyJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG5sbXNnX2F0dHJsZW4obmxoLCBzaXplb2YoKmlmbSkpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7SW52YWxpZCBkYXRhIGFmdGVyIG11bHRpY2FzdCBkdW1wIGhlYWRlciYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpwaWZpbmRleCA9IGlmbS0mZ3Q7aWZhX2luZGV4OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgaWZpbmRleDsKJiM0MzsJCWludCBhZGRyX2lkeDsKJiM0MzsJfSAqY3R4ID0gKHZvaWQgKiljYi0mZ3Q7Y3R4OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwomIzQzOwlpbnQgaWZpbmRleDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItJmd0O25saCwgY2ItJmd0O2V4dGFjaywgJmFtcDtpZmluZGV4KTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CiYjNDM7CWlmIChpZmluZGV4KSB7CiYjNDM7CQljYi0mZ3Q7YW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CiYjNDM7CQlmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEOwomIzQzOwkJZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBpZmluZGV4KTsKJiM0MzsJCWlmICghZGV2KSB7CiYjNDM7CQkJZXJyID0gLUVOT0RFVjsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCWVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgJmFtcDtjdHgtJmd0O2FkZHJfaWR4LCBmbGFncyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LSZndDtpZmluZGV4KSB7CiYjNDM7CQllcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsICZhbXA7Y3R4LSZndDthZGRyX2lkeCwKJiM0MzsJCQkJCSAgIGZsYWdzKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7b3V0OgomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3Qgc2tfYnVmZiAqcnRtc2dfaWZpbmZvX2J1aWxkX3NrYihpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSwKIAkJCQkgICAgICAgdTMyIGV2ZW50LCBnZnBfdCBmbGFncywgaW50ICpuZXdfbnNpZCwKQEAgLTcyNTEsNiAmIzQzOzczNzgsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPQogCXsubXNndHlwZSA9IFJUTV9TRVRTVEFUUywgLmRvaXQgPSBydG5sX3N0YXRzX3NldH0sCiAJey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LAogCXsubXNndHlwZSA9IFJUTV9ERUxMSU5LUFJPUCwgLmRvaXQgPSBydG5sX2RlbGxpbmtwcm9wfSwKJiM0MzsJey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULAomIzQzOwkgLmR1bXBpdCA9IHJ0bmxfZHVtcF9tY2FkZHIsIC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSwKIAl7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLAogCSAuZHVtcGl0ID0gcnRubF9icmlkZ2VfZ2V0bGlua30sCiAJey5wcm90b2NvbCA9IFBGX0JSSURHRSwgLm1zZ3R5cGUgPSBSVE1fREVMTElOSywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CmluZGV4IDVjYzNlYmRjZjA4ZGUuLmNlYTYzNmYxMGFlYjYgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQpAQCAtMSwxNyAmIzQzOzEsMjEgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIAomIzQzO2ltcG9ydCBlcnJubwogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHRpbWUKIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXgKLWZyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZQotZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X2luLCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZQomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIE5sRXJyb3IsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHkKIGZyb20gbGliLnB5IGltcG9ydCBkZWZlcgogCiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtceGUwXHgwMFx4MDBceDAxJiMzOTsKIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJiMzOTtceGVmXHgwMVx4MDFceDAxJiMzOTsKIElQVjZfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCYjMzk7ZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMmIzM5OykKJiM0MztFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzOTswMTAwNWUwMDAwMDEmIzM5OykKJiM0MztFVEhfVEVTVF9NVUxUSUNBU1RfU1RSID0gJiMzOTswMTowMDo1ZTowMTowMTowMSYjMzk7CiYjNDM7RVRIX1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleChFVEhfVEVTVF9NVUxUSUNBU1RfU1RSLnJlcGxhY2UoJiMzOTs6JiMzOTssICYjMzk7JiMzOTspKQogCiAKIGRlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KToKQEAgLTEwNSw2ICYjNDM7MTA5LDUyIEBAIGRlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtJmd0OyBOb25lOgogICAgICAgICAgICAgICAgIHMyLmNsb3NlKCkKIAogCiYjNDM7ZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIFZlcmlmeSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gYW4gQUZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QKJiM0MzsgICAgZHVtcDogdGhlIGlmYS1pbmRleCBmaWx0ZXIsIG1jLXVzZXJzIGFuZCB0aGUgcGVybWFuZW50IGZsYWcuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBmb3IgaWZuYW1lIGluICgmIzM0O2R1bW15MSYjMzQ7LCAmIzM0O2R1bW15MiYjMzQ7KToKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXkmIzM0OykKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIHNldCB7aWZuYW1lfSB1cCYjMzQ7KQomIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM0O2R1bW15MSYjMzQ7KQomIzQzOyAgICAgICAgaXAoZiYjMzQ7bWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KAomIzQzOyAgICAgICAgICAgICAgICB7JiMzNDtpZmEtZmFtaWx5JiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsICYjMzQ7aWZhLWluZGV4JiMzNDs6IGRldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpCiYjNDM7ICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOgomIzQzOyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDoKJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7a2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wJiMzNDspCiYjNDM7ICAgICAgICAgICAgcmFpc2UKJiM0MzsKJiM0MzsgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWQKJiM0MzsgICAgICAgIGtzZnRfZXEoe2FkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10gZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwge2Rldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O0FGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCBpZ25vcmVkIGlmYS1pbmRleCBmaWx0ZXImIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIGVudHJpZXMgPSB7YWRkclsmIzM5O211bHRpY2FzdCYjMzk7XTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9CiYjNDM7CiYjNDM7ICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHMKJiM0MzsgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC4KJiM0MzsgICAgICAgIGtzZnRfaW4oRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QsIGVudHJpZXMsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3MmIzM0OykKJiM0MzsgICAgICAgIGtzZnRfbm90X2luKCYjMzk7cGVybWFuZW50JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICBlbnRyaWVzW0VUSF9BTExfSE9TVFNfTVVMVElDQVNUXVsmIzM5O2lmYS1mbGFncyYjMzk7XSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7cHJvdG9jb2wgZW50cnkgaXMgcGVybWFuZW50JiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBrc2Z0X2luKEVUSF9URVNUX01VTFRJQ0FTVCwgZW50cmllcywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3MmIzM0OykKJiM0MzsgICAgICAgIGtzZnRfZXEoZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWyYjMzk7bWMtdXNlcnMmIzM5O10sIDEsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7dW5leHBlY3RlZCBtYy11c2VycyBmb3IgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzJiMzNDspCiYjNDM7ICAgICAgICBrc2Z0X2luKCYjMzk7cGVybWFuZW50JiMzOTssIGVudHJpZXNbRVRIX1RFU1RfTVVMVElDQVNUXVsmIzM5O2lmYS1mbGFncyYjMzk7XSwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IHBlcm1hbmVudCYjMzQ7KQomIzQzOwomIzQzOwogZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtJmd0OyBOb25lOgogICAgICYjMzQ7JiMzNDsmIzM0OwogICAgIENvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgYW5kIHNldCBpcHY0LWRldmNvbmYgdmFsdWVzIHRocm91Z2ggbmV0bGluawpAQCAtMzE1LDcgJiM0MzszNjUsOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC0mZ3Q7IE5vbmU6CiAKIAogZGVmIG1haW4oKSAtJmd0OyBOb25lOgotICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LAomIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssCiYjNDM7ICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3biwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzE0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIHZzLiBLQVNBTiBQYXRjaCBFdmFsdWF0aW9uKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nIGFzIEkgYXBwcm9hY2ggdGhpcyBwYXRjaC4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBvcGVyYXRpbmcgd2l0aGluIHRoZSBzYWZldHkgZ3VpZGVsaW5lczogbm8gcmVhbC13b3JsZCBoYXJtLCBubyBvZmZlbnNpdmUgYWN0aW9ucywgYW5kIHRoaXMgY29kZSBhdWRpdGluZyBpcyBkZWZpbml0ZWx5IGJlbmlnbiwgc28gSSYjMzk7bSBnb29kIHRvIGdvLiBUaGUgc3BlY2lmaWMgdGFzayBpcyB0byBldmFsdWF0ZSB0aGlzIHBhdGNoIHNlcmllcyBmb3IgS01TQU4gYXBwbGljYWJpbGl0eSwgbG9va2luZyBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSSYjMzk7dmUgZ290IG15IHRvb2xzOiBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGByZWFkLWZpbGVgLCBhbmQgY3J1Y2lhbGx5LCBgc2V0LXJlc3VsdHNgLCB3aGljaCBJICptdXN0KiBjYWxsIG9uY2UgYXQgdGhlIGVuZC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgbXVsdGljYXN0IGFkZHJlc3MgZHVtcGluZyB0aHJvdWdoIE5ldGxpbmssIHNwZWNpZmljYWxseSBgUlRNX0dFVE1VTFRJQ0FTVGAgd2l0aCBgUEZfUEFDS0VUYC4gU28sIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4KClRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgcnRubF9maWxsX21jYWRkcmAuIExvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIGl0IHBvcHVsYXRpbmcgYW4gYHNrX2J1ZmZgIHdpdGggTmV0bGluayBtZXNzYWdlIGRhdGEuIEl0IHVzZXMgYG5sbXNnX3B1dGAgdG8gY3JlYXRlIHRoZSBoZWFkZXIsIGFuZCB0aGVuIHN0YXJ0cyBmaWxsaW5nIGluIGZpZWxkcyBsaWtlIGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgLCBhbmQgYWxzbyBzb21lIE5ldGxpbmsgYXR0cmlidXRlczogYElGQV9NVUxUSUNBU1RgIGFuZCBgSUZBX01DX1VTRVJTYC4KCk5vdyBjb21lcyB0aGUgY3J1Y2lhbCBwYXJ0LiBJIG5lZWQgdG8gYmUgZXh0cmEgdmlnaWxhbnQgYWJvdXQgd2hldGhlciBhbnkgb2YgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIG9yIHRoZSBhdHRyaWJ1dGVzIHVzZWQsIGVzcGVjaWFsbHkgYGlmYWRkcm1zZ2AsIGNvdWxkIGJlIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0JiMzOTtzIHdoZXJlIEtNU0FOIGNvbWVzIGludG8gcGxheS4gSSBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgaG93IHRoZXNlIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGluaXRpYWxpemVkLCBhbmQgd2hhdCB2YWx1ZXMgYXJlIGJlaW5nIGFzc2lnbmVkIHRvIHRoZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBpZmFkZHJtc2dgIHRvIGVuc3VyZSB0aGF0IGl0IGRvZXMgbm90IGNvbnRhaW4gYW55IHBhZGRpbmcsIHVuaW5pdGlhbGl6ZWQgbWVtYmVycyBvciByZWxpZXMgb24gZXh0ZXJuYWwgdmFsdWVzIHRoYXQgbWF5IGJlIHVuaW5pdGlhbGl6ZWQuIFRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBoZWFkZXJzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iYWQgZXhwcmVzc2lvbjogZmF0YWw6IC1lIG9wdGlvbiwgJiMzOTtzdHJ1Y3QgaWZhZGRybXNnIHsmIzM5OzogVW5tYXRjaGVkIFx7PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpZmFkZHJtc2cgeyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2JhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAmIzM5O3N0cnVjdCBpZmFkZHJtc2cgeyYjMzk7OiBVbm1hdGNoZWQgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzkyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBSZWdleC9Db2Rlc2VhcmNoIERpbGVtbWEqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgaXNzdWUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzLCAmIzM0O0hvdyBjYW4gSSBlZmZpY2llbnRseSBhZGRyZXNzIHRoaXM/JiMzNDsgSXQmIzM5O3MgYSBjbGFzc2ljIHNpdHVhdGlvbjogSSBuZWVkIHRvIGxvY2F0ZSBpbnN0YW5jZXMgb2Ygc29tZXRoaW5n4oCUbWF5YmUgYSBwYXR0ZXJuLCBhIHNwZWNpZmljIGNvZGUgY29uc3RydWN0LCBvciBhIHByb2JsZW1hdGljIGltcGxlbWVudGF0aW9u4oCUd2l0aGluIGEgY29kZWJhc2UuIE15IGltbWVkaWF0ZSBvcHRpb25zIGFyZSBlaXRoZXIgdG8gcmVmaW5lIGEgcmVndWxhciBleHByZXNzaW9uIG9yIGxldmVyYWdlIGEgY29kZXNlYXJjaCB0b29sLgoKVGhlIHJlZ2V4IGFwcHJvYWNoIGhhcyBpdHMgcHJvcy4gSSBjYW4gbWV0aWN1bG91c2x5IGNyYWZ0IGEgcmVnZXggdG8gdGFyZ2V0IHZlcnkgc3BlY2lmaWMgaW5zdGFuY2VzLiBJdCBvZmZlcnMgcHJlY2lzaW9uLCBlc3BlY2lhbGx5IGlmIHRoZSBwYXR0ZXJuIGlzIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGFuZCB3ZWxsLWRlZmluZWQuIEkgY2FuIHF1aWNrbHkgaXRlcmF0ZSBhbmQgdGVzdCBteSBwYXR0ZXJuLiBIb3dldmVyLCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgb3Zlcmx5IGNvbXBsZXggcmVnZXggY2FuIGJlY29tZSB1bm1haW50YWluYWJsZeKAlGEgbmlnaHRtYXJlIHRvIGRlYnVnIGFuZCBwb3RlbnRpYWxseSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIHBhcnRpY3VsYXJseSBvbiBsYXJnZSBmaWxlcyBvciBpbiBhIHRpZ2h0IGxvb3AuCgpUaGUgYWx0ZXJuYXRpdmUsIGNvZGVzZWFyY2gsIGlzIHRlbXB0aW5nLiBBIHByb3BlciBjb2RlIHNlYXJjaCB0b29sLCBzdWNoIGFzIGdyZXAgb3IgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgc3lzdGVtLCBoYXMgdGhlIGFkdmFudGFnZSBvZiB1bmRlcnN0YW5kaW5nIG1vcmUgY29udGV4dCBhYm91dCB0aGUgY29kZSBsYW5ndWFnZSBJIGFtIHdvcmtpbmcgaW4uIFRoaXMga25vd2xlZGdlIGlzIGltcG9ydGFudCBmb3IgbXkgc2VhcmNoIGFzIGl0IHdpbGwgaGVscCB0byBkZXRlcm1pbmUgd2hhdCB0aGUgdG9rZW5zIGluIG15IHNlYXJjaCBzdHJpbmcgbWVhbiwgYW5kIGNhbiBhbHNvIGhlbHAgc2VhcmNoIGFuZCByZXBsYWNlLiBUaGlzIGNhbiBiZSBncmVhdCBpZiBJIGFtIHNlYXJjaGluZyBmb3IgbGFuZ3VhZ2UgY29uc3RydWN0cy4gQ29kZSBzZWFyY2ggaGFzIHRoZSBwb3RlbnRpYWwgdG8gaGFuZGxlIG1vcmUgY29tcGxleCBvciBudWFuY2VkIHF1ZXJpZXMgd2l0aCBiZXR0ZXIgYWNjdXJhY3ksIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyBjb250ZXh0LCBsYW5ndWFnZSBzeW50YXgsIGFuZCBldmVuIHNlbWFudGljIG1lYW5pbmcuIENvZGVzZWFyY2ggaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBmaWxlcywgb3IgbGFyZ2UgY29kZWJhc2VzLiBIb3dldmVyLCB0aGUgaW5pdGlhbCBzZXR1cCBhbmQgaW5kZXhpbmcgb2YgYSBjb2Rlc2VhcmNoIHNvbHV0aW9uIGNhbiB0YWtlIG1vcmUgdGltZSBhbmQgZWZmb3J0LCBlc3BlY2lhbGx5IGlmIHRoZSBjb2RlYmFzZSBpcyBwYXJ0aWN1bGFybHkgY29tcGxleCBvciB1c2VzIGFuIHVudXN1YWwgc2V0dXAuIEFsc28sIGlmIEkgYW0gdHJ5aW5nIHRvIHNlYXJjaCBmb3Igc29tZXRoaW5nIHZlcnkgc3BlY2lmaWMsIHRoZSBwcmVjaXNpb24gbWF5IGJlIGxlc3MgdGhhbiBhIHJlZ2V4LWJhc2VkIHNvbHV0aW9uLCBkZXBlbmRpbmcgb24gdGhlIGNvZGVzZWFyY2ggZW5naW5lLgoKU28sIEkgbmVlZCB0byB3ZWlnaCB0aGUgdHJhZGUtb2ZmczogcHJlY2lzaW9uIHZlcnN1cyBzY2FsZSwgY29tcGxleGl0eSB2ZXJzdXMgZWZmaWNpZW5jeS4gV2hhdCYjMzk7cyB0aGUgc2NvcGUgb2YgdGhlIHByb2JsZW0/IElzIGl0IGEgcXVpY2ssIGlzb2xhdGVkIHRhc2ssIG9yIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIHJldmlzaXRlZCwgbWFpbnRhaW5lZCwgYW5kIHBlcmhhcHMgZXZlbiBhdXRvbWF0ZWQ/IEtub3dpbmcgdGhhdCB3aWxsIGRldGVybWluZSB3aGV0aGVyIEkgdXNlIHJlZ2V4IG9yIGNvZGVzZWFyY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpZmFkZHJtc2cgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtNy1cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6ODpzdHJ1Y3QgaWZhZGRybXNnIHtcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtOS1cdF9fdThcdFx0aWZhX2ZhbWlseTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTctXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oOjg6c3RydWN0IGlmYWRkcm1zZyB7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTktXHRfX3U4XHRcdGlmYV9mYW1pbHk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byBOZXR3b3JrIEludGVyZmFjZSBBZGRyZXNzIFN0cnVjdHVyZXMqKgoKT2theSwgdGltZSB0byBjcmFjayBvcGVuIGBpbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oYC4gSSYjMzk7bSBjdXJpb3VzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBrZXJuZWwmIzM5O3MgZGVmaW5pdGlvbnMgZm9yIG5ldHdvcmsgaW50ZXJmYWNlIGFkZHJlc3Nlcywgc3BlY2lmaWNhbGx5IHRoZSBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMuIEkgbmVlZCB0byBnZXQgYmFjayBpbiB0aGUgd2VlZHMgYW5kIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgcmVwcmVzZW50cyBhbmQgaGFuZGxlcyB0aGUgdmFyaW91cyBhZGRyZXNzIGZhbWlsaWVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRhdGEuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgZm9yIHRoaW5ncyBsaWtlIElQdjQsIElQdjYsIGFuZCBwb3RlbnRpYWxseSBvdGhlciBhZGRyZXNzIHR5cGVzIHdpbGwgbGl2ZS4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYW55IGFsaWdubWVudCBjb25zaWRlcmF0aW9ucywgYXMgdGhvc2UgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIGludGVyb3BlcmFiaWxpdHkuIEl0JiMzOTtzIGFsc28gd29ydGggZG91YmxlLWNoZWNraW5nIGFueSByZWNlbnQgY2hhbmdlcyBvciBhZGRpdGlvbnMgdG8gdGhpcyBoZWFkZXIg4oCTIGl0JiMzOTtzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBzdGF5IG9uIHRvcCBvZiB0aGUgbGF0ZXN0IEFQSSBtb2RpZmljYXRpb25zLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIGEgcXVpY2sgcmV2aWV3LCBidXQgSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBwb3RlbnRpYWxseSBzdWJ0bGUgYnV0IGltcG9ydGFudCBkZXRhaWxzIHRoYXQgSSBzaG91bGQgcmVmcmVzaCBteSBtZW1vcnkgb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqL1xuICAgMjpcdCNpZm5kZWYgX1VBUElfX0xJTlVYX0lGX0FERFJfSFxuICAgMzpcdCNkZWZpbmUgX1VBUElfX0xJTlVYX0lGX0FERFJfSFxuICAgNDpcdFxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiAgIDc6XHRcbiAgIDg6XHRzdHJ1Y3QgaWZhZGRybXNnIHtcbiAgIDk6XHRcdF9fdThcdFx0aWZhX2ZhbWlseTtcbiAgMTA6XHRcdF9fdThcdFx0aWZhX3ByZWZpeGxlbjtcdC8qIFRoZSBwcmVmaXggbGVuZ3RoXHRcdCovXG4gIDExOlx0XHRfX3U4XHRcdGlmYV9mbGFncztcdC8qIEZsYWdzXHRcdFx0Ki9cbiAgMTI6XHRcdF9fdThcdFx0aWZhX3Njb3BlO1x0LyogQWRkcmVzcyBzY29wZVx0XHQqL1xuICAxMzpcdFx0X191MzJcdFx0aWZhX2luZGV4O1x0LyogTGluayBpbmRleFx0XHRcdCovXG4gIDE0Olx0fTtcbiAgMTU6XHRcbiAgMTY6XHQvKlxuICAxNzpcdCAqIEltcG9ydGFudCBjb21tZW50OlxuICAxODpcdCAqIElGQV9BRERSRVNTIGlzIHByZWZpeCBhZGRyZXNzLCByYXRoZXIgdGhhbiBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcy5cbiAgMTk6XHQgKiBJdCBtYWtlcyBubyBkaWZmZXJlbmNlIGZvciBub3JtYWxseSBjb25maWd1cmVkIGJyb2FkY2FzdCBpbnRlcmZhY2VzLFxuICAyMDpcdCAqIGJ1dCBmb3IgcG9pbnQtdG8tcG9pbnQgSUZBX0FERFJFU1MgaXMgREVTVElOQVRJT04gYWRkcmVzcyxcbiAgMjE6XHQgKiBsb2NhbCBhZGRyZXNzIGlzIHN1cHBsaWVkIGluIElGQV9MT0NBTCBhdHRyaWJ1dGUuXG4gIDIyOlx0ICpcbiAgMjM6XHQgKiBJRkFfRkxBR1MgaXMgYSB1MzIgYXR0cmlidXRlIHRoYXQgZXh0ZW5kcyB0aGUgdTggZmllbGQgaWZhX2ZsYWdzLlxuICAyNDpcdCAqIElmIHByZXNlbnQsIHRoZSB2YWx1ZSBmcm9tIHN0cnVjdCBpZmFkZHJtc2cgd2lsbCBiZSBpZ25vcmVkLlxuICAyNTpcdCAqL1xuICAyNjpcdGVudW0ge1xuICAyNzpcdFx0SUZBX1VOU1BFQyxcbiAgMjg6XHRcdElGQV9BRERSRVNTLFxuICAyOTpcdFx0SUZBX0xPQ0FMLFxuICAzMDpcdFx0SUZBX0xBQkVMLFxuICAzMTpcdFx0SUZBX0JST0FEQ0FTVCxcbiAgMzI6XHRcdElGQV9BTllDQVNULFxuICAzMzpcdFx0SUZBX0NBQ0hFSU5GTyxcbiAgMzQ6XHRcdElGQV9NVUxUSUNBU1QsXG4gIDM1Olx0XHRJRkFfRkxBR1MsXG4gIDM2Olx0XHRJRkFfUlRfUFJJT1JJVFksXHQvKiB1MzIsIHByaW9yaXR5L21ldHJpYyBmb3IgcHJlZml4IHJvdXRlICovXG4gIDM3Olx0XHRJRkFfVEFSR0VUX05FVE5TSUQsXG4gIDM4Olx0XHRJRkFfUFJPVE8sXHRcdC8qIHU4LCBhZGRyZXNzIHByb3RvY29sICovXG4gIDM5Olx0XHRJRkFfTUNfVVNFUlMsXHRcdC8qIHUzMiwgbXVsdGljYXN0IGdyb3VwIHVzZXJzICovXG4gIDQwOlx0XHRfX0lGQV9NQVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4ODYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgaWZhZGRybXNnYCBTdHJ1Y3R1cmUgZm9yIE5ldHdvcmsgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBgc3RydWN0IGlmYWRkcm1zZ2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBpZmFfZmFtaWx5YCAoYSB1OCksIGBpZmFfcHJlZml4bGVuYCAoYW5vdGhlciB1OCksIGBpZmFfZmxhZ3NgIChhIHU4IGFnYWluKSwgYGlmYV9zY29wZWAgKGFub3RoZXIgdTghKSwgYW5kIGZpbmFsbHkgYGlmYV9pbmRleGAgKGEgdTMyKS4gTmljZSEgVGhlIHRvdGFsIHNpemUgaXMganVzdCA4IGJ5dGVzLCB3aGljaCBpcyBnb29kIOKAkyBubyB3YXN0ZWQgc3BhY2UgZnJvbSBwYWRkaW5nLiBUaGF0JiMzOTtzIHdoYXQgSSBsaWtlIHRvIHNlZS4KCkFuZCwgZXZlbiBiZXR0ZXIsIGFsbCB0aGUgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBXZSYjMzk7dmUgZ290IGBpZm0gPSBubG1zZ19kYXRhKG5saClgLCB0aGVuIHRoZSBmaWVsZHMgZ2V0IHNldDogYGlmYV9mYW1pbHlgIHRvIGBBRl9QQUNLRVRgLCBgaWZhX3ByZWZpeGxlbmAgdG8gMCwgYGlmYV9mbGFnc2AgZ2V0cyBhIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgYmFzZWQgb24gYGhhLSZndDtnbG9iYWxfdXNlYCAoZWl0aGVyIGBJRkFfRl9QRVJNQU5FTlRgIG9yIDApLCBgaWZhX3Njb3BlYCBzZXQgdG8gYFJUX1NDT1BFX0xJTktgLCBhbmQgYGlmYV9pbmRleGAgdG8gdGhlIGRldmljZSYjMzk7cyBpZmluZGV4LiBNYWtlcyBzZW5zZS4KCkJ1dCBJJiMzOTttIGEgYml0IGN1cmlvdXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgbWVtb3J5IGFsbG9jYXRpb24uIFNpbmNlIGBubG1zZ19wdXRgIGlzIGludm9sdmVkLCBJIHNob3VsZCBjb25maXJtIHRoYXQgYG5sbXNnX3B1dGAgemVyb2VzIG9yIGluaXRpYWxpemVzIHRoZSBhbGxvY2F0ZWQgcGF5bG9hZCBzcGFjZS4gR290dGEgY2hlY2sgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB0byBiZSBzdXJlLiBJdCYjMzk7cyBnb29kIHRvIGtlZXAgdHJhY2sgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmxtc2dfcHV0XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0bGluay5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGxpbmsuaC0zNy0gKiAgIG5sbXNnX25ldygpXHRcdFx0Y3JlYXRlIGEgbmV3IG5ldGxpbmsgbWVzc2FnZVxuaW5jbHVkZS9uZXQvbmV0bGluay5oOjM4OiAqICAgbmxtc2dfcHV0KClcdFx0XHRhZGQgYSBuZXRsaW5rIG1lc3NhZ2UgdG8gYW4gc2tiXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6Mzk6ICogICBubG1zZ19wdXRfYW5zd2VyKClcdFx0XHRjYWxsYmFjayBiYXNlZCBubG1zZ19wdXQoKVxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTQwLSAqICAgbmxtc2dfZW5kKClcdFx0XHRmaW5hbGl6ZSBuZXRsaW5rIG1lc3NhZ2Vcbi0tXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg9OTU1PXN0YXRpYyBpbmxpbmUgdTMyIG5sbXNnX3NlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saClcbi0tXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtOTk0LSAqL1xuaW5jbHVkZS9uZXQvbmV0bGluay5oOjk5NTpzdGF0aWMgaW5saW5lIHN0cnVjdCBubG1zZ2hkciAqbmxtc2dfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtOTk2LVx0XHRcdFx0XHQgaW50IHR5cGUsIGludCBwYXlsb2FkLCBpbnQgZmxhZ3MpXG4tLVxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTEwMDAtXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6MTAwMTpcdHJldHVybiBfX25sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCB0eXBlLCBwYXlsb2FkLCBmbGFncyk7XG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtMTAwMi19XG4tLVxuaW5jbHVkZS9uZXQvbmV0bGluay5oPTEwMzY9c3RhdGljIGlubGluZSBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnX3B1dF9hbnN3ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtMTA0MC17XG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6MTA0MTpcdHJldHVybiBubG1zZ19wdXQoc2tiLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLCBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTEwNDItXHRcdFx0IHR5cGUsIHBheWxvYWQsIGZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg2NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIE5ldGxpbmsgRGV0YWlscyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgTmV0bGluayBtZXNzYWdlcyBhcmUgYmVpbmcgY29uc3RydWN0ZWQgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGp1bXAgaW50byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IHRoZSBgX19ubG1zZ19wdXRgIGZ1bmN0aW9uLiBJdCBzaG91bGQgYmUgaW4gYG5ldC9uZXRsaW5rL2FmX25ldGxpbmsuY2AsIG9yIGF0IGxlYXN0IGNsb3NlbHkgcmVsYXRlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoaXMgcHJpbWl0aXZlIGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgbGF5ZXIuIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBzb21ldGhpbmcgYW1pc3Mgd2l0aCB0aGUgbWVzc2FnZSBoZWFkZXIgY29uc3RydWN0aW9uIG9yIHBlcmhhcHMgZGF0YSBhbGlnbm1lbnQuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpZGVudGlmeSBzb21lIGlzc3VlcyBieSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX25sbXNnX3B1dFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0yNTQzPWludCBpc2NzaV9yZWN2X3BkdShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4sIHN0cnVjdCBpc2NzaV9oZHIgKmhkcixcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNTY1LVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM6MjU2NjpcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgMCwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjU2Ny1cdGV2ID0gbmxtc2dfZGF0YShubGgpO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI1ODE9aW50IGlzY3NpX29mZmxvYWRfbWVzZyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCxcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNTk1LVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM6MjU5NjpcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgMCwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjU5Ny1cdGV2ID0gbmxtc2dfZGF0YShubGgpO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI2MTY9dm9pZCBpc2NzaV9jb25uX2Vycm9yX2V2ZW50KHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiwgZW51bSBpc2NzaV9lcnIgZXJyb3IpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjY2MC1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjI2NjE6XHRubGggPSBfX25sbXNnX3B1dChza2IsIDAsIDAsIDAsIChsZW4gLSBzaXplb2YoKm5saCkpLCAwKTtcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI2NjItXHRldiA9IG5sbXNnX2RhdGEobmxoKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0yNjc2PXZvaWQgaXNjc2lfY29ubl9sb2dpbl9ldmVudChzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4sXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjY5NS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjI2OTY6XHRubGggPSBfX25sbXNnX3B1dChza2IsIDAsIDAsIDAsIChsZW4gLSBzaXplb2YoKm5saCkpLCAwKTtcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI2OTctXHRldiA9IG5sbXNnX2RhdGEobmxoKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0yNzEwPXZvaWQgaXNjc2lfcG9zdF9ob3N0X2V2ZW50KHVpbnQzMl90IGhvc3Rfbm8sIHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKnRyYW5zcG9ydCxcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNzI1LVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM6MjcyNjpcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgMCwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjcyNy1cdGV2ID0gbmxtc2dfZGF0YShubGgpO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI3NDE9dm9pZCBpc2NzaV9waW5nX2NvbXBfZXZlbnQodWludDMyX3QgaG9zdF9ubywgc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI3NTUtXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzoyNzU2Olx0bmxoID0gX19ubG1zZ19wdXQoc2tiLCAwLCAwLCAwLCAobGVuIC0gc2l6ZW9mKCpubGgpKSwgMCk7XG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNzU3LVx0ZXYgPSBubG1zZ19kYXRhKG5saCk7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM9Mjc3MT1pc2NzaV9pZl9zZW5kX3JlcGx5KHUzMiBwb3J0aWQsIGludCB0eXBlLCB2b2lkICpwYXlsb2FkLCBpbnQgc2l6ZSlcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNzgyLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM6Mjc4MzpcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgdHlwZSwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjc4NC1cdG1lbWNweShubG1zZ19kYXRhKG5saCksIHBheWxvYWQsIHNpemUpO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI3ODk9aXNjc2lfaWZfZ2V0X3N0YXRzKHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IG5sbXNnaGRyICpubGgpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjgyMS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjI4MjI6XHRcdG5saHN0YXQgPSBfX25sbXNnX3B1dChza2JzdGF0LCAwLCAwLCAwLFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjgyMy1cdFx0XHRcdCAgICAgIChsZW4gLSBzaXplb2YoKm5saHN0YXQpKSwgMCk7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM9Mjg1OD1pbnQgaXNjc2lfc2Vzc2lvbl9ldmVudChzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3Npb24sXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjg4MC1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjI4ODE6XHRubGggPSBfX25sbXNnX3B1dChza2IsIDAsIDAsIDAsIChsZW4gLSBzaXplb2YoKm5saCkpLCAwKTtcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI4ODItXHRldiA9IG5sbXNnX2RhdGEobmxoKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0zMjk4PWlzY3NpX2dldF9jaGFwKHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IG5sbXNnaGRyICpubGgpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMzMzNy1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjMzMzg6XHRcdG5saGNoYXAgPSBfX25sbXNnX3B1dChza2JjaGFwLCAwLCAwLCAwLFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMzMzOS1cdFx0XHRcdCAgICAgIChsZW4gLSBzaXplb2YoKm5saGNoYXApKSwgMCk7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM9MzcwMz1pc2NzaV9nZXRfaG9zdF9zdGF0cyhzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCBubG1zZ2hkciAqbmxoKVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTM3NDEtXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzozNzQyOlx0XHRubGhob3N0X3N0YXRzID0gX19ubG1zZ19wdXQoc2tiaG9zdF9zdGF0cywgMCwgMCwgMCxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTM3NDMtXHRcdFx0XHQgICAgICAobGVuIC0gc2l6ZW9mKCpubGhob3N0X3N0YXRzKSksIDApO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0bGluay5oPTMxNz1zdHJ1Y3Qgbmxtc2doZHIgKlxuaW5jbHVkZS9saW51eC9uZXRsaW5rLmg6MzE4Ol9fbmxtc2dfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgbGVuLCBpbnQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9uZXRsaW5rLmgtMzE5LVxuLS1cbmluY2x1ZGUvbmV0L25ldGxpbmsuaD05OTU9c3RhdGljIGlubGluZSBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLS1cbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0xMDAwLVxuaW5jbHVkZS9uZXQvbmV0bGluay5oOjEwMDE6XHRyZXR1cm4gX19ubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgdHlwZSwgcGF5bG9hZCwgZmxhZ3MpO1xuaW5jbHVkZS9uZXQvbmV0bGluay5oLTEwMDItfVxuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0yMTQ0PXN0cnVjdCBubG1zZ2hkciAqXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjE0NTpfX25sbXNnX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgaW50IGxlbiwgaW50IGZsYWdzKVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTIxNDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE1NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgTmV0bGluayBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG5ldGxpbmsgbWVzc2FnZSBpcyBjb25zdHJ1Y3RlZCBhbmQgc2VudC4gTXkgZmlyc3QgbW92ZSBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgX19ubG1zZ19wdXRgIGluIGBuZXQvbmV0bGluay9hZl9uZXRsaW5rLmNgLiBUaGF0IGZ1bmN0aW9uIGlzIHRoZSBjb3JlIG9mIG1lc3NhZ2UgY3JlYXRpb24sIHNvIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgc3VzcGVjdCBpdCYjMzk7cyB3aGVyZSB0aGUgbWVzc2FnZSBoZWFkZXJzIGFuZCBwb3RlbnRpYWxseSB0aGUgcGF5bG9hZCBhcmUgYXNzZW1ibGVkLgoKTGV0JiMzOTtzIHF1aWNrbHkgbmF2aWdhdGUgdG8gYXJvdW5kIGxpbmUgMjE0NSBpbiB0aGUgZmlsZTsgdGhhdCBzaG91bGQgcHV0IG1lIGluIHRoZSBuZWlnaGJvcmhvb2Qgb2Ygd2hlcmUgSSYjMzk7ZCBleHBlY3QgdGhlIGNyaXRpY2FsIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljIHRvIGJlLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0bGluay9hZl9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNDA6XHRcdHNrX2Zvcl9lYWNoX2JvdW5kX3NhZmUoc2ssIHRtcCwgXHUwMDI2dGJsLVx1MDAzZW1jX2xpc3QpXG4yMTQxOlx0XHRcdG5ldGxpbmtfdXBkYXRlX3NvY2tldF9tYyhubGtfc2soc2spLCBncm91cCwgMCk7XG4yMTQyOlx0fVxuMjE0MzpcdFxuMjE0NDpcdHN0cnVjdCBubG1zZ2hkciAqXG4yMTQ1Olx0X19ubG1zZ19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBvcnRpZCwgdTMyIHNlcSwgaW50IHR5cGUsIGludCBsZW4sIGludCBmbGFncylcbjIxNDY6XHR7XG4yMTQ3Olx0XHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbjIxNDg6XHRcdGludCBzaXplID0gbmxtc2dfbXNnX3NpemUobGVuKTtcbjIxNDk6XHRcbjIxNTA6XHRcdG5saCA9IHNrYl9wdXQoc2tiLCBOTE1TR19BTElHTihzaXplKSk7XG4yMTUxOlx0XHRubGgtXHUwMDNlbmxtc2dfdHlwZSA9IHR5cGU7XG4yMTUyOlx0XHRubGgtXHUwMDNlbmxtc2dfbGVuID0gc2l6ZTtcbjIxNTM6XHRcdG5saC1cdTAwM2VubG1zZ19mbGFncyA9IGZsYWdzO1xuMjE1NDpcdFx0bmxoLVx1MDAzZW5sbXNnX3BpZCA9IHBvcnRpZDtcbjIxNTU6XHRcdG5saC1cdTAwM2VubG1zZ19zZXEgPSBzZXE7XG4yMTU2Olx0XHRpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpIHx8IE5MTVNHX0FMSUdOKHNpemUpIC0gc2l6ZSAhPSAwKVxuMjE1NzpcdFx0XHRtZW1zZXQobmxtc2dfZGF0YShubGgpICYjNDM7IGxlbiwgMCwgTkxNU0dfQUxJR04oc2l6ZSkgLSBzaXplKTtcbjIxNTg6XHRcdHJldHVybiBubGg7XG4yMTU5Olx0fVxuMjE2MDpcdEVYUE9SVF9TWU1CT0woX19ubG1zZ19wdXQpO1xuMjE2MTpcdFxuMjE2MjpcdHN0YXRpYyBzaXplX3RcbjIxNjM6XHRuZXRsaW5rX2Fja190bHZfbGVuKHN0cnVjdCBuZXRsaW5rX3NvY2sgKm5saywgaW50IGVycixcbjIxNjQ6XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NjgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIEkgZGVsdmUgaW50byB0aGlzIGNvZGUgc25pcHBldDoKCioqQW5hbHl6aW5nIE5ldHdvcmsgRGV2aWNlIEhhcmR3YXJlIEFkZHJlc3MgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IG11bHRpY2FzdCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgaW4gdGhlIG5ldHdvcmsgc3RhY2suIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBoYS0mZ3Q7YWRkcmAgYW5kIGBkZXYtJmd0O2FkZHJfbGVuYCB2YXJpYWJsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUgdG8gdGhlIGFjdHVhbCBoYXJkd2FyZSBhZGRyZXNzIHdpdGhpbiB0aGUgbXVsdGljYXN0IGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cmFjaW5nIHRoaXMgdGhyb3VnaCB0aGUgYHJ0bmxfZmlsbF9tY2FkZHJgIGZ1bmN0aW9uLgoKVGhlIGNvcmUgb2YgbXkgaW50ZXJlc3QgaGVyZSBpcyB0aGF0IGBubGFfcHV0YCBjYWxsOiBgbmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi0mZ3Q7YWRkcl9sZW4sIGhhLSZndDthZGRyKWAuIFRoaXMgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgbGluZSB3aGVyZSB0aGUgbXVsdGljYXN0IGhhcmR3YXJlIGFkZHJlc3MgKGBoYS0mZ3Q7YWRkcmApIGlzIGJlaW5nIHBhY2tlZCBpbnRvIHRoZSBOZXRsaW5rIG1lc3NhZ2UgYnVmZmVyIChgc2tiYCkgdW5kZXIgdGhlIGBJRkFfTVVMVElDQVNUYCBhdHRyaWJ1dGUuIFRoZSBgZGV2LSZndDthZGRyX2xlbmAgcGFydCBpcyBpbXBvcnRhbnQsIGFzIGl0IHNwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIHRoaXMgaGFyZHdhcmUgYWRkcmVzcyB3aGljaCBpcyBhbHNvIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgZGV2aWNlLgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzLCBJIG5lZWQgYSBxdWljayByZWZyZXNoZXIgb24gdGhlIHN0cnVjdHVyZSBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgIGluIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpYyBmaWVsZHMgZGVmaW5lZCBpbiB0aGF0IHN0cnVjdHVyZSB0byBjb25maXJtIHRoZSB1c2FnZSBhbmQgcHVycG9zZSBvZiB0aGUgYGhhLSZndDthZGRyYCBwb2ludGVyLiBJJiMzOTtsbCBjaGVjayBpdHMgZGVmaW5pdGlvbiB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGhhcmR3YXJlIGFkZHJlc3NlcyBhcmUgcmVwcmVzZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBuZXRkZXZfaHdfYWRkciBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMzU9c3RydWN0IHNrX2J1ZmY7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzNi1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM3OnN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOC1cdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzU4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBEZXZpY2UgSGVhZGVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIG5ldHdvcmsgZGV2aWNlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHNvIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDIzNy4gSSYjMzk7bSBob3BpbmcgdGhhdCBwYXJ0aWN1bGFyIHNlY3Rpb24gY29udGFpbnMgdGhlIGRlZmluaXRpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBJJiMzOTttIGxvb2tpbmcgZm9yIHJlZ2FyZGluZyB0aGUgYmFzaWMgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlIG9yIHBlcmhhcHMgdGhlIGluaXRpYWwgc2V0dXAgcm91dGluZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGVsZW1lbnRzIGxpa2UgZGF0YSBzdHJ1Y3R1cmVzIGZvciBxdWV1ZXMsIGludGVycnVwdCBtYW5hZ2VtZW50LCBvciBwb3RlbnRpYWxseSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbiBwb2ludGVycy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjM1Olx0c3RydWN0IHNrX2J1ZmY7XG4gMjM2Olx0XG4gMjM3Olx0c3RydWN0IG5ldGRldl9od19hZGRyIHtcbiAyMzg6XHRcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gMjM5Olx0XHRzdHJ1Y3QgcmJfbm9kZVx0XHRub2RlO1xuIDI0MDpcdFx0dW5zaWduZWQgY2hhclx0XHRhZGRyW01BWF9BRERSX0xFTl07XG4gMjQxOlx0XHR1bnNpZ25lZCBjaGFyXHRcdHR5cGU7XG4gMjQyOlx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX0xBTlx0XHQxXG4gMjQzOlx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX1NBTlx0XHQyXG4gMjQ0Olx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX1VOSUNBU1RcdDNcbiAyNDU6XHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNUXHQ0XG4gMjQ2Olx0XHRib29sXHRcdFx0Z2xvYmFsX3VzZTtcbiAyNDc6XHRcdGludFx0XHRcdHN5bmNfY250O1xuIDI0ODpcdFx0aW50XHRcdFx0cmVmY291bnQ7XG4gMjQ5Olx0XHRpbnRcdFx0XHRzeW5jZWQ7XG4gMjUwOlx0XHRzdHJ1Y3QgcmN1X2hlYWRcdFx0cmN1X2hlYWQ7XG4gMjUxOlx0fTtcbiAyNTI6XHRcbiAyNTM6XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCB7XG4gMjU0Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuIDI1NTpcdFx0aW50XHRcdFx0Y291bnQ7XG4gMjU2Olx0XG4gMjU3Olx0XHQvKiBBdXhpbGlhcnkgdHJlZSBmb3IgZmFzdGVyIGxvb2t1cCBvbiBhZGRpdGlvbiBhbmQgZGVsZXRpb24gKi9cbiAyNTg6XHRcdHN0cnVjdCByYl9yb290XHRcdHRyZWU7XG4gMjU5Olx0fTtcbiAyNjA6XHRcbiAyNjE6XHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobCkgKChsKS1cdTAwM2Vjb3VudClcbiAyNjI6XHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkobCkgKG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobCkgPT0gMClcbiAyNjM6XHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIGwpIFxcXG4gMjY0Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCBcdTAwMjYobCktXHUwMDNlbGlzdCwgbGlzdClcbiAyNjU6XHRcbiAyNjY6XHQjZGVmaW5lIG5ldGRldl91Y19jb3VudChkZXYpIG5ldGRldl9od19hZGRyX2xpc3RfY291bnQoXHUwMDI2KGRldiktXHUwMDNldWMpXG4gMjY3Olx0I2RlZmluZSBuZXRkZXZfdWNfZW1wdHkoZGV2KSBuZXRkZXZfaHdfYWRkcl9saXN0X2VtcHR5KFx1MDAyNihkZXYpLVx1MDAzZXVjKVxuIDI2ODpcdCNkZWZpbmUgbmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikgXFxcbiAyNjk6XHRcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIFx1MDAyNihkZXYpLVx1MDAzZXVjKVxuIDI3MDpcdCNkZWZpbmUgbmV0ZGV2X2Zvcl9lYWNoX3N5bmNlZF91Y19hZGRyKF9oYSwgX2RldikgXFxcbiAyNzE6XHRcdG5ldGRldl9mb3JfZWFjaF91Y19hZGRyKChfaGEpLCAoX2RldikpIFxcXG4gMjcyOlx0XHRcdGlmICgoX2hhKS1cdTAwM2VzeW5jX2NudClcbiAyNzM6XHRcbiAyNzQ6XHQjZGVmaW5lIG5ldGRldl9tY19jb3VudChkZXYpIG5ldGRldl9od19hZGRyX2xpc3RfY291bnQoXHUwMDI2KGRldiktXHUwMDNlbWMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjk0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBoYWAgRW50cnkgQWRkaXRpb24gaW4gdGhlIE5ldHdvcmsgQ29yZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRob3NlIGBoYWAgKGhhcmR3YXJlIGFkZHJlc3MsIHByZXN1bWFibHkpIGVudHJpZXMgYXJlIGJlaW5nIGFkZGVkIGluLCBzYXksIGBkZXZfbWNfYWRkYCBvciBzaW1pbGFyIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgcG9raW5nIGFyb3VuZCBpcyBpbiBgbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY2AuIFRoYXQgZmlsZSBsaWtlbHkgaGFuZGxlcyBhIGdvb2QgY2h1bmsgb2YgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBvcGVyYXRpb25zIGZvciBtYW5hZ2luZyB0aG9zZSBsaXN0cyBvZiBkZXZpY2UgYWRkcmVzc2VzLiBJdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIHRoZSBgaGFgIGluc2VydGlvbiBsb2dpYyBhbmQgaG9wZWZ1bGx5IHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBiZWhpbmQgaXQuIFRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19od19hZGRyX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTUzPV9faHdfYWRkcl9jcmVhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzQtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjc1OnN0YXRpYyBpbnQgX19od19hZGRyX2FkZF9leChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzYtXHRcdFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzMi1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMzOnN0YXRpYyBpbnQgX19od19hZGRyX2FkZChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM0LVx0XHRcdCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzYte1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMzc6XHRyZXR1cm4gX19od19hZGRyX2FkZF9leChsaXN0LCBhZGRyLCBhZGRyX2xlbiwgYWRkcl90eXBlLCBmYWxzZSwgZmFsc2UsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzOC1cdFx0XHRcdDAsIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTIxMj1zdGF0aWMgaW50IF9faHdfYWRkcl9zeW5jX29uZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdG9fbGlzdCxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxNy1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjE4Olx0ZXJyID0gX19od19hZGRyX2FkZF9leCh0b19saXN0LCBoYS1cdTAwM2VhZGRyLCBhZGRyX2xlbiwgaGEtXHUwMDNldHlwZSxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjE5LVx0XHRcdCAgICAgICBmYWxzZSwgdHJ1ZSwgaGEtXHUwMDNlc3luY19jbnQsIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY3OT1pbnQgZGV2X2FkZHJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjg4LVx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZihhZGRyKSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY4OTpcdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgc2l6ZW9mKGFkZHIpLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02OTAtXHRcdFx0ICAgIE5FVERFVl9IV19BRERSX1RfTEFOKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTcyOT1pbnQgZGV2X2FkZHJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MzgtXHRcdHJldHVybiBlcnI7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjczOTpcdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLCBhZGRyX3R5cGUpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03NDAtXHRpZiAoIWVycilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTc5Mj1pbnQgZGV2X3VjX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03OTYtXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Nzk3Olx0ZXJyID0gX19od19hZGRyX2FkZF9leChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzk4LVx0XHRcdCAgICAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QsIHRydWUsIGZhbHNlLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODE1PWludCBkZXZfdWNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04MTktXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODIwOlx0ZXJyID0gX19od19hZGRyX2FkZChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODIxLVx0XHRcdCAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9OTc3PWludCBkZXZfbWNfYWRkX2V4Y2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4MS1cdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5ODI6XHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFx1MDAyNmRldi1cdTAwM2VtYywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05ODMtXHRcdFx0ICAgICAgIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNULCB0cnVlLCBmYWxzZSxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk5Mj1zdGF0aWMgaW50IF9fZGV2X21jX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTk3LVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjk5ODpcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgoXHUwMDI2ZGV2LVx1MDAzZW1jLCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4sXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk5OS1cdFx0XHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIGdsb2JhbCwgZmFsc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODEzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgRGV2aWNlIEFkZHJlc3MgQ3JlYXRpb24gRnVuY3Rpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBuZXR3b3JrIGhhcmR3YXJlIGFkZHJlc3NlcyBhcmUgYmVpbmcgY3JlYXRlZCwgc28gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBsaWtlbHkgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBfX2h3X2FkZHJfY3JlYXRlYCB3aXRoaW4gYG5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNgLiBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIGhvbGRzIHRoZSBjb3JlIGxvZ2ljIGZvciBnZW5lcmF0aW5nIG9yIGFzc2lnbmluZyB0aG9zZSBNQUMgYW5kIG90aGVyIGhhcmR3YXJlIGFkZHJlc3Nlcy4gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSBjZW50cmFsIHRvIHRoZSBvdmVyYWxsIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHR9XG4gIDUxOlx0XG4gIDUyOlx0c3RhdGljIHN0cnVjdCBuZXRkZXZfaHdfYWRkcipcbiAgNTM6XHRfX2h3X2FkZHJfY3JlYXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcbiAgNTQ6XHRcdFx0IHVuc2lnbmVkIGNoYXIgYWRkcl90eXBlLCBib29sIGdsb2JhbCwgYm9vbCBzeW5jKVxuICA1NTpcdHtcbiAgNTY6XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4gIDU3Olx0XHRpbnQgYWxsb2Nfc2l6ZTtcbiAgNTg6XHRcbiAgNTk6XHRcdGFsbG9jX3NpemUgPSBzaXplb2YoKmhhKTtcbiAgNjA6XHRcdGlmIChhbGxvY19zaXplIFx1MDAzYyBMMV9DQUNIRV9CWVRFUylcbiAgNjE6XHRcdFx0YWxsb2Nfc2l6ZSA9IEwxX0NBQ0hFX0JZVEVTO1xuICA2MjpcdFx0aGEgPSBrbWFsbG9jKGFsbG9jX3NpemUsIEdGUF9BVE9NSUMpO1xuICA2MzpcdFx0aWYgKCFoYSlcbiAgNjQ6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDY1Olx0XHRtZW1jcHkoaGEtXHUwMDNlYWRkciwgYWRkciwgYWRkcl9sZW4pO1xuICA2NjpcdFx0aGEtXHUwMDNldHlwZSA9IGFkZHJfdHlwZTtcbiAgNjc6XHRcdGhhLVx1MDAzZXJlZmNvdW50ID0gMTtcbiAgNjg6XHRcdGhhLVx1MDAzZWdsb2JhbF91c2UgPSBnbG9iYWw7XG4gIDY5Olx0XHRoYS1cdTAwM2VzeW5jZWQgPSBzeW5jID8gMSA6IDA7XG4gIDcwOlx0XHRoYS1cdTAwM2VzeW5jX2NudCA9IDA7XG4gIDcxOlx0XG4gIDcyOlx0XHRyZXR1cm4gaGE7XG4gIDczOlx0fVxuICA3NDpcdFxuICA3NTpcdHN0YXRpYyBpbnQgX19od19hZGRyX2FkZF9leChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbiAgNzY6XHRcdFx0XHQgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxuICA3NzpcdFx0XHRcdCAgICB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYyxcbiAgNzg6XHRcdFx0XHQgICAgaW50IHN5bmNfY291bnQsIGJvb2wgZXhjbHVzaXZlKVxuICA3OTpcdHtcbiAgODA6XHRcdHN0cnVjdCByYl9ub2RlICoqaW5zX3BvaW50ID0gXHUwMDI2bGlzdC1cdTAwM2V0cmVlLnJiX25vZGUsICpwYXJlbnQgPSBOVUxMO1xuICA4MTpcdFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiAgODI6XHRcbiAgODM6XHRcdGlmIChhZGRyX2xlbiBcdTAwM2UgTUFYX0FERFJfTEVOKVxuICA4NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgODU6XHRcbiAgODY6XHRcdHdoaWxlICgqaW5zX3BvaW50KSB7XG4gIDg3Olx0XHRcdGludCBkaWZmO1xuICA4ODpcdFxuICA4OTpcdFx0XHRoYSA9IHJiX2VudHJ5KCppbnNfcG9pbnQsIHN0cnVjdCBuZXRkZXZfaHdfYWRkciwgbm9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTU5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IEFkZHJlc3MgRHVtcCBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgbXVsdGljYXN0IGFkZHJlc3MgaGFuZGxpbmcgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlc2UgYWRkcmVzc2VzIGFyZSBkdW1wZWQgYW5kIGhhbmRsZWQgd2l0aCBuZXRsaW5rLiBGaXJzdCwgSSBzZWUgdGhhdCBgX19od19hZGRyX2NyZWF0ZWAgZG9lcyBhIHN0cmFpZ2h0IGBtZW1jcHlgIGZyb20gdGhlIHByb3ZpZGVkIGFkZHJlc3MgKGBhZGRyYCkgdG8gdGhlIGhhcmR3YXJlIGFkZHJlc3Mgc3RydWN0dXJlIChgaGEtJmd0O2FkZHJgKS4gVGhlIGxlbmd0aCBpcyBkZXRlcm1pbmVkIGJ5IGBkZXYtJmd0O2FkZHJfbGVuYCwgd2hpY2ggbWFrZXMgc2Vuc2UuCgpUaGVuLCBsb29raW5nIGF0IGBydG5sX2ZpbGxfbWNhZGRyYCwgdGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGBubGFfcHV0YCBpcyB1c2VkIHRvIGluc2VydCB0aGlzIGhhcmR3YXJlIGFkZHJlc3MgaW50byB0aGUgbmV0bGluayBtZXNzYWdlIHVzaW5nIGBJRkFfTVVMVElDQVNUYC4gSXQgdXNlcyB0aGUgKmV4YWN0KiBzYW1lIGxlbmd0aCwgYGRldi0mZ3Q7YWRkcl9sZW5gLCB0aGF0IHdhcyB1c2VkIGR1cmluZyB0aGUgYWRkcmVzcyBjcmVhdGlvbi4gVGhhdCYjMzk7cyBnb29kLCBjb25zaXN0ZW50IGRhdGEgaGFuZGxpbmcgc28gZmFyLiBBbmQgaW1wb3J0YW50bHksIGBubGFfcHV0YCB0YWtlcyBjYXJlIG9mIHBhZGRpbmcgdGhlIGF0dHJpYnV0ZSB0byA0LWJ5dGUgYWxpZ25tZW50LCB3aGljaCBJIGV4cGVjdC4KCk5vdywgSSYjMzk7bSBleGFtaW5pbmcgYHJ0bmxfZHVtcF9tY2FkZHJgLCB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IGR1bXBpbmcgdGhlc2UgbXVsdGljYXN0IGFkZHJlc3Nlcy4gSSBjYW4gc2VlIGl0JiMzOTtzIHRha2luZyBhIGBzdHJ1Y3Qgc2tfYnVmZmAgZm9yIHRoZSBuZXRsaW5rIG1lc3NhZ2UsIGEgYHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrYCB0aGF0IGhvbGRzIHRoZSBzdGF0ZSwgYW5kIHBvdGVudGlhbGx5IGFuIGBpZmluZGV4YCB0byBmaWx0ZXIgYnkuIEl0IGFwcGVhcnMgaXQgd2lsbCBpdGVyYXRlIHRocm91Z2ggZWl0aGVyIGEgc3BlY2lmaWMgZGV2aWNlIG9yIGFsbCBkZXZpY2VzLCBkZXBlbmRpbmcgb24gdGhlIGBpZmluZGV4YCB2YWx1ZSBwYXNzZWQgaW4gdGhlIHJlcXVlc3QuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGluIHRoYXQgY2FsbGJhY2smIzM5O3MgY29udGV4dCwgYGNiLSZndDtjdHhgLiBUaGFua2Z1bGx5LCBpdCYjMzk7cyBtZW50aW9uZWQgdGhhdCB0aGUgbmV0bGluayBjb3JlIGl0c2VsZiB6ZXJvLWZpbGxzIGBjYi0mZ3Q7Y3R4YCBhdCB0aGUgc3RhcnQgb2YgYSBkdW1wLiBUaGF0JiMzOTtzIGEgcmVsaWFibGUgaW5pdGlhbGl6YXRpb24gYW5kIGdvb2QgdG8ga25vdy4gTm93IEkgbmVlZCB0byBjaGVjayBob3cgdGhlIGBmb3JfZWFjaF9uZXRkZXZfZHVtcGAgbWFjcm8gd29ya3MsIGFzIGl0IHNlZW1zIHRvIGJlIHRoZSBvbmUgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGRldmljZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvci4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGlzIG1hY3JvIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9yX2VhY2hfbmV0ZGV2X2R1bXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7LmNsYW5nLWZvcm1hdD03MT1Gb3JFYWNoTWFjcm9zOlxuLS1cbi5jbGFuZy1mb3JtYXQtMzQ2LSAgLSAmIzM5O2Zvcl9lYWNoX25ldGRldl9jb250aW51ZV9yZXZlcnNlJiMzOTtcbi5jbGFuZy1mb3JtYXQ6MzQ3OiAgLSAmIzM5O2Zvcl9lYWNoX25ldGRldl9kdW1wJiMzOTtcbi5jbGFuZy1mb3JtYXQtMzQ4LSAgLSAmIzM5O2Zvcl9lYWNoX25ldGRldl9mZWF0dXJlJiMzOTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTMzNzE9aW50IGNhbGxfbmV0ZGV2aWNlX25vdGlmaWVyc19pbmZvKHVuc2lnbmVkIGxvbmcgdmFsLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzM5My1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzM5NDojZGVmaW5lIGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZCwgaWZpbmRleClcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMzOTUtXHRmb3IgKDsgKGQgPSB4YV9maW5kKFx1MDAyNihuZXQpLVx1MDAzZWRldl9ieV9pbmRleCwgXHUwMDI2aWZpbmRleCxcdFx0XFxcbi0tXG5uZXQvODAyMXEvdmxhbnByb2MuYz0xNjY9c3RhdGljIHZvaWQgKnZsYW5fc2VxX2Zyb21faW5kZXgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuLS1cbm5ldC84MDIxcS92bGFucHJvYy5jLTE3MC1cbm5ldC84MDIxcS92bGFucHJvYy5jOjE3MTpcdGZvcl9lYWNoX25ldGRldl9kdW1wKHNlcV9maWxlX25ldChzZXEpLCBkZXYsIGlmaW5kZXgpIHtcbm5ldC84MDIxcS92bGFucHJvYy5jLTE3Mi1cdFx0aWYgKCFpc192bGFuX2RldihkZXYpKVxuLS1cbm5ldC9jb3JlL25ldC1wcm9jZnMuYz0xMD1zdGF0aWMgdm9pZCAqZGV2X3NlcV9mcm9tX2luZGV4KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbi0tXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMTQtXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmM6MTU6XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChzZXFfZmlsZV9uZXQoc2VxKSwgZGV2LCBpZmluZGV4KSB7XG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMTYtXHRcdCpwb3MgPSBkZXYtXHUwMDNlaWZpbmRleDtcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jPTgxPW5ldGRldl9ubF9wYWdlX3Bvb2xfZ2V0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmMtOTgtXHRtdXRleF9sb2NrKFx1MDAyNnBhZ2VfcG9vbHNfbG9jayk7XG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jOjk5Olx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBuZXRkZXYsIHN0YXRlLVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmMtMTAwLVx0XHQvKiBFaXRoZXIgdGhlIHByb3ZpZGVkIGlmaW5kZXggZG9lc24mIzM5O3QgZXhpc3Qgb3IgZG9uZSBkdW1waW5nICovXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjU0ND1zdGF0aWMgaW50IHJ0bmxfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2MTYtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNjE3Olx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAodGd0X25ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjYxOC1cdFx0aWYgKGxpbmtfZHVtcF9maWx0ZXJlZChkZXYsIG1hc3Rlcl9pZHgsIGtpbmRfb3BzKSlcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NjU1PXN0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDY4NC1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ2ODU6XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ2ODYtXHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTUyNzE9c3RhdGljIGludCBydG5sX2ZkYl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01MzAwLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTMwMTpcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTMwMi1cdFx0aWYgKGJycG9ydF9pZHggXHUwMDI2XHUwMDI2IChkZXYtXHUwMDNlaWZpbmRleCAhPSBicnBvcnRfaWR4KSlcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz02NjA0PXN0YXRpYyBpbnQgcnRubF9zdGF0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy02NjM1LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NjYzNjpcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjYzNy1cdFx0ZXJyID0gcnRubF9maWxsX3N0YXRzaW5mbyhza2IsIGRldiwgUlRNX05FV1NUQVRTLFxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYz02Mzg9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy02NDctXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NjQ4Olx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cdTAwM2Vwb3NfaWZpbmRleCkge1xubmV0L2V0aHRvb2wvbmV0bGluay5jLTY0OS1cdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTgwNz1zdGF0aWMgaW50IGV0aG5sX3BlcnBoeV9kdW1wX2FsbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtODE3LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjgxODpcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBldGhubF9jdHgtXHUwMDNlcG9zX2lmaW5kZXgpIHtcbm5ldC9ldGh0b29sL25ldGxpbmsuYy04MTktXHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuLS1cbm5ldC9ldGh0b29sL3R1bm5lbHMuYz0yNDE9aW50IGV0aG5sX3R1bm5lbF9pbmZvX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2V0aHRvb2wvdHVubmVscy5jLTI0OS1cdHJ0bmxfbG9jaygpO1xubmV0L2V0aHRvb2wvdHVubmVscy5jOjI1MDpcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2V0aHRvb2wvdHVubmVscy5jLTI1MS1cdFx0ZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jPTE5MzA9c3RhdGljIGludCBpbmV0X2R1bXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTE5NzQtXG5uZXQvaXB2NC9kZXZpbmV0LmM6MTk3NTpcdGZvcl9lYWNoX25ldGRldl9kdW1wKHRndF9uZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9pcHY0L2RldmluZXQuYy0xOTc2LVx0XHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jPTI0Mzg9c3RhdGljIGludCBpbmV0X25ldGNvbmZfZHVtcF9kZXZjb25mKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTI0NjYtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2NC9kZXZpbmV0LmM6MjQ2NzpcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2lwdjQvZGV2aW5ldC5jLTI0NjgtXHRcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTczOD1zdGF0aWMgaW50IGluZXQ2X25ldGNvbmZfZHVtcF9kZXZjb25mKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjYtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjc2NzpcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2lwdjYvYWRkcmNvbmYuYy03NjgtXHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz01NDM2PXN0YXRpYyBpbnQgaW5ldDZfZHVtcF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0ODAtXHRjYi1cdTAwM2VzZXEgPSBpbmV0Nl9iYXNlX3NlcSh0Z3RfbmV0KTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTQ4MTpcdGZvcl9lYWNoX25ldGRldl9kdW1wKHRndF9uZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ4Mi1cdFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTYxNzc9c3RhdGljIGludCBpbmV0Nl9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02MTk4LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2lwdjYvYWRkcmNvbmYuYzo2MTk5Olx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYyMDAtXHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG4tLVxubmV0L21jdHAvZGV2aWNlLmM9MTE0PXN0YXRpYyBpbnQgbWN0cF9kdW1wX2FkZHJpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbWN0cC9kZXZpY2UuYy0xMzQtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvbWN0cC9kZXZpY2UuYzoxMzU6XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgbWNiLVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9tY3RwL2RldmljZS5jLTEzNi1cdFx0aWYgKGlmaW5kZXggXHUwMDI2XHUwMDI2IGlmaW5kZXggIT0gZGV2LVx1MDAzZWlmaW5kZXgpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jPTEzNDg9c3RhdGljIGludCBtcGxzX25ldGNvbmZfZHVtcF9kZXZjb25mKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L21wbHMvYWZfbXBscy5jLTEzNzUtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvbXBscy9hZl9tcGxzLmM6MTM3NjpcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L21wbHMvYWZfbXBscy5jLTEzNzctXHRcdG1kZXYgPSBtcGxzX2Rldl9yY3UoZGV2KTtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTE5MTE9c3RhdGljIGludCB0Y19kdW1wX3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE5MzYtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE5Mzc6XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTkzOC1cdFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIyOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGR1bXBpdGAgRnVuY3Rpb24gSW1wbGVtZW50YXRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGhlcmUgZm9yIGltcGxlbWVudGluZyB0aGlzIHBhcnRpY3VsYXIgYGR1bXBpdGAgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgaG93IG90aGVycyBoYXZlIGRvbmUgaXQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgZXhpc3RpbmcgZXhhbXBsZXMgd2l0aGluIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGUgYHJ0bmxfc3RhdHNfZHVtcGAgb3IgYGluZXRfZHVtcF9hZGRyYCBpbXBsZW1lbnRhdGlvbnMgc2VlbSBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLCBsaWtlbHkgZGVhbGluZyB3aXRoIHNpbWlsYXIgbmV0d29yay1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBhbmQgaW50ZXJhY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaXRlcmF0ZSwgZm9ybWF0LCBhbmQgdWx0aW1hdGVseSBkdW1wIHRoZWlyIGluZm9ybWF0aW9uLgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIEkmIzM5O2xsIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGBydG5sX3N0YXRzX2R1bXBgIGZ1bmN0aW9uLCBwcm9iYWJseSBsb2NhdGVkIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgUlROTC1yZWxhdGVkIGNvZGUuIE15IGdvYWwgaXMgdG8gZXh0cmFjdCB0aGUgZ2VuZXJhbCBwYXR0ZXJuIGZvciBhIHdlbGwtZGVzaWduZWQga2VybmVsIGR1bXAgZnVuY3Rpb24uIFRoYXQgbGlrZWx5IG1lYW5zIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdywgdGhlIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhIGl0c2VsZi4gRnJvbSB0aGVyZSwgSSBjYW4gYXBwbHkgdGhvc2UgbGVzc29ucyB0byB0aGUgY3VycmVudCB0YXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NjAwOlx0XG42NjAxOlx0XHRyZXR1cm4gZXJyO1xuNjYwMjpcdH1cbjY2MDM6XHRcbjY2MDQ6XHRzdGF0aWMgaW50IHJ0bmxfc3RhdHNfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG42NjA1Olx0e1xuNjYwNjpcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2ItXHUwMDNlZXh0YWNrO1xuNjYwNzpcdFx0c3RydWN0IHJ0bmxfc3RhdHNfZHVtcF9maWx0ZXJzIGZpbHRlcnM7XG42NjA4Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuNjYwOTpcdFx0dW5zaWduZWQgaW50IGZsYWdzID0gTkxNX0ZfTVVMVEk7XG42NjEwOlx0XHRzdHJ1Y3QgaWZfc3RhdHNfbXNnICppZnNtO1xuNjYxMTpcdFx0c3RydWN0IHtcbjY2MTI6XHRcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuNjYxMzpcdFx0XHRpbnQgaWR4YXR0cjtcbjY2MTQ6XHRcdFx0aW50IHByaXZpZHg7XG42NjE1Olx0XHR9ICpjdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbjY2MTY6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG42NjE3Olx0XHRpbnQgZXJyO1xuNjYxODpcdFxuNjYxOTpcdFx0Y2ItXHUwMDNlc2VxID0gbmV0LVx1MDAzZWRldl9iYXNlX3NlcTtcbjY2MjA6XHRcbjY2MjE6XHRcdGVyciA9IHJ0bmxfdmFsaWRfc3RhdHNfcmVxKGNiLVx1MDAzZW5saCwgY2ItXHUwMDNlc3RyaWN0X2NoZWNrLCB0cnVlLCBleHRhY2spO1xuNjYyMjpcdFx0aWYgKGVycilcbjY2MjM6XHRcdFx0cmV0dXJuIGVycjtcbjY2MjQ6XHRcbjY2MjU6XHRcdGlmc20gPSBubG1zZ19kYXRhKGNiLVx1MDAzZW5saCk7XG42NjI2Olx0XHRpZiAoIWlmc20tXHUwMDNlZmlsdGVyX21hc2spIHtcbjY2Mjc6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGaWx0ZXIgbWFzayBtdXN0IGJlIHNldCBmb3Igc3RhdHMgZHVtcFwmIzM0Oyk7XG42NjI4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjYyOTpcdFx0fVxuNjYzMDpcdFxuNjYzMTpcdFx0ZXJyID0gcnRubF9zdGF0c19nZXRfcGFyc2UoY2ItXHUwMDNlbmxoLCBpZnNtLVx1MDAzZWZpbHRlcl9tYXNrLCBcdTAwMjZmaWx0ZXJzLFxuNjYzMjpcdFx0XHRcdFx0ICAgZXh0YWNrKTtcbjY2MzM6XHRcdGlmIChlcnIpXG42NjM0Olx0XHRcdHJldHVybiBlcnI7XG42NjM1Olx0XG42NjM2Olx0XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbjY2Mzc6XHRcdFx0ZXJyID0gcnRubF9maWxsX3N0YXRzaW5mbyhza2IsIGRldiwgUlRNX05FV1NUQVRTLFxuNjYzODpcdFx0XHRcdFx0XHQgIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG42NjM5Olx0XHRcdFx0XHRcdCAgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbjY2NDA6XHRcdFx0XHRcdFx0ICBmbGFncywgXHUwMDI2ZmlsdGVycyxcbjY2NDE6XHRcdFx0XHRcdFx0ICBcdTAwMjZjdHgtXHUwMDNlaWR4YXR0ciwgXHUwMDI2Y3R4LVx1MDAzZXByaXZpZHgsXG42NjQyOlx0XHRcdFx0XHRcdCAgZXh0YWNrKTtcbjY2NDM6XHRcdFx0LyogSWYgd2UgcmFuIG91dCBvZiByb29tIG9uIHRoZSBmaXJzdCBtZXNzYWdlLFxuNjY0NDpcdFx0XHQgKiB3ZSYjMzk7cmUgaW4gdHJvdWJsZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNjYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk11bHRpY2FzdCBBZGRyZXNzIER1bXAgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gY2hlY2tpbmcgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYC4gVGhpcyBmdW5jdGlvbiB2YWxpZGF0ZXMgdGhlIGluY29taW5nIGR1bXAgcmVxdWVzdCwgc3BlY2lmaWNhbGx5IGVuc3VyaW5nIHRoZSBoZWFkZXIgaXNuJiMzOTt0IG1lc3NlZCB1cCBhbmQgdGhlcmUmIzM5O3Mgbm8gZXh0cmFuZW91cyBkYXRhLiBJdCB2ZXJpZmllcyBgaWZhX3ByZWZpeGxlbmAsIGBpZmFfZmxhZ3NgLCBhbmQgYGlmYV9zY29wZWAgYXJlIHplcm8sIGFuZCB0aGF0IG5vIGFkZGl0aW9uYWwgYXR0cmlidXRlcyBhcmUgcHJlc2VudC4gVGhlIGludGVyZmFjZSBpbmRleCBpcyBleHRyYWN0ZWQgYW5kIHJldHVybmVkIHZpYSBhIHBvaW50ZXIuIE1ha2VzIHNlbnNlIOKAkyBjbGVhbiBhbmQgc3RyYWlnaHRmb3J3YXJkIHZhbGlkYXRpb24gYmVmb3JlIHByb2NlZWRpbmcuCgpOb3csIEkmIzM5O20gcmV2aXNpdGluZyBgcnRubF9maWxsX21jYWRkcmAuIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBtdWx0aWNhc3QgYWRkcmVzcyBpbmZvcm1hdGlvbiBpcyBhc3NlbWJsZWQgZm9yIHRoZSBuZXRsaW5rIG1lc3NhZ2UuIEkgc2VlIHRoZSB1c3VhbCBzdXNwZWN0czogYG5sbXNnX3B1dGAgYWxsb2NhdGVzIGFuZCB6ZXJvLXBhZHMgdGhlIG1lc3NhZ2UsIGFuZCB0aGVuIHRoZSBjcml0aWNhbCBmaWVsZHMgaW4gYGlmYWRkcm1zZ2AgYXJlIHBvcHVsYXRlZDogZmFtaWx5IChBRl9QQUNLRVQpLCBwcmVmaXggbGVuZ3RoICgwKSwgZmxhZ3MgKGJhc2VkIG9uIGBoYS0mZ3Q7Z2xvYmFsX3VzZWApLCBzY29wZSAobGluayksIGFuZCB0aGUgaW50ZXJmYWNlIGluZGV4LiBObyBnbGFyaW5nIGluaXRpYWxpemF0aW9uIGlzc3VlcyB0aGVyZS4gQWxsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBzZXQsIGFuZCB0aGUgc3RydWN0dXJlIGRvZXNuJiMzOTt0IGhhdmUgYW55IHBhZGRpbmcgaG9sZXMuIFRoZW4gd2UgaGF2ZSB0aGUgTmV0d29yayBMaW5rIEF0dHJpYnV0ZXMgKE5MQSkgc2VjdGlvbiBmb3IgdGhlIE1BQyBhZGRyZXNzIGFuZCB1c2VyIGNvdW50LCB3aGljaCBpcyBhcyBleHBlY3RlZC4gYG5sYV9wdXRgIGlzIHVzZWQgdG8gd3JpdGUgaW4gdGhlIE1BQyBhZGRyZXNzIHVzaW5nIGBkZXYtJmd0O2FkZHJfbGVuYCBhcyBhIGxlbmd0aCwgZW5zdXJpbmcgdGhhdCB3ZSByZWFkIHRoZSBhZGRyZXNzIGNvcnJlY3RseSBhbmQgYWRkIHRoZSBjb3JyZWN0IGFtb3VudCBvZiBwYWRkaW5nIGFmdGVyIGl0LgoKTmV4dCwgSSYjMzk7bSB2ZXJpZnlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuIFRoZSBoZWFkZXIgaXMgcHJvcGVybHkgemVyby1pbml0aWFsaXplZCwgYW5kIGFsbCBzdHJ1Y3QgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkLiBUaGUgbmV0d29yayBsaW5rIGF0dHJpYnV0ZXMgKE5MQSkgdXNlIGtub3duIGxlbmd0aHMgYW5kIHRoZSBjb3JyZWN0IGJ5dGUgc2l6ZXMuIEkmIzM5O20gYWxzbyBjb25maXJtaW5nIHRoYXQgdGhlIGBpZmluZGV4YCBpcyBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGluIGBydG5sX2R1bXBfbWNhZGRyYCBhbmQgdGhhdCB0aGUgYGN0eGAgc3RydWN0IGlzIGluaXRpYWxpemVkIGFzIHBhcnQgb2YgdGhlIG5ldGxpbmsgY29yZSYjMzk7cyBjYWxsYmFjayB6ZXJvaW5nIGJlZm9yZSB0aGUgZHVtcCBzdGFydC4gVGhlIHBvaW50ZXIgYCZhbXA7Y3R4LSZndDthZGRyX2lkeGAgaXMgdXNlZCwgdGhlIG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQsIHNvIG5vIGlzc3VlcyB0aGVyZS4KCkZpbmFsbHksIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBsb2NraW5nLiBJIGNhbiBzZWUgdGhhdCBgbmV0aWZfYWRkcl9sb2NrX2JoKGRldilgIGlzIGhlbGQgZHVyaW5nIGRldmljZSBpdGVyYXRpb24sIHdoaWNoIGlzIGNydWNpYWwgZm9yIGNvbmN1cnJlbmN5IHNhZmV0eS4gQWxzbywgYHJjdV9yZWFkX2xvY2soKWAgaXMgdXNlZCBkdXJpbmcgdGhlIGRldmljZSBpdGVyYXRpb24uIFRoaXMgc2hvdWxkIGJlIGVub3VnaCB0byBtYWludGFpbiBkYXRhIGludGVncml0eSBkdXJpbmcgdGhlIGR1bXAuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUuIENvdWxkIGBoYS0mZ3Q7YWRkcmAgY29udGFpbiB1bmluaXRpYWxpemVkIGJ5dGVzIGlmIGBkZXYtJmd0O2FkZHJfbGVuYCBpcyBzb21laG93IGNoYW5nZWQgYWZ0ZXIgdGhlIG11bHRpY2FzdCBhZGRyZXNzIGhhcyBiZWVuIGFkZGVkPyBOb3QgcmVhbGx5LCBhcyBgZGV2LSZndDthZGRyX2xlbmAgaXMgZml4ZWQgZm9yIGEgbmV0X2RldmljZS4gQ291bGQgdGhlIGBjdHhgIHN0cnVjdCBzaXplIGV4Y2VlZCBgc2l6ZW9mKGNiLSZndDtjdHgpYD8gSSYjMzk7bSBjaGVja2luZyB0aGUgYHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrYCBpbiBgaW5jbHVkZS9saW51eC9uZXRsaW5rLmhgIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBsYXJnZSBlbm91Z2guIEl0IHNlZW1zIGZpbmU7IG5vIG92ZXJmbG93IGlzc3VlcyBhcmUgdmlzaWJsZS4gTG9va3MgbGlrZSB3ZSBhcmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0bGluay5oPTI1MT1uZXRsaW5rX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGxpbmsuaC0yODAtXG5pbmNsdWRlL2xpbnV4L25ldGxpbmsuaDoyODE6c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sge1xuaW5jbHVkZS9saW51eC9uZXRsaW5rLmgtMjgyLVx0c3RydWN0IHNrX2J1ZmZcdFx0KnNrYjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIE5ldGxpbmsgSGVhZGVyIFN0cnVjdHVyZSoqCgpPa2F5LCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvcmUgTmV0bGluayBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L25ldGxpbmsuaGAgYW5kIHplcm8gaW4gb24gYXJvdW5kIGxpbmUgMjgxLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBmb3VuZGF0aW9uYWwgYHN0cnVjdCBubG1zZ2hkcmAgZGVmaW5pdGlvbiB0aGVyZSwgYW5kIHRoYXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgSSYjMzk7bGwgc2VlIHRoZSBiYXNpYyBtZXNzYWdlIGhlYWRlciBsYXlvdXQuIEkgd2FudCB0byBzZWUgaG93IHRoZSBsZW5ndGgsIHR5cGUsIGZsYWdzLCBzZXF1ZW5jZSBudW1iZXIsIGFuZCBQSUQgYXJlIGRlZmluZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBHb3R0YSBjb25maXJtIHRoZSB1c3VhbCBzdXNwZWN0cy4gR290dGEgY29uZmlybSB0aGF0IHRoZSBoZWFkZXIgc3RydWN0dXJlIGhhc24mIzM5O3QgY2hhbmdlZCBpbiBzb21lIHVuZXhwZWN0ZWQgd2F5IGluIG1vcmUgcmVjZW50IGtlcm5lbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRsaW5rLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFxuIDI4MTpcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrIHtcbiAyODI6XHRcdHN0cnVjdCBza19idWZmXHRcdCpza2I7XG4gMjgzOlx0XHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHJcdCpubGg7XG4gMjg0Olx0XHRpbnRcdFx0XHQoKmR1bXApKHN0cnVjdCBza19idWZmICogc2tiLFxuIDI4NTpcdFx0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuIDI4NjpcdFx0aW50XHRcdFx0KCpkb25lKShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuIDI4NzpcdFx0dm9pZFx0XHRcdCpkYXRhO1xuIDI4ODpcdFx0LyogdGhlIG1vZHVsZSB0aGF0IGR1bXAgZnVuY3Rpb24gYmVsb25nIHRvICovXG4gMjg5Olx0XHRzdHJ1Y3QgbW9kdWxlXHRcdCptb2R1bGU7XG4gMjkwOlx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrXHQqZXh0YWNrO1xuIDI5MTpcdFx0dTE2XHRcdFx0ZmFtaWx5O1xuIDI5MjpcdFx0dTE2XHRcdFx0YW5zd2VyX2ZsYWdzO1xuIDI5MzpcdFx0dTMyXHRcdFx0bWluX2R1bXBfYWxsb2M7XG4gMjk0Olx0XHR1bnNpZ25lZCBpbnRcdFx0cHJldl9zZXEsIHNlcTtcbiAyOTU6XHRcdGludFx0XHRcdGZsYWdzO1xuIDI5NjpcdFx0Ym9vbFx0XHRcdHN0cmljdF9jaGVjaztcbiAyOTc6XHRcdHVuaW9uIHtcbiAyOTg6XHRcdFx0dThcdFx0Y3R4W05FVExJTktfQ1RYX1NJWkVdO1xuIDI5OTpcdFxuIDMwMDpcdFx0XHQvKiBhcmdzIGlzIGRlcHJlY2F0ZWQuIENhc3QgYSBzdHJ1Y3Qgb3ZlciBjdHggaW5zdGVhZFxuIDMwMTpcdFx0XHQgKiBmb3IgcHJvcGVyIHR5cGUgc2FmZXR5LlxuIDMwMjpcdFx0XHQgKi9cbiAzMDM6XHRcdFx0bG9uZ1x0XHRhcmdzWzZdO1xuIDMwNDpcdFx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5OTAKCQkJCQkJCW91dHB1dDogMzI5CgkJCQkJCQl0aG91Z2h0czogMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBjdHhgIGlzIGJlaW5nIHRyZWF0ZWQgYXMgYE5FVExJTktfQ1RYX1NJWkVgICh3aGljaCBpcyB1c3VhbGx5IGVpdGhlciA0OCBvciA2NCBieXRlcyksIGJ1dCBgc2l6ZW9mKCpjdHgpYCBpcyBvbmx5IDE2IGJ5dGVzLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdCwgYnV0IEkgdGhpbmsgd2UgYXJlIG9rLgoKSSBjYW4gY29uZmlybSB0aGF0IGV2ZXJ5IGZpZWxkIGluIHRoZSBgaWZhZGRybXNnYCBzdHJ1Y3R1cmUgaXMgZXhwbGljaXRseSBhc3NpZ25lZCwgYW5kIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgZG9lc24mIzM5O3QgaGF2ZSBhbnkgaW50ZXJuYWwgcGFkZGluZy4gIFRoZSBgbmxhX3B1dGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCB0byBjb25zdHJ1Y3QgYXR0cmlidXRlcywgYW5kIGl0IHNhZmVseSB0YWtlcyBjYXJlIG9mIGFueSBuZWNlc3NhcnkgYWxpZ25tZW50IHBhZGRpbmcgYnkgemVyb2luZyBpdCBvdXQuIEZ1cnRoZXJtb3JlLCBgaGEtJmd0O2FkZHJgIGlzIGluaXRpYWxpemVkIHRvIHRoZSBjb3JyZWN0IGxlbmd0aCAoYGRldi0mZ3Q7YWRkcl9sZW5gKSwgd2hlbiB0aGUgaGFyZHdhcmUgYWRkcmVzcyBpcyByZWdpc3RlcmVkLiBJIGNhbiYjMzk7dCBzZWUgYW55IGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyBhbnkgdW5pbml0aWFsaXplZCBkYXRhIGludm9sdmVkIGluIGFueSBjb250cm9sIGZsb3cuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBvciBsb2NraW5nIGlzc3VlcywgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGVycm9ycywgYXJlIGV4cGVjdGVkIHRvIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGRldGVjdG9ycy4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7dmUgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGNoZWNrczoKCjEuICAqKktlcm5lbCBTdHJ1Y3R1cmVzIHRvIFVzZXIgU3BhY2U6KiogQXJlIHRoZXJlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG9yIHBhZGRpbmcgY291bGQgYmUgdW5pbml0aWFsaXplZD8gTm8sIHRoZSBgaWZhZGRybXNnYCBzdHJ1Y3QgaGFzIG5vIHBhZGRpbmcsIGFuZCBldmVyeSBmaWVsZCBpcyBhc3NpZ25lZC4gVGhlIGBubGFfcHV0YCBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIGFueSBwYWRkaW5nIGZvciBUTFZzLiBUaGUgYGhhLSZndDthZGRyYCBkYXRhIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLgoyLiAgKipCcmFuY2hpbmcgb24gVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogSXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOby4gYGlmaW5kZXhgIGlzIGNoZWNrZWQgb25seSBhZnRlciBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgIHN1Y2NlZWRzLiBgY3R4YCBpcyB6ZXJvIGluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIHN1YnN5c3RlbS4KMy4gICoqQ29tcGxleCBTdHJ1Y3R1cmVzOioqIElzIHRoZXJlIGFueXRoaW5nIHBhcnRpY3VsYXJseSBjb21wbGV4IHRoYXQgbWlnaHQgYmUgYSBjb25jZXJuPyBOby4KNC4gICoqQm91bmRzIENoZWNrcy9MZW5ndGggTWFuaXB1bGF0aW9uOioqIElzIGFueSBhY2Nlc3MgdG8gbWVtb3J5IGRlcGVuZGVudCBvbiBhIGJvdW5kcyBjaGVjayBvciBzaXplIGRldGVybWluZWQgYnkgYW4gdW5pbml0aWFsaXplZCB2YWx1ZT8gTm8uCgpJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBJJiMzOTttIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTiA9IGZhbHNlYCBhbmQgcHJvdmlkZSBhIGNsZWFyIGV4cGxhbmF0aW9uIHRvIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoQUZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QpIHZpYSBuZXRsaW5rLiBcblxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgXHUwMDI2IEluZm8tbGVha3MgKEtNU0FOKTogQWxsIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIGluIG5ldGxpbmsgcmVzcG9uc2VzIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBpZmFkZHJtc2dgIGhlYWRlciBoYXMgYSA4LWJ5dGUgbGF5b3V0IHdpdGhvdXQgaW50ZXJuYWwgcGFkZGluZyBob2xlcywgYW5kIGFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBzZXQuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBJRkFfTVVMVElDQVNUYCBhbmQgYElGQV9NQ19VU0VSU2ApIGFyZSBhZGRlZCB3aXRoIGBubGFfcHV0YCAvIGBubGFfcHV0X3UzMmAgd2hpY2ggemVybyBhbnkgdHJhaWxpbmcgYXR0cmlidXRlIGFsaWdubWVudCBwYWRkaW5nLiBBZGRyZXNzIGJ5dGVzIGluIGBoYS1cdTAwM2VhZGRyYCBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIGhhcmR3YXJlIGFkZHJlc3MgY3JlYXRpb24gdXAgdG8gYGRldi1cdTAwM2VhZGRyX2xlbmAuIENvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgZHVtcCBgY3R4YCBhbmQgYGlmaW5kZXhgKSBhcmUgZWl0aGVyIHplcm9lZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0gb3IgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbi0gTWVtb3J5IFNhZmV0eSBcdTAwMjYgQ29uY3VycmVuY3kgKEtBU0FOL0xPQ0tERVApOiBUaGUgY2hhbmdlcyBpbnZvbHZlIFJDVSBsb29rdXBzLCBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzLCBhbmQgZGV2aWNlIGFkZHJlc3MgbGlzdCBsb2NrcyAoYG5ldGlmX2FkZHJfbG9ja19iaGApLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBjb25maWd1cmF0aW9ucy5cblxuVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoQUZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QpIHZpYSBuZXRsaW5rLiBcblxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgXHUwMDI2IEluZm8tbGVha3MgKEtNU0FOKTogQWxsIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIGluIG5ldGxpbmsgcmVzcG9uc2VzIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBpZmFkZHJtc2dgIGhlYWRlciBoYXMgYSA4LWJ5dGUgbGF5b3V0IHdpdGhvdXQgaW50ZXJuYWwgcGFkZGluZyBob2xlcywgYW5kIGFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBzZXQuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBJRkFfTVVMVElDQVNUYCBhbmQgYElGQV9NQ19VU0VSU2ApIGFyZSBhZGRlZCB3aXRoIGBubGFfcHV0YCAvIGBubGFfcHV0X3UzMmAgd2hpY2ggemVybyBhbnkgdHJhaWxpbmcgYXR0cmlidXRlIGFsaWdubWVudCBwYWRkaW5nLiBBZGRyZXNzIGJ5dGVzIGluIGBoYS1cdTAwM2VhZGRyYCBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIGhhcmR3YXJlIGFkZHJlc3MgY3JlYXRpb24gdXAgdG8gYGRldi1cdTAwM2VhZGRyX2xlbmAuIENvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgZHVtcCBgY3R4YCBhbmQgYGlmaW5kZXhgKSBhcmUgZWl0aGVyIHplcm9lZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0gb3IgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbi0gTWVtb3J5IFNhZmV0eSBcdTAwMjYgQ29uY3VycmVuY3kgKEtBU0FOL0xPQ0tERVApOiBUaGUgY2hhbmdlcyBpbnZvbHZlIFJDVSBsb29rdXBzLCBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzLCBhbmQgZGV2aWNlIGFkZHJlc3MgbGlzdCBsb2NrcyAoYG5ldGlmX2FkZHJfbG9ja19iaGApLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBjb25maWd1cmF0aW9ucy5cblxuVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzoxMC4wMjUwNDQ3NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODg4Mzg5MjI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyXCIsXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyX2RldlwiLFxuICAgIFwicnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFcIixcbiAgICBcInJ0bmxfZmlsbF9tY2FkZHJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKEFGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgbmV0bGluay4gXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFxcdTAwMjYgSW5mby1sZWFrcyAoS01TQU4pOiBBbGwgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UgaW4gbmV0bGluayByZXNwb25zZXMgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBgc3RydWN0IGlmYWRkcm1zZ2AgaGVhZGVyIGhhcyBhIDgtYnl0ZSBsYXlvdXQgd2l0aG91dCBpbnRlcm5hbCBwYWRkaW5nIGhvbGVzLCBhbmQgYWxsIGZpZWxkcyAoYGlmYV9mYW1pbHlgLCBgaWZhX3ByZWZpeGxlbmAsIGBpZmFfZmxhZ3NgLCBgaWZhX3Njb3BlYCwgYGlmYV9pbmRleGApIGFyZSBleHBsaWNpdGx5IHNldC4gVGhlIG5ldGxpbmsgYXR0cmlidXRlcyAoYElGQV9NVUxUSUNBU1RgIGFuZCBgSUZBX01DX1VTRVJTYCkgYXJlIGFkZGVkIHdpdGggYG5sYV9wdXRgIC8gYG5sYV9wdXRfdTMyYCB3aGljaCB6ZXJvIGFueSB0cmFpbGluZyBhdHRyaWJ1dGUgYWxpZ25tZW50IHBhZGRpbmcuIEFkZHJlc3MgYnl0ZXMgaW4gYGhhLVxcdTAwM2VhZGRyYCBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIGhhcmR3YXJlIGFkZHJlc3MgY3JlYXRpb24gdXAgdG8gYGRldi1cXHUwMDNlYWRkcl9sZW5gLiBDb250cm9sIGZsb3cgdmFyaWFibGVzIChzdWNoIGFzIGR1bXAgYGN0eGAgYW5kIGBpZmluZGV4YCkgYXJlIGVpdGhlciB6ZXJvZWQgYnkgdGhlIG5ldGxpbmsgc3Vic3lzdGVtIG9yIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuLSBNZW1vcnkgU2FmZXR5IFxcdTAwMjYgQ29uY3VycmVuY3kgKEtBU0FOL0xPQ0tERVApOiBUaGUgY2hhbmdlcyBpbnZvbHZlIFJDVSBsb29rdXBzLCBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzLCBhbmQgZGV2aWNlIGFkZHJlc3MgbGlzdCBsb2NrcyAoYG5ldGlmX2FkZHJfbG9ja19iaGApLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBjb25maWd1cmF0aW9ucy5cXG5cXG5UaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnRyb2R1Y2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXRsaW5rIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgLyBSVE1fR0VUTVVMVElDQVNUKSBpbiBydG5ldGxpbmsuIFRoZSBuZXdseSBhZGRlZCBjb2RlIHZhbGlkYXRlcyB1c2VyIGR1bXAgcmVxdWVzdHMsIHRyYXZlcnNlcyBkZXZpY2UgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgdW5kZXIgbG9jaywgYW5kIHNlcmlhbGl6ZXMgcnRuZXRsaW5rIGF0dHJpYnV0ZXMsIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB2aWEgbmV0bGluayBzb2NrZXQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6MTAuMDI1MDUwODI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ0NTAwODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjlmMjI5YWM4ZTY2ZGI0NzQ3MWFlOTk3MDk1MTg5Yzg5NTQ2YTIzN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDAyOjM3OjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXFxuaW5kZXggMGVjYmQyNGM4OTBjNi4uMmEyMzEwY2IwZGYwMSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxcbkBAIC0xNjgsNyArMTY4LDEyIEBAIG9wZXJhdGlvbnM6XFxuICAgICAgICAgICBhdHRyaWJ1dGVzOiAqaWZhZGRyLWFsbFxcbiAgICAgLVxcbiAgICAgICBuYW1lOiBnZXRtdWx0aWNhc3RcXG4tICAgICAgZG9jOiBHZXQgLyBkdW1wIElQdjQvSVB2NiBtdWx0aWNhc3QgYWRkcmVzc2VzLlxcbisgICAgICBkb2M6IHxcXG4rICAgICAgICBHZXQgLyBkdW1wIG11bHRpY2FzdCBhZGRyZXNzZXMuIGlmYS1mYW1pbHkgc2VsZWN0cyB0aGUgYWRkcmVzc1xcbisgICAgICAgIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNiBmb3IgdGhlIElQIG11bHRpY2FzdCBncm91cHMgam9pbmVkIG9uXFxuKyAgICAgICAgYSBkZXZpY2UsIEFGX1BBQ0tFVCBmb3IgdGhlIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiB0aGVcXG4rICAgICAgICBkZXZpY2UgZmlsdGVyLiBMaW5rLWxheWVyIGVudHJpZXMgYWRkZWQgd2l0aCBTSU9DQURETVVMVEkgYXJlXFxuKyAgICAgICAgcmVwb3J0ZWQgd2l0aCB0aGUgcGVybWFuZW50IGZsYWcgc2V0LlxcbiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzXFxuICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnXFxuICAgICAgIGRvOlxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXFxuaW5kZXggODFjNWE2MTA0ZGVhMS4uYjJmZWJkYjY5MTVlOCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jXFxuQEAgLTQ1NjYsNiArNDU2NiwxMzMgQEAgc3RhdGljIGludCBydG5sX2R1bXBfYWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuID8gOiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcnRubF9maWxsX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCxcXG4rXFx0XFx0XFx0ICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XFxuK1xcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbitcXG4rXFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSxcXG4rXFx0XFx0XFx0ZmxhZ3MpO1xcbitcXHRpZiAoIW5saClcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFxuK1xcdGlmbSA9IG5sbXNnX2RhdGEobmxoKTtcXG4rXFx0aWZtLVxcdTAwM2VpZmFfZmFtaWx5ID0gQUZfUEFDS0VUO1xcbitcXHRpZm0tXFx1MDAzZWlmYV9wcmVmaXhsZW4gPSAwO1xcbitcXHRpZm0tXFx1MDAzZWlmYV9mbGFncyA9IGhhLVxcdTAwM2VnbG9iYWxfdXNlID8gSUZBX0ZfUEVSTUFORU5UIDogMDtcXG4rXFx0aWZtLVxcdTAwM2VpZmFfc2NvcGUgPSBSVF9TQ09QRV9MSU5LO1xcbitcXHRpZm0tXFx1MDAzZWlmYV9pbmRleCA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4rXFxuK1xcdGlmIChubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVxcdTAwM2VhZGRyX2xlbiwgaGEtXFx1MDAzZWFkZHIpIHx8XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXFx1MDAzZXJlZmNvdW50KSkge1xcbitcXHRcXHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXHR9XFxuK1xcbitcXHRubG1zZ19lbmQoc2tiLCBubGgpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XFxuK1xcdGludCBhZGRyX2lkeCA9IDA7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxuK1xcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHtcXG4rXFx0XFx0aWYgKGFkZHJfaWR4IFxcdTAwM2MgKnNfYWRkcl9pZHgpIHtcXG4rXFx0XFx0XFx0YWRkcl9pZHgrKztcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCBmbGFncyk7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0YWRkcl9pZHgrKztcXG4rXFx0fVxcbitcXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xcbitcXG4rXFx0KnNfYWRkcl9pZHggPSBlcnIgXFx1MDAzYyAwID8gYWRkcl9pZHggOiAwO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICBpbnQgKnBpZmluZGV4KVxcbit7XFxuK1xcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcXG4rXFxuK1xcdGlmbSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKmlmbSkpO1xcbitcXHRpZiAoIWlmbSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiSW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3RcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpZm0tXFx1MDAzZWlmYV9wcmVmaXhsZW4gfHwgaWZtLVxcdTAwM2VpZmFfZmxhZ3MgfHwgaWZtLVxcdTAwM2VpZmFfc2NvcGUpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgdmFsdWVzIGluIG11bHRpY2FzdCBkdW1wIGhlYWRlclxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG5sbXNnX2F0dHJsZW4obmxoLCBzaXplb2YoKmlmbSkpKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJJbnZhbGlkIGRhdGEgYWZ0ZXIgbXVsdGljYXN0IGR1bXAgaGVhZGVyXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHQqcGlmaW5kZXggPSBpZm0tXFx1MDAzZWlmYV9pbmRleDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbit7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbitcXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xcbitcXHRcXHRpbnQgYWRkcl9pZHg7XFxuK1xcdH0gKmN0eCA9ICh2b2lkICopY2ItXFx1MDAzZWN0eDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4rXFx0aW50IGlmaW5kZXg7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjYi1cXHUwMDNlbmxoLCBjYi1cXHUwMDNlZXh0YWNrLCBcXHUwMDI2aWZpbmRleCk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXG4rXFx0aWYgKGlmaW5kZXgpIHtcXG4rXFx0XFx0Y2ItXFx1MDAzZWFuc3dlcl9mbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xcbitcXHRcXHRmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xcbitcXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIGlmaW5kZXgpO1xcbitcXHRcXHRpZiAoIWRldikge1xcbitcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFxcdTAwMjZjdHgtXFx1MDAzZWFkZHJfaWR4LCBmbGFncyk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxuK1xcdFxcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXFx1MDAyNmN0eC1cXHUwMDNlYWRkcl9pZHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGZsYWdzKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK291dDpcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIHN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHUzMiBldmVudCwgZ2ZwX3QgZmxhZ3MsIGludCAqbmV3X25zaWQsXFxuQEAgLTcyNTEsNiArNzM3OCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XFxuIFxcdHsubXNndHlwZSA9IFJUTV9TRVRTVEFUUywgLmRvaXQgPSBydG5sX3N0YXRzX3NldH0sXFxuIFxcdHsubXNndHlwZSA9IFJUTV9ORVdMSU5LUFJPUCwgLmRvaXQgPSBydG5sX25ld2xpbmtwcm9wfSxcXG4gXFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxcbitcXHR7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsXFxuK1xcdCAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcbiBcXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxcbiBcXHQgLmR1bXBpdCA9IHJ0bmxfYnJpZGdlX2dldGxpbmt9LFxcbiBcXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9ERUxMSU5LLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbmluZGV4IDVjYzNlYmRjZjA4ZGUuLmNlYTYzNmYxMGFlYjYgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5AQCAtMSwxNyArMSwyMSBAQFxcbiAjIS91c3IvYmluL2VudiBweXRob24zXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gXFxuK2ltcG9ydCBlcnJub1xcbiBpbXBvcnQgc29ja2V0XFxuIGltcG9ydCBzdHJ1Y3RcXG4gaW1wb3J0IHRpbWVcXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcXG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxcbitmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9pbiwga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgZGVmZXJcXG4gXFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFxcXHhlMFxcXFx4MDBcXFxceDAwXFxcXHgwMSdcXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFxcXHhlZlxcXFx4MDFcXFxceDAxXFxcXHgwMSdcXG4gSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJ2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJylcXG4rRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCcwMTAwNWUwMDAwMDEnKVxcbitFVEhfVEVTVF9NVUxUSUNBU1RfU1RSID0gJzAxOjAwOjVlOjAxOjAxOjAxJ1xcbitFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgnOicsICcnKSlcXG4gXFxuIFxcbiBkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XFxuQEAgLTEwNSw2ICsxMDksNTIgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC1cXHUwMDNlIE5vbmU6XFxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXFxuIFxcbiBcXG4rZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxcbisgICAgZHVtcDogdGhlIGlmYS1pbmRleCBmaWx0ZXIsIG1jLXVzZXJzIGFuZCB0aGUgcGVybWFuZW50IGZsYWcuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XFxuKyAgICAgICAgZm9yIGlmbmFtZSBpbiAoXFxcImR1bW15MVxcXCIsIFxcXCJkdW1teTJcXFwiKTpcXG4rICAgICAgICAgICAgaXAoZlxcXCJsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXlcXFwiKVxcbisgICAgICAgICAgICBpcChmXFxcImxpbmsgc2V0IHtpZm5hbWV9IHVwXFxcIilcXG4rICAgICAgICBkZXZfaWR4ID0gc29ja2V0LmlmX25hbWV0b2luZGV4KFxcXCJkdW1teTFcXFwiKVxcbisgICAgICAgIGlwKGZcXFwibWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxXFxcIilcXG4rXFxuKyAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcXG4rICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxcbisgICAgICAgICAgICAgICAge1xcXCJpZmEtZmFtaWx5XFxcIjogc29ja2V0LkFGX1BBQ0tFVCwgXFxcImlmYS1pbmRleFxcXCI6IGRldl9pZHh9LFxcbisgICAgICAgICAgICAgICAgZHVtcD1UcnVlKVxcbisgICAgICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XFxuKyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcXG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxuKyAgICAgICAgICAgICAgICAgICAgXFxcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IEFGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcFxcXCIpXFxuKyAgICAgICAgICAgIHJhaXNlXFxuK1xcbisgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcXG4rICAgICAgICBrc2Z0X2VxKHthZGRyWydpZmEtaW5kZXgnXSBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7ZGV2X2lkeH0sXFxuKyAgICAgICAgICAgICAgICBcXFwiQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wIGlnbm9yZWQgaWZhLWluZGV4IGZpbHRlclxcXCIpXFxuK1xcbisgICAgICAgIGVudHJpZXMgPSB7YWRkclsnbXVsdGljYXN0J106IGFkZHIgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfVxcbitcXG4rICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHNcXG4rICAgICAgICAjIHRvIDAxOjAwOjVlOjAwOjAwOjAxIGluIHRoZSBkZXZpY2UgbXVsdGljYXN0IGxpc3QuXFxuKyAgICAgICAga3NmdF9pbihFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCwgZW50cmllcyxcXG4rICAgICAgICAgICAgICAgIFxcXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgYWxsLWhvc3RzIGxpbmstbGF5ZXIgYWRkcmVzc1xcXCIpXFxuKyAgICAgICAga3NmdF9ub3RfaW4oJ3Blcm1hbmVudCcsXFxuKyAgICAgICAgICAgICAgICAgICAgZW50cmllc1tFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVF1bJ2lmYS1mbGFncyddLFxcbisgICAgICAgICAgICAgICAgICAgIFxcXCJwcm90b2NvbCBlbnRyeSBpcyBwZXJtYW5lbnRcXFwiKVxcbitcXG4rICAgICAgICBrc2Z0X2luKEVUSF9URVNUX01VTFRJQ0FTVCwgZW50cmllcyxcXG4rICAgICAgICAgICAgICAgIFxcXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcXFwiKVxcbisgICAgICAgIGtzZnRfZXEoZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWydtYy11c2VycyddLCAxLFxcbisgICAgICAgICAgICAgICAgXFxcInVuZXhwZWN0ZWQgbWMtdXNlcnMgZm9yIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzc1xcXCIpXFxuKyAgICAgICAga3NmdF9pbigncGVybWFuZW50JywgZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWydpZmEtZmxhZ3MnXSxcXG4rICAgICAgICAgICAgICAgIFxcXCJTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IHBlcm1hbmVudFxcXCIpXFxuK1xcbitcXG4gZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgXFxcIlxcXCJcXFwiXFxuICAgICBDb25maWd1cmUgYW4gaW50ZXJmYWNlIGFuZCBzZXQgaXB2NC1kZXZjb25mIHZhbHVlcyB0aHJvdWdoIG5ldGxpbmtcXG5AQCAtMzE1LDcgKzM2NSw4IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVxcdTAwM2UgTm9uZTpcXG4gXFxuIFxcbiBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjayxcXG4rICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LFxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjExLjQ3MDIxNDE5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjQyNjg5ODg1MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRubF9kdW1wX21jYWRkclwiLFxuICAgIFwicnRubF9kdW1wX21jYWRkcl9kZXZcIixcbiAgICBcInJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxXCIsXG4gICAgXCJydG5sX2ZpbGxfbWNhZGRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXRsaW5rIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgLyBSVE1fR0VUTVVMVElDQVNUKSBpbiBydG5ldGxpbmsuIFRoZSBuZXdseSBhZGRlZCBjb2RlIHZhbGlkYXRlcyB1c2VyIGR1bXAgcmVxdWVzdHMsIHRyYXZlcnNlcyBkZXZpY2UgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgdW5kZXIgbG9jaywgYW5kIHNlcmlhbGl6ZXMgcnRuZXRsaW5rIGF0dHJpYnV0ZXMsIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB2aWEgbmV0bGluayBzb2NrZXQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiOWYyMjlhYzhlNjZkYjQ3NDcxYWU5OTcwOTUxODljODk1NDZhMjM3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwMjozNzowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5pbmRleCAwZWNiZDI0Yzg5MGM2Li4yYTIzMTBjYjBkZjAxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuQEAgLTE2OCw3ICsxNjgsMTIgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGxcbiAgICAgLVxuICAgICAgIG5hbWU6IGdldG11bHRpY2FzdFxuLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy5cbisgICAgICBkb2M6IHxcbisgICAgICAgIEdldCAvIGR1bXAgbXVsdGljYXN0IGFkZHJlc3Nlcy4gaWZhLWZhbWlseSBzZWxlY3RzIHRoZSBhZGRyZXNzXG4rICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvblxuKyAgICAgICAgYSBkZXZpY2UsIEFGX1BBQ0tFVCBmb3IgdGhlIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiB0aGVcbisgICAgICAgIGRldmljZSBmaWx0ZXIuIExpbmstbGF5ZXIgZW50cmllcyBhZGRlZCB3aXRoIFNJT0NBRERNVUxUSSBhcmVcbisgICAgICAgIHJlcG9ydGVkIHdpdGggdGhlIHBlcm1hbmVudCBmbGFnIHNldC5cbiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzXG4gICAgICAgZml4ZWQtaGVhZGVyOiBpZmFkZHJtc2dcbiAgICAgICBkbzpcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5pbmRleCA4MWM1YTYxMDRkZWExLi5iMmZlYmRiNjkxNWU4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5AQCAtNDU2Niw2ICs0NTY2LDEzMyBAQCBzdGF0aWMgaW50IHJ0bmxfZHVtcF9hbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0cmV0dXJuIHNrYi1cdTAwM2VsZW4gPyA6IHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIHUzMiBwb3J0aWQsXG4rXHRcdFx0ICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XG4rXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbitcbitcdG5saCA9IG5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBSVE1fR0VUTVVMVElDQVNULCBzaXplb2YoKmlmbSksXG4rXHRcdFx0ZmxhZ3MpO1xuK1x0aWYgKCFubGgpXG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXG4rXHRpZm0gPSBubG1zZ19kYXRhKG5saCk7XG4rXHRpZm0tXHUwMDNlaWZhX2ZhbWlseSA9IEFGX1BBQ0tFVDtcbitcdGlmbS1cdTAwM2VpZmFfcHJlZml4bGVuID0gMDtcbitcdGlmbS1cdTAwM2VpZmFfZmxhZ3MgPSBoYS1cdTAwM2VnbG9iYWxfdXNlID8gSUZBX0ZfUEVSTUFORU5UIDogMDtcbitcdGlmbS1cdTAwM2VpZmFfc2NvcGUgPSBSVF9TQ09QRV9MSU5LO1xuK1x0aWZtLVx1MDAzZWlmYV9pbmRleCA9IGRldi1cdTAwM2VpZmluZGV4O1xuK1xuK1x0aWYgKG5sYV9wdXQoc2tiLCBJRkFfTVVMVElDQVNULCBkZXYtXHUwMDNlYWRkcl9sZW4sIGhhLVx1MDAzZWFkZHIpIHx8XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLVx1MDAzZXJlZmNvdW50KSkge1xuK1x0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1x0fVxuK1xuK1x0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcbitcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuK1x0aW50IGFkZHJfaWR4ID0gMDtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG4rXHRuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7XG4rXHRcdGlmIChhZGRyX2lkeCBcdTAwM2MgKnNfYWRkcl9pZHgpIHtcbitcdFx0XHRhZGRyX2lkeCsrO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGVyciA9IHJ0bmxfZmlsbF9tY2FkZHIoc2tiLCBkZXYsIGhhLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuK1x0XHRcdFx0ICAgICAgIGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzKTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbitcdFx0YWRkcl9pZHgrKztcbitcdH1cbitcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XG4rXG4rXHQqc19hZGRyX2lkeCA9IGVyciBcdTAwM2MgMCA/IGFkZHJfaWR4IDogMDtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4rXHRcdFx0XHQgICAgICBpbnQgKnBpZmluZGV4KVxuK3tcbitcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcbitcbitcdGlmbSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKmlmbSkpO1xuK1x0aWYgKCFpZm0pIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkludmFsaWQgaGVhZGVyIGZvciBtdWx0aWNhc3QgZHVtcCByZXF1ZXN0XCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXHUwMDNlaWZhX2ZsYWdzIHx8IGlmbS1cdTAwM2VpZmFfc2NvcGUpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkludmFsaWQgdmFsdWVzIGluIG11bHRpY2FzdCBkdW1wIGhlYWRlclwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAobmxtc2dfYXR0cmxlbihubGgsIHNpemVvZigqaWZtKSkpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkludmFsaWQgZGF0YSBhZnRlciBtdWx0aWNhc3QgZHVtcCBoZWFkZXJcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0KnBpZmluZGV4ID0gaWZtLVx1MDAzZWlmYV9pbmRleDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcbitcdHN0cnVjdCB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgaWZpbmRleDtcbitcdFx0aW50IGFkZHJfaWR4O1xuK1x0fSAqY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuK1x0aW50IGlmaW5kZXg7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItXHUwMDNlbmxoLCBjYi1cdTAwM2VleHRhY2ssIFx1MDAyNmlmaW5kZXgpO1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcbitcdGlmIChpZmluZGV4KSB7XG4rXHRcdGNiLVx1MDAzZWFuc3dlcl9mbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuK1x0XHRmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuK1x0XHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIGlmaW5kZXgpO1xuK1x0XHRpZiAoIWRldikge1xuK1x0XHRcdGVyciA9IC1FTk9ERVY7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcdTAwMjZjdHgtXHUwMDNlYWRkcl9pZHgsIGZsYWdzKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbitcdFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcdTAwMjZjdHgtXHUwMDNlYWRkcl9pZHgsXG4rXHRcdFx0XHRcdCAgIGZsYWdzKTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbitcdH1cbitvdXQ6XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuIHN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBjaGFuZ2UsXG4gXHRcdFx0XHQgICAgICAgdTMyIGV2ZW50LCBnZnBfdCBmbGFncywgaW50ICpuZXdfbnNpZCxcbkBAIC03MjUxLDYgKzczNzgsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPVxuIFx0ey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSxcbiBcdHsubXNndHlwZSA9IFJUTV9ORVdMSU5LUFJPUCwgLmRvaXQgPSBydG5sX25ld2xpbmtwcm9wfSxcbiBcdHsubXNndHlwZSA9IFJUTV9ERUxMSU5LUFJPUCwgLmRvaXQgPSBydG5sX2RlbGxpbmtwcm9wfSxcbitcdHsucHJvdG9jb2wgPSBQRl9QQUNLRVQsIC5tc2d0eXBlID0gUlRNX0dFVE1VTFRJQ0FTVCxcbitcdCAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxuIFx0ey5wcm90b2NvbCA9IFBGX0JSSURHRSwgLm1zZ3R5cGUgPSBSVE1fR0VUTElOSyxcbiBcdCAuZHVtcGl0ID0gcnRubF9icmlkZ2VfZ2V0bGlua30sXG4gXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9ERUxMSU5LLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5pbmRleCA1Y2MzZWJkY2YwOGRlLi5jZWE2MzZmMTBhZWI2IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuQEAgLTEsMTcgKzEsMjEgQEBcbiAjIS91c3IvYmluL2VudiBweXRob24zXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuK2ltcG9ydCBlcnJub1xuIGltcG9ydCBzb2NrZXRcbiBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4tZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X2luLCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxuK2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIE5sRXJyb3IsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIGxpYi5weSBpbXBvcnQgZGVmZXJcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJ1xceGUwXFx4MDBcXHgwMFxceDAxJ1xuIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJ1xceGVmXFx4MDFcXHgwMVxceDAxJ1xuIElQVjZfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCdmZjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMycpXG4rRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCcwMTAwNWUwMDAwMDEnKVxuK0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAnMDE6MDA6NWU6MDE6MDE6MDEnXG4rRVRIX1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleChFVEhfVEVTVF9NVUxUSUNBU1RfU1RSLnJlcGxhY2UoJzonLCAnJykpXG4gXG4gXG4gZGVmIF91c2Vyc19mb3IocnRubDogUnRubEFkZHJGYW1pbHksIGZhbWlseTogaW50LCBncnA6IGJ5dGVzLCBpZmluZGV4OiBpbnQpOlxuQEAgLTEwNSw2ICsxMDksNTIgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC1cdTAwM2UgTm9uZTpcbiAgICAgICAgICAgICAgICAgczIuY2xvc2UoKVxuIFxuIFxuK2RlZiBkdW1wX21jYWRkcl9sMl9jaGVjaygpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiXG4rICAgIFZlcmlmeSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gYW4gQUZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1RcbisgICAgZHVtcDogdGhlIGlmYS1pbmRleCBmaWx0ZXIsIG1jLXVzZXJzIGFuZCB0aGUgcGVybWFuZW50IGZsYWcuXG4rICAgIFwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICBmb3IgaWZuYW1lIGluIChcImR1bW15MVwiLCBcImR1bW15MlwiKTpcbisgICAgICAgICAgICBpcChmXCJsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXlcIilcbisgICAgICAgICAgICBpcChmXCJsaW5rIHNldCB7aWZuYW1lfSB1cFwiKVxuKyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleChcImR1bW15MVwiKVxuKyAgICAgICAgaXAoZlwibWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxXCIpXG4rXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuKyAgICAgICAgICAgICAgICB7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9QQUNLRVQsIFwiaWZhLWluZGV4XCI6IGRldl9pZHh9LFxuKyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXG4rICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOlxuKyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcbisgICAgICAgICAgICAgICAgICAgIFwia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wXCIpXG4rICAgICAgICAgICAgcmFpc2VcbitcbisgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcbisgICAgICAgIGtzZnRfZXEoe2FkZHJbJ2lmYS1pbmRleCddIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSxcbisgICAgICAgICAgICAgICAgXCJBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyXCIpXG4rXG4rICAgICAgICBlbnRyaWVzID0ge2FkZHJbJ211bHRpY2FzdCddOiBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3Nlc31cbitcbisgICAgICAgICMgQnJpbmdpbmcgYW4gRXRoZXJuZXQgZGV2aWNlIHVwIGpvaW5zIDIyNC4wLjAuMSwgd2hpY2ggbWFwc1xuKyAgICAgICAgIyB0byAwMTowMDo1ZTowMDowMDowMSBpbiB0aGUgZGV2aWNlIG11bHRpY2FzdCBsaXN0LlxuKyAgICAgICAga3NmdF9pbihFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCwgZW50cmllcyxcbisgICAgICAgICAgICAgICAgXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgYWxsLWhvc3RzIGxpbmstbGF5ZXIgYWRkcmVzc1wiKVxuKyAgICAgICAga3NmdF9ub3RfaW4oJ3Blcm1hbmVudCcsXG4rICAgICAgICAgICAgICAgICAgICBlbnRyaWVzW0VUSF9BTExfSE9TVFNfTVVMVElDQVNUXVsnaWZhLWZsYWdzJ10sXG4rICAgICAgICAgICAgICAgICAgICBcInByb3RvY29sIGVudHJ5IGlzIHBlcm1hbmVudFwiKVxuK1xuKyAgICAgICAga3NmdF9pbihFVEhfVEVTVF9NVUxUSUNBU1QsIGVudHJpZXMsXG4rICAgICAgICAgICAgICAgIFwiZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXCIpXG4rICAgICAgICBrc2Z0X2VxKGVudHJpZXNbRVRIX1RFU1RfTVVMVElDQVNUXVsnbWMtdXNlcnMnXSwgMSxcbisgICAgICAgICAgICAgICAgXCJ1bmV4cGVjdGVkIG1jLXVzZXJzIGZvciB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcIilcbisgICAgICAgIGtzZnRfaW4oJ3Blcm1hbmVudCcsIGVudHJpZXNbRVRIX1RFU1RfTVVMVElDQVNUXVsnaWZhLWZsYWdzJ10sXG4rICAgICAgICAgICAgICAgIFwiU0lPQ0FERE1VTFRJIGVudHJ5IGlzIG5vdCBwZXJtYW5lbnRcIilcbitcbitcbiBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAgXCJcIlwiXG4gICAgIENvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgYW5kIHNldCBpcHY0LWRldmNvbmYgdmFsdWVzIHRocm91Z2ggbmV0bGlua1xuQEAgLTMxNSw3ICszNjUsOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbiBcbiBcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjayxcbisgICAgICAgICAgICAgIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjExLjQ3MDIxNzMxNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3OTYyNDExMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIHBhdGNoIGRvd24gYW5kIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZnV6emluZyBzdHJhdGVneS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkIGFuZCBpZiB0aGVyZSdzIGFueSB2YWx1ZSBpbiB0YXJnZXRpbmcgaXQuIFRoZSBkaWZmIHNob3dzIG1vZGlmaWNhdGlvbnMgdG8gYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxgLCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlgLiBUaGUgZG9jdW1lbnRhdGlvbiBjaGFuZ2UgaXMgZ2VuZXJhbGx5IGdvb2QgbmV3czsgaXQgbWVhbnMgc29tZW9uZSdzIHRoaW5raW5nIGFib3V0IHRoaXMgc3R1ZmYgZm9ybWFsbHkuIFRoZSBgcnRuZXRsaW5rLmNgIGNoYW5nZSBpcyB0aGUgcmVhbCBtZWF0LCB0aG91Z2guXG5cbkxvb2tpbmcgY2xvc2VyIGF0IGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIEkgc2VlIGEgY2x1c3RlciBvZiBuZXcgZnVuY3Rpb25zOiBgcnRubF9maWxsX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcWAsIGFuZCBgcnRubF9kdW1wX21jYWRkcmAuICBBaCwgdGhpcyBsb29rcyBsaWtlIHRoZXkncmUgaW1wbGVtZW50aW5nIGEgbmV3IGZlYXR1cmU6IGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIHZpYSBydG5ldGxpbmsgKHVzaW5nIGBQRl9QQUNLRVRgIGFuZCBgUlRNX0dFVE1VTFRJQ0FTVGApLiBJbXBvcnRhbnRseSwgdGhlcmUncyBhIG5ldyBoYW5kbGVyIGluIGBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNgIGZvciB0aGlzIHNwZWNpZmljIG1lc3NhZ2UgdHlwZS5cblxuVGhlIGltbWVkaWF0ZSBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gYSB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnQgbGlrZSBzeXprYWxsZXI/ICBUaGUgYW5zd2VyLCB0aGFua2Z1bGx5LCBzZWVtcyB0byBiZSB5ZXMhIFJ0bmV0bGluayBpcyBwYXJ0IG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGV4cG9zZWQgdGhyb3VnaCBuZXRsaW5rIHNvY2tldHMgKGBBRl9ORVRMSU5LYCwgYE5FVExJTktfUk9VVEVgKS4gU3l6a2FsbGVyIGFscmVhZHkgdW5kZXJzdGFuZHMgbmV0bGluayBhbmQgY2FuIGdlbmVyYXRlIHJ0bmV0bGluayBtZXNzYWdlcy4gVGhpcyBpcyBnb29kIG5ld3M7IGl0IG1lYW5zIHdlIGNhbiBsaWtlbHkgaGl0IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBuZWVkaW5nIHRvIGJ1aWxkIGFueSBjdXN0b20gZHJpdmVycyBvciBzZXQgdXAgZXhvdGljIGVudmlyb25tZW50cy5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhpcyByZXF1aXJlcyBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIHRvIGVuYWJsZS4gSSdsbCBzZWFyY2ggdGhyb3VnaCBLY29uZmlnIGFuZCB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCBmb3IgZWl0aGVyIFwicnRuZXRsaW5rLmNcIiBvciBcIk5FVExJTktfUk9VVEVcIiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBidWlsZC10aW1lIG9wdGlvbnMgd2UgbmVlZCB0byB3b3JyeSBhYm91dC4gVGhlIGdvYWwgaXMgdG8gbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlICptaW5pbXVtKiBjb25maWd1cmF0aW9ucyB0byBhY2hpZXZlIGNvbXBsZXRlIGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTAyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6MTYuMjY2NDYwMTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA4MjIwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRuZXRsaW5rLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzoxNi4zMzcyODUzNzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDUwNjkwNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFJUTkVUTElOSyBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgaXMgZGVmaW5pdGVseSBzaG93aW5nIHVwIGluIHRoZSBidWlsZCBhcyBwYXJ0IG9mIGBuZXQvY29yZWAsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgaXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIFNpbmNlIGBDT05GSUdfTkVUYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgdGhlc2UgZGF5cywgaXQgc2hvdWxkIGJlIGJha2VkIGluLiBUaGUgcXVlc3Rpb24gaXMsIGhvdyAqZXhhY3RseSogaXMgaXQgYmVpbmcgcHVsbGVkIGludG8gdGhlIG9iamVjdCBmaWxlcz8gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGF0IGVpdGhlciBgbmV0L0tjb25maWdgICh0byBzZWUgaWYgdGhlcmUncyBhbnkgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGJhc2VkIG9uIGEgc2VwYXJhdGUgS2NvbmZpZyBvcHRpb24pIG9yIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIGl0c2VsZi4gVGhhdCBNYWtlZmlsZSB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgZGlyZWN0IGFuc3dlciBhcyB0byB3aHkgYHJ0bmV0bGluay5jYCBpcyBiZWluZyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUYCBpcyB0cnVlLiBMZXQncyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGxvb2sgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjE5LjM4Nzk3ODkxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDI0Mjk0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLVxcXFwkXFxcXChDT05GSUdfTkVUXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6MTkuNDU4MjI4Mjg1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2MTQ4NTExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBkZWxpdmVyZWQgYXMgaWYgaXQncyBjb21pbmcgZnJvbSBtZTpcblxuKipEaXZpbmcgaW50byB0aGUgYG5ldC9NYWtlZmlsZWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBzdGFydGVkLiBMZXQncyBzdGFydCBkaWdnaW5nIGludG8gdGhpcyBwcm9ibGVtLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBgbmV0L01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgYnVpbGQgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIG5ldHdvcmtpbmcgY29tcG9uZW50cy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uYWwgcnVsZXMsIHZhcmlhYmxlcywgYW5kIHBvdGVudGlhbGx5IGluY2x1ZGUgc3RhdGVtZW50cyB0aGF0IGdvdmVybiBob3cgdGhlc2UgbmV0d29yay1yZWxhdGVkIG9iamVjdHMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQuIEkgd2FudCB0byBxdWlja2x5IGdhaW4gYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG5ldHdvcmsgbW9kdWxlIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGFuZCwgaW4gdHVybiwgaG93IGl0J3Mgc3RydWN0dXJlZC4gU3BlY2lmaWNhbGx5LCBJJ20gaG9waW5nIHRvIGZpbmQgY2x1ZXMgYWJvdXQgd2hhdCB0YXJnZXRzIGFyZSBiZWluZyBidWlsdCwgd2hhdCBzb3VyY2UgZmlsZXMgYXJlIGludm9sdmVkLCBhbmQgYW55IHNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIG9yIGxpbmtlciBvcHRpb25zIHRoYXQgYXJlIGJlaW5nIGVtcGxveWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzY0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzoyMS4zMTk3MTY1NTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgbGludXggbmV0d29ya2luZy5cXG4gICA0OlxcdCNcXG4gICA1OlxcdCMgMiBTZXAgMjAwMCwgQ2hyaXN0b3BoIEhlbGx3aWcgXFx1MDAzY2hjaEBpbmZyYWRlYWQub3JnXFx1MDAzZVxcbiAgIDY6XFx0IyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy5cXG4gICA3OlxcdCNcXG4gICA4OlxcdFxcbiAgIDk6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBkZXZyZXMubyBzb2NrZXQubyBjb3JlL1xcbiAgMTA6XFx0XFxuICAxMTpcXHRvYmotJChDT05GSUdfQ09NUEFUKVxcdFxcdCs9IGNvbXBhdC5vXFxuICAxMjpcXHRcXG4gIDEzOlxcdCMgTExDIGhhcyB0byBiZSBsaW5rZWQgYmVmb3JlIHRoZSBmaWxlcyBpbiBuZXQvODAyL1xcbiAgMTQ6XFx0b2JqLSQoQ09ORklHX0xMQylcXHRcXHQrPSBsbGMvXFxuICAxNTpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IGV0aGVybmV0LyA4MDIvIHNjaGVkLyBuZXRsaW5rLyBicGYvIGV0aHRvb2wvXFxuICAxNjpcXHRvYmotJChDT05GSUdfTkVURklMVEVSKVxcdFxcdCs9IG5ldGZpbHRlci9cXG4gIDE3OlxcdG9iai0kKENPTkZJR19JTkVUKVxcdFxcdCs9IGlwdjQvXFxuICAxODpcXHRvYmotJChDT05GSUdfVExTKVxcdFxcdCs9IHRscy9cXG4gIDE5OlxcdG9iai0kKENPTkZJR19YRlJNKVxcdFxcdCs9IHhmcm0vXFxuICAyMDpcXHRvYmotJChDT05GSUdfVU5JWClcXHRcXHQrPSB1bml4L1xcbiAgMjE6XFx0b2JqLSQoQ09ORklHX0lORVRfUFNQKVxcdFxcdCs9IHBzcC9cXG4gIDIyOlxcdG9iai15XFx0XFx0XFx0XFx0Kz0gaXB2Ni9cXG4gIDIzOlxcdG9iai0kKENPTkZJR19QQUNLRVQpXFx0XFx0Kz0gcGFja2V0L1xcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX05FVF9LRVkpXFx0XFx0Kz0ga2V5L1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX0JSSURHRSlcXHRcXHQrPSBicmlkZ2UvXFxuICAyNjpcXHRvYmotJChDT05GSUdfTkVUX0RFVkxJTkspXFx0Kz0gZGV2bGluay9cXG4gIDI3OlxcdG9iai15XFx0XFx0XFx0XFx0Kz0gZHNhL1xcbiAgMjg6XFx0b2JqLSQoQ09ORklHX1gyNSlcXHRcXHQrPSB4MjUvXFxuICAyOTpcXHRvYmotJChDT05GSUdfTEFQQilcXHRcXHQrPSBsYXBiL1xcbiAgMzA6XFx0b2JqLSQoQ09ORklHX0NBTilcXHRcXHQrPSBjYW4vXFxuICAzMTpcXHRvYmotJChDT05GSUdfQlQpXFx0XFx0Kz0gYmx1ZXRvb3RoL1xcbiAgMzI6XFx0b2JqLSQoQ09ORklHX1NVTlJQQylcXHRcXHQrPSBzdW5ycGMvXFxuICAzMzpcXHRvYmotJChDT05GSUdfQUZfUlhSUEMpXFx0XFx0Kz0gcnhycGMvXFxuICAzNDpcXHRvYmotJChDT05GSUdfQUZfS0NNKVxcdFxcdCs9IGtjbS9cXG4gIDM1OlxcdG9iai0kKENPTkZJR19TVFJFQU1fUEFSU0VSKVxcdCs9IHN0cnBhcnNlci9cXG4gIDM2OlxcdG9iai0kKENPTkZJR19BVE0pXFx0XFx0Kz0gYXRtL1xcbiAgMzc6XFx0b2JqLSQoQ09ORklHX0wyVFApXFx0XFx0Kz0gbDJ0cC9cXG4gIDM4OlxcdG9iai0kKENPTkZJR19QSE9ORVQpXFx0XFx0Kz0gcGhvbmV0L1xcbiAgMzk6XFx0aWZuZXEgKCQoQ09ORklHX1ZMQU5fODAyMVEpLClcXG4gIDQwOlxcdG9iai15XFx0XFx0XFx0XFx0Kz0gODAyMXEvXFxuICA0MTpcXHRlbmRpZlxcbiAgNDI6XFx0b2JqLSQoQ09ORklHX0lQX1NDVFApXFx0XFx0Kz0gc2N0cC9cXG4gIDQzOlxcdG9iai0kKENPTkZJR19SRFMpXFx0XFx0Kz0gcmRzL1xcbiAgNDQ6XFx0b2JqLSQoQ09ORklHX1dJUkVMRVNTKVxcdFxcdCs9IHdpcmVsZXNzL1xcbiAgNDU6XFx0b2JqLSQoQ09ORklHX01BQzgwMjExKVxcdFxcdCs9IG1hYzgwMjExL1xcbiAgNDY6XFx0b2JqLSQoQ09ORklHX1RJUEMpXFx0XFx0Kz0gdGlwYy9cXG4gIDQ3OlxcdG9iai0kKENPTkZJR19ORVRMQUJFTClcXHRcXHQrPSBuZXRsYWJlbC9cXG4gIDQ4OlxcdG9iai0kKENPTkZJR19JVUNWKVxcdFxcdCs9IGl1Y3YvXFxuICA0OTpcXHRvYmotJChDT05GSUdfU01DKVxcdFxcdCs9IHNtYy9cXG4gIDUwOlxcdG9iai0kKENPTkZJR19SRktJTEwpXFx0XFx0Kz0gcmZraWxsL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzoyMS4zMTk3NzU3MjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA5NTIzNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIGNvbnNjaW91c25lc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jeSBvZiBgbmV0L2NvcmUvYCoqXG5cbkFscmlnaHQsIHNvIGBuZXQvY29yZS9gIGFsd2F5cyBzZWVtcyB0byBiZSBpbmNsdWRlZCB3aGVuIHRoZSBgQ09ORklHX05FVD15YCBmbGFnIGlzIHNldC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIHN0YW5kYXJkIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgcmlnaHQ/IEJ1dCB0aGUga2V5IHF1ZXN0aW9uIGZvciBtZSBpczogaXMgKmp1c3QqIGBDT05GSUdfTkVUYCBzdWZmaWNpZW50LCBvciBpcyB0aGVyZSBzb21lIG90aGVyLCBwb3RlbnRpYWxseSBvYnNjdXJlLCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0J3MgKmFsc28qIHJlcXVpcmVkIHRvIGVuc3VyZSBldmVyeXRoaW5nIHdvcmtzIGFzIGV4cGVjdGVkPyBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGVyZSBpc24ndCBzb21lIGNvcm5lciBjYXNlIEknbSBtaXNzaW5nLlxuXG5HaXZlbiB0aGF0IEkgYW0gZm9jdXNlZCBvbiBydG5ldGxpbmssIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgcmVsYXRlIHRvIGl0LiBJdOKAmXMgYWx3YXlzIGdvb2QgcHJhY3RpY2UgdG8gdmVyaWZ5IGFzc3VtcHRpb25zLlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgbmV0L0tjb25maWdgIGFuZCBzZWUgd2hhdCB0aGUgcmVsYXRpb25zaGlwcyBhcmUgYXJvdW5kIHRoZSBgTkVUYCBvcHRpb24uIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2sgYW5kIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgZGVwZW5kZW5jaWVzLiBJIGhhdmUgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaXMgbWlzc2VkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDY3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzoyMy43MjkzMDEwMzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTMyNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnLTUtXFxubmV0L0tjb25maWc6NjptZW51Y29uZmlnIE5FVFxcbm5ldC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiTmV0d29ya2luZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzoyMy43OTc4Mzk5MDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyNjk1MjYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENoYW5nZXMgdG8gTmV0d29yayBNdWx0aWNhc3QgQWRkcmVzcyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGBDT05GSUdfTkVUYCBpcyB0aGUgYmlnIHBpY3R1cmUgaGVyZSwgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBlbGVtZW50LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBuZXdseSBpbnRyb2R1Y2VkIGZ1bmN0aW9uczogYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLCBhbmQgYHJ0bmxfZmlsbF9tY2FkZHJgLiBUaGV5IHNjcmVhbSBcIm11bHRpY2FzdCBhZGRyZXNzIGR1bXBcIiBhbmQgXCJtYW5hZ2VtZW50XCIgdG8gbWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGV4YWN0IHJvbGVzIGFuZCBob3cgdGhleSBmaXQgaW50byB0aGUgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcGVyZm9ybSBhIHN5bWJvbCBzZWFyY2ggYW5kIGNhbGxlciBhbmFseXNpcyB0byBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIGludGVyYWN0aW5nIHdpdGggdGhlc2UgZnVuY3Rpb25zLCB1bmNvdmVyaW5nIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGFyZWFzIG9mIGltcGFjdC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gYG5ldC9jb3JlL3J0bmV0bGluay5jYCBhbmQgdGhvcm91Z2hseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIGNsZWFuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODM0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjI1LjcyNDc5NTM0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDc2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDU2MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDU2MDpcXHRcXHRcXHRyZXQgPSBkdW1waXQoc2tiLCBjYik7XFxuNDU2MTpcXHRcXHRcXHRpZiAocmV0KVxcbjQ1NjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDU2MzpcXHRcXHR9XFxuNDU2NDpcXHRcXHRjYi1cXHUwMDNlZmFtaWx5ID0gaWR4O1xcbjQ1NjU6XFx0XFxuNDU2NjpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW4gPyA6IHJldDtcXG40NTY3OlxcdH1cXG40NTY4OlxcdFxcbjQ1Njk6XFx0c3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuNDU3MDpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCxcXG40NTcxOlxcdFxcdFxcdFxcdCAgICB1MzIgc2VxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuNDU3MjpcXHR7XFxuNDU3MzpcXHRcXHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XFxuNDU3NDpcXHRcXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG40NTc1OlxcdFxcbjQ1NzY6XFx0XFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSxcXG40NTc3OlxcdFxcdFxcdFxcdGZsYWdzKTtcXG40NTc4OlxcdFxcdGlmICghbmxoKVxcbjQ1Nzk6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG40NTgwOlxcdFxcbjQ1ODE6XFx0XFx0aWZtID0gbmxtc2dfZGF0YShubGgpO1xcbjQ1ODI6XFx0XFx0aWZtLVxcdTAwM2VpZmFfZmFtaWx5ID0gQUZfUEFDS0VUO1xcbjQ1ODM6XFx0XFx0aWZtLVxcdTAwM2VpZmFfcHJlZml4bGVuID0gMDtcXG40NTg0OlxcdFxcdGlmbS1cXHUwMDNlaWZhX2ZsYWdzID0gaGEtXFx1MDAzZWdsb2JhbF91c2UgPyBJRkFfRl9QRVJNQU5FTlQgOiAwO1xcbjQ1ODU6XFx0XFx0aWZtLVxcdTAwM2VpZmFfc2NvcGUgPSBSVF9TQ09QRV9MSU5LO1xcbjQ1ODY6XFx0XFx0aWZtLVxcdTAwM2VpZmFfaW5kZXggPSBkZXYtXFx1MDAzZWlmaW5kZXg7XFxuNDU4NzpcXHRcXG40NTg4OlxcdFxcdGlmIChubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVxcdTAwM2VhZGRyX2xlbiwgaGEtXFx1MDAzZWFkZHIpIHx8XFxuNDU4OTpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLVxcdTAwM2VyZWZjb3VudCkpIHtcXG40NTkwOlxcdFxcdFxcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XFxuNDU5MTpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbjQ1OTI6XFx0XFx0fVxcbjQ1OTM6XFx0XFxuNDU5NDpcXHRcXHRubG1zZ19lbmQoc2tiLCBubGgpO1xcbjQ1OTU6XFx0XFx0cmV0dXJuIDA7XFxuNDU5NjpcXHR9XFxuNDU5NzpcXHRcXG40NTk4OlxcdHN0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG40NTk5OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50ICpzX2FkZHJfaWR4LFxcbjQ2MDA6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzKVxcbjQ2MDE6XFx0e1xcbjQ2MDI6XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG40NjAzOlxcdFxcdGludCBhZGRyX2lkeCA9IDA7XFxuNDYwNDpcXHRcXHRpbnQgZXJyID0gMDtcXG40NjA1OlxcdFxcbjQ2MDY6XFx0XFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxuNDYwNzpcXHRcXHRuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7XFxuNDYwODpcXHRcXHRcXHRpZiAoYWRkcl9pZHggXFx1MDAzYyAqc19hZGRyX2lkeCkge1xcbjQ2MDk6XFx0XFx0XFx0XFx0YWRkcl9pZHgrKztcXG40NjEwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQ2MTE6XFx0XFx0XFx0fVxcbjQ2MTI6XFx0XFx0XFx0ZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbjQ2MTM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpO1xcbjQ2MTQ6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuNDYxNTpcXHRcXHRcXHRcXHRicmVhaztcXG40NjE2OlxcdFxcdFxcdGFkZHJfaWR4Kys7XFxuNDYxNzpcXHRcXHR9XFxuNDYxODpcXHRcXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xcbjQ2MTk6XFx0XFxuNDYyMDpcXHRcXHQqc19hZGRyX2lkeCA9IGVyciBcXHUwMDNjIDAgPyBhZGRyX2lkeCA6IDA7XFxuNDYyMTpcXHRcXG40NjIyOlxcdFxcdHJldHVybiBlcnI7XFxuNDYyMzpcXHR9XFxuNDYyNDpcXHRcXG40NjI1OlxcdHN0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuNDYyNjpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuNDYyNzpcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgKnBpZmluZGV4KVxcbjQ2Mjg6XFx0e1xcbjQ2Mjk6XFx0XFx0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xcbjQ2MzA6XFx0XFxuNDYzMTpcXHRcXHRpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTtcXG40NjMyOlxcdFxcdGlmICghaWZtKSB7XFxuNDYzMzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuNDYzNDpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgaGVhZGVyIGZvciBtdWx0aWNhc3QgZHVtcCByZXF1ZXN0XFxcIik7XFxuNDYzNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NjM2OlxcdFxcdH1cXG40NjM3OlxcdFxcbjQ2Mzg6XFx0XFx0aWYgKGlmbS1cXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXFx1MDAzZWlmYV9mbGFncyB8fCBpZm0tXFx1MDAzZWlmYV9zY29wZSkge1xcbjQ2Mzk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzoyNS43MjUxNDQ0MzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2MzY5NTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBJIGFtIHRoZSBleHBlcnQgdGhpbmtpbmcgaXQ6XG5cbioqRm9jdXNpbmcgb24gYSBDcnVjaWFsIFNlY3Rpb24qKlxuXG5SaWdodCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYSBzcGVjaWZpYyByYW5nZSBvZiBsaW5lcyBpbiB0aGlzIGFuYWx5c2lzLiBMaW5lcyA0NjQwLTQ3MDAuLi4gdGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgZnVydGhlciBzY3J1dGlueS4gQmFzZWQgb24gdGhlIGluaXRpYWwgc2NhbiwgdGhpcyBibG9jayBpcyB3aGVyZSB0aGUgYW5vbWFseSBpcyBtb3N0IGxpa2VseSBsb2NhdGVkLCB0aGF0IHdpbGwgYmUgd2hlcmUgSSBiZWdpbiBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjI4LjQ4ODg0MjY3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzM2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDY0MCxcbiAgXCJMaW5lQ291bnRcIjogNjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDY0MDpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgdmFsdWVzIGluIG11bHRpY2FzdCBkdW1wIGhlYWRlclxcXCIpO1xcbjQ2NDE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDY0MjpcXHRcXHR9XFxuNDY0MzpcXHRcXG40NjQ0OlxcdFxcdGlmIChubG1zZ19hdHRybGVuKG5saCwgc2l6ZW9mKCppZm0pKSkge1xcbjQ2NDU6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjQ2NDY6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJJbnZhbGlkIGRhdGEgYWZ0ZXIgbXVsdGljYXN0IGR1bXAgaGVhZGVyXFxcIik7XFxuNDY0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NjQ4OlxcdFxcdH1cXG40NjQ5OlxcdFxcbjQ2NTA6XFx0XFx0KnBpZmluZGV4ID0gaWZtLVxcdTAwM2VpZmFfaW5kZXg7XFxuNDY1MTpcXHRcXG40NjUyOlxcdFxcdHJldHVybiAwO1xcbjQ2NTM6XFx0fVxcbjQ2NTQ6XFx0XFxuNDY1NTpcXHRzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbjQ2NTY6XFx0e1xcbjQ2NTc6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuNDY1ODpcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcXG40NjU5OlxcdFxcdHN0cnVjdCB7XFxuNDY2MDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGlmaW5kZXg7XFxuNDY2MTpcXHRcXHRcXHRpbnQgYWRkcl9pZHg7XFxuNDY2MjpcXHRcXHR9ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxuNDY2MzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbjQ2NjQ6XFx0XFx0aW50IGlmaW5kZXg7XFxuNDY2NTpcXHRcXHRpbnQgZXJyO1xcbjQ2NjY6XFx0XFxuNDY2NzpcXHRcXHRlcnIgPSBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjYi1cXHUwMDNlbmxoLCBjYi1cXHUwMDNlZXh0YWNrLCBcXHUwMDI2aWZpbmRleCk7XFxuNDY2ODpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG40NjY5OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNDY3MDpcXHRcXG40NjcxOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG40NjcyOlxcdFxcbjQ2NzM6XFx0XFx0aWYgKGlmaW5kZXgpIHtcXG40Njc0OlxcdFxcdFxcdGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3MgfD0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcXG40Njc1OlxcdFxcdFxcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XFxuNDY3NjpcXHRcXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIGlmaW5kZXgpO1xcbjQ2Nzc6XFx0XFx0XFx0aWYgKCFkZXYpIHtcXG40Njc4OlxcdFxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuNDY3OTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG40NjgwOlxcdFxcdFxcdH1cXG40NjgxOlxcdFxcdFxcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXFx1MDAyNmN0eC1cXHUwMDNlYWRkcl9pZHgsIGZsYWdzKTtcXG40NjgyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjQ2ODM6XFx0XFx0fVxcbjQ2ODQ6XFx0XFxuNDY4NTpcXHRcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxuNDY4NjpcXHRcXHRcXHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFxcdTAwMjZjdHgtXFx1MDAzZWFkZHJfaWR4LFxcbjQ2ODc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmxhZ3MpO1xcbjQ2ODg6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuNDY4OTpcXHRcXHRcXHRcXHRicmVhaztcXG40NjkwOlxcdFxcdH1cXG40NjkxOlxcdG91dDpcXG40NjkyOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjQ2OTM6XFx0XFx0cmV0dXJuIGVycjtcXG40Njk0OlxcdH1cXG40Njk1OlxcdFxcbjQ2OTY6XFx0c3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuNDY5NzpcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcXG40Njk4OlxcdFxcdFxcdFxcdFxcdCAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLFxcbjQ2OTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGludCBuZXdfaWZpbmRleCwgdTMyIHBvcnRpZCxcXG40NzAwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saClcXG40NzAxOlxcdHtcXG40NzAyOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcXG40NzAzOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuNDcwNDpcXHRcXHRpbnQgZXJyID0gLUVOT0JVRlM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjI4LjQ4OTIxNzc1N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTEwOTQ2OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBSdG5ldGxpbmsgUmVnaXN0cmF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgYHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc2AgZ2V0IGhvb2tlZCB1cCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgcm91dGluZyBtZXNzYWdlcyBhcmUgbWFuYWdlZCBpbiB0aGUga2VybmVsLiBMZXQncyBzZWUuLi4gdGhlIHN0YXJ0aW5nIHBvaW50IHNlZW1zIHRvIGJlIGBydG5ldGxpbmtfaW5pdCgpYC4gQWhhLCB0aGVyZSBpdCBpcyEgYHJ0bmxfcmVnaXN0ZXJfbWFueShydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnMpO2AgVGhhdCdzIHRoZSBrZXkgbGluZS4gU28gYHJ0bmxfcmVnaXN0ZXJfbWFueWAgaXMgbGlrZWx5IHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyBhbGwgdGhlIGhhbmRsZXIgZnVuY3Rpb25zIHdpdGhpbiBgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzYC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgcnRuZXRsaW5rX2luaXRgIHdvcmtzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUwMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6MzAuNDAwMTY2OTI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTY2OTQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmM9NzM1Nj1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHJ0bmV0bGlua19uZXRfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNzM2MC1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo3MzYxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MzYyLVxcdHsubXNndHlwZSA9IFJUTV9ORVdMSU5LLCAuZG9pdCA9IHJ0bmxfbmV3bGluayxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTc0MDE9dm9pZCBfX2luaXQgcnRuZXRsaW5rX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTc0MDctXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzQwODpcXHRydG5sX3JlZ2lzdGVyX21hbnkocnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzKTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03NDA5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzozMC40NTE4NDAyNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjA5MTEzODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IE11bHRpY2FzdCBBZGRyZXNzIER1bXBpbmcgdmlhIHJ0bmV0bGluayoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGR1bXBpbmcgbXVsdGljYXN0IGFkZHJlc3NlcyBpcyAqZGVmaW5pdGVseSogd29ydGggYSBmdXp6aW5nIGNhbXBhaWduLiBUaGUgY29kZSB0b3VjaGVzIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIHdoaWNoLCBhcyB3ZSBhbGwga25vdywgaXMgKmNvcmUqIG5ldHdvcmtpbmcgY29kZSDigJMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBvZiBpdHMgY2VudHJhbCByb2xlIGluIHRoZSBrZXJuZWwuIFRoaXMgc3BlY2lmaWMgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25hbGl0eSBmb3IgZHVtcGluZyBtdWx0aWNhc3QgYWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCBgUEZfUEFDS0VUYCBzb2NrZXRzIHVzaW5nIGBSVE1fR0VUTVVMVElDQVNUYCByZXF1ZXN0cyB0aHJvdWdoIHJ0bmV0bGluay4gV2UgaGF2ZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGBydG5sX2R1bXBfbWNhZGRyYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCwgYW5kIGBydG5sX2ZpbGxfbWNhZGRyYC5cblxuVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIG5ldyBjb2RlIGlzIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIG1lc3NhZ2VzLiBTcGVjaWZpY2FsbHksIHVzZXJzcGFjZSBjYW4gdHJpZ2dlciB0aGlzIHdpdGggYW4gYFJUTV9HRVRNVUxUSUNBU1RgIHJlcXVlc3QgYW5kIGBBRl9QQUNLRVRgLiBTbywgdGhlIGF0dGFjayBzdXJmYWNlIGlzIHJpZ2h0IHRoZXJlLiBXZSdyZSB0YWxraW5nIGFib3V0IGhhbmRsaW5nIHVzZXItc3VwcGxpZWQgcmVxdWVzdCBoZWFkZXJzLCBpdGVyYXRpbmcgb3ZlciBkYXRhIHN0cnVjdHVyZXMsIGFuZCBzZXJpYWxpemluZyBuZXRsaW5rIGF0dHJpYnV0ZXMuIFRoaXMgaXMgYSBjbGFzc2ljIHBhdHRlcm4gdGhhdOKAmXMgeWllbGRlZCBtYW55IGtlcm5lbCB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIHBhc3QsIGFuZCBJJ20gcHJhY3RpY2FsbHkgc2VlaW5nIGJ1ZyByZXBvcnRzIGFscmVhZHkuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSBzZXR1cC4gVGhlIGBORVRgIGNvbmZpZyBmbGFnIGlzIG9idmlvdXNseSBuZWNlc3Nhcnk7IHRoYXQncyB3aGF0IGNvbXBpbGVzIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuIEdvb2QsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIEl0IHNlZW1zIHdlIGRvbid0IG5lZWQgYW55IHNwZWNpYWxpemVkIG5ldHdvcmsgZmxhZ3MgbGlrZSBgQ09ORklHX0lORVRgIGJlY2F1c2UgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNlbnRlcmVkIGFyb3VuZCBgQUZfUEFDS0VUYCwgd2hpY2ggaXMganVzdCBhIGNvbnN0YW50ICgxNyksIGFuZCBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cy4gVGhlIGBkZXZfYWRkcl9saXN0c2AgYW5kIGBydG5ldGxpbmtgIHN0cnVjdHVyZXMgd2UgYXJlIGludGVyYWN0aW5nIHdpdGggYXJlIGJ1aWx0LWluIGlmIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLiBFeGNlbGxlbnQuXG5cblRoZXJlZm9yZSwgdGhlIGZpbmFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgaXMganVzdCBgTkVUYCwgYW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgdGhlIGZvdXIgZnVuY3Rpb25zIGxpc3RlZCBwcmV2aW91c2x5LiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuIFdlIGhhdmUgb3VyIGZ1enppbmcgdGFyZ2V0IHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAwOSwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6MzUuNjYwOTU2NDk5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyNDIwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bmxfZHVtcF9tY2FkZHJcIixcbiAgICBcInJ0bmxfZHVtcF9tY2FkZHJfZGV2XCIsXG4gICAgXCJydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcVwiLFxuICAgIFwicnRubF9maWxsX21jYWRkclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV0bGluayBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoUEZfUEFDS0VUIC8gUlRNX0dFVE1VTFRJQ0FTVCkgaW4gcnRuZXRsaW5rLiBUaGUgbmV3bHkgYWRkZWQgY29kZSB2YWxpZGF0ZXMgdXNlciBkdW1wIHJlcXVlc3RzLCB0cmF2ZXJzZXMgZGV2aWNlIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIHVuZGVyIGxvY2ssIGFuZCBzZXJpYWxpemVzIHJ0bmV0bGluayBhdHRyaWJ1dGVzLCB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgdmlhIG5ldGxpbmsgc29ja2V0IG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRubF9kdW1wX21jYWRkclwiLFxuICAgIFwicnRubF9kdW1wX21jYWRkcl9kZXZcIixcbiAgICBcInJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxXCIsXG4gICAgXCJydG5sX2ZpbGxfbWNhZGRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXRsaW5rIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgLyBSVE1fR0VUTVVMVElDQVNUKSBpbiBydG5ldGxpbmsuIFRoZSBuZXdseSBhZGRlZCBjb2RlIHZhbGlkYXRlcyB1c2VyIGR1bXAgcmVxdWVzdHMsIHRyYXZlcnNlcyBkZXZpY2UgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgdW5kZXIgbG9jaywgYW5kIHNlcmlhbGl6ZXMgcnRuZXRsaW5rIGF0dHJpYnV0ZXMsIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB2aWEgbmV0bGluayBzb2NrZXQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6MzUuNzM5MjA2MTA3WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzE2OTcyMjA2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjM1LjczOTcxNTgzN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjczMTY5MjA5NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIG5ldGxpbmsuIFxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSBcXHUwMDI2IEluZm8tbGVha3MgKEtNU0FOKTogQWxsIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIGluIG5ldGxpbmsgcmVzcG9uc2VzIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBpZmFkZHJtc2dgIGhlYWRlciBoYXMgYSA4LWJ5dGUgbGF5b3V0IHdpdGhvdXQgaW50ZXJuYWwgcGFkZGluZyBob2xlcywgYW5kIGFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBzZXQuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBJRkFfTVVMVElDQVNUYCBhbmQgYElGQV9NQ19VU0VSU2ApIGFyZSBhZGRlZCB3aXRoIGBubGFfcHV0YCAvIGBubGFfcHV0X3UzMmAgd2hpY2ggemVybyBhbnkgdHJhaWxpbmcgYXR0cmlidXRlIGFsaWdubWVudCBwYWRkaW5nLiBBZGRyZXNzIGJ5dGVzIGluIGBoYS1cXHUwMDNlYWRkcmAgYXJlIGluaXRpYWxpemVkIGR1cmluZyBoYXJkd2FyZSBhZGRyZXNzIGNyZWF0aW9uIHVwIHRvIGBkZXYtXFx1MDAzZWFkZHJfbGVuYC4gQ29udHJvbCBmbG93IHZhcmlhYmxlcyAoc3VjaCBhcyBkdW1wIGBjdHhgIGFuZCBgaWZpbmRleGApIGFyZSBlaXRoZXIgemVyb2VkIGJ5IHRoZSBuZXRsaW5rIHN1YnN5c3RlbSBvciBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcbi0gTWVtb3J5IFNhZmV0eSBcXHUwMDI2IENvbmN1cnJlbmN5IChLQVNBTi9MT0NLREVQKTogVGhlIGNoYW5nZXMgaW52b2x2ZSBSQ1UgbG9va3VwcywgbmV0bGluayBkdW1wIGNhbGxiYWNrcywgYW5kIGRldmljZSBhZGRyZXNzIGxpc3QgbG9ja3MgKGBuZXRpZl9hZGRyX2xvY2tfYmhgKSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgY29uZmlndXJhdGlvbnMuXFxuXFxuVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI5ZjIyOWFjOGU2NmRiNDc0NzFhZTk5NzA5NTE4OWM4OTU0NmEyMzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDAyOjM3OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcbmluZGV4IDBlY2JkMjRjODkwYzYuLjJhMjMxMGNiMGRmMDEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5AQCAtMTY4LDcgKzE2OCwxMiBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICBhdHRyaWJ1dGVzOiAqaWZhZGRyLWFsbFxuICAgICAtXG4gICAgICAgbmFtZTogZ2V0bXVsdGljYXN0XG4tICAgICAgZG9jOiBHZXQgLyBkdW1wIElQdjQvSVB2NiBtdWx0aWNhc3QgYWRkcmVzc2VzLlxuKyAgICAgIGRvYzogfFxuKyAgICAgICAgR2V0IC8gZHVtcCBtdWx0aWNhc3QgYWRkcmVzc2VzLiBpZmEtZmFtaWx5IHNlbGVjdHMgdGhlIGFkZHJlc3NcbisgICAgICAgIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNiBmb3IgdGhlIElQIG11bHRpY2FzdCBncm91cHMgam9pbmVkIG9uXG4rICAgICAgICBhIGRldmljZSwgQUZfUEFDS0VUIGZvciB0aGUgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIHRoZVxuKyAgICAgICAgZGV2aWNlIGZpbHRlci4gTGluay1sYXllciBlbnRyaWVzIGFkZGVkIHdpdGggU0lPQ0FERE1VTFRJIGFyZVxuKyAgICAgICAgcmVwb3J0ZWQgd2l0aCB0aGUgcGVybWFuZW50IGZsYWcgc2V0LlxuICAgICAgIGF0dHJpYnV0ZS1zZXQ6IGFkZHItYXR0cnNcbiAgICAgICBmaXhlZC1oZWFkZXI6IGlmYWRkcm1zZ1xuICAgICAgIGRvOlxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IDgxYzVhNjEwNGRlYTEuLmIyZmViZGI2OTE1ZTggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xuKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbkBAIC00NTY2LDYgKzQ1NjYsMTMzIEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbiA/IDogcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCxcbitcdFx0XHQgICAgdTMyIHNlcSwgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcbitcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuK1xuK1x0bmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSxcbitcdFx0XHRmbGFncyk7XG4rXHRpZiAoIW5saClcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcbitcdGlmbSA9IG5sbXNnX2RhdGEobmxoKTtcbitcdGlmbS1cdTAwM2VpZmFfZmFtaWx5ID0gQUZfUEFDS0VUO1xuK1x0aWZtLVx1MDAzZWlmYV9wcmVmaXhsZW4gPSAwO1xuK1x0aWZtLVx1MDAzZWlmYV9mbGFncyA9IGhhLVx1MDAzZWdsb2JhbF91c2UgPyBJRkFfRl9QRVJNQU5FTlQgOiAwO1xuK1x0aWZtLVx1MDAzZWlmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7XG4rXHRpZm0tXHUwMDNlaWZhX2luZGV4ID0gZGV2LVx1MDAzZWlmaW5kZXg7XG4rXG4rXHRpZiAobmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi1cdTAwM2VhZGRyX2xlbiwgaGEtXHUwMDNlYWRkcikgfHxcbitcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXHUwMDNlcmVmY291bnQpKSB7XG4rXHRcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXHR9XG4rXG4rXHRubG1zZ19lbmQoc2tiLCBubGgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50ICpzX2FkZHJfaWR4LFxuK1x0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4rXHRpbnQgYWRkcl9pZHggPSAwO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbitcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHtcbitcdFx0aWYgKGFkZHJfaWR4IFx1MDAzYyAqc19hZGRyX2lkeCkge1xuK1x0XHRcdGFkZHJfaWR4Kys7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0ZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4rXHRcdFx0XHQgICAgICAgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpO1xuK1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRhZGRyX2lkeCsrO1xuK1x0fVxuK1x0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcbitcbitcdCpzX2FkZHJfaWR4ID0gZXJyIFx1MDAzYyAwID8gYWRkcl9pZHggOiAwO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbitcdFx0XHRcdCAgICAgIGludCAqcGlmaW5kZXgpXG4re1xuK1x0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuK1xuK1x0aWZtID0gbmxtc2dfcGF5bG9hZChubGgsIHNpemVvZigqaWZtKSk7XG4rXHRpZiAoIWlmbSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiSW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3RcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKGlmbS1cdTAwM2VpZmFfcHJlZml4bGVuIHx8IGlmbS1cdTAwM2VpZmFfZmxhZ3MgfHwgaWZtLVx1MDAzZWlmYV9zY29wZSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiSW52YWxpZCB2YWx1ZXMgaW4gbXVsdGljYXN0IGR1bXAgaGVhZGVyXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChubG1zZ19hdHRybGVuKG5saCwgc2l6ZW9mKCppZm0pKSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiSW52YWxpZCBkYXRhIGFmdGVyIG11bHRpY2FzdCBkdW1wIGhlYWRlclwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHQqcGlmaW5kZXggPSBpZm0tXHUwMDNlaWZhX2luZGV4O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4re1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbitcdHVuc2lnbmVkIGludCBmbGFncyA9IE5MTV9GX01VTFRJO1xuK1x0c3RydWN0IHtcbitcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuK1x0XHRpbnQgYWRkcl9pZHg7XG4rXHR9ICpjdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHRpbnQgaWZpbmRleDtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjYi1cdTAwM2VubGgsIGNiLVx1MDAzZWV4dGFjaywgXHUwMDI2aWZpbmRleCk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1xuK1x0aWYgKGlmaW5kZXgpIHtcbitcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KG5ldCwgaWZpbmRleCk7XG4rXHRcdGlmICghZGV2KSB7XG4rXHRcdFx0ZXJyID0gLUVOT0RFVjtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xuK1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCxcbitcdFx0XHRcdFx0ICAgZmxhZ3MpO1xuK1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK291dDpcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcbiBcdFx0XHRcdCAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLFxuQEAgLTcyNTEsNiArNzM3OCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XG4gXHR7Lm1zZ3R5cGUgPSBSVE1fU0VUU1RBVFMsIC5kb2l0ID0gcnRubF9zdGF0c19zZXR9LFxuIFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LFxuIFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxuK1x0ey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULFxuK1x0IC5kdW1waXQgPSBydG5sX2R1bXBfbWNhZGRyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXG4gXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxuIFx0IC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0RFTExJTkssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDVjYzNlYmRjZjA4ZGUuLmNlYTYzNmYxMGFlYjYgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtMSwxNyArMSwyMSBAQFxuICMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4raW1wb3J0IGVycm5vXG4gaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBkZWZlclxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFx4ZTBcXHgwMFxceDAwXFx4MDEnXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFx4ZWZcXHgwMVxceDAxXFx4MDEnXG4gSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJ2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJylcbitFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJzAxMDA1ZTAwMDAwMScpXG4rRVRIX1RFU1RfTVVMVElDQVNUX1NUUiA9ICcwMTowMDo1ZTowMTowMTowMSdcbitFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgnOicsICcnKSlcbiBcbiBcbiBkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XG5AQCAtMTA1LDYgKzEwOSw1MiBAQCBkZWYgZHVtcF9tY2FkZHI2X2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXG4gXG4gXG4rZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxuKyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMgYW5kIHRoZSBwZXJtYW5lbnQgZmxhZy5cbisgICAgXCJcIlwiXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgIGZvciBpZm5hbWUgaW4gKFwiZHVtbXkxXCIsIFwiZHVtbXkyXCIpOlxuKyAgICAgICAgICAgIGlwKGZcImxpbmsgYWRkIG5hbWUge2lmbmFtZX0gdHlwZSBkdW1teVwiKVxuKyAgICAgICAgICAgIGlwKGZcImxpbmsgc2V0IHtpZm5hbWV9IHVwXCIpXG4rICAgICAgICBkZXZfaWR4ID0gc29ja2V0LmlmX25hbWV0b2luZGV4KFwiZHVtbXkxXCIpXG4rICAgICAgICBpcChmXCJtYWRkciBhZGQge0VUSF9URVNUX01VTFRJQ0FTVF9TVFJ9IGRldiBkdW1teTFcIilcbitcbisgICAgICAgIHJ0bmwgPSBSdG5sQWRkckZhbWlseSgpXG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgYWRkcmVzc2VzID0gcnRubC5nZXRtdWx0aWNhc3QoXG4rICAgICAgICAgICAgICAgIHtcImlmYS1mYW1pbHlcIjogc29ja2V0LkFGX1BBQ0tFVCwgXCJpZmEtaW5kZXhcIjogZGV2X2lkeH0sXG4rICAgICAgICAgICAgICAgIGR1bXA9VHJ1ZSlcbisgICAgICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XG4rICAgICAgICAgICAgaWYgZS5lcnJvciA9PSBlcnJuby5FT1BOT1RTVVBQOlxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxuKyAgICAgICAgICAgICAgICAgICAgXCJrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXBcIilcbisgICAgICAgICAgICByYWlzZVxuK1xuKyAgICAgICAgIyBkdW1teTIgaGFzIGVudHJpZXMgYXMgd2VsbCwgb25seSBkdW1teTEgbWF5IGJlIGxpc3RlZFxuKyAgICAgICAga3NmdF9lcSh7YWRkclsnaWZhLWluZGV4J10gZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwge2Rldl9pZHh9LFxuKyAgICAgICAgICAgICAgICBcIkFGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCBpZ25vcmVkIGlmYS1pbmRleCBmaWx0ZXJcIilcbitcbisgICAgICAgIGVudHJpZXMgPSB7YWRkclsnbXVsdGljYXN0J106IGFkZHIgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfVxuK1xuKyAgICAgICAgIyBCcmluZ2luZyBhbiBFdGhlcm5ldCBkZXZpY2UgdXAgam9pbnMgMjI0LjAuMC4xLCB3aGljaCBtYXBzXG4rICAgICAgICAjIHRvIDAxOjAwOjVlOjAwOjAwOjAxIGluIHRoZSBkZXZpY2UgbXVsdGljYXN0IGxpc3QuXG4rICAgICAgICBrc2Z0X2luKEVUSF9BTExfSE9TVFNfTVVMVElDQVNULCBlbnRyaWVzLFxuKyAgICAgICAgICAgICAgICBcImR1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBhbGwtaG9zdHMgbGluay1sYXllciBhZGRyZXNzXCIpXG4rICAgICAgICBrc2Z0X25vdF9pbigncGVybWFuZW50JyxcbisgICAgICAgICAgICAgICAgICAgIGVudHJpZXNbRVRIX0FMTF9IT1NUU19NVUxUSUNBU1RdWydpZmEtZmxhZ3MnXSxcbisgICAgICAgICAgICAgICAgICAgIFwicHJvdG9jb2wgZW50cnkgaXMgcGVybWFuZW50XCIpXG4rXG4rICAgICAgICBrc2Z0X2luKEVUSF9URVNUX01VTFRJQ0FTVCwgZW50cmllcyxcbisgICAgICAgICAgICAgICAgXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcIilcbisgICAgICAgIGtzZnRfZXEoZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWydtYy11c2VycyddLCAxLFxuKyAgICAgICAgICAgICAgICBcInVuZXhwZWN0ZWQgbWMtdXNlcnMgZm9yIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzc1wiKVxuKyAgICAgICAga3NmdF9pbigncGVybWFuZW50JywgZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWydpZmEtZmxhZ3MnXSxcbisgICAgICAgICAgICAgICAgXCJTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IHBlcm1hbmVudFwiKVxuK1xuK1xuIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBcIlwiXCJcbiAgICAgQ29uZmlndXJlIGFuIGludGVyZmFjZSBhbmQgc2V0IGlwdjQtZGV2Y29uZiB2YWx1ZXMgdGhyb3VnaCBuZXRsaW5rXG5AQCAtMzE1LDcgKzM2NSw4IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVx1MDAzZSBOb25lOlxuIFxuIFxuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbisgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGR1bXBfbWNhZGRyX2wyX2NoZWNrLFxuKyAgICAgICAgICAgICAgaXB2NF9kZXZjb25mX25vdGlmeSxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6MzUuNzM5NzE2ODI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMDc3NTQ0NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIHZzLiBLQVNBTiBQYXRjaCBFdmFsdWF0aW9uKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nIGFzIEkgYXBwcm9hY2ggdGhpcyBwYXRjaC4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG9wZXJhdGluZyB3aXRoaW4gdGhlIHNhZmV0eSBndWlkZWxpbmVzOiBubyByZWFsLXdvcmxkIGhhcm0sIG5vIG9mZmVuc2l2ZSBhY3Rpb25zLCBhbmQgdGhpcyBjb2RlIGF1ZGl0aW5nIGlzIGRlZmluaXRlbHkgYmVuaWduLCBzbyBJJ20gZ29vZCB0byBnby4gVGhlIHNwZWNpZmljIHRhc2sgaXMgdG8gZXZhbHVhdGUgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIEtNU0FOIGFwcGxpY2FiaWxpdHksIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEkndmUgZ290IG15IHRvb2xzOiBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGByZWFkLWZpbGVgLCBhbmQgY3J1Y2lhbGx5LCBgc2V0LXJlc3VsdHNgLCB3aGljaCBJICptdXN0KiBjYWxsIG9uY2UgYXQgdGhlIGVuZC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRpbmcgbXVsdGljYXN0IGFkZHJlc3MgZHVtcGluZyB0aHJvdWdoIE5ldGxpbmssIHNwZWNpZmljYWxseSBgUlRNX0dFVE1VTFRJQ0FTVGAgd2l0aCBgUEZfUEFDS0VUYC4gU28sIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gd2hhdCdzIGJlaW5nIG1vZGlmaWVkLlxuXG5UaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYHJ0bmxfZmlsbF9tY2FkZHJgLiBMb29raW5nIGF0IHRoZSBjb2RlLCBJIHNlZSBpdCBwb3B1bGF0aW5nIGFuIGBza19idWZmYCB3aXRoIE5ldGxpbmsgbWVzc2FnZSBkYXRhLiBJdCB1c2VzIGBubG1zZ19wdXRgIHRvIGNyZWF0ZSB0aGUgaGVhZGVyLCBhbmQgdGhlbiBzdGFydHMgZmlsbGluZyBpbiBmaWVsZHMgbGlrZSBgaWZhX2ZhbWlseWAsIGBpZmFfcHJlZml4bGVuYCwgYGlmYV9mbGFnc2AsIGBpZmFfc2NvcGVgLCBgaWZhX2luZGV4YCwgYW5kIGFsc28gc29tZSBOZXRsaW5rIGF0dHJpYnV0ZXM6IGBJRkFfTVVMVElDQVNUYCBhbmQgYElGQV9NQ19VU0VSU2AuXG5cbk5vdyBjb21lcyB0aGUgY3J1Y2lhbCBwYXJ0LiBJIG5lZWQgdG8gYmUgZXh0cmEgdmlnaWxhbnQgYWJvdXQgd2hldGhlciBhbnkgb2YgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIG9yIHRoZSBhdHRyaWJ1dGVzIHVzZWQsIGVzcGVjaWFsbHkgYGlmYWRkcm1zZ2AsIGNvdWxkIGJlIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0J3Mgd2hlcmUgS01TQU4gY29tZXMgaW50byBwbGF5LiBJIG5lZWQgdG8gY2FyZWZ1bGx5IHJldmlldyBob3cgdGhlc2Ugc3RydWN0dXJlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQsIGFuZCB3aGF0IHZhbHVlcyBhcmUgYmVpbmcgYXNzaWduZWQgdG8gdGhlbS4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgaWZhZGRybXNnYCB0byBlbnN1cmUgdGhhdCBpdCBkb2VzIG5vdCBjb250YWluIGFueSBwYWRkaW5nLCB1bmluaXRpYWxpemVkIG1lbWJlcnMgb3IgcmVsaWVzIG9uIGV4dGVybmFsIHZhbHVlcyB0aGF0IG1heSBiZSB1bmluaXRpYWxpemVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgaGVhZGVycyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTMxNCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjQ3LjgxNzI2Mzg2N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyMDE4MDEzLCJFcnJvciI6ImJhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAnc3RydWN0IGlmYWRkcm1zZyB7JzogVW5tYXRjaGVkIFxceyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBpZmFkZHJtc2cge1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcImJhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAnc3RydWN0IGlmYWRkcm1zZyB7JzogVW5tYXRjaGVkIFxcXFx7XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjQ4LjM1OTI4ODdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI4Mjc5MzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBSZWdleC9Db2Rlc2VhcmNoIERpbGVtbWEqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGlzc3VlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCBpcywgXCJIb3cgY2FuIEkgZWZmaWNpZW50bHkgYWRkcmVzcyB0aGlzP1wiIEl0J3MgYSBjbGFzc2ljIHNpdHVhdGlvbjogSSBuZWVkIHRvIGxvY2F0ZSBpbnN0YW5jZXMgb2Ygc29tZXRoaW5n4oCUbWF5YmUgYSBwYXR0ZXJuLCBhIHNwZWNpZmljIGNvZGUgY29uc3RydWN0LCBvciBhIHByb2JsZW1hdGljIGltcGxlbWVudGF0aW9u4oCUd2l0aGluIGEgY29kZWJhc2UuIE15IGltbWVkaWF0ZSBvcHRpb25zIGFyZSBlaXRoZXIgdG8gcmVmaW5lIGEgcmVndWxhciBleHByZXNzaW9uIG9yIGxldmVyYWdlIGEgY29kZXNlYXJjaCB0b29sLlxuXG5UaGUgcmVnZXggYXBwcm9hY2ggaGFzIGl0cyBwcm9zLiBJIGNhbiBtZXRpY3Vsb3VzbHkgY3JhZnQgYSByZWdleCB0byB0YXJnZXQgdmVyeSBzcGVjaWZpYyBpbnN0YW5jZXMuIEl0IG9mZmVycyBwcmVjaXNpb24sIGVzcGVjaWFsbHkgaWYgdGhlIHBhdHRlcm4gaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgYW5kIHdlbGwtZGVmaW5lZC4gSSBjYW4gcXVpY2tseSBpdGVyYXRlIGFuZCB0ZXN0IG15IHBhdHRlcm4uIEhvd2V2ZXIsIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBvdmVybHkgY29tcGxleCByZWdleCBjYW4gYmVjb21lIHVubWFpbnRhaW5hYmxl4oCUYSBuaWdodG1hcmUgdG8gZGVidWcgYW5kIHBvdGVudGlhbGx5IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgcGFydGljdWxhcmx5IG9uIGxhcmdlIGZpbGVzIG9yIGluIGEgdGlnaHQgbG9vcC5cblxuVGhlIGFsdGVybmF0aXZlLCBjb2Rlc2VhcmNoLCBpcyB0ZW1wdGluZy4gQSBwcm9wZXIgY29kZSBzZWFyY2ggdG9vbCwgc3VjaCBhcyBncmVwIG9yIGEgbW9yZSBzb3BoaXN0aWNhdGVkIHN5c3RlbSwgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YgdW5kZXJzdGFuZGluZyBtb3JlIGNvbnRleHQgYWJvdXQgdGhlIGNvZGUgbGFuZ3VhZ2UgSSBhbSB3b3JraW5nIGluLiBUaGlzIGtub3dsZWRnZSBpcyBpbXBvcnRhbnQgZm9yIG15IHNlYXJjaCBhcyBpdCB3aWxsIGhlbHAgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIHRva2VucyBpbiBteSBzZWFyY2ggc3RyaW5nIG1lYW4sIGFuZCBjYW4gYWxzbyBoZWxwIHNlYXJjaCBhbmQgcmVwbGFjZS4gVGhpcyBjYW4gYmUgZ3JlYXQgaWYgSSBhbSBzZWFyY2hpbmcgZm9yIGxhbmd1YWdlIGNvbnN0cnVjdHMuIENvZGUgc2VhcmNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGhhbmRsZSBtb3JlIGNvbXBsZXggb3IgbnVhbmNlZCBxdWVyaWVzIHdpdGggYmV0dGVyIGFjY3VyYWN5LCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgY29udGV4dCwgbGFuZ3VhZ2Ugc3ludGF4LCBhbmQgZXZlbiBzZW1hbnRpYyBtZWFuaW5nLiBDb2Rlc2VhcmNoIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgZmlsZXMsIG9yIGxhcmdlIGNvZGViYXNlcy4gSG93ZXZlciwgdGhlIGluaXRpYWwgc2V0dXAgYW5kIGluZGV4aW5nIG9mIGEgY29kZXNlYXJjaCBzb2x1dGlvbiBjYW4gdGFrZSBtb3JlIHRpbWUgYW5kIGVmZm9ydCwgZXNwZWNpYWxseSBpZiB0aGUgY29kZWJhc2UgaXMgcGFydGljdWxhcmx5IGNvbXBsZXggb3IgdXNlcyBhbiB1bnVzdWFsIHNldHVwLiBBbHNvLCBpZiBJIGFtIHRyeWluZyB0byBzZWFyY2ggZm9yIHNvbWV0aGluZyB2ZXJ5IHNwZWNpZmljLCB0aGUgcHJlY2lzaW9uIG1heSBiZSBsZXNzIHRoYW4gYSByZWdleC1iYXNlZCBzb2x1dGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBjb2Rlc2VhcmNoIGVuZ2luZS5cblxuU28sIEkgbmVlZCB0byB3ZWlnaCB0aGUgdHJhZGUtb2ZmczogcHJlY2lzaW9uIHZlcnN1cyBzY2FsZSwgY29tcGxleGl0eSB2ZXJzdXMgZWZmaWNpZW5jeS4gV2hhdCdzIHRoZSBzY29wZSBvZiB0aGUgcHJvYmxlbT8gSXMgaXQgYSBxdWljaywgaXNvbGF0ZWQgdGFzaywgb3Igc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgcmV2aXNpdGVkLCBtYWludGFpbmVkLCBhbmQgcGVyaGFwcyBldmVuIGF1dG9tYXRlZD8gS25vd2luZyB0aGF0IHdpbGwgZGV0ZXJtaW5lIHdoZXRoZXIgSSB1c2UgcmVnZXggb3IgY29kZXNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM5MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjUxLjY0MjA4NDcxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY3NDczMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBpZmFkZHJtc2cgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC03LVxcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6ODpzdHJ1Y3QgaWZhZGRybXNnIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTktXFx0X191OFxcdFxcdGlmYV9mYW1pbHk7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTctXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaDo4OnN0cnVjdCBpZmFkZHJtc2cge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtOS1cXHRfX3U4XFx0XFx0aWZhX2ZhbWlseTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6NTQuMTA5NTY0MTIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NTY2NDEzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIE5ldHdvcmsgSW50ZXJmYWNlIEFkZHJlc3MgU3RydWN0dXJlcyoqXG5cbk9rYXksIHRpbWUgdG8gY3JhY2sgb3BlbiBgaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaGAuIEknbSBjdXJpb3VzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBrZXJuZWwncyBkZWZpbml0aW9ucyBmb3IgbmV0d29yayBpbnRlcmZhY2UgYWRkcmVzc2VzLCBzcGVjaWZpY2FsbHkgdGhlIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cy4gSSBuZWVkIHRvIGdldCBiYWNrIGluIHRoZSB3ZWVkcyBhbmQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCByZXByZXNlbnRzIGFuZCBoYW5kbGVzIHRoZSB2YXJpb3VzIGFkZHJlc3MgZmFtaWxpZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGF0YS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgdGhpbmdzIGxpa2UgSVB2NCwgSVB2NiwgYW5kIHBvdGVudGlhbGx5IG90aGVyIGFkZHJlc3MgdHlwZXMgd2lsbCBsaXZlLiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc3RydWN0dXJlIGxheW91dHMgYW5kIGFueSBhbGlnbm1lbnQgY29uc2lkZXJhdGlvbnMsIGFzIHRob3NlIGRldGFpbHMgYXJlIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBpbnRlcm9wZXJhYmlsaXR5LiBJdCdzIGFsc28gd29ydGggZG91YmxlLWNoZWNraW5nIGFueSByZWNlbnQgY2hhbmdlcyBvciBhZGRpdGlvbnMgdG8gdGhpcyBoZWFkZXIg4oCTIGl0J3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHN0YXkgb24gdG9wIG9mIHRoZSBsYXRlc3QgQVBJIG1vZGlmaWNhdGlvbnMuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgYSBxdWljayByZXZpZXcsIGJ1dCBJJ20gYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsbHkgc3VidGxlIGJ1dCBpbXBvcnRhbnQgZGV0YWlscyB0aGF0IEkgc2hvdWxkIHJlZnJlc2ggbXkgbWVtb3J5IG9uLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDE4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6NTYuNTY2MjA4NTY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqL1xcbiAgIDI6XFx0I2lmbmRlZiBfVUFQSV9fTElOVVhfSUZfQUREUl9IXFxuICAgMzpcXHQjZGVmaW5lIF9VQVBJX19MSU5VWF9JRl9BRERSX0hcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0bGluay5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHRzdHJ1Y3QgaWZhZGRybXNnIHtcXG4gICA5OlxcdFxcdF9fdThcXHRcXHRpZmFfZmFtaWx5O1xcbiAgMTA6XFx0XFx0X191OFxcdFxcdGlmYV9wcmVmaXhsZW47XFx0LyogVGhlIHByZWZpeCBsZW5ndGhcXHRcXHQqL1xcbiAgMTE6XFx0XFx0X191OFxcdFxcdGlmYV9mbGFncztcXHQvKiBGbGFnc1xcdFxcdFxcdCovXFxuICAxMjpcXHRcXHRfX3U4XFx0XFx0aWZhX3Njb3BlO1xcdC8qIEFkZHJlc3Mgc2NvcGVcXHRcXHQqL1xcbiAgMTM6XFx0XFx0X191MzJcXHRcXHRpZmFfaW5kZXg7XFx0LyogTGluayBpbmRleFxcdFxcdFxcdCovXFxuICAxNDpcXHR9O1xcbiAgMTU6XFx0XFxuICAxNjpcXHQvKlxcbiAgMTc6XFx0ICogSW1wb3J0YW50IGNvbW1lbnQ6XFxuICAxODpcXHQgKiBJRkFfQUREUkVTUyBpcyBwcmVmaXggYWRkcmVzcywgcmF0aGVyIHRoYW4gbG9jYWwgaW50ZXJmYWNlIGFkZHJlc3MuXFxuICAxOTpcXHQgKiBJdCBtYWtlcyBubyBkaWZmZXJlbmNlIGZvciBub3JtYWxseSBjb25maWd1cmVkIGJyb2FkY2FzdCBpbnRlcmZhY2VzLFxcbiAgMjA6XFx0ICogYnV0IGZvciBwb2ludC10by1wb2ludCBJRkFfQUREUkVTUyBpcyBERVNUSU5BVElPTiBhZGRyZXNzLFxcbiAgMjE6XFx0ICogbG9jYWwgYWRkcmVzcyBpcyBzdXBwbGllZCBpbiBJRkFfTE9DQUwgYXR0cmlidXRlLlxcbiAgMjI6XFx0ICpcXG4gIDIzOlxcdCAqIElGQV9GTEFHUyBpcyBhIHUzMiBhdHRyaWJ1dGUgdGhhdCBleHRlbmRzIHRoZSB1OCBmaWVsZCBpZmFfZmxhZ3MuXFxuICAyNDpcXHQgKiBJZiBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbSBzdHJ1Y3QgaWZhZGRybXNnIHdpbGwgYmUgaWdub3JlZC5cXG4gIDI1OlxcdCAqL1xcbiAgMjY6XFx0ZW51bSB7XFxuICAyNzpcXHRcXHRJRkFfVU5TUEVDLFxcbiAgMjg6XFx0XFx0SUZBX0FERFJFU1MsXFxuICAyOTpcXHRcXHRJRkFfTE9DQUwsXFxuICAzMDpcXHRcXHRJRkFfTEFCRUwsXFxuICAzMTpcXHRcXHRJRkFfQlJPQURDQVNULFxcbiAgMzI6XFx0XFx0SUZBX0FOWUNBU1QsXFxuICAzMzpcXHRcXHRJRkFfQ0FDSEVJTkZPLFxcbiAgMzQ6XFx0XFx0SUZBX01VTFRJQ0FTVCxcXG4gIDM1OlxcdFxcdElGQV9GTEFHUyxcXG4gIDM2OlxcdFxcdElGQV9SVF9QUklPUklUWSxcXHQvKiB1MzIsIHByaW9yaXR5L21ldHJpYyBmb3IgcHJlZml4IHJvdXRlICovXFxuICAzNzpcXHRcXHRJRkFfVEFSR0VUX05FVE5TSUQsXFxuICAzODpcXHRcXHRJRkFfUFJPVE8sXFx0XFx0LyogdTgsIGFkZHJlc3MgcHJvdG9jb2wgKi9cXG4gIDM5OlxcdFxcdElGQV9NQ19VU0VSUyxcXHRcXHQvKiB1MzIsIG11bHRpY2FzdCBncm91cCB1c2VycyAqL1xcbiAgNDA6XFx0XFx0X19JRkFfTUFYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzo1Ni41NjYyNzUwOTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYyNTEyOTQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBpZmFkZHJtc2dgIFN0cnVjdHVyZSBmb3IgTmV0d29yayBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgc3RydWN0IGlmYWRkcm1zZ2AuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYGlmYV9mYW1pbHlgIChhIHU4KSwgYGlmYV9wcmVmaXhsZW5gIChhbm90aGVyIHU4KSwgYGlmYV9mbGFnc2AgKGEgdTggYWdhaW4pLCBgaWZhX3Njb3BlYCAoYW5vdGhlciB1OCEpLCBhbmQgZmluYWxseSBgaWZhX2luZGV4YCAoYSB1MzIpLiBOaWNlISBUaGUgdG90YWwgc2l6ZSBpcyBqdXN0IDggYnl0ZXMsIHdoaWNoIGlzIGdvb2Qg4oCTIG5vIHdhc3RlZCBzcGFjZSBmcm9tIHBhZGRpbmcuIFRoYXQncyB3aGF0IEkgbGlrZSB0byBzZWUuXG5cbkFuZCwgZXZlbiBiZXR0ZXIsIGFsbCB0aGUgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBXZSd2ZSBnb3QgYGlmbSA9IG5sbXNnX2RhdGEobmxoKWAsIHRoZW4gdGhlIGZpZWxkcyBnZXQgc2V0OiBgaWZhX2ZhbWlseWAgdG8gYEFGX1BBQ0tFVGAsIGBpZmFfcHJlZml4bGVuYCB0byAwLCBgaWZhX2ZsYWdzYCBnZXRzIGEgY29uZGl0aW9uYWwgYXNzaWdubWVudCBiYXNlZCBvbiBgaGEtXHUwMDNlZ2xvYmFsX3VzZWAgKGVpdGhlciBgSUZBX0ZfUEVSTUFORU5UYCBvciAwKSwgYGlmYV9zY29wZWAgc2V0IHRvIGBSVF9TQ09QRV9MSU5LYCwgYW5kIGBpZmFfaW5kZXhgIHRvIHRoZSBkZXZpY2UncyBpZmluZGV4LiBNYWtlcyBzZW5zZS5cblxuQnV0IEknbSBhIGJpdCBjdXJpb3VzIGFib3V0IHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBhbGxvY2F0aW9uLiBTaW5jZSBgbmxtc2dfcHV0YCBpcyBpbnZvbHZlZCwgSSBzaG91bGQgY29uZmlybSB0aGF0IGBubG1zZ19wdXRgIHplcm9lcyBvciBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIHBheWxvYWQgc3BhY2UuIEdvdHRhIGNoZWNrIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gdG8gYmUgc3VyZS4gSXQncyBnb29kIHRvIGtlZXAgdHJhY2sgb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg4NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjU5LjE5MTQwODM2OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwOTI1MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmxtc2dfcHV0XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvbmV0bGluay5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGxpbmsuaC0zNy0gKiAgIG5sbXNnX25ldygpXFx0XFx0XFx0Y3JlYXRlIGEgbmV3IG5ldGxpbmsgbWVzc2FnZVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDozODogKiAgIG5sbXNnX3B1dCgpXFx0XFx0XFx0YWRkIGEgbmV0bGluayBtZXNzYWdlIHRvIGFuIHNrYlxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDozOTogKiAgIG5sbXNnX3B1dF9hbnN3ZXIoKVxcdFxcdFxcdGNhbGxiYWNrIGJhc2VkIG5sbXNnX3B1dCgpXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTQwLSAqICAgbmxtc2dfZW5kKClcXHRcXHRcXHRmaW5hbGl6ZSBuZXRsaW5rIG1lc3NhZ2VcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaD05NTU9c3RhdGljIGlubGluZSB1MzIgbmxtc2dfc2VxKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoKVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTk5NC0gKi9cXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6OTk1OnN0YXRpYyBpbmxpbmUgc3RydWN0IG5sbXNnaGRyICpubG1zZ19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtOTk2LVxcdFxcdFxcdFxcdFxcdCBpbnQgdHlwZSwgaW50IHBheWxvYWQsIGludCBmbGFncylcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0xMDAwLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDoxMDAxOlxcdHJldHVybiBfX25sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCB0eXBlLCBwYXlsb2FkLCBmbGFncyk7XFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTEwMDItfVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oPTEwMzY9c3RhdGljIGlubGluZSBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnX3B1dF9hbnN3ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0xMDQwLXtcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6MTA0MTpcXHRyZXR1cm4gbmxtc2dfcHV0KHNrYiwgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsIGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSxcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtMTA0Mi1cXHRcXHRcXHQgdHlwZSwgcGF5bG9hZCwgZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzo1OS4yNDE1MDU2OTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY5MDU4NzU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0bGluayBEZXRhaWxzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIE5ldGxpbmsgbWVzc2FnZXMgYXJlIGJlaW5nIGNvbnN0cnVjdGVkIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIEknbSBnb2luZyB0byBxdWlja2x5IGp1bXAgaW50byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IHRoZSBgX19ubG1zZ19wdXRgIGZ1bmN0aW9uLiBJdCBzaG91bGQgYmUgaW4gYG5ldC9uZXRsaW5rL2FmX25ldGxpbmsuY2AsIG9yIGF0IGxlYXN0IGNsb3NlbHkgcmVsYXRlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoaXMgcHJpbWl0aXZlIGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgbGF5ZXIuIEkgc3VzcGVjdCB0aGVyZSdzIHNvbWV0aGluZyBhbWlzcyB3aXRoIHRoZSBtZXNzYWdlIGhlYWRlciBjb25zdHJ1Y3Rpb24gb3IgcGVyaGFwcyBkYXRhIGFsaWdubWVudC4gVGltZSB0byBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gaWRlbnRpZnkgc29tZSBpc3N1ZXMgYnkgZ29pbmcgdGhyb3VnaCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg2NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM4OjAwLjkzMjA5NjA2N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk1MjExOTkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25sbXNnX3B1dFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI1NDM9aW50IGlzY3NpX3JlY3ZfcGR1KHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiwgc3RydWN0IGlzY3NpX2hkciAqaGRyLFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjU2NS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzoyNTY2OlxcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgMCwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI1NjctXFx0ZXYgPSBubG1zZ19kYXRhKG5saCk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0yNTgxPWludCBpc2NzaV9vZmZsb2FkX21lc2coc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNTk1LVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjI1OTY6XFx0bmxoID0gX19ubG1zZ19wdXQoc2tiLCAwLCAwLCAwLCAobGVuIC0gc2l6ZW9mKCpubGgpKSwgMCk7XFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjU5Ny1cXHRldiA9IG5sbXNnX2RhdGEobmxoKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI2MTY9dm9pZCBpc2NzaV9jb25uX2Vycm9yX2V2ZW50KHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiwgZW51bSBpc2NzaV9lcnIgZXJyb3IpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNjYwLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjI2NjE6XFx0bmxoID0gX19ubG1zZ19wdXQoc2tiLCAwLCAwLCAwLCAobGVuIC0gc2l6ZW9mKCpubGgpKSwgMCk7XFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjY2Mi1cXHRldiA9IG5sbXNnX2RhdGEobmxoKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI2NzY9dm9pZCBpc2NzaV9jb25uX2xvZ2luX2V2ZW50KHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubixcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI2OTUtXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM6MjY5NjpcXHRubGggPSBfX25sbXNnX3B1dChza2IsIDAsIDAsIDAsIChsZW4gLSBzaXplb2YoKm5saCkpLCAwKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNjk3LVxcdGV2ID0gbmxtc2dfZGF0YShubGgpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM9MjcxMD12b2lkIGlzY3NpX3Bvc3RfaG9zdF9ldmVudCh1aW50MzJfdCBob3N0X25vLCBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICp0cmFuc3BvcnQsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNzI1LVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjI3MjY6XFx0bmxoID0gX19ubG1zZ19wdXQoc2tiLCAwLCAwLCAwLCAobGVuIC0gc2l6ZW9mKCpubGgpKSwgMCk7XFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjcyNy1cXHRldiA9IG5sbXNnX2RhdGEobmxoKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI3NDE9dm9pZCBpc2NzaV9waW5nX2NvbXBfZXZlbnQodWludDMyX3QgaG9zdF9ubywgc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjc1NS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzoyNzU2OlxcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgMCwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI3NTctXFx0ZXYgPSBubG1zZ19kYXRhKG5saCk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0yNzcxPWlzY3NpX2lmX3NlbmRfcmVwbHkodTMyIHBvcnRpZCwgaW50IHR5cGUsIHZvaWQgKnBheWxvYWQsIGludCBzaXplKVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjc4Mi1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzoyNzgzOlxcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgdHlwZSwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI3ODQtXFx0bWVtY3B5KG5sbXNnX2RhdGEobmxoKSwgcGF5bG9hZCwgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0yNzg5PWlzY3NpX2lmX2dldF9zdGF0cyhzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCBubG1zZ2hkciAqbmxoKVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjgyMS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzoyODIyOlxcdFxcdG5saHN0YXQgPSBfX25sbXNnX3B1dChza2JzdGF0LCAwLCAwLCAwLFxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI4MjMtXFx0XFx0XFx0XFx0ICAgICAgKGxlbiAtIHNpemVvZigqbmxoc3RhdCkpLCAwKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI4NTg9aW50IGlzY3NpX3Nlc3Npb25fZXZlbnQoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uLFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjg4MC1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzoyODgxOlxcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgMCwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI4ODItXFx0ZXYgPSBubG1zZ19kYXRhKG5saCk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0zMjk4PWlzY3NpX2dldF9jaGFwKHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IG5sbXNnaGRyICpubGgpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0zMzM3LVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjMzMzg6XFx0XFx0bmxoY2hhcCA9IF9fbmxtc2dfcHV0KHNrYmNoYXAsIDAsIDAsIDAsXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMzMzOS1cXHRcXHRcXHRcXHQgICAgICAobGVuIC0gc2l6ZW9mKCpubGhjaGFwKSksIDApO1xcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM9MzcwMz1pc2NzaV9nZXRfaG9zdF9zdGF0cyhzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCBubG1zZ2hkciAqbmxoKVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMzc0MS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzozNzQyOlxcdFxcdG5saGhvc3Rfc3RhdHMgPSBfX25sbXNnX3B1dChza2Job3N0X3N0YXRzLCAwLCAwLCAwLFxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTM3NDMtXFx0XFx0XFx0XFx0ICAgICAgKGxlbiAtIHNpemVvZigqbmxoaG9zdF9zdGF0cykpLCAwKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0bGluay5oPTMxNz1zdHJ1Y3Qgbmxtc2doZHIgKlxcbmluY2x1ZGUvbGludXgvbmV0bGluay5oOjMxODpfX25sbXNnX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgaW50IGxlbiwgaW50IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L25ldGxpbmsuaC0zMTktXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg9OTk1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5sbXNnaGRyICpubG1zZ19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0xMDAwLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDoxMDAxOlxcdHJldHVybiBfX25sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCB0eXBlLCBwYXlsb2FkLCBmbGFncyk7XFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTEwMDItfVxcbi0tXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jPTIxNDQ9c3RydWN0IG5sbXNnaGRyICpcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjE0NTpfX25sbXNnX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgaW50IGxlbiwgaW50IGZsYWdzKVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMTQ2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzg6MDMuODg0MjIxMTQxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4OTIyOTE4MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0bGluayBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbmV0bGluayBtZXNzYWdlIGlzIGNvbnN0cnVjdGVkIGFuZCBzZW50LiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGhlYWQgc3RyYWlnaHQgZm9yIGBfX25sbXNnX3B1dGAgaW4gYG5ldC9uZXRsaW5rL2FmX25ldGxpbmsuY2AuIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgbWVzc2FnZSBjcmVhdGlvbiwgc28gdGhhdCdzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIHN1c3BlY3QgaXQncyB3aGVyZSB0aGUgbWVzc2FnZSBoZWFkZXJzIGFuZCBwb3RlbnRpYWxseSB0aGUgcGF5bG9hZCBhcmUgYXNzZW1ibGVkLlxuXG5MZXQncyBxdWlja2x5IG5hdmlnYXRlIHRvIGFyb3VuZCBsaW5lIDIxNDUgaW4gdGhlIGZpbGU7IHRoYXQgc2hvdWxkIHB1dCBtZSBpbiB0aGUgbmVpZ2hib3Job29kIG9mIHdoZXJlIEknZCBleHBlY3QgdGhlIGNyaXRpY2FsIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljIHRvIGJlLiBUaW1lIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM4OjA1Ljc3NjUxNTE4NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGxpbmsvYWZfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNDAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNDA6XFx0XFx0c2tfZm9yX2VhY2hfYm91bmRfc2FmZShzaywgdG1wLCBcXHUwMDI2dGJsLVxcdTAwM2VtY19saXN0KVxcbjIxNDE6XFx0XFx0XFx0bmV0bGlua191cGRhdGVfc29ja2V0X21jKG5sa19zayhzayksIGdyb3VwLCAwKTtcXG4yMTQyOlxcdH1cXG4yMTQzOlxcdFxcbjIxNDQ6XFx0c3RydWN0IG5sbXNnaGRyICpcXG4yMTQ1OlxcdF9fbmxtc2dfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgbGVuLCBpbnQgZmxhZ3MpXFxuMjE0NjpcXHR7XFxuMjE0NzpcXHRcXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG4yMTQ4OlxcdFxcdGludCBzaXplID0gbmxtc2dfbXNnX3NpemUobGVuKTtcXG4yMTQ5OlxcdFxcbjIxNTA6XFx0XFx0bmxoID0gc2tiX3B1dChza2IsIE5MTVNHX0FMSUdOKHNpemUpKTtcXG4yMTUxOlxcdFxcdG5saC1cXHUwMDNlbmxtc2dfdHlwZSA9IHR5cGU7XFxuMjE1MjpcXHRcXHRubGgtXFx1MDAzZW5sbXNnX2xlbiA9IHNpemU7XFxuMjE1MzpcXHRcXHRubGgtXFx1MDAzZW5sbXNnX2ZsYWdzID0gZmxhZ3M7XFxuMjE1NDpcXHRcXHRubGgtXFx1MDAzZW5sbXNnX3BpZCA9IHBvcnRpZDtcXG4yMTU1OlxcdFxcdG5saC1cXHUwMDNlbmxtc2dfc2VxID0gc2VxO1xcbjIxNTY6XFx0XFx0aWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSB8fCBOTE1TR19BTElHTihzaXplKSAtIHNpemUgIT0gMClcXG4yMTU3OlxcdFxcdFxcdG1lbXNldChubG1zZ19kYXRhKG5saCkgKyBsZW4sIDAsIE5MTVNHX0FMSUdOKHNpemUpIC0gc2l6ZSk7XFxuMjE1ODpcXHRcXHRyZXR1cm4gbmxoO1xcbjIxNTk6XFx0fVxcbjIxNjA6XFx0RVhQT1JUX1NZTUJPTChfX25sbXNnX3B1dCk7XFxuMjE2MTpcXHRcXG4yMTYyOlxcdHN0YXRpYyBzaXplX3RcXG4yMTYzOlxcdG5ldGxpbmtfYWNrX3Rsdl9sZW4oc3RydWN0IG5ldGxpbmtfc29jayAqbmxrLCBpbnQgZXJyLFxcbjIxNjQ6XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzg6MDUuNzc2NzA3NjI1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NDcxNTQ0NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIEkgZGVsdmUgaW50byB0aGlzIGNvZGUgc25pcHBldDpcblxuKipBbmFseXppbmcgTmV0d29yayBEZXZpY2UgSGFyZHdhcmUgQWRkcmVzcyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IG11bHRpY2FzdCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgaW4gdGhlIG5ldHdvcmsgc3RhY2suIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBoYS1cdTAwM2VhZGRyYCBhbmQgYGRldi1cdTAwM2VhZGRyX2xlbmAgdmFyaWFibGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVsYXRlIHRvIHRoZSBhY3R1YWwgaGFyZHdhcmUgYWRkcmVzcyB3aXRoaW4gdGhlIG11bHRpY2FzdCBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEknbSB0cmFjaW5nIHRoaXMgdGhyb3VnaCB0aGUgYHJ0bmxfZmlsbF9tY2FkZHJgIGZ1bmN0aW9uLlxuXG5UaGUgY29yZSBvZiBteSBpbnRlcmVzdCBoZXJlIGlzIHRoYXQgYG5sYV9wdXRgIGNhbGw6IGBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVx1MDAzZWFkZHJfbGVuLCBoYS1cdTAwM2VhZGRyKWAuIFRoaXMgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgbGluZSB3aGVyZSB0aGUgbXVsdGljYXN0IGhhcmR3YXJlIGFkZHJlc3MgKGBoYS1cdTAwM2VhZGRyYCkgaXMgYmVpbmcgcGFja2VkIGludG8gdGhlIE5ldGxpbmsgbWVzc2FnZSBidWZmZXIgKGBza2JgKSB1bmRlciB0aGUgYElGQV9NVUxUSUNBU1RgIGF0dHJpYnV0ZS4gVGhlIGBkZXYtXHUwMDNlYWRkcl9sZW5gIHBhcnQgaXMgaW1wb3J0YW50LCBhcyBpdCBzcGVjaWZpZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGhhcmR3YXJlIGFkZHJlc3Mgd2hpY2ggaXMgYWxzbyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGRldmljZS5cblxuVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzLCBJIG5lZWQgYSBxdWljayByZWZyZXNoZXIgb24gdGhlIHN0cnVjdHVyZSBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgIGluIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYC4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIGZpZWxkcyBkZWZpbmVkIGluIHRoYXQgc3RydWN0dXJlIHRvIGNvbmZpcm0gdGhlIHVzYWdlIGFuZCBwdXJwb3NlIG9mIHRoZSBgaGEtXHUwMDNlYWRkcmAgcG9pbnRlci4gSSdsbCBjaGVjayBpdHMgZGVmaW5pdGlvbiB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGhhcmR3YXJlIGFkZHJlc3NlcyBhcmUgcmVwcmVzZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODY4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozODowOS43MjM4NjQxMDdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjY1MzU1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5ldGRldl9od19hZGRyIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjM1PXN0cnVjdCBza19idWZmO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM2LVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM3OnN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzgtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM4OjEyLjg5MDQwNDkwNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDc4NTU4ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERldmljZSBIZWFkZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBuZXR3b3JrIGRldmljZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBzbyBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBMZXQncyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYC4gU3BlY2lmaWNhbGx5LCBJJ20gYWltaW5nIGZvciBhcm91bmQgbGluZSAyMzcuIEknbSBob3BpbmcgdGhhdCBwYXJ0aWN1bGFyIHNlY3Rpb24gY29udGFpbnMgdGhlIGRlZmluaXRpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBJJ20gbG9va2luZyBmb3IgcmVnYXJkaW5nIHRoZSBiYXNpYyBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUgb3IgcGVyaGFwcyB0aGUgaW5pdGlhbCBzZXR1cCByb3V0aW5lcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBlbGVtZW50cyBsaWtlIGRhdGEgc3RydWN0dXJlcyBmb3IgcXVldWVzLCBpbnRlcnJ1cHQgbWFuYWdlbWVudCwgb3IgcG90ZW50aWFsbHkgZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcG9pbnRlcnMuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozODoxNS4zNjg5NjYzMjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM1OlxcdHN0cnVjdCBza19idWZmO1xcbiAyMzY6XFx0XFxuIDIzNzpcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIge1xcbiAyMzg6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuIDIzOTpcXHRcXHRzdHJ1Y3QgcmJfbm9kZVxcdFxcdG5vZGU7XFxuIDI0MDpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0XFx0YWRkcltNQVhfQUREUl9MRU5dO1xcbiAyNDE6XFx0XFx0dW5zaWduZWQgY2hhclxcdFxcdHR5cGU7XFxuIDI0MjpcXHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfTEFOXFx0XFx0MVxcbiAyNDM6XFx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX1NBTlxcdFxcdDJcXG4gMjQ0OlxcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9VTklDQVNUXFx0M1xcbiAyNDU6XFx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX01VTFRJQ0FTVFxcdDRcXG4gMjQ2OlxcdFxcdGJvb2xcXHRcXHRcXHRnbG9iYWxfdXNlO1xcbiAyNDc6XFx0XFx0aW50XFx0XFx0XFx0c3luY19jbnQ7XFxuIDI0ODpcXHRcXHRpbnRcXHRcXHRcXHRyZWZjb3VudDtcXG4gMjQ5OlxcdFxcdGludFxcdFxcdFxcdHN5bmNlZDtcXG4gMjUwOlxcdFxcdHN0cnVjdCByY3VfaGVhZFxcdFxcdHJjdV9oZWFkO1xcbiAyNTE6XFx0fTtcXG4gMjUyOlxcdFxcbiAyNTM6XFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3Qge1xcbiAyNTQ6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuIDI1NTpcXHRcXHRpbnRcXHRcXHRcXHRjb3VudDtcXG4gMjU2OlxcdFxcbiAyNTc6XFx0XFx0LyogQXV4aWxpYXJ5IHRyZWUgZm9yIGZhc3RlciBsb29rdXAgb24gYWRkaXRpb24gYW5kIGRlbGV0aW9uICovXFxuIDI1ODpcXHRcXHRzdHJ1Y3QgcmJfcm9vdFxcdFxcdHRyZWU7XFxuIDI1OTpcXHR9O1xcbiAyNjA6XFx0XFxuIDI2MTpcXHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobCkgKChsKS1cXHUwMDNlY291bnQpXFxuIDI2MjpcXHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkobCkgKG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobCkgPT0gMClcXG4gMjYzOlxcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbCkgXFxcXFxcbiAyNjQ6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShoYSwgXFx1MDAyNihsKS1cXHUwMDNlbGlzdCwgbGlzdClcXG4gMjY1OlxcdFxcbiAyNjY6XFx0I2RlZmluZSBuZXRkZXZfdWNfY291bnQoZGV2KSBuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KFxcdTAwMjYoZGV2KS1cXHUwMDNldWMpXFxuIDI2NzpcXHQjZGVmaW5lIG5ldGRldl91Y19lbXB0eShkZXYpIG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkoXFx1MDAyNihkZXYpLVxcdTAwM2V1YylcXG4gMjY4OlxcdCNkZWZpbmUgbmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikgXFxcXFxcbiAyNjk6XFx0XFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgXFx1MDAyNihkZXYpLVxcdTAwM2V1YylcXG4gMjcwOlxcdCNkZWZpbmUgbmV0ZGV2X2Zvcl9lYWNoX3N5bmNlZF91Y19hZGRyKF9oYSwgX2RldikgXFxcXFxcbiAyNzE6XFx0XFx0bmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoKF9oYSksIChfZGV2KSkgXFxcXFxcbiAyNzI6XFx0XFx0XFx0aWYgKChfaGEpLVxcdTAwM2VzeW5jX2NudClcXG4gMjczOlxcdFxcbiAyNzQ6XFx0I2RlZmluZSBuZXRkZXZfbWNfY291bnQoZGV2KSBuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KFxcdTAwMjYoZGV2KS1cXHUwMDNlbWMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM4OjE1LjM2OTM4MDM5NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODkxNTIwODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGhhYCBFbnRyeSBBZGRpdGlvbiBpbiB0aGUgTmV0d29yayBDb3JlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRob3NlIGBoYWAgKGhhcmR3YXJlIGFkZHJlc3MsIHByZXN1bWFibHkpIGVudHJpZXMgYXJlIGJlaW5nIGFkZGVkIGluLCBzYXksIGBkZXZfbWNfYWRkYCBvciBzaW1pbGFyIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEknbSB0aGlua2luZyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBwb2tpbmcgYXJvdW5kIGlzIGluIGBuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jYC4gVGhhdCBmaWxlIGxpa2VseSBoYW5kbGVzIGEgZ29vZCBjaHVuayBvZiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgYW5kIG9wZXJhdGlvbnMgZm9yIG1hbmFnaW5nIHRob3NlIGxpc3RzIG9mIGRldmljZSBhZGRyZXNzZXMuIEl0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgbWVhdCBvZiB0aGUgYGhhYCBpbnNlcnRpb24gbG9naWMgYW5kIGhvcGVmdWxseSB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MgYmVoaW5kIGl0LiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjk0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozODoxNy4yNjA5MDM3NDZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzUyODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faHdfYWRkcl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NTM9X19od19hZGRyX2NyZWF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc0LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NzU6c3RhdGljIGludCBfX2h3X2FkZHJfYWRkX2V4KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzYtXFx0XFx0XFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMyLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMzOnN0YXRpYyBpbnQgX19od19hZGRyX2FkZChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNC1cXHRcXHRcXHQgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzYte1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3OlxcdHJldHVybiBfX2h3X2FkZHJfYWRkX2V4KGxpc3QsIGFkZHIsIGFkZHJfbGVuLCBhZGRyX3R5cGUsIGZhbHNlLCBmYWxzZSxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzOC1cXHRcXHRcXHRcXHQwLCBmYWxzZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTIxMj1zdGF0aWMgaW50IF9faHdfYWRkcl9zeW5jX29uZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdG9fbGlzdCxcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjE3LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjE4OlxcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgodG9fbGlzdCwgaGEtXFx1MDAzZWFkZHIsIGFkZHJfbGVuLCBoYS1cXHUwMDNldHlwZSxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxOS1cXHRcXHRcXHQgICAgICAgZmFsc2UsIHRydWUsIGhhLVxcdTAwM2VzeW5jX2NudCwgZmFsc2UpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz02Nzk9aW50IGRldl9hZGRyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjg4LVxcdG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Njg5OlxcdGVyciA9IF9faHdfYWRkcl9hZGQoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBzaXplb2YoYWRkciksXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02OTAtXFx0XFx0XFx0ICAgIE5FVERFVl9IV19BRERSX1RfTEFOKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NzI5PWludCBkZXZfYWRkcl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzM4LVxcdFxcdHJldHVybiBlcnI7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo3Mzk6XFx0ZXJyID0gX19od19hZGRyX2FkZChcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfYWRkcnMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sIGFkZHJfdHlwZSk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03NDAtXFx0aWYgKCFlcnIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTc5Mj1pbnQgZGV2X3VjX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc5Ni1cXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjc5NzpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFxcdTAwMjZkZXYtXFx1MDAzZXVjLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzk4LVxcdFxcdFxcdCAgICAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QsIHRydWUsIGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz04MTU9aW50IGRldl91Y19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODE5LVxcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODIwOlxcdGVyciA9IF9faHdfYWRkcl9hZGQoXFx1MDAyNmRldi1cXHUwMDNldWMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04MjEtXFx0XFx0XFx0ICAgIE5FVERFVl9IV19BRERSX1RfVU5JQ0FTVCk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk3Nz1pbnQgZGV2X21jX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4MS1cXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjk4MjpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFxcdTAwMjZkZXYtXFx1MDAzZW1jLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTgzLVxcdFxcdFxcdCAgICAgICBORVRERVZfSFdfQUREUl9UX01VTFRJQ0FTVCwgdHJ1ZSwgZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk5Mj1zdGF0aWMgaW50IF9fZGV2X21jX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05OTctXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5OTg6XFx0ZXJyID0gX19od19hZGRyX2FkZF9leChcXHUwMDI2ZGV2LVxcdTAwM2VtYywgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk5OS1cXHRcXHRcXHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIGdsb2JhbCwgZmFsc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM4OjE3LjMxNTI1OTYwN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjg3MTkwODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBEZXZpY2UgQWRkcmVzcyBDcmVhdGlvbiBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgbmV0d29yayBoYXJkd2FyZSBhZGRyZXNzZXMgYXJlIGJlaW5nIGNyZWF0ZWQsIHNvIEknbSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBsaWtlbHkgc291cmNlIGNvZGUuIExldCdzIHN0YXJ0IHdpdGggYF9faHdfYWRkcl9jcmVhdGVgIHdpdGhpbiBgbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY2AuIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gaG9sZHMgdGhlIGNvcmUgbG9naWMgZm9yIGdlbmVyYXRpbmcgb3IgYXNzaWduaW5nIHRob3NlIE1BQyBhbmQgb3RoZXIgaGFyZHdhcmUgYWRkcmVzc2VzLiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IGNlbnRyYWwgdG8gdGhlIG92ZXJhbGwgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozODoxOS4wMDI0NTM5ODJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0fVxcbiAgNTE6XFx0XFxuICA1MjpcXHRzdGF0aWMgc3RydWN0IG5ldGRldl9od19hZGRyKlxcbiAgNTM6XFx0X19od19hZGRyX2NyZWF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuICA1NDpcXHRcXHRcXHQgdW5zaWduZWQgY2hhciBhZGRyX3R5cGUsIGJvb2wgZ2xvYmFsLCBib29sIHN5bmMpXFxuICA1NTpcXHR7XFxuICA1NjpcXHRcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbiAgNTc6XFx0XFx0aW50IGFsbG9jX3NpemU7XFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdGFsbG9jX3NpemUgPSBzaXplb2YoKmhhKTtcXG4gIDYwOlxcdFxcdGlmIChhbGxvY19zaXplIFxcdTAwM2MgTDFfQ0FDSEVfQllURVMpXFxuICA2MTpcXHRcXHRcXHRhbGxvY19zaXplID0gTDFfQ0FDSEVfQllURVM7XFxuICA2MjpcXHRcXHRoYSA9IGttYWxsb2MoYWxsb2Nfc2l6ZSwgR0ZQX0FUT01JQyk7XFxuICA2MzpcXHRcXHRpZiAoIWhhKVxcbiAgNjQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA2NTpcXHRcXHRtZW1jcHkoaGEtXFx1MDAzZWFkZHIsIGFkZHIsIGFkZHJfbGVuKTtcXG4gIDY2OlxcdFxcdGhhLVxcdTAwM2V0eXBlID0gYWRkcl90eXBlO1xcbiAgNjc6XFx0XFx0aGEtXFx1MDAzZXJlZmNvdW50ID0gMTtcXG4gIDY4OlxcdFxcdGhhLVxcdTAwM2VnbG9iYWxfdXNlID0gZ2xvYmFsO1xcbiAgNjk6XFx0XFx0aGEtXFx1MDAzZXN5bmNlZCA9IHN5bmMgPyAxIDogMDtcXG4gIDcwOlxcdFxcdGhhLVxcdTAwM2VzeW5jX2NudCA9IDA7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHJldHVybiBoYTtcXG4gIDczOlxcdH1cXG4gIDc0OlxcdFxcbiAgNzU6XFx0c3RhdGljIGludCBfX2h3X2FkZHJfYWRkX2V4KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbiAgNzY6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcXG4gIDc3OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYyxcXG4gIDc4OlxcdFxcdFxcdFxcdCAgICBpbnQgc3luY19jb3VudCwgYm9vbCBleGNsdXNpdmUpXFxuICA3OTpcXHR7XFxuICA4MDpcXHRcXHRzdHJ1Y3QgcmJfbm9kZSAqKmluc19wb2ludCA9IFxcdTAwMjZsaXN0LVxcdTAwM2V0cmVlLnJiX25vZGUsICpwYXJlbnQgPSBOVUxMO1xcbiAgODE6XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0aWYgKGFkZHJfbGVuIFxcdTAwM2UgTUFYX0FERFJfTEVOKVxcbiAgODQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdHdoaWxlICgqaW5zX3BvaW50KSB7XFxuICA4NzpcXHRcXHRcXHRpbnQgZGlmZjtcXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0XFx0aGEgPSByYl9lbnRyeSgqaW5zX3BvaW50LCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIG5vZGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozODoxOS4wMDI2MzE2MjJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTA3MjkyNzMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBBZGRyZXNzIER1bXAgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtdWx0aWNhc3QgYWRkcmVzcyBoYW5kbGluZyB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGVzZSBhZGRyZXNzZXMgYXJlIGR1bXBlZCBhbmQgaGFuZGxlZCB3aXRoIG5ldGxpbmsuIEZpcnN0LCBJIHNlZSB0aGF0IGBfX2h3X2FkZHJfY3JlYXRlYCBkb2VzIGEgc3RyYWlnaHQgYG1lbWNweWAgZnJvbSB0aGUgcHJvdmlkZWQgYWRkcmVzcyAoYGFkZHJgKSB0byB0aGUgaGFyZHdhcmUgYWRkcmVzcyBzdHJ1Y3R1cmUgKGBoYS1cdTAwM2VhZGRyYCkuIFRoZSBsZW5ndGggaXMgZGV0ZXJtaW5lZCBieSBgZGV2LVx1MDAzZWFkZHJfbGVuYCwgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cblRoZW4sIGxvb2tpbmcgYXQgYHJ0bmxfZmlsbF9tY2FkZHJgLCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgYG5sYV9wdXRgIGlzIHVzZWQgdG8gaW5zZXJ0IHRoaXMgaGFyZHdhcmUgYWRkcmVzcyBpbnRvIHRoZSBuZXRsaW5rIG1lc3NhZ2UgdXNpbmcgYElGQV9NVUxUSUNBU1RgLiBJdCB1c2VzIHRoZSAqZXhhY3QqIHNhbWUgbGVuZ3RoLCBgZGV2LVx1MDAzZWFkZHJfbGVuYCwgdGhhdCB3YXMgdXNlZCBkdXJpbmcgdGhlIGFkZHJlc3MgY3JlYXRpb24uIFRoYXQncyBnb29kLCBjb25zaXN0ZW50IGRhdGEgaGFuZGxpbmcgc28gZmFyLiBBbmQgaW1wb3J0YW50bHksIGBubGFfcHV0YCB0YWtlcyBjYXJlIG9mIHBhZGRpbmcgdGhlIGF0dHJpYnV0ZSB0byA0LWJ5dGUgYWxpZ25tZW50LCB3aGljaCBJIGV4cGVjdC5cblxuTm93LCBJJ20gZXhhbWluaW5nIGBydG5sX2R1bXBfbWNhZGRyYCwgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBkdW1waW5nIHRoZXNlIG11bHRpY2FzdCBhZGRyZXNzZXMuIEkgY2FuIHNlZSBpdCdzIHRha2luZyBhIGBzdHJ1Y3Qgc2tfYnVmZmAgZm9yIHRoZSBuZXRsaW5rIG1lc3NhZ2UsIGEgYHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrYCB0aGF0IGhvbGRzIHRoZSBzdGF0ZSwgYW5kIHBvdGVudGlhbGx5IGFuIGBpZmluZGV4YCB0byBmaWx0ZXIgYnkuIEl0IGFwcGVhcnMgaXQgd2lsbCBpdGVyYXRlIHRocm91Z2ggZWl0aGVyIGEgc3BlY2lmaWMgZGV2aWNlIG9yIGFsbCBkZXZpY2VzLCBkZXBlbmRpbmcgb24gdGhlIGBpZmluZGV4YCB2YWx1ZSBwYXNzZWQgaW4gdGhlIHJlcXVlc3QuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBpbiB0aGF0IGNhbGxiYWNrJ3MgY29udGV4dCwgYGNiLVx1MDAzZWN0eGAuIFRoYW5rZnVsbHksIGl0J3MgbWVudGlvbmVkIHRoYXQgdGhlIG5ldGxpbmsgY29yZSBpdHNlbGYgemVyby1maWxscyBgY2ItXHUwMDNlY3R4YCBhdCB0aGUgc3RhcnQgb2YgYSBkdW1wLiBUaGF0J3MgYSByZWxpYWJsZSBpbml0aWFsaXphdGlvbiBhbmQgZ29vZCB0byBrbm93LiBOb3cgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgYGZvcl9lYWNoX25ldGRldl9kdW1wYCBtYWNybyB3b3JrcywgYXMgaXQgc2VlbXMgdG8gYmUgdGhlIG9uZSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgZGV2aWNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBJJ2xsIHNlYXJjaCBmb3IgdGhpcyBtYWNybyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTU5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzg6MjguMDc1NTYyMTE3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA5NDExOTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvcl9lYWNoX25ldGRldl9kdW1wXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIi5jbGFuZy1mb3JtYXQ9NzE9Rm9yRWFjaE1hY3JvczpcXG4tLVxcbi5jbGFuZy1mb3JtYXQtMzQ2LSAgLSAnZm9yX2VhY2hfbmV0ZGV2X2NvbnRpbnVlX3JldmVyc2UnXFxuLmNsYW5nLWZvcm1hdDozNDc6ICAtICdmb3JfZWFjaF9uZXRkZXZfZHVtcCdcXG4uY2xhbmctZm9ybWF0LTM0OC0gIC0gJ2Zvcl9lYWNoX25ldGRldl9mZWF0dXJlJ1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0zMzcxPWludCBjYWxsX25ldGRldmljZV9ub3RpZmllcnNfaW5mbyh1bnNpZ25lZCBsb25nIHZhbCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzM5My1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMzOTQ6I2RlZmluZSBmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGQsIGlmaW5kZXgpXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzM5NS1cXHRmb3IgKDsgKGQgPSB4YV9maW5kKFxcdTAwMjYobmV0KS1cXHUwMDNlZGV2X2J5X2luZGV4LCBcXHUwMDI2aWZpbmRleCxcXHRcXHRcXFxcXFxuLS1cXG5uZXQvODAyMXEvdmxhbnByb2MuYz0xNjY9c3RhdGljIHZvaWQgKnZsYW5fc2VxX2Zyb21faW5kZXgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5wcm9jLmMtMTcwLVxcbm5ldC84MDIxcS92bGFucHJvYy5jOjE3MTpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChzZXFfZmlsZV9uZXQoc2VxKSwgZGV2LCBpZmluZGV4KSB7XFxubmV0LzgwMjFxL3ZsYW5wcm9jLmMtMTcyLVxcdFxcdGlmICghaXNfdmxhbl9kZXYoZGV2KSlcXG4tLVxcbm5ldC9jb3JlL25ldC1wcm9jZnMuYz0xMD1zdGF0aWMgdm9pZCAqZGV2X3NlcV9mcm9tX2luZGV4KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcXG4tLVxcbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0xNC1cXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmM6MTU6XFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAoc2VxX2ZpbGVfbmV0KHNlcSksIGRldiwgaWZpbmRleCkge1xcbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0xNi1cXHRcXHQqcG9zID0gZGV2LVxcdTAwM2VpZmluZGV4O1xcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sX3VzZXIuYz04MT1uZXRkZXZfbmxfcGFnZV9wb29sX2dldF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmMtOTgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGFnZV9wb29sc19sb2NrKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jOjk5OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgbmV0ZGV2LCBzdGF0ZS1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmMtMTAwLVxcdFxcdC8qIEVpdGhlciB0aGUgcHJvdmlkZWQgaWZpbmRleCBkb2Vzbid0IGV4aXN0IG9yIGRvbmUgZHVtcGluZyAqL1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjU0ND1zdGF0aWMgaW50IHJ0bmxfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjYxNi1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNjE3OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKHRndF9uZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjYxOC1cXHRcXHRpZiAobGlua19kdW1wX2ZpbHRlcmVkKGRldiwgbWFzdGVyX2lkeCwga2luZF9vcHMpKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NDY1NT1zdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDY4NC1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0Njg1OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00Njg2LVxcdFxcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXFx1MDAyNmN0eC1cXHUwMDNlYWRkcl9pZHgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz01MjcxPXN0YXRpYyBpbnQgcnRubF9mZGJfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01MzAwLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjUzMDE6XFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTUzMDItXFx0XFx0aWYgKGJycG9ydF9pZHggXFx1MDAyNlxcdTAwMjYgKGRldi1cXHUwMDNlaWZpbmRleCAhPSBicnBvcnRfaWR4KSlcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTY2MDQ9c3RhdGljIGludCBydG5sX3N0YXRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjYzNS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo2NjM2OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy02NjM3LVxcdFxcdGVyciA9IHJ0bmxfZmlsbF9zdGF0c2luZm8oc2tiLCBkZXYsIFJUTV9ORVdTVEFUUyxcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz02Mzg9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTY0Ny1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2V0aHRvb2wvbmV0bGluay5jOjY0ODpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2Vwb3NfaWZpbmRleCkge1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYy02NDktXFx0XFx0bmV0ZGV2X2hvbGQoZGV2LCBcXHUwMDI2ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jPTgwNz1zdGF0aWMgaW50IGV0aG5sX3BlcnBoeV9kdW1wX2FsbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy04MTctXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo4MTg6XFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGV0aG5sX2N0eC1cXHUwMDNlcG9zX2lmaW5kZXgpIHtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtODE5LVxcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4tLVxcbm5ldC9ldGh0b29sL3R1bm5lbHMuYz0yNDE9aW50IGV0aG5sX3R1bm5lbF9pbmZvX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvZXRodG9vbC90dW5uZWxzLmMtMjQ5LVxcdHJ0bmxfbG9jaygpO1xcbm5ldC9ldGh0b29sL3R1bm5lbHMuYzoyNTA6XFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9ldGh0b29sL3R1bm5lbHMuYy0yNTEtXFx0XFx0ZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmM9MTkzMD1zdGF0aWMgaW50IGluZXRfZHVtcF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0xOTc0LVxcbm5ldC9pcHY0L2RldmluZXQuYzoxOTc1OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKHRndF9uZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTE5NzYtXFx0XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jPTI0Mzg9c3RhdGljIGludCBpbmV0X25ldGNvbmZfZHVtcF9kZXZjb25mKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjQ2Ni1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjQvZGV2aW5ldC5jOjI0Njc6XFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9pcHY0L2RldmluZXQuYy0yNDY4LVxcdFxcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NzM4PXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9kdW1wX2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzY2LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjc2NzpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjgtXFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTQzNj1zdGF0aWMgaW50IGluZXQ2X2R1bXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0ODAtXFx0Y2ItXFx1MDAzZXNlcSA9IGluZXQ2X2Jhc2Vfc2VxKHRndF9uZXQpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTQ4MTpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcCh0Z3RfbmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ4Mi1cXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02MTc3PXN0YXRpYyBpbnQgaW5ldDZfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02MTk4LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjYxOTk6XFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjIwMC1cXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbi0tXFxubmV0L21jdHAvZGV2aWNlLmM9MTE0PXN0YXRpYyBpbnQgbWN0cF9kdW1wX2FkZHJpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9tY3RwL2RldmljZS5jLTEzNC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L21jdHAvZGV2aWNlLmM6MTM1OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBtY2ItXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvbWN0cC9kZXZpY2UuYy0xMzYtXFx0XFx0aWYgKGlmaW5kZXggXFx1MDAyNlxcdTAwMjYgaWZpbmRleCAhPSBkZXYtXFx1MDAzZWlmaW5kZXgpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmM9MTM0OD1zdGF0aWMgaW50IG1wbHNfbmV0Y29uZl9kdW1wX2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYy0xMzc1LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvbXBscy9hZl9tcGxzLmM6MTM3NjpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L21wbHMvYWZfbXBscy5jLTEzNzctXFx0XFx0bWRldiA9IG1wbHNfZGV2X3JjdShkZXYpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0xOTExPXN0YXRpYyBpbnQgdGNfZHVtcF9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE5MzYtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxOTM3OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE5MzgtXFx0XFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozODoyOS41ODQ5Nzg5MzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQzNjYzMDAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgZHVtcGl0YCBGdW5jdGlvbiBJbXBsZW1lbnRhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBoZXJlIGZvciBpbXBsZW1lbnRpbmcgdGhpcyBwYXJ0aWN1bGFyIGBkdW1waXRgIGZ1bmN0aW9uLiBMZXQncyBzZWUgaG93IG90aGVycyBoYXZlIGRvbmUgaXQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgZXhpc3RpbmcgZXhhbXBsZXMgd2l0aGluIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGUgYHJ0bmxfc3RhdHNfZHVtcGAgb3IgYGluZXRfZHVtcF9hZGRyYCBpbXBsZW1lbnRhdGlvbnMgc2VlbSBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLCBsaWtlbHkgZGVhbGluZyB3aXRoIHNpbWlsYXIgbmV0d29yay1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBhbmQgaW50ZXJhY3Rpb25zLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpdGVyYXRlLCBmb3JtYXQsIGFuZCB1bHRpbWF0ZWx5IGR1bXAgdGhlaXIgaW5mb3JtYXRpb24uXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUuIEknbGwgc3RhcnQgYnkgcmVhZGluZyB0aGUgYHJ0bmxfc3RhdHNfZHVtcGAgZnVuY3Rpb24sIHByb2JhYmx5IGxvY2F0ZWQgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgc2luY2UgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgUlROTC1yZWxhdGVkIGNvZGUuIE15IGdvYWwgaXMgdG8gZXh0cmFjdCB0aGUgZ2VuZXJhbCBwYXR0ZXJuIGZvciBhIHdlbGwtZGVzaWduZWQga2VybmVsIGR1bXAgZnVuY3Rpb24uIFRoYXQgbGlrZWx5IG1lYW5zIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdywgdGhlIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhIGl0c2VsZi4gRnJvbSB0aGVyZSwgSSBjYW4gYXBwbHkgdGhvc2UgbGVzc29ucyB0byB0aGUgY3VycmVudCB0YXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIyOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM4OjMyLjAyMTYxMjIwOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjYwMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjYwMDpcXHRcXG42NjAxOlxcdFxcdHJldHVybiBlcnI7XFxuNjYwMjpcXHR9XFxuNjYwMzpcXHRcXG42NjA0OlxcdHN0YXRpYyBpbnQgcnRubF9zdGF0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG42NjA1OlxcdHtcXG42NjA2OlxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNiLVxcdTAwM2VleHRhY2s7XFxuNjYwNzpcXHRcXHRzdHJ1Y3QgcnRubF9zdGF0c19kdW1wX2ZpbHRlcnMgZmlsdGVycztcXG42NjA4OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbjY2MDk6XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzID0gTkxNX0ZfTVVMVEk7XFxuNjYxMDpcXHRcXHRzdHJ1Y3QgaWZfc3RhdHNfbXNnICppZnNtO1xcbjY2MTE6XFx0XFx0c3RydWN0IHtcXG42NjEyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaWZpbmRleDtcXG42NjEzOlxcdFxcdFxcdGludCBpZHhhdHRyO1xcbjY2MTQ6XFx0XFx0XFx0aW50IHByaXZpZHg7XFxuNjYxNTpcXHRcXHR9ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxuNjYxNjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbjY2MTc6XFx0XFx0aW50IGVycjtcXG42NjE4OlxcdFxcbjY2MTk6XFx0XFx0Y2ItXFx1MDAzZXNlcSA9IG5ldC1cXHUwMDNlZGV2X2Jhc2Vfc2VxO1xcbjY2MjA6XFx0XFxuNjYyMTpcXHRcXHRlcnIgPSBydG5sX3ZhbGlkX3N0YXRzX3JlcShjYi1cXHUwMDNlbmxoLCBjYi1cXHUwMDNlc3RyaWN0X2NoZWNrLCB0cnVlLCBleHRhY2spO1xcbjY2MjI6XFx0XFx0aWYgKGVycilcXG42NjIzOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNjYyNDpcXHRcXG42NjI1OlxcdFxcdGlmc20gPSBubG1zZ19kYXRhKGNiLVxcdTAwM2VubGgpO1xcbjY2MjY6XFx0XFx0aWYgKCFpZnNtLVxcdTAwM2VmaWx0ZXJfbWFzaykge1xcbjY2Mjc6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmlsdGVyIG1hc2sgbXVzdCBiZSBzZXQgZm9yIHN0YXRzIGR1bXBcXFwiKTtcXG42NjI4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjY2Mjk6XFx0XFx0fVxcbjY2MzA6XFx0XFxuNjYzMTpcXHRcXHRlcnIgPSBydG5sX3N0YXRzX2dldF9wYXJzZShjYi1cXHUwMDNlbmxoLCBpZnNtLVxcdTAwM2VmaWx0ZXJfbWFzaywgXFx1MDAyNmZpbHRlcnMsXFxuNjYzMjpcXHRcXHRcXHRcXHRcXHQgICBleHRhY2spO1xcbjY2MzM6XFx0XFx0aWYgKGVycilcXG42NjM0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNjYzNTpcXHRcXG42NjM2OlxcdFxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG42NjM3OlxcdFxcdFxcdGVyciA9IHJ0bmxfZmlsbF9zdGF0c2luZm8oc2tiLCBkZXYsIFJUTV9ORVdTVEFUUyxcXG42NjM4OlxcdFxcdFxcdFxcdFxcdFxcdCAgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuNjYzOTpcXHRcXHRcXHRcXHRcXHRcXHQgIGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgMCxcXG42NjQwOlxcdFxcdFxcdFxcdFxcdFxcdCAgZmxhZ3MsIFxcdTAwMjZmaWx0ZXJzLFxcbjY2NDE6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Y3R4LVxcdTAwM2VpZHhhdHRyLCBcXHUwMDI2Y3R4LVxcdTAwM2Vwcml2aWR4LFxcbjY2NDI6XFx0XFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbjY2NDM6XFx0XFx0XFx0LyogSWYgd2UgcmFuIG91dCBvZiByb29tIG9uIHRoZSBmaXJzdCBtZXNzYWdlLFxcbjY2NDQ6XFx0XFx0XFx0ICogd2UncmUgaW4gdHJvdWJsZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzg6MzIuMDIxODM0Nzg4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyNTM5NzUyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXVsdGljYXN0IEFkZHJlc3MgRHVtcCBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBjaGVja2luZyBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLiBUaGlzIGZ1bmN0aW9uIHZhbGlkYXRlcyB0aGUgaW5jb21pbmcgZHVtcCByZXF1ZXN0LCBzcGVjaWZpY2FsbHkgZW5zdXJpbmcgdGhlIGhlYWRlciBpc24ndCBtZXNzZWQgdXAgYW5kIHRoZXJlJ3Mgbm8gZXh0cmFuZW91cyBkYXRhLiBJdCB2ZXJpZmllcyBgaWZhX3ByZWZpeGxlbmAsIGBpZmFfZmxhZ3NgLCBhbmQgYGlmYV9zY29wZWAgYXJlIHplcm8sIGFuZCB0aGF0IG5vIGFkZGl0aW9uYWwgYXR0cmlidXRlcyBhcmUgcHJlc2VudC4gVGhlIGludGVyZmFjZSBpbmRleCBpcyBleHRyYWN0ZWQgYW5kIHJldHVybmVkIHZpYSBhIHBvaW50ZXIuIE1ha2VzIHNlbnNlIOKAkyBjbGVhbiBhbmQgc3RyYWlnaHRmb3J3YXJkIHZhbGlkYXRpb24gYmVmb3JlIHByb2NlZWRpbmcuXG5cbk5vdywgSSdtIHJldmlzaXRpbmcgYHJ0bmxfZmlsbF9tY2FkZHJgLiBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgbXVsdGljYXN0IGFkZHJlc3MgaW5mb3JtYXRpb24gaXMgYXNzZW1ibGVkIGZvciB0aGUgbmV0bGluayBtZXNzYWdlLiBJIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGBubG1zZ19wdXRgIGFsbG9jYXRlcyBhbmQgemVyby1wYWRzIHRoZSBtZXNzYWdlLCBhbmQgdGhlbiB0aGUgY3JpdGljYWwgZmllbGRzIGluIGBpZmFkZHJtc2dgIGFyZSBwb3B1bGF0ZWQ6IGZhbWlseSAoQUZfUEFDS0VUKSwgcHJlZml4IGxlbmd0aCAoMCksIGZsYWdzIChiYXNlZCBvbiBgaGEtXHUwMDNlZ2xvYmFsX3VzZWApLCBzY29wZSAobGluayksIGFuZCB0aGUgaW50ZXJmYWNlIGluZGV4LiBObyBnbGFyaW5nIGluaXRpYWxpemF0aW9uIGlzc3VlcyB0aGVyZS4gQWxsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBzZXQsIGFuZCB0aGUgc3RydWN0dXJlIGRvZXNuJ3QgaGF2ZSBhbnkgcGFkZGluZyBob2xlcy4gVGhlbiB3ZSBoYXZlIHRoZSBOZXR3b3JrIExpbmsgQXR0cmlidXRlcyAoTkxBKSBzZWN0aW9uIGZvciB0aGUgTUFDIGFkZHJlc3MgYW5kIHVzZXIgY291bnQsIHdoaWNoIGlzIGFzIGV4cGVjdGVkLiBgbmxhX3B1dGAgaXMgdXNlZCB0byB3cml0ZSBpbiB0aGUgTUFDIGFkZHJlc3MgdXNpbmcgYGRldi1cdTAwM2VhZGRyX2xlbmAgYXMgYSBsZW5ndGgsIGVuc3VyaW5nIHRoYXQgd2UgcmVhZCB0aGUgYWRkcmVzcyBjb3JyZWN0bHkgYW5kIGFkZCB0aGUgY29ycmVjdCBhbW91bnQgb2YgcGFkZGluZyBhZnRlciBpdC5cblxuTmV4dCwgSSdtIHZlcmlmeWluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4gVGhlIGhlYWRlciBpcyBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkLCBhbmQgYWxsIHN0cnVjdCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQuIFRoZSBuZXR3b3JrIGxpbmsgYXR0cmlidXRlcyAoTkxBKSB1c2Uga25vd24gbGVuZ3RocyBhbmQgdGhlIGNvcnJlY3QgYnl0ZSBzaXplcy4gSSdtIGFsc28gY29uZmlybWluZyB0aGF0IHRoZSBgaWZpbmRleGAgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBpbiBgcnRubF9kdW1wX21jYWRkcmAgYW5kIHRoYXQgdGhlIGBjdHhgIHN0cnVjdCBpcyBpbml0aWFsaXplZCBhcyBwYXJ0IG9mIHRoZSBuZXRsaW5rIGNvcmUncyBjYWxsYmFjayB6ZXJvaW5nIGJlZm9yZSB0aGUgZHVtcCBzdGFydC4gVGhlIHBvaW50ZXIgYFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeGAgaXMgdXNlZCwgdGhlIG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQsIHNvIG5vIGlzc3VlcyB0aGVyZS5cblxuRmluYWxseSwgSSdtIGRvdWJsZS1jaGVja2luZyB0aGUgbG9ja2luZy4gSSBjYW4gc2VlIHRoYXQgYG5ldGlmX2FkZHJfbG9ja19iaChkZXYpYCBpcyBoZWxkIGR1cmluZyBkZXZpY2UgaXRlcmF0aW9uLCB3aGljaCBpcyBjcnVjaWFsIGZvciBjb25jdXJyZW5jeSBzYWZldHkuIEFsc28sIGByY3VfcmVhZF9sb2NrKClgIGlzIHVzZWQgZHVyaW5nIHRoZSBkZXZpY2UgaXRlcmF0aW9uLiBUaGlzIHNob3VsZCBiZSBlbm91Z2ggdG8gbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRoZSBkdW1wLlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUuIENvdWxkIGBoYS1cdTAwM2VhZGRyYCBjb250YWluIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaWYgYGRldi1cdTAwM2VhZGRyX2xlbmAgaXMgc29tZWhvdyBjaGFuZ2VkIGFmdGVyIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyBoYXMgYmVlbiBhZGRlZD8gTm90IHJlYWxseSwgYXMgYGRldi1cdTAwM2VhZGRyX2xlbmAgaXMgZml4ZWQgZm9yIGEgbmV0X2RldmljZS4gQ291bGQgdGhlIGBjdHhgIHN0cnVjdCBzaXplIGV4Y2VlZCBgc2l6ZW9mKGNiLVx1MDAzZWN0eClgPyBJJ20gY2hlY2tpbmcgdGhlIGBzdHJ1Y3QgbmV0bGlua19jYWxsYmFja2AgaW4gYGluY2x1ZGUvbGludXgvbmV0bGluay5oYCB0byBtYWtlIHN1cmUgaXQncyBsYXJnZSBlbm91Z2guIEl0IHNlZW1zIGZpbmU7IG5vIG92ZXJmbG93IGlzc3VlcyBhcmUgdmlzaWJsZS4gTG9va3MgbGlrZSB3ZSBhcmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNjYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzg6MzkuMjc1ODEyMzQ0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk3MzkzMTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0bGluay5oPTI1MT1uZXRsaW5rX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0bGluay5oLTI4MC1cXG5pbmNsdWRlL2xpbnV4L25ldGxpbmsuaDoyODE6c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sge1xcbmluY2x1ZGUvbGludXgvbmV0bGluay5oLTI4Mi1cXHRzdHJ1Y3Qgc2tfYnVmZlxcdFxcdCpza2I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM4OjQxLjY3MzIxMDMxNloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc4MjE2OTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIE5ldGxpbmsgSGVhZGVyIFN0cnVjdHVyZSoqXG5cbk9rYXksIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29yZSBOZXRsaW5rIHN0cnVjdHVyZSBkZWZpbml0aW9ucy4gTGV0J3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9uZXRsaW5rLmhgIGFuZCB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDI4MS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBmb3VuZGF0aW9uYWwgYHN0cnVjdCBubG1zZ2hkcmAgZGVmaW5pdGlvbiB0aGVyZSwgYW5kIHRoYXQncyBwcm9iYWJseSB3aGVyZSBJJ2xsIHNlZSB0aGUgYmFzaWMgbWVzc2FnZSBoZWFkZXIgbGF5b3V0LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgbGVuZ3RoLCB0eXBlLCBmbGFncywgc2VxdWVuY2UgbnVtYmVyLCBhbmQgUElEIGFyZSBkZWZpbmVkLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gR290dGEgY29uZmlybSB0aGUgdXN1YWwgc3VzcGVjdHMuIEdvdHRhIGNvbmZpcm0gdGhhdCB0aGUgaGVhZGVyIHN0cnVjdHVyZSBoYXNuJ3QgY2hhbmdlZCBpbiBzb21lIHVuZXhwZWN0ZWQgd2F5IGluIG1vcmUgcmVjZW50IGtlcm5lbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDEzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzg6NDMuOTUxNDMwNjQ3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0bGluay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MDpcXHRcXG4gMjgxOlxcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrIHtcXG4gMjgyOlxcdFxcdHN0cnVjdCBza19idWZmXFx0XFx0KnNrYjtcXG4gMjgzOlxcdFxcdGNvbnN0IHN0cnVjdCBubG1zZ2hkclxcdCpubGg7XFxuIDI4NDpcXHRcXHRpbnRcXHRcXHRcXHQoKmR1bXApKHN0cnVjdCBza19idWZmICogc2tiLFxcbiAyODU6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcXG4gMjg2OlxcdFxcdGludFxcdFxcdFxcdCgqZG9uZSkoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcXG4gMjg3OlxcdFxcdHZvaWRcXHRcXHRcXHQqZGF0YTtcXG4gMjg4OlxcdFxcdC8qIHRoZSBtb2R1bGUgdGhhdCBkdW1wIGZ1bmN0aW9uIGJlbG9uZyB0byAqL1xcbiAyODk6XFx0XFx0c3RydWN0IG1vZHVsZVxcdFxcdCptb2R1bGU7XFxuIDI5MDpcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrXFx0KmV4dGFjaztcXG4gMjkxOlxcdFxcdHUxNlxcdFxcdFxcdGZhbWlseTtcXG4gMjkyOlxcdFxcdHUxNlxcdFxcdFxcdGFuc3dlcl9mbGFncztcXG4gMjkzOlxcdFxcdHUzMlxcdFxcdFxcdG1pbl9kdW1wX2FsbG9jO1xcbiAyOTQ6XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0cHJldl9zZXEsIHNlcTtcXG4gMjk1OlxcdFxcdGludFxcdFxcdFxcdGZsYWdzO1xcbiAyOTY6XFx0XFx0Ym9vbFxcdFxcdFxcdHN0cmljdF9jaGVjaztcXG4gMjk3OlxcdFxcdHVuaW9uIHtcXG4gMjk4OlxcdFxcdFxcdHU4XFx0XFx0Y3R4W05FVExJTktfQ1RYX1NJWkVdO1xcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHRcXHQvKiBhcmdzIGlzIGRlcHJlY2F0ZWQuIENhc3QgYSBzdHJ1Y3Qgb3ZlciBjdHggaW5zdGVhZFxcbiAzMDE6XFx0XFx0XFx0ICogZm9yIHByb3BlciB0eXBlIHNhZmV0eS5cXG4gMzAyOlxcdFxcdFxcdCAqL1xcbiAzMDM6XFx0XFx0XFx0bG9uZ1xcdFxcdGFyZ3NbNl07XFxuIDMwNDpcXHRcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozODo0My45NTE1MTQxMzdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk1NzM5MjU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgYGN0eGAgaXMgYmVpbmcgdHJlYXRlZCBhcyBgTkVUTElOS19DVFhfU0laRWAgKHdoaWNoIGlzIHVzdWFsbHkgZWl0aGVyIDQ4IG9yIDY0IGJ5dGVzKSwgYnV0IGBzaXplb2YoKmN0eClgIGlzIG9ubHkgMTYgYnl0ZXMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVkIG15IGludGVyZXN0LCBidXQgSSB0aGluayB3ZSBhcmUgb2suXG5cbkkgY2FuIGNvbmZpcm0gdGhhdCBldmVyeSBmaWVsZCBpbiB0aGUgYGlmYWRkcm1zZ2Agc3RydWN0dXJlIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQsIGFuZCB0aGF0IHRoaXMgc3RydWN0dXJlIGRvZXNuJ3QgaGF2ZSBhbnkgaW50ZXJuYWwgcGFkZGluZy4gIFRoZSBgbmxhX3B1dGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCB0byBjb25zdHJ1Y3QgYXR0cmlidXRlcywgYW5kIGl0IHNhZmVseSB0YWtlcyBjYXJlIG9mIGFueSBuZWNlc3NhcnkgYWxpZ25tZW50IHBhZGRpbmcgYnkgemVyb2luZyBpdCBvdXQuIEZ1cnRoZXJtb3JlLCBgaGEtXHUwMDNlYWRkcmAgaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIGNvcnJlY3QgbGVuZ3RoIChgZGV2LVx1MDAzZWFkZHJfbGVuYCksIHdoZW4gdGhlIGhhcmR3YXJlIGFkZHJlc3MgaXMgcmVnaXN0ZXJlZC4gSSBjYW4ndCBzZWUgYW55IGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyBhbnkgdW5pbml0aWFsaXplZCBkYXRhIGludm9sdmVkIGluIGFueSBjb250cm9sIGZsb3cuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMgb3IgbG9ja2luZyBpc3N1ZXMsIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3IgbG9ja2luZyBlcnJvcnMsIGFyZSBleHBlY3RlZCB0byBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBkZXRlY3RvcnMuXG5cblRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSd2ZSBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgY2hlY2tzOlxuXG4xLiAgKipLZXJuZWwgU3RydWN0dXJlcyB0byBVc2VyIFNwYWNlOioqIEFyZSB0aGVyZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBwYWRkaW5nIGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQ/IE5vLCB0aGUgYGlmYWRkcm1zZ2Agc3RydWN0IGhhcyBubyBwYWRkaW5nLCBhbmQgZXZlcnkgZmllbGQgaXMgYXNzaWduZWQuIFRoZSBgbmxhX3B1dGAgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiBhbnkgcGFkZGluZyBmb3IgVExWcy4gVGhlIGBoYS1cdTAwM2VhZGRyYCBkYXRhIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLlxuMi4gICoqQnJhbmNoaW5nIG9uIFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIElzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8uIGBpZmluZGV4YCBpcyBjaGVja2VkIG9ubHkgYWZ0ZXIgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCBzdWNjZWVkcy4gYGN0eGAgaXMgemVybyBpbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0uXG4zLiAgKipDb21wbGV4IFN0cnVjdHVyZXM6KiogSXMgdGhlcmUgYW55dGhpbmcgcGFydGljdWxhcmx5IGNvbXBsZXggdGhhdCBtaWdodCBiZSBhIGNvbmNlcm4/IE5vLlxuNC4gICoqQm91bmRzIENoZWNrcy9MZW5ndGggTWFuaXB1bGF0aW9uOioqIElzIGFueSBhY2Nlc3MgdG8gbWVtb3J5IGRlcGVuZGVudCBvbiBhIGJvdW5kcyBjaGVjayBvciBzaXplIGRldGVybWluZWQgYnkgYW4gdW5pbml0aWFsaXplZCB2YWx1ZT8gTm8uXG5cbkknbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTiA9IGZhbHNlYCBhbmQgcHJvdmlkZSBhIGNsZWFyIGV4cGxhbmF0aW9uIHRvIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5OTAsIk91dHB1dFRva2VucyI6MzI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzg6NDguOTA4OTA5NTYxWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIG5ldGxpbmsuIFxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSBcXHUwMDI2IEluZm8tbGVha3MgKEtNU0FOKTogQWxsIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIGluIG5ldGxpbmsgcmVzcG9uc2VzIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBpZmFkZHJtc2dgIGhlYWRlciBoYXMgYSA4LWJ5dGUgbGF5b3V0IHdpdGhvdXQgaW50ZXJuYWwgcGFkZGluZyBob2xlcywgYW5kIGFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBzZXQuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBJRkFfTVVMVElDQVNUYCBhbmQgYElGQV9NQ19VU0VSU2ApIGFyZSBhZGRlZCB3aXRoIGBubGFfcHV0YCAvIGBubGFfcHV0X3UzMmAgd2hpY2ggemVybyBhbnkgdHJhaWxpbmcgYXR0cmlidXRlIGFsaWdubWVudCBwYWRkaW5nLiBBZGRyZXNzIGJ5dGVzIGluIGBoYS1cXHUwMDNlYWRkcmAgYXJlIGluaXRpYWxpemVkIGR1cmluZyBoYXJkd2FyZSBhZGRyZXNzIGNyZWF0aW9uIHVwIHRvIGBkZXYtXFx1MDAzZWFkZHJfbGVuYC4gQ29udHJvbCBmbG93IHZhcmlhYmxlcyAoc3VjaCBhcyBkdW1wIGBjdHhgIGFuZCBgaWZpbmRleGApIGFyZSBlaXRoZXIgemVyb2VkIGJ5IHRoZSBuZXRsaW5rIHN1YnN5c3RlbSBvciBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcbi0gTWVtb3J5IFNhZmV0eSBcXHUwMDI2IENvbmN1cnJlbmN5IChLQVNBTi9MT0NLREVQKTogVGhlIGNoYW5nZXMgaW52b2x2ZSBSQ1UgbG9va3VwcywgbmV0bGluayBkdW1wIGNhbGxiYWNrcywgYW5kIGRldmljZSBhZGRyZXNzIGxpc3QgbG9ja3MgKGBuZXRpZl9hZGRyX2xvY2tfYmhgKSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgY29uZmlndXJhdGlvbnMuXFxuXFxuVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKEFGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgbmV0bGluay4gXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFxcdTAwMjYgSW5mby1sZWFrcyAoS01TQU4pOiBBbGwgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UgaW4gbmV0bGluayByZXNwb25zZXMgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBgc3RydWN0IGlmYWRkcm1zZ2AgaGVhZGVyIGhhcyBhIDgtYnl0ZSBsYXlvdXQgd2l0aG91dCBpbnRlcm5hbCBwYWRkaW5nIGhvbGVzLCBhbmQgYWxsIGZpZWxkcyAoYGlmYV9mYW1pbHlgLCBgaWZhX3ByZWZpeGxlbmAsIGBpZmFfZmxhZ3NgLCBgaWZhX3Njb3BlYCwgYGlmYV9pbmRleGApIGFyZSBleHBsaWNpdGx5IHNldC4gVGhlIG5ldGxpbmsgYXR0cmlidXRlcyAoYElGQV9NVUxUSUNBU1RgIGFuZCBgSUZBX01DX1VTRVJTYCkgYXJlIGFkZGVkIHdpdGggYG5sYV9wdXRgIC8gYG5sYV9wdXRfdTMyYCB3aGljaCB6ZXJvIGFueSB0cmFpbGluZyBhdHRyaWJ1dGUgYWxpZ25tZW50IHBhZGRpbmcuIEFkZHJlc3MgYnl0ZXMgaW4gYGhhLVxcdTAwM2VhZGRyYCBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIGhhcmR3YXJlIGFkZHJlc3MgY3JlYXRpb24gdXAgdG8gYGRldi1cXHUwMDNlYWRkcl9sZW5gLiBDb250cm9sIGZsb3cgdmFyaWFibGVzIChzdWNoIGFzIGR1bXAgYGN0eGAgYW5kIGBpZmluZGV4YCkgYXJlIGVpdGhlciB6ZXJvZWQgYnkgdGhlIG5ldGxpbmsgc3Vic3lzdGVtIG9yIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuLSBNZW1vcnkgU2FmZXR5IFxcdTAwMjYgQ29uY3VycmVuY3kgKEtBU0FOL0xPQ0tERVApOiBUaGUgY2hhbmdlcyBpbnZvbHZlIFJDVSBsb29rdXBzLCBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzLCBhbmQgZGV2aWNlIGFkZHJlc3MgbGlzdCBsb2NrcyAoYG5ldGlmX2FkZHJfbG9ja19iaGApLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBjb25maWd1cmF0aW9ucy5cXG5cXG5UaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnRyb2R1Y2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq26sj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 01:49:43 +0000 UTC FinishedAt: 2026-09-09 02:38:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e2573085497807b551324de20d368127602151ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e2573085497807b551324de20d368127602151ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "b646945b-f87e-41bb-829b-c27f09eae19c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtnl_dump_mcaddr", "rtnl_dump_mcaddr_dev", "rtnl_valid_dump_mcaddr_req", "rtnl_fill_mcaddr" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKEFGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgbmV0bGluay4gXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFx1MDAyNiBJbmZvLWxlYWtzIChLTVNBTik6IEFsbCBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSBpbiBuZXRsaW5rIHJlc3BvbnNlcyBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGBzdHJ1Y3QgaWZhZGRybXNnYCBoZWFkZXIgaGFzIGEgOC1ieXRlIGxheW91dCB3aXRob3V0IGludGVybmFsIHBhZGRpbmcgaG9sZXMsIGFuZCBhbGwgZmllbGRzIChgaWZhX2ZhbWlseWAsIGBpZmFfcHJlZml4bGVuYCwgYGlmYV9mbGFnc2AsIGBpZmFfc2NvcGVgLCBgaWZhX2luZGV4YCkgYXJlIGV4cGxpY2l0bHkgc2V0LiBUaGUgbmV0bGluayBhdHRyaWJ1dGVzIChgSUZBX01VTFRJQ0FTVGAgYW5kIGBJRkFfTUNfVVNFUlNgKSBhcmUgYWRkZWQgd2l0aCBgbmxhX3B1dGAgLyBgbmxhX3B1dF91MzJgIHdoaWNoIHplcm8gYW55IHRyYWlsaW5nIGF0dHJpYnV0ZSBhbGlnbm1lbnQgcGFkZGluZy4gQWRkcmVzcyBieXRlcyBpbiBgaGEtXHUwMDNlYWRkcmAgYXJlIGluaXRpYWxpemVkIGR1cmluZyBoYXJkd2FyZSBhZGRyZXNzIGNyZWF0aW9uIHVwIHRvIGBkZXYtXHUwMDNlYWRkcl9sZW5gLiBDb250cm9sIGZsb3cgdmFyaWFibGVzIChzdWNoIGFzIGR1bXAgYGN0eGAgYW5kIGBpZmluZGV4YCkgYXJlIGVpdGhlciB6ZXJvZWQgYnkgdGhlIG5ldGxpbmsgc3Vic3lzdGVtIG9yIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG4tIE1lbW9yeSBTYWZldHkgXHUwMDI2IENvbmN1cnJlbmN5IChLQVNBTi9MT0NLREVQKTogVGhlIGNoYW5nZXMgaW52b2x2ZSBSQ1UgbG9va3VwcywgbmV0bGluayBkdW1wIGNhbGxiYWNrcywgYW5kIGRldmljZSBhZGRyZXNzIGxpc3QgbG9ja3MgKGBuZXRpZl9hZGRyX2xvY2tfYmhgKSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgY29uZmlndXJhdGlvbnMuXG5cblRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXRsaW5rIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgLyBSVE1fR0VUTVVMVElDQVNUKSBpbiBydG5ldGxpbmsuIFRoZSBuZXdseSBhZGRlZCBjb2RlIHZhbGlkYXRlcyB1c2VyIGR1bXAgcmVxdWVzdHMsIHRyYXZlcnNlcyBkZXZpY2UgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgdW5kZXIgbG9jaywgYW5kIHNlcmlhbGl6ZXMgcnRuZXRsaW5rIGF0dHJpYnV0ZXMsIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB2aWEgbmV0bGluayBzb2NrZXQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI5ZjIyOWFjOGU2NmRiNDc0NzFhZTk5NzA5NTE4OWM4OTU0NmEyMzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDAyOjM3OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5pbmRleCAwZWNiZDI0Yzg5MGM2Li4yYTIzMTBjYjBkZjAxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuQEAgLTE2OCw3ICYjNDM7MTY4LDEyIEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6ICppZmFkZHItYWxsXG4gICAgIC1cbiAgICAgICBuYW1lOiBnZXRtdWx0aWNhc3Rcbi0gICAgICBkb2M6IEdldCAvIGR1bXAgSVB2NC9JUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMuXG4mIzQzOyAgICAgIGRvYzogfFxuJiM0MzsgICAgICAgIEdldCAvIGR1bXAgbXVsdGljYXN0IGFkZHJlc3Nlcy4gaWZhLWZhbWlseSBzZWxlY3RzIHRoZSBhZGRyZXNzXG4mIzQzOyAgICAgICAgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2IGZvciB0aGUgSVAgbXVsdGljYXN0IGdyb3VwcyBqb2luZWQgb25cbiYjNDM7ICAgICAgICBhIGRldmljZSwgQUZfUEFDS0VUIGZvciB0aGUgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIHRoZVxuJiM0MzsgICAgICAgIGRldmljZSBmaWx0ZXIuIExpbmstbGF5ZXIgZW50cmllcyBhZGRlZCB3aXRoIFNJT0NBRERNVUxUSSBhcmVcbiYjNDM7ICAgICAgICByZXBvcnRlZCB3aXRoIHRoZSBwZXJtYW5lbnQgZmxhZyBzZXQuXG4gICAgICAgYXR0cmlidXRlLXNldDogYWRkci1hdHRyc1xuICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnXG4gICAgICAgZG86XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggODFjNWE2MTA0ZGVhMS4uYjJmZWJkYjY5MTVlOCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTQ1NjYsNiAmIzQzOzQ1NjYsMTMzIEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbiA/IDogcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhLCB1MzIgcG9ydGlkLFxuJiM0MztcdFx0XHQgICAgdTMyIHNlcSwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuJiM0MztcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuJiM0MztcbiYjNDM7XHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLFxuJiM0MztcdFx0XHRmbGFncyk7XG4mIzQzO1x0aWYgKCFubGgpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRpZm0gPSBubG1zZ19kYXRhKG5saCk7XG4mIzQzO1x0aWZtLVx1MDAzZWlmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7XG4mIzQzO1x0aWZtLVx1MDAzZWlmYV9wcmVmaXhsZW4gPSAwO1xuJiM0MztcdGlmbS1cdTAwM2VpZmFfZmxhZ3MgPSBoYS1cdTAwM2VnbG9iYWxfdXNlID8gSUZBX0ZfUEVSTUFORU5UIDogMDtcbiYjNDM7XHRpZm0tXHUwMDNlaWZhX3Njb3BlID0gUlRfU0NPUEVfTElOSztcbiYjNDM7XHRpZm0tXHUwMDNlaWZhX2luZGV4ID0gZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1xuJiM0MztcdGlmIChubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVx1MDAzZWFkZHJfbGVuLCBoYS1cdTAwM2VhZGRyKSB8fFxuJiM0MztcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXHUwMDNlcmVmY291bnQpKSB7XG4mIzQzO1x0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuJiM0MztcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5sbXNnX2VuZChza2IsIG5saCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuJiM0MztcdGludCBhZGRyX2lkeCA9IDA7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xuJiM0MztcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHtcbiYjNDM7XHRcdGlmIChhZGRyX2lkeCBcdTAwM2MgKnNfYWRkcl9pZHgpIHtcbiYjNDM7XHRcdFx0YWRkcl9pZHgmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVyciA9IHJ0bmxfZmlsbF9tY2FkZHIoc2tiLCBkZXYsIGhhLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuJiM0MztcdFx0XHRcdCAgICAgICBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncyk7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGFkZHJfaWR4JiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcbiYjNDM7XG4mIzQzO1x0KnNfYWRkcl9pZHggPSBlcnIgXHUwMDNjIDAgPyBhZGRyX2lkeCA6IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgIGludCAqcGlmaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XG4mIzQzO1xuJiM0MztcdGlmbSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKmlmbSkpO1xuJiM0MztcdGlmICghaWZtKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtJbnZhbGlkIGhlYWRlciBmb3IgbXVsdGljYXN0IGR1bXAgcmVxdWVzdFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXHUwMDNlaWZhX2ZsYWdzIHx8IGlmbS1cdTAwM2VpZmFfc2NvcGUpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O0ludmFsaWQgdmFsdWVzIGluIG11bHRpY2FzdCBkdW1wIGhlYWRlclwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChubG1zZ19hdHRybGVuKG5saCwgc2l6ZW9mKCppZm0pKSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7SW52YWxpZCBkYXRhIGFmdGVyIG11bHRpY2FzdCBkdW1wIGhlYWRlclwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpwaWZpbmRleCA9IGlmbS1cdTAwM2VpZmFfaW5kZXg7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuJiM0MztcdFx0aW50IGFkZHJfaWR4O1xuJiM0MztcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4mIzQzO1x0aW50IGlmaW5kZXg7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItXHUwMDNlbmxoLCBjYi1cdTAwM2VleHRhY2ssIFx1MDAyNmlmaW5kZXgpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmIChpZmluZGV4KSB7XG4mIzQzO1x0XHRjYi1cdTAwM2VhbnN3ZXJfZmxhZ3MgfD0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcbiYjNDM7XHRcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4mIzQzO1x0XHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIGlmaW5kZXgpO1xuJiM0MztcdFx0aWYgKCFkZXYpIHtcbiYjNDM7XHRcdFx0ZXJyID0gLUVOT0RFVjtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbiYjNDM7XHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LFxuJiM0MztcdFx0XHRcdFx0ICAgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztvdXQ6XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3Qgc2tfYnVmZiAqcnRtc2dfaWZpbmZvX2J1aWxkX3NrYihpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLFxuIFx0XHRcdFx0ICAgICAgIHUzMiBldmVudCwgZ2ZwX3QgZmxhZ3MsIGludCAqbmV3X25zaWQsXG5AQCAtNzI1MSw2ICYjNDM7NzM3OCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XG4gXHR7Lm1zZ3R5cGUgPSBSVE1fU0VUU1RBVFMsIC5kb2l0ID0gcnRubF9zdGF0c19zZXR9LFxuIFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LFxuIFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxuJiM0MztcdHsucHJvdG9jb2wgPSBQRl9QQUNLRVQsIC5tc2d0eXBlID0gUlRNX0dFVE1VTFRJQ0FTVCxcbiYjNDM7XHQgLmR1bXBpdCA9IHJ0bmxfZHVtcF9tY2FkZHIsIC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0dFVExJTkssXG4gXHQgLmR1bXBpdCA9IHJ0bmxfYnJpZGdlX2dldGxpbmt9LFxuIFx0ey5wcm90b2NvbCA9IFBGX0JSSURHRSwgLm1zZ3R5cGUgPSBSVE1fREVMTElOSyxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggNWNjM2ViZGNmMDhkZS4uY2VhNjM2ZjEwYWViNiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC0xLDE3ICYjNDM7MSwyMSBAQFxuICMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4mIzQzO2ltcG9ydCBlcnJub1xuIGltcG9ydCBzb2NrZXRcbiBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4tZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9pbiwga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBkZWZlclxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1xceGUwXFx4MDBcXHgwMFxceDAxJiMzOTtcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYiYjMzk7XFx4ZWZcXHgwMVxceDAxXFx4MDEmIzM5O1xuIElQVjZfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCYjMzk7ZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMmIzM5OylcbiYjNDM7RVRIX0FMTF9IT1NUU19NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCYjMzk7MDEwMDVlMDAwMDAxJiMzOTspXG4mIzQzO0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAmIzM5OzAxOjAwOjVlOjAxOjAxOjAxJiMzOTtcbiYjNDM7RVRIX1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleChFVEhfVEVTVF9NVUxUSUNBU1RfU1RSLnJlcGxhY2UoJiMzOTs6JiMzOTssICYjMzk7JiMzOTspKVxuIFxuIFxuIGRlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KTpcbkBAIC0xMDUsNiAmIzQzOzEwOSw1MiBAQCBkZWYgZHVtcF9tY2FkZHI2X2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXG4gXG4gXG4mIzQzO2RlZiBkdW1wX21jYWRkcl9sMl9jaGVjaygpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxuJiM0MzsgICAgZHVtcDogdGhlIGlmYS1pbmRleCBmaWx0ZXIsIG1jLXVzZXJzIGFuZCB0aGUgcGVybWFuZW50IGZsYWcuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4mIzQzOyAgICAgICAgZm9yIGlmbmFtZSBpbiAoXCYjMzQ7ZHVtbXkxXCYjMzQ7LCBcJiMzNDtkdW1teTJcJiMzNDspOlxuJiM0MzsgICAgICAgICAgICBpcChmXCYjMzQ7bGluayBhZGQgbmFtZSB7aWZuYW1lfSB0eXBlIGR1bW15XCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBpcChmXCYjMzQ7bGluayBzZXQge2lmbmFtZX0gdXBcJiMzNDspXG4mIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleChcJiMzNDtkdW1teTFcJiMzNDspXG4mIzQzOyAgICAgICAgaXAoZlwmIzM0O21hZGRyIGFkZCB7RVRIX1RFU1RfTVVMVElDQVNUX1NUUn0gZGV2IGR1bW15MVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcbiYjNDM7ICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuJiM0MzsgICAgICAgICAgICAgICAge1wmIzM0O2lmYS1mYW1pbHlcJiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsIFwmIzM0O2lmYS1pbmRleFwmIzM0OzogZGV2X2lkeH0sXG4mIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXG4mIzQzOyAgICAgICAgZXhjZXB0IE5sRXJyb3IgYXMgZTpcbiYjNDM7ICAgICAgICAgICAgaWYgZS5lcnJvciA9PSBlcnJuby5FT1BOT1RTVVBQOlxuJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXBcJiMzNDspXG4mIzQzOyAgICAgICAgICAgIHJhaXNlXG4mIzQzO1xuJiM0MzsgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcbiYjNDM7ICAgICAgICBrc2Z0X2VxKHthZGRyWyYjMzk7aWZhLWluZGV4JiMzOTtdIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O0FGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCBpZ25vcmVkIGlmYS1pbmRleCBmaWx0ZXJcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgIGVudHJpZXMgPSB7YWRkclsmIzM5O211bHRpY2FzdCYjMzk7XTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9XG4mIzQzO1xuJiM0MzsgICAgICAgICMgQnJpbmdpbmcgYW4gRXRoZXJuZXQgZGV2aWNlIHVwIGpvaW5zIDIyNC4wLjAuMSwgd2hpY2ggbWFwc1xuJiM0MzsgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC5cbiYjNDM7ICAgICAgICBrc2Z0X2luKEVUSF9BTExfSE9TVFNfTVVMVElDQVNULCBlbnRyaWVzLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3NcJiMzNDspXG4mIzQzOyAgICAgICAga3NmdF9ub3RfaW4oJiMzOTtwZXJtYW5lbnQmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBlbnRyaWVzW0VUSF9BTExfSE9TVFNfTVVMVElDQVNUXVsmIzM5O2lmYS1mbGFncyYjMzk7XSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtwcm90b2NvbCBlbnRyeSBpcyBwZXJtYW5lbnRcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgIGtzZnRfaW4oRVRIX1RFU1RfTVVMVElDQVNULCBlbnRyaWVzLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXCYjMzQ7KVxuJiM0MzsgICAgICAgIGtzZnRfZXEoZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWyYjMzk7bWMtdXNlcnMmIzM5O10sIDEsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDt1bmV4cGVjdGVkIG1jLXVzZXJzIGZvciB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcJiMzNDspXG4mIzQzOyAgICAgICAga3NmdF9pbigmIzM5O3Blcm1hbmVudCYjMzk7LCBlbnRyaWVzW0VUSF9URVNUX01VTFRJQ0FTVF1bJiMzOTtpZmEtZmxhZ3MmIzM5O10sXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IHBlcm1hbmVudFwmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiAgICAgQ29uZmlndXJlIGFuIGludGVyZmFjZSBhbmQgc2V0IGlwdjQtZGV2Y29uZiB2YWx1ZXMgdGhyb3VnaCBuZXRsaW5rXG5AQCAtMzE1LDcgJiM0MzszNjUsOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbiBcbiBcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4mIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssXG4mIzQzOyAgICAgICAgICAgICAgaXB2NF9kZXZjb25mX25vdGlmeSxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldGxpbmsgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCAvIFJUTV9HRVRNVUxUSUNBU1QpIGluIHJ0bmV0bGluay4gVGhlIG5ld2x5IGFkZGVkIGNvZGUgdmFsaWRhdGVzIHVzZXIgZHVtcCByZXF1ZXN0cywgdHJhdmVyc2VzIGRldmljZSBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyB1bmRlciBsb2NrLCBhbmQgc2VyaWFsaXplcyBydG5ldGxpbmsgYXR0cmlidXRlcywgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHNvY2tldCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjlmMjI5YWM4ZTY2ZGI0NzQ3MWFlOTk3MDk1MTg5Yzg5NTQ2YTIzNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDI6Mzc6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbAppbmRleCAwZWNiZDI0Yzg5MGM2Li4yYTIzMTBjYjBkZjAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwKQEAgLTE2OCw3ICYjNDM7MTY4LDEyIEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGwKICAgICAtCiAgICAgICBuYW1lOiBnZXRtdWx0aWNhc3QKLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy4KJiM0MzsgICAgICBkb2M6IHwKJiM0MzsgICAgICAgIEdldCAvIGR1bXAgbXVsdGljYXN0IGFkZHJlc3Nlcy4gaWZhLWZhbWlseSBzZWxlY3RzIHRoZSBhZGRyZXNzCiYjNDM7ICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvbgomIzQzOyAgICAgICAgYSBkZXZpY2UsIEFGX1BBQ0tFVCBmb3IgdGhlIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiB0aGUKJiM0MzsgICAgICAgIGRldmljZSBmaWx0ZXIuIExpbmstbGF5ZXIgZW50cmllcyBhZGRlZCB3aXRoIFNJT0NBRERNVUxUSSBhcmUKJiM0MzsgICAgICAgIHJlcG9ydGVkIHdpdGggdGhlIHBlcm1hbmVudCBmbGFnIHNldC4KICAgICAgIGF0dHJpYnV0ZS1zZXQ6IGFkZHItYXR0cnMKICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnCiAgICAgICBkbzoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggODFjNWE2MTA0ZGVhMS4uYjJmZWJkYjY5MTVlOCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTQ1NjYsNiAmIzQzOzQ1NjYsMTMzIEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJcmV0dXJuIHNrYi0mZ3Q7bGVuID8gOiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCwKJiM0MzsJCQkgICAgdTMyIHNlcSwgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKJiM0MzsKJiM0MzsJbmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSwKJiM0MzsJCQlmbGFncyk7CiYjNDM7CWlmICghbmxoKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJaWZtID0gbmxtc2dfZGF0YShubGgpOwomIzQzOwlpZm0tJmd0O2lmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7CiYjNDM7CWlmbS0mZ3Q7aWZhX3ByZWZpeGxlbiA9IDA7CiYjNDM7CWlmbS0mZ3Q7aWZhX2ZsYWdzID0gaGEtJmd0O2dsb2JhbF91c2UgPyBJRkFfRl9QRVJNQU5FTlQgOiAwOwomIzQzOwlpZm0tJmd0O2lmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7CiYjNDM7CWlmbS0mZ3Q7aWZhX2luZGV4ID0gZGV2LSZndDtpZmluZGV4OwomIzQzOwomIzQzOwlpZiAobmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi0mZ3Q7YWRkcl9sZW4sIGhhLSZndDthZGRyKSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLSZndDtyZWZjb3VudCkpIHsKJiM0MzsJCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5sbXNnX2VuZChza2IsIG5saCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50ICpzX2FkZHJfaWR4LAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwomIzQzOwlpbnQgYWRkcl9pZHggPSAwOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJbmV0aWZfYWRkcl9sb2NrX2JoKGRldik7CiYjNDM7CW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHsKJiM0MzsJCWlmIChhZGRyX2lkeCAmbHQ7ICpzX2FkZHJfaWR4KSB7CiYjNDM7CQkJYWRkcl9pZHgmIzQzOyYjNDM7OwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItJmd0O3NrYikucG9ydGlkLAomIzQzOwkJCQkgICAgICAgY2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncyk7CiYjNDM7CQlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCQlicmVhazsKJiM0MzsJCWFkZHJfaWR4JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwluZXRpZl9hZGRyX3VubG9ja19iaChkZXYpOwomIzQzOwomIzQzOwkqc19hZGRyX2lkeCA9IGVyciAmbHQ7IDAgPyBhZGRyX2lkeCA6IDA7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywKJiM0MzsJCQkJICAgICAgaW50ICpwaWZpbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZmFkZHJtc2cgKmlmbTsKJiM0MzsKJiM0MzsJaWZtID0gbmxtc2dfcGF5bG9hZChubGgsIHNpemVvZigqaWZtKSk7CiYjNDM7CWlmICghaWZtKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7SW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3QmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaWZtLSZndDtpZmFfcHJlZml4bGVuIHx8IGlmbS0mZ3Q7aWZhX2ZsYWdzIHx8IGlmbS0mZ3Q7aWZhX3Njb3BlKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7SW52YWxpZCB2YWx1ZXMgaW4gbXVsdGljYXN0IGR1bXAgaGVhZGVyJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG5sbXNnX2F0dHJsZW4obmxoLCBzaXplb2YoKmlmbSkpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7SW52YWxpZCBkYXRhIGFmdGVyIG11bHRpY2FzdCBkdW1wIGhlYWRlciYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpwaWZpbmRleCA9IGlmbS0mZ3Q7aWZhX2luZGV4OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgaWZpbmRleDsKJiM0MzsJCWludCBhZGRyX2lkeDsKJiM0MzsJfSAqY3R4ID0gKHZvaWQgKiljYi0mZ3Q7Y3R4OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwomIzQzOwlpbnQgaWZpbmRleDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItJmd0O25saCwgY2ItJmd0O2V4dGFjaywgJmFtcDtpZmluZGV4KTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CiYjNDM7CWlmIChpZmluZGV4KSB7CiYjNDM7CQljYi0mZ3Q7YW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CiYjNDM7CQlmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEOwomIzQzOwkJZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBpZmluZGV4KTsKJiM0MzsJCWlmICghZGV2KSB7CiYjNDM7CQkJZXJyID0gLUVOT0RFVjsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCWVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgJmFtcDtjdHgtJmd0O2FkZHJfaWR4LCBmbGFncyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LSZndDtpZmluZGV4KSB7CiYjNDM7CQllcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsICZhbXA7Y3R4LSZndDthZGRyX2lkeCwKJiM0MzsJCQkJCSAgIGZsYWdzKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7b3V0OgomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3Qgc2tfYnVmZiAqcnRtc2dfaWZpbmZvX2J1aWxkX3NrYihpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSwKIAkJCQkgICAgICAgdTMyIGV2ZW50LCBnZnBfdCBmbGFncywgaW50ICpuZXdfbnNpZCwKQEAgLTcyNTEsNiAmIzQzOzczNzgsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPQogCXsubXNndHlwZSA9IFJUTV9TRVRTVEFUUywgLmRvaXQgPSBydG5sX3N0YXRzX3NldH0sCiAJey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LAogCXsubXNndHlwZSA9IFJUTV9ERUxMSU5LUFJPUCwgLmRvaXQgPSBydG5sX2RlbGxpbmtwcm9wfSwKJiM0MzsJey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULAomIzQzOwkgLmR1bXBpdCA9IHJ0bmxfZHVtcF9tY2FkZHIsIC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSwKIAl7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLAogCSAuZHVtcGl0ID0gcnRubF9icmlkZ2VfZ2V0bGlua30sCiAJey5wcm90b2NvbCA9IFBGX0JSSURHRSwgLm1zZ3R5cGUgPSBSVE1fREVMTElOSywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CmluZGV4IDVjYzNlYmRjZjA4ZGUuLmNlYTYzNmYxMGFlYjYgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQpAQCAtMSwxNyAmIzQzOzEsMjEgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIAomIzQzO2ltcG9ydCBlcnJubwogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHRpbWUKIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXgKLWZyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZQotZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X2luLCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZQomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIE5sRXJyb3IsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHkKIGZyb20gbGliLnB5IGltcG9ydCBkZWZlcgogCiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtceGUwXHgwMFx4MDBceDAxJiMzOTsKIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJiMzOTtceGVmXHgwMVx4MDFceDAxJiMzOTsKIElQVjZfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCYjMzk7ZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMmIzM5OykKJiM0MztFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzOTswMTAwNWUwMDAwMDEmIzM5OykKJiM0MztFVEhfVEVTVF9NVUxUSUNBU1RfU1RSID0gJiMzOTswMTowMDo1ZTowMTowMTowMSYjMzk7CiYjNDM7RVRIX1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleChFVEhfVEVTVF9NVUxUSUNBU1RfU1RSLnJlcGxhY2UoJiMzOTs6JiMzOTssICYjMzk7JiMzOTspKQogCiAKIGRlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KToKQEAgLTEwNSw2ICYjNDM7MTA5LDUyIEBAIGRlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtJmd0OyBOb25lOgogICAgICAgICAgICAgICAgIHMyLmNsb3NlKCkKIAogCiYjNDM7ZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIFZlcmlmeSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gYW4gQUZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QKJiM0MzsgICAgZHVtcDogdGhlIGlmYS1pbmRleCBmaWx0ZXIsIG1jLXVzZXJzIGFuZCB0aGUgcGVybWFuZW50IGZsYWcuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBmb3IgaWZuYW1lIGluICgmIzM0O2R1bW15MSYjMzQ7LCAmIzM0O2R1bW15MiYjMzQ7KToKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXkmIzM0OykKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIHNldCB7aWZuYW1lfSB1cCYjMzQ7KQomIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM0O2R1bW15MSYjMzQ7KQomIzQzOyAgICAgICAgaXAoZiYjMzQ7bWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KAomIzQzOyAgICAgICAgICAgICAgICB7JiMzNDtpZmEtZmFtaWx5JiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsICYjMzQ7aWZhLWluZGV4JiMzNDs6IGRldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpCiYjNDM7ICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOgomIzQzOyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDoKJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7a2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wJiMzNDspCiYjNDM7ICAgICAgICAgICAgcmFpc2UKJiM0MzsKJiM0MzsgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWQKJiM0MzsgICAgICAgIGtzZnRfZXEoe2FkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10gZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwge2Rldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O0FGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCBpZ25vcmVkIGlmYS1pbmRleCBmaWx0ZXImIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIGVudHJpZXMgPSB7YWRkclsmIzM5O211bHRpY2FzdCYjMzk7XTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9CiYjNDM7CiYjNDM7ICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHMKJiM0MzsgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC4KJiM0MzsgICAgICAgIGtzZnRfaW4oRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QsIGVudHJpZXMsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3MmIzM0OykKJiM0MzsgICAgICAgIGtzZnRfbm90X2luKCYjMzk7cGVybWFuZW50JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICBlbnRyaWVzW0VUSF9BTExfSE9TVFNfTVVMVElDQVNUXVsmIzM5O2lmYS1mbGFncyYjMzk7XSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7cHJvdG9jb2wgZW50cnkgaXMgcGVybWFuZW50JiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBrc2Z0X2luKEVUSF9URVNUX01VTFRJQ0FTVCwgZW50cmllcywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3MmIzM0OykKJiM0MzsgICAgICAgIGtzZnRfZXEoZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWyYjMzk7bWMtdXNlcnMmIzM5O10sIDEsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7dW5leHBlY3RlZCBtYy11c2VycyBmb3IgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzJiMzNDspCiYjNDM7ICAgICAgICBrc2Z0X2luKCYjMzk7cGVybWFuZW50JiMzOTssIGVudHJpZXNbRVRIX1RFU1RfTVVMVElDQVNUXVsmIzM5O2lmYS1mbGFncyYjMzk7XSwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IHBlcm1hbmVudCYjMzQ7KQomIzQzOwomIzQzOwogZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtJmd0OyBOb25lOgogICAgICYjMzQ7JiMzNDsmIzM0OwogICAgIENvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgYW5kIHNldCBpcHY0LWRldmNvbmYgdmFsdWVzIHRocm91Z2ggbmV0bGluawpAQCAtMzE1LDcgJiM0MzszNjUsOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC0mZ3Q7IE5vbmU6CiAKIAogZGVmIG1haW4oKSAtJmd0OyBOb25lOgotICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LAomIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssCiYjNDM7ICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3biwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMDIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBhbmQgZmlndXJlIG91dCB0aGUgYmVzdCBmdXp6aW5nIHN0cmF0ZWd5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgdmFsdWUgaW4gdGFyZ2V0aW5nIGl0LiBUaGUgZGlmZiBzaG93cyBtb2RpZmljYXRpb25zIHRvIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sYCwgYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5YC4gVGhlIGRvY3VtZW50YXRpb24gY2hhbmdlIGlzIGdlbmVyYWxseSBnb29kIG5ld3M7IGl0IG1lYW5zIHNvbWVvbmUmIzM5O3MgdGhpbmtpbmcgYWJvdXQgdGhpcyBzdHVmZiBmb3JtYWxseS4gVGhlIGBydG5ldGxpbmsuY2AgY2hhbmdlIGlzIHRoZSByZWFsIG1lYXQsIHRob3VnaC4KCkxvb2tpbmcgY2xvc2VyIGF0IGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIEkgc2VlIGEgY2x1c3RlciBvZiBuZXcgZnVuY3Rpb25zOiBgcnRubF9maWxsX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcWAsIGFuZCBgcnRubF9kdW1wX21jYWRkcmAuICBBaCwgdGhpcyBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGltcGxlbWVudGluZyBhIG5ldyBmZWF0dXJlOiBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyB2aWEgcnRuZXRsaW5rICh1c2luZyBgUEZfUEFDS0VUYCBhbmQgYFJUTV9HRVRNVUxUSUNBU1RgKS4gSW1wb3J0YW50bHksIHRoZXJlJiMzOTtzIGEgbmV3IGhhbmRsZXIgaW4gYHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc2AgZm9yIHRoaXMgc3BlY2lmaWMgbWVzc2FnZSB0eXBlLgoKVGhlIGltbWVkaWF0ZSBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gYSB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnQgbGlrZSBzeXprYWxsZXI/ICBUaGUgYW5zd2VyLCB0aGFua2Z1bGx5LCBzZWVtcyB0byBiZSB5ZXMhIFJ0bmV0bGluayBpcyBwYXJ0IG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGV4cG9zZWQgdGhyb3VnaCBuZXRsaW5rIHNvY2tldHMgKGBBRl9ORVRMSU5LYCwgYE5FVExJTktfUk9VVEVgKS4gU3l6a2FsbGVyIGFscmVhZHkgdW5kZXJzdGFuZHMgbmV0bGluayBhbmQgY2FuIGdlbmVyYXRlIHJ0bmV0bGluayBtZXNzYWdlcy4gVGhpcyBpcyBnb29kIG5ld3M7IGl0IG1lYW5zIHdlIGNhbiBsaWtlbHkgaGl0IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBuZWVkaW5nIHRvIGJ1aWxkIGFueSBjdXN0b20gZHJpdmVycyBvciBzZXQgdXAgZXhvdGljIGVudmlyb25tZW50cy4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIHJlcXVpcmVzIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlLiBJJiMzOTtsbCBzZWFyY2ggdGhyb3VnaCBLY29uZmlnIGFuZCB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCBmb3IgZWl0aGVyICYjMzQ7cnRuZXRsaW5rLmMmIzM0OyBvciAmIzM0O05FVExJTktfUk9VVEUmIzM0OyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBidWlsZC10aW1lIG9wdGlvbnMgd2UgbmVlZCB0byB3b3JyeSBhYm91dC4gVGhlIGdvYWwgaXMgdG8gbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlICptaW5pbXVtKiBjb25maWd1cmF0aW9ucyB0byBhY2hpZXZlIGNvbXBsZXRlIGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmV0bGluay5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZToxMzpcdFx0XHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXHRcdFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNjMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFJUTkVUTElOSyBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCBzbyBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgIGlzIGRlZmluaXRlbHkgc2hvd2luZyB1cCBpbiB0aGUgYnVpbGQgYXMgcGFydCBvZiBgbmV0L2NvcmVgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gU2luY2UgYENPTkZJR19ORVRgIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCB0aGVzZSBkYXlzLCBpdCBzaG91bGQgYmUgYmFrZWQgaW4uIFRoZSBxdWVzdGlvbiBpcywgaG93ICpleGFjdGx5KiBpcyBpdCBiZWluZyBwdWxsZWQgaW50byB0aGUgb2JqZWN0IGZpbGVzPyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgZWl0aGVyIGBuZXQvS2NvbmZpZ2AgKHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGJhc2VkIG9uIGEgc2VwYXJhdGUgS2NvbmZpZyBvcHRpb24pIG9yIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIGl0c2VsZi4gVGhhdCBNYWtlZmlsZSB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgZGlyZWN0IGFuc3dlciBhcyB0byB3aHkgYHJ0bmV0bGluay5jYCBpcyBiZWluZyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUYCBpcyB0cnVlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBsb29rIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotXFwkXFwoQ09ORklHX05FVFxcKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBkZWxpdmVyZWQgYXMgaWYgaXQmIzM5O3MgY29taW5nIGZyb20gbWU6CgoqKkRpdmluZyBpbnRvIHRoZSBgbmV0L01ha2VmaWxlYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBzdGFydGVkLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoaXMgcHJvYmxlbS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgYG5ldC9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBidWlsZCBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgbmV0d29ya2luZyBjb21wb25lbnRzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uYWwgcnVsZXMsIHZhcmlhYmxlcywgYW5kIHBvdGVudGlhbGx5IGluY2x1ZGUgc3RhdGVtZW50cyB0aGF0IGdvdmVybiBob3cgdGhlc2UgbmV0d29yay1yZWxhdGVkIG9iamVjdHMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQuIEkgd2FudCB0byBxdWlja2x5IGdhaW4gYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG5ldHdvcmsgbW9kdWxlIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGFuZCwgaW4gdHVybiwgaG93IGl0JiMzOTtzIHN0cnVjdHVyZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBob3BpbmcgdG8gZmluZCBjbHVlcyBhYm91dCB3aGF0IHRhcmdldHMgYXJlIGJlaW5nIGJ1aWx0LCB3aGF0IHNvdXJjZSBmaWxlcyBhcmUgaW52b2x2ZWQsIGFuZCBhbnkgc3BlY2lmaWMgY29tcGlsZXIgZmxhZ3Mgb3IgbGlua2VyIG9wdGlvbnMgdGhhdCBhcmUgYmVpbmcgZW1wbG95ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBuZXR3b3JraW5nLlxuICAgNDpcdCNcbiAgIDU6XHQjIDIgU2VwIDIwMDAsIENocmlzdG9waCBIZWxsd2lnIFx1MDAzY2hjaEBpbmZyYWRlYWQub3JnXHUwMDNlXG4gICA2Olx0IyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy5cbiAgIDc6XHQjXG4gICA4Olx0XG4gICA5Olx0b2JqLXlcdFx0XHRcdDo9IGRldnJlcy5vIHNvY2tldC5vIGNvcmUvXG4gIDEwOlx0XG4gIDExOlx0b2JqLSQoQ09ORklHX0NPTVBBVClcdFx0JiM0Mzs9IGNvbXBhdC5vXG4gIDEyOlx0XG4gIDEzOlx0IyBMTEMgaGFzIHRvIGJlIGxpbmtlZCBiZWZvcmUgdGhlIGZpbGVzIGluIG5ldC84MDIvXG4gIDE0Olx0b2JqLSQoQ09ORklHX0xMQylcdFx0JiM0Mzs9IGxsYy9cbiAgMTU6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGV0aGVybmV0LyA4MDIvIHNjaGVkLyBuZXRsaW5rLyBicGYvIGV0aHRvb2wvXG4gIDE2Olx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcdFx0JiM0Mzs9IG5ldGZpbHRlci9cbiAgMTc6XHRvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IGlwdjQvXG4gIDE4Olx0b2JqLSQoQ09ORklHX1RMUylcdFx0JiM0Mzs9IHRscy9cbiAgMTk6XHRvYmotJChDT05GSUdfWEZSTSlcdFx0JiM0Mzs9IHhmcm0vXG4gIDIwOlx0b2JqLSQoQ09ORklHX1VOSVgpXHRcdCYjNDM7PSB1bml4L1xuICAyMTpcdG9iai0kKENPTkZJR19JTkVUX1BTUClcdFx0JiM0Mzs9IHBzcC9cbiAgMjI6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGlwdjYvXG4gIDIzOlx0b2JqLSQoQ09ORklHX1BBQ0tFVClcdFx0JiM0Mzs9IHBhY2tldC9cbiAgMjQ6XHRvYmotJChDT05GSUdfTkVUX0tFWSlcdFx0JiM0Mzs9IGtleS9cbiAgMjU6XHRvYmotJChDT05GSUdfQlJJREdFKVx0XHQmIzQzOz0gYnJpZGdlL1xuICAyNjpcdG9iai0kKENPTkZJR19ORVRfREVWTElOSylcdCYjNDM7PSBkZXZsaW5rL1xuICAyNzpcdG9iai15XHRcdFx0XHQmIzQzOz0gZHNhL1xuICAyODpcdG9iai0kKENPTkZJR19YMjUpXHRcdCYjNDM7PSB4MjUvXG4gIDI5Olx0b2JqLSQoQ09ORklHX0xBUEIpXHRcdCYjNDM7PSBsYXBiL1xuICAzMDpcdG9iai0kKENPTkZJR19DQU4pXHRcdCYjNDM7PSBjYW4vXG4gIDMxOlx0b2JqLSQoQ09ORklHX0JUKVx0XHQmIzQzOz0gYmx1ZXRvb3RoL1xuICAzMjpcdG9iai0kKENPTkZJR19TVU5SUEMpXHRcdCYjNDM7PSBzdW5ycGMvXG4gIDMzOlx0b2JqLSQoQ09ORklHX0FGX1JYUlBDKVx0XHQmIzQzOz0gcnhycGMvXG4gIDM0Olx0b2JqLSQoQ09ORklHX0FGX0tDTSlcdFx0JiM0Mzs9IGtjbS9cbiAgMzU6XHRvYmotJChDT05GSUdfU1RSRUFNX1BBUlNFUilcdCYjNDM7PSBzdHJwYXJzZXIvXG4gIDM2Olx0b2JqLSQoQ09ORklHX0FUTSlcdFx0JiM0Mzs9IGF0bS9cbiAgMzc6XHRvYmotJChDT05GSUdfTDJUUClcdFx0JiM0Mzs9IGwydHAvXG4gIDM4Olx0b2JqLSQoQ09ORklHX1BIT05FVClcdFx0JiM0Mzs9IHBob25ldC9cbiAgMzk6XHRpZm5lcSAoJChDT05GSUdfVkxBTl84MDIxUSksKVxuICA0MDpcdG9iai15XHRcdFx0XHQmIzQzOz0gODAyMXEvXG4gIDQxOlx0ZW5kaWZcbiAgNDI6XHRvYmotJChDT05GSUdfSVBfU0NUUClcdFx0JiM0Mzs9IHNjdHAvXG4gIDQzOlx0b2JqLSQoQ09ORklHX1JEUylcdFx0JiM0Mzs9IHJkcy9cbiAgNDQ6XHRvYmotJChDT05GSUdfV0lSRUxFU1MpXHRcdCYjNDM7PSB3aXJlbGVzcy9cbiAgNDU6XHRvYmotJChDT05GSUdfTUFDODAyMTEpXHRcdCYjNDM7PSBtYWM4MDIxMS9cbiAgNDY6XHRvYmotJChDT05GSUdfVElQQylcdFx0JiM0Mzs9IHRpcGMvXG4gIDQ3Olx0b2JqLSQoQ09ORklHX05FVExBQkVMKVx0XHQmIzQzOz0gbmV0bGFiZWwvXG4gIDQ4Olx0b2JqLSQoQ09ORklHX0lVQ1YpXHRcdCYjNDM7PSBpdWN2L1xuICA0OTpcdG9iai0kKENPTkZJR19TTUMpXHRcdCYjNDM7PSBzbWMvXG4gIDUwOlx0b2JqLSQoQ09ORklHX1JGS0lMTClcdFx0JiM0Mzs9IHJma2lsbC9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDY3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIGNvbnNjaW91c25lc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb2YgYG5ldC9jb3JlL2AqKgoKQWxyaWdodCwgc28gYG5ldC9jb3JlL2AgYWx3YXlzIHNlZW1zIHRvIGJlIGluY2x1ZGVkIHdoZW4gdGhlIGBDT05GSUdfTkVUPXlgIGZsYWcgaXMgc2V0LiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIHN0YW5kYXJkIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgcmlnaHQ/IEJ1dCB0aGUga2V5IHF1ZXN0aW9uIGZvciBtZSBpczogaXMgKmp1c3QqIGBDT05GSUdfTkVUYCBzdWZmaWNpZW50LCBvciBpcyB0aGVyZSBzb21lIG90aGVyLCBwb3RlbnRpYWxseSBvYnNjdXJlLCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0JiMzOTtzICphbHNvKiByZXF1aXJlZCB0byBlbnN1cmUgZXZlcnl0aGluZyB3b3JrcyBhcyBleHBlY3RlZD8gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhlcmUgaXNuJiMzOTt0IHNvbWUgY29ybmVyIGNhc2UgSSYjMzk7bSBtaXNzaW5nLgoKR2l2ZW4gdGhhdCBJIGFtIGZvY3VzZWQgb24gcnRuZXRsaW5rLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IHJlbGF0ZSB0byBpdC4gSXTigJlzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvIHZlcmlmeSBhc3N1bXB0aW9ucy4KCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IHRoZSByZWxhdGlvbnNoaXBzIGFyZSBhcm91bmQgdGhlIGBORVRgIG9wdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayBhbmQgYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMuIEkgaGF2ZSB0byBtYWtlIHN1cmUgbm90aGluZyBpcyBtaXNzZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnLTUtXG5uZXQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUXG5uZXQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtOZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgzNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENoYW5nZXMgdG8gTmV0d29yayBNdWx0aWNhc3QgQWRkcmVzcyBIYW5kbGluZyoqCgpPa2F5LCBzbyBgQ09ORklHX05FVGAgaXMgdGhlIGJpZyBwaWN0dXJlIGhlcmUsIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZWxlbWVudC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnM6IGBydG5sX2R1bXBfbWNhZGRyYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCwgYW5kIGBydG5sX2ZpbGxfbWNhZGRyYC4gVGhleSBzY3JlYW0gJiMzNDttdWx0aWNhc3QgYWRkcmVzcyBkdW1wJiMzNDsgYW5kICYjMzQ7bWFuYWdlbWVudCYjMzQ7IHRvIG1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBleGFjdCByb2xlcyBhbmQgaG93IHRoZXkgZml0IGludG8gdGhlIGV4aXN0aW5nIGFyY2hpdGVjdHVyZS4KCk15IG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIGEgc3ltYm9sIHNlYXJjaCBhbmQgY2FsbGVyIGFuYWx5c2lzIHRvIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGVzZSBmdW5jdGlvbnMsIHVuY292ZXJpbmcgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3IgYXJlYXMgb2YgaW1wYWN0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYG5ldC9jb3JlL3J0bmV0bGluay5jYCBhbmQgdGhvcm91Z2hseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIGNsZWFuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDU2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NTYwOlx0XHRcdHJldCA9IGR1bXBpdChza2IsIGNiKTtcbjQ1NjE6XHRcdFx0aWYgKHJldClcbjQ1NjI6XHRcdFx0XHRicmVhaztcbjQ1NjM6XHRcdH1cbjQ1NjQ6XHRcdGNiLVx1MDAzZWZhbWlseSA9IGlkeDtcbjQ1NjU6XHRcbjQ1NjY6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuID8gOiByZXQ7XG40NTY3Olx0fVxuNDU2ODpcdFxuNDU2OTpcdHN0YXRpYyBpbnQgcnRubF9maWxsX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuNDU3MDpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhLCB1MzIgcG9ydGlkLFxuNDU3MTpcdFx0XHRcdCAgICB1MzIgc2VxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG40NTcyOlx0e1xuNDU3MzpcdFx0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuNDU3NDpcdFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG40NTc1Olx0XG40NTc2Olx0XHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgUlRNX0dFVE1VTFRJQ0FTVCwgc2l6ZW9mKCppZm0pLFxuNDU3NzpcdFx0XHRcdGZsYWdzKTtcbjQ1Nzg6XHRcdGlmICghbmxoKVxuNDU3OTpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuNDU4MDpcdFxuNDU4MTpcdFx0aWZtID0gbmxtc2dfZGF0YShubGgpO1xuNDU4MjpcdFx0aWZtLVx1MDAzZWlmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7XG40NTgzOlx0XHRpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiA9IDA7XG40NTg0Olx0XHRpZm0tXHUwMDNlaWZhX2ZsYWdzID0gaGEtXHUwMDNlZ2xvYmFsX3VzZSA/IElGQV9GX1BFUk1BTkVOVCA6IDA7XG40NTg1Olx0XHRpZm0tXHUwMDNlaWZhX3Njb3BlID0gUlRfU0NPUEVfTElOSztcbjQ1ODY6XHRcdGlmbS1cdTAwM2VpZmFfaW5kZXggPSBkZXYtXHUwMDNlaWZpbmRleDtcbjQ1ODc6XHRcbjQ1ODg6XHRcdGlmIChubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVx1MDAzZWFkZHJfbGVuLCBoYS1cdTAwM2VhZGRyKSB8fFxuNDU4OTpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBoYS1cdTAwM2VyZWZjb3VudCkpIHtcbjQ1OTA6XHRcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbjQ1OTE6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjQ1OTI6XHRcdH1cbjQ1OTM6XHRcbjQ1OTQ6XHRcdG5sbXNnX2VuZChza2IsIG5saCk7XG40NTk1Olx0XHRyZXR1cm4gMDtcbjQ1OTY6XHR9XG40NTk3Olx0XG40NTk4Olx0c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuNDU5OTpcdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgKnNfYWRkcl9pZHgsXG40NjAwOlx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpXG40NjAxOlx0e1xuNDYwMjpcdFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbjQ2MDM6XHRcdGludCBhZGRyX2lkeCA9IDA7XG40NjA0Olx0XHRpbnQgZXJyID0gMDtcbjQ2MDU6XHRcbjQ2MDY6XHRcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xuNDYwNzpcdFx0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikge1xuNDYwODpcdFx0XHRpZiAoYWRkcl9pZHggXHUwMDNjICpzX2FkZHJfaWR4KSB7XG40NjA5Olx0XHRcdFx0YWRkcl9pZHgmIzQzOyYjNDM7O1xuNDYxMDpcdFx0XHRcdGNvbnRpbnVlO1xuNDYxMTpcdFx0XHR9XG40NjEyOlx0XHRcdGVyciA9IHJ0bmxfZmlsbF9tY2FkZHIoc2tiLCBkZXYsIGhhLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuNDYxMzpcdFx0XHRcdFx0ICAgICAgIGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzKTtcbjQ2MTQ6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjQ2MTU6XHRcdFx0XHRicmVhaztcbjQ2MTY6XHRcdFx0YWRkcl9pZHgmIzQzOyYjNDM7O1xuNDYxNzpcdFx0fVxuNDYxODpcdFx0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcbjQ2MTk6XHRcbjQ2MjA6XHRcdCpzX2FkZHJfaWR4ID0gZXJyIFx1MDAzYyAwID8gYWRkcl9pZHggOiAwO1xuNDYyMTpcdFxuNDYyMjpcdFx0cmV0dXJuIGVycjtcbjQ2MjM6XHR9XG40NjI0Olx0XG40NjI1Olx0c3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbjQ2MjY6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbjQ2Mjc6XHRcdFx0XHRcdCAgICAgIGludCAqcGlmaW5kZXgpXG40NjI4Olx0e1xuNDYyOTpcdFx0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuNDYzMDpcdFxuNDYzMTpcdFx0aWZtID0gbmxtc2dfcGF5bG9hZChubGgsIHNpemVvZigqaWZtKSk7XG40NjMyOlx0XHRpZiAoIWlmbSkge1xuNDYzMzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG40NjM0Olx0XHRcdFx0ICAgICAgIFwmIzM0O0ludmFsaWQgaGVhZGVyIGZvciBtdWx0aWNhc3QgZHVtcCByZXF1ZXN0XCYjMzQ7KTtcbjQ2MzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NjM2Olx0XHR9XG40NjM3Olx0XG40NjM4Olx0XHRpZiAoaWZtLVx1MDAzZWlmYV9wcmVmaXhsZW4gfHwgaWZtLVx1MDAzZWlmYV9mbGFncyB8fCBpZm0tXHUwMDNlaWZhX3Njb3BlKSB7XG40NjM5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzOTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgaWYgSSBhbSB0aGUgZXhwZXJ0IHRoaW5raW5nIGl0OgoKKipGb2N1c2luZyBvbiBhIENydWNpYWwgU2VjdGlvbioqCgpSaWdodCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYSBzcGVjaWZpYyByYW5nZSBvZiBsaW5lcyBpbiB0aGlzIGFuYWx5c2lzLiBMaW5lcyA0NjQwLTQ3MDAuLi4gdGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgZnVydGhlciBzY3J1dGlueS4gQmFzZWQgb24gdGhlIGluaXRpYWwgc2NhbiwgdGhpcyBibG9jayBpcyB3aGVyZSB0aGUgYW5vbWFseSBpcyBtb3N0IGxpa2VseSBsb2NhdGVkLCB0aGF0IHdpbGwgYmUgd2hlcmUgSSBiZWdpbiBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDY0MDpcdFx0XHRcdCAgICAgICBcJiMzNDtJbnZhbGlkIHZhbHVlcyBpbiBtdWx0aWNhc3QgZHVtcCBoZWFkZXJcJiMzNDspO1xuNDY0MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ2NDI6XHRcdH1cbjQ2NDM6XHRcbjQ2NDQ6XHRcdGlmIChubG1zZ19hdHRybGVuKG5saCwgc2l6ZW9mKCppZm0pKSkge1xuNDY0NTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG40NjQ2Olx0XHRcdFx0ICAgICAgIFwmIzM0O0ludmFsaWQgZGF0YSBhZnRlciBtdWx0aWNhc3QgZHVtcCBoZWFkZXJcJiMzNDspO1xuNDY0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ2NDg6XHRcdH1cbjQ2NDk6XHRcbjQ2NTA6XHRcdCpwaWZpbmRleCA9IGlmbS1cdTAwM2VpZmFfaW5kZXg7XG40NjUxOlx0XG40NjUyOlx0XHRyZXR1cm4gMDtcbjQ2NTM6XHR9XG40NjU0Olx0XG40NjU1Olx0c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbjQ2NTY6XHR7XG40NjU3Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuNDY1ODpcdFx0dW5zaWduZWQgaW50IGZsYWdzID0gTkxNX0ZfTVVMVEk7XG40NjU5Olx0XHRzdHJ1Y3Qge1xuNDY2MDpcdFx0XHR1bnNpZ25lZCBsb25nIGlmaW5kZXg7XG40NjYxOlx0XHRcdGludCBhZGRyX2lkeDtcbjQ2NjI6XHRcdH0gKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuNDY2MzpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjQ2NjQ6XHRcdGludCBpZmluZGV4O1xuNDY2NTpcdFx0aW50IGVycjtcbjQ2NjY6XHRcbjQ2Njc6XHRcdGVyciA9IHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxKGNiLVx1MDAzZW5saCwgY2ItXHUwMDNlZXh0YWNrLCBcdTAwMjZpZmluZGV4KTtcbjQ2Njg6XHRcdGlmIChlcnIgXHUwMDNjIDApXG40NjY5Olx0XHRcdHJldHVybiBlcnI7XG40NjcwOlx0XG40NjcxOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG40NjcyOlx0XG40NjczOlx0XHRpZiAoaWZpbmRleCkge1xuNDY3NDpcdFx0XHRjYi1cdTAwM2VhbnN3ZXJfZmxhZ3MgfD0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcbjQ2NzU6XHRcdFx0ZmxhZ3MgfD0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcbjQ2NzY6XHRcdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBpZmluZGV4KTtcbjQ2Nzc6XHRcdFx0aWYgKCFkZXYpIHtcbjQ2Nzg6XHRcdFx0XHRlcnIgPSAtRU5PREVWO1xuNDY3OTpcdFx0XHRcdGdvdG8gb3V0O1xuNDY4MDpcdFx0XHR9XG40NjgxOlx0XHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LCBmbGFncyk7XG40NjgyOlx0XHRcdGdvdG8gb3V0O1xuNDY4MzpcdFx0fVxuNDY4NDpcdFxuNDY4NTpcdFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG40Njg2Olx0XHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LFxuNDY4NzpcdFx0XHRcdFx0XHQgICBmbGFncyk7XG40Njg4Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG40Njg5Olx0XHRcdFx0YnJlYWs7XG40NjkwOlx0XHR9XG40NjkxOlx0b3V0OlxuNDY5MjpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG40NjkzOlx0XHRyZXR1cm4gZXJyO1xuNDY5NDpcdH1cbjQ2OTU6XHRcbjQ2OTY6XHRzdHJ1Y3Qgc2tfYnVmZiAqcnRtc2dfaWZpbmZvX2J1aWxkX3NrYihpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbjQ2OTc6XHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlLFxuNDY5ODpcdFx0XHRcdFx0ICAgICAgIHUzMiBldmVudCwgZ2ZwX3QgZmxhZ3MsIGludCAqbmV3X25zaWQsXG40Njk5Olx0XHRcdFx0XHQgICAgICAgaW50IG5ld19pZmluZGV4LCB1MzIgcG9ydGlkLFxuNDcwMDpcdFx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoKVxuNDcwMTpcdHtcbjQ3MDI6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcbjQ3MDM6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG40NzA0Olx0XHRpbnQgZXJyID0gLUVOT0JVRlM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTAxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFJ0bmV0bGluayBSZWdpc3RyYXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIGBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNgIGdldCBob29rZWQgdXAsIHdoaWNoIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHJvdXRpbmcgbWVzc2FnZXMgYXJlIG1hbmFnZWQgaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgc3RhcnRpbmcgcG9pbnQgc2VlbXMgdG8gYmUgYHJ0bmV0bGlua19pbml0KClgLiBBaGEsIHRoZXJlIGl0IGlzISBgcnRubF9yZWdpc3Rlcl9tYW55KHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVycyk7YCBUaGF0JiMzOTtzIHRoZSBrZXkgbGluZS4gU28gYHJ0bmxfcmVnaXN0ZXJfbWFueWAgaXMgbGlrZWx5IHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyBhbGwgdGhlIGhhbmRsZXIgZnVuY3Rpb25zIHdpdGhpbiBgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzYC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgcnRuZXRsaW5rX2luaXRgIHdvcmtzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmV0bGlua19ydG5sX21zZ19oYW5kbGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jPTczNTY9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBydG5ldGxpbmtfbmV0X29wcyA9IHtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MzYwLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzM2MTpzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MzYyLVx0ey5tc2d0eXBlID0gUlRNX05FV0xJTkssIC5kb2l0ID0gcnRubF9uZXdsaW5rLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTc0MDE9dm9pZCBfX2luaXQgcnRuZXRsaW5rX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03NDA3LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzQwODpcdHJ0bmxfcmVnaXN0ZXJfbWFueShydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnMpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNzQwOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMDkKCQkJCQkJCW91dHB1dDogMTQ2CgkJCQkJCQl0aG91Z2h0czogNTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IE11bHRpY2FzdCBBZGRyZXNzIER1bXBpbmcgdmlhIHJ0bmV0bGluayoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gZHVtcGluZyBtdWx0aWNhc3QgYWRkcmVzc2VzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBhIGZ1enppbmcgY2FtcGFpZ24uIFRoZSBjb2RlIHRvdWNoZXMgYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgd2hpY2gsIGFzIHdlIGFsbCBrbm93LCBpcyAqY29yZSogbmV0d29ya2luZyBjb2RlIOKAkyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIG9mIGl0cyBjZW50cmFsIHJvbGUgaW4gdGhlIGtlcm5lbC4gVGhpcyBzcGVjaWZpYyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbmFsaXR5IGZvciBkdW1waW5nIG11bHRpY2FzdCBhZGRyZXNzZXMgYXNzb2NpYXRlZCB3aXRoIGBQRl9QQUNLRVRgIHNvY2tldHMgdXNpbmcgYFJUTV9HRVRNVUxUSUNBU1RgIHJlcXVlc3RzIHRocm91Z2ggcnRuZXRsaW5rLiBXZSBoYXZlIHRoZSB1c3VhbCBzdXNwZWN0czogYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLCBhbmQgYHJ0bmxfZmlsbF9tY2FkZHJgLgoKVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIG5ldyBjb2RlIGlzIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIG1lc3NhZ2VzLiBTcGVjaWZpY2FsbHksIHVzZXJzcGFjZSBjYW4gdHJpZ2dlciB0aGlzIHdpdGggYW4gYFJUTV9HRVRNVUxUSUNBU1RgIHJlcXVlc3QgYW5kIGBBRl9QQUNLRVRgLiBTbywgdGhlIGF0dGFjayBzdXJmYWNlIGlzIHJpZ2h0IHRoZXJlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBoYW5kbGluZyB1c2VyLXN1cHBsaWVkIHJlcXVlc3QgaGVhZGVycywgaXRlcmF0aW5nIG92ZXIgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgc2VyaWFsaXppbmcgbmV0bGluayBhdHRyaWJ1dGVzLiBUaGlzIGlzIGEgY2xhc3NpYyBwYXR0ZXJuIHRoYXTigJlzIHlpZWxkZWQgbWFueSBrZXJuZWwgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBwYXN0LCBhbmQgSSYjMzk7bSBwcmFjdGljYWxseSBzZWVpbmcgYnVnIHJlcG9ydHMgYWxyZWFkeS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgc2V0dXAuIFRoZSBgTkVUYCBjb25maWcgZmxhZyBpcyBvYnZpb3VzbHkgbmVjZXNzYXJ5OyB0aGF0JiMzOTtzIHdoYXQgY29tcGlsZXMgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYC4gR29vZCwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIEl0IHNlZW1zIHdlIGRvbiYjMzk7dCBuZWVkIGFueSBzcGVjaWFsaXplZCBuZXR3b3JrIGZsYWdzIGxpa2UgYENPTkZJR19JTkVUYCBiZWNhdXNlIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBjZW50ZXJlZCBhcm91bmQgYEFGX1BBQ0tFVGAsIHdoaWNoIGlzIGp1c3QgYSBjb25zdGFudCAoMTcpLCBhbmQgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMuIFRoZSBgZGV2X2FkZHJfbGlzdHNgIGFuZCBgcnRuZXRsaW5rYCBzdHJ1Y3R1cmVzIHdlIGFyZSBpbnRlcmFjdGluZyB3aXRoIGFyZSBidWlsdC1pbiBpZiBgQ09ORklHX05FVGAgaXMgZW5hYmxlZC4gRXhjZWxsZW50LgoKVGhlcmVmb3JlLCB0aGUgZmluYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gVGhlIGBFbmFibGVDb25maWdzYCBpcyBqdXN0IGBORVRgLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSB0aGUgZm91ciBmdW5jdGlvbnMgbGlzdGVkIHByZXZpb3VzbHkuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuIFdlIGhhdmUgb3VyIGZ1enppbmcgdGFyZ2V0IHJlYWR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkciYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfbWNhZGRyX2RldiYjMzQ7LAogICAgJiMzNDtydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcSYjMzQ7LAogICAgJiMzNDtydG5sX2ZpbGxfbWNhZGRyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV0bGluayBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoUEZfUEFDS0VUIC8gUlRNX0dFVE1VTFRJQ0FTVCkgaW4gcnRuZXRsaW5rLiBUaGUgbmV3bHkgYWRkZWQgY29kZSB2YWxpZGF0ZXMgdXNlciBkdW1wIHJlcXVlc3RzLCB0cmF2ZXJzZXMgZGV2aWNlIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIHVuZGVyIGxvY2ssIGFuZCBzZXJpYWxpemVzIHJ0bmV0bGluayBhdHRyaWJ1dGVzLCB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgdmlhIG5ldGxpbmsgc29ja2V0IG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZHVtcF9tY2FkZHImIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX21jYWRkcl9kZXYmIzM0OywKICAgICYjMzQ7cnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEmIzM0OywKICAgICYjMzQ7cnRubF9maWxsX21jYWRkciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldGxpbmsgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKFBGX1BBQ0tFVCAvIFJUTV9HRVRNVUxUSUNBU1QpIGluIHJ0bmV0bGluay4gVGhlIG5ld2x5IGFkZGVkIGNvZGUgdmFsaWRhdGVzIHVzZXIgZHVtcCByZXF1ZXN0cywgdHJhdmVyc2VzIGRldmljZSBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyB1bmRlciBsb2NrLCBhbmQgc2VyaWFsaXplcyBydG5ldGxpbmsgYXR0cmlidXRlcywgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHNvY2tldCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoQUZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QpIHZpYSBuZXRsaW5rLiBcblxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgXHUwMDI2IEluZm8tbGVha3MgKEtNU0FOKTogQWxsIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIGluIG5ldGxpbmsgcmVzcG9uc2VzIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBpZmFkZHJtc2dgIGhlYWRlciBoYXMgYSA4LWJ5dGUgbGF5b3V0IHdpdGhvdXQgaW50ZXJuYWwgcGFkZGluZyBob2xlcywgYW5kIGFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBzZXQuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBJRkFfTVVMVElDQVNUYCBhbmQgYElGQV9NQ19VU0VSU2ApIGFyZSBhZGRlZCB3aXRoIGBubGFfcHV0YCAvIGBubGFfcHV0X3UzMmAgd2hpY2ggemVybyBhbnkgdHJhaWxpbmcgYXR0cmlidXRlIGFsaWdubWVudCBwYWRkaW5nLiBBZGRyZXNzIGJ5dGVzIGluIGBoYS1cdTAwM2VhZGRyYCBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIGhhcmR3YXJlIGFkZHJlc3MgY3JlYXRpb24gdXAgdG8gYGRldi1cdTAwM2VhZGRyX2xlbmAuIENvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgZHVtcCBgY3R4YCBhbmQgYGlmaW5kZXhgKSBhcmUgZWl0aGVyIHplcm9lZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0gb3IgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbi0gTWVtb3J5IFNhZmV0eSBcdTAwMjYgQ29uY3VycmVuY3kgKEtBU0FOL0xPQ0tERVApOiBUaGUgY2hhbmdlcyBpbnZvbHZlIFJDVSBsb29rdXBzLCBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzLCBhbmQgZGV2aWNlIGFkZHJlc3MgbGlzdCBsb2NrcyAoYG5ldGlmX2FkZHJfbG9ja19iaGApLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBjb25maWd1cmF0aW9ucy5cblxuVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjlmMjI5YWM4ZTY2ZGI0NzQ3MWFlOTk3MDk1MTg5Yzg5NTQ2YTIzNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDI6Mzc6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbAppbmRleCAwZWNiZDI0Yzg5MGM2Li4yYTIzMTBjYjBkZjAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwKQEAgLTE2OCw3ICYjNDM7MTY4LDEyIEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGwKICAgICAtCiAgICAgICBuYW1lOiBnZXRtdWx0aWNhc3QKLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy4KJiM0MzsgICAgICBkb2M6IHwKJiM0MzsgICAgICAgIEdldCAvIGR1bXAgbXVsdGljYXN0IGFkZHJlc3Nlcy4gaWZhLWZhbWlseSBzZWxlY3RzIHRoZSBhZGRyZXNzCiYjNDM7ICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvbgomIzQzOyAgICAgICAgYSBkZXZpY2UsIEFGX1BBQ0tFVCBmb3IgdGhlIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiB0aGUKJiM0MzsgICAgICAgIGRldmljZSBmaWx0ZXIuIExpbmstbGF5ZXIgZW50cmllcyBhZGRlZCB3aXRoIFNJT0NBRERNVUxUSSBhcmUKJiM0MzsgICAgICAgIHJlcG9ydGVkIHdpdGggdGhlIHBlcm1hbmVudCBmbGFnIHNldC4KICAgICAgIGF0dHJpYnV0ZS1zZXQ6IGFkZHItYXR0cnMKICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnCiAgICAgICBkbzoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggODFjNWE2MTA0ZGVhMS4uYjJmZWJkYjY5MTVlOCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTQ1NjYsNiAmIzQzOzQ1NjYsMTMzIEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJcmV0dXJuIHNrYi0mZ3Q7bGVuID8gOiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCwKJiM0MzsJCQkgICAgdTMyIHNlcSwgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlmYWRkcm1zZyAqaWZtOwomIzQzOwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKJiM0MzsKJiM0MzsJbmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSwKJiM0MzsJCQlmbGFncyk7CiYjNDM7CWlmICghbmxoKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJaWZtID0gbmxtc2dfZGF0YShubGgpOwomIzQzOwlpZm0tJmd0O2lmYV9mYW1pbHkgPSBBRl9QQUNLRVQ7CiYjNDM7CWlmbS0mZ3Q7aWZhX3ByZWZpeGxlbiA9IDA7CiYjNDM7CWlmbS0mZ3Q7aWZhX2ZsYWdzID0gaGEtJmd0O2dsb2JhbF91c2UgPyBJRkFfRl9QRVJNQU5FTlQgOiAwOwomIzQzOwlpZm0tJmd0O2lmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7CiYjNDM7CWlmbS0mZ3Q7aWZhX2luZGV4ID0gZGV2LSZndDtpZmluZGV4OwomIzQzOwomIzQzOwlpZiAobmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi0mZ3Q7YWRkcl9sZW4sIGhhLSZndDthZGRyKSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLSZndDtyZWZjb3VudCkpIHsKJiM0MzsJCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5sbXNnX2VuZChza2IsIG5saCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50ICpzX2FkZHJfaWR4LAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwomIzQzOwlpbnQgYWRkcl9pZHggPSAwOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJbmV0aWZfYWRkcl9sb2NrX2JoKGRldik7CiYjNDM7CW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHsKJiM0MzsJCWlmIChhZGRyX2lkeCAmbHQ7ICpzX2FkZHJfaWR4KSB7CiYjNDM7CQkJYWRkcl9pZHgmIzQzOyYjNDM7OwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItJmd0O3NrYikucG9ydGlkLAomIzQzOwkJCQkgICAgICAgY2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncyk7CiYjNDM7CQlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCQlicmVhazsKJiM0MzsJCWFkZHJfaWR4JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwluZXRpZl9hZGRyX3VubG9ja19iaChkZXYpOwomIzQzOwomIzQzOwkqc19hZGRyX2lkeCA9IGVyciAmbHQ7IDAgPyBhZGRyX2lkeCA6IDA7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywKJiM0MzsJCQkJICAgICAgaW50ICpwaWZpbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZmFkZHJtc2cgKmlmbTsKJiM0MzsKJiM0MzsJaWZtID0gbmxtc2dfcGF5bG9hZChubGgsIHNpemVvZigqaWZtKSk7CiYjNDM7CWlmICghaWZtKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7SW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3QmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaWZtLSZndDtpZmFfcHJlZml4bGVuIHx8IGlmbS0mZ3Q7aWZhX2ZsYWdzIHx8IGlmbS0mZ3Q7aWZhX3Njb3BlKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7SW52YWxpZCB2YWx1ZXMgaW4gbXVsdGljYXN0IGR1bXAgaGVhZGVyJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG5sbXNnX2F0dHJsZW4obmxoLCBzaXplb2YoKmlmbSkpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7SW52YWxpZCBkYXRhIGFmdGVyIG11bHRpY2FzdCBkdW1wIGhlYWRlciYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpwaWZpbmRleCA9IGlmbS0mZ3Q7aWZhX2luZGV4OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwomIzQzOwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgaWZpbmRleDsKJiM0MzsJCWludCBhZGRyX2lkeDsKJiM0MzsJfSAqY3R4ID0gKHZvaWQgKiljYi0mZ3Q7Y3R4OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwomIzQzOwlpbnQgaWZpbmRleDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItJmd0O25saCwgY2ItJmd0O2V4dGFjaywgJmFtcDtpZmluZGV4KTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CiYjNDM7CWlmIChpZmluZGV4KSB7CiYjNDM7CQljYi0mZ3Q7YW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7CiYjNDM7CQlmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEOwomIzQzOwkJZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBpZmluZGV4KTsKJiM0MzsJCWlmICghZGV2KSB7CiYjNDM7CQkJZXJyID0gLUVOT0RFVjsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCWVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgJmFtcDtjdHgtJmd0O2FkZHJfaWR4LCBmbGFncyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LSZndDtpZmluZGV4KSB7CiYjNDM7CQllcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsICZhbXA7Y3R4LSZndDthZGRyX2lkeCwKJiM0MzsJCQkJCSAgIGZsYWdzKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7b3V0OgomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3Qgc2tfYnVmZiAqcnRtc2dfaWZpbmZvX2J1aWxkX3NrYihpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSwKIAkJCQkgICAgICAgdTMyIGV2ZW50LCBnZnBfdCBmbGFncywgaW50ICpuZXdfbnNpZCwKQEAgLTcyNTEsNiAmIzQzOzczNzgsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPQogCXsubXNndHlwZSA9IFJUTV9TRVRTVEFUUywgLmRvaXQgPSBydG5sX3N0YXRzX3NldH0sCiAJey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LAogCXsubXNndHlwZSA9IFJUTV9ERUxMSU5LUFJPUCwgLmRvaXQgPSBydG5sX2RlbGxpbmtwcm9wfSwKJiM0MzsJey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULAomIzQzOwkgLmR1bXBpdCA9IHJ0bmxfZHVtcF9tY2FkZHIsIC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSwKIAl7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLAogCSAuZHVtcGl0ID0gcnRubF9icmlkZ2VfZ2V0bGlua30sCiAJey5wcm90b2NvbCA9IFBGX0JSSURHRSwgLm1zZ3R5cGUgPSBSVE1fREVMTElOSywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CmluZGV4IDVjYzNlYmRjZjA4ZGUuLmNlYTYzNmYxMGFlYjYgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQpAQCAtMSwxNyAmIzQzOzEsMjEgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIAomIzQzO2ltcG9ydCBlcnJubwogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHRpbWUKIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXgKLWZyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZQotZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X2luLCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZQomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIE5sRXJyb3IsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHkKIGZyb20gbGliLnB5IGltcG9ydCBkZWZlcgogCiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtceGUwXHgwMFx4MDBceDAxJiMzOTsKIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJiMzOTtceGVmXHgwMVx4MDFceDAxJiMzOTsKIElQVjZfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCYjMzk7ZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMmIzM5OykKJiM0MztFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzOTswMTAwNWUwMDAwMDEmIzM5OykKJiM0MztFVEhfVEVTVF9NVUxUSUNBU1RfU1RSID0gJiMzOTswMTowMDo1ZTowMTowMTowMSYjMzk7CiYjNDM7RVRIX1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleChFVEhfVEVTVF9NVUxUSUNBU1RfU1RSLnJlcGxhY2UoJiMzOTs6JiMzOTssICYjMzk7JiMzOTspKQogCiAKIGRlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KToKQEAgLTEwNSw2ICYjNDM7MTA5LDUyIEBAIGRlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtJmd0OyBOb25lOgogICAgICAgICAgICAgICAgIHMyLmNsb3NlKCkKIAogCiYjNDM7ZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIFZlcmlmeSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gYW4gQUZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QKJiM0MzsgICAgZHVtcDogdGhlIGlmYS1pbmRleCBmaWx0ZXIsIG1jLXVzZXJzIGFuZCB0aGUgcGVybWFuZW50IGZsYWcuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6CiYjNDM7ICAgICAgICBmb3IgaWZuYW1lIGluICgmIzM0O2R1bW15MSYjMzQ7LCAmIzM0O2R1bW15MiYjMzQ7KToKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXkmIzM0OykKJiM0MzsgICAgICAgICAgICBpcChmJiMzNDtsaW5rIHNldCB7aWZuYW1lfSB1cCYjMzQ7KQomIzQzOyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM0O2R1bW15MSYjMzQ7KQomIzQzOyAgICAgICAgaXAoZiYjMzQ7bWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxJiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KAomIzQzOyAgICAgICAgICAgICAgICB7JiMzNDtpZmEtZmFtaWx5JiMzNDs6IHNvY2tldC5BRl9QQUNLRVQsICYjMzQ7aWZhLWluZGV4JiMzNDs6IGRldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICBkdW1wPVRydWUpCiYjNDM7ICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOgomIzQzOyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDoKJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7a2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wJiMzNDspCiYjNDM7ICAgICAgICAgICAgcmFpc2UKJiM0MzsKJiM0MzsgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWQKJiM0MzsgICAgICAgIGtzZnRfZXEoe2FkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10gZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwge2Rldl9pZHh9LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O0FGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCBpZ25vcmVkIGlmYS1pbmRleCBmaWx0ZXImIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIGVudHJpZXMgPSB7YWRkclsmIzM5O211bHRpY2FzdCYjMzk7XTogYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXN9CiYjNDM7CiYjNDM7ICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHMKJiM0MzsgICAgICAgICMgdG8gMDE6MDA6NWU6MDA6MDA6MDEgaW4gdGhlIGRldmljZSBtdWx0aWNhc3QgbGlzdC4KJiM0MzsgICAgICAgIGtzZnRfaW4oRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QsIGVudHJpZXMsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7ZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIGFsbC1ob3N0cyBsaW5rLWxheWVyIGFkZHJlc3MmIzM0OykKJiM0MzsgICAgICAgIGtzZnRfbm90X2luKCYjMzk7cGVybWFuZW50JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICBlbnRyaWVzW0VUSF9BTExfSE9TVFNfTVVMVElDQVNUXVsmIzM5O2lmYS1mbGFncyYjMzk7XSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7cHJvdG9jb2wgZW50cnkgaXMgcGVybWFuZW50JiMzNDspCiYjNDM7CiYjNDM7ICAgICAgICBrc2Z0X2luKEVUSF9URVNUX01VTFRJQ0FTVCwgZW50cmllcywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3MmIzM0OykKJiM0MzsgICAgICAgIGtzZnRfZXEoZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWyYjMzk7bWMtdXNlcnMmIzM5O10sIDEsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7dW5leHBlY3RlZCBtYy11c2VycyBmb3IgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzJiMzNDspCiYjNDM7ICAgICAgICBrc2Z0X2luKCYjMzk7cGVybWFuZW50JiMzOTssIGVudHJpZXNbRVRIX1RFU1RfTVVMVElDQVNUXVsmIzM5O2lmYS1mbGFncyYjMzk7XSwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IHBlcm1hbmVudCYjMzQ7KQomIzQzOwomIzQzOwogZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtJmd0OyBOb25lOgogICAgICYjMzQ7JiMzNDsmIzM0OwogICAgIENvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgYW5kIHNldCBpcHY0LWRldmNvbmYgdmFsdWVzIHRocm91Z2ggbmV0bGluawpAQCAtMzE1LDcgJiM0MzszNjUsOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC0mZ3Q7IE5vbmU6CiAKIAogZGVmIG1haW4oKSAtJmd0OyBOb25lOgotICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LAomIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgZHVtcF9tY2FkZHJfbDJfY2hlY2ssCiYjNDM7ICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3biwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzE0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIHZzLiBLQVNBTiBQYXRjaCBFdmFsdWF0aW9uKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nIGFzIEkgYXBwcm9hY2ggdGhpcyBwYXRjaC4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBvcGVyYXRpbmcgd2l0aGluIHRoZSBzYWZldHkgZ3VpZGVsaW5lczogbm8gcmVhbC13b3JsZCBoYXJtLCBubyBvZmZlbnNpdmUgYWN0aW9ucywgYW5kIHRoaXMgY29kZSBhdWRpdGluZyBpcyBkZWZpbml0ZWx5IGJlbmlnbiwgc28gSSYjMzk7bSBnb29kIHRvIGdvLiBUaGUgc3BlY2lmaWMgdGFzayBpcyB0byBldmFsdWF0ZSB0aGlzIHBhdGNoIHNlcmllcyBmb3IgS01TQU4gYXBwbGljYWJpbGl0eSwgbG9va2luZyBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSSYjMzk7dmUgZ290IG15IHRvb2xzOiBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGByZWFkLWZpbGVgLCBhbmQgY3J1Y2lhbGx5LCBgc2V0LXJlc3VsdHNgLCB3aGljaCBJICptdXN0KiBjYWxsIG9uY2UgYXQgdGhlIGVuZC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgbXVsdGljYXN0IGFkZHJlc3MgZHVtcGluZyB0aHJvdWdoIE5ldGxpbmssIHNwZWNpZmljYWxseSBgUlRNX0dFVE1VTFRJQ0FTVGAgd2l0aCBgUEZfUEFDS0VUYC4gU28sIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4KClRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgcnRubF9maWxsX21jYWRkcmAuIExvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIGl0IHBvcHVsYXRpbmcgYW4gYHNrX2J1ZmZgIHdpdGggTmV0bGluayBtZXNzYWdlIGRhdGEuIEl0IHVzZXMgYG5sbXNnX3B1dGAgdG8gY3JlYXRlIHRoZSBoZWFkZXIsIGFuZCB0aGVuIHN0YXJ0cyBmaWxsaW5nIGluIGZpZWxkcyBsaWtlIGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgLCBhbmQgYWxzbyBzb21lIE5ldGxpbmsgYXR0cmlidXRlczogYElGQV9NVUxUSUNBU1RgIGFuZCBgSUZBX01DX1VTRVJTYC4KCk5vdyBjb21lcyB0aGUgY3J1Y2lhbCBwYXJ0LiBJIG5lZWQgdG8gYmUgZXh0cmEgdmlnaWxhbnQgYWJvdXQgd2hldGhlciBhbnkgb2YgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIG9yIHRoZSBhdHRyaWJ1dGVzIHVzZWQsIGVzcGVjaWFsbHkgYGlmYWRkcm1zZ2AsIGNvdWxkIGJlIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0JiMzOTtzIHdoZXJlIEtNU0FOIGNvbWVzIGludG8gcGxheS4gSSBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgaG93IHRoZXNlIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGluaXRpYWxpemVkLCBhbmQgd2hhdCB2YWx1ZXMgYXJlIGJlaW5nIGFzc2lnbmVkIHRvIHRoZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBpZmFkZHJtc2dgIHRvIGVuc3VyZSB0aGF0IGl0IGRvZXMgbm90IGNvbnRhaW4gYW55IHBhZGRpbmcsIHVuaW5pdGlhbGl6ZWQgbWVtYmVycyBvciByZWxpZXMgb24gZXh0ZXJuYWwgdmFsdWVzIHRoYXQgbWF5IGJlIHVuaW5pdGlhbGl6ZWQuIFRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBoZWFkZXJzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iYWQgZXhwcmVzc2lvbjogZmF0YWw6IC1lIG9wdGlvbiwgJiMzOTtzdHJ1Y3QgaWZhZGRybXNnIHsmIzM5OzogVW5tYXRjaGVkIFx7PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpZmFkZHJtc2cgeyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2JhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAmIzM5O3N0cnVjdCBpZmFkZHJtc2cgeyYjMzk7OiBVbm1hdGNoZWQgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzkyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBSZWdleC9Db2Rlc2VhcmNoIERpbGVtbWEqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgaXNzdWUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzLCAmIzM0O0hvdyBjYW4gSSBlZmZpY2llbnRseSBhZGRyZXNzIHRoaXM/JiMzNDsgSXQmIzM5O3MgYSBjbGFzc2ljIHNpdHVhdGlvbjogSSBuZWVkIHRvIGxvY2F0ZSBpbnN0YW5jZXMgb2Ygc29tZXRoaW5n4oCUbWF5YmUgYSBwYXR0ZXJuLCBhIHNwZWNpZmljIGNvZGUgY29uc3RydWN0LCBvciBhIHByb2JsZW1hdGljIGltcGxlbWVudGF0aW9u4oCUd2l0aGluIGEgY29kZWJhc2UuIE15IGltbWVkaWF0ZSBvcHRpb25zIGFyZSBlaXRoZXIgdG8gcmVmaW5lIGEgcmVndWxhciBleHByZXNzaW9uIG9yIGxldmVyYWdlIGEgY29kZXNlYXJjaCB0b29sLgoKVGhlIHJlZ2V4IGFwcHJvYWNoIGhhcyBpdHMgcHJvcy4gSSBjYW4gbWV0aWN1bG91c2x5IGNyYWZ0IGEgcmVnZXggdG8gdGFyZ2V0IHZlcnkgc3BlY2lmaWMgaW5zdGFuY2VzLiBJdCBvZmZlcnMgcHJlY2lzaW9uLCBlc3BlY2lhbGx5IGlmIHRoZSBwYXR0ZXJuIGlzIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGFuZCB3ZWxsLWRlZmluZWQuIEkgY2FuIHF1aWNrbHkgaXRlcmF0ZSBhbmQgdGVzdCBteSBwYXR0ZXJuLiBIb3dldmVyLCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgb3Zlcmx5IGNvbXBsZXggcmVnZXggY2FuIGJlY29tZSB1bm1haW50YWluYWJsZeKAlGEgbmlnaHRtYXJlIHRvIGRlYnVnIGFuZCBwb3RlbnRpYWxseSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIHBhcnRpY3VsYXJseSBvbiBsYXJnZSBmaWxlcyBvciBpbiBhIHRpZ2h0IGxvb3AuCgpUaGUgYWx0ZXJuYXRpdmUsIGNvZGVzZWFyY2gsIGlzIHRlbXB0aW5nLiBBIHByb3BlciBjb2RlIHNlYXJjaCB0b29sLCBzdWNoIGFzIGdyZXAgb3IgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgc3lzdGVtLCBoYXMgdGhlIGFkdmFudGFnZSBvZiB1bmRlcnN0YW5kaW5nIG1vcmUgY29udGV4dCBhYm91dCB0aGUgY29kZSBsYW5ndWFnZSBJIGFtIHdvcmtpbmcgaW4uIFRoaXMga25vd2xlZGdlIGlzIGltcG9ydGFudCBmb3IgbXkgc2VhcmNoIGFzIGl0IHdpbGwgaGVscCB0byBkZXRlcm1pbmUgd2hhdCB0aGUgdG9rZW5zIGluIG15IHNlYXJjaCBzdHJpbmcgbWVhbiwgYW5kIGNhbiBhbHNvIGhlbHAgc2VhcmNoIGFuZCByZXBsYWNlLiBUaGlzIGNhbiBiZSBncmVhdCBpZiBJIGFtIHNlYXJjaGluZyBmb3IgbGFuZ3VhZ2UgY29uc3RydWN0cy4gQ29kZSBzZWFyY2ggaGFzIHRoZSBwb3RlbnRpYWwgdG8gaGFuZGxlIG1vcmUgY29tcGxleCBvciBudWFuY2VkIHF1ZXJpZXMgd2l0aCBiZXR0ZXIgYWNjdXJhY3ksIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyBjb250ZXh0LCBsYW5ndWFnZSBzeW50YXgsIGFuZCBldmVuIHNlbWFudGljIG1lYW5pbmcuIENvZGVzZWFyY2ggaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBmaWxlcywgb3IgbGFyZ2UgY29kZWJhc2VzLiBIb3dldmVyLCB0aGUgaW5pdGlhbCBzZXR1cCBhbmQgaW5kZXhpbmcgb2YgYSBjb2Rlc2VhcmNoIHNvbHV0aW9uIGNhbiB0YWtlIG1vcmUgdGltZSBhbmQgZWZmb3J0LCBlc3BlY2lhbGx5IGlmIHRoZSBjb2RlYmFzZSBpcyBwYXJ0aWN1bGFybHkgY29tcGxleCBvciB1c2VzIGFuIHVudXN1YWwgc2V0dXAuIEFsc28sIGlmIEkgYW0gdHJ5aW5nIHRvIHNlYXJjaCBmb3Igc29tZXRoaW5nIHZlcnkgc3BlY2lmaWMsIHRoZSBwcmVjaXNpb24gbWF5IGJlIGxlc3MgdGhhbiBhIHJlZ2V4LWJhc2VkIHNvbHV0aW9uLCBkZXBlbmRpbmcgb24gdGhlIGNvZGVzZWFyY2ggZW5naW5lLgoKU28sIEkgbmVlZCB0byB3ZWlnaCB0aGUgdHJhZGUtb2ZmczogcHJlY2lzaW9uIHZlcnN1cyBzY2FsZSwgY29tcGxleGl0eSB2ZXJzdXMgZWZmaWNpZW5jeS4gV2hhdCYjMzk7cyB0aGUgc2NvcGUgb2YgdGhlIHByb2JsZW0/IElzIGl0IGEgcXVpY2ssIGlzb2xhdGVkIHRhc2ssIG9yIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIHJldmlzaXRlZCwgbWFpbnRhaW5lZCwgYW5kIHBlcmhhcHMgZXZlbiBhdXRvbWF0ZWQ/IEtub3dpbmcgdGhhdCB3aWxsIGRldGVybWluZSB3aGV0aGVyIEkgdXNlIHJlZ2V4IG9yIGNvZGVzZWFyY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBpZmFkZHJtc2cgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtNy1cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6ODpzdHJ1Y3QgaWZhZGRybXNnIHtcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtOS1cdF9fdThcdFx0aWZhX2ZhbWlseTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTctXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oOjg6c3RydWN0IGlmYWRkcm1zZyB7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTktXHRfX3U4XHRcdGlmYV9mYW1pbHk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byBOZXR3b3JrIEludGVyZmFjZSBBZGRyZXNzIFN0cnVjdHVyZXMqKgoKT2theSwgdGltZSB0byBjcmFjayBvcGVuIGBpbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oYC4gSSYjMzk7bSBjdXJpb3VzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBrZXJuZWwmIzM5O3MgZGVmaW5pdGlvbnMgZm9yIG5ldHdvcmsgaW50ZXJmYWNlIGFkZHJlc3Nlcywgc3BlY2lmaWNhbGx5IHRoZSBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMuIEkgbmVlZCB0byBnZXQgYmFjayBpbiB0aGUgd2VlZHMgYW5kIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgcmVwcmVzZW50cyBhbmQgaGFuZGxlcyB0aGUgdmFyaW91cyBhZGRyZXNzIGZhbWlsaWVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRhdGEuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgZm9yIHRoaW5ncyBsaWtlIElQdjQsIElQdjYsIGFuZCBwb3RlbnRpYWxseSBvdGhlciBhZGRyZXNzIHR5cGVzIHdpbGwgbGl2ZS4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYW55IGFsaWdubWVudCBjb25zaWRlcmF0aW9ucywgYXMgdGhvc2UgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIGludGVyb3BlcmFiaWxpdHkuIEl0JiMzOTtzIGFsc28gd29ydGggZG91YmxlLWNoZWNraW5nIGFueSByZWNlbnQgY2hhbmdlcyBvciBhZGRpdGlvbnMgdG8gdGhpcyBoZWFkZXIg4oCTIGl0JiMzOTtzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBzdGF5IG9uIHRvcCBvZiB0aGUgbGF0ZXN0IEFQSSBtb2RpZmljYXRpb25zLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIGEgcXVpY2sgcmV2aWV3LCBidXQgSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBwb3RlbnRpYWxseSBzdWJ0bGUgYnV0IGltcG9ydGFudCBkZXRhaWxzIHRoYXQgSSBzaG91bGQgcmVmcmVzaCBteSBtZW1vcnkgb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqL1xuICAgMjpcdCNpZm5kZWYgX1VBUElfX0xJTlVYX0lGX0FERFJfSFxuICAgMzpcdCNkZWZpbmUgX1VBUElfX0xJTlVYX0lGX0FERFJfSFxuICAgNDpcdFxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiAgIDc6XHRcbiAgIDg6XHRzdHJ1Y3QgaWZhZGRybXNnIHtcbiAgIDk6XHRcdF9fdThcdFx0aWZhX2ZhbWlseTtcbiAgMTA6XHRcdF9fdThcdFx0aWZhX3ByZWZpeGxlbjtcdC8qIFRoZSBwcmVmaXggbGVuZ3RoXHRcdCovXG4gIDExOlx0XHRfX3U4XHRcdGlmYV9mbGFncztcdC8qIEZsYWdzXHRcdFx0Ki9cbiAgMTI6XHRcdF9fdThcdFx0aWZhX3Njb3BlO1x0LyogQWRkcmVzcyBzY29wZVx0XHQqL1xuICAxMzpcdFx0X191MzJcdFx0aWZhX2luZGV4O1x0LyogTGluayBpbmRleFx0XHRcdCovXG4gIDE0Olx0fTtcbiAgMTU6XHRcbiAgMTY6XHQvKlxuICAxNzpcdCAqIEltcG9ydGFudCBjb21tZW50OlxuICAxODpcdCAqIElGQV9BRERSRVNTIGlzIHByZWZpeCBhZGRyZXNzLCByYXRoZXIgdGhhbiBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcy5cbiAgMTk6XHQgKiBJdCBtYWtlcyBubyBkaWZmZXJlbmNlIGZvciBub3JtYWxseSBjb25maWd1cmVkIGJyb2FkY2FzdCBpbnRlcmZhY2VzLFxuICAyMDpcdCAqIGJ1dCBmb3IgcG9pbnQtdG8tcG9pbnQgSUZBX0FERFJFU1MgaXMgREVTVElOQVRJT04gYWRkcmVzcyxcbiAgMjE6XHQgKiBsb2NhbCBhZGRyZXNzIGlzIHN1cHBsaWVkIGluIElGQV9MT0NBTCBhdHRyaWJ1dGUuXG4gIDIyOlx0ICpcbiAgMjM6XHQgKiBJRkFfRkxBR1MgaXMgYSB1MzIgYXR0cmlidXRlIHRoYXQgZXh0ZW5kcyB0aGUgdTggZmllbGQgaWZhX2ZsYWdzLlxuICAyNDpcdCAqIElmIHByZXNlbnQsIHRoZSB2YWx1ZSBmcm9tIHN0cnVjdCBpZmFkZHJtc2cgd2lsbCBiZSBpZ25vcmVkLlxuICAyNTpcdCAqL1xuICAyNjpcdGVudW0ge1xuICAyNzpcdFx0SUZBX1VOU1BFQyxcbiAgMjg6XHRcdElGQV9BRERSRVNTLFxuICAyOTpcdFx0SUZBX0xPQ0FMLFxuICAzMDpcdFx0SUZBX0xBQkVMLFxuICAzMTpcdFx0SUZBX0JST0FEQ0FTVCxcbiAgMzI6XHRcdElGQV9BTllDQVNULFxuICAzMzpcdFx0SUZBX0NBQ0hFSU5GTyxcbiAgMzQ6XHRcdElGQV9NVUxUSUNBU1QsXG4gIDM1Olx0XHRJRkFfRkxBR1MsXG4gIDM2Olx0XHRJRkFfUlRfUFJJT1JJVFksXHQvKiB1MzIsIHByaW9yaXR5L21ldHJpYyBmb3IgcHJlZml4IHJvdXRlICovXG4gIDM3Olx0XHRJRkFfVEFSR0VUX05FVE5TSUQsXG4gIDM4Olx0XHRJRkFfUFJPVE8sXHRcdC8qIHU4LCBhZGRyZXNzIHByb3RvY29sICovXG4gIDM5Olx0XHRJRkFfTUNfVVNFUlMsXHRcdC8qIHUzMiwgbXVsdGljYXN0IGdyb3VwIHVzZXJzICovXG4gIDQwOlx0XHRfX0lGQV9NQVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4ODYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgaWZhZGRybXNnYCBTdHJ1Y3R1cmUgZm9yIE5ldHdvcmsgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBgc3RydWN0IGlmYWRkcm1zZ2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBpZmFfZmFtaWx5YCAoYSB1OCksIGBpZmFfcHJlZml4bGVuYCAoYW5vdGhlciB1OCksIGBpZmFfZmxhZ3NgIChhIHU4IGFnYWluKSwgYGlmYV9zY29wZWAgKGFub3RoZXIgdTghKSwgYW5kIGZpbmFsbHkgYGlmYV9pbmRleGAgKGEgdTMyKS4gTmljZSEgVGhlIHRvdGFsIHNpemUgaXMganVzdCA4IGJ5dGVzLCB3aGljaCBpcyBnb29kIOKAkyBubyB3YXN0ZWQgc3BhY2UgZnJvbSBwYWRkaW5nLiBUaGF0JiMzOTtzIHdoYXQgSSBsaWtlIHRvIHNlZS4KCkFuZCwgZXZlbiBiZXR0ZXIsIGFsbCB0aGUgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBXZSYjMzk7dmUgZ290IGBpZm0gPSBubG1zZ19kYXRhKG5saClgLCB0aGVuIHRoZSBmaWVsZHMgZ2V0IHNldDogYGlmYV9mYW1pbHlgIHRvIGBBRl9QQUNLRVRgLCBgaWZhX3ByZWZpeGxlbmAgdG8gMCwgYGlmYV9mbGFnc2AgZ2V0cyBhIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgYmFzZWQgb24gYGhhLSZndDtnbG9iYWxfdXNlYCAoZWl0aGVyIGBJRkFfRl9QRVJNQU5FTlRgIG9yIDApLCBgaWZhX3Njb3BlYCBzZXQgdG8gYFJUX1NDT1BFX0xJTktgLCBhbmQgYGlmYV9pbmRleGAgdG8gdGhlIGRldmljZSYjMzk7cyBpZmluZGV4LiBNYWtlcyBzZW5zZS4KCkJ1dCBJJiMzOTttIGEgYml0IGN1cmlvdXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgbWVtb3J5IGFsbG9jYXRpb24uIFNpbmNlIGBubG1zZ19wdXRgIGlzIGludm9sdmVkLCBJIHNob3VsZCBjb25maXJtIHRoYXQgYG5sbXNnX3B1dGAgemVyb2VzIG9yIGluaXRpYWxpemVzIHRoZSBhbGxvY2F0ZWQgcGF5bG9hZCBzcGFjZS4gR290dGEgY2hlY2sgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB0byBiZSBzdXJlLiBJdCYjMzk7cyBnb29kIHRvIGtlZXAgdHJhY2sgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmxtc2dfcHV0XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0bGluay5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGxpbmsuaC0zNy0gKiAgIG5sbXNnX25ldygpXHRcdFx0Y3JlYXRlIGEgbmV3IG5ldGxpbmsgbWVzc2FnZVxuaW5jbHVkZS9uZXQvbmV0bGluay5oOjM4OiAqICAgbmxtc2dfcHV0KClcdFx0XHRhZGQgYSBuZXRsaW5rIG1lc3NhZ2UgdG8gYW4gc2tiXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6Mzk6ICogICBubG1zZ19wdXRfYW5zd2VyKClcdFx0XHRjYWxsYmFjayBiYXNlZCBubG1zZ19wdXQoKVxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTQwLSAqICAgbmxtc2dfZW5kKClcdFx0XHRmaW5hbGl6ZSBuZXRsaW5rIG1lc3NhZ2Vcbi0tXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg9OTU1PXN0YXRpYyBpbmxpbmUgdTMyIG5sbXNnX3NlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saClcbi0tXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtOTk0LSAqL1xuaW5jbHVkZS9uZXQvbmV0bGluay5oOjk5NTpzdGF0aWMgaW5saW5lIHN0cnVjdCBubG1zZ2hkciAqbmxtc2dfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtOTk2LVx0XHRcdFx0XHQgaW50IHR5cGUsIGludCBwYXlsb2FkLCBpbnQgZmxhZ3MpXG4tLVxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTEwMDAtXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6MTAwMTpcdHJldHVybiBfX25sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCB0eXBlLCBwYXlsb2FkLCBmbGFncyk7XG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtMTAwMi19XG4tLVxuaW5jbHVkZS9uZXQvbmV0bGluay5oPTEwMzY9c3RhdGljIGlubGluZSBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnX3B1dF9hbnN3ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtMTA0MC17XG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6MTA0MTpcdHJldHVybiBubG1zZ19wdXQoc2tiLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLCBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTEwNDItXHRcdFx0IHR5cGUsIHBheWxvYWQsIGZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg2NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIE5ldGxpbmsgRGV0YWlscyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgTmV0bGluayBtZXNzYWdlcyBhcmUgYmVpbmcgY29uc3RydWN0ZWQgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGp1bXAgaW50byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IHRoZSBgX19ubG1zZ19wdXRgIGZ1bmN0aW9uLiBJdCBzaG91bGQgYmUgaW4gYG5ldC9uZXRsaW5rL2FmX25ldGxpbmsuY2AsIG9yIGF0IGxlYXN0IGNsb3NlbHkgcmVsYXRlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoaXMgcHJpbWl0aXZlIGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgbGF5ZXIuIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBzb21ldGhpbmcgYW1pc3Mgd2l0aCB0aGUgbWVzc2FnZSBoZWFkZXIgY29uc3RydWN0aW9uIG9yIHBlcmhhcHMgZGF0YSBhbGlnbm1lbnQuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpZGVudGlmeSBzb21lIGlzc3VlcyBieSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX25sbXNnX3B1dFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0yNTQzPWludCBpc2NzaV9yZWN2X3BkdShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4sIHN0cnVjdCBpc2NzaV9oZHIgKmhkcixcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNTY1LVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM6MjU2NjpcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgMCwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjU2Ny1cdGV2ID0gbmxtc2dfZGF0YShubGgpO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI1ODE9aW50IGlzY3NpX29mZmxvYWRfbWVzZyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCxcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNTk1LVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM6MjU5NjpcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgMCwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjU5Ny1cdGV2ID0gbmxtc2dfZGF0YShubGgpO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI2MTY9dm9pZCBpc2NzaV9jb25uX2Vycm9yX2V2ZW50KHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiwgZW51bSBpc2NzaV9lcnIgZXJyb3IpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjY2MC1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjI2NjE6XHRubGggPSBfX25sbXNnX3B1dChza2IsIDAsIDAsIDAsIChsZW4gLSBzaXplb2YoKm5saCkpLCAwKTtcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI2NjItXHRldiA9IG5sbXNnX2RhdGEobmxoKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0yNjc2PXZvaWQgaXNjc2lfY29ubl9sb2dpbl9ldmVudChzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4sXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjY5NS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjI2OTY6XHRubGggPSBfX25sbXNnX3B1dChza2IsIDAsIDAsIDAsIChsZW4gLSBzaXplb2YoKm5saCkpLCAwKTtcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI2OTctXHRldiA9IG5sbXNnX2RhdGEobmxoKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0yNzEwPXZvaWQgaXNjc2lfcG9zdF9ob3N0X2V2ZW50KHVpbnQzMl90IGhvc3Rfbm8sIHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKnRyYW5zcG9ydCxcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNzI1LVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM6MjcyNjpcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgMCwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjcyNy1cdGV2ID0gbmxtc2dfZGF0YShubGgpO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI3NDE9dm9pZCBpc2NzaV9waW5nX2NvbXBfZXZlbnQodWludDMyX3QgaG9zdF9ubywgc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI3NTUtXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzoyNzU2Olx0bmxoID0gX19ubG1zZ19wdXQoc2tiLCAwLCAwLCAwLCAobGVuIC0gc2l6ZW9mKCpubGgpKSwgMCk7XG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNzU3LVx0ZXYgPSBubG1zZ19kYXRhKG5saCk7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM9Mjc3MT1pc2NzaV9pZl9zZW5kX3JlcGx5KHUzMiBwb3J0aWQsIGludCB0eXBlLCB2b2lkICpwYXlsb2FkLCBpbnQgc2l6ZSlcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNzgyLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM6Mjc4MzpcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgdHlwZSwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjc4NC1cdG1lbWNweShubG1zZ19kYXRhKG5saCksIHBheWxvYWQsIHNpemUpO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI3ODk9aXNjc2lfaWZfZ2V0X3N0YXRzKHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IG5sbXNnaGRyICpubGgpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjgyMS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjI4MjI6XHRcdG5saHN0YXQgPSBfX25sbXNnX3B1dChza2JzdGF0LCAwLCAwLCAwLFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjgyMy1cdFx0XHRcdCAgICAgIChsZW4gLSBzaXplb2YoKm5saHN0YXQpKSwgMCk7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM9Mjg1OD1pbnQgaXNjc2lfc2Vzc2lvbl9ldmVudChzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3Npb24sXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjg4MC1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjI4ODE6XHRubGggPSBfX25sbXNnX3B1dChza2IsIDAsIDAsIDAsIChsZW4gLSBzaXplb2YoKm5saCkpLCAwKTtcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI4ODItXHRldiA9IG5sbXNnX2RhdGEobmxoKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0zMjk4PWlzY3NpX2dldF9jaGFwKHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IG5sbXNnaGRyICpubGgpXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMzMzNy1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjMzMzg6XHRcdG5saGNoYXAgPSBfX25sbXNnX3B1dChza2JjaGFwLCAwLCAwLCAwLFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMzMzOS1cdFx0XHRcdCAgICAgIChsZW4gLSBzaXplb2YoKm5saGNoYXApKSwgMCk7XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM9MzcwMz1pc2NzaV9nZXRfaG9zdF9zdGF0cyhzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCBubG1zZ2hkciAqbmxoKVxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTM3NDEtXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzozNzQyOlx0XHRubGhob3N0X3N0YXRzID0gX19ubG1zZ19wdXQoc2tiaG9zdF9zdGF0cywgMCwgMCwgMCxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTM3NDMtXHRcdFx0XHQgICAgICAobGVuIC0gc2l6ZW9mKCpubGhob3N0X3N0YXRzKSksIDApO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0bGluay5oPTMxNz1zdHJ1Y3Qgbmxtc2doZHIgKlxuaW5jbHVkZS9saW51eC9uZXRsaW5rLmg6MzE4Ol9fbmxtc2dfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgbGVuLCBpbnQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9uZXRsaW5rLmgtMzE5LVxuLS1cbmluY2x1ZGUvbmV0L25ldGxpbmsuaD05OTU9c3RhdGljIGlubGluZSBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLS1cbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0xMDAwLVxuaW5jbHVkZS9uZXQvbmV0bGluay5oOjEwMDE6XHRyZXR1cm4gX19ubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgdHlwZSwgcGF5bG9hZCwgZmxhZ3MpO1xuaW5jbHVkZS9uZXQvbmV0bGluay5oLTEwMDItfVxuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0yMTQ0PXN0cnVjdCBubG1zZ2hkciAqXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjE0NTpfX25sbXNnX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgaW50IGxlbiwgaW50IGZsYWdzKVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTIxNDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE1NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgTmV0bGluayBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG5ldGxpbmsgbWVzc2FnZSBpcyBjb25zdHJ1Y3RlZCBhbmQgc2VudC4gTXkgZmlyc3QgbW92ZSBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgX19ubG1zZ19wdXRgIGluIGBuZXQvbmV0bGluay9hZl9uZXRsaW5rLmNgLiBUaGF0IGZ1bmN0aW9uIGlzIHRoZSBjb3JlIG9mIG1lc3NhZ2UgY3JlYXRpb24sIHNvIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgc3VzcGVjdCBpdCYjMzk7cyB3aGVyZSB0aGUgbWVzc2FnZSBoZWFkZXJzIGFuZCBwb3RlbnRpYWxseSB0aGUgcGF5bG9hZCBhcmUgYXNzZW1ibGVkLgoKTGV0JiMzOTtzIHF1aWNrbHkgbmF2aWdhdGUgdG8gYXJvdW5kIGxpbmUgMjE0NSBpbiB0aGUgZmlsZTsgdGhhdCBzaG91bGQgcHV0IG1lIGluIHRoZSBuZWlnaGJvcmhvb2Qgb2Ygd2hlcmUgSSYjMzk7ZCBleHBlY3QgdGhlIGNyaXRpY2FsIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljIHRvIGJlLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0bGluay9hZl9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNDA6XHRcdHNrX2Zvcl9lYWNoX2JvdW5kX3NhZmUoc2ssIHRtcCwgXHUwMDI2dGJsLVx1MDAzZW1jX2xpc3QpXG4yMTQxOlx0XHRcdG5ldGxpbmtfdXBkYXRlX3NvY2tldF9tYyhubGtfc2soc2spLCBncm91cCwgMCk7XG4yMTQyOlx0fVxuMjE0MzpcdFxuMjE0NDpcdHN0cnVjdCBubG1zZ2hkciAqXG4yMTQ1Olx0X19ubG1zZ19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBvcnRpZCwgdTMyIHNlcSwgaW50IHR5cGUsIGludCBsZW4sIGludCBmbGFncylcbjIxNDY6XHR7XG4yMTQ3Olx0XHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbjIxNDg6XHRcdGludCBzaXplID0gbmxtc2dfbXNnX3NpemUobGVuKTtcbjIxNDk6XHRcbjIxNTA6XHRcdG5saCA9IHNrYl9wdXQoc2tiLCBOTE1TR19BTElHTihzaXplKSk7XG4yMTUxOlx0XHRubGgtXHUwMDNlbmxtc2dfdHlwZSA9IHR5cGU7XG4yMTUyOlx0XHRubGgtXHUwMDNlbmxtc2dfbGVuID0gc2l6ZTtcbjIxNTM6XHRcdG5saC1cdTAwM2VubG1zZ19mbGFncyA9IGZsYWdzO1xuMjE1NDpcdFx0bmxoLVx1MDAzZW5sbXNnX3BpZCA9IHBvcnRpZDtcbjIxNTU6XHRcdG5saC1cdTAwM2VubG1zZ19zZXEgPSBzZXE7XG4yMTU2Olx0XHRpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpIHx8IE5MTVNHX0FMSUdOKHNpemUpIC0gc2l6ZSAhPSAwKVxuMjE1NzpcdFx0XHRtZW1zZXQobmxtc2dfZGF0YShubGgpICYjNDM7IGxlbiwgMCwgTkxNU0dfQUxJR04oc2l6ZSkgLSBzaXplKTtcbjIxNTg6XHRcdHJldHVybiBubGg7XG4yMTU5Olx0fVxuMjE2MDpcdEVYUE9SVF9TWU1CT0woX19ubG1zZ19wdXQpO1xuMjE2MTpcdFxuMjE2MjpcdHN0YXRpYyBzaXplX3RcbjIxNjM6XHRuZXRsaW5rX2Fja190bHZfbGVuKHN0cnVjdCBuZXRsaW5rX3NvY2sgKm5saywgaW50IGVycixcbjIxNjQ6XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NjgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIEkgZGVsdmUgaW50byB0aGlzIGNvZGUgc25pcHBldDoKCioqQW5hbHl6aW5nIE5ldHdvcmsgRGV2aWNlIEhhcmR3YXJlIEFkZHJlc3MgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IG11bHRpY2FzdCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgaW4gdGhlIG5ldHdvcmsgc3RhY2suIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBoYS0mZ3Q7YWRkcmAgYW5kIGBkZXYtJmd0O2FkZHJfbGVuYCB2YXJpYWJsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUgdG8gdGhlIGFjdHVhbCBoYXJkd2FyZSBhZGRyZXNzIHdpdGhpbiB0aGUgbXVsdGljYXN0IGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cmFjaW5nIHRoaXMgdGhyb3VnaCB0aGUgYHJ0bmxfZmlsbF9tY2FkZHJgIGZ1bmN0aW9uLgoKVGhlIGNvcmUgb2YgbXkgaW50ZXJlc3QgaGVyZSBpcyB0aGF0IGBubGFfcHV0YCBjYWxsOiBgbmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi0mZ3Q7YWRkcl9sZW4sIGhhLSZndDthZGRyKWAuIFRoaXMgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgbGluZSB3aGVyZSB0aGUgbXVsdGljYXN0IGhhcmR3YXJlIGFkZHJlc3MgKGBoYS0mZ3Q7YWRkcmApIGlzIGJlaW5nIHBhY2tlZCBpbnRvIHRoZSBOZXRsaW5rIG1lc3NhZ2UgYnVmZmVyIChgc2tiYCkgdW5kZXIgdGhlIGBJRkFfTVVMVElDQVNUYCBhdHRyaWJ1dGUuIFRoZSBgZGV2LSZndDthZGRyX2xlbmAgcGFydCBpcyBpbXBvcnRhbnQsIGFzIGl0IHNwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIHRoaXMgaGFyZHdhcmUgYWRkcmVzcyB3aGljaCBpcyBhbHNvIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgZGV2aWNlLgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzLCBJIG5lZWQgYSBxdWljayByZWZyZXNoZXIgb24gdGhlIHN0cnVjdHVyZSBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgIGluIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpYyBmaWVsZHMgZGVmaW5lZCBpbiB0aGF0IHN0cnVjdHVyZSB0byBjb25maXJtIHRoZSB1c2FnZSBhbmQgcHVycG9zZSBvZiB0aGUgYGhhLSZndDthZGRyYCBwb2ludGVyLiBJJiMzOTtsbCBjaGVjayBpdHMgZGVmaW5pdGlvbiB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGhhcmR3YXJlIGFkZHJlc3NlcyBhcmUgcmVwcmVzZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBuZXRkZXZfaHdfYWRkciBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMzU9c3RydWN0IHNrX2J1ZmY7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzNi1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM3OnN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOC1cdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzU4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBEZXZpY2UgSGVhZGVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIG5ldHdvcmsgZGV2aWNlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHNvIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDIzNy4gSSYjMzk7bSBob3BpbmcgdGhhdCBwYXJ0aWN1bGFyIHNlY3Rpb24gY29udGFpbnMgdGhlIGRlZmluaXRpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBJJiMzOTttIGxvb2tpbmcgZm9yIHJlZ2FyZGluZyB0aGUgYmFzaWMgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlIG9yIHBlcmhhcHMgdGhlIGluaXRpYWwgc2V0dXAgcm91dGluZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGVsZW1lbnRzIGxpa2UgZGF0YSBzdHJ1Y3R1cmVzIGZvciBxdWV1ZXMsIGludGVycnVwdCBtYW5hZ2VtZW50LCBvciBwb3RlbnRpYWxseSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbiBwb2ludGVycy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjM1Olx0c3RydWN0IHNrX2J1ZmY7XG4gMjM2Olx0XG4gMjM3Olx0c3RydWN0IG5ldGRldl9od19hZGRyIHtcbiAyMzg6XHRcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gMjM5Olx0XHRzdHJ1Y3QgcmJfbm9kZVx0XHRub2RlO1xuIDI0MDpcdFx0dW5zaWduZWQgY2hhclx0XHRhZGRyW01BWF9BRERSX0xFTl07XG4gMjQxOlx0XHR1bnNpZ25lZCBjaGFyXHRcdHR5cGU7XG4gMjQyOlx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX0xBTlx0XHQxXG4gMjQzOlx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX1NBTlx0XHQyXG4gMjQ0Olx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX1VOSUNBU1RcdDNcbiAyNDU6XHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNUXHQ0XG4gMjQ2Olx0XHRib29sXHRcdFx0Z2xvYmFsX3VzZTtcbiAyNDc6XHRcdGludFx0XHRcdHN5bmNfY250O1xuIDI0ODpcdFx0aW50XHRcdFx0cmVmY291bnQ7XG4gMjQ5Olx0XHRpbnRcdFx0XHRzeW5jZWQ7XG4gMjUwOlx0XHRzdHJ1Y3QgcmN1X2hlYWRcdFx0cmN1X2hlYWQ7XG4gMjUxOlx0fTtcbiAyNTI6XHRcbiAyNTM6XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCB7XG4gMjU0Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuIDI1NTpcdFx0aW50XHRcdFx0Y291bnQ7XG4gMjU2Olx0XG4gMjU3Olx0XHQvKiBBdXhpbGlhcnkgdHJlZSBmb3IgZmFzdGVyIGxvb2t1cCBvbiBhZGRpdGlvbiBhbmQgZGVsZXRpb24gKi9cbiAyNTg6XHRcdHN0cnVjdCByYl9yb290XHRcdHRyZWU7XG4gMjU5Olx0fTtcbiAyNjA6XHRcbiAyNjE6XHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobCkgKChsKS1cdTAwM2Vjb3VudClcbiAyNjI6XHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkobCkgKG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobCkgPT0gMClcbiAyNjM6XHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIGwpIFxcXG4gMjY0Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCBcdTAwMjYobCktXHUwMDNlbGlzdCwgbGlzdClcbiAyNjU6XHRcbiAyNjY6XHQjZGVmaW5lIG5ldGRldl91Y19jb3VudChkZXYpIG5ldGRldl9od19hZGRyX2xpc3RfY291bnQoXHUwMDI2KGRldiktXHUwMDNldWMpXG4gMjY3Olx0I2RlZmluZSBuZXRkZXZfdWNfZW1wdHkoZGV2KSBuZXRkZXZfaHdfYWRkcl9saXN0X2VtcHR5KFx1MDAyNihkZXYpLVx1MDAzZXVjKVxuIDI2ODpcdCNkZWZpbmUgbmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikgXFxcbiAyNjk6XHRcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIFx1MDAyNihkZXYpLVx1MDAzZXVjKVxuIDI3MDpcdCNkZWZpbmUgbmV0ZGV2X2Zvcl9lYWNoX3N5bmNlZF91Y19hZGRyKF9oYSwgX2RldikgXFxcbiAyNzE6XHRcdG5ldGRldl9mb3JfZWFjaF91Y19hZGRyKChfaGEpLCAoX2RldikpIFxcXG4gMjcyOlx0XHRcdGlmICgoX2hhKS1cdTAwM2VzeW5jX2NudClcbiAyNzM6XHRcbiAyNzQ6XHQjZGVmaW5lIG5ldGRldl9tY19jb3VudChkZXYpIG5ldGRldl9od19hZGRyX2xpc3RfY291bnQoXHUwMDI2KGRldiktXHUwMDNlbWMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjk0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBoYWAgRW50cnkgQWRkaXRpb24gaW4gdGhlIE5ldHdvcmsgQ29yZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRob3NlIGBoYWAgKGhhcmR3YXJlIGFkZHJlc3MsIHByZXN1bWFibHkpIGVudHJpZXMgYXJlIGJlaW5nIGFkZGVkIGluLCBzYXksIGBkZXZfbWNfYWRkYCBvciBzaW1pbGFyIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgcG9raW5nIGFyb3VuZCBpcyBpbiBgbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY2AuIFRoYXQgZmlsZSBsaWtlbHkgaGFuZGxlcyBhIGdvb2QgY2h1bmsgb2YgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBvcGVyYXRpb25zIGZvciBtYW5hZ2luZyB0aG9zZSBsaXN0cyBvZiBkZXZpY2UgYWRkcmVzc2VzLiBJdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIHRoZSBgaGFgIGluc2VydGlvbiBsb2dpYyBhbmQgaG9wZWZ1bGx5IHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBiZWhpbmQgaXQuIFRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19od19hZGRyX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTUzPV9faHdfYWRkcl9jcmVhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzQtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjc1OnN0YXRpYyBpbnQgX19od19hZGRyX2FkZF9leChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzYtXHRcdFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzMi1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMzOnN0YXRpYyBpbnQgX19od19hZGRyX2FkZChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM0LVx0XHRcdCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzYte1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMzc6XHRyZXR1cm4gX19od19hZGRyX2FkZF9leChsaXN0LCBhZGRyLCBhZGRyX2xlbiwgYWRkcl90eXBlLCBmYWxzZSwgZmFsc2UsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzOC1cdFx0XHRcdDAsIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTIxMj1zdGF0aWMgaW50IF9faHdfYWRkcl9zeW5jX29uZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdG9fbGlzdCxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxNy1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjE4Olx0ZXJyID0gX19od19hZGRyX2FkZF9leCh0b19saXN0LCBoYS1cdTAwM2VhZGRyLCBhZGRyX2xlbiwgaGEtXHUwMDNldHlwZSxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjE5LVx0XHRcdCAgICAgICBmYWxzZSwgdHJ1ZSwgaGEtXHUwMDNlc3luY19jbnQsIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY3OT1pbnQgZGV2X2FkZHJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjg4LVx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZihhZGRyKSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY4OTpcdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgc2l6ZW9mKGFkZHIpLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02OTAtXHRcdFx0ICAgIE5FVERFVl9IV19BRERSX1RfTEFOKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTcyOT1pbnQgZGV2X2FkZHJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MzgtXHRcdHJldHVybiBlcnI7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjczOTpcdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLCBhZGRyX3R5cGUpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03NDAtXHRpZiAoIWVycilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTc5Mj1pbnQgZGV2X3VjX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03OTYtXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Nzk3Olx0ZXJyID0gX19od19hZGRyX2FkZF9leChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzk4LVx0XHRcdCAgICAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QsIHRydWUsIGZhbHNlLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODE1PWludCBkZXZfdWNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04MTktXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODIwOlx0ZXJyID0gX19od19hZGRyX2FkZChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODIxLVx0XHRcdCAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9OTc3PWludCBkZXZfbWNfYWRkX2V4Y2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4MS1cdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5ODI6XHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFx1MDAyNmRldi1cdTAwM2VtYywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05ODMtXHRcdFx0ICAgICAgIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNULCB0cnVlLCBmYWxzZSxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk5Mj1zdGF0aWMgaW50IF9fZGV2X21jX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTk3LVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjk5ODpcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgoXHUwMDI2ZGV2LVx1MDAzZW1jLCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4sXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk5OS1cdFx0XHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIGdsb2JhbCwgZmFsc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODEzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgRGV2aWNlIEFkZHJlc3MgQ3JlYXRpb24gRnVuY3Rpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBuZXR3b3JrIGhhcmR3YXJlIGFkZHJlc3NlcyBhcmUgYmVpbmcgY3JlYXRlZCwgc28gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBsaWtlbHkgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBfX2h3X2FkZHJfY3JlYXRlYCB3aXRoaW4gYG5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNgLiBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIGhvbGRzIHRoZSBjb3JlIGxvZ2ljIGZvciBnZW5lcmF0aW5nIG9yIGFzc2lnbmluZyB0aG9zZSBNQUMgYW5kIG90aGVyIGhhcmR3YXJlIGFkZHJlc3Nlcy4gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSBjZW50cmFsIHRvIHRoZSBvdmVyYWxsIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHR9XG4gIDUxOlx0XG4gIDUyOlx0c3RhdGljIHN0cnVjdCBuZXRkZXZfaHdfYWRkcipcbiAgNTM6XHRfX2h3X2FkZHJfY3JlYXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcbiAgNTQ6XHRcdFx0IHVuc2lnbmVkIGNoYXIgYWRkcl90eXBlLCBib29sIGdsb2JhbCwgYm9vbCBzeW5jKVxuICA1NTpcdHtcbiAgNTY6XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4gIDU3Olx0XHRpbnQgYWxsb2Nfc2l6ZTtcbiAgNTg6XHRcbiAgNTk6XHRcdGFsbG9jX3NpemUgPSBzaXplb2YoKmhhKTtcbiAgNjA6XHRcdGlmIChhbGxvY19zaXplIFx1MDAzYyBMMV9DQUNIRV9CWVRFUylcbiAgNjE6XHRcdFx0YWxsb2Nfc2l6ZSA9IEwxX0NBQ0hFX0JZVEVTO1xuICA2MjpcdFx0aGEgPSBrbWFsbG9jKGFsbG9jX3NpemUsIEdGUF9BVE9NSUMpO1xuICA2MzpcdFx0aWYgKCFoYSlcbiAgNjQ6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDY1Olx0XHRtZW1jcHkoaGEtXHUwMDNlYWRkciwgYWRkciwgYWRkcl9sZW4pO1xuICA2NjpcdFx0aGEtXHUwMDNldHlwZSA9IGFkZHJfdHlwZTtcbiAgNjc6XHRcdGhhLVx1MDAzZXJlZmNvdW50ID0gMTtcbiAgNjg6XHRcdGhhLVx1MDAzZWdsb2JhbF91c2UgPSBnbG9iYWw7XG4gIDY5Olx0XHRoYS1cdTAwM2VzeW5jZWQgPSBzeW5jID8gMSA6IDA7XG4gIDcwOlx0XHRoYS1cdTAwM2VzeW5jX2NudCA9IDA7XG4gIDcxOlx0XG4gIDcyOlx0XHRyZXR1cm4gaGE7XG4gIDczOlx0fVxuICA3NDpcdFxuICA3NTpcdHN0YXRpYyBpbnQgX19od19hZGRyX2FkZF9leChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbiAgNzY6XHRcdFx0XHQgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxuICA3NzpcdFx0XHRcdCAgICB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYyxcbiAgNzg6XHRcdFx0XHQgICAgaW50IHN5bmNfY291bnQsIGJvb2wgZXhjbHVzaXZlKVxuICA3OTpcdHtcbiAgODA6XHRcdHN0cnVjdCByYl9ub2RlICoqaW5zX3BvaW50ID0gXHUwMDI2bGlzdC1cdTAwM2V0cmVlLnJiX25vZGUsICpwYXJlbnQgPSBOVUxMO1xuICA4MTpcdFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiAgODI6XHRcbiAgODM6XHRcdGlmIChhZGRyX2xlbiBcdTAwM2UgTUFYX0FERFJfTEVOKVxuICA4NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgODU6XHRcbiAgODY6XHRcdHdoaWxlICgqaW5zX3BvaW50KSB7XG4gIDg3Olx0XHRcdGludCBkaWZmO1xuICA4ODpcdFxuICA4OTpcdFx0XHRoYSA9IHJiX2VudHJ5KCppbnNfcG9pbnQsIHN0cnVjdCBuZXRkZXZfaHdfYWRkciwgbm9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTU5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IEFkZHJlc3MgRHVtcCBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgbXVsdGljYXN0IGFkZHJlc3MgaGFuZGxpbmcgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlc2UgYWRkcmVzc2VzIGFyZSBkdW1wZWQgYW5kIGhhbmRsZWQgd2l0aCBuZXRsaW5rLiBGaXJzdCwgSSBzZWUgdGhhdCBgX19od19hZGRyX2NyZWF0ZWAgZG9lcyBhIHN0cmFpZ2h0IGBtZW1jcHlgIGZyb20gdGhlIHByb3ZpZGVkIGFkZHJlc3MgKGBhZGRyYCkgdG8gdGhlIGhhcmR3YXJlIGFkZHJlc3Mgc3RydWN0dXJlIChgaGEtJmd0O2FkZHJgKS4gVGhlIGxlbmd0aCBpcyBkZXRlcm1pbmVkIGJ5IGBkZXYtJmd0O2FkZHJfbGVuYCwgd2hpY2ggbWFrZXMgc2Vuc2UuCgpUaGVuLCBsb29raW5nIGF0IGBydG5sX2ZpbGxfbWNhZGRyYCwgdGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGBubGFfcHV0YCBpcyB1c2VkIHRvIGluc2VydCB0aGlzIGhhcmR3YXJlIGFkZHJlc3MgaW50byB0aGUgbmV0bGluayBtZXNzYWdlIHVzaW5nIGBJRkFfTVVMVElDQVNUYC4gSXQgdXNlcyB0aGUgKmV4YWN0KiBzYW1lIGxlbmd0aCwgYGRldi0mZ3Q7YWRkcl9sZW5gLCB0aGF0IHdhcyB1c2VkIGR1cmluZyB0aGUgYWRkcmVzcyBjcmVhdGlvbi4gVGhhdCYjMzk7cyBnb29kLCBjb25zaXN0ZW50IGRhdGEgaGFuZGxpbmcgc28gZmFyLiBBbmQgaW1wb3J0YW50bHksIGBubGFfcHV0YCB0YWtlcyBjYXJlIG9mIHBhZGRpbmcgdGhlIGF0dHJpYnV0ZSB0byA0LWJ5dGUgYWxpZ25tZW50LCB3aGljaCBJIGV4cGVjdC4KCk5vdywgSSYjMzk7bSBleGFtaW5pbmcgYHJ0bmxfZHVtcF9tY2FkZHJgLCB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IGR1bXBpbmcgdGhlc2UgbXVsdGljYXN0IGFkZHJlc3Nlcy4gSSBjYW4gc2VlIGl0JiMzOTtzIHRha2luZyBhIGBzdHJ1Y3Qgc2tfYnVmZmAgZm9yIHRoZSBuZXRsaW5rIG1lc3NhZ2UsIGEgYHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrYCB0aGF0IGhvbGRzIHRoZSBzdGF0ZSwgYW5kIHBvdGVudGlhbGx5IGFuIGBpZmluZGV4YCB0byBmaWx0ZXIgYnkuIEl0IGFwcGVhcnMgaXQgd2lsbCBpdGVyYXRlIHRocm91Z2ggZWl0aGVyIGEgc3BlY2lmaWMgZGV2aWNlIG9yIGFsbCBkZXZpY2VzLCBkZXBlbmRpbmcgb24gdGhlIGBpZmluZGV4YCB2YWx1ZSBwYXNzZWQgaW4gdGhlIHJlcXVlc3QuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGluIHRoYXQgY2FsbGJhY2smIzM5O3MgY29udGV4dCwgYGNiLSZndDtjdHhgLiBUaGFua2Z1bGx5LCBpdCYjMzk7cyBtZW50aW9uZWQgdGhhdCB0aGUgbmV0bGluayBjb3JlIGl0c2VsZiB6ZXJvLWZpbGxzIGBjYi0mZ3Q7Y3R4YCBhdCB0aGUgc3RhcnQgb2YgYSBkdW1wLiBUaGF0JiMzOTtzIGEgcmVsaWFibGUgaW5pdGlhbGl6YXRpb24gYW5kIGdvb2QgdG8ga25vdy4gTm93IEkgbmVlZCB0byBjaGVjayBob3cgdGhlIGBmb3JfZWFjaF9uZXRkZXZfZHVtcGAgbWFjcm8gd29ya3MsIGFzIGl0IHNlZW1zIHRvIGJlIHRoZSBvbmUgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGRldmljZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvci4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGlzIG1hY3JvIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9yX2VhY2hfbmV0ZGV2X2R1bXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7LmNsYW5nLWZvcm1hdD03MT1Gb3JFYWNoTWFjcm9zOlxuLS1cbi5jbGFuZy1mb3JtYXQtMzQ2LSAgLSAmIzM5O2Zvcl9lYWNoX25ldGRldl9jb250aW51ZV9yZXZlcnNlJiMzOTtcbi5jbGFuZy1mb3JtYXQ6MzQ3OiAgLSAmIzM5O2Zvcl9lYWNoX25ldGRldl9kdW1wJiMzOTtcbi5jbGFuZy1mb3JtYXQtMzQ4LSAgLSAmIzM5O2Zvcl9lYWNoX25ldGRldl9mZWF0dXJlJiMzOTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTMzNzE9aW50IGNhbGxfbmV0ZGV2aWNlX25vdGlmaWVyc19pbmZvKHVuc2lnbmVkIGxvbmcgdmFsLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzM5My1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzM5NDojZGVmaW5lIGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZCwgaWZpbmRleClcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMzOTUtXHRmb3IgKDsgKGQgPSB4YV9maW5kKFx1MDAyNihuZXQpLVx1MDAzZWRldl9ieV9pbmRleCwgXHUwMDI2aWZpbmRleCxcdFx0XFxcbi0tXG5uZXQvODAyMXEvdmxhbnByb2MuYz0xNjY9c3RhdGljIHZvaWQgKnZsYW5fc2VxX2Zyb21faW5kZXgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuLS1cbm5ldC84MDIxcS92bGFucHJvYy5jLTE3MC1cbm5ldC84MDIxcS92bGFucHJvYy5jOjE3MTpcdGZvcl9lYWNoX25ldGRldl9kdW1wKHNlcV9maWxlX25ldChzZXEpLCBkZXYsIGlmaW5kZXgpIHtcbm5ldC84MDIxcS92bGFucHJvYy5jLTE3Mi1cdFx0aWYgKCFpc192bGFuX2RldihkZXYpKVxuLS1cbm5ldC9jb3JlL25ldC1wcm9jZnMuYz0xMD1zdGF0aWMgdm9pZCAqZGV2X3NlcV9mcm9tX2luZGV4KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbi0tXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMTQtXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmM6MTU6XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChzZXFfZmlsZV9uZXQoc2VxKSwgZGV2LCBpZmluZGV4KSB7XG5uZXQvY29yZS9uZXQtcHJvY2ZzLmMtMTYtXHRcdCpwb3MgPSBkZXYtXHUwMDNlaWZpbmRleDtcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jPTgxPW5ldGRldl9ubF9wYWdlX3Bvb2xfZ2V0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmMtOTgtXHRtdXRleF9sb2NrKFx1MDAyNnBhZ2VfcG9vbHNfbG9jayk7XG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jOjk5Olx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBuZXRkZXYsIHN0YXRlLVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmMtMTAwLVx0XHQvKiBFaXRoZXIgdGhlIHByb3ZpZGVkIGlmaW5kZXggZG9lc24mIzM5O3QgZXhpc3Qgb3IgZG9uZSBkdW1waW5nICovXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjU0ND1zdGF0aWMgaW50IHJ0bmxfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2MTYtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNjE3Olx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAodGd0X25ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjYxOC1cdFx0aWYgKGxpbmtfZHVtcF9maWx0ZXJlZChkZXYsIG1hc3Rlcl9pZHgsIGtpbmRfb3BzKSlcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NjU1PXN0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDY4NC1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ2ODU6XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ2ODYtXHRcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXHUwMDI2Y3R4LVx1MDAzZWFkZHJfaWR4LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTUyNzE9c3RhdGljIGludCBydG5sX2ZkYl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01MzAwLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTMwMTpcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTMwMi1cdFx0aWYgKGJycG9ydF9pZHggXHUwMDI2XHUwMDI2IChkZXYtXHUwMDNlaWZpbmRleCAhPSBicnBvcnRfaWR4KSlcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz02NjA0PXN0YXRpYyBpbnQgcnRubF9zdGF0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy02NjM1LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NjYzNjpcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjYzNy1cdFx0ZXJyID0gcnRubF9maWxsX3N0YXRzaW5mbyhza2IsIGRldiwgUlRNX05FV1NUQVRTLFxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYz02Mzg9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy02NDctXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NjQ4Olx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cdTAwM2Vwb3NfaWZpbmRleCkge1xubmV0L2V0aHRvb2wvbmV0bGluay5jLTY0OS1cdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTgwNz1zdGF0aWMgaW50IGV0aG5sX3BlcnBoeV9kdW1wX2FsbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtODE3LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjgxODpcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBldGhubF9jdHgtXHUwMDNlcG9zX2lmaW5kZXgpIHtcbm5ldC9ldGh0b29sL25ldGxpbmsuYy04MTktXHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuLS1cbm5ldC9ldGh0b29sL3R1bm5lbHMuYz0yNDE9aW50IGV0aG5sX3R1bm5lbF9pbmZvX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2V0aHRvb2wvdHVubmVscy5jLTI0OS1cdHJ0bmxfbG9jaygpO1xubmV0L2V0aHRvb2wvdHVubmVscy5jOjI1MDpcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2V0aHRvb2wvdHVubmVscy5jLTI1MS1cdFx0ZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jPTE5MzA9c3RhdGljIGludCBpbmV0X2R1bXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTE5NzQtXG5uZXQvaXB2NC9kZXZpbmV0LmM6MTk3NTpcdGZvcl9lYWNoX25ldGRldl9kdW1wKHRndF9uZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9pcHY0L2RldmluZXQuYy0xOTc2LVx0XHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jPTI0Mzg9c3RhdGljIGludCBpbmV0X25ldGNvbmZfZHVtcF9kZXZjb25mKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTI0NjYtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2NC9kZXZpbmV0LmM6MjQ2NzpcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2lwdjQvZGV2aW5ldC5jLTI0NjgtXHRcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTczOD1zdGF0aWMgaW50IGluZXQ2X25ldGNvbmZfZHVtcF9kZXZjb25mKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjYtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjc2NzpcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2lwdjYvYWRkcmNvbmYuYy03NjgtXHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz01NDM2PXN0YXRpYyBpbnQgaW5ldDZfZHVtcF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0ODAtXHRjYi1cdTAwM2VzZXEgPSBpbmV0Nl9iYXNlX3NlcSh0Z3RfbmV0KTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTQ4MTpcdGZvcl9lYWNoX25ldGRldl9kdW1wKHRndF9uZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ4Mi1cdFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTYxNzc9c3RhdGljIGludCBpbmV0Nl9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02MTk4LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2lwdjYvYWRkcmNvbmYuYzo2MTk5Olx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYyMDAtXHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG4tLVxubmV0L21jdHAvZGV2aWNlLmM9MTE0PXN0YXRpYyBpbnQgbWN0cF9kdW1wX2FkZHJpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbWN0cC9kZXZpY2UuYy0xMzQtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvbWN0cC9kZXZpY2UuYzoxMzU6XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgbWNiLVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9tY3RwL2RldmljZS5jLTEzNi1cdFx0aWYgKGlmaW5kZXggXHUwMDI2XHUwMDI2IGlmaW5kZXggIT0gZGV2LVx1MDAzZWlmaW5kZXgpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jPTEzNDg9c3RhdGljIGludCBtcGxzX25ldGNvbmZfZHVtcF9kZXZjb25mKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L21wbHMvYWZfbXBscy5jLTEzNzUtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvbXBscy9hZl9tcGxzLmM6MTM3NjpcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L21wbHMvYWZfbXBscy5jLTEzNzctXHRcdG1kZXYgPSBtcGxzX2Rldl9yY3UoZGV2KTtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTE5MTE9c3RhdGljIGludCB0Y19kdW1wX3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE5MzYtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjE5Mzc6XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMTkzOC1cdFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIyOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGR1bXBpdGAgRnVuY3Rpb24gSW1wbGVtZW50YXRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGhlcmUgZm9yIGltcGxlbWVudGluZyB0aGlzIHBhcnRpY3VsYXIgYGR1bXBpdGAgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgaG93IG90aGVycyBoYXZlIGRvbmUgaXQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgZXhpc3RpbmcgZXhhbXBsZXMgd2l0aGluIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGUgYHJ0bmxfc3RhdHNfZHVtcGAgb3IgYGluZXRfZHVtcF9hZGRyYCBpbXBsZW1lbnRhdGlvbnMgc2VlbSBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLCBsaWtlbHkgZGVhbGluZyB3aXRoIHNpbWlsYXIgbmV0d29yay1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBhbmQgaW50ZXJhY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaXRlcmF0ZSwgZm9ybWF0LCBhbmQgdWx0aW1hdGVseSBkdW1wIHRoZWlyIGluZm9ybWF0aW9uLgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIEkmIzM5O2xsIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGBydG5sX3N0YXRzX2R1bXBgIGZ1bmN0aW9uLCBwcm9iYWJseSBsb2NhdGVkIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgUlROTC1yZWxhdGVkIGNvZGUuIE15IGdvYWwgaXMgdG8gZXh0cmFjdCB0aGUgZ2VuZXJhbCBwYXR0ZXJuIGZvciBhIHdlbGwtZGVzaWduZWQga2VybmVsIGR1bXAgZnVuY3Rpb24uIFRoYXQgbGlrZWx5IG1lYW5zIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdywgdGhlIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhIGl0c2VsZi4gRnJvbSB0aGVyZSwgSSBjYW4gYXBwbHkgdGhvc2UgbGVzc29ucyB0byB0aGUgY3VycmVudCB0YXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NjAwOlx0XG42NjAxOlx0XHRyZXR1cm4gZXJyO1xuNjYwMjpcdH1cbjY2MDM6XHRcbjY2MDQ6XHRzdGF0aWMgaW50IHJ0bmxfc3RhdHNfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG42NjA1Olx0e1xuNjYwNjpcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2ItXHUwMDNlZXh0YWNrO1xuNjYwNzpcdFx0c3RydWN0IHJ0bmxfc3RhdHNfZHVtcF9maWx0ZXJzIGZpbHRlcnM7XG42NjA4Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuNjYwOTpcdFx0dW5zaWduZWQgaW50IGZsYWdzID0gTkxNX0ZfTVVMVEk7XG42NjEwOlx0XHRzdHJ1Y3QgaWZfc3RhdHNfbXNnICppZnNtO1xuNjYxMTpcdFx0c3RydWN0IHtcbjY2MTI6XHRcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuNjYxMzpcdFx0XHRpbnQgaWR4YXR0cjtcbjY2MTQ6XHRcdFx0aW50IHByaXZpZHg7XG42NjE1Olx0XHR9ICpjdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbjY2MTY6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG42NjE3Olx0XHRpbnQgZXJyO1xuNjYxODpcdFxuNjYxOTpcdFx0Y2ItXHUwMDNlc2VxID0gbmV0LVx1MDAzZWRldl9iYXNlX3NlcTtcbjY2MjA6XHRcbjY2MjE6XHRcdGVyciA9IHJ0bmxfdmFsaWRfc3RhdHNfcmVxKGNiLVx1MDAzZW5saCwgY2ItXHUwMDNlc3RyaWN0X2NoZWNrLCB0cnVlLCBleHRhY2spO1xuNjYyMjpcdFx0aWYgKGVycilcbjY2MjM6XHRcdFx0cmV0dXJuIGVycjtcbjY2MjQ6XHRcbjY2MjU6XHRcdGlmc20gPSBubG1zZ19kYXRhKGNiLVx1MDAzZW5saCk7XG42NjI2Olx0XHRpZiAoIWlmc20tXHUwMDNlZmlsdGVyX21hc2spIHtcbjY2Mjc6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGaWx0ZXIgbWFzayBtdXN0IGJlIHNldCBmb3Igc3RhdHMgZHVtcFwmIzM0Oyk7XG42NjI4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjYyOTpcdFx0fVxuNjYzMDpcdFxuNjYzMTpcdFx0ZXJyID0gcnRubF9zdGF0c19nZXRfcGFyc2UoY2ItXHUwMDNlbmxoLCBpZnNtLVx1MDAzZWZpbHRlcl9tYXNrLCBcdTAwMjZmaWx0ZXJzLFxuNjYzMjpcdFx0XHRcdFx0ICAgZXh0YWNrKTtcbjY2MzM6XHRcdGlmIChlcnIpXG42NjM0Olx0XHRcdHJldHVybiBlcnI7XG42NjM1Olx0XG42NjM2Olx0XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbjY2Mzc6XHRcdFx0ZXJyID0gcnRubF9maWxsX3N0YXRzaW5mbyhza2IsIGRldiwgUlRNX05FV1NUQVRTLFxuNjYzODpcdFx0XHRcdFx0XHQgIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG42NjM5Olx0XHRcdFx0XHRcdCAgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbjY2NDA6XHRcdFx0XHRcdFx0ICBmbGFncywgXHUwMDI2ZmlsdGVycyxcbjY2NDE6XHRcdFx0XHRcdFx0ICBcdTAwMjZjdHgtXHUwMDNlaWR4YXR0ciwgXHUwMDI2Y3R4LVx1MDAzZXByaXZpZHgsXG42NjQyOlx0XHRcdFx0XHRcdCAgZXh0YWNrKTtcbjY2NDM6XHRcdFx0LyogSWYgd2UgcmFuIG91dCBvZiByb29tIG9uIHRoZSBmaXJzdCBtZXNzYWdlLFxuNjY0NDpcdFx0XHQgKiB3ZSYjMzk7cmUgaW4gdHJvdWJsZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNjYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk11bHRpY2FzdCBBZGRyZXNzIER1bXAgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gY2hlY2tpbmcgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYC4gVGhpcyBmdW5jdGlvbiB2YWxpZGF0ZXMgdGhlIGluY29taW5nIGR1bXAgcmVxdWVzdCwgc3BlY2lmaWNhbGx5IGVuc3VyaW5nIHRoZSBoZWFkZXIgaXNuJiMzOTt0IG1lc3NlZCB1cCBhbmQgdGhlcmUmIzM5O3Mgbm8gZXh0cmFuZW91cyBkYXRhLiBJdCB2ZXJpZmllcyBgaWZhX3ByZWZpeGxlbmAsIGBpZmFfZmxhZ3NgLCBhbmQgYGlmYV9zY29wZWAgYXJlIHplcm8sIGFuZCB0aGF0IG5vIGFkZGl0aW9uYWwgYXR0cmlidXRlcyBhcmUgcHJlc2VudC4gVGhlIGludGVyZmFjZSBpbmRleCBpcyBleHRyYWN0ZWQgYW5kIHJldHVybmVkIHZpYSBhIHBvaW50ZXIuIE1ha2VzIHNlbnNlIOKAkyBjbGVhbiBhbmQgc3RyYWlnaHRmb3J3YXJkIHZhbGlkYXRpb24gYmVmb3JlIHByb2NlZWRpbmcuCgpOb3csIEkmIzM5O20gcmV2aXNpdGluZyBgcnRubF9maWxsX21jYWRkcmAuIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBtdWx0aWNhc3QgYWRkcmVzcyBpbmZvcm1hdGlvbiBpcyBhc3NlbWJsZWQgZm9yIHRoZSBuZXRsaW5rIG1lc3NhZ2UuIEkgc2VlIHRoZSB1c3VhbCBzdXNwZWN0czogYG5sbXNnX3B1dGAgYWxsb2NhdGVzIGFuZCB6ZXJvLXBhZHMgdGhlIG1lc3NhZ2UsIGFuZCB0aGVuIHRoZSBjcml0aWNhbCBmaWVsZHMgaW4gYGlmYWRkcm1zZ2AgYXJlIHBvcHVsYXRlZDogZmFtaWx5IChBRl9QQUNLRVQpLCBwcmVmaXggbGVuZ3RoICgwKSwgZmxhZ3MgKGJhc2VkIG9uIGBoYS0mZ3Q7Z2xvYmFsX3VzZWApLCBzY29wZSAobGluayksIGFuZCB0aGUgaW50ZXJmYWNlIGluZGV4LiBObyBnbGFyaW5nIGluaXRpYWxpemF0aW9uIGlzc3VlcyB0aGVyZS4gQWxsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBzZXQsIGFuZCB0aGUgc3RydWN0dXJlIGRvZXNuJiMzOTt0IGhhdmUgYW55IHBhZGRpbmcgaG9sZXMuIFRoZW4gd2UgaGF2ZSB0aGUgTmV0d29yayBMaW5rIEF0dHJpYnV0ZXMgKE5MQSkgc2VjdGlvbiBmb3IgdGhlIE1BQyBhZGRyZXNzIGFuZCB1c2VyIGNvdW50LCB3aGljaCBpcyBhcyBleHBlY3RlZC4gYG5sYV9wdXRgIGlzIHVzZWQgdG8gd3JpdGUgaW4gdGhlIE1BQyBhZGRyZXNzIHVzaW5nIGBkZXYtJmd0O2FkZHJfbGVuYCBhcyBhIGxlbmd0aCwgZW5zdXJpbmcgdGhhdCB3ZSByZWFkIHRoZSBhZGRyZXNzIGNvcnJlY3RseSBhbmQgYWRkIHRoZSBjb3JyZWN0IGFtb3VudCBvZiBwYWRkaW5nIGFmdGVyIGl0LgoKTmV4dCwgSSYjMzk7bSB2ZXJpZnlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuIFRoZSBoZWFkZXIgaXMgcHJvcGVybHkgemVyby1pbml0aWFsaXplZCwgYW5kIGFsbCBzdHJ1Y3QgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkLiBUaGUgbmV0d29yayBsaW5rIGF0dHJpYnV0ZXMgKE5MQSkgdXNlIGtub3duIGxlbmd0aHMgYW5kIHRoZSBjb3JyZWN0IGJ5dGUgc2l6ZXMuIEkmIzM5O20gYWxzbyBjb25maXJtaW5nIHRoYXQgdGhlIGBpZmluZGV4YCBpcyBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGluIGBydG5sX2R1bXBfbWNhZGRyYCBhbmQgdGhhdCB0aGUgYGN0eGAgc3RydWN0IGlzIGluaXRpYWxpemVkIGFzIHBhcnQgb2YgdGhlIG5ldGxpbmsgY29yZSYjMzk7cyBjYWxsYmFjayB6ZXJvaW5nIGJlZm9yZSB0aGUgZHVtcCBzdGFydC4gVGhlIHBvaW50ZXIgYCZhbXA7Y3R4LSZndDthZGRyX2lkeGAgaXMgdXNlZCwgdGhlIG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQsIHNvIG5vIGlzc3VlcyB0aGVyZS4KCkZpbmFsbHksIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBsb2NraW5nLiBJIGNhbiBzZWUgdGhhdCBgbmV0aWZfYWRkcl9sb2NrX2JoKGRldilgIGlzIGhlbGQgZHVyaW5nIGRldmljZSBpdGVyYXRpb24sIHdoaWNoIGlzIGNydWNpYWwgZm9yIGNvbmN1cnJlbmN5IHNhZmV0eS4gQWxzbywgYHJjdV9yZWFkX2xvY2soKWAgaXMgdXNlZCBkdXJpbmcgdGhlIGRldmljZSBpdGVyYXRpb24uIFRoaXMgc2hvdWxkIGJlIGVub3VnaCB0byBtYWludGFpbiBkYXRhIGludGVncml0eSBkdXJpbmcgdGhlIGR1bXAuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUuIENvdWxkIGBoYS0mZ3Q7YWRkcmAgY29udGFpbiB1bmluaXRpYWxpemVkIGJ5dGVzIGlmIGBkZXYtJmd0O2FkZHJfbGVuYCBpcyBzb21laG93IGNoYW5nZWQgYWZ0ZXIgdGhlIG11bHRpY2FzdCBhZGRyZXNzIGhhcyBiZWVuIGFkZGVkPyBOb3QgcmVhbGx5LCBhcyBgZGV2LSZndDthZGRyX2xlbmAgaXMgZml4ZWQgZm9yIGEgbmV0X2RldmljZS4gQ291bGQgdGhlIGBjdHhgIHN0cnVjdCBzaXplIGV4Y2VlZCBgc2l6ZW9mKGNiLSZndDtjdHgpYD8gSSYjMzk7bSBjaGVja2luZyB0aGUgYHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrYCBpbiBgaW5jbHVkZS9saW51eC9uZXRsaW5rLmhgIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBsYXJnZSBlbm91Z2guIEl0IHNlZW1zIGZpbmU7IG5vIG92ZXJmbG93IGlzc3VlcyBhcmUgdmlzaWJsZS4gTG9va3MgbGlrZSB3ZSBhcmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0bGluay5oPTI1MT1uZXRsaW5rX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGxpbmsuaC0yODAtXG5pbmNsdWRlL2xpbnV4L25ldGxpbmsuaDoyODE6c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sge1xuaW5jbHVkZS9saW51eC9uZXRsaW5rLmgtMjgyLVx0c3RydWN0IHNrX2J1ZmZcdFx0KnNrYjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIE5ldGxpbmsgSGVhZGVyIFN0cnVjdHVyZSoqCgpPa2F5LCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvcmUgTmV0bGluayBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L25ldGxpbmsuaGAgYW5kIHplcm8gaW4gb24gYXJvdW5kIGxpbmUgMjgxLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBmb3VuZGF0aW9uYWwgYHN0cnVjdCBubG1zZ2hkcmAgZGVmaW5pdGlvbiB0aGVyZSwgYW5kIHRoYXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgSSYjMzk7bGwgc2VlIHRoZSBiYXNpYyBtZXNzYWdlIGhlYWRlciBsYXlvdXQuIEkgd2FudCB0byBzZWUgaG93IHRoZSBsZW5ndGgsIHR5cGUsIGZsYWdzLCBzZXF1ZW5jZSBudW1iZXIsIGFuZCBQSUQgYXJlIGRlZmluZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBHb3R0YSBjb25maXJtIHRoZSB1c3VhbCBzdXNwZWN0cy4gR290dGEgY29uZmlybSB0aGF0IHRoZSBoZWFkZXIgc3RydWN0dXJlIGhhc24mIzM5O3QgY2hhbmdlZCBpbiBzb21lIHVuZXhwZWN0ZWQgd2F5IGluIG1vcmUgcmVjZW50IGtlcm5lbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRsaW5rLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFxuIDI4MTpcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrIHtcbiAyODI6XHRcdHN0cnVjdCBza19idWZmXHRcdCpza2I7XG4gMjgzOlx0XHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHJcdCpubGg7XG4gMjg0Olx0XHRpbnRcdFx0XHQoKmR1bXApKHN0cnVjdCBza19idWZmICogc2tiLFxuIDI4NTpcdFx0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuIDI4NjpcdFx0aW50XHRcdFx0KCpkb25lKShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuIDI4NzpcdFx0dm9pZFx0XHRcdCpkYXRhO1xuIDI4ODpcdFx0LyogdGhlIG1vZHVsZSB0aGF0IGR1bXAgZnVuY3Rpb24gYmVsb25nIHRvICovXG4gMjg5Olx0XHRzdHJ1Y3QgbW9kdWxlXHRcdCptb2R1bGU7XG4gMjkwOlx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrXHQqZXh0YWNrO1xuIDI5MTpcdFx0dTE2XHRcdFx0ZmFtaWx5O1xuIDI5MjpcdFx0dTE2XHRcdFx0YW5zd2VyX2ZsYWdzO1xuIDI5MzpcdFx0dTMyXHRcdFx0bWluX2R1bXBfYWxsb2M7XG4gMjk0Olx0XHR1bnNpZ25lZCBpbnRcdFx0cHJldl9zZXEsIHNlcTtcbiAyOTU6XHRcdGludFx0XHRcdGZsYWdzO1xuIDI5NjpcdFx0Ym9vbFx0XHRcdHN0cmljdF9jaGVjaztcbiAyOTc6XHRcdHVuaW9uIHtcbiAyOTg6XHRcdFx0dThcdFx0Y3R4W05FVExJTktfQ1RYX1NJWkVdO1xuIDI5OTpcdFxuIDMwMDpcdFx0XHQvKiBhcmdzIGlzIGRlcHJlY2F0ZWQuIENhc3QgYSBzdHJ1Y3Qgb3ZlciBjdHggaW5zdGVhZFxuIDMwMTpcdFx0XHQgKiBmb3IgcHJvcGVyIHR5cGUgc2FmZXR5LlxuIDMwMjpcdFx0XHQgKi9cbiAzMDM6XHRcdFx0bG9uZ1x0XHRhcmdzWzZdO1xuIDMwNDpcdFx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5OTAKCQkJCQkJCW91dHB1dDogMzI5CgkJCQkJCQl0aG91Z2h0czogMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBjdHhgIGlzIGJlaW5nIHRyZWF0ZWQgYXMgYE5FVExJTktfQ1RYX1NJWkVgICh3aGljaCBpcyB1c3VhbGx5IGVpdGhlciA0OCBvciA2NCBieXRlcyksIGJ1dCBgc2l6ZW9mKCpjdHgpYCBpcyBvbmx5IDE2IGJ5dGVzLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdCwgYnV0IEkgdGhpbmsgd2UgYXJlIG9rLgoKSSBjYW4gY29uZmlybSB0aGF0IGV2ZXJ5IGZpZWxkIGluIHRoZSBgaWZhZGRybXNnYCBzdHJ1Y3R1cmUgaXMgZXhwbGljaXRseSBhc3NpZ25lZCwgYW5kIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgZG9lc24mIzM5O3QgaGF2ZSBhbnkgaW50ZXJuYWwgcGFkZGluZy4gIFRoZSBgbmxhX3B1dGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCB0byBjb25zdHJ1Y3QgYXR0cmlidXRlcywgYW5kIGl0IHNhZmVseSB0YWtlcyBjYXJlIG9mIGFueSBuZWNlc3NhcnkgYWxpZ25tZW50IHBhZGRpbmcgYnkgemVyb2luZyBpdCBvdXQuIEZ1cnRoZXJtb3JlLCBgaGEtJmd0O2FkZHJgIGlzIGluaXRpYWxpemVkIHRvIHRoZSBjb3JyZWN0IGxlbmd0aCAoYGRldi0mZ3Q7YWRkcl9sZW5gKSwgd2hlbiB0aGUgaGFyZHdhcmUgYWRkcmVzcyBpcyByZWdpc3RlcmVkLiBJIGNhbiYjMzk7dCBzZWUgYW55IGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyBhbnkgdW5pbml0aWFsaXplZCBkYXRhIGludm9sdmVkIGluIGFueSBjb250cm9sIGZsb3cuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBvciBsb2NraW5nIGlzc3VlcywgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGVycm9ycywgYXJlIGV4cGVjdGVkIHRvIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGRldGVjdG9ycy4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7dmUgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGNoZWNrczoKCjEuICAqKktlcm5lbCBTdHJ1Y3R1cmVzIHRvIFVzZXIgU3BhY2U6KiogQXJlIHRoZXJlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG9yIHBhZGRpbmcgY291bGQgYmUgdW5pbml0aWFsaXplZD8gTm8sIHRoZSBgaWZhZGRybXNnYCBzdHJ1Y3QgaGFzIG5vIHBhZGRpbmcsIGFuZCBldmVyeSBmaWVsZCBpcyBhc3NpZ25lZC4gVGhlIGBubGFfcHV0YCBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIGFueSBwYWRkaW5nIGZvciBUTFZzLiBUaGUgYGhhLSZndDthZGRyYCBkYXRhIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLgoyLiAgKipCcmFuY2hpbmcgb24gVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogSXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOby4gYGlmaW5kZXhgIGlzIGNoZWNrZWQgb25seSBhZnRlciBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgIHN1Y2NlZWRzLiBgY3R4YCBpcyB6ZXJvIGluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIHN1YnN5c3RlbS4KMy4gICoqQ29tcGxleCBTdHJ1Y3R1cmVzOioqIElzIHRoZXJlIGFueXRoaW5nIHBhcnRpY3VsYXJseSBjb21wbGV4IHRoYXQgbWlnaHQgYmUgYSBjb25jZXJuPyBOby4KNC4gICoqQm91bmRzIENoZWNrcy9MZW5ndGggTWFuaXB1bGF0aW9uOioqIElzIGFueSBhY2Nlc3MgdG8gbWVtb3J5IGRlcGVuZGVudCBvbiBhIGJvdW5kcyBjaGVjayBvciBzaXplIGRldGVybWluZWQgYnkgYW4gdW5pbml0aWFsaXplZCB2YWx1ZT8gTm8uCgpJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBJJiMzOTttIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTiA9IGZhbHNlYCBhbmQgcHJvdmlkZSBhIGNsZWFyIGV4cGxhbmF0aW9uIHRvIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoQUZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QpIHZpYSBuZXRsaW5rLiBcblxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgXHUwMDI2IEluZm8tbGVha3MgKEtNU0FOKTogQWxsIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIGluIG5ldGxpbmsgcmVzcG9uc2VzIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBpZmFkZHJtc2dgIGhlYWRlciBoYXMgYSA4LWJ5dGUgbGF5b3V0IHdpdGhvdXQgaW50ZXJuYWwgcGFkZGluZyBob2xlcywgYW5kIGFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBzZXQuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBJRkFfTVVMVElDQVNUYCBhbmQgYElGQV9NQ19VU0VSU2ApIGFyZSBhZGRlZCB3aXRoIGBubGFfcHV0YCAvIGBubGFfcHV0X3UzMmAgd2hpY2ggemVybyBhbnkgdHJhaWxpbmcgYXR0cmlidXRlIGFsaWdubWVudCBwYWRkaW5nLiBBZGRyZXNzIGJ5dGVzIGluIGBoYS1cdTAwM2VhZGRyYCBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIGhhcmR3YXJlIGFkZHJlc3MgY3JlYXRpb24gdXAgdG8gYGRldi1cdTAwM2VhZGRyX2xlbmAuIENvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgZHVtcCBgY3R4YCBhbmQgYGlmaW5kZXhgKSBhcmUgZWl0aGVyIHplcm9lZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0gb3IgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbi0gTWVtb3J5IFNhZmV0eSBcdTAwMjYgQ29uY3VycmVuY3kgKEtBU0FOL0xPQ0tERVApOiBUaGUgY2hhbmdlcyBpbnZvbHZlIFJDVSBsb29rdXBzLCBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzLCBhbmQgZGV2aWNlIGFkZHJlc3MgbGlzdCBsb2NrcyAoYG5ldGlmX2FkZHJfbG9ja19iaGApLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBjb25maWd1cmF0aW9ucy5cblxuVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoQUZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1QpIHZpYSBuZXRsaW5rLiBcblxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgXHUwMDI2IEluZm8tbGVha3MgKEtNU0FOKTogQWxsIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIGluIG5ldGxpbmsgcmVzcG9uc2VzIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBpZmFkZHJtc2dgIGhlYWRlciBoYXMgYSA4LWJ5dGUgbGF5b3V0IHdpdGhvdXQgaW50ZXJuYWwgcGFkZGluZyBob2xlcywgYW5kIGFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBzZXQuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBJRkFfTVVMVElDQVNUYCBhbmQgYElGQV9NQ19VU0VSU2ApIGFyZSBhZGRlZCB3aXRoIGBubGFfcHV0YCAvIGBubGFfcHV0X3UzMmAgd2hpY2ggemVybyBhbnkgdHJhaWxpbmcgYXR0cmlidXRlIGFsaWdubWVudCBwYWRkaW5nLiBBZGRyZXNzIGJ5dGVzIGluIGBoYS1cdTAwM2VhZGRyYCBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIGhhcmR3YXJlIGFkZHJlc3MgY3JlYXRpb24gdXAgdG8gYGRldi1cdTAwM2VhZGRyX2xlbmAuIENvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgZHVtcCBgY3R4YCBhbmQgYGlmaW5kZXhgKSBhcmUgZWl0aGVyIHplcm9lZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0gb3IgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbi0gTWVtb3J5IFNhZmV0eSBcdTAwMjYgQ29uY3VycmVuY3kgKEtBU0FOL0xPQ0tERVApOiBUaGUgY2hhbmdlcyBpbnZvbHZlIFJDVSBsb29rdXBzLCBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzLCBhbmQgZGV2aWNlIGFkZHJlc3MgbGlzdCBsb2NrcyAoYG5ldGlmX2FkZHJfbG9ja19iaGApLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBjb25maWd1cmF0aW9ucy5cblxuVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzoxMC4wMjUwNDQ3NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODg4Mzg5MjI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyXCIsXG4gICAgXCJydG5sX2R1bXBfbWNhZGRyX2RldlwiLFxuICAgIFwicnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFcIixcbiAgICBcInJ0bmxfZmlsbF9tY2FkZHJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKEFGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgbmV0bGluay4gXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFxcdTAwMjYgSW5mby1sZWFrcyAoS01TQU4pOiBBbGwgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UgaW4gbmV0bGluayByZXNwb25zZXMgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBgc3RydWN0IGlmYWRkcm1zZ2AgaGVhZGVyIGhhcyBhIDgtYnl0ZSBsYXlvdXQgd2l0aG91dCBpbnRlcm5hbCBwYWRkaW5nIGhvbGVzLCBhbmQgYWxsIGZpZWxkcyAoYGlmYV9mYW1pbHlgLCBgaWZhX3ByZWZpeGxlbmAsIGBpZmFfZmxhZ3NgLCBgaWZhX3Njb3BlYCwgYGlmYV9pbmRleGApIGFyZSBleHBsaWNpdGx5IHNldC4gVGhlIG5ldGxpbmsgYXR0cmlidXRlcyAoYElGQV9NVUxUSUNBU1RgIGFuZCBgSUZBX01DX1VTRVJTYCkgYXJlIGFkZGVkIHdpdGggYG5sYV9wdXRgIC8gYG5sYV9wdXRfdTMyYCB3aGljaCB6ZXJvIGFueSB0cmFpbGluZyBhdHRyaWJ1dGUgYWxpZ25tZW50IHBhZGRpbmcuIEFkZHJlc3MgYnl0ZXMgaW4gYGhhLVxcdTAwM2VhZGRyYCBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIGhhcmR3YXJlIGFkZHJlc3MgY3JlYXRpb24gdXAgdG8gYGRldi1cXHUwMDNlYWRkcl9sZW5gLiBDb250cm9sIGZsb3cgdmFyaWFibGVzIChzdWNoIGFzIGR1bXAgYGN0eGAgYW5kIGBpZmluZGV4YCkgYXJlIGVpdGhlciB6ZXJvZWQgYnkgdGhlIG5ldGxpbmsgc3Vic3lzdGVtIG9yIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuLSBNZW1vcnkgU2FmZXR5IFxcdTAwMjYgQ29uY3VycmVuY3kgKEtBU0FOL0xPQ0tERVApOiBUaGUgY2hhbmdlcyBpbnZvbHZlIFJDVSBsb29rdXBzLCBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzLCBhbmQgZGV2aWNlIGFkZHJlc3MgbGlzdCBsb2NrcyAoYG5ldGlmX2FkZHJfbG9ja19iaGApLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBjb25maWd1cmF0aW9ucy5cXG5cXG5UaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnRyb2R1Y2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXRsaW5rIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgLyBSVE1fR0VUTVVMVElDQVNUKSBpbiBydG5ldGxpbmsuIFRoZSBuZXdseSBhZGRlZCBjb2RlIHZhbGlkYXRlcyB1c2VyIGR1bXAgcmVxdWVzdHMsIHRyYXZlcnNlcyBkZXZpY2UgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgdW5kZXIgbG9jaywgYW5kIHNlcmlhbGl6ZXMgcnRuZXRsaW5rIGF0dHJpYnV0ZXMsIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB2aWEgbmV0bGluayBzb2NrZXQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6MTAuMDI1MDUwODI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ0NTAwODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjlmMjI5YWM4ZTY2ZGI0NzQ3MWFlOTk3MDk1MTg5Yzg5NTQ2YTIzN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDAyOjM3OjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXFxuaW5kZXggMGVjYmQyNGM4OTBjNi4uMmEyMzEwY2IwZGYwMSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxcbkBAIC0xNjgsNyArMTY4LDEyIEBAIG9wZXJhdGlvbnM6XFxuICAgICAgICAgICBhdHRyaWJ1dGVzOiAqaWZhZGRyLWFsbFxcbiAgICAgLVxcbiAgICAgICBuYW1lOiBnZXRtdWx0aWNhc3RcXG4tICAgICAgZG9jOiBHZXQgLyBkdW1wIElQdjQvSVB2NiBtdWx0aWNhc3QgYWRkcmVzc2VzLlxcbisgICAgICBkb2M6IHxcXG4rICAgICAgICBHZXQgLyBkdW1wIG11bHRpY2FzdCBhZGRyZXNzZXMuIGlmYS1mYW1pbHkgc2VsZWN0cyB0aGUgYWRkcmVzc1xcbisgICAgICAgIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNiBmb3IgdGhlIElQIG11bHRpY2FzdCBncm91cHMgam9pbmVkIG9uXFxuKyAgICAgICAgYSBkZXZpY2UsIEFGX1BBQ0tFVCBmb3IgdGhlIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiB0aGVcXG4rICAgICAgICBkZXZpY2UgZmlsdGVyLiBMaW5rLWxheWVyIGVudHJpZXMgYWRkZWQgd2l0aCBTSU9DQURETVVMVEkgYXJlXFxuKyAgICAgICAgcmVwb3J0ZWQgd2l0aCB0aGUgcGVybWFuZW50IGZsYWcgc2V0LlxcbiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzXFxuICAgICAgIGZpeGVkLWhlYWRlcjogaWZhZGRybXNnXFxuICAgICAgIGRvOlxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXFxuaW5kZXggODFjNWE2MTA0ZGVhMS4uYjJmZWJkYjY5MTVlOCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jXFxuQEAgLTQ1NjYsNiArNDU2NiwxMzMgQEAgc3RhdGljIGludCBydG5sX2R1bXBfYWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuID8gOiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcnRubF9maWxsX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCxcXG4rXFx0XFx0XFx0ICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XFxuK1xcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbitcXG4rXFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSxcXG4rXFx0XFx0XFx0ZmxhZ3MpO1xcbitcXHRpZiAoIW5saClcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFxuK1xcdGlmbSA9IG5sbXNnX2RhdGEobmxoKTtcXG4rXFx0aWZtLVxcdTAwM2VpZmFfZmFtaWx5ID0gQUZfUEFDS0VUO1xcbitcXHRpZm0tXFx1MDAzZWlmYV9wcmVmaXhsZW4gPSAwO1xcbitcXHRpZm0tXFx1MDAzZWlmYV9mbGFncyA9IGhhLVxcdTAwM2VnbG9iYWxfdXNlID8gSUZBX0ZfUEVSTUFORU5UIDogMDtcXG4rXFx0aWZtLVxcdTAwM2VpZmFfc2NvcGUgPSBSVF9TQ09QRV9MSU5LO1xcbitcXHRpZm0tXFx1MDAzZWlmYV9pbmRleCA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4rXFxuK1xcdGlmIChubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVxcdTAwM2VhZGRyX2xlbiwgaGEtXFx1MDAzZWFkZHIpIHx8XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXFx1MDAzZXJlZmNvdW50KSkge1xcbitcXHRcXHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXHR9XFxuK1xcbitcXHRubG1zZ19lbmQoc2tiLCBubGgpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydG5sX2R1bXBfbWNhZGRyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XFxuK1xcdGludCBhZGRyX2lkeCA9IDA7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxuK1xcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHtcXG4rXFx0XFx0aWYgKGFkZHJfaWR4IFxcdTAwM2MgKnNfYWRkcl9pZHgpIHtcXG4rXFx0XFx0XFx0YWRkcl9pZHgrKztcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCBmbGFncyk7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0YWRkcl9pZHgrKztcXG4rXFx0fVxcbitcXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xcbitcXG4rXFx0KnNfYWRkcl9pZHggPSBlcnIgXFx1MDAzYyAwID8gYWRkcl9pZHggOiAwO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICBpbnQgKnBpZmluZGV4KVxcbit7XFxuK1xcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcXG4rXFxuK1xcdGlmbSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKmlmbSkpO1xcbitcXHRpZiAoIWlmbSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiSW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3RcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpZm0tXFx1MDAzZWlmYV9wcmVmaXhsZW4gfHwgaWZtLVxcdTAwM2VpZmFfZmxhZ3MgfHwgaWZtLVxcdTAwM2VpZmFfc2NvcGUpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgdmFsdWVzIGluIG11bHRpY2FzdCBkdW1wIGhlYWRlclxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG5sbXNnX2F0dHJsZW4obmxoLCBzaXplb2YoKmlmbSkpKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJJbnZhbGlkIGRhdGEgYWZ0ZXIgbXVsdGljYXN0IGR1bXAgaGVhZGVyXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHQqcGlmaW5kZXggPSBpZm0tXFx1MDAzZWlmYV9pbmRleDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbit7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbitcXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xcbitcXHRcXHRpbnQgYWRkcl9pZHg7XFxuK1xcdH0gKmN0eCA9ICh2b2lkICopY2ItXFx1MDAzZWN0eDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4rXFx0aW50IGlmaW5kZXg7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjYi1cXHUwMDNlbmxoLCBjYi1cXHUwMDNlZXh0YWNrLCBcXHUwMDI2aWZpbmRleCk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXG4rXFx0aWYgKGlmaW5kZXgpIHtcXG4rXFx0XFx0Y2ItXFx1MDAzZWFuc3dlcl9mbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xcbitcXHRcXHRmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xcbitcXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIGlmaW5kZXgpO1xcbitcXHRcXHRpZiAoIWRldikge1xcbitcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFxcdTAwMjZjdHgtXFx1MDAzZWFkZHJfaWR4LCBmbGFncyk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxuK1xcdFxcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXFx1MDAyNmN0eC1cXHUwMDNlYWRkcl9pZHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGZsYWdzKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK291dDpcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIHN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHUzMiBldmVudCwgZ2ZwX3QgZmxhZ3MsIGludCAqbmV3X25zaWQsXFxuQEAgLTcyNTEsNiArNzM3OCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XFxuIFxcdHsubXNndHlwZSA9IFJUTV9TRVRTVEFUUywgLmRvaXQgPSBydG5sX3N0YXRzX3NldH0sXFxuIFxcdHsubXNndHlwZSA9IFJUTV9ORVdMSU5LUFJPUCwgLmRvaXQgPSBydG5sX25ld2xpbmtwcm9wfSxcXG4gXFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxcbitcXHR7LnByb3RvY29sID0gUEZfUEFDS0VULCAubXNndHlwZSA9IFJUTV9HRVRNVUxUSUNBU1QsXFxuK1xcdCAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcbiBcXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxcbiBcXHQgLmR1bXBpdCA9IHJ0bmxfYnJpZGdlX2dldGxpbmt9LFxcbiBcXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9ERUxMSU5LLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbmluZGV4IDVjYzNlYmRjZjA4ZGUuLmNlYTYzNmYxMGFlYjYgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5AQCAtMSwxNyArMSwyMSBAQFxcbiAjIS91c3IvYmluL2VudiBweXRob24zXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gXFxuK2ltcG9ydCBlcnJub1xcbiBpbXBvcnQgc29ja2V0XFxuIGltcG9ydCBzdHJ1Y3RcXG4gaW1wb3J0IHRpbWVcXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcXG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxcbitmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9pbiwga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgZGVmZXJcXG4gXFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFxcXHhlMFxcXFx4MDBcXFxceDAwXFxcXHgwMSdcXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFxcXHhlZlxcXFx4MDFcXFxceDAxXFxcXHgwMSdcXG4gSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJ2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJylcXG4rRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCcwMTAwNWUwMDAwMDEnKVxcbitFVEhfVEVTVF9NVUxUSUNBU1RfU1RSID0gJzAxOjAwOjVlOjAxOjAxOjAxJ1xcbitFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgnOicsICcnKSlcXG4gXFxuIFxcbiBkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XFxuQEAgLTEwNSw2ICsxMDksNTIgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC1cXHUwMDNlIE5vbmU6XFxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXFxuIFxcbiBcXG4rZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxcbisgICAgZHVtcDogdGhlIGlmYS1pbmRleCBmaWx0ZXIsIG1jLXVzZXJzIGFuZCB0aGUgcGVybWFuZW50IGZsYWcuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XFxuKyAgICAgICAgZm9yIGlmbmFtZSBpbiAoXFxcImR1bW15MVxcXCIsIFxcXCJkdW1teTJcXFwiKTpcXG4rICAgICAgICAgICAgaXAoZlxcXCJsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXlcXFwiKVxcbisgICAgICAgICAgICBpcChmXFxcImxpbmsgc2V0IHtpZm5hbWV9IHVwXFxcIilcXG4rICAgICAgICBkZXZfaWR4ID0gc29ja2V0LmlmX25hbWV0b2luZGV4KFxcXCJkdW1teTFcXFwiKVxcbisgICAgICAgIGlwKGZcXFwibWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxXFxcIilcXG4rXFxuKyAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcXG4rICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxcbisgICAgICAgICAgICAgICAge1xcXCJpZmEtZmFtaWx5XFxcIjogc29ja2V0LkFGX1BBQ0tFVCwgXFxcImlmYS1pbmRleFxcXCI6IGRldl9pZHh9LFxcbisgICAgICAgICAgICAgICAgZHVtcD1UcnVlKVxcbisgICAgICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XFxuKyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcXG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxuKyAgICAgICAgICAgICAgICAgICAgXFxcImtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IEFGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcFxcXCIpXFxuKyAgICAgICAgICAgIHJhaXNlXFxuK1xcbisgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcXG4rICAgICAgICBrc2Z0X2VxKHthZGRyWydpZmEtaW5kZXgnXSBmb3IgYWRkciBpbiBhZGRyZXNzZXN9LCB7ZGV2X2lkeH0sXFxuKyAgICAgICAgICAgICAgICBcXFwiQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wIGlnbm9yZWQgaWZhLWluZGV4IGZpbHRlclxcXCIpXFxuK1xcbisgICAgICAgIGVudHJpZXMgPSB7YWRkclsnbXVsdGljYXN0J106IGFkZHIgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfVxcbitcXG4rICAgICAgICAjIEJyaW5naW5nIGFuIEV0aGVybmV0IGRldmljZSB1cCBqb2lucyAyMjQuMC4wLjEsIHdoaWNoIG1hcHNcXG4rICAgICAgICAjIHRvIDAxOjAwOjVlOjAwOjAwOjAxIGluIHRoZSBkZXZpY2UgbXVsdGljYXN0IGxpc3QuXFxuKyAgICAgICAga3NmdF9pbihFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCwgZW50cmllcyxcXG4rICAgICAgICAgICAgICAgIFxcXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgYWxsLWhvc3RzIGxpbmstbGF5ZXIgYWRkcmVzc1xcXCIpXFxuKyAgICAgICAga3NmdF9ub3RfaW4oJ3Blcm1hbmVudCcsXFxuKyAgICAgICAgICAgICAgICAgICAgZW50cmllc1tFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVF1bJ2lmYS1mbGFncyddLFxcbisgICAgICAgICAgICAgICAgICAgIFxcXCJwcm90b2NvbCBlbnRyeSBpcyBwZXJtYW5lbnRcXFwiKVxcbitcXG4rICAgICAgICBrc2Z0X2luKEVUSF9URVNUX01VTFRJQ0FTVCwgZW50cmllcyxcXG4rICAgICAgICAgICAgICAgIFxcXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcXFwiKVxcbisgICAgICAgIGtzZnRfZXEoZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWydtYy11c2VycyddLCAxLFxcbisgICAgICAgICAgICAgICAgXFxcInVuZXhwZWN0ZWQgbWMtdXNlcnMgZm9yIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzc1xcXCIpXFxuKyAgICAgICAga3NmdF9pbigncGVybWFuZW50JywgZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWydpZmEtZmxhZ3MnXSxcXG4rICAgICAgICAgICAgICAgIFxcXCJTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IHBlcm1hbmVudFxcXCIpXFxuK1xcbitcXG4gZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgXFxcIlxcXCJcXFwiXFxuICAgICBDb25maWd1cmUgYW4gaW50ZXJmYWNlIGFuZCBzZXQgaXB2NC1kZXZjb25mIHZhbHVlcyB0aHJvdWdoIG5ldGxpbmtcXG5AQCAtMzE1LDcgKzM2NSw4IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVxcdTAwM2UgTm9uZTpcXG4gXFxuIFxcbiBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjayxcXG4rICAgICAgICAgICAgICBpcHY0X2RldmNvbmZfbm90aWZ5LFxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjExLjQ3MDIxNDE5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjQyNjg5ODg1MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRubF9kdW1wX21jYWRkclwiLFxuICAgIFwicnRubF9kdW1wX21jYWRkcl9kZXZcIixcbiAgICBcInJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxXCIsXG4gICAgXCJydG5sX2ZpbGxfbWNhZGRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXRsaW5rIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgLyBSVE1fR0VUTVVMVElDQVNUKSBpbiBydG5ldGxpbmsuIFRoZSBuZXdseSBhZGRlZCBjb2RlIHZhbGlkYXRlcyB1c2VyIGR1bXAgcmVxdWVzdHMsIHRyYXZlcnNlcyBkZXZpY2UgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgdW5kZXIgbG9jaywgYW5kIHNlcmlhbGl6ZXMgcnRuZXRsaW5rIGF0dHJpYnV0ZXMsIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB2aWEgbmV0bGluayBzb2NrZXQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiOWYyMjlhYzhlNjZkYjQ3NDcxYWU5OTcwOTUxODljODk1NDZhMjM3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwMjozNzowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5pbmRleCAwZWNiZDI0Yzg5MGM2Li4yYTIzMTBjYjBkZjAxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuQEAgLTE2OCw3ICsxNjgsMTIgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgYXR0cmlidXRlczogKmlmYWRkci1hbGxcbiAgICAgLVxuICAgICAgIG5hbWU6IGdldG11bHRpY2FzdFxuLSAgICAgIGRvYzogR2V0IC8gZHVtcCBJUHY0L0lQdjYgbXVsdGljYXN0IGFkZHJlc3Nlcy5cbisgICAgICBkb2M6IHxcbisgICAgICAgIEdldCAvIGR1bXAgbXVsdGljYXN0IGFkZHJlc3Nlcy4gaWZhLWZhbWlseSBzZWxlY3RzIHRoZSBhZGRyZXNzXG4rICAgICAgICBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYgZm9yIHRoZSBJUCBtdWx0aWNhc3QgZ3JvdXBzIGpvaW5lZCBvblxuKyAgICAgICAgYSBkZXZpY2UsIEFGX1BBQ0tFVCBmb3IgdGhlIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiB0aGVcbisgICAgICAgIGRldmljZSBmaWx0ZXIuIExpbmstbGF5ZXIgZW50cmllcyBhZGRlZCB3aXRoIFNJT0NBRERNVUxUSSBhcmVcbisgICAgICAgIHJlcG9ydGVkIHdpdGggdGhlIHBlcm1hbmVudCBmbGFnIHNldC5cbiAgICAgICBhdHRyaWJ1dGUtc2V0OiBhZGRyLWF0dHJzXG4gICAgICAgZml4ZWQtaGVhZGVyOiBpZmFkZHJtc2dcbiAgICAgICBkbzpcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5pbmRleCA4MWM1YTYxMDRkZWExLi5iMmZlYmRiNjkxNWU4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5AQCAtNDU2Niw2ICs0NTY2LDEzMyBAQCBzdGF0aWMgaW50IHJ0bmxfZHVtcF9hbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0cmV0dXJuIHNrYi1cdTAwM2VsZW4gPyA6IHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEsIHUzMiBwb3J0aWQsXG4rXHRcdFx0ICAgIHUzMiBzZXEsIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XG4rXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcbitcbitcdG5saCA9IG5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBSVE1fR0VUTVVMVElDQVNULCBzaXplb2YoKmlmbSksXG4rXHRcdFx0ZmxhZ3MpO1xuK1x0aWYgKCFubGgpXG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXG4rXHRpZm0gPSBubG1zZ19kYXRhKG5saCk7XG4rXHRpZm0tXHUwMDNlaWZhX2ZhbWlseSA9IEFGX1BBQ0tFVDtcbitcdGlmbS1cdTAwM2VpZmFfcHJlZml4bGVuID0gMDtcbitcdGlmbS1cdTAwM2VpZmFfZmxhZ3MgPSBoYS1cdTAwM2VnbG9iYWxfdXNlID8gSUZBX0ZfUEVSTUFORU5UIDogMDtcbitcdGlmbS1cdTAwM2VpZmFfc2NvcGUgPSBSVF9TQ09QRV9MSU5LO1xuK1x0aWZtLVx1MDAzZWlmYV9pbmRleCA9IGRldi1cdTAwM2VpZmluZGV4O1xuK1xuK1x0aWYgKG5sYV9wdXQoc2tiLCBJRkFfTVVMVElDQVNULCBkZXYtXHUwMDNlYWRkcl9sZW4sIGhhLVx1MDAzZWFkZHIpIHx8XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLVx1MDAzZXJlZmNvdW50KSkge1xuK1x0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1x0fVxuK1xuK1x0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCAqc19hZGRyX2lkeCxcbitcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuK1x0aW50IGFkZHJfaWR4ID0gMDtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG4rXHRuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7XG4rXHRcdGlmIChhZGRyX2lkeCBcdTAwM2MgKnNfYWRkcl9pZHgpIHtcbitcdFx0XHRhZGRyX2lkeCsrO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGVyciA9IHJ0bmxfZmlsbF9tY2FkZHIoc2tiLCBkZXYsIGhhLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuK1x0XHRcdFx0ICAgICAgIGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzKTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbitcdFx0YWRkcl9pZHgrKztcbitcdH1cbitcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XG4rXG4rXHQqc19hZGRyX2lkeCA9IGVyciBcdTAwM2MgMCA/IGFkZHJfaWR4IDogMDtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4rXHRcdFx0XHQgICAgICBpbnQgKnBpZmluZGV4KVxuK3tcbitcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcbitcbitcdGlmbSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKmlmbSkpO1xuK1x0aWYgKCFpZm0pIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkludmFsaWQgaGVhZGVyIGZvciBtdWx0aWNhc3QgZHVtcCByZXF1ZXN0XCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChpZm0tXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXHUwMDNlaWZhX2ZsYWdzIHx8IGlmbS1cdTAwM2VpZmFfc2NvcGUpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkludmFsaWQgdmFsdWVzIGluIG11bHRpY2FzdCBkdW1wIGhlYWRlclwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAobmxtc2dfYXR0cmxlbihubGgsIHNpemVvZigqaWZtKSkpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkludmFsaWQgZGF0YSBhZnRlciBtdWx0aWNhc3QgZHVtcCBoZWFkZXJcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0KnBpZmluZGV4ID0gaWZtLVx1MDAzZWlmYV9pbmRleDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcbitcdHN0cnVjdCB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgaWZpbmRleDtcbitcdFx0aW50IGFkZHJfaWR4O1xuK1x0fSAqY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuK1x0aW50IGlmaW5kZXg7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY2ItXHUwMDNlbmxoLCBjYi1cdTAwM2VleHRhY2ssIFx1MDAyNmlmaW5kZXgpO1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcbitcdGlmIChpZmluZGV4KSB7XG4rXHRcdGNiLVx1MDAzZWFuc3dlcl9mbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuK1x0XHRmbGFncyB8PSBOTE1fRl9EVU1QX0ZJTFRFUkVEO1xuK1x0XHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIGlmaW5kZXgpO1xuK1x0XHRpZiAoIWRldikge1xuK1x0XHRcdGVyciA9IC1FTk9ERVY7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcdTAwMjZjdHgtXHUwMDNlYWRkcl9pZHgsIGZsYWdzKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbitcdFx0ZXJyID0gcnRubF9kdW1wX21jYWRkcl9kZXYoZGV2LCBza2IsIGNiLCBcdTAwMjZjdHgtXHUwMDNlYWRkcl9pZHgsXG4rXHRcdFx0XHRcdCAgIGZsYWdzKTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbitcdH1cbitvdXQ6XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuIHN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBjaGFuZ2UsXG4gXHRcdFx0XHQgICAgICAgdTMyIGV2ZW50LCBnZnBfdCBmbGFncywgaW50ICpuZXdfbnNpZCxcbkBAIC03MjUxLDYgKzczNzgsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPVxuIFx0ey5tc2d0eXBlID0gUlRNX1NFVFNUQVRTLCAuZG9pdCA9IHJ0bmxfc3RhdHNfc2V0fSxcbiBcdHsubXNndHlwZSA9IFJUTV9ORVdMSU5LUFJPUCwgLmRvaXQgPSBydG5sX25ld2xpbmtwcm9wfSxcbiBcdHsubXNndHlwZSA9IFJUTV9ERUxMSU5LUFJPUCwgLmRvaXQgPSBydG5sX2RlbGxpbmtwcm9wfSxcbitcdHsucHJvdG9jb2wgPSBQRl9QQUNLRVQsIC5tc2d0eXBlID0gUlRNX0dFVE1VTFRJQ0FTVCxcbitcdCAuZHVtcGl0ID0gcnRubF9kdW1wX21jYWRkciwgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxuIFx0ey5wcm90b2NvbCA9IFBGX0JSSURHRSwgLm1zZ3R5cGUgPSBSVE1fR0VUTElOSyxcbiBcdCAuZHVtcGl0ID0gcnRubF9icmlkZ2VfZ2V0bGlua30sXG4gXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9ERUxMSU5LLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5pbmRleCA1Y2MzZWJkY2YwOGRlLi5jZWE2MzZmMTBhZWI2IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuQEAgLTEsMTcgKzEsMjEgQEBcbiAjIS91c3IvYmluL2VudiBweXRob24zXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuK2ltcG9ydCBlcnJub1xuIGltcG9ydCBzb2NrZXRcbiBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4tZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X2luLCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxuK2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIE5sRXJyb3IsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIGxpYi5weSBpbXBvcnQgZGVmZXJcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJ1xceGUwXFx4MDBcXHgwMFxceDAxJ1xuIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJ1xceGVmXFx4MDFcXHgwMVxceDAxJ1xuIElQVjZfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCdmZjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMycpXG4rRVRIX0FMTF9IT1NUU19NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCcwMTAwNWUwMDAwMDEnKVxuK0VUSF9URVNUX01VTFRJQ0FTVF9TVFIgPSAnMDE6MDA6NWU6MDE6MDE6MDEnXG4rRVRIX1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleChFVEhfVEVTVF9NVUxUSUNBU1RfU1RSLnJlcGxhY2UoJzonLCAnJykpXG4gXG4gXG4gZGVmIF91c2Vyc19mb3IocnRubDogUnRubEFkZHJGYW1pbHksIGZhbWlseTogaW50LCBncnA6IGJ5dGVzLCBpZmluZGV4OiBpbnQpOlxuQEAgLTEwNSw2ICsxMDksNTIgQEAgZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC1cdTAwM2UgTm9uZTpcbiAgICAgICAgICAgICAgICAgczIuY2xvc2UoKVxuIFxuIFxuK2RlZiBkdW1wX21jYWRkcl9sMl9jaGVjaygpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiXG4rICAgIFZlcmlmeSBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgaW4gYW4gQUZfUEFDS0VUIFJUTV9HRVRNVUxUSUNBU1RcbisgICAgZHVtcDogdGhlIGlmYS1pbmRleCBmaWx0ZXIsIG1jLXVzZXJzIGFuZCB0aGUgcGVybWFuZW50IGZsYWcuXG4rICAgIFwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICBmb3IgaWZuYW1lIGluIChcImR1bW15MVwiLCBcImR1bW15MlwiKTpcbisgICAgICAgICAgICBpcChmXCJsaW5rIGFkZCBuYW1lIHtpZm5hbWV9IHR5cGUgZHVtbXlcIilcbisgICAgICAgICAgICBpcChmXCJsaW5rIHNldCB7aWZuYW1lfSB1cFwiKVxuKyAgICAgICAgZGV2X2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleChcImR1bW15MVwiKVxuKyAgICAgICAgaXAoZlwibWFkZHIgYWRkIHtFVEhfVEVTVF9NVUxUSUNBU1RfU1RSfSBkZXYgZHVtbXkxXCIpXG4rXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KFxuKyAgICAgICAgICAgICAgICB7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9QQUNLRVQsIFwiaWZhLWluZGV4XCI6IGRldl9pZHh9LFxuKyAgICAgICAgICAgICAgICBkdW1wPVRydWUpXG4rICAgICAgICBleGNlcHQgTmxFcnJvciBhcyBlOlxuKyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcbisgICAgICAgICAgICAgICAgICAgIFwia2VybmVsIGRvZXMgbm90IHN1cHBvcnQgQUZfUEFDS0VUIG11bHRpY2FzdCBkdW1wXCIpXG4rICAgICAgICAgICAgcmFpc2VcbitcbisgICAgICAgICMgZHVtbXkyIGhhcyBlbnRyaWVzIGFzIHdlbGwsIG9ubHkgZHVtbXkxIG1heSBiZSBsaXN0ZWRcbisgICAgICAgIGtzZnRfZXEoe2FkZHJbJ2lmYS1pbmRleCddIGZvciBhZGRyIGluIGFkZHJlc3Nlc30sIHtkZXZfaWR4fSxcbisgICAgICAgICAgICAgICAgXCJBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXAgaWdub3JlZCBpZmEtaW5kZXggZmlsdGVyXCIpXG4rXG4rICAgICAgICBlbnRyaWVzID0ge2FkZHJbJ211bHRpY2FzdCddOiBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3Nlc31cbitcbisgICAgICAgICMgQnJpbmdpbmcgYW4gRXRoZXJuZXQgZGV2aWNlIHVwIGpvaW5zIDIyNC4wLjAuMSwgd2hpY2ggbWFwc1xuKyAgICAgICAgIyB0byAwMTowMDo1ZTowMDowMDowMSBpbiB0aGUgZGV2aWNlIG11bHRpY2FzdCBsaXN0LlxuKyAgICAgICAga3NmdF9pbihFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCwgZW50cmllcyxcbisgICAgICAgICAgICAgICAgXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgYWxsLWhvc3RzIGxpbmstbGF5ZXIgYWRkcmVzc1wiKVxuKyAgICAgICAga3NmdF9ub3RfaW4oJ3Blcm1hbmVudCcsXG4rICAgICAgICAgICAgICAgICAgICBlbnRyaWVzW0VUSF9BTExfSE9TVFNfTVVMVElDQVNUXVsnaWZhLWZsYWdzJ10sXG4rICAgICAgICAgICAgICAgICAgICBcInByb3RvY29sIGVudHJ5IGlzIHBlcm1hbmVudFwiKVxuK1xuKyAgICAgICAga3NmdF9pbihFVEhfVEVTVF9NVUxUSUNBU1QsIGVudHJpZXMsXG4rICAgICAgICAgICAgICAgIFwiZHVtbXkxIGRvZXMgbm90IGhhdmUgdGhlIFNJT0NBRERNVUxUSSBhZGRyZXNzXCIpXG4rICAgICAgICBrc2Z0X2VxKGVudHJpZXNbRVRIX1RFU1RfTVVMVElDQVNUXVsnbWMtdXNlcnMnXSwgMSxcbisgICAgICAgICAgICAgICAgXCJ1bmV4cGVjdGVkIG1jLXVzZXJzIGZvciB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcIilcbisgICAgICAgIGtzZnRfaW4oJ3Blcm1hbmVudCcsIGVudHJpZXNbRVRIX1RFU1RfTVVMVElDQVNUXVsnaWZhLWZsYWdzJ10sXG4rICAgICAgICAgICAgICAgIFwiU0lPQ0FERE1VTFRJIGVudHJ5IGlzIG5vdCBwZXJtYW5lbnRcIilcbitcbitcbiBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAgXCJcIlwiXG4gICAgIENvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgYW5kIHNldCBpcHY0LWRldmNvbmYgdmFsdWVzIHRocm91Z2ggbmV0bGlua1xuQEAgLTMxNSw3ICszNjUsOCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbiBcbiBcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBkdW1wX21jYWRkcl9sMl9jaGVjayxcbisgICAgICAgICAgICAgIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjExLjQ3MDIxNzMxNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3OTYyNDExMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIHBhdGNoIGRvd24gYW5kIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZnV6emluZyBzdHJhdGVneS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkIGFuZCBpZiB0aGVyZSdzIGFueSB2YWx1ZSBpbiB0YXJnZXRpbmcgaXQuIFRoZSBkaWZmIHNob3dzIG1vZGlmaWNhdGlvbnMgdG8gYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxgLCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlgLiBUaGUgZG9jdW1lbnRhdGlvbiBjaGFuZ2UgaXMgZ2VuZXJhbGx5IGdvb2QgbmV3czsgaXQgbWVhbnMgc29tZW9uZSdzIHRoaW5raW5nIGFib3V0IHRoaXMgc3R1ZmYgZm9ybWFsbHkuIFRoZSBgcnRuZXRsaW5rLmNgIGNoYW5nZSBpcyB0aGUgcmVhbCBtZWF0LCB0aG91Z2guXG5cbkxvb2tpbmcgY2xvc2VyIGF0IGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIEkgc2VlIGEgY2x1c3RlciBvZiBuZXcgZnVuY3Rpb25zOiBgcnRubF9maWxsX21jYWRkcmAsIGBydG5sX2R1bXBfbWNhZGRyX2RldmAsIGBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcWAsIGFuZCBgcnRubF9kdW1wX21jYWRkcmAuICBBaCwgdGhpcyBsb29rcyBsaWtlIHRoZXkncmUgaW1wbGVtZW50aW5nIGEgbmV3IGZlYXR1cmU6IGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIHZpYSBydG5ldGxpbmsgKHVzaW5nIGBQRl9QQUNLRVRgIGFuZCBgUlRNX0dFVE1VTFRJQ0FTVGApLiBJbXBvcnRhbnRseSwgdGhlcmUncyBhIG5ldyBoYW5kbGVyIGluIGBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNgIGZvciB0aGlzIHNwZWNpZmljIG1lc3NhZ2UgdHlwZS5cblxuVGhlIGltbWVkaWF0ZSBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gYSB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnQgbGlrZSBzeXprYWxsZXI/ICBUaGUgYW5zd2VyLCB0aGFua2Z1bGx5LCBzZWVtcyB0byBiZSB5ZXMhIFJ0bmV0bGluayBpcyBwYXJ0IG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGV4cG9zZWQgdGhyb3VnaCBuZXRsaW5rIHNvY2tldHMgKGBBRl9ORVRMSU5LYCwgYE5FVExJTktfUk9VVEVgKS4gU3l6a2FsbGVyIGFscmVhZHkgdW5kZXJzdGFuZHMgbmV0bGluayBhbmQgY2FuIGdlbmVyYXRlIHJ0bmV0bGluayBtZXNzYWdlcy4gVGhpcyBpcyBnb29kIG5ld3M7IGl0IG1lYW5zIHdlIGNhbiBsaWtlbHkgaGl0IHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBuZWVkaW5nIHRvIGJ1aWxkIGFueSBjdXN0b20gZHJpdmVycyBvciBzZXQgdXAgZXhvdGljIGVudmlyb25tZW50cy5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhpcyByZXF1aXJlcyBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIHRvIGVuYWJsZS4gSSdsbCBzZWFyY2ggdGhyb3VnaCBLY29uZmlnIGFuZCB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCBmb3IgZWl0aGVyIFwicnRuZXRsaW5rLmNcIiBvciBcIk5FVExJTktfUk9VVEVcIiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBidWlsZC10aW1lIG9wdGlvbnMgd2UgbmVlZCB0byB3b3JyeSBhYm91dC4gVGhlIGdvYWwgaXMgdG8gbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlICptaW5pbXVtKiBjb25maWd1cmF0aW9ucyB0byBhY2hpZXZlIGNvbXBsZXRlIGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTAyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6MTYuMjY2NDYwMTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA4MjIwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRuZXRsaW5rLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzoxNi4zMzcyODUzNzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDUwNjkwNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFJUTkVUTElOSyBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgaXMgZGVmaW5pdGVseSBzaG93aW5nIHVwIGluIHRoZSBidWlsZCBhcyBwYXJ0IG9mIGBuZXQvY29yZWAsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgaXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIFNpbmNlIGBDT05GSUdfTkVUYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgdGhlc2UgZGF5cywgaXQgc2hvdWxkIGJlIGJha2VkIGluLiBUaGUgcXVlc3Rpb24gaXMsIGhvdyAqZXhhY3RseSogaXMgaXQgYmVpbmcgcHVsbGVkIGludG8gdGhlIG9iamVjdCBmaWxlcz8gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGF0IGVpdGhlciBgbmV0L0tjb25maWdgICh0byBzZWUgaWYgdGhlcmUncyBhbnkgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGJhc2VkIG9uIGEgc2VwYXJhdGUgS2NvbmZpZyBvcHRpb24pIG9yIHRoZSBgbmV0L2NvcmUvTWFrZWZpbGVgIGl0c2VsZi4gVGhhdCBNYWtlZmlsZSB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgZGlyZWN0IGFuc3dlciBhcyB0byB3aHkgYHJ0bmV0bGluay5jYCBpcyBiZWluZyBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUYCBpcyB0cnVlLiBMZXQncyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGxvb2sgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjE5LjM4Nzk3ODkxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDI0Mjk0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLVxcXFwkXFxcXChDT05GSUdfTkVUXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6MTkuNDU4MjI4Mjg1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2MTQ4NTExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBkZWxpdmVyZWQgYXMgaWYgaXQncyBjb21pbmcgZnJvbSBtZTpcblxuKipEaXZpbmcgaW50byB0aGUgYG5ldC9NYWtlZmlsZWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBzdGFydGVkLiBMZXQncyBzdGFydCBkaWdnaW5nIGludG8gdGhpcyBwcm9ibGVtLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBgbmV0L01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgYnVpbGQgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIG5ldHdvcmtpbmcgY29tcG9uZW50cy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uYWwgcnVsZXMsIHZhcmlhYmxlcywgYW5kIHBvdGVudGlhbGx5IGluY2x1ZGUgc3RhdGVtZW50cyB0aGF0IGdvdmVybiBob3cgdGhlc2UgbmV0d29yay1yZWxhdGVkIG9iamVjdHMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQuIEkgd2FudCB0byBxdWlja2x5IGdhaW4gYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG5ldHdvcmsgbW9kdWxlIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGFuZCwgaW4gdHVybiwgaG93IGl0J3Mgc3RydWN0dXJlZC4gU3BlY2lmaWNhbGx5LCBJJ20gaG9waW5nIHRvIGZpbmQgY2x1ZXMgYWJvdXQgd2hhdCB0YXJnZXRzIGFyZSBiZWluZyBidWlsdCwgd2hhdCBzb3VyY2UgZmlsZXMgYXJlIGludm9sdmVkLCBhbmQgYW55IHNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIG9yIGxpbmtlciBvcHRpb25zIHRoYXQgYXJlIGJlaW5nIGVtcGxveWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzY0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzoyMS4zMTk3MTY1NTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgbGludXggbmV0d29ya2luZy5cXG4gICA0OlxcdCNcXG4gICA1OlxcdCMgMiBTZXAgMjAwMCwgQ2hyaXN0b3BoIEhlbGx3aWcgXFx1MDAzY2hjaEBpbmZyYWRlYWQub3JnXFx1MDAzZVxcbiAgIDY6XFx0IyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy5cXG4gICA3OlxcdCNcXG4gICA4OlxcdFxcbiAgIDk6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBkZXZyZXMubyBzb2NrZXQubyBjb3JlL1xcbiAgMTA6XFx0XFxuICAxMTpcXHRvYmotJChDT05GSUdfQ09NUEFUKVxcdFxcdCs9IGNvbXBhdC5vXFxuICAxMjpcXHRcXG4gIDEzOlxcdCMgTExDIGhhcyB0byBiZSBsaW5rZWQgYmVmb3JlIHRoZSBmaWxlcyBpbiBuZXQvODAyL1xcbiAgMTQ6XFx0b2JqLSQoQ09ORklHX0xMQylcXHRcXHQrPSBsbGMvXFxuICAxNTpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IGV0aGVybmV0LyA4MDIvIHNjaGVkLyBuZXRsaW5rLyBicGYvIGV0aHRvb2wvXFxuICAxNjpcXHRvYmotJChDT05GSUdfTkVURklMVEVSKVxcdFxcdCs9IG5ldGZpbHRlci9cXG4gIDE3OlxcdG9iai0kKENPTkZJR19JTkVUKVxcdFxcdCs9IGlwdjQvXFxuICAxODpcXHRvYmotJChDT05GSUdfVExTKVxcdFxcdCs9IHRscy9cXG4gIDE5OlxcdG9iai0kKENPTkZJR19YRlJNKVxcdFxcdCs9IHhmcm0vXFxuICAyMDpcXHRvYmotJChDT05GSUdfVU5JWClcXHRcXHQrPSB1bml4L1xcbiAgMjE6XFx0b2JqLSQoQ09ORklHX0lORVRfUFNQKVxcdFxcdCs9IHBzcC9cXG4gIDIyOlxcdG9iai15XFx0XFx0XFx0XFx0Kz0gaXB2Ni9cXG4gIDIzOlxcdG9iai0kKENPTkZJR19QQUNLRVQpXFx0XFx0Kz0gcGFja2V0L1xcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX05FVF9LRVkpXFx0XFx0Kz0ga2V5L1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX0JSSURHRSlcXHRcXHQrPSBicmlkZ2UvXFxuICAyNjpcXHRvYmotJChDT05GSUdfTkVUX0RFVkxJTkspXFx0Kz0gZGV2bGluay9cXG4gIDI3OlxcdG9iai15XFx0XFx0XFx0XFx0Kz0gZHNhL1xcbiAgMjg6XFx0b2JqLSQoQ09ORklHX1gyNSlcXHRcXHQrPSB4MjUvXFxuICAyOTpcXHRvYmotJChDT05GSUdfTEFQQilcXHRcXHQrPSBsYXBiL1xcbiAgMzA6XFx0b2JqLSQoQ09ORklHX0NBTilcXHRcXHQrPSBjYW4vXFxuICAzMTpcXHRvYmotJChDT05GSUdfQlQpXFx0XFx0Kz0gYmx1ZXRvb3RoL1xcbiAgMzI6XFx0b2JqLSQoQ09ORklHX1NVTlJQQylcXHRcXHQrPSBzdW5ycGMvXFxuICAzMzpcXHRvYmotJChDT05GSUdfQUZfUlhSUEMpXFx0XFx0Kz0gcnhycGMvXFxuICAzNDpcXHRvYmotJChDT05GSUdfQUZfS0NNKVxcdFxcdCs9IGtjbS9cXG4gIDM1OlxcdG9iai0kKENPTkZJR19TVFJFQU1fUEFSU0VSKVxcdCs9IHN0cnBhcnNlci9cXG4gIDM2OlxcdG9iai0kKENPTkZJR19BVE0pXFx0XFx0Kz0gYXRtL1xcbiAgMzc6XFx0b2JqLSQoQ09ORklHX0wyVFApXFx0XFx0Kz0gbDJ0cC9cXG4gIDM4OlxcdG9iai0kKENPTkZJR19QSE9ORVQpXFx0XFx0Kz0gcGhvbmV0L1xcbiAgMzk6XFx0aWZuZXEgKCQoQ09ORklHX1ZMQU5fODAyMVEpLClcXG4gIDQwOlxcdG9iai15XFx0XFx0XFx0XFx0Kz0gODAyMXEvXFxuICA0MTpcXHRlbmRpZlxcbiAgNDI6XFx0b2JqLSQoQ09ORklHX0lQX1NDVFApXFx0XFx0Kz0gc2N0cC9cXG4gIDQzOlxcdG9iai0kKENPTkZJR19SRFMpXFx0XFx0Kz0gcmRzL1xcbiAgNDQ6XFx0b2JqLSQoQ09ORklHX1dJUkVMRVNTKVxcdFxcdCs9IHdpcmVsZXNzL1xcbiAgNDU6XFx0b2JqLSQoQ09ORklHX01BQzgwMjExKVxcdFxcdCs9IG1hYzgwMjExL1xcbiAgNDY6XFx0b2JqLSQoQ09ORklHX1RJUEMpXFx0XFx0Kz0gdGlwYy9cXG4gIDQ3OlxcdG9iai0kKENPTkZJR19ORVRMQUJFTClcXHRcXHQrPSBuZXRsYWJlbC9cXG4gIDQ4OlxcdG9iai0kKENPTkZJR19JVUNWKVxcdFxcdCs9IGl1Y3YvXFxuICA0OTpcXHRvYmotJChDT05GSUdfU01DKVxcdFxcdCs9IHNtYy9cXG4gIDUwOlxcdG9iai0kKENPTkZJR19SRktJTEwpXFx0XFx0Kz0gcmZraWxsL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzoyMS4zMTk3NzU3MjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA5NTIzNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIGNvbnNjaW91c25lc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jeSBvZiBgbmV0L2NvcmUvYCoqXG5cbkFscmlnaHQsIHNvIGBuZXQvY29yZS9gIGFsd2F5cyBzZWVtcyB0byBiZSBpbmNsdWRlZCB3aGVuIHRoZSBgQ09ORklHX05FVD15YCBmbGFnIGlzIHNldC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIHN0YW5kYXJkIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgcmlnaHQ/IEJ1dCB0aGUga2V5IHF1ZXN0aW9uIGZvciBtZSBpczogaXMgKmp1c3QqIGBDT05GSUdfTkVUYCBzdWZmaWNpZW50LCBvciBpcyB0aGVyZSBzb21lIG90aGVyLCBwb3RlbnRpYWxseSBvYnNjdXJlLCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0J3MgKmFsc28qIHJlcXVpcmVkIHRvIGVuc3VyZSBldmVyeXRoaW5nIHdvcmtzIGFzIGV4cGVjdGVkPyBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGVyZSBpc24ndCBzb21lIGNvcm5lciBjYXNlIEknbSBtaXNzaW5nLlxuXG5HaXZlbiB0aGF0IEkgYW0gZm9jdXNlZCBvbiBydG5ldGxpbmssIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgcmVsYXRlIHRvIGl0LiBJdOKAmXMgYWx3YXlzIGdvb2QgcHJhY3RpY2UgdG8gdmVyaWZ5IGFzc3VtcHRpb25zLlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgbmV0L0tjb25maWdgIGFuZCBzZWUgd2hhdCB0aGUgcmVsYXRpb25zaGlwcyBhcmUgYXJvdW5kIHRoZSBgTkVUYCBvcHRpb24uIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2sgYW5kIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgZGVwZW5kZW5jaWVzLiBJIGhhdmUgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaXMgbWlzc2VkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDY3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzoyMy43MjkzMDEwMzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTMyNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnLTUtXFxubmV0L0tjb25maWc6NjptZW51Y29uZmlnIE5FVFxcbm5ldC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiTmV0d29ya2luZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzoyMy43OTc4Mzk5MDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyNjk1MjYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENoYW5nZXMgdG8gTmV0d29yayBNdWx0aWNhc3QgQWRkcmVzcyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGBDT05GSUdfTkVUYCBpcyB0aGUgYmlnIHBpY3R1cmUgaGVyZSwgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBlbGVtZW50LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBuZXdseSBpbnRyb2R1Y2VkIGZ1bmN0aW9uczogYHJ0bmxfZHVtcF9tY2FkZHJgLCBgcnRubF9kdW1wX21jYWRkcl9kZXZgLCBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLCBhbmQgYHJ0bmxfZmlsbF9tY2FkZHJgLiBUaGV5IHNjcmVhbSBcIm11bHRpY2FzdCBhZGRyZXNzIGR1bXBcIiBhbmQgXCJtYW5hZ2VtZW50XCIgdG8gbWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGV4YWN0IHJvbGVzIGFuZCBob3cgdGhleSBmaXQgaW50byB0aGUgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcGVyZm9ybSBhIHN5bWJvbCBzZWFyY2ggYW5kIGNhbGxlciBhbmFseXNpcyB0byBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIGludGVyYWN0aW5nIHdpdGggdGhlc2UgZnVuY3Rpb25zLCB1bmNvdmVyaW5nIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGFyZWFzIG9mIGltcGFjdC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gYG5ldC9jb3JlL3J0bmV0bGluay5jYCBhbmQgdGhvcm91Z2hseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIGNsZWFuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODM0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjI1LjcyNDc5NTM0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDc2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDU2MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDU2MDpcXHRcXHRcXHRyZXQgPSBkdW1waXQoc2tiLCBjYik7XFxuNDU2MTpcXHRcXHRcXHRpZiAocmV0KVxcbjQ1NjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDU2MzpcXHRcXHR9XFxuNDU2NDpcXHRcXHRjYi1cXHUwMDNlZmFtaWx5ID0gaWR4O1xcbjQ1NjU6XFx0XFxuNDU2NjpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW4gPyA6IHJldDtcXG40NTY3OlxcdH1cXG40NTY4OlxcdFxcbjQ1Njk6XFx0c3RhdGljIGludCBydG5sX2ZpbGxfbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuNDU3MDpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCxcXG40NTcxOlxcdFxcdFxcdFxcdCAgICB1MzIgc2VxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuNDU3MjpcXHR7XFxuNDU3MzpcXHRcXHRzdHJ1Y3QgaWZhZGRybXNnICppZm07XFxuNDU3NDpcXHRcXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG40NTc1OlxcdFxcbjQ1NzY6XFx0XFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSxcXG40NTc3OlxcdFxcdFxcdFxcdGZsYWdzKTtcXG40NTc4OlxcdFxcdGlmICghbmxoKVxcbjQ1Nzk6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG40NTgwOlxcdFxcbjQ1ODE6XFx0XFx0aWZtID0gbmxtc2dfZGF0YShubGgpO1xcbjQ1ODI6XFx0XFx0aWZtLVxcdTAwM2VpZmFfZmFtaWx5ID0gQUZfUEFDS0VUO1xcbjQ1ODM6XFx0XFx0aWZtLVxcdTAwM2VpZmFfcHJlZml4bGVuID0gMDtcXG40NTg0OlxcdFxcdGlmbS1cXHUwMDNlaWZhX2ZsYWdzID0gaGEtXFx1MDAzZWdsb2JhbF91c2UgPyBJRkFfRl9QRVJNQU5FTlQgOiAwO1xcbjQ1ODU6XFx0XFx0aWZtLVxcdTAwM2VpZmFfc2NvcGUgPSBSVF9TQ09QRV9MSU5LO1xcbjQ1ODY6XFx0XFx0aWZtLVxcdTAwM2VpZmFfaW5kZXggPSBkZXYtXFx1MDAzZWlmaW5kZXg7XFxuNDU4NzpcXHRcXG40NTg4OlxcdFxcdGlmIChubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVxcdTAwM2VhZGRyX2xlbiwgaGEtXFx1MDAzZWFkZHIpIHx8XFxuNDU4OTpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIGhhLVxcdTAwM2VyZWZjb3VudCkpIHtcXG40NTkwOlxcdFxcdFxcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XFxuNDU5MTpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbjQ1OTI6XFx0XFx0fVxcbjQ1OTM6XFx0XFxuNDU5NDpcXHRcXHRubG1zZ19lbmQoc2tiLCBubGgpO1xcbjQ1OTU6XFx0XFx0cmV0dXJuIDA7XFxuNDU5NjpcXHR9XFxuNDU5NzpcXHRcXG40NTk4OlxcdHN0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG40NTk5OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50ICpzX2FkZHJfaWR4LFxcbjQ2MDA6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzKVxcbjQ2MDE6XFx0e1xcbjQ2MDI6XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG40NjAzOlxcdFxcdGludCBhZGRyX2lkeCA9IDA7XFxuNDYwNDpcXHRcXHRpbnQgZXJyID0gMDtcXG40NjA1OlxcdFxcbjQ2MDY6XFx0XFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxuNDYwNzpcXHRcXHRuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7XFxuNDYwODpcXHRcXHRcXHRpZiAoYWRkcl9pZHggXFx1MDAzYyAqc19hZGRyX2lkeCkge1xcbjQ2MDk6XFx0XFx0XFx0XFx0YWRkcl9pZHgrKztcXG40NjEwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQ2MTE6XFx0XFx0XFx0fVxcbjQ2MTI6XFx0XFx0XFx0ZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbjQ2MTM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpO1xcbjQ2MTQ6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuNDYxNTpcXHRcXHRcXHRcXHRicmVhaztcXG40NjE2OlxcdFxcdFxcdGFkZHJfaWR4Kys7XFxuNDYxNzpcXHRcXHR9XFxuNDYxODpcXHRcXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xcbjQ2MTk6XFx0XFxuNDYyMDpcXHRcXHQqc19hZGRyX2lkeCA9IGVyciBcXHUwMDNjIDAgPyBhZGRyX2lkeCA6IDA7XFxuNDYyMTpcXHRcXG40NjIyOlxcdFxcdHJldHVybiBlcnI7XFxuNDYyMzpcXHR9XFxuNDYyNDpcXHRcXG40NjI1OlxcdHN0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuNDYyNjpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuNDYyNzpcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgKnBpZmluZGV4KVxcbjQ2Mjg6XFx0e1xcbjQ2Mjk6XFx0XFx0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xcbjQ2MzA6XFx0XFxuNDYzMTpcXHRcXHRpZm0gPSBubG1zZ19wYXlsb2FkKG5saCwgc2l6ZW9mKCppZm0pKTtcXG40NjMyOlxcdFxcdGlmICghaWZtKSB7XFxuNDYzMzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuNDYzNDpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgaGVhZGVyIGZvciBtdWx0aWNhc3QgZHVtcCByZXF1ZXN0XFxcIik7XFxuNDYzNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NjM2OlxcdFxcdH1cXG40NjM3OlxcdFxcbjQ2Mzg6XFx0XFx0aWYgKGlmbS1cXHUwMDNlaWZhX3ByZWZpeGxlbiB8fCBpZm0tXFx1MDAzZWlmYV9mbGFncyB8fCBpZm0tXFx1MDAzZWlmYV9zY29wZSkge1xcbjQ2Mzk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzoyNS43MjUxNDQ0MzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2MzY5NTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBJIGFtIHRoZSBleHBlcnQgdGhpbmtpbmcgaXQ6XG5cbioqRm9jdXNpbmcgb24gYSBDcnVjaWFsIFNlY3Rpb24qKlxuXG5SaWdodCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYSBzcGVjaWZpYyByYW5nZSBvZiBsaW5lcyBpbiB0aGlzIGFuYWx5c2lzLiBMaW5lcyA0NjQwLTQ3MDAuLi4gdGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgZnVydGhlciBzY3J1dGlueS4gQmFzZWQgb24gdGhlIGluaXRpYWwgc2NhbiwgdGhpcyBibG9jayBpcyB3aGVyZSB0aGUgYW5vbWFseSBpcyBtb3N0IGxpa2VseSBsb2NhdGVkLCB0aGF0IHdpbGwgYmUgd2hlcmUgSSBiZWdpbiBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjI4LjQ4ODg0MjY3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzM2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDY0MCxcbiAgXCJMaW5lQ291bnRcIjogNjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDY0MDpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkludmFsaWQgdmFsdWVzIGluIG11bHRpY2FzdCBkdW1wIGhlYWRlclxcXCIpO1xcbjQ2NDE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDY0MjpcXHRcXHR9XFxuNDY0MzpcXHRcXG40NjQ0OlxcdFxcdGlmIChubG1zZ19hdHRybGVuKG5saCwgc2l6ZW9mKCppZm0pKSkge1xcbjQ2NDU6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjQ2NDY6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJJbnZhbGlkIGRhdGEgYWZ0ZXIgbXVsdGljYXN0IGR1bXAgaGVhZGVyXFxcIik7XFxuNDY0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NjQ4OlxcdFxcdH1cXG40NjQ5OlxcdFxcbjQ2NTA6XFx0XFx0KnBpZmluZGV4ID0gaWZtLVxcdTAwM2VpZmFfaW5kZXg7XFxuNDY1MTpcXHRcXG40NjUyOlxcdFxcdHJldHVybiAwO1xcbjQ2NTM6XFx0fVxcbjQ2NTQ6XFx0XFxuNDY1NTpcXHRzdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbjQ2NTY6XFx0e1xcbjQ2NTc6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuNDY1ODpcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBOTE1fRl9NVUxUSTtcXG40NjU5OlxcdFxcdHN0cnVjdCB7XFxuNDY2MDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGlmaW5kZXg7XFxuNDY2MTpcXHRcXHRcXHRpbnQgYWRkcl9pZHg7XFxuNDY2MjpcXHRcXHR9ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxuNDY2MzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbjQ2NjQ6XFx0XFx0aW50IGlmaW5kZXg7XFxuNDY2NTpcXHRcXHRpbnQgZXJyO1xcbjQ2NjY6XFx0XFxuNDY2NzpcXHRcXHRlcnIgPSBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjYi1cXHUwMDNlbmxoLCBjYi1cXHUwMDNlZXh0YWNrLCBcXHUwMDI2aWZpbmRleCk7XFxuNDY2ODpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG40NjY5OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNDY3MDpcXHRcXG40NjcxOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG40NjcyOlxcdFxcbjQ2NzM6XFx0XFx0aWYgKGlmaW5kZXgpIHtcXG40Njc0OlxcdFxcdFxcdGNiLVxcdTAwM2VhbnN3ZXJfZmxhZ3MgfD0gTkxNX0ZfRFVNUF9GSUxURVJFRDtcXG40Njc1OlxcdFxcdFxcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XFxuNDY3NjpcXHRcXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIGlmaW5kZXgpO1xcbjQ2Nzc6XFx0XFx0XFx0aWYgKCFkZXYpIHtcXG40Njc4OlxcdFxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuNDY3OTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG40NjgwOlxcdFxcdFxcdH1cXG40NjgxOlxcdFxcdFxcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXFx1MDAyNmN0eC1cXHUwMDNlYWRkcl9pZHgsIGZsYWdzKTtcXG40NjgyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjQ2ODM6XFx0XFx0fVxcbjQ2ODQ6XFx0XFxuNDY4NTpcXHRcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxuNDY4NjpcXHRcXHRcXHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFxcdTAwMjZjdHgtXFx1MDAzZWFkZHJfaWR4LFxcbjQ2ODc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmxhZ3MpO1xcbjQ2ODg6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuNDY4OTpcXHRcXHRcXHRcXHRicmVhaztcXG40NjkwOlxcdFxcdH1cXG40NjkxOlxcdG91dDpcXG40NjkyOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjQ2OTM6XFx0XFx0cmV0dXJuIGVycjtcXG40Njk0OlxcdH1cXG40Njk1OlxcdFxcbjQ2OTY6XFx0c3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuNDY5NzpcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcXG40Njk4OlxcdFxcdFxcdFxcdFxcdCAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLFxcbjQ2OTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGludCBuZXdfaWZpbmRleCwgdTMyIHBvcnRpZCxcXG40NzAwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saClcXG40NzAxOlxcdHtcXG40NzAyOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcXG40NzAzOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuNDcwNDpcXHRcXHRpbnQgZXJyID0gLUVOT0JVRlM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjI4LjQ4OTIxNzc1N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTEwOTQ2OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBSdG5ldGxpbmsgUmVnaXN0cmF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgYHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc2AgZ2V0IGhvb2tlZCB1cCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgcm91dGluZyBtZXNzYWdlcyBhcmUgbWFuYWdlZCBpbiB0aGUga2VybmVsLiBMZXQncyBzZWUuLi4gdGhlIHN0YXJ0aW5nIHBvaW50IHNlZW1zIHRvIGJlIGBydG5ldGxpbmtfaW5pdCgpYC4gQWhhLCB0aGVyZSBpdCBpcyEgYHJ0bmxfcmVnaXN0ZXJfbWFueShydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnMpO2AgVGhhdCdzIHRoZSBrZXkgbGluZS4gU28gYHJ0bmxfcmVnaXN0ZXJfbWFueWAgaXMgbGlrZWx5IHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyBhbGwgdGhlIGhhbmRsZXIgZnVuY3Rpb25zIHdpdGhpbiBgcnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzYC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgcnRuZXRsaW5rX2luaXRgIHdvcmtzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUwMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6MzAuNDAwMTY2OTI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTY2OTQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmM9NzM1Nj1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHJ0bmV0bGlua19uZXRfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNzM2MC1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo3MzYxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MzYyLVxcdHsubXNndHlwZSA9IFJUTV9ORVdMSU5LLCAuZG9pdCA9IHJ0bmxfbmV3bGluayxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTc0MDE9dm9pZCBfX2luaXQgcnRuZXRsaW5rX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTc0MDctXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NzQwODpcXHRydG5sX3JlZ2lzdGVyX21hbnkocnRuZXRsaW5rX3J0bmxfbXNnX2hhbmRsZXJzKTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03NDA5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzozMC40NTE4NDAyNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjA5MTEzODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IE11bHRpY2FzdCBBZGRyZXNzIER1bXBpbmcgdmlhIHJ0bmV0bGluayoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGR1bXBpbmcgbXVsdGljYXN0IGFkZHJlc3NlcyBpcyAqZGVmaW5pdGVseSogd29ydGggYSBmdXp6aW5nIGNhbXBhaWduLiBUaGUgY29kZSB0b3VjaGVzIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIHdoaWNoLCBhcyB3ZSBhbGwga25vdywgaXMgKmNvcmUqIG5ldHdvcmtpbmcgY29kZSDigJMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBvZiBpdHMgY2VudHJhbCByb2xlIGluIHRoZSBrZXJuZWwuIFRoaXMgc3BlY2lmaWMgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25hbGl0eSBmb3IgZHVtcGluZyBtdWx0aWNhc3QgYWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCBgUEZfUEFDS0VUYCBzb2NrZXRzIHVzaW5nIGBSVE1fR0VUTVVMVElDQVNUYCByZXF1ZXN0cyB0aHJvdWdoIHJ0bmV0bGluay4gV2UgaGF2ZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGBydG5sX2R1bXBfbWNhZGRyYCwgYHJ0bmxfZHVtcF9tY2FkZHJfZGV2YCwgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCwgYW5kIGBydG5sX2ZpbGxfbWNhZGRyYC5cblxuVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIG5ldyBjb2RlIGlzIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIG1lc3NhZ2VzLiBTcGVjaWZpY2FsbHksIHVzZXJzcGFjZSBjYW4gdHJpZ2dlciB0aGlzIHdpdGggYW4gYFJUTV9HRVRNVUxUSUNBU1RgIHJlcXVlc3QgYW5kIGBBRl9QQUNLRVRgLiBTbywgdGhlIGF0dGFjayBzdXJmYWNlIGlzIHJpZ2h0IHRoZXJlLiBXZSdyZSB0YWxraW5nIGFib3V0IGhhbmRsaW5nIHVzZXItc3VwcGxpZWQgcmVxdWVzdCBoZWFkZXJzLCBpdGVyYXRpbmcgb3ZlciBkYXRhIHN0cnVjdHVyZXMsIGFuZCBzZXJpYWxpemluZyBuZXRsaW5rIGF0dHJpYnV0ZXMuIFRoaXMgaXMgYSBjbGFzc2ljIHBhdHRlcm4gdGhhdOKAmXMgeWllbGRlZCBtYW55IGtlcm5lbCB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIHBhc3QsIGFuZCBJJ20gcHJhY3RpY2FsbHkgc2VlaW5nIGJ1ZyByZXBvcnRzIGFscmVhZHkuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSBzZXR1cC4gVGhlIGBORVRgIGNvbmZpZyBmbGFnIGlzIG9idmlvdXNseSBuZWNlc3Nhcnk7IHRoYXQncyB3aGF0IGNvbXBpbGVzIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuIEdvb2QsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIEl0IHNlZW1zIHdlIGRvbid0IG5lZWQgYW55IHNwZWNpYWxpemVkIG5ldHdvcmsgZmxhZ3MgbGlrZSBgQ09ORklHX0lORVRgIGJlY2F1c2UgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNlbnRlcmVkIGFyb3VuZCBgQUZfUEFDS0VUYCwgd2hpY2ggaXMganVzdCBhIGNvbnN0YW50ICgxNyksIGFuZCBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cy4gVGhlIGBkZXZfYWRkcl9saXN0c2AgYW5kIGBydG5ldGxpbmtgIHN0cnVjdHVyZXMgd2UgYXJlIGludGVyYWN0aW5nIHdpdGggYXJlIGJ1aWx0LWluIGlmIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLiBFeGNlbGxlbnQuXG5cblRoZXJlZm9yZSwgdGhlIGZpbmFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgaXMganVzdCBgTkVUYCwgYW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgdGhlIGZvdXIgZnVuY3Rpb25zIGxpc3RlZCBwcmV2aW91c2x5LiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuIFdlIGhhdmUgb3VyIGZ1enppbmcgdGFyZ2V0IHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAwOSwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6MzUuNjYwOTU2NDk5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyNDIwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bmxfZHVtcF9tY2FkZHJcIixcbiAgICBcInJ0bmxfZHVtcF9tY2FkZHJfZGV2XCIsXG4gICAgXCJydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcVwiLFxuICAgIFwicnRubF9maWxsX21jYWRkclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV0bGluayBzdXBwb3J0IGZvciBkdW1waW5nIGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyAoUEZfUEFDS0VUIC8gUlRNX0dFVE1VTFRJQ0FTVCkgaW4gcnRuZXRsaW5rLiBUaGUgbmV3bHkgYWRkZWQgY29kZSB2YWxpZGF0ZXMgdXNlciBkdW1wIHJlcXVlc3RzLCB0cmF2ZXJzZXMgZGV2aWNlIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzIHVuZGVyIGxvY2ssIGFuZCBzZXJpYWxpemVzIHJ0bmV0bGluayBhdHRyaWJ1dGVzLCB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgdmlhIG5ldGxpbmsgc29ja2V0IG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRubF9kdW1wX21jYWRkclwiLFxuICAgIFwicnRubF9kdW1wX21jYWRkcl9kZXZcIixcbiAgICBcInJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxXCIsXG4gICAgXCJydG5sX2ZpbGxfbWNhZGRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXRsaW5rIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChQRl9QQUNLRVQgLyBSVE1fR0VUTVVMVElDQVNUKSBpbiBydG5ldGxpbmsuIFRoZSBuZXdseSBhZGRlZCBjb2RlIHZhbGlkYXRlcyB1c2VyIGR1bXAgcmVxdWVzdHMsIHRyYXZlcnNlcyBkZXZpY2UgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgdW5kZXIgbG9jaywgYW5kIHNlcmlhbGl6ZXMgcnRuZXRsaW5rIGF0dHJpYnV0ZXMsIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB2aWEgbmV0bGluayBzb2NrZXQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6MzUuNzM5MjA2MTA3WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzE2OTcyMjA2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjM1LjczOTcxNTgzN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjczMTY5MjA5NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIG5ldGxpbmsuIFxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSBcXHUwMDI2IEluZm8tbGVha3MgKEtNU0FOKTogQWxsIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIGluIG5ldGxpbmsgcmVzcG9uc2VzIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBpZmFkZHJtc2dgIGhlYWRlciBoYXMgYSA4LWJ5dGUgbGF5b3V0IHdpdGhvdXQgaW50ZXJuYWwgcGFkZGluZyBob2xlcywgYW5kIGFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBzZXQuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBJRkFfTVVMVElDQVNUYCBhbmQgYElGQV9NQ19VU0VSU2ApIGFyZSBhZGRlZCB3aXRoIGBubGFfcHV0YCAvIGBubGFfcHV0X3UzMmAgd2hpY2ggemVybyBhbnkgdHJhaWxpbmcgYXR0cmlidXRlIGFsaWdubWVudCBwYWRkaW5nLiBBZGRyZXNzIGJ5dGVzIGluIGBoYS1cXHUwMDNlYWRkcmAgYXJlIGluaXRpYWxpemVkIGR1cmluZyBoYXJkd2FyZSBhZGRyZXNzIGNyZWF0aW9uIHVwIHRvIGBkZXYtXFx1MDAzZWFkZHJfbGVuYC4gQ29udHJvbCBmbG93IHZhcmlhYmxlcyAoc3VjaCBhcyBkdW1wIGBjdHhgIGFuZCBgaWZpbmRleGApIGFyZSBlaXRoZXIgemVyb2VkIGJ5IHRoZSBuZXRsaW5rIHN1YnN5c3RlbSBvciBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcbi0gTWVtb3J5IFNhZmV0eSBcXHUwMDI2IENvbmN1cnJlbmN5IChLQVNBTi9MT0NLREVQKTogVGhlIGNoYW5nZXMgaW52b2x2ZSBSQ1UgbG9va3VwcywgbmV0bGluayBkdW1wIGNhbGxiYWNrcywgYW5kIGRldmljZSBhZGRyZXNzIGxpc3QgbG9ja3MgKGBuZXRpZl9hZGRyX2xvY2tfYmhgKSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgY29uZmlndXJhdGlvbnMuXFxuXFxuVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI5ZjIyOWFjOGU2NmRiNDc0NzFhZTk5NzA5NTE4OWM4OTU0NmEyMzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDAyOjM3OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcbmluZGV4IDBlY2JkMjRjODkwYzYuLjJhMjMxMGNiMGRmMDEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXG5AQCAtMTY4LDcgKzE2OCwxMiBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICBhdHRyaWJ1dGVzOiAqaWZhZGRyLWFsbFxuICAgICAtXG4gICAgICAgbmFtZTogZ2V0bXVsdGljYXN0XG4tICAgICAgZG9jOiBHZXQgLyBkdW1wIElQdjQvSVB2NiBtdWx0aWNhc3QgYWRkcmVzc2VzLlxuKyAgICAgIGRvYzogfFxuKyAgICAgICAgR2V0IC8gZHVtcCBtdWx0aWNhc3QgYWRkcmVzc2VzLiBpZmEtZmFtaWx5IHNlbGVjdHMgdGhlIGFkZHJlc3NcbisgICAgICAgIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNiBmb3IgdGhlIElQIG11bHRpY2FzdCBncm91cHMgam9pbmVkIG9uXG4rICAgICAgICBhIGRldmljZSwgQUZfUEFDS0VUIGZvciB0aGUgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIGluIHRoZVxuKyAgICAgICAgZGV2aWNlIGZpbHRlci4gTGluay1sYXllciBlbnRyaWVzIGFkZGVkIHdpdGggU0lPQ0FERE1VTFRJIGFyZVxuKyAgICAgICAgcmVwb3J0ZWQgd2l0aCB0aGUgcGVybWFuZW50IGZsYWcgc2V0LlxuICAgICAgIGF0dHJpYnV0ZS1zZXQ6IGFkZHItYXR0cnNcbiAgICAgICBmaXhlZC1oZWFkZXI6IGlmYWRkcm1zZ1xuICAgICAgIGRvOlxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IDgxYzVhNjEwNGRlYTEuLmIyZmViZGI2OTE1ZTggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xuKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbkBAIC00NTY2LDYgKzQ1NjYsMTMzIEBAIHN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbiA/IDogcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IHJ0bmxfZmlsbF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldGRldl9od19hZGRyICpoYSwgdTMyIHBvcnRpZCxcbitcdFx0XHQgICAgdTMyIHNlcSwgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdHN0cnVjdCBpZmFkZHJtc2cgKmlmbTtcbitcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuK1xuK1x0bmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIFJUTV9HRVRNVUxUSUNBU1QsIHNpemVvZigqaWZtKSxcbitcdFx0XHRmbGFncyk7XG4rXHRpZiAoIW5saClcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcbitcdGlmbSA9IG5sbXNnX2RhdGEobmxoKTtcbitcdGlmbS1cdTAwM2VpZmFfZmFtaWx5ID0gQUZfUEFDS0VUO1xuK1x0aWZtLVx1MDAzZWlmYV9wcmVmaXhsZW4gPSAwO1xuK1x0aWZtLVx1MDAzZWlmYV9mbGFncyA9IGhhLVx1MDAzZWdsb2JhbF91c2UgPyBJRkFfRl9QRVJNQU5FTlQgOiAwO1xuK1x0aWZtLVx1MDAzZWlmYV9zY29wZSA9IFJUX1NDT1BFX0xJTks7XG4rXHRpZm0tXHUwMDNlaWZhX2luZGV4ID0gZGV2LVx1MDAzZWlmaW5kZXg7XG4rXG4rXHRpZiAobmxhX3B1dChza2IsIElGQV9NVUxUSUNBU1QsIGRldi1cdTAwM2VhZGRyX2xlbiwgaGEtXHUwMDNlYWRkcikgfHxcbitcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgaGEtXHUwMDNlcmVmY291bnQpKSB7XG4rXHRcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4rXHR9XG4rXG4rXHRubG1zZ19lbmQoc2tiLCBubGgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50ICpzX2FkZHJfaWR4LFxuK1x0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4rXHRpbnQgYWRkcl9pZHggPSAwO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbitcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHtcbitcdFx0aWYgKGFkZHJfaWR4IFx1MDAzYyAqc19hZGRyX2lkeCkge1xuK1x0XHRcdGFkZHJfaWR4Kys7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0ZXJyID0gcnRubF9maWxsX21jYWRkcihza2IsIGRldiwgaGEsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4rXHRcdFx0XHQgICAgICAgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpO1xuK1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRhZGRyX2lkeCsrO1xuK1x0fVxuK1x0bmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTtcbitcbitcdCpzX2FkZHJfaWR4ID0gZXJyIFx1MDAzYyAwID8gYWRkcl9pZHggOiAwO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbitcdFx0XHRcdCAgICAgIGludCAqcGlmaW5kZXgpXG4re1xuK1x0c3RydWN0IGlmYWRkcm1zZyAqaWZtO1xuK1xuK1x0aWZtID0gbmxtc2dfcGF5bG9hZChubGgsIHNpemVvZigqaWZtKSk7XG4rXHRpZiAoIWlmbSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiSW52YWxpZCBoZWFkZXIgZm9yIG11bHRpY2FzdCBkdW1wIHJlcXVlc3RcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKGlmbS1cdTAwM2VpZmFfcHJlZml4bGVuIHx8IGlmbS1cdTAwM2VpZmFfZmxhZ3MgfHwgaWZtLVx1MDAzZWlmYV9zY29wZSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiSW52YWxpZCB2YWx1ZXMgaW4gbXVsdGljYXN0IGR1bXAgaGVhZGVyXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChubG1zZ19hdHRybGVuKG5saCwgc2l6ZW9mKCppZm0pKSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiSW52YWxpZCBkYXRhIGFmdGVyIG11bHRpY2FzdCBkdW1wIGhlYWRlclwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHQqcGlmaW5kZXggPSBpZm0tXHUwMDNlaWZhX2luZGV4O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRubF9kdW1wX21jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4re1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbitcdHVuc2lnbmVkIGludCBmbGFncyA9IE5MTV9GX01VTFRJO1xuK1x0c3RydWN0IHtcbitcdFx0dW5zaWduZWQgbG9uZyBpZmluZGV4O1xuK1x0XHRpbnQgYWRkcl9pZHg7XG4rXHR9ICpjdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHRpbnQgaWZpbmRleDtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBydG5sX3ZhbGlkX2R1bXBfbWNhZGRyX3JlcShjYi1cdTAwM2VubGgsIGNiLVx1MDAzZWV4dGFjaywgXHUwMDI2aWZpbmRleCk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1xuK1x0aWYgKGlmaW5kZXgpIHtcbitcdFx0Y2ItXHUwMDNlYW5zd2VyX2ZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGZsYWdzIHw9IE5MTV9GX0RVTVBfRklMVEVSRUQ7XG4rXHRcdGRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KG5ldCwgaWZpbmRleCk7XG4rXHRcdGlmICghZGV2KSB7XG4rXHRcdFx0ZXJyID0gLUVOT0RFVjtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCwgZmxhZ3MpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xuK1x0XHRlcnIgPSBydG5sX2R1bXBfbWNhZGRyX2RldihkZXYsIHNrYiwgY2IsIFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeCxcbitcdFx0XHRcdFx0ICAgZmxhZ3MpO1xuK1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK291dDpcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcbiBcdFx0XHRcdCAgICAgICB1MzIgZXZlbnQsIGdmcF90IGZsYWdzLCBpbnQgKm5ld19uc2lkLFxuQEAgLTcyNTEsNiArNzM3OCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9XG4gXHR7Lm1zZ3R5cGUgPSBSVE1fU0VUU1RBVFMsIC5kb2l0ID0gcnRubF9zdGF0c19zZXR9LFxuIFx0ey5tc2d0eXBlID0gUlRNX05FV0xJTktQUk9QLCAuZG9pdCA9IHJ0bmxfbmV3bGlua3Byb3B9LFxuIFx0ey5tc2d0eXBlID0gUlRNX0RFTExJTktQUk9QLCAuZG9pdCA9IHJ0bmxfZGVsbGlua3Byb3B9LFxuK1x0ey5wcm90b2NvbCA9IFBGX1BBQ0tFVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTVVMVElDQVNULFxuK1x0IC5kdW1waXQgPSBydG5sX2R1bXBfbWNhZGRyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXG4gXHR7LnByb3RvY29sID0gUEZfQlJJREdFLCAubXNndHlwZSA9IFJUTV9HRVRMSU5LLFxuIFx0IC5kdW1waXQgPSBydG5sX2JyaWRnZV9nZXRsaW5rfSxcbiBcdHsucHJvdG9jb2wgPSBQRl9CUklER0UsIC5tc2d0eXBlID0gUlRNX0RFTExJTkssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDVjYzNlYmRjZjA4ZGUuLmNlYTYzNmYxMGFlYjYgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtMSwxNyArMSwyMSBAQFxuICMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4raW1wb3J0IGVycm5vXG4gaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfaW4sIGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXG4rZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgTmxFcnJvciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBkZWZlclxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFx4ZTBcXHgwMFxceDAwXFx4MDEnXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFx4ZWZcXHgwMVxceDAxXFx4MDEnXG4gSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJ2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJylcbitFVEhfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJzAxMDA1ZTAwMDAwMScpXG4rRVRIX1RFU1RfTVVMVElDQVNUX1NUUiA9ICcwMTowMDo1ZTowMTowMTowMSdcbitFVEhfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KEVUSF9URVNUX01VTFRJQ0FTVF9TVFIucmVwbGFjZSgnOicsICcnKSlcbiBcbiBcbiBkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XG5AQCAtMTA1LDYgKzEwOSw1MiBAQCBkZWYgZHVtcF9tY2FkZHI2X2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXG4gXG4gXG4rZGVmIGR1bXBfbWNhZGRyX2wyX2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgVmVyaWZ5IGxpbmstbGF5ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiBhbiBBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVFxuKyAgICBkdW1wOiB0aGUgaWZhLWluZGV4IGZpbHRlciwgbWMtdXNlcnMgYW5kIHRoZSBwZXJtYW5lbnQgZmxhZy5cbisgICAgXCJcIlwiXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgIGZvciBpZm5hbWUgaW4gKFwiZHVtbXkxXCIsIFwiZHVtbXkyXCIpOlxuKyAgICAgICAgICAgIGlwKGZcImxpbmsgYWRkIG5hbWUge2lmbmFtZX0gdHlwZSBkdW1teVwiKVxuKyAgICAgICAgICAgIGlwKGZcImxpbmsgc2V0IHtpZm5hbWV9IHVwXCIpXG4rICAgICAgICBkZXZfaWR4ID0gc29ja2V0LmlmX25hbWV0b2luZGV4KFwiZHVtbXkxXCIpXG4rICAgICAgICBpcChmXCJtYWRkciBhZGQge0VUSF9URVNUX01VTFRJQ0FTVF9TVFJ9IGRldiBkdW1teTFcIilcbitcbisgICAgICAgIHJ0bmwgPSBSdG5sQWRkckZhbWlseSgpXG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgYWRkcmVzc2VzID0gcnRubC5nZXRtdWx0aWNhc3QoXG4rICAgICAgICAgICAgICAgIHtcImlmYS1mYW1pbHlcIjogc29ja2V0LkFGX1BBQ0tFVCwgXCJpZmEtaW5kZXhcIjogZGV2X2lkeH0sXG4rICAgICAgICAgICAgICAgIGR1bXA9VHJ1ZSlcbisgICAgICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XG4rICAgICAgICAgICAgaWYgZS5lcnJvciA9PSBlcnJuby5FT1BOT1RTVVBQOlxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxuKyAgICAgICAgICAgICAgICAgICAgXCJrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBBRl9QQUNLRVQgbXVsdGljYXN0IGR1bXBcIilcbisgICAgICAgICAgICByYWlzZVxuK1xuKyAgICAgICAgIyBkdW1teTIgaGFzIGVudHJpZXMgYXMgd2VsbCwgb25seSBkdW1teTEgbWF5IGJlIGxpc3RlZFxuKyAgICAgICAga3NmdF9lcSh7YWRkclsnaWZhLWluZGV4J10gZm9yIGFkZHIgaW4gYWRkcmVzc2VzfSwge2Rldl9pZHh9LFxuKyAgICAgICAgICAgICAgICBcIkFGX1BBQ0tFVCBtdWx0aWNhc3QgZHVtcCBpZ25vcmVkIGlmYS1pbmRleCBmaWx0ZXJcIilcbitcbisgICAgICAgIGVudHJpZXMgPSB7YWRkclsnbXVsdGljYXN0J106IGFkZHIgZm9yIGFkZHIgaW4gYWRkcmVzc2VzfVxuK1xuKyAgICAgICAgIyBCcmluZ2luZyBhbiBFdGhlcm5ldCBkZXZpY2UgdXAgam9pbnMgMjI0LjAuMC4xLCB3aGljaCBtYXBzXG4rICAgICAgICAjIHRvIDAxOjAwOjVlOjAwOjAwOjAxIGluIHRoZSBkZXZpY2UgbXVsdGljYXN0IGxpc3QuXG4rICAgICAgICBrc2Z0X2luKEVUSF9BTExfSE9TVFNfTVVMVElDQVNULCBlbnRyaWVzLFxuKyAgICAgICAgICAgICAgICBcImR1bW15MSBkb2VzIG5vdCBoYXZlIHRoZSBhbGwtaG9zdHMgbGluay1sYXllciBhZGRyZXNzXCIpXG4rICAgICAgICBrc2Z0X25vdF9pbigncGVybWFuZW50JyxcbisgICAgICAgICAgICAgICAgICAgIGVudHJpZXNbRVRIX0FMTF9IT1NUU19NVUxUSUNBU1RdWydpZmEtZmxhZ3MnXSxcbisgICAgICAgICAgICAgICAgICAgIFwicHJvdG9jb2wgZW50cnkgaXMgcGVybWFuZW50XCIpXG4rXG4rICAgICAgICBrc2Z0X2luKEVUSF9URVNUX01VTFRJQ0FTVCwgZW50cmllcyxcbisgICAgICAgICAgICAgICAgXCJkdW1teTEgZG9lcyBub3QgaGF2ZSB0aGUgU0lPQ0FERE1VTFRJIGFkZHJlc3NcIilcbisgICAgICAgIGtzZnRfZXEoZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWydtYy11c2VycyddLCAxLFxuKyAgICAgICAgICAgICAgICBcInVuZXhwZWN0ZWQgbWMtdXNlcnMgZm9yIHRoZSBTSU9DQURETVVMVEkgYWRkcmVzc1wiKVxuKyAgICAgICAga3NmdF9pbigncGVybWFuZW50JywgZW50cmllc1tFVEhfVEVTVF9NVUxUSUNBU1RdWydpZmEtZmxhZ3MnXSxcbisgICAgICAgICAgICAgICAgXCJTSU9DQURETVVMVEkgZW50cnkgaXMgbm90IHBlcm1hbmVudFwiKVxuK1xuK1xuIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBcIlwiXCJcbiAgICAgQ29uZmlndXJlIGFuIGludGVyZmFjZSBhbmQgc2V0IGlwdjQtZGV2Y29uZiB2YWx1ZXMgdGhyb3VnaCBuZXRsaW5rXG5AQCAtMzE1LDcgKzM2NSw4IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLVx1MDAzZSBOb25lOlxuIFxuIFxuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbisgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGR1bXBfbWNhZGRyX2wyX2NoZWNrLFxuKyAgICAgICAgICAgICAgaXB2NF9kZXZjb25mX25vdGlmeSxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6MzUuNzM5NzE2ODI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMDc3NTQ0NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIHZzLiBLQVNBTiBQYXRjaCBFdmFsdWF0aW9uKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nIGFzIEkgYXBwcm9hY2ggdGhpcyBwYXRjaC4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG9wZXJhdGluZyB3aXRoaW4gdGhlIHNhZmV0eSBndWlkZWxpbmVzOiBubyByZWFsLXdvcmxkIGhhcm0sIG5vIG9mZmVuc2l2ZSBhY3Rpb25zLCBhbmQgdGhpcyBjb2RlIGF1ZGl0aW5nIGlzIGRlZmluaXRlbHkgYmVuaWduLCBzbyBJJ20gZ29vZCB0byBnby4gVGhlIHNwZWNpZmljIHRhc2sgaXMgdG8gZXZhbHVhdGUgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIEtNU0FOIGFwcGxpY2FiaWxpdHksIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEkndmUgZ290IG15IHRvb2xzOiBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGByZWFkLWZpbGVgLCBhbmQgY3J1Y2lhbGx5LCBgc2V0LXJlc3VsdHNgLCB3aGljaCBJICptdXN0KiBjYWxsIG9uY2UgYXQgdGhlIGVuZC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRpbmcgbXVsdGljYXN0IGFkZHJlc3MgZHVtcGluZyB0aHJvdWdoIE5ldGxpbmssIHNwZWNpZmljYWxseSBgUlRNX0dFVE1VTFRJQ0FTVGAgd2l0aCBgUEZfUEFDS0VUYC4gU28sIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gd2hhdCdzIGJlaW5nIG1vZGlmaWVkLlxuXG5UaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYHJ0bmxfZmlsbF9tY2FkZHJgLiBMb29raW5nIGF0IHRoZSBjb2RlLCBJIHNlZSBpdCBwb3B1bGF0aW5nIGFuIGBza19idWZmYCB3aXRoIE5ldGxpbmsgbWVzc2FnZSBkYXRhLiBJdCB1c2VzIGBubG1zZ19wdXRgIHRvIGNyZWF0ZSB0aGUgaGVhZGVyLCBhbmQgdGhlbiBzdGFydHMgZmlsbGluZyBpbiBmaWVsZHMgbGlrZSBgaWZhX2ZhbWlseWAsIGBpZmFfcHJlZml4bGVuYCwgYGlmYV9mbGFnc2AsIGBpZmFfc2NvcGVgLCBgaWZhX2luZGV4YCwgYW5kIGFsc28gc29tZSBOZXRsaW5rIGF0dHJpYnV0ZXM6IGBJRkFfTVVMVElDQVNUYCBhbmQgYElGQV9NQ19VU0VSU2AuXG5cbk5vdyBjb21lcyB0aGUgY3J1Y2lhbCBwYXJ0LiBJIG5lZWQgdG8gYmUgZXh0cmEgdmlnaWxhbnQgYWJvdXQgd2hldGhlciBhbnkgb2YgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIG9yIHRoZSBhdHRyaWJ1dGVzIHVzZWQsIGVzcGVjaWFsbHkgYGlmYWRkcm1zZ2AsIGNvdWxkIGJlIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0J3Mgd2hlcmUgS01TQU4gY29tZXMgaW50byBwbGF5LiBJIG5lZWQgdG8gY2FyZWZ1bGx5IHJldmlldyBob3cgdGhlc2Ugc3RydWN0dXJlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQsIGFuZCB3aGF0IHZhbHVlcyBhcmUgYmVpbmcgYXNzaWduZWQgdG8gdGhlbS4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgaWZhZGRybXNnYCB0byBlbnN1cmUgdGhhdCBpdCBkb2VzIG5vdCBjb250YWluIGFueSBwYWRkaW5nLCB1bmluaXRpYWxpemVkIG1lbWJlcnMgb3IgcmVsaWVzIG9uIGV4dGVybmFsIHZhbHVlcyB0aGF0IG1heSBiZSB1bmluaXRpYWxpemVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgaGVhZGVycyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTMxNCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjQ3LjgxNzI2Mzg2N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyMDE4MDEzLCJFcnJvciI6ImJhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAnc3RydWN0IGlmYWRkcm1zZyB7JzogVW5tYXRjaGVkIFxceyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBpZmFkZHJtc2cge1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcImJhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAnc3RydWN0IGlmYWRkcm1zZyB7JzogVW5tYXRjaGVkIFxcXFx7XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjQ4LjM1OTI4ODdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI4Mjc5MzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBSZWdleC9Db2Rlc2VhcmNoIERpbGVtbWEqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGlzc3VlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCBpcywgXCJIb3cgY2FuIEkgZWZmaWNpZW50bHkgYWRkcmVzcyB0aGlzP1wiIEl0J3MgYSBjbGFzc2ljIHNpdHVhdGlvbjogSSBuZWVkIHRvIGxvY2F0ZSBpbnN0YW5jZXMgb2Ygc29tZXRoaW5n4oCUbWF5YmUgYSBwYXR0ZXJuLCBhIHNwZWNpZmljIGNvZGUgY29uc3RydWN0LCBvciBhIHByb2JsZW1hdGljIGltcGxlbWVudGF0aW9u4oCUd2l0aGluIGEgY29kZWJhc2UuIE15IGltbWVkaWF0ZSBvcHRpb25zIGFyZSBlaXRoZXIgdG8gcmVmaW5lIGEgcmVndWxhciBleHByZXNzaW9uIG9yIGxldmVyYWdlIGEgY29kZXNlYXJjaCB0b29sLlxuXG5UaGUgcmVnZXggYXBwcm9hY2ggaGFzIGl0cyBwcm9zLiBJIGNhbiBtZXRpY3Vsb3VzbHkgY3JhZnQgYSByZWdleCB0byB0YXJnZXQgdmVyeSBzcGVjaWZpYyBpbnN0YW5jZXMuIEl0IG9mZmVycyBwcmVjaXNpb24sIGVzcGVjaWFsbHkgaWYgdGhlIHBhdHRlcm4gaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgYW5kIHdlbGwtZGVmaW5lZC4gSSBjYW4gcXVpY2tseSBpdGVyYXRlIGFuZCB0ZXN0IG15IHBhdHRlcm4uIEhvd2V2ZXIsIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBvdmVybHkgY29tcGxleCByZWdleCBjYW4gYmVjb21lIHVubWFpbnRhaW5hYmxl4oCUYSBuaWdodG1hcmUgdG8gZGVidWcgYW5kIHBvdGVudGlhbGx5IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgcGFydGljdWxhcmx5IG9uIGxhcmdlIGZpbGVzIG9yIGluIGEgdGlnaHQgbG9vcC5cblxuVGhlIGFsdGVybmF0aXZlLCBjb2Rlc2VhcmNoLCBpcyB0ZW1wdGluZy4gQSBwcm9wZXIgY29kZSBzZWFyY2ggdG9vbCwgc3VjaCBhcyBncmVwIG9yIGEgbW9yZSBzb3BoaXN0aWNhdGVkIHN5c3RlbSwgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YgdW5kZXJzdGFuZGluZyBtb3JlIGNvbnRleHQgYWJvdXQgdGhlIGNvZGUgbGFuZ3VhZ2UgSSBhbSB3b3JraW5nIGluLiBUaGlzIGtub3dsZWRnZSBpcyBpbXBvcnRhbnQgZm9yIG15IHNlYXJjaCBhcyBpdCB3aWxsIGhlbHAgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIHRva2VucyBpbiBteSBzZWFyY2ggc3RyaW5nIG1lYW4sIGFuZCBjYW4gYWxzbyBoZWxwIHNlYXJjaCBhbmQgcmVwbGFjZS4gVGhpcyBjYW4gYmUgZ3JlYXQgaWYgSSBhbSBzZWFyY2hpbmcgZm9yIGxhbmd1YWdlIGNvbnN0cnVjdHMuIENvZGUgc2VhcmNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGhhbmRsZSBtb3JlIGNvbXBsZXggb3IgbnVhbmNlZCBxdWVyaWVzIHdpdGggYmV0dGVyIGFjY3VyYWN5LCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgY29udGV4dCwgbGFuZ3VhZ2Ugc3ludGF4LCBhbmQgZXZlbiBzZW1hbnRpYyBtZWFuaW5nLiBDb2Rlc2VhcmNoIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgZmlsZXMsIG9yIGxhcmdlIGNvZGViYXNlcy4gSG93ZXZlciwgdGhlIGluaXRpYWwgc2V0dXAgYW5kIGluZGV4aW5nIG9mIGEgY29kZXNlYXJjaCBzb2x1dGlvbiBjYW4gdGFrZSBtb3JlIHRpbWUgYW5kIGVmZm9ydCwgZXNwZWNpYWxseSBpZiB0aGUgY29kZWJhc2UgaXMgcGFydGljdWxhcmx5IGNvbXBsZXggb3IgdXNlcyBhbiB1bnVzdWFsIHNldHVwLiBBbHNvLCBpZiBJIGFtIHRyeWluZyB0byBzZWFyY2ggZm9yIHNvbWV0aGluZyB2ZXJ5IHNwZWNpZmljLCB0aGUgcHJlY2lzaW9uIG1heSBiZSBsZXNzIHRoYW4gYSByZWdleC1iYXNlZCBzb2x1dGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBjb2Rlc2VhcmNoIGVuZ2luZS5cblxuU28sIEkgbmVlZCB0byB3ZWlnaCB0aGUgdHJhZGUtb2ZmczogcHJlY2lzaW9uIHZlcnN1cyBzY2FsZSwgY29tcGxleGl0eSB2ZXJzdXMgZWZmaWNpZW5jeS4gV2hhdCdzIHRoZSBzY29wZSBvZiB0aGUgcHJvYmxlbT8gSXMgaXQgYSBxdWljaywgaXNvbGF0ZWQgdGFzaywgb3Igc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgcmV2aXNpdGVkLCBtYWludGFpbmVkLCBhbmQgcGVyaGFwcyBldmVuIGF1dG9tYXRlZD8gS25vd2luZyB0aGF0IHdpbGwgZGV0ZXJtaW5lIHdoZXRoZXIgSSB1c2UgcmVnZXggb3IgY29kZXNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM5MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjUxLjY0MjA4NDcxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY3NDczMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBpZmFkZHJtc2cgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC03LVxcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6ODpzdHJ1Y3QgaWZhZGRybXNnIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTktXFx0X191OFxcdFxcdGlmYV9mYW1pbHk7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTctXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaDo4OnN0cnVjdCBpZmFkZHJtc2cge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtOS1cXHRfX3U4XFx0XFx0aWZhX2ZhbWlseTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6NTQuMTA5NTY0MTIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NTY2NDEzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIE5ldHdvcmsgSW50ZXJmYWNlIEFkZHJlc3MgU3RydWN0dXJlcyoqXG5cbk9rYXksIHRpbWUgdG8gY3JhY2sgb3BlbiBgaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaGAuIEknbSBjdXJpb3VzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBrZXJuZWwncyBkZWZpbml0aW9ucyBmb3IgbmV0d29yayBpbnRlcmZhY2UgYWRkcmVzc2VzLCBzcGVjaWZpY2FsbHkgdGhlIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cy4gSSBuZWVkIHRvIGdldCBiYWNrIGluIHRoZSB3ZWVkcyBhbmQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCByZXByZXNlbnRzIGFuZCBoYW5kbGVzIHRoZSB2YXJpb3VzIGFkZHJlc3MgZmFtaWxpZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGF0YS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgdGhpbmdzIGxpa2UgSVB2NCwgSVB2NiwgYW5kIHBvdGVudGlhbGx5IG90aGVyIGFkZHJlc3MgdHlwZXMgd2lsbCBsaXZlLiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc3RydWN0dXJlIGxheW91dHMgYW5kIGFueSBhbGlnbm1lbnQgY29uc2lkZXJhdGlvbnMsIGFzIHRob3NlIGRldGFpbHMgYXJlIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBpbnRlcm9wZXJhYmlsaXR5LiBJdCdzIGFsc28gd29ydGggZG91YmxlLWNoZWNraW5nIGFueSByZWNlbnQgY2hhbmdlcyBvciBhZGRpdGlvbnMgdG8gdGhpcyBoZWFkZXIg4oCTIGl0J3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHN0YXkgb24gdG9wIG9mIHRoZSBsYXRlc3QgQVBJIG1vZGlmaWNhdGlvbnMuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgYSBxdWljayByZXZpZXcsIGJ1dCBJJ20gYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsbHkgc3VidGxlIGJ1dCBpbXBvcnRhbnQgZGV0YWlscyB0aGF0IEkgc2hvdWxkIHJlZnJlc2ggbXkgbWVtb3J5IG9uLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDE4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzc6NTYuNTY2MjA4NTY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqL1xcbiAgIDI6XFx0I2lmbmRlZiBfVUFQSV9fTElOVVhfSUZfQUREUl9IXFxuICAgMzpcXHQjZGVmaW5lIF9VQVBJX19MSU5VWF9JRl9BRERSX0hcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0bGluay5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHRzdHJ1Y3QgaWZhZGRybXNnIHtcXG4gICA5OlxcdFxcdF9fdThcXHRcXHRpZmFfZmFtaWx5O1xcbiAgMTA6XFx0XFx0X191OFxcdFxcdGlmYV9wcmVmaXhsZW47XFx0LyogVGhlIHByZWZpeCBsZW5ndGhcXHRcXHQqL1xcbiAgMTE6XFx0XFx0X191OFxcdFxcdGlmYV9mbGFncztcXHQvKiBGbGFnc1xcdFxcdFxcdCovXFxuICAxMjpcXHRcXHRfX3U4XFx0XFx0aWZhX3Njb3BlO1xcdC8qIEFkZHJlc3Mgc2NvcGVcXHRcXHQqL1xcbiAgMTM6XFx0XFx0X191MzJcXHRcXHRpZmFfaW5kZXg7XFx0LyogTGluayBpbmRleFxcdFxcdFxcdCovXFxuICAxNDpcXHR9O1xcbiAgMTU6XFx0XFxuICAxNjpcXHQvKlxcbiAgMTc6XFx0ICogSW1wb3J0YW50IGNvbW1lbnQ6XFxuICAxODpcXHQgKiBJRkFfQUREUkVTUyBpcyBwcmVmaXggYWRkcmVzcywgcmF0aGVyIHRoYW4gbG9jYWwgaW50ZXJmYWNlIGFkZHJlc3MuXFxuICAxOTpcXHQgKiBJdCBtYWtlcyBubyBkaWZmZXJlbmNlIGZvciBub3JtYWxseSBjb25maWd1cmVkIGJyb2FkY2FzdCBpbnRlcmZhY2VzLFxcbiAgMjA6XFx0ICogYnV0IGZvciBwb2ludC10by1wb2ludCBJRkFfQUREUkVTUyBpcyBERVNUSU5BVElPTiBhZGRyZXNzLFxcbiAgMjE6XFx0ICogbG9jYWwgYWRkcmVzcyBpcyBzdXBwbGllZCBpbiBJRkFfTE9DQUwgYXR0cmlidXRlLlxcbiAgMjI6XFx0ICpcXG4gIDIzOlxcdCAqIElGQV9GTEFHUyBpcyBhIHUzMiBhdHRyaWJ1dGUgdGhhdCBleHRlbmRzIHRoZSB1OCBmaWVsZCBpZmFfZmxhZ3MuXFxuICAyNDpcXHQgKiBJZiBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbSBzdHJ1Y3QgaWZhZGRybXNnIHdpbGwgYmUgaWdub3JlZC5cXG4gIDI1OlxcdCAqL1xcbiAgMjY6XFx0ZW51bSB7XFxuICAyNzpcXHRcXHRJRkFfVU5TUEVDLFxcbiAgMjg6XFx0XFx0SUZBX0FERFJFU1MsXFxuICAyOTpcXHRcXHRJRkFfTE9DQUwsXFxuICAzMDpcXHRcXHRJRkFfTEFCRUwsXFxuICAzMTpcXHRcXHRJRkFfQlJPQURDQVNULFxcbiAgMzI6XFx0XFx0SUZBX0FOWUNBU1QsXFxuICAzMzpcXHRcXHRJRkFfQ0FDSEVJTkZPLFxcbiAgMzQ6XFx0XFx0SUZBX01VTFRJQ0FTVCxcXG4gIDM1OlxcdFxcdElGQV9GTEFHUyxcXG4gIDM2OlxcdFxcdElGQV9SVF9QUklPUklUWSxcXHQvKiB1MzIsIHByaW9yaXR5L21ldHJpYyBmb3IgcHJlZml4IHJvdXRlICovXFxuICAzNzpcXHRcXHRJRkFfVEFSR0VUX05FVE5TSUQsXFxuICAzODpcXHRcXHRJRkFfUFJPVE8sXFx0XFx0LyogdTgsIGFkZHJlc3MgcHJvdG9jb2wgKi9cXG4gIDM5OlxcdFxcdElGQV9NQ19VU0VSUyxcXHRcXHQvKiB1MzIsIG11bHRpY2FzdCBncm91cCB1c2VycyAqL1xcbiAgNDA6XFx0XFx0X19JRkFfTUFYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzo1Ni41NjYyNzUwOTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYyNTEyOTQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBpZmFkZHJtc2dgIFN0cnVjdHVyZSBmb3IgTmV0d29yayBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgc3RydWN0IGlmYWRkcm1zZ2AuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYGlmYV9mYW1pbHlgIChhIHU4KSwgYGlmYV9wcmVmaXhsZW5gIChhbm90aGVyIHU4KSwgYGlmYV9mbGFnc2AgKGEgdTggYWdhaW4pLCBgaWZhX3Njb3BlYCAoYW5vdGhlciB1OCEpLCBhbmQgZmluYWxseSBgaWZhX2luZGV4YCAoYSB1MzIpLiBOaWNlISBUaGUgdG90YWwgc2l6ZSBpcyBqdXN0IDggYnl0ZXMsIHdoaWNoIGlzIGdvb2Qg4oCTIG5vIHdhc3RlZCBzcGFjZSBmcm9tIHBhZGRpbmcuIFRoYXQncyB3aGF0IEkgbGlrZSB0byBzZWUuXG5cbkFuZCwgZXZlbiBiZXR0ZXIsIGFsbCB0aGUgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBXZSd2ZSBnb3QgYGlmbSA9IG5sbXNnX2RhdGEobmxoKWAsIHRoZW4gdGhlIGZpZWxkcyBnZXQgc2V0OiBgaWZhX2ZhbWlseWAgdG8gYEFGX1BBQ0tFVGAsIGBpZmFfcHJlZml4bGVuYCB0byAwLCBgaWZhX2ZsYWdzYCBnZXRzIGEgY29uZGl0aW9uYWwgYXNzaWdubWVudCBiYXNlZCBvbiBgaGEtXHUwMDNlZ2xvYmFsX3VzZWAgKGVpdGhlciBgSUZBX0ZfUEVSTUFORU5UYCBvciAwKSwgYGlmYV9zY29wZWAgc2V0IHRvIGBSVF9TQ09QRV9MSU5LYCwgYW5kIGBpZmFfaW5kZXhgIHRvIHRoZSBkZXZpY2UncyBpZmluZGV4LiBNYWtlcyBzZW5zZS5cblxuQnV0IEknbSBhIGJpdCBjdXJpb3VzIGFib3V0IHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBhbGxvY2F0aW9uLiBTaW5jZSBgbmxtc2dfcHV0YCBpcyBpbnZvbHZlZCwgSSBzaG91bGQgY29uZmlybSB0aGF0IGBubG1zZ19wdXRgIHplcm9lcyBvciBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIHBheWxvYWQgc3BhY2UuIEdvdHRhIGNoZWNrIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gdG8gYmUgc3VyZS4gSXQncyBnb29kIHRvIGtlZXAgdHJhY2sgb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg4NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM3OjU5LjE5MTQwODM2OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwOTI1MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmxtc2dfcHV0XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvbmV0bGluay5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGxpbmsuaC0zNy0gKiAgIG5sbXNnX25ldygpXFx0XFx0XFx0Y3JlYXRlIGEgbmV3IG5ldGxpbmsgbWVzc2FnZVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDozODogKiAgIG5sbXNnX3B1dCgpXFx0XFx0XFx0YWRkIGEgbmV0bGluayBtZXNzYWdlIHRvIGFuIHNrYlxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDozOTogKiAgIG5sbXNnX3B1dF9hbnN3ZXIoKVxcdFxcdFxcdGNhbGxiYWNrIGJhc2VkIG5sbXNnX3B1dCgpXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTQwLSAqICAgbmxtc2dfZW5kKClcXHRcXHRcXHRmaW5hbGl6ZSBuZXRsaW5rIG1lc3NhZ2VcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaD05NTU9c3RhdGljIGlubGluZSB1MzIgbmxtc2dfc2VxKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoKVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTk5NC0gKi9cXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6OTk1OnN0YXRpYyBpbmxpbmUgc3RydWN0IG5sbXNnaGRyICpubG1zZ19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtOTk2LVxcdFxcdFxcdFxcdFxcdCBpbnQgdHlwZSwgaW50IHBheWxvYWQsIGludCBmbGFncylcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0xMDAwLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDoxMDAxOlxcdHJldHVybiBfX25sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCB0eXBlLCBwYXlsb2FkLCBmbGFncyk7XFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTEwMDItfVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oPTEwMzY9c3RhdGljIGlubGluZSBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnX3B1dF9hbnN3ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0xMDQwLXtcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6MTA0MTpcXHRyZXR1cm4gbmxtc2dfcHV0KHNrYiwgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsIGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSxcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtMTA0Mi1cXHRcXHRcXHQgdHlwZSwgcGF5bG9hZCwgZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozNzo1OS4yNDE1MDU2OTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY5MDU4NzU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0bGluayBEZXRhaWxzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIE5ldGxpbmsgbWVzc2FnZXMgYXJlIGJlaW5nIGNvbnN0cnVjdGVkIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIEknbSBnb2luZyB0byBxdWlja2x5IGp1bXAgaW50byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IHRoZSBgX19ubG1zZ19wdXRgIGZ1bmN0aW9uLiBJdCBzaG91bGQgYmUgaW4gYG5ldC9uZXRsaW5rL2FmX25ldGxpbmsuY2AsIG9yIGF0IGxlYXN0IGNsb3NlbHkgcmVsYXRlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoaXMgcHJpbWl0aXZlIGludGVyYWN0cyB3aXRoIHRoZSBzb2NrZXQgbGF5ZXIuIEkgc3VzcGVjdCB0aGVyZSdzIHNvbWV0aGluZyBhbWlzcyB3aXRoIHRoZSBtZXNzYWdlIGhlYWRlciBjb25zdHJ1Y3Rpb24gb3IgcGVyaGFwcyBkYXRhIGFsaWdubWVudC4gVGltZSB0byBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gaWRlbnRpZnkgc29tZSBpc3N1ZXMgYnkgZ29pbmcgdGhyb3VnaCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg2NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM4OjAwLjkzMjA5NjA2N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk1MjExOTkxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25sbXNnX3B1dFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI1NDM9aW50IGlzY3NpX3JlY3ZfcGR1KHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiwgc3RydWN0IGlzY3NpX2hkciAqaGRyLFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjU2NS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzoyNTY2OlxcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgMCwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI1NjctXFx0ZXYgPSBubG1zZ19kYXRhKG5saCk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0yNTgxPWludCBpc2NzaV9vZmZsb2FkX21lc2coc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNTk1LVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjI1OTY6XFx0bmxoID0gX19ubG1zZ19wdXQoc2tiLCAwLCAwLCAwLCAobGVuIC0gc2l6ZW9mKCpubGgpKSwgMCk7XFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjU5Ny1cXHRldiA9IG5sbXNnX2RhdGEobmxoKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI2MTY9dm9pZCBpc2NzaV9jb25uX2Vycm9yX2V2ZW50KHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiwgZW51bSBpc2NzaV9lcnIgZXJyb3IpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNjYwLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjI2NjE6XFx0bmxoID0gX19ubG1zZ19wdXQoc2tiLCAwLCAwLCAwLCAobGVuIC0gc2l6ZW9mKCpubGgpKSwgMCk7XFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjY2Mi1cXHRldiA9IG5sbXNnX2RhdGEobmxoKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI2NzY9dm9pZCBpc2NzaV9jb25uX2xvZ2luX2V2ZW50KHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubixcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI2OTUtXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM6MjY5NjpcXHRubGggPSBfX25sbXNnX3B1dChza2IsIDAsIDAsIDAsIChsZW4gLSBzaXplb2YoKm5saCkpLCAwKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNjk3LVxcdGV2ID0gbmxtc2dfZGF0YShubGgpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM9MjcxMD12b2lkIGlzY3NpX3Bvc3RfaG9zdF9ldmVudCh1aW50MzJfdCBob3N0X25vLCBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICp0cmFuc3BvcnQsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0yNzI1LVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjI3MjY6XFx0bmxoID0gX19ubG1zZ19wdXQoc2tiLCAwLCAwLCAwLCAobGVuIC0gc2l6ZW9mKCpubGgpKSwgMCk7XFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjcyNy1cXHRldiA9IG5sbXNnX2RhdGEobmxoKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI3NDE9dm9pZCBpc2NzaV9waW5nX2NvbXBfZXZlbnQodWludDMyX3QgaG9zdF9ubywgc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjc1NS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzoyNzU2OlxcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgMCwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI3NTctXFx0ZXYgPSBubG1zZ19kYXRhKG5saCk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0yNzcxPWlzY3NpX2lmX3NlbmRfcmVwbHkodTMyIHBvcnRpZCwgaW50IHR5cGUsIHZvaWQgKnBheWxvYWQsIGludCBzaXplKVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjc4Mi1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzoyNzgzOlxcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgdHlwZSwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI3ODQtXFx0bWVtY3B5KG5sbXNnX2RhdGEobmxoKSwgcGF5bG9hZCwgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0yNzg5PWlzY3NpX2lmX2dldF9zdGF0cyhzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCBubG1zZ2hkciAqbmxoKVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjgyMS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzoyODIyOlxcdFxcdG5saHN0YXQgPSBfX25sbXNnX3B1dChza2JzdGF0LCAwLCAwLCAwLFxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI4MjMtXFx0XFx0XFx0XFx0ICAgICAgKGxlbiAtIHNpemVvZigqbmxoc3RhdCkpLCAwKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jPTI4NTg9aW50IGlzY3NpX3Nlc3Npb25fZXZlbnQoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uLFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMjg4MC1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzoyODgxOlxcdG5saCA9IF9fbmxtc2dfcHV0KHNrYiwgMCwgMCwgMCwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApO1xcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTI4ODItXFx0ZXYgPSBubG1zZ19kYXRhKG5saCk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYz0zMjk4PWlzY3NpX2dldF9jaGFwKHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IG5sbXNnaGRyICpubGgpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYy0zMzM3LVxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jOjMzMzg6XFx0XFx0bmxoY2hhcCA9IF9fbmxtc2dfcHV0KHNrYmNoYXAsIDAsIDAsIDAsXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMzMzOS1cXHRcXHRcXHRcXHQgICAgICAobGVuIC0gc2l6ZW9mKCpubGhjaGFwKSksIDApO1xcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmM9MzcwMz1pc2NzaV9nZXRfaG9zdF9zdGF0cyhzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCBubG1zZ2hkciAqbmxoKVxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMtMzc0MS1cXG5kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYzozNzQyOlxcdFxcdG5saGhvc3Rfc3RhdHMgPSBfX25sbXNnX3B1dChza2Job3N0X3N0YXRzLCAwLCAwLCAwLFxcbmRyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jLTM3NDMtXFx0XFx0XFx0XFx0ICAgICAgKGxlbiAtIHNpemVvZigqbmxoaG9zdF9zdGF0cykpLCAwKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0bGluay5oPTMxNz1zdHJ1Y3Qgbmxtc2doZHIgKlxcbmluY2x1ZGUvbGludXgvbmV0bGluay5oOjMxODpfX25sbXNnX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgaW50IGxlbiwgaW50IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L25ldGxpbmsuaC0zMTktXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg9OTk1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5sbXNnaGRyICpubG1zZ19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0xMDAwLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDoxMDAxOlxcdHJldHVybiBfX25sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCB0eXBlLCBwYXlsb2FkLCBmbGFncyk7XFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTEwMDItfVxcbi0tXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jPTIxNDQ9c3RydWN0IG5sbXNnaGRyICpcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjE0NTpfX25sbXNnX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgaW50IGxlbiwgaW50IGZsYWdzKVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMTQ2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzg6MDMuODg0MjIxMTQxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4OTIyOTE4MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0bGluayBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbmV0bGluayBtZXNzYWdlIGlzIGNvbnN0cnVjdGVkIGFuZCBzZW50LiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGhlYWQgc3RyYWlnaHQgZm9yIGBfX25sbXNnX3B1dGAgaW4gYG5ldC9uZXRsaW5rL2FmX25ldGxpbmsuY2AuIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgbWVzc2FnZSBjcmVhdGlvbiwgc28gdGhhdCdzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIHN1c3BlY3QgaXQncyB3aGVyZSB0aGUgbWVzc2FnZSBoZWFkZXJzIGFuZCBwb3RlbnRpYWxseSB0aGUgcGF5bG9hZCBhcmUgYXNzZW1ibGVkLlxuXG5MZXQncyBxdWlja2x5IG5hdmlnYXRlIHRvIGFyb3VuZCBsaW5lIDIxNDUgaW4gdGhlIGZpbGU7IHRoYXQgc2hvdWxkIHB1dCBtZSBpbiB0aGUgbmVpZ2hib3Job29kIG9mIHdoZXJlIEknZCBleHBlY3QgdGhlIGNyaXRpY2FsIG1lc3NhZ2UgY29uc3RydWN0aW9uIGxvZ2ljIHRvIGJlLiBUaW1lIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM4OjA1Ljc3NjUxNTE4NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGxpbmsvYWZfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNDAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNDA6XFx0XFx0c2tfZm9yX2VhY2hfYm91bmRfc2FmZShzaywgdG1wLCBcXHUwMDI2dGJsLVxcdTAwM2VtY19saXN0KVxcbjIxNDE6XFx0XFx0XFx0bmV0bGlua191cGRhdGVfc29ja2V0X21jKG5sa19zayhzayksIGdyb3VwLCAwKTtcXG4yMTQyOlxcdH1cXG4yMTQzOlxcdFxcbjIxNDQ6XFx0c3RydWN0IG5sbXNnaGRyICpcXG4yMTQ1OlxcdF9fbmxtc2dfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgbGVuLCBpbnQgZmxhZ3MpXFxuMjE0NjpcXHR7XFxuMjE0NzpcXHRcXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG4yMTQ4OlxcdFxcdGludCBzaXplID0gbmxtc2dfbXNnX3NpemUobGVuKTtcXG4yMTQ5OlxcdFxcbjIxNTA6XFx0XFx0bmxoID0gc2tiX3B1dChza2IsIE5MTVNHX0FMSUdOKHNpemUpKTtcXG4yMTUxOlxcdFxcdG5saC1cXHUwMDNlbmxtc2dfdHlwZSA9IHR5cGU7XFxuMjE1MjpcXHRcXHRubGgtXFx1MDAzZW5sbXNnX2xlbiA9IHNpemU7XFxuMjE1MzpcXHRcXHRubGgtXFx1MDAzZW5sbXNnX2ZsYWdzID0gZmxhZ3M7XFxuMjE1NDpcXHRcXHRubGgtXFx1MDAzZW5sbXNnX3BpZCA9IHBvcnRpZDtcXG4yMTU1OlxcdFxcdG5saC1cXHUwMDNlbmxtc2dfc2VxID0gc2VxO1xcbjIxNTY6XFx0XFx0aWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSB8fCBOTE1TR19BTElHTihzaXplKSAtIHNpemUgIT0gMClcXG4yMTU3OlxcdFxcdFxcdG1lbXNldChubG1zZ19kYXRhKG5saCkgKyBsZW4sIDAsIE5MTVNHX0FMSUdOKHNpemUpIC0gc2l6ZSk7XFxuMjE1ODpcXHRcXHRyZXR1cm4gbmxoO1xcbjIxNTk6XFx0fVxcbjIxNjA6XFx0RVhQT1JUX1NZTUJPTChfX25sbXNnX3B1dCk7XFxuMjE2MTpcXHRcXG4yMTYyOlxcdHN0YXRpYyBzaXplX3RcXG4yMTYzOlxcdG5ldGxpbmtfYWNrX3Rsdl9sZW4oc3RydWN0IG5ldGxpbmtfc29jayAqbmxrLCBpbnQgZXJyLFxcbjIxNjQ6XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzg6MDUuNzc2NzA3NjI1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NDcxNTQ0NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIEkgZGVsdmUgaW50byB0aGlzIGNvZGUgc25pcHBldDpcblxuKipBbmFseXppbmcgTmV0d29yayBEZXZpY2UgSGFyZHdhcmUgQWRkcmVzcyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IG11bHRpY2FzdCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgaW4gdGhlIG5ldHdvcmsgc3RhY2suIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBoYS1cdTAwM2VhZGRyYCBhbmQgYGRldi1cdTAwM2VhZGRyX2xlbmAgdmFyaWFibGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVsYXRlIHRvIHRoZSBhY3R1YWwgaGFyZHdhcmUgYWRkcmVzcyB3aXRoaW4gdGhlIG11bHRpY2FzdCBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEknbSB0cmFjaW5nIHRoaXMgdGhyb3VnaCB0aGUgYHJ0bmxfZmlsbF9tY2FkZHJgIGZ1bmN0aW9uLlxuXG5UaGUgY29yZSBvZiBteSBpbnRlcmVzdCBoZXJlIGlzIHRoYXQgYG5sYV9wdXRgIGNhbGw6IGBubGFfcHV0KHNrYiwgSUZBX01VTFRJQ0FTVCwgZGV2LVx1MDAzZWFkZHJfbGVuLCBoYS1cdTAwM2VhZGRyKWAuIFRoaXMgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgbGluZSB3aGVyZSB0aGUgbXVsdGljYXN0IGhhcmR3YXJlIGFkZHJlc3MgKGBoYS1cdTAwM2VhZGRyYCkgaXMgYmVpbmcgcGFja2VkIGludG8gdGhlIE5ldGxpbmsgbWVzc2FnZSBidWZmZXIgKGBza2JgKSB1bmRlciB0aGUgYElGQV9NVUxUSUNBU1RgIGF0dHJpYnV0ZS4gVGhlIGBkZXYtXHUwMDNlYWRkcl9sZW5gIHBhcnQgaXMgaW1wb3J0YW50LCBhcyBpdCBzcGVjaWZpZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGhhcmR3YXJlIGFkZHJlc3Mgd2hpY2ggaXMgYWxzbyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIGRldmljZS5cblxuVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzLCBJIG5lZWQgYSBxdWljayByZWZyZXNoZXIgb24gdGhlIHN0cnVjdHVyZSBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgIGluIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYC4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIGZpZWxkcyBkZWZpbmVkIGluIHRoYXQgc3RydWN0dXJlIHRvIGNvbmZpcm0gdGhlIHVzYWdlIGFuZCBwdXJwb3NlIG9mIHRoZSBgaGEtXHUwMDNlYWRkcmAgcG9pbnRlci4gSSdsbCBjaGVjayBpdHMgZGVmaW5pdGlvbiB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGhhcmR3YXJlIGFkZHJlc3NlcyBhcmUgcmVwcmVzZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODY4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozODowOS43MjM4NjQxMDdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjY1MzU1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5ldGRldl9od19hZGRyIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjM1PXN0cnVjdCBza19idWZmO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM2LVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM3OnN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzgtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM4OjEyLjg5MDQwNDkwNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDc4NTU4ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERldmljZSBIZWFkZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBuZXR3b3JrIGRldmljZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBzbyBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBMZXQncyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYC4gU3BlY2lmaWNhbGx5LCBJJ20gYWltaW5nIGZvciBhcm91bmQgbGluZSAyMzcuIEknbSBob3BpbmcgdGhhdCBwYXJ0aWN1bGFyIHNlY3Rpb24gY29udGFpbnMgdGhlIGRlZmluaXRpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBJJ20gbG9va2luZyBmb3IgcmVnYXJkaW5nIHRoZSBiYXNpYyBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUgb3IgcGVyaGFwcyB0aGUgaW5pdGlhbCBzZXR1cCByb3V0aW5lcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBlbGVtZW50cyBsaWtlIGRhdGEgc3RydWN0dXJlcyBmb3IgcXVldWVzLCBpbnRlcnJ1cHQgbWFuYWdlbWVudCwgb3IgcG90ZW50aWFsbHkgZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcG9pbnRlcnMuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozODoxNS4zNjg5NjYzMjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM1OlxcdHN0cnVjdCBza19idWZmO1xcbiAyMzY6XFx0XFxuIDIzNzpcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIge1xcbiAyMzg6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuIDIzOTpcXHRcXHRzdHJ1Y3QgcmJfbm9kZVxcdFxcdG5vZGU7XFxuIDI0MDpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0XFx0YWRkcltNQVhfQUREUl9MRU5dO1xcbiAyNDE6XFx0XFx0dW5zaWduZWQgY2hhclxcdFxcdHR5cGU7XFxuIDI0MjpcXHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfTEFOXFx0XFx0MVxcbiAyNDM6XFx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX1NBTlxcdFxcdDJcXG4gMjQ0OlxcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9VTklDQVNUXFx0M1xcbiAyNDU6XFx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX01VTFRJQ0FTVFxcdDRcXG4gMjQ2OlxcdFxcdGJvb2xcXHRcXHRcXHRnbG9iYWxfdXNlO1xcbiAyNDc6XFx0XFx0aW50XFx0XFx0XFx0c3luY19jbnQ7XFxuIDI0ODpcXHRcXHRpbnRcXHRcXHRcXHRyZWZjb3VudDtcXG4gMjQ5OlxcdFxcdGludFxcdFxcdFxcdHN5bmNlZDtcXG4gMjUwOlxcdFxcdHN0cnVjdCByY3VfaGVhZFxcdFxcdHJjdV9oZWFkO1xcbiAyNTE6XFx0fTtcXG4gMjUyOlxcdFxcbiAyNTM6XFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3Qge1xcbiAyNTQ6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuIDI1NTpcXHRcXHRpbnRcXHRcXHRcXHRjb3VudDtcXG4gMjU2OlxcdFxcbiAyNTc6XFx0XFx0LyogQXV4aWxpYXJ5IHRyZWUgZm9yIGZhc3RlciBsb29rdXAgb24gYWRkaXRpb24gYW5kIGRlbGV0aW9uICovXFxuIDI1ODpcXHRcXHRzdHJ1Y3QgcmJfcm9vdFxcdFxcdHRyZWU7XFxuIDI1OTpcXHR9O1xcbiAyNjA6XFx0XFxuIDI2MTpcXHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobCkgKChsKS1cXHUwMDNlY291bnQpXFxuIDI2MjpcXHQjZGVmaW5lIG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkobCkgKG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobCkgPT0gMClcXG4gMjYzOlxcdCNkZWZpbmUgbmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbCkgXFxcXFxcbiAyNjQ6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShoYSwgXFx1MDAyNihsKS1cXHUwMDNlbGlzdCwgbGlzdClcXG4gMjY1OlxcdFxcbiAyNjY6XFx0I2RlZmluZSBuZXRkZXZfdWNfY291bnQoZGV2KSBuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KFxcdTAwMjYoZGV2KS1cXHUwMDNldWMpXFxuIDI2NzpcXHQjZGVmaW5lIG5ldGRldl91Y19lbXB0eShkZXYpIG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkoXFx1MDAyNihkZXYpLVxcdTAwM2V1YylcXG4gMjY4OlxcdCNkZWZpbmUgbmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikgXFxcXFxcbiAyNjk6XFx0XFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgXFx1MDAyNihkZXYpLVxcdTAwM2V1YylcXG4gMjcwOlxcdCNkZWZpbmUgbmV0ZGV2X2Zvcl9lYWNoX3N5bmNlZF91Y19hZGRyKF9oYSwgX2RldikgXFxcXFxcbiAyNzE6XFx0XFx0bmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoKF9oYSksIChfZGV2KSkgXFxcXFxcbiAyNzI6XFx0XFx0XFx0aWYgKChfaGEpLVxcdTAwM2VzeW5jX2NudClcXG4gMjczOlxcdFxcbiAyNzQ6XFx0I2RlZmluZSBuZXRkZXZfbWNfY291bnQoZGV2KSBuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KFxcdTAwMjYoZGV2KS1cXHUwMDNlbWMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM4OjE1LjM2OTM4MDM5NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODkxNTIwODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGhhYCBFbnRyeSBBZGRpdGlvbiBpbiB0aGUgTmV0d29yayBDb3JlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRob3NlIGBoYWAgKGhhcmR3YXJlIGFkZHJlc3MsIHByZXN1bWFibHkpIGVudHJpZXMgYXJlIGJlaW5nIGFkZGVkIGluLCBzYXksIGBkZXZfbWNfYWRkYCBvciBzaW1pbGFyIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEknbSB0aGlua2luZyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBwb2tpbmcgYXJvdW5kIGlzIGluIGBuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jYC4gVGhhdCBmaWxlIGxpa2VseSBoYW5kbGVzIGEgZ29vZCBjaHVuayBvZiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgYW5kIG9wZXJhdGlvbnMgZm9yIG1hbmFnaW5nIHRob3NlIGxpc3RzIG9mIGRldmljZSBhZGRyZXNzZXMuIEl0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgbWVhdCBvZiB0aGUgYGhhYCBpbnNlcnRpb24gbG9naWMgYW5kIGhvcGVmdWxseSB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MgYmVoaW5kIGl0LiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjk0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozODoxNy4yNjA5MDM3NDZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzUyODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faHdfYWRkcl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NTM9X19od19hZGRyX2NyZWF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc0LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NzU6c3RhdGljIGludCBfX2h3X2FkZHJfYWRkX2V4KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzYtXFx0XFx0XFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMyLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMzOnN0YXRpYyBpbnQgX19od19hZGRyX2FkZChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNC1cXHRcXHRcXHQgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzYte1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3OlxcdHJldHVybiBfX2h3X2FkZHJfYWRkX2V4KGxpc3QsIGFkZHIsIGFkZHJfbGVuLCBhZGRyX3R5cGUsIGZhbHNlLCBmYWxzZSxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzOC1cXHRcXHRcXHRcXHQwLCBmYWxzZSk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTIxMj1zdGF0aWMgaW50IF9faHdfYWRkcl9zeW5jX29uZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdG9fbGlzdCxcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjE3LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjE4OlxcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgodG9fbGlzdCwgaGEtXFx1MDAzZWFkZHIsIGFkZHJfbGVuLCBoYS1cXHUwMDNldHlwZSxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxOS1cXHRcXHRcXHQgICAgICAgZmFsc2UsIHRydWUsIGhhLVxcdTAwM2VzeW5jX2NudCwgZmFsc2UpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz02Nzk9aW50IGRldl9hZGRyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjg4LVxcdG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Njg5OlxcdGVyciA9IF9faHdfYWRkcl9hZGQoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBzaXplb2YoYWRkciksXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02OTAtXFx0XFx0XFx0ICAgIE5FVERFVl9IV19BRERSX1RfTEFOKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NzI5PWludCBkZXZfYWRkcl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzM4LVxcdFxcdHJldHVybiBlcnI7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo3Mzk6XFx0ZXJyID0gX19od19hZGRyX2FkZChcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfYWRkcnMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sIGFkZHJfdHlwZSk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03NDAtXFx0aWYgKCFlcnIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTc5Mj1pbnQgZGV2X3VjX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc5Ni1cXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjc5NzpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFxcdTAwMjZkZXYtXFx1MDAzZXVjLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzk4LVxcdFxcdFxcdCAgICAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QsIHRydWUsIGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz04MTU9aW50IGRldl91Y19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODE5LVxcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODIwOlxcdGVyciA9IF9faHdfYWRkcl9hZGQoXFx1MDAyNmRldi1cXHUwMDNldWMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04MjEtXFx0XFx0XFx0ICAgIE5FVERFVl9IV19BRERSX1RfVU5JQ0FTVCk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk3Nz1pbnQgZGV2X21jX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4MS1cXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjk4MjpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFxcdTAwMjZkZXYtXFx1MDAzZW1jLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTgzLVxcdFxcdFxcdCAgICAgICBORVRERVZfSFdfQUREUl9UX01VTFRJQ0FTVCwgdHJ1ZSwgZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk5Mj1zdGF0aWMgaW50IF9fZGV2X21jX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05OTctXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5OTg6XFx0ZXJyID0gX19od19hZGRyX2FkZF9leChcXHUwMDI2ZGV2LVxcdTAwM2VtYywgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk5OS1cXHRcXHRcXHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIGdsb2JhbCwgZmFsc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM4OjE3LjMxNTI1OTYwN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjg3MTkwODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBEZXZpY2UgQWRkcmVzcyBDcmVhdGlvbiBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgbmV0d29yayBoYXJkd2FyZSBhZGRyZXNzZXMgYXJlIGJlaW5nIGNyZWF0ZWQsIHNvIEknbSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBsaWtlbHkgc291cmNlIGNvZGUuIExldCdzIHN0YXJ0IHdpdGggYF9faHdfYWRkcl9jcmVhdGVgIHdpdGhpbiBgbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY2AuIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gaG9sZHMgdGhlIGNvcmUgbG9naWMgZm9yIGdlbmVyYXRpbmcgb3IgYXNzaWduaW5nIHRob3NlIE1BQyBhbmQgb3RoZXIgaGFyZHdhcmUgYWRkcmVzc2VzLiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IGNlbnRyYWwgdG8gdGhlIG92ZXJhbGwgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozODoxOS4wMDI0NTM5ODJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0fVxcbiAgNTE6XFx0XFxuICA1MjpcXHRzdGF0aWMgc3RydWN0IG5ldGRldl9od19hZGRyKlxcbiAgNTM6XFx0X19od19hZGRyX2NyZWF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuICA1NDpcXHRcXHRcXHQgdW5zaWduZWQgY2hhciBhZGRyX3R5cGUsIGJvb2wgZ2xvYmFsLCBib29sIHN5bmMpXFxuICA1NTpcXHR7XFxuICA1NjpcXHRcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbiAgNTc6XFx0XFx0aW50IGFsbG9jX3NpemU7XFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdGFsbG9jX3NpemUgPSBzaXplb2YoKmhhKTtcXG4gIDYwOlxcdFxcdGlmIChhbGxvY19zaXplIFxcdTAwM2MgTDFfQ0FDSEVfQllURVMpXFxuICA2MTpcXHRcXHRcXHRhbGxvY19zaXplID0gTDFfQ0FDSEVfQllURVM7XFxuICA2MjpcXHRcXHRoYSA9IGttYWxsb2MoYWxsb2Nfc2l6ZSwgR0ZQX0FUT01JQyk7XFxuICA2MzpcXHRcXHRpZiAoIWhhKVxcbiAgNjQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA2NTpcXHRcXHRtZW1jcHkoaGEtXFx1MDAzZWFkZHIsIGFkZHIsIGFkZHJfbGVuKTtcXG4gIDY2OlxcdFxcdGhhLVxcdTAwM2V0eXBlID0gYWRkcl90eXBlO1xcbiAgNjc6XFx0XFx0aGEtXFx1MDAzZXJlZmNvdW50ID0gMTtcXG4gIDY4OlxcdFxcdGhhLVxcdTAwM2VnbG9iYWxfdXNlID0gZ2xvYmFsO1xcbiAgNjk6XFx0XFx0aGEtXFx1MDAzZXN5bmNlZCA9IHN5bmMgPyAxIDogMDtcXG4gIDcwOlxcdFxcdGhhLVxcdTAwM2VzeW5jX2NudCA9IDA7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHJldHVybiBoYTtcXG4gIDczOlxcdH1cXG4gIDc0OlxcdFxcbiAgNzU6XFx0c3RhdGljIGludCBfX2h3X2FkZHJfYWRkX2V4KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbiAgNzY6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcXG4gIDc3OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYyxcXG4gIDc4OlxcdFxcdFxcdFxcdCAgICBpbnQgc3luY19jb3VudCwgYm9vbCBleGNsdXNpdmUpXFxuICA3OTpcXHR7XFxuICA4MDpcXHRcXHRzdHJ1Y3QgcmJfbm9kZSAqKmluc19wb2ludCA9IFxcdTAwMjZsaXN0LVxcdTAwM2V0cmVlLnJiX25vZGUsICpwYXJlbnQgPSBOVUxMO1xcbiAgODE6XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0aWYgKGFkZHJfbGVuIFxcdTAwM2UgTUFYX0FERFJfTEVOKVxcbiAgODQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdHdoaWxlICgqaW5zX3BvaW50KSB7XFxuICA4NzpcXHRcXHRcXHRpbnQgZGlmZjtcXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0XFx0aGEgPSByYl9lbnRyeSgqaW5zX3BvaW50LCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIG5vZGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozODoxOS4wMDI2MzE2MjJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTA3MjkyNzMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBBZGRyZXNzIER1bXAgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtdWx0aWNhc3QgYWRkcmVzcyBoYW5kbGluZyB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGVzZSBhZGRyZXNzZXMgYXJlIGR1bXBlZCBhbmQgaGFuZGxlZCB3aXRoIG5ldGxpbmsuIEZpcnN0LCBJIHNlZSB0aGF0IGBfX2h3X2FkZHJfY3JlYXRlYCBkb2VzIGEgc3RyYWlnaHQgYG1lbWNweWAgZnJvbSB0aGUgcHJvdmlkZWQgYWRkcmVzcyAoYGFkZHJgKSB0byB0aGUgaGFyZHdhcmUgYWRkcmVzcyBzdHJ1Y3R1cmUgKGBoYS1cdTAwM2VhZGRyYCkuIFRoZSBsZW5ndGggaXMgZGV0ZXJtaW5lZCBieSBgZGV2LVx1MDAzZWFkZHJfbGVuYCwgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cblRoZW4sIGxvb2tpbmcgYXQgYHJ0bmxfZmlsbF9tY2FkZHJgLCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgYG5sYV9wdXRgIGlzIHVzZWQgdG8gaW5zZXJ0IHRoaXMgaGFyZHdhcmUgYWRkcmVzcyBpbnRvIHRoZSBuZXRsaW5rIG1lc3NhZ2UgdXNpbmcgYElGQV9NVUxUSUNBU1RgLiBJdCB1c2VzIHRoZSAqZXhhY3QqIHNhbWUgbGVuZ3RoLCBgZGV2LVx1MDAzZWFkZHJfbGVuYCwgdGhhdCB3YXMgdXNlZCBkdXJpbmcgdGhlIGFkZHJlc3MgY3JlYXRpb24uIFRoYXQncyBnb29kLCBjb25zaXN0ZW50IGRhdGEgaGFuZGxpbmcgc28gZmFyLiBBbmQgaW1wb3J0YW50bHksIGBubGFfcHV0YCB0YWtlcyBjYXJlIG9mIHBhZGRpbmcgdGhlIGF0dHJpYnV0ZSB0byA0LWJ5dGUgYWxpZ25tZW50LCB3aGljaCBJIGV4cGVjdC5cblxuTm93LCBJJ20gZXhhbWluaW5nIGBydG5sX2R1bXBfbWNhZGRyYCwgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBkdW1waW5nIHRoZXNlIG11bHRpY2FzdCBhZGRyZXNzZXMuIEkgY2FuIHNlZSBpdCdzIHRha2luZyBhIGBzdHJ1Y3Qgc2tfYnVmZmAgZm9yIHRoZSBuZXRsaW5rIG1lc3NhZ2UsIGEgYHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrYCB0aGF0IGhvbGRzIHRoZSBzdGF0ZSwgYW5kIHBvdGVudGlhbGx5IGFuIGBpZmluZGV4YCB0byBmaWx0ZXIgYnkuIEl0IGFwcGVhcnMgaXQgd2lsbCBpdGVyYXRlIHRocm91Z2ggZWl0aGVyIGEgc3BlY2lmaWMgZGV2aWNlIG9yIGFsbCBkZXZpY2VzLCBkZXBlbmRpbmcgb24gdGhlIGBpZmluZGV4YCB2YWx1ZSBwYXNzZWQgaW4gdGhlIHJlcXVlc3QuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBpbiB0aGF0IGNhbGxiYWNrJ3MgY29udGV4dCwgYGNiLVx1MDAzZWN0eGAuIFRoYW5rZnVsbHksIGl0J3MgbWVudGlvbmVkIHRoYXQgdGhlIG5ldGxpbmsgY29yZSBpdHNlbGYgemVyby1maWxscyBgY2ItXHUwMDNlY3R4YCBhdCB0aGUgc3RhcnQgb2YgYSBkdW1wLiBUaGF0J3MgYSByZWxpYWJsZSBpbml0aWFsaXphdGlvbiBhbmQgZ29vZCB0byBrbm93LiBOb3cgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgYGZvcl9lYWNoX25ldGRldl9kdW1wYCBtYWNybyB3b3JrcywgYXMgaXQgc2VlbXMgdG8gYmUgdGhlIG9uZSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgZGV2aWNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBJJ2xsIHNlYXJjaCBmb3IgdGhpcyBtYWNybyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTU5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzg6MjguMDc1NTYyMTE3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA5NDExOTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvcl9lYWNoX25ldGRldl9kdW1wXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIi5jbGFuZy1mb3JtYXQ9NzE9Rm9yRWFjaE1hY3JvczpcXG4tLVxcbi5jbGFuZy1mb3JtYXQtMzQ2LSAgLSAnZm9yX2VhY2hfbmV0ZGV2X2NvbnRpbnVlX3JldmVyc2UnXFxuLmNsYW5nLWZvcm1hdDozNDc6ICAtICdmb3JfZWFjaF9uZXRkZXZfZHVtcCdcXG4uY2xhbmctZm9ybWF0LTM0OC0gIC0gJ2Zvcl9lYWNoX25ldGRldl9mZWF0dXJlJ1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0zMzcxPWludCBjYWxsX25ldGRldmljZV9ub3RpZmllcnNfaW5mbyh1bnNpZ25lZCBsb25nIHZhbCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzM5My1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMzOTQ6I2RlZmluZSBmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGQsIGlmaW5kZXgpXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzM5NS1cXHRmb3IgKDsgKGQgPSB4YV9maW5kKFxcdTAwMjYobmV0KS1cXHUwMDNlZGV2X2J5X2luZGV4LCBcXHUwMDI2aWZpbmRleCxcXHRcXHRcXFxcXFxuLS1cXG5uZXQvODAyMXEvdmxhbnByb2MuYz0xNjY9c3RhdGljIHZvaWQgKnZsYW5fc2VxX2Zyb21faW5kZXgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5wcm9jLmMtMTcwLVxcbm5ldC84MDIxcS92bGFucHJvYy5jOjE3MTpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChzZXFfZmlsZV9uZXQoc2VxKSwgZGV2LCBpZmluZGV4KSB7XFxubmV0LzgwMjFxL3ZsYW5wcm9jLmMtMTcyLVxcdFxcdGlmICghaXNfdmxhbl9kZXYoZGV2KSlcXG4tLVxcbm5ldC9jb3JlL25ldC1wcm9jZnMuYz0xMD1zdGF0aWMgdm9pZCAqZGV2X3NlcV9mcm9tX2luZGV4KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcXG4tLVxcbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0xNC1cXG5uZXQvY29yZS9uZXQtcHJvY2ZzLmM6MTU6XFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAoc2VxX2ZpbGVfbmV0KHNlcSksIGRldiwgaWZpbmRleCkge1xcbm5ldC9jb3JlL25ldC1wcm9jZnMuYy0xNi1cXHRcXHQqcG9zID0gZGV2LVxcdTAwM2VpZmluZGV4O1xcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sX3VzZXIuYz04MT1uZXRkZXZfbmxfcGFnZV9wb29sX2dldF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmMtOTgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGFnZV9wb29sc19sb2NrKTtcXG5uZXQvY29yZS9wYWdlX3Bvb2xfdXNlci5jOjk5OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgbmV0ZGV2LCBzdGF0ZS1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9jb3JlL3BhZ2VfcG9vbF91c2VyLmMtMTAwLVxcdFxcdC8qIEVpdGhlciB0aGUgcHJvdmlkZWQgaWZpbmRleCBkb2Vzbid0IGV4aXN0IG9yIGRvbmUgZHVtcGluZyAqL1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjU0ND1zdGF0aWMgaW50IHJ0bmxfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjYxNi1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyNjE3OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKHRndF9uZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjYxOC1cXHRcXHRpZiAobGlua19kdW1wX2ZpbHRlcmVkKGRldiwgbWFzdGVyX2lkeCwga2luZF9vcHMpKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NDY1NT1zdGF0aWMgaW50IHJ0bmxfZHVtcF9tY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDY4NC1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0Njg1OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00Njg2LVxcdFxcdGVyciA9IHJ0bmxfZHVtcF9tY2FkZHJfZGV2KGRldiwgc2tiLCBjYiwgXFx1MDAyNmN0eC1cXHUwMDNlYWRkcl9pZHgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz01MjcxPXN0YXRpYyBpbnQgcnRubF9mZGJfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01MzAwLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjUzMDE6XFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTUzMDItXFx0XFx0aWYgKGJycG9ydF9pZHggXFx1MDAyNlxcdTAwMjYgKGRldi1cXHUwMDNlaWZpbmRleCAhPSBicnBvcnRfaWR4KSlcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTY2MDQ9c3RhdGljIGludCBydG5sX3N0YXRzX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNjYzNS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo2NjM2OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy02NjM3LVxcdFxcdGVyciA9IHJ0bmxfZmlsbF9zdGF0c2luZm8oc2tiLCBkZXYsIFJUTV9ORVdTVEFUUyxcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz02Mzg9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTY0Ny1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2V0aHRvb2wvbmV0bGluay5jOjY0ODpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2Vwb3NfaWZpbmRleCkge1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYy02NDktXFx0XFx0bmV0ZGV2X2hvbGQoZGV2LCBcXHUwMDI2ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jPTgwNz1zdGF0aWMgaW50IGV0aG5sX3BlcnBoeV9kdW1wX2FsbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy04MTctXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo4MTg6XFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGV0aG5sX2N0eC1cXHUwMDNlcG9zX2lmaW5kZXgpIHtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtODE5LVxcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4tLVxcbm5ldC9ldGh0b29sL3R1bm5lbHMuYz0yNDE9aW50IGV0aG5sX3R1bm5lbF9pbmZvX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvZXRodG9vbC90dW5uZWxzLmMtMjQ5LVxcdHJ0bmxfbG9jaygpO1xcbm5ldC9ldGh0b29sL3R1bm5lbHMuYzoyNTA6XFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9ldGh0b29sL3R1bm5lbHMuYy0yNTEtXFx0XFx0ZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmM9MTkzMD1zdGF0aWMgaW50IGluZXRfZHVtcF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0xOTc0LVxcbm5ldC9pcHY0L2RldmluZXQuYzoxOTc1OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKHRndF9uZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTE5NzYtXFx0XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jPTI0Mzg9c3RhdGljIGludCBpbmV0X25ldGNvbmZfZHVtcF9kZXZjb25mKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjQ2Ni1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjQvZGV2aW5ldC5jOjI0Njc6XFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9pcHY0L2RldmluZXQuYy0yNDY4LVxcdFxcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NzM4PXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9kdW1wX2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzY2LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjc2NzpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjgtXFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTQzNj1zdGF0aWMgaW50IGluZXQ2X2R1bXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0ODAtXFx0Y2ItXFx1MDAzZXNlcSA9IGluZXQ2X2Jhc2Vfc2VxKHRndF9uZXQpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTQ4MTpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcCh0Z3RfbmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ4Mi1cXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02MTc3PXN0YXRpYyBpbnQgaW5ldDZfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02MTk4LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjYxOTk6XFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjIwMC1cXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbi0tXFxubmV0L21jdHAvZGV2aWNlLmM9MTE0PXN0YXRpYyBpbnQgbWN0cF9kdW1wX2FkZHJpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9tY3RwL2RldmljZS5jLTEzNC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L21jdHAvZGV2aWNlLmM6MTM1OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBtY2ItXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvbWN0cC9kZXZpY2UuYy0xMzYtXFx0XFx0aWYgKGlmaW5kZXggXFx1MDAyNlxcdTAwMjYgaWZpbmRleCAhPSBkZXYtXFx1MDAzZWlmaW5kZXgpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmM9MTM0OD1zdGF0aWMgaW50IG1wbHNfbmV0Y29uZl9kdW1wX2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYy0xMzc1LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvbXBscy9hZl9tcGxzLmM6MTM3NjpcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L21wbHMvYWZfbXBscy5jLTEzNzctXFx0XFx0bWRldiA9IG1wbHNfZGV2X3JjdShkZXYpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0xOTExPXN0YXRpYyBpbnQgdGNfZHVtcF9xZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE5MzYtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoxOTM3OlxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTE5MzgtXFx0XFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozODoyOS41ODQ5Nzg5MzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQzNjYzMDAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgZHVtcGl0YCBGdW5jdGlvbiBJbXBsZW1lbnRhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBoZXJlIGZvciBpbXBsZW1lbnRpbmcgdGhpcyBwYXJ0aWN1bGFyIGBkdW1waXRgIGZ1bmN0aW9uLiBMZXQncyBzZWUgaG93IG90aGVycyBoYXZlIGRvbmUgaXQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgZXhpc3RpbmcgZXhhbXBsZXMgd2l0aGluIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGUgYHJ0bmxfc3RhdHNfZHVtcGAgb3IgYGluZXRfZHVtcF9hZGRyYCBpbXBsZW1lbnRhdGlvbnMgc2VlbSBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLCBsaWtlbHkgZGVhbGluZyB3aXRoIHNpbWlsYXIgbmV0d29yay1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBhbmQgaW50ZXJhY3Rpb25zLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpdGVyYXRlLCBmb3JtYXQsIGFuZCB1bHRpbWF0ZWx5IGR1bXAgdGhlaXIgaW5mb3JtYXRpb24uXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUuIEknbGwgc3RhcnQgYnkgcmVhZGluZyB0aGUgYHJ0bmxfc3RhdHNfZHVtcGAgZnVuY3Rpb24sIHByb2JhYmx5IGxvY2F0ZWQgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgc2luY2UgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgUlROTC1yZWxhdGVkIGNvZGUuIE15IGdvYWwgaXMgdG8gZXh0cmFjdCB0aGUgZ2VuZXJhbCBwYXR0ZXJuIGZvciBhIHdlbGwtZGVzaWduZWQga2VybmVsIGR1bXAgZnVuY3Rpb24uIFRoYXQgbGlrZWx5IG1lYW5zIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdywgdGhlIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhIGl0c2VsZi4gRnJvbSB0aGVyZSwgSSBjYW4gYXBwbHkgdGhvc2UgbGVzc29ucyB0byB0aGUgY3VycmVudCB0YXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIyOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM4OjMyLjAyMTYxMjIwOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjYwMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjYwMDpcXHRcXG42NjAxOlxcdFxcdHJldHVybiBlcnI7XFxuNjYwMjpcXHR9XFxuNjYwMzpcXHRcXG42NjA0OlxcdHN0YXRpYyBpbnQgcnRubF9zdGF0c19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG42NjA1OlxcdHtcXG42NjA2OlxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNiLVxcdTAwM2VleHRhY2s7XFxuNjYwNzpcXHRcXHRzdHJ1Y3QgcnRubF9zdGF0c19kdW1wX2ZpbHRlcnMgZmlsdGVycztcXG42NjA4OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbjY2MDk6XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzID0gTkxNX0ZfTVVMVEk7XFxuNjYxMDpcXHRcXHRzdHJ1Y3QgaWZfc3RhdHNfbXNnICppZnNtO1xcbjY2MTE6XFx0XFx0c3RydWN0IHtcXG42NjEyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaWZpbmRleDtcXG42NjEzOlxcdFxcdFxcdGludCBpZHhhdHRyO1xcbjY2MTQ6XFx0XFx0XFx0aW50IHByaXZpZHg7XFxuNjYxNTpcXHRcXHR9ICpjdHggPSAodm9pZCAqKWNiLVxcdTAwM2VjdHg7XFxuNjYxNjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbjY2MTc6XFx0XFx0aW50IGVycjtcXG42NjE4OlxcdFxcbjY2MTk6XFx0XFx0Y2ItXFx1MDAzZXNlcSA9IG5ldC1cXHUwMDNlZGV2X2Jhc2Vfc2VxO1xcbjY2MjA6XFx0XFxuNjYyMTpcXHRcXHRlcnIgPSBydG5sX3ZhbGlkX3N0YXRzX3JlcShjYi1cXHUwMDNlbmxoLCBjYi1cXHUwMDNlc3RyaWN0X2NoZWNrLCB0cnVlLCBleHRhY2spO1xcbjY2MjI6XFx0XFx0aWYgKGVycilcXG42NjIzOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNjYyNDpcXHRcXG42NjI1OlxcdFxcdGlmc20gPSBubG1zZ19kYXRhKGNiLVxcdTAwM2VubGgpO1xcbjY2MjY6XFx0XFx0aWYgKCFpZnNtLVxcdTAwM2VmaWx0ZXJfbWFzaykge1xcbjY2Mjc6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmlsdGVyIG1hc2sgbXVzdCBiZSBzZXQgZm9yIHN0YXRzIGR1bXBcXFwiKTtcXG42NjI4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjY2Mjk6XFx0XFx0fVxcbjY2MzA6XFx0XFxuNjYzMTpcXHRcXHRlcnIgPSBydG5sX3N0YXRzX2dldF9wYXJzZShjYi1cXHUwMDNlbmxoLCBpZnNtLVxcdTAwM2VmaWx0ZXJfbWFzaywgXFx1MDAyNmZpbHRlcnMsXFxuNjYzMjpcXHRcXHRcXHRcXHRcXHQgICBleHRhY2spO1xcbjY2MzM6XFx0XFx0aWYgKGVycilcXG42NjM0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNjYzNTpcXHRcXG42NjM2OlxcdFxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG42NjM3OlxcdFxcdFxcdGVyciA9IHJ0bmxfZmlsbF9zdGF0c2luZm8oc2tiLCBkZXYsIFJUTV9ORVdTVEFUUyxcXG42NjM4OlxcdFxcdFxcdFxcdFxcdFxcdCAgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuNjYzOTpcXHRcXHRcXHRcXHRcXHRcXHQgIGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgMCxcXG42NjQwOlxcdFxcdFxcdFxcdFxcdFxcdCAgZmxhZ3MsIFxcdTAwMjZmaWx0ZXJzLFxcbjY2NDE6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Y3R4LVxcdTAwM2VpZHhhdHRyLCBcXHUwMDI2Y3R4LVxcdTAwM2Vwcml2aWR4LFxcbjY2NDI6XFx0XFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbjY2NDM6XFx0XFx0XFx0LyogSWYgd2UgcmFuIG91dCBvZiByb29tIG9uIHRoZSBmaXJzdCBtZXNzYWdlLFxcbjY2NDQ6XFx0XFx0XFx0ICogd2UncmUgaW4gdHJvdWJsZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzg6MzIuMDIxODM0Nzg4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyNTM5NzUyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXVsdGljYXN0IEFkZHJlc3MgRHVtcCBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBjaGVja2luZyBgcnRubF92YWxpZF9kdW1wX21jYWRkcl9yZXFgLiBUaGlzIGZ1bmN0aW9uIHZhbGlkYXRlcyB0aGUgaW5jb21pbmcgZHVtcCByZXF1ZXN0LCBzcGVjaWZpY2FsbHkgZW5zdXJpbmcgdGhlIGhlYWRlciBpc24ndCBtZXNzZWQgdXAgYW5kIHRoZXJlJ3Mgbm8gZXh0cmFuZW91cyBkYXRhLiBJdCB2ZXJpZmllcyBgaWZhX3ByZWZpeGxlbmAsIGBpZmFfZmxhZ3NgLCBhbmQgYGlmYV9zY29wZWAgYXJlIHplcm8sIGFuZCB0aGF0IG5vIGFkZGl0aW9uYWwgYXR0cmlidXRlcyBhcmUgcHJlc2VudC4gVGhlIGludGVyZmFjZSBpbmRleCBpcyBleHRyYWN0ZWQgYW5kIHJldHVybmVkIHZpYSBhIHBvaW50ZXIuIE1ha2VzIHNlbnNlIOKAkyBjbGVhbiBhbmQgc3RyYWlnaHRmb3J3YXJkIHZhbGlkYXRpb24gYmVmb3JlIHByb2NlZWRpbmcuXG5cbk5vdywgSSdtIHJldmlzaXRpbmcgYHJ0bmxfZmlsbF9tY2FkZHJgLiBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgbXVsdGljYXN0IGFkZHJlc3MgaW5mb3JtYXRpb24gaXMgYXNzZW1ibGVkIGZvciB0aGUgbmV0bGluayBtZXNzYWdlLiBJIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGBubG1zZ19wdXRgIGFsbG9jYXRlcyBhbmQgemVyby1wYWRzIHRoZSBtZXNzYWdlLCBhbmQgdGhlbiB0aGUgY3JpdGljYWwgZmllbGRzIGluIGBpZmFkZHJtc2dgIGFyZSBwb3B1bGF0ZWQ6IGZhbWlseSAoQUZfUEFDS0VUKSwgcHJlZml4IGxlbmd0aCAoMCksIGZsYWdzIChiYXNlZCBvbiBgaGEtXHUwMDNlZ2xvYmFsX3VzZWApLCBzY29wZSAobGluayksIGFuZCB0aGUgaW50ZXJmYWNlIGluZGV4LiBObyBnbGFyaW5nIGluaXRpYWxpemF0aW9uIGlzc3VlcyB0aGVyZS4gQWxsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBzZXQsIGFuZCB0aGUgc3RydWN0dXJlIGRvZXNuJ3QgaGF2ZSBhbnkgcGFkZGluZyBob2xlcy4gVGhlbiB3ZSBoYXZlIHRoZSBOZXR3b3JrIExpbmsgQXR0cmlidXRlcyAoTkxBKSBzZWN0aW9uIGZvciB0aGUgTUFDIGFkZHJlc3MgYW5kIHVzZXIgY291bnQsIHdoaWNoIGlzIGFzIGV4cGVjdGVkLiBgbmxhX3B1dGAgaXMgdXNlZCB0byB3cml0ZSBpbiB0aGUgTUFDIGFkZHJlc3MgdXNpbmcgYGRldi1cdTAwM2VhZGRyX2xlbmAgYXMgYSBsZW5ndGgsIGVuc3VyaW5nIHRoYXQgd2UgcmVhZCB0aGUgYWRkcmVzcyBjb3JyZWN0bHkgYW5kIGFkZCB0aGUgY29ycmVjdCBhbW91bnQgb2YgcGFkZGluZyBhZnRlciBpdC5cblxuTmV4dCwgSSdtIHZlcmlmeWluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4gVGhlIGhlYWRlciBpcyBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkLCBhbmQgYWxsIHN0cnVjdCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQuIFRoZSBuZXR3b3JrIGxpbmsgYXR0cmlidXRlcyAoTkxBKSB1c2Uga25vd24gbGVuZ3RocyBhbmQgdGhlIGNvcnJlY3QgYnl0ZSBzaXplcy4gSSdtIGFsc28gY29uZmlybWluZyB0aGF0IHRoZSBgaWZpbmRleGAgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBpbiBgcnRubF9kdW1wX21jYWRkcmAgYW5kIHRoYXQgdGhlIGBjdHhgIHN0cnVjdCBpcyBpbml0aWFsaXplZCBhcyBwYXJ0IG9mIHRoZSBuZXRsaW5rIGNvcmUncyBjYWxsYmFjayB6ZXJvaW5nIGJlZm9yZSB0aGUgZHVtcCBzdGFydC4gVGhlIHBvaW50ZXIgYFx1MDAyNmN0eC1cdTAwM2VhZGRyX2lkeGAgaXMgdXNlZCwgdGhlIG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQsIHNvIG5vIGlzc3VlcyB0aGVyZS5cblxuRmluYWxseSwgSSdtIGRvdWJsZS1jaGVja2luZyB0aGUgbG9ja2luZy4gSSBjYW4gc2VlIHRoYXQgYG5ldGlmX2FkZHJfbG9ja19iaChkZXYpYCBpcyBoZWxkIGR1cmluZyBkZXZpY2UgaXRlcmF0aW9uLCB3aGljaCBpcyBjcnVjaWFsIGZvciBjb25jdXJyZW5jeSBzYWZldHkuIEFsc28sIGByY3VfcmVhZF9sb2NrKClgIGlzIHVzZWQgZHVyaW5nIHRoZSBkZXZpY2UgaXRlcmF0aW9uLiBUaGlzIHNob3VsZCBiZSBlbm91Z2ggdG8gbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRoZSBkdW1wLlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUuIENvdWxkIGBoYS1cdTAwM2VhZGRyYCBjb250YWluIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaWYgYGRldi1cdTAwM2VhZGRyX2xlbmAgaXMgc29tZWhvdyBjaGFuZ2VkIGFmdGVyIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyBoYXMgYmVlbiBhZGRlZD8gTm90IHJlYWxseSwgYXMgYGRldi1cdTAwM2VhZGRyX2xlbmAgaXMgZml4ZWQgZm9yIGEgbmV0X2RldmljZS4gQ291bGQgdGhlIGBjdHhgIHN0cnVjdCBzaXplIGV4Y2VlZCBgc2l6ZW9mKGNiLVx1MDAzZWN0eClgPyBJJ20gY2hlY2tpbmcgdGhlIGBzdHJ1Y3QgbmV0bGlua19jYWxsYmFja2AgaW4gYGluY2x1ZGUvbGludXgvbmV0bGluay5oYCB0byBtYWtlIHN1cmUgaXQncyBsYXJnZSBlbm91Z2guIEl0IHNlZW1zIGZpbmU7IG5vIG92ZXJmbG93IGlzc3VlcyBhcmUgdmlzaWJsZS4gTG9va3MgbGlrZSB3ZSBhcmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNjYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzg6MzkuMjc1ODEyMzQ0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk3MzkzMTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0bGluay5oPTI1MT1uZXRsaW5rX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0bGluay5oLTI4MC1cXG5pbmNsdWRlL2xpbnV4L25ldGxpbmsuaDoyODE6c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sge1xcbmluY2x1ZGUvbGludXgvbmV0bGluay5oLTI4Mi1cXHRzdHJ1Y3Qgc2tfYnVmZlxcdFxcdCpza2I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAyOjM4OjQxLjY3MzIxMDMxNloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc4MjE2OTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIE5ldGxpbmsgSGVhZGVyIFN0cnVjdHVyZSoqXG5cbk9rYXksIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29yZSBOZXRsaW5rIHN0cnVjdHVyZSBkZWZpbml0aW9ucy4gTGV0J3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9uZXRsaW5rLmhgIGFuZCB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDI4MS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBmb3VuZGF0aW9uYWwgYHN0cnVjdCBubG1zZ2hkcmAgZGVmaW5pdGlvbiB0aGVyZSwgYW5kIHRoYXQncyBwcm9iYWJseSB3aGVyZSBJJ2xsIHNlZSB0aGUgYmFzaWMgbWVzc2FnZSBoZWFkZXIgbGF5b3V0LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgbGVuZ3RoLCB0eXBlLCBmbGFncywgc2VxdWVuY2UgbnVtYmVyLCBhbmQgUElEIGFyZSBkZWZpbmVkLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gR290dGEgY29uZmlybSB0aGUgdXN1YWwgc3VzcGVjdHMuIEdvdHRhIGNvbmZpcm0gdGhhdCB0aGUgaGVhZGVyIHN0cnVjdHVyZSBoYXNuJ3QgY2hhbmdlZCBpbiBzb21lIHVuZXhwZWN0ZWQgd2F5IGluIG1vcmUgcmVjZW50IGtlcm5lbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDEzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzg6NDMuOTUxNDMwNjQ3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0bGluay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MDpcXHRcXG4gMjgxOlxcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrIHtcXG4gMjgyOlxcdFxcdHN0cnVjdCBza19idWZmXFx0XFx0KnNrYjtcXG4gMjgzOlxcdFxcdGNvbnN0IHN0cnVjdCBubG1zZ2hkclxcdCpubGg7XFxuIDI4NDpcXHRcXHRpbnRcXHRcXHRcXHQoKmR1bXApKHN0cnVjdCBza19idWZmICogc2tiLFxcbiAyODU6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcXG4gMjg2OlxcdFxcdGludFxcdFxcdFxcdCgqZG9uZSkoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcXG4gMjg3OlxcdFxcdHZvaWRcXHRcXHRcXHQqZGF0YTtcXG4gMjg4OlxcdFxcdC8qIHRoZSBtb2R1bGUgdGhhdCBkdW1wIGZ1bmN0aW9uIGJlbG9uZyB0byAqL1xcbiAyODk6XFx0XFx0c3RydWN0IG1vZHVsZVxcdFxcdCptb2R1bGU7XFxuIDI5MDpcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrXFx0KmV4dGFjaztcXG4gMjkxOlxcdFxcdHUxNlxcdFxcdFxcdGZhbWlseTtcXG4gMjkyOlxcdFxcdHUxNlxcdFxcdFxcdGFuc3dlcl9mbGFncztcXG4gMjkzOlxcdFxcdHUzMlxcdFxcdFxcdG1pbl9kdW1wX2FsbG9jO1xcbiAyOTQ6XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0cHJldl9zZXEsIHNlcTtcXG4gMjk1OlxcdFxcdGludFxcdFxcdFxcdGZsYWdzO1xcbiAyOTY6XFx0XFx0Ym9vbFxcdFxcdFxcdHN0cmljdF9jaGVjaztcXG4gMjk3OlxcdFxcdHVuaW9uIHtcXG4gMjk4OlxcdFxcdFxcdHU4XFx0XFx0Y3R4W05FVExJTktfQ1RYX1NJWkVdO1xcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHRcXHQvKiBhcmdzIGlzIGRlcHJlY2F0ZWQuIENhc3QgYSBzdHJ1Y3Qgb3ZlciBjdHggaW5zdGVhZFxcbiAzMDE6XFx0XFx0XFx0ICogZm9yIHByb3BlciB0eXBlIHNhZmV0eS5cXG4gMzAyOlxcdFxcdFxcdCAqL1xcbiAzMDM6XFx0XFx0XFx0bG9uZ1xcdFxcdGFyZ3NbNl07XFxuIDMwNDpcXHRcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMjozODo0My45NTE1MTQxMzdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk1NzM5MjU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgYGN0eGAgaXMgYmVpbmcgdHJlYXRlZCBhcyBgTkVUTElOS19DVFhfU0laRWAgKHdoaWNoIGlzIHVzdWFsbHkgZWl0aGVyIDQ4IG9yIDY0IGJ5dGVzKSwgYnV0IGBzaXplb2YoKmN0eClgIGlzIG9ubHkgMTYgYnl0ZXMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVkIG15IGludGVyZXN0LCBidXQgSSB0aGluayB3ZSBhcmUgb2suXG5cbkkgY2FuIGNvbmZpcm0gdGhhdCBldmVyeSBmaWVsZCBpbiB0aGUgYGlmYWRkcm1zZ2Agc3RydWN0dXJlIGlzIGV4cGxpY2l0bHkgYXNzaWduZWQsIGFuZCB0aGF0IHRoaXMgc3RydWN0dXJlIGRvZXNuJ3QgaGF2ZSBhbnkgaW50ZXJuYWwgcGFkZGluZy4gIFRoZSBgbmxhX3B1dGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCB0byBjb25zdHJ1Y3QgYXR0cmlidXRlcywgYW5kIGl0IHNhZmVseSB0YWtlcyBjYXJlIG9mIGFueSBuZWNlc3NhcnkgYWxpZ25tZW50IHBhZGRpbmcgYnkgemVyb2luZyBpdCBvdXQuIEZ1cnRoZXJtb3JlLCBgaGEtXHUwMDNlYWRkcmAgaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIGNvcnJlY3QgbGVuZ3RoIChgZGV2LVx1MDAzZWFkZHJfbGVuYCksIHdoZW4gdGhlIGhhcmR3YXJlIGFkZHJlc3MgaXMgcmVnaXN0ZXJlZC4gSSBjYW4ndCBzZWUgYW55IGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyBhbnkgdW5pbml0aWFsaXplZCBkYXRhIGludm9sdmVkIGluIGFueSBjb250cm9sIGZsb3cuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMgb3IgbG9ja2luZyBpc3N1ZXMsIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3IgbG9ja2luZyBlcnJvcnMsIGFyZSBleHBlY3RlZCB0byBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBkZXRlY3RvcnMuXG5cblRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSd2ZSBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgY2hlY2tzOlxuXG4xLiAgKipLZXJuZWwgU3RydWN0dXJlcyB0byBVc2VyIFNwYWNlOioqIEFyZSB0aGVyZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBwYWRkaW5nIGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQ/IE5vLCB0aGUgYGlmYWRkcm1zZ2Agc3RydWN0IGhhcyBubyBwYWRkaW5nLCBhbmQgZXZlcnkgZmllbGQgaXMgYXNzaWduZWQuIFRoZSBgbmxhX3B1dGAgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiBhbnkgcGFkZGluZyBmb3IgVExWcy4gVGhlIGBoYS1cdTAwM2VhZGRyYCBkYXRhIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLlxuMi4gICoqQnJhbmNoaW5nIG9uIFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIElzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8uIGBpZmluZGV4YCBpcyBjaGVja2VkIG9ubHkgYWZ0ZXIgYHJ0bmxfdmFsaWRfZHVtcF9tY2FkZHJfcmVxYCBzdWNjZWVkcy4gYGN0eGAgaXMgemVybyBpbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0uXG4zLiAgKipDb21wbGV4IFN0cnVjdHVyZXM6KiogSXMgdGhlcmUgYW55dGhpbmcgcGFydGljdWxhcmx5IGNvbXBsZXggdGhhdCBtaWdodCBiZSBhIGNvbmNlcm4/IE5vLlxuNC4gICoqQm91bmRzIENoZWNrcy9MZW5ndGggTWFuaXB1bGF0aW9uOioqIElzIGFueSBhY2Nlc3MgdG8gbWVtb3J5IGRlcGVuZGVudCBvbiBhIGJvdW5kcyBjaGVjayBvciBzaXplIGRldGVybWluZWQgYnkgYW4gdW5pbml0aWFsaXplZCB2YWx1ZT8gTm8uXG5cbkknbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTiA9IGZhbHNlYCBhbmQgcHJvdmlkZSBhIGNsZWFyIGV4cGxhbmF0aW9uIHRvIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5OTAsIk91dHB1dFRva2VucyI6MzI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDI6Mzg6NDguOTA4OTA5NTYxWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGR1bXBpbmcgbGluay1sYXllciBtdWx0aWNhc3QgYWRkcmVzc2VzIChBRl9QQUNLRVQgUlRNX0dFVE1VTFRJQ0FTVCkgdmlhIG5ldGxpbmsuIFxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSBcXHUwMDI2IEluZm8tbGVha3MgKEtNU0FOKTogQWxsIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlIGluIG5ldGxpbmsgcmVzcG9uc2VzIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgYHN0cnVjdCBpZmFkZHJtc2dgIGhlYWRlciBoYXMgYSA4LWJ5dGUgbGF5b3V0IHdpdGhvdXQgaW50ZXJuYWwgcGFkZGluZyBob2xlcywgYW5kIGFsbCBmaWVsZHMgKGBpZmFfZmFtaWx5YCwgYGlmYV9wcmVmaXhsZW5gLCBgaWZhX2ZsYWdzYCwgYGlmYV9zY29wZWAsIGBpZmFfaW5kZXhgKSBhcmUgZXhwbGljaXRseSBzZXQuIFRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBJRkFfTVVMVElDQVNUYCBhbmQgYElGQV9NQ19VU0VSU2ApIGFyZSBhZGRlZCB3aXRoIGBubGFfcHV0YCAvIGBubGFfcHV0X3UzMmAgd2hpY2ggemVybyBhbnkgdHJhaWxpbmcgYXR0cmlidXRlIGFsaWdubWVudCBwYWRkaW5nLiBBZGRyZXNzIGJ5dGVzIGluIGBoYS1cXHUwMDNlYWRkcmAgYXJlIGluaXRpYWxpemVkIGR1cmluZyBoYXJkd2FyZSBhZGRyZXNzIGNyZWF0aW9uIHVwIHRvIGBkZXYtXFx1MDAzZWFkZHJfbGVuYC4gQ29udHJvbCBmbG93IHZhcmlhYmxlcyAoc3VjaCBhcyBkdW1wIGBjdHhgIGFuZCBgaWZpbmRleGApIGFyZSBlaXRoZXIgemVyb2VkIGJ5IHRoZSBuZXRsaW5rIHN1YnN5c3RlbSBvciBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcbi0gTWVtb3J5IFNhZmV0eSBcXHUwMDI2IENvbmN1cnJlbmN5IChLQVNBTi9MT0NLREVQKTogVGhlIGNoYW5nZXMgaW52b2x2ZSBSQ1UgbG9va3VwcywgbmV0bGluayBkdW1wIGNhbGxiYWNrcywgYW5kIGRldmljZSBhZGRyZXNzIGxpc3QgbG9ja3MgKGBuZXRpZl9hZGRyX2xvY2tfYmhgKSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgY29uZmlndXJhdGlvbnMuXFxuXFxuVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHVtcGluZyBsaW5rLWxheWVyIG11bHRpY2FzdCBhZGRyZXNzZXMgKEFGX1BBQ0tFVCBSVE1fR0VUTVVMVElDQVNUKSB2aWEgbmV0bGluay4gXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFxcdTAwMjYgSW5mby1sZWFrcyAoS01TQU4pOiBBbGwgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UgaW4gbmV0bGluayByZXNwb25zZXMgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBgc3RydWN0IGlmYWRkcm1zZ2AgaGVhZGVyIGhhcyBhIDgtYnl0ZSBsYXlvdXQgd2l0aG91dCBpbnRlcm5hbCBwYWRkaW5nIGhvbGVzLCBhbmQgYWxsIGZpZWxkcyAoYGlmYV9mYW1pbHlgLCBgaWZhX3ByZWZpeGxlbmAsIGBpZmFfZmxhZ3NgLCBgaWZhX3Njb3BlYCwgYGlmYV9pbmRleGApIGFyZSBleHBsaWNpdGx5IHNldC4gVGhlIG5ldGxpbmsgYXR0cmlidXRlcyAoYElGQV9NVUxUSUNBU1RgIGFuZCBgSUZBX01DX1VTRVJTYCkgYXJlIGFkZGVkIHdpdGggYG5sYV9wdXRgIC8gYG5sYV9wdXRfdTMyYCB3aGljaCB6ZXJvIGFueSB0cmFpbGluZyBhdHRyaWJ1dGUgYWxpZ25tZW50IHBhZGRpbmcuIEFkZHJlc3MgYnl0ZXMgaW4gYGhhLVxcdTAwM2VhZGRyYCBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIGhhcmR3YXJlIGFkZHJlc3MgY3JlYXRpb24gdXAgdG8gYGRldi1cXHUwMDNlYWRkcl9sZW5gLiBDb250cm9sIGZsb3cgdmFyaWFibGVzIChzdWNoIGFzIGR1bXAgYGN0eGAgYW5kIGBpZmluZGV4YCkgYXJlIGVpdGhlciB6ZXJvZWQgYnkgdGhlIG5ldGxpbmsgc3Vic3lzdGVtIG9yIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuLSBNZW1vcnkgU2FmZXR5IFxcdTAwMjYgQ29uY3VycmVuY3kgKEtBU0FOL0xPQ0tERVApOiBUaGUgY2hhbmdlcyBpbnZvbHZlIFJDVSBsb29rdXBzLCBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzLCBhbmQgZGV2aWNlIGFkZHJlc3MgbGlzdCBsb2NrcyAoYG5ldGlmX2FkZHJfbG9ja19iaGApLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBjb25maWd1cmF0aW9ucy5cXG5cXG5UaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnRyb2R1Y2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq26sj[1] Phase: Succeeded StartedAt: 2026-09-09 02:39:00 +0000 UTC FinishedAt: 2026-09-09 02:39:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 02:39:00 +0000 UTC FinishedAt: 2026-09-09 02:39:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2] Phase: Succeeded StartedAt: 2026-09-09 02:39:00 +0000 UTC FinishedAt: 2026-09-09 06:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 02:39:00 +0000 UTC FinishedAt: 2026-09-09 06:17:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 02:39:00 +0000 UTC FinishedAt: 2026-09-09 02:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 02:39:00 +0000 UTC FinishedAt: 2026-09-09 02:39:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq26sj/series-workflowq26sj-convert-artifact-1602888929/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 02:39:10 +0000 UTC FinishedAt: 2026-09-09 02:55:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 02:39:10 +0000 UTC FinishedAt: 2026-09-09 02:55:56 +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:*6d38e78c-92ad-4ffb-9b7f-89a16966ec34,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-workflowq26sj/series-workflowq26sj-convert-artifact-1602888929/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": "b3a0a2d4-b861-4214-a278-d39f3f3d2a6b", "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-workflowq26sj/series-workflowq26sj-build-action-2689200655/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 02:39:10 +0000 UTC FinishedAt: 2026-09-09 02:55:46 +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:*6d38e78c-92ad-4ffb-9b7f-89a16966ec34,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-workflowq26sj/series-workflowq26sj-convert-artifact-1602888929/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": "b3a0a2d4-b861-4214-a278-d39f3f3d2a6b", "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-workflowq26sj/series-workflowq26sj-build-action-2689200655/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 02:55:56 +0000 UTC FinishedAt: 2026-09-09 02:55:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 02:55:56 +0000 UTC FinishedAt: 2026-09-09 02:55:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 02:55:56 +0000 UTC FinishedAt: 2026-09-09 02:56:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 02:55:56 +0000 UTC FinishedAt: 2026-09-09 02:56:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq26sj/series-workflowq26sj-convert-artifact-3286463796/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 02:56:07 +0000 UTC FinishedAt: 2026-09-09 02:58:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 02:56:07 +0000 UTC FinishedAt: 2026-09-09 02:57:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b3a0a2d4-b861-4214-a278-d39f3f3d2a6b,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-workflowq26sj/series-workflowq26sj-build-action-2689200655/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-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 02:58:00 +0000 UTC FinishedAt: 2026-09-09 02:58:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 02:58:00 +0000 UTC FinishedAt: 2026-09-09 02:58:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 02:58:00 +0000 UTC FinishedAt: 2026-09-09 03:13:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 02:58:00 +0000 UTC FinishedAt: 2026-09-09 03:13: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:*6d38e78c-92ad-4ffb-9b7f-89a16966ec34,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-workflowq26sj/series-workflowq26sj-convert-artifact-3286463796/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": "df286b41-bc48-4a57-978f-cc346e68179d", "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-workflowq26sj/series-workflowq26sj-build-action-875419392/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 02:58:00 +0000 UTC FinishedAt: 2026-09-09 03:13:47 +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:*6d38e78c-92ad-4ffb-9b7f-89a16966ec34,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-workflowq26sj/series-workflowq26sj-convert-artifact-3286463796/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": "df286b41-bc48-4a57-978f-cc346e68179d", "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-workflowq26sj/series-workflowq26sj-build-action-875419392/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 03:13:57 +0000 UTC FinishedAt: 2026-09-09 03:13:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 03:13:57 +0000 UTC FinishedAt: 2026-09-09 03:13:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 03:13:57 +0000 UTC FinishedAt: 2026-09-09 03:15:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 03:13:57 +0000 UTC FinishedAt: 2026-09-09 03:15:40 +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:*df286b41-bc48-4a57-978f-cc346e68179d,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-workflowq26sj/series-workflowq26sj-build-action-875419392/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-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 03:15:50 +0000 UTC FinishedAt: 2026-09-09 06:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 03:15:50 +0000 UTC FinishedAt: 2026-09-09 06:17:41 +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":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"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:*b3a0a2d4-b861-4214-a278-d39f3f3d2a6b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df286b41-bc48-4a57-978f-cc346e68179d,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-workflowq26sj/series-workflowq26sj-build-action-2689200655/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-workflowq26sj/series-workflowq26sj-build-action-875419392/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 03:15:50 +0000 UTC FinishedAt: 2026-09-09 03:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 03:15:50 +0000 UTC FinishedAt: 2026-09-09 03:15:55 +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":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"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-workflowq26sj/series-workflowq26sj-convert-artifact-2076213085/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 03:15:50 +0000 UTC FinishedAt: 2026-09-09 03:15:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 03:15:50 +0000 UTC FinishedAt: 2026-09-09 03:15:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 03:15:50 +0000 UTC FinishedAt: 2026-09-09 03:15:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 03:16:00 +0000 UTC FinishedAt: 2026-09-09 06:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq26sj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_dump_mcaddr","rtnl_dump_mcaddr_dev","rtnl_valid_dump_mcaddr_req","rtnl_fill_mcaddr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"b646945b-f87e-41bb-829b-c27f09eae19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 03:16:00 +0000 UTC FinishedAt: 2026-09-09 06:17:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b3a0a2d4-b861-4214-a278-d39f3f3d2a6b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df286b41-bc48-4a57-978f-cc346e68179d,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-workflowq26sj/series-workflowq26sj-build-action-2689200655/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-workflowq26sj/series-workflowq26sj-build-action-875419392/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-workflowq26sj/series-workflowq26sj-convert-artifact-2076213085/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,}