Name: series-workflow6548z Phase: Succeeded StartedAt: 2026-08-31 23:03:08 +0000 UTC FinishedAt: 2026-09-01 02:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[0] Phase: Succeeded StartedAt: 2026-08-31 23:03:08 +0000 UTC FinishedAt: 2026-08-31 23:07:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 23:03:08 +0000 UTC FinishedAt: 2026-08-31 23:07:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_TAPRIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_TAPRIO" ], "series_id": "a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "taprio_change", "taprio_init", "parse_taprio_schedule" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1RBUFJJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RhcHJpb19jaGFuZ2UmIzM0OywKICAgICYjMzQ7dGFwcmlvX2luaXQmIzM0OywKICAgICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW5wdXQgdmFsaWRhdGlvbiBpbiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gU3BlY2lmaWNhbGx5LCBpdCBhbHdheXMgY2FsY3VsYXRlcyB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFscyAoYGN5Y2xlYCkgYW5kIHZhbGlkYXRlcyB0aGF0IGBjeWNsZSBcdTAwM2M9IElOVF9NQVhgIGFuZCB0aGF0IHVzZXItc3VwcGxpZWQgYG5ldy1cdTAwM2VjeWNsZV90aW1lYCBpcyBub3QgbGVzcyB0aGFuIGBjeWNsZWAuXG5cbkFsbCBsb2NhbCB2YXJpYWJsZXMgKGBjeWNsZSA9IDBgKSBhbmQgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGBuZXdfYWRtaW5gIHZpYSBga3phbGxvY19vYmooKWApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyBLTVNBTi1zcGVjaWZpYyByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIGFuZCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYXJzZV90YXByaW9fc2NoZWR1bGUoKSBpbiBuZXQvc2NoZWQvc2NoX3RhcHJpby5jIHRvIHVuY29uZGl0aW9uYWxseSB2YWxpZGF0ZSB0aGUgY3ljbGUgdGltZSBhZ2FpbnN0IHRoZSBzdW0gb2Ygc2NoZWR1bGUgZW50cnkgaW50ZXJ2YWxzIGFuZCBjaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdy4gVGhpcyBhZmZlY3RzIHNjaGVkdWxlIHBhcmFtZXRlciBwYXJzaW5nIHdoZW4gY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIGEgdGFwcmlvIHFkaXNjIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgaW4gc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ2Yjc5MjdkOThmNmIzNDNmNWIxMTM0MzYzZDEyM2VmYjFhYzI1ZmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMzowNToyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuaW5kZXggMzlhYzViOTdhYTNhZi4uMTM3Y2U2ZjdhNDc0YSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbkBAIC0xMTMwLDYgJiM0MzsxMTMwLDggQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuJiM0MztcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4mIzQzO1x0a3RpbWVfdCBjeWNsZSA9IDA7XG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xuQEAgLTExNTIsMTkgJiM0MzsxMTU0LDIwIEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKSB7XG4tXHRcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4tXHRcdGt0aW1lX3QgY3ljbGUgPSAwO1xuLVxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZuZXctXHUwMDNlZW50cmllcywgbGlzdClcbi1cdFx0XHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXHUwMDNlaW50ZXJ2YWwpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNm5ldy1cdTAwM2VlbnRyaWVzLCBsaXN0KVxuJiM0MztcdFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVx1MDAzZWludGVydmFsKTtcbiBcbi1cdFx0aWYgKGN5Y2xlIFx1MDAzYyAwIHx8IGN5Y2xlIFx1MDAzZSBJTlRfTUFYKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuJiM0MztcdGlmIChjeWNsZSBcdTAwM2MgMCB8fCBjeWNsZSBcdTAwM2UgSU5UX01BWCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiYjNDM7XHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKVxuIFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZSA9IGN5Y2xlO1xuJiM0MztcbiYjNDM7XHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIGN5Y2xlKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0OyYjMzk7Y3ljbGVfdGltZSYjMzk7IGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFsc1wmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGlmIChuZXctXHUwMDNlY3ljbGVfdGltZSBcdTAwM2MgbmV3LVx1MDAzZW51bV9lbnRyaWVzICogbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1RBUFJJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RhcHJpb19jaGFuZ2UmIzM0OywKICAgICYjMzQ7dGFwcmlvX2luaXQmIzM0OywKICAgICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpIGluIG5ldC9zY2hlZC9zY2hfdGFwcmlvLmMgdG8gdW5jb25kaXRpb25hbGx5IHZhbGlkYXRlIHRoZSBjeWNsZSB0aW1lIGFnYWluc3QgdGhlIHN1bSBvZiBzY2hlZHVsZSBlbnRyeSBpbnRlcnZhbHMgYW5kIGNoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93LiBUaGlzIGFmZmVjdHMgc2NoZWR1bGUgcGFyYW1ldGVyIHBhcnNpbmcgd2hlbiBjcmVhdGluZyBvciBtb2RpZnlpbmcgYSB0YXByaW8gcWRpc2MgdmlhIG5ldGxpbmssIHdoaWNoIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzb2Z0d2FyZS1lbXVsYXRlZCBuZXR3b3JraW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDZiNzkyN2Q5OGY2YjM0M2Y1YjExMzQzNjNkMTIzZWZiMWFjMjVmZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIzOjA1OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKaW5kZXggMzlhYzViOTdhYTNhZi4uMTM3Y2U2ZjdhNDc0YSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCkBAIC0xMTMwLDYgJiM0MzsxMTMwLDggQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLAogCQkJCSBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsCiAJCQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKJiM0MzsJc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTsKJiM0MzsJa3RpbWVfdCBjeWNsZSA9IDA7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0pIHsKQEAgLTExNTIsMTkgJiM0MzsxMTU0LDIwIEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAlpZiAoZXJyICZsdDsgMCkKIAkJcmV0dXJuIGVycjsKIAotCWlmICghbmV3LSZndDtjeWNsZV90aW1lKSB7Ci0JCXN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7Ci0JCWt0aW1lX3QgY3ljbGUgPSAwOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZhbXA7bmV3LSZndDtlbnRyaWVzLCBsaXN0KQotCQkJY3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LSZndDtpbnRlcnZhbCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZhbXA7bmV3LSZndDtlbnRyaWVzLCBsaXN0KQomIzQzOwkJY3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LSZndDtpbnRlcnZhbCk7CiAKLQkJaWYgKGN5Y2xlICZsdDsgMCB8fCBjeWNsZSAmZ3Q7IElOVF9NQVgpIHsKLQkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnJiMzNDspOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KJiM0MzsJaWYgKGN5Y2xlICZsdDsgMCB8fCBjeWNsZSAmZ3Q7IElOVF9NQVgpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAomIzQzOwlpZiAoIW5ldy0mZ3Q7Y3ljbGVfdGltZSkKIAkJbmV3LSZndDtjeWNsZV90aW1lID0gY3ljbGU7CiYjNDM7CiYjNDM7CWlmIChuZXctJmd0O2N5Y2xlX3RpbWUgJmx0OyBjeWNsZSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0OyYjMzk7Y3ljbGVfdGltZSYjMzk7IGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFscyYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChuZXctJmd0O2N5Y2xlX3RpbWUgJmx0OyBuZXctJmd0O251bV9lbnRyaWVzICogbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVEFQUklPIFNjaGVkdWxlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGJlaW5nIGFza2VkIHRvIHJldmlldyBhIHBhdGNoIGZvciBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZC4gVGhlIGRpZmYgaXMgdGhlIGZpcnN0IHRoaW5nIHRvIGxvb2sgYXQ6IEkgc2VlIGEgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyB0aGUgY3ljbGUgdGltZSBpcyBjYWxjdWxhdGVkIGFuZCB2YWxpZGF0ZWQgZm9yIHRoZSBUQVBSSU8gc2NoZWR1bGVyLgoKVGhlIG9yaWdpbmFsIGNvZGUgYXBwZWFycyB0byBjYWxjdWxhdGUgdGhlIGN5Y2xlIHRpbWUgYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGxpc3Qgb2Ygc2NoZWR1bGUgZW50cmllcyBhbmQgc3VtbWluZyB0aGVpciBpbnRlcnZhbHMuIE5vdywgaXQmIzM5O3MgY29tcGFyaW5nIGFnYWluc3QgYG5ldy0mZ3Q7Y3ljbGVfdGltZWAgd2hpY2ggc291bmRzIGxpa2UgaXQmIzM5O3MgcGFzc2VkIGluIGZyb20gbmV0bGluay4gVGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhbiBleHRyYSB2YWxpZGF0aW9uIHN0ZXAuIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBga3RpbWVfdCBjeWNsZSA9IDA7YCBhbmQgYSBuZXcgYGlmYCBjb25kaXRpb24gd2l0aCBhIGNoZWNrIHRoYXQgYG5ldy0mZ3Q7Y3ljbGVfdGltZWAgaXMgX2F0IGxlYXN0XyBhcyBsYXJnZSBhcyB0aGUgc3VtIG9mIGFsbCBlbnRyeSBpbnRlcnZhbHMuCgpFc3NlbnRpYWxseSwgdGhlIGV4aXN0aW5nIGxvZ2ljIHN1bXMgdXAgYWxsIHRoZSBlbnRyeSBpbnRlcnZhbHMgdG8gY3JlYXRlIGEgYGN5Y2xlYCB0aW1lLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBgY3ljbGVfdGltZWAgaXNuJiMzOTt0IHNtYWxsZXIgdGhhbiB0aGUgY29tYmluZWQgZHVyYXRpb25zIG9mIGl0cyBjb25zdGl0dWVudCBlbnRyaWVzLCBhbmQgaXQmIzM5O3MgYWxzbyB2YWxpZGF0aW5nIHRoYXQgdGhlIGBjeWNsZV90aW1lYCBpcyB2YWxpZC4gSXQmIzM5O3MgYWxzbyBtYWtpbmcgc3VyZSB0aGF0IHRoZSBzdW0gb2YgdGhlIGVudHJpZXMgYW5kIHRoZSBjeWNsZSB0aW1lIGFyZSBub3Qgb3V0IG9mIGJvdW5kcywgcHJldmVudGluZyBhbiBpbnRlZ2VyIG92ZXJmbG93LgoKTXkgaW5pdGlhbCBpbnRlcnByZXRhdGlvbjogdGhpcyBwYXRjaCBhaW1zIHRvIGltcHJvdmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIFRBUFJJTyBzY2hlZHVsZXIgYnkgbWFraW5nIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gaXMgaW50ZXJuYWxseSBjb25zaXN0ZW50LiBUaGlzIGlzIGEgZ29vZCBtb3ZlOyBzdWNoIHZhbGlkYXRpb24gY291bGQgaGF2ZSBwcmV2ZW50ZWQgc3VidGxlIGJ1Z3MgYW5kIHBlcmhhcHMgbWFkZSB0aGUgc2NoZWR1bGVyIG1vcmUgcmVzaXN0YW50IHRvIG1pc2NvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMsIG9mIGNvdXJzZSwgb3IgdW53YW50ZWQgYmVoYXZpb3VyLiBJIHdhbnQgdG8gbG9vayBpbnRvIHRoZSBpbXBhY3Qgb24gZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zLCBhbmQgd2hldGhlciB0aGUgYWRkZWQgdmFsaWRhdGlvbiBwcmV2ZW50cyB2YWxpZCBjb25maWd1cmF0aW9ucy4gRmluYWxseSwgSSBzaG91bGQgbG9vayBhdCB0aGUgS2NvbmZpZyBhbmQgb3RoZXIgY29udGV4dCBpbiB0aGlzIGNvZGUgdG8gZ2l2ZSB0aGUgYmVzdCBhbmFseXNpcywgYW5kIGNvbmZpcm0gdGhpcyBpcyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEyMDpcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmVudHJ5LVx1MDAzZWxpc3QsIFx1MDAyNnNjaGVkLVx1MDAzZWVudHJpZXMpO1xuMTEyMTpcdFx0XHRpJiM0MzsmIzQzOztcbjExMjI6XHRcdH1cbjExMjM6XHRcbjExMjQ6XHRcdHNjaGVkLVx1MDAzZW51bV9lbnRyaWVzID0gaTtcbjExMjU6XHRcbjExMjY6XHRcdHJldHVybiBpO1xuMTEyNzpcdH1cbjExMjg6XHRcbjExMjk6XHRzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4xMTMwOlx0XHRcdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxuMTEzMTpcdFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjExMzI6XHR7XG4xMTMzOlx0XHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5O1xuMTEzNDpcdFx0a3RpbWVfdCBjeWNsZSA9IDA7XG4xMTM1Olx0XHRpbnQgZXJyID0gMDtcbjExMzY6XHRcbjExMzc6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xuMTEzODpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0FkZGluZyBhIHNpbmdsZSBlbnRyeSBpcyBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbjExMzk6XHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbjExNDA6XHRcdH1cbjExNDE6XHRcbjExNDI6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQkFTRV9USU1FXSlcbjExNDM6XHRcdFx0bmV3LVx1MDAzZWJhc2VfdGltZSA9IG5sYV9nZXRfczY0KHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9CQVNFX1RJTUVdKTtcbjExNDQ6XHRcbjExNDU6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV9FWFRFTlNJT05dKVxuMTE0NjpcdFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZV9leHRlbnNpb24gPSBubGFfZ2V0X3M2NCh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV9FWFRFTlNJT05dKTtcbjExNDc6XHRcbjExNDg6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV0pXG4xMTQ5Olx0XHRcdG5ldy1cdTAwM2VjeWNsZV90aW1lID0gbmxhX2dldF9zNjQodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVdKTtcbjExNTA6XHRcbjExNTE6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfRU5UUllfTElTVF0pXG4xMTUyOlx0XHRcdGVyciA9IHBhcnNlX3NjaGVkX2xpc3QocSwgdGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0VOVFJZX0xJU1RdLFxuMTE1MzpcdFx0XHRcdFx0ICAgICAgIG5ldywgZXh0YWNrKTtcbjExNTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMTU1Olx0XHRcdHJldHVybiBlcnI7XG4xMTU2Olx0XG4xMTU3Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZuZXctXHUwMDNlZW50cmllcywgbGlzdClcbjExNTg6XHRcdFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVx1MDAzZWludGVydmFsKTtcbjExNTk6XHRcbjExNjA6XHRcdGlmIChjeWNsZSBcdTAwM2MgMCB8fCBjeWNsZSBcdTAwM2UgSU5UX01BWCkge1xuMTE2MTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0OyYjMzk7Y3ljbGVfdGltZSYjMzk7IGlzIHRvbyBiaWdcJiMzNDspO1xuMTE2MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExNjM6XHRcdH1cbjExNjQ6XHRcbjExNjU6XHRcdGlmICghbmV3LVx1MDAzZWN5Y2xlX3RpbWUpXG4xMTY2Olx0XHRcdG5ldy1cdTAwM2VjeWNsZV90aW1lID0gY3ljbGU7XG4xMTY3Olx0XG4xMTY4Olx0XHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIGN5Y2xlKSB7XG4xMTY5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgbGVzcyB0aGFuIHRoZSBzdW0gb2YgZW50cnkgaW50ZXJ2YWxzXCYjMzQ7KTtcbjExNzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTcxOlx0XHR9XG4xMTcyOlx0XG4xMTczOlx0XHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIG5ldy1cdTAwM2VudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHtcbjExNzQ6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gc21hbGxcJiMzNDspO1xuMTE3NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExNzY6XHRcdH1cbjExNzc6XHRcbjExNzg6XHRcdHRhcHJpb19jYWxjdWxhdGVfZ2F0ZV9kdXJhdGlvbnMocSwgbmV3KTtcbjExNzk6XHRcbjExODA6XHRcdHJldHVybiAwO1xuMTE4MTpcdH1cbjExODI6XHRcbjExODM6XHRzdGF0aWMgaW50IHRhcHJpb19wYXJzZV9tcXByaW9fb3B0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4xMTg0Olx0XHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQsXG4xMTg1Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4xMTg2Olx0XHRcdFx0XHQgICB1MzIgdGFwcmlvX2ZsYWdzKVxuMTE4NzpcdHtcbjExODg6XHRcdGJvb2wgYWxsb3dfb3ZlcmxhcHBpbmdfdHhxcyA9IFRYVElNRV9BU1NJU1RfSVNfRU5BQkxFRCh0YXByaW9fZmxhZ3MpO1xuMTE4OTpcdFxuMTE5MDpcdFx0aWYgKCFxb3B0KSB7XG4xMTkxOlx0XHRcdGlmICghbmV0ZGV2X2dldF9udW1fdGMoZGV2KSkge1xuMTE5MjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7JiMzOTttcXByaW8mIzM5OyBjb25maWd1cmF0aW9uIGlzIG5lY2Vzc2FyeVwmIzM0Oyk7XG4xMTkzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTk0Olx0XHRcdH1cbjExOTU6XHRcdFx0cmV0dXJuIDA7XG4xMTk2Olx0XHR9XG4xMTk3Olx0XG4xMTk4Olx0XHQvKiB0YXByaW8gaW1wb3NlcyB0aGF0IHRyYWZmaWMgY2xhc3NlcyBtYXAgMTpuIHRvIHR4IHF1ZXVlcyAqL1xuMTE5OTpcdFx0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlcykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBgdGFwcmlvYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFyb3VuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYC4gVGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgY29udGV4dCAtIHdobyYjMzk7cyBhY3R1YWxseSBpbnZva2luZyB0aGlzIGZ1bmN0aW9uPyBLbm93aW5nIHRoYXQgd2lsbCBwcm92aWRlIGNyaXRpY2FsIGluc2lnaHRzIGludG8gd2hhdCYjMzk7cyBiZWluZyBwYXNzZWQgaW4gYW5kIHdoYXQgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGlzLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcuCgpUaGVuLCBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgYnJvYWRlciBgdGFwcmlvYCBxZGlzYyBpbXBsZW1lbnRhdGlvbi4gV2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoaXMgcWRpc2M/IFdoYXQmIzM5O3MgdGhlIGNvbXBsZXRlIGZlYXR1cmUgc2V0PyBXaGF0IGtleSBkYXRhIHN0cnVjdHVyZXMgYXJlIGluIHBsYXk/IEtub3dpbmcgdGhlIGxhbmRzY2FwZSBvZiB0aGUgYHRhcHJpb2AgcWRpc2Mgd2lsbCBoZWxwIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIG1hcCBpdCBvdXQsIHNvIEkgY2FuIHNlZSBob3cgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIEVzc2VudGlhbGx5IEkmIzM5O2xsIG5lZWQgdG8gZGV2ZWxvcCB0aGUgbWVudGFsIG1hcCBvZiB0aGUgc3lzdGVtIHNvIEkgY2FuIGlkZW50aWZ5IGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGNvbnRyaWJ1dGVzIHRvIHRoZSBjb21wbGV0ZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEwODk9c3RhdGljIGludCBwYXJzZV9zY2hlZF9saXN0KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKmxpc3QsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTI4LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMTI5OnN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0Yixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEzMC1cdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODI1PXN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkxOS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTkyMDpcdGVyciA9IHBhcnNlX3RhcHJpb19zY2hlZHVsZShxLCB0YiwgbmV3X2FkbWluLCBleHRhY2spO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTIxLVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDM0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyB0aGUgVGFwcmlvIFFkaXNjIE9wZXJhdGlvbnMqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgYHRhcHJpb2AgUWRpc2MgYWN0dWFsbHkgd29ya3MuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgc291cmNlLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgaW50byBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AuIEkgd2FudCB0byBsb29rIGF0IHRoZSBgcWRpc2Nfb3BzYCBzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5LiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyB0aGlzIHRoaW5nIGZ1bmN0aW9ucyDigJMgaXQmIzM5O2xsIHRlbGwgbWUgaG93IHBhY2tldHMgYXJlIGVucXVldWVkLCBkZXF1ZXVlZCwgY29uZmlndXJlZCwgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBhdCB0aGUgc2NoZWR1bGluZyBsZXZlbC4gVW5kZXJzdGFuZGluZyB0aGVzZSBvcGVyYXRpb25zIGlzIGNydWNpYWwgZm9yIGZpZ3VyaW5nIG91dCBpdHMgYmVoYXZpb3IgYW5kIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGludGVyZXN0aW5nIHRoaW5ncyBoZXJlLCBnaXZlbiB0aGUgdGltZS1zZW5zaXRpdmUgbmF0dXJlIGFuZCB0cmFmZmljIHNoYXBpbmcgZnVuY3Rpb25hbGl0aWVzIG9mIFRhcHJpby4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBRZGlzY19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjUzOT1zdGF0aWMgY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyB0YXByaW9fY2xhc3Nfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU0OC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjU0OTpzdGF0aWMgc3RydWN0IFFkaXNjX29wcyB0YXByaW9fcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTAtXHQuY2xfb3BzXHRcdD0gXHUwMDI2dGFwcmlvX2NsYXNzX29wcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzk1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgc2NoX3RhcHJpby5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gQmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgaW50bywgSSB0aGluayB0aGUgaXNzdWUgaXMgYXJvdW5kIHRoZSBzY2hlZHVsaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgVEFQUklPIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSwgYW5kIEkgZmlndXJlIHRoZSBwcm9ibGVtIG1pZ2h0IGJlIGluIHRoZSB2aWNpbml0eSBvZiBsaW5lIDI1NDkgd2l0aGluIHRoZSBgc2NoX3RhcHJpby5jYCBmaWxlLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBzdXJyb3VuZGluZyBsaW5lcyB0b28sIHRvIGdldCB0aGUgZnVsbCBjb250ZXh0IG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uIEhvcGVmdWxseSwgdGhlIHByb2JsZW0gaXMgcmlnaHQgdGhlcmUsIHN0YXJpbmcgbWUgaW4gdGhlIGZhY2UhIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU0MDpcdFx0LmdyYWZ0XHRcdD0gdGFwcmlvX2dyYWZ0LFxuMjU0MTpcdFx0LmxlYWZcdFx0PSB0YXByaW9fbGVhZixcbjI1NDI6XHRcdC5maW5kXHRcdD0gdGFwcmlvX2ZpbmQsXG4yNTQzOlx0XHQud2Fsa1x0XHQ9IHRhcHJpb193YWxrLFxuMjU0NDpcdFx0LmR1bXBcdFx0PSB0YXByaW9fZHVtcF9jbGFzcyxcbjI1NDU6XHRcdC5kdW1wX3N0YXRzXHQ9IHRhcHJpb19kdW1wX2NsYXNzX3N0YXRzLFxuMjU0NjpcdFx0LnNlbGVjdF9xdWV1ZVx0PSB0YXByaW9fc2VsZWN0X3F1ZXVlLFxuMjU0NzpcdH07XG4yNTQ4Olx0XG4yNTQ5Olx0c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgdGFwcmlvX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuMjU1MDpcdFx0LmNsX29wc1x0XHQ9IFx1MDAyNnRhcHJpb19jbGFzc19vcHMsXG4yNTUxOlx0XHQuaWRcdFx0PSBcJiMzNDt0YXByaW9cJiMzNDssXG4yNTUyOlx0XHQucHJpdl9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgdGFwcmlvX3NjaGVkKSxcbjI1NTM6XHRcdC5pbml0XHRcdD0gdGFwcmlvX2luaXQsXG4yNTU0Olx0XHQuY2hhbmdlXHRcdD0gdGFwcmlvX2NoYW5nZSxcbjI1NTU6XHRcdC5kZXN0cm95XHQ9IHRhcHJpb19kZXN0cm95LFxuMjU1NjpcdFx0LnJlc2V0XHRcdD0gdGFwcmlvX3Jlc2V0LFxuMjU1NzpcdFx0LmF0dGFjaFx0XHQ9IHRhcHJpb19hdHRhY2gsXG4yNTU4Olx0XHQucGVla1x0XHQ9IHRhcHJpb19wZWVrLFxuMjU1OTpcdFx0LmRlcXVldWVcdD0gdGFwcmlvX2RlcXVldWUsXG4yNTYwOlx0XHQuZW5xdWV1ZVx0PSB0YXByaW9fZW5xdWV1ZSxcbjI1NjE6XHRcdC5kdW1wXHRcdD0gdGFwcmlvX2R1bXAsXG4yNTYyOlx0XHQuZHVtcF9zdGF0c1x0PSB0YXByaW9fZHVtcF9zdGF0cyxcbjI1NjM6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuMjU2NDpcdH07XG4yNTY1Olx0TU9EVUxFX0FMSUFTX05FVF9TQ0goXCYjMzQ7dGFwcmlvXCYjMzQ7KTtcbjI1NjY6XHRcbjI1Njc6XHRzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHRhcHJpb19kZXZpY2Vfbm90aWZpZXIgPSB7XG4yNTY4Olx0XHQubm90aWZpZXJfY2FsbCA9IHRhcHJpb19kZXZfbm90aWZpZXIsXG4yNTY5Olx0fTtcbjI1NzA6XHRcbjI1NzE6XHRzdGF0aWMgaW50IF9faW5pdCB0YXByaW9fbW9kdWxlX2luaXQodm9pZClcbjI1NzI6XHR7XG4yNTczOlx0XHRpbnQgZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNnRhcHJpb19kZXZpY2Vfbm90aWZpZXIpO1xuMjU3NDpcdFxuMjU3NTpcdFx0aWYgKGVycilcbjI1NzY6XHRcdFx0cmV0dXJuIGVycjtcbjI1Nzc6XHRcbjI1Nzg6XHRcdHJldHVybiByZWdpc3Rlcl9xZGlzYyhcdTAwMjZ0YXByaW9fcWRpc2Nfb3BzKTtcbjI1Nzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKktjb25maWcgYW5kIHRhcHJpbzogQSBRdWljayBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0FscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiYjMzQ7IEkgbmVlZCB0byBnZXQgc29tZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRhcHJpbywgYW5kIHRoZSBmaXJzdCBwbGFjZSBJIGFsd2F5cyBnbyB0byBmb3IgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIGlzIHRoZSBwcm9qZWN0JiMzOTtzIEtjb25maWcgZmlsZS4gSSBhc3N1bWUgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgbWFuYWdlZC4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoZXRoZXIgdGFwcmlvIGlzIGF2YWlsYWJsZSBhbmQgaG93IGl0IGlzIGltcGxlbWVudGVkLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGtub3duIGNvbmZpZ3VyYXRpb24gaXNzdWVzIG9yIGRlcGVuZGVuY2llcyB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NoX3RhcHJpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MTcyPWNvbmZpZyBORVRfU0NIX1RBUFJJT1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTE3OC1cbm5ldC9zY2hlZC9LY29uZmlnOjE3OTpcdCAgU2VlIHRoZSB0b3Agb2YgXHUwMDNjZmlsZTpuZXQvc2NoZWQvc2NoX3RhcHJpby5jXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXG5uZXQvc2NoZWQvS2NvbmZpZy0xODAtXG5uZXQvc2NoZWQvS2NvbmZpZy0xODEtXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbm5ldC9zY2hlZC9LY29uZmlnOjE4MjpcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF90YXByaW8uXG5uZXQvc2NoZWQvS2NvbmZpZy0xODMtXG4tLVxubmV0L3NjaGVkL01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19ORVRfU0NIX0VURilcdCYjNDM7PSBzY2hfZXRmLm9cbm5ldC9zY2hlZC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfTkVUX1NDSF9UQVBSSU8pXHQmIzQzOz0gc2NoX3RhcHJpby5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX05FVF9TQ0hfQlBGKVx0JiM0Mzs9IGJwZl9xZGlzYy5vXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzozOi8qIG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcdCBUaW1lIEF3YXJlIFByaW9yaXR5IFNjaGVkdWxlclxubmV0L3NjaGVkL3NjaF90YXByaW8uYy00LSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIHNjaGVkdWxlciBjb25maWd1cmF0aW9uLCBsaWtlbHkgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBgbmV0L3NjaGVkYCBzdWJzeXN0ZW0uIEkgcmVjYWxsIHRoYXQgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoZXkgZGVmaW5lIHRoZSBvcHRpb25zIHByZXNlbnRlZCB0byB0aGUgdXNlciBkdXJpbmcga2VybmVsIGNvbXBpbGF0aW9uLiBBbmQgSSBhbSByZW1lbWJlcmluZyB0aGF0IGxpbmUgMTcyIG9yIHNvIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIG1pZ2h0IGJlLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIEkmIzM5O20gcHJvYmFibHkgaW50ZXJlc3RlZCBpbiB0aGUgb3B0aW9ucyByZWxhdGVkIHRvLi4uIHdlbGwsIEkgZG9uJiMzOTt0IGtub3cgKmV4YWN0bHkqIHlldC4gQnV0IHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4gVGhpcyBhcHByb2FjaCBpcyBlZmZpY2llbnQgYmVjYXVzZSBpdCBoZWxwcyBtZSBuYXJyb3cgZG93biB0aGUgc2NvcGUgb2YgdGhlIHByb2JsZW0gcXVpY2tseTsgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB3aWxsIGxldCBtZSBzZWUgd2hhdCYjMzk7cyBjb25maWd1cmFibGUgaW4gdGhpcyBhcmVhLiBJdCYjMzk7bGwgZ2l2ZSBtZSBhIHJvYWRtYXAsIGxpa2VseSBoaWdobGlnaHRpbmcgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2V0Zi5cbiAxNjY6XHRcbiAxNjc6XHRjb25maWcgTkVUX1NDSF9NUVBSSU9fTElCXG4gMTY4Olx0XHR0cmlzdGF0ZVxuIDE2OTpcdFx0aGVscFxuIDE3MDpcdFx0ICBDb21tb24gbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIG1xcHJpbyBxdWV1ZSBjb25maWd1cmF0aW9ucy5cbiAxNzE6XHRcbiAxNzI6XHRjb25maWcgTkVUX1NDSF9UQVBSSU9cbiAxNzM6XHRcdHRyaXN0YXRlIFwmIzM0O1RpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXCYjMzQ7XG4gMTc0Olx0XHRzZWxlY3QgTkVUX1NDSF9NUVBSSU9fTElCXG4gMTc1Olx0XHRoZWxwXG4gMTc2Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIHBhY2tldFxuIDE3NzpcdFx0ICBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAxNzg6XHRcbiAxNzk6XHRcdCAgU2VlIHRoZSB0b3Agb2YgXHUwMDNjZmlsZTpuZXQvc2NoZWQvc2NoX3RhcHJpby5jXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXG4gMTgwOlx0XG4gMTgxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxODI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF90YXByaW8uXG4gMTgzOlx0XG4gMTg0Olx0Y29uZmlnIE5FVF9TQ0hfR1JFRFxuIDE4NTpcdFx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBSYW5kb20gRWFybHkgRGV0ZWN0aW9uIChHUkVEKVwmIzM0O1xuIDE4NjpcdFx0aGVscFxuIDE4NzpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgR2VuZXJpYyBSYW5kb20gRWFybHkgRGV0ZWN0aW9uXG4gMTg4Olx0XHQgIChHUkVEKSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0gZm9yIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXNcbiAxODk6XHRcdCAgKHNlZSB0aGUgdG9wIG9mIFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF9yZWQuY1x1MDAzZSBmb3IgZGV0YWlscyBhbmRcbiAxOTA6XHRcdCAgcmVmZXJlbmNlcyBhYm91dCB0aGUgYWxnb3JpdGhtKS5cbiAxOTE6XHRcbiAxOTI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDE5MzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2dyZWQuXG4gMTk0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgbmV0d29yayBzY2hlZHVsZXIgY29uZmlndXJhdGlvbi4gVGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBzZWUgd2hlcmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgYXJlIGRlZmluZWQuIE15IGluc3RpbmN0IGlzIHRoYXQgSSYjMzk7bGwgZmluZCB0aGVtIGluIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEl0JiMzOTtzIGEgcHJldHR5IHN0YW5kYXJkIGxvY2F0aW9uIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbmV0d29ya2luZy4gSSYjMzk7bSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBmb3IgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBsaW5rIGludG8gdGhlIG92ZXJhbGwgbWVudSBzdHJ1Y3R1cmUg4oCTIHdoZXJlIHRoaXMgcGFydGljdWxhciBzZWN0aW9uICYjMzQ7bGl2ZXMmIzM0OyB3aXRoaW4gdGhlIGdyZWF0ZXIgc2NoZW1lIG9mIHRoaW5ncy4gVW5kZXJzdGFuZGluZyB0aGUgcGFyZW50IG1lbnUgd2lsbCBxdWlja2x5IGdpdmUgbWUgY29udGV4dC4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgdGhlbiBtYWtlIGl0IGFsbCBjbGVhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIE5FVF9TQ0hFRFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBORVRfU0NIX0ZJRk9cbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgV2hlbiB0aGUga2VybmVsIGhhcyBzZXZlcmFsIHBhY2tldHMgdG8gc2VuZCBvdXQgb3ZlciBhIG5ldHdvcmtcbiAgMTE6XHRcdCAgZGV2aWNlLCBpdCBoYXMgdG8gZGVjaWRlIHdoaWNoIG9uZXMgdG8gc2VuZCBmaXJzdCwgd2hpY2ggb25lcyB0b1xuICAxMjpcdFx0ICBkZWxheSwgYW5kIHdoaWNoIG9uZXMgdG8gZHJvcC4gVGhpcyBpcyB0aGUgam9iIG9mIHRoZSBxdWV1ZWluZ1xuICAxMzpcdFx0ICBkaXNjaXBsaW5lcywgc2V2ZXJhbCBkaWZmZXJlbnQgYWxnb3JpdGhtcyBmb3IgaG93IHRvIGRvIHRoaXNcbiAgMTQ6XHRcdCAgXCYjMzQ7ZmFpcmx5XCYjMzQ7IGhhdmUgYmVlbiBwcm9wb3NlZC5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgSWYgeW91IHNheSBOIGhlcmUsIHlvdSB3aWxsIGdldCB0aGUgc3RhbmRhcmQgcGFja2V0IHNjaGVkdWxlciwgd2hpY2hcbiAgMTc6XHRcdCAgaXMgYSBGSUZPIChmaXJzdCBjb21lLCBmaXJzdCBzZXJ2ZWQpLiBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmVcbiAgMTg6XHRcdCAgYWJsZSB0byBjaG9vc2UgZnJvbSBhbW9uZyBzZXZlcmFsIGFsdGVybmF0aXZlIGFsZ29yaXRobXMgd2hpY2ggY2FuXG4gIDE5Olx0XHQgIHRoZW4gYmUgYXR0YWNoZWQgdG8gZGlmZmVyZW50IG5ldHdvcmsgZGV2aWNlcy4gVGhpcyBpcyB1c2VmdWwgZm9yXG4gIDIwOlx0XHQgIGV4YW1wbGUgaWYgc29tZSBvZiB5b3VyIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhbCB0aW1lIGRldmljZXMgdGhhdFxuICAyMTpcdFx0ICBuZWVkIGEgY2VydGFpbiBtaW5pbXVtIGRhdGEgZmxvdyByYXRlLCBvciBpZiB5b3UgbmVlZCB0byBsaW1pdCB0aGVcbiAgMjI6XHRcdCAgbWF4aW11bSBkYXRhIGZsb3cgcmF0ZSBmb3IgdHJhZmZpYyB3aGljaCBtYXRjaGVzIHNwZWNpZmllZCBjcml0ZXJpYS5cbiAgMjM6XHRcdCAgVGhpcyBjb2RlIGlzIGNvbnNpZGVyZWQgdG8gYmUgZXhwZXJpbWVudGFsLlxuICAyNDpcdFxuICAyNTpcdFx0ICBUbyBhZG1pbmlzdGVyIHRoZXNlIHNjaGVkdWxlcnMsIHlvdSYjMzk7bGwgbmVlZCB0aGUgdXNlci1sZXZlbCB1dGlsaXRpZXNcbiAgMjY6XHRcdCAgZnJvbSB0aGUgcGFja2FnZSBpcHJvdXRlMiYjNDM7dGMgYXRcbiAgMjc6XHRcdCAgXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2lwcm91dGUyL1x1MDAzZS4gIFRoYXQgcGFja2FnZVxuICAyODpcdFx0ICBhbHNvIGNvbnRhaW5zIHNvbWUgZG9jdW1lbnRhdGlvbjsgZm9yIG1vcmUsIGNoZWNrIG91dFxuICAyOTpcdFx0ICBcdTAwM2NodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2lwcm91dGUyXHUwMDNlLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUaGlzIFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKSBzdXBwb3J0IHdpbGwgZW5hYmxlIHlvdSB0byB1c2VcbiAgMzI6XHRcdCAgRGlmZmVyZW50aWF0ZWQgU2VydmljZXMgKGRpZmZzZXJ2KSBhbmQgUmVzb3VyY2UgUmVzZXJ2YXRpb24gUHJvdG9jb2xcbiAgMzM6XHRcdCAgKFJTVlApIG9uIHlvdXIgTGludXggcm91dGVyIGlmIHlvdSBhbHNvIHNheSBZIHRvIHRoZSBjb3JyZXNwb25kaW5nXG4gIDM0Olx0XHQgIGNsYXNzaWZpZXJzIGJlbG93LiAgRG9jdW1lbnRhdGlvbiBhbmQgc29mdHdhcmUgaXMgYXRcbiAgMzU6XHRcdCAgXHUwMDNjaHR0cDovL2RpZmZzZXJ2LnNvdXJjZWZvcmdlLm5ldC9cdTAwM2UuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCB0byBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbVwmIzM0OyBiZWxvdywgeW91IHdpbGwgYmUgYWJsZVxuICAzODpcdFx0ICB0byByZWFkIHN0YXR1cyBpbmZvcm1hdGlvbiBhYm91dCBwYWNrZXQgc2NoZWR1bGVycyBmcm9tIHRoZSBmaWxlXG4gIDM5Olx0XHQgIC9wcm9jL25ldC9wc2NoZWQuXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2ODEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIE5FVF9TQ0hFRCBJbmNsdXNpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUbyB1bmRlcnN0YW5kIGhvdyBgTkVUX1NDSEVEYCBpcyBoYW5kbGVkLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIG9mIHRydXRoIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbjogYG5ldC9LY29uZmlnYC4gVGhpcyBmaWxlIGRpY3RhdGVzIGFsbCB0aGUgbmV0d29ya2luZy1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQnkgZXhhbWluaW5nIGl0cyBzdHJ1Y3R1cmUgYW5kIGRlcGVuZGVuY2llcywgSSBjYW4gcXVpY2tseSBkZXRlcm1pbmUgaG93IGBORVRfU0NIRURgIGlzIGV4cG9zZWQgdG8gdGhlIHVzZXIgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqdW5kZXIgd2hhdCBjb25kaXRpb25zKiBpdCBiZWNvbWVzIGF2YWlsYWJsZS4gSSBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCwgd2hhdCBvdGhlciBvcHRpb25zIGl0IG1pZ2h0IGRlcGVuZCBvbiwgYW5kIHBvdGVudGlhbGx5IHdoZXJlIGl0JiMzOTtzICp1c2VkKiB3aXRoaW4gdGhlIGxhcmdlciBgS2NvbmZpZ2AgaGllcmFyY2h5LiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgcHJvdmlkZSBjb250ZXh0IGZvciB0aGUgd2lkZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTEyMDk0PXN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMjE2OS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpO1xubmV0L2NvcmUvZGV2LmM6MTIxNzA6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9jb3JlL2Rldi5jLTEyMTcxLVx0aGFzaF9pbml0KGRldi1cdTAwM2VxZGlzY19oYXNoKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMDAzOD1zdGF0aWMgdTMyIGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMDIxMS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IF9fc2tfYnVmZiwgdGNfaW5kZXgpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTAyMTI6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjEzLVx0XHRpZiAodHlwZSA9PSBCUEZfV1JJVEUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTU1OT1zdGF0aWMgdm9pZCBfX2NvcHlfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE1OTktI2VuZGlmXG5uZXQvY29yZS9za2J1ZmYuYzoxNjAwOiNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG5uZXQvY29yZS9za2J1ZmYuYy0xNjAxLVx0Q0hFQ0tfU0tCX0ZJRUxEKHRjX2luZGV4KTtcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz0yNzU9c3RhdGljIGludCBmbG93X2xpbWl0X3RhYmxlX2xlbl9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0yOTUtXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzoyOTY6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTI5Ny1zdGF0aWMgaW50IHNldF9kZWZhdWx0X3FkaXNjKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9NDMwPXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNTg5LSNlbmRpZlxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NTkwOiNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01OTEtXHR7XG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9NTUxPXN0YXRpYyB2b2lkIGlwX2NvcHlfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy01NjMtXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzo1NjQ6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9pcHY0L2lwX291dHB1dC5jLTU2NS1cdHRvLVx1MDAzZXRjX2luZGV4ID0gZnJvbS1cdTAwM2V0Y19pbmRleDtcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NzA0PXN0YXRpYyB2b2lkIGlwNl9jb3B5X21ldGFkYXRhKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTcxNS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzo3MTY6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy03MTctXHR0by1cdTAwM2V0Y19pbmRleCA9IGZyb20tXHUwMDNldGNfaW5kZXg7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNS1cbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcbm5ldC9zY2hlZC9LY29uZmlnLTctXHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTQzLVxubmV0L3NjaGVkL0tjb25maWc6NDQ6aWYgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy00NS1cbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz05NTQ9Y29uZmlnIE5FVF9UQ19TS0JfRVhUXG4tLVxubmV0L3NjaGVkL0tjb25maWctOTY1LVxubmV0L3NjaGVkL0tjb25maWc6OTY2OmVuZGlmICMgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy05NjctXG4tLVxubmV0L3NjaGVkL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX0lORVQpXHRcdCYjNDM7PSBzY2hfZnJhZy5vXG5uZXQvc2NoZWQvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkVUX1NDSEVEKVx0XHQmIzQzOz0gc2NoX2FwaS5vIHNjaF9ibGFja2hvbGUub1xubmV0L3NjaGVkL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ORVRfQ0xTKVx0XHQmIzQzOz0gY2xzX2FwaS5vXG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MzM5Mj1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7VGhlIENBS0Ugc2hhcGVyLlwmIzM0Oyk7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYzozMzkzOk1PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7TkVUX1NDSEVEX0lOVEVSTkFMXCYjMzQ7KTtcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYz0xMTA2PXN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMTAtXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMTExOiNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTEyLVx0cWRpc2NfaGFzaF9kZWwocWRpc2MpO1xuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jPTEyMjg9c3RhdGljIHZvaWQgYXR0YWNoX2RlZmF1bHRfcWRpc2NzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTI2Mi1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjEyNjM6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTEyNjQtXHRpZiAocWRpc2MgIT0gXHUwMDI2bm9vcF9xZGlzYylcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYz0xNDQ0PXZvaWQgbXFfY2hhbmdlX3JlYWxfbnVtX3R4KHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBpbnQgbmV3X3JlYWxfdHgpXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xNDQ1LXtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjE0NDY6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTE0NDctXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jPTQ4PXZvaWQgbXFfZGVzdHJveV9jb21tb24oc3RydWN0IFFkaXNjICpzY2gpXG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jLTU5LX1cbm5ldC9zY2hlZC9zY2hfbXEuYzo2MDpFWFBPUlRfU1lNQk9MX05TX0dQTChtcV9kZXN0cm95X2NvbW1vbiwgXCYjMzQ7TkVUX1NDSEVEX0lOVEVSTkFMXCYjMzQ7KTtcbm5ldC9zY2hlZC9zY2hfbXEuYy02MS1cbi0tXG5uZXQvc2NoZWQvc2NoX21xLmM9Njg9aW50IG1xX2luaXRfY29tbW9uKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jLTEwNC19XG5uZXQvc2NoZWQvc2NoX21xLmM6MTA1OkVYUE9SVF9TWU1CT0xfTlNfR1BMKG1xX2luaXRfY29tbW9uLCBcJiMzNDtORVRfU0NIRURfSU5URVJOQUxcJiMzNDspO1xubmV0L3NjaGVkL3NjaF9tcS5jLTEwNi1cbi0tXG5uZXQvc2NoZWQvc2NoX21xLmM9MTIwPXZvaWQgbXFfYXR0YWNoKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfbXEuYy0xMzEtXHRcdFx0cWRpc2NfcHV0KG9sZCk7XG5uZXQvc2NoZWQvc2NoX21xLmM6MTMyOiNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG5uZXQvc2NoZWQvc2NoX21xLmMtMTMzLVx0XHRpZiAobnR4IFx1MDAzYyBkZXYtXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKVxuLS1cbm5ldC9zY2hlZC9zY2hfbXEuYy0xNDAtfVxubmV0L3NjaGVkL3NjaF9tcS5jOjE0MTpFWFBPUlRfU1lNQk9MX05TX0dQTChtcV9hdHRhY2gsIFwmIzM0O05FVF9TQ0hFRF9JTlRFUk5BTFwmIzM0Oyk7XG5uZXQvc2NoZWQvc2NoX21xLmMtMTQyLVxubmV0L3NjaGVkL3NjaF9tcS5jPTE0Mz12b2lkIG1xX2R1bXBfY29tbW9uKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9zY2hlZC9zY2hfbXEuYy0xODMtfVxubmV0L3NjaGVkL3NjaF9tcS5jOjE4NDpFWFBPUlRfU1lNQk9MX05TX0dQTChtcV9kdW1wX2NvbW1vbiwgXCYjMzQ7TkVUX1NDSEVEX0lOVEVSTkFMXCYjMzQ7KTtcbm5ldC9zY2hlZC9zY2hfbXEuYy0xODUtXG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jPTIwMj1zdHJ1Y3QgbmV0ZGV2X3F1ZXVlICptcV9zZWxlY3RfcXVldWUoc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jLTIwNi19XG5uZXQvc2NoZWQvc2NoX21xLmM6MjA3OkVYUE9SVF9TWU1CT0xfTlNfR1BMKG1xX3NlbGVjdF9xdWV1ZSwgXCYjMzQ7TkVUX1NDSEVEX0lOVEVSTkFMXCYjMzQ7KTtcbm5ldC9zY2hlZC9zY2hfbXEuYy0yMDgtXG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jPTIzNT1zdHJ1Y3QgUWRpc2MgKm1xX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wpXG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jLTI0MC19XG5uZXQvc2NoZWQvc2NoX21xLmM6MjQxOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG1xX2xlYWYsIFwmIzM0O05FVF9TQ0hFRF9JTlRFUk5BTFwmIzM0Oyk7XG5uZXQvc2NoZWQvc2NoX21xLmMtMjQyLVxubmV0L3NjaGVkL3NjaF9tcS5jPTI0Mz11bnNpZ25lZCBsb25nIG1xX2ZpbmQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkKVxuLS1cbm5ldC9zY2hlZC9zY2hfbXEuYy0yNTAtfVxubmV0L3NjaGVkL3NjaF9tcS5jOjI1MTpFWFBPUlRfU1lNQk9MX05TX0dQTChtcV9maW5kLCBcJiMzNDtORVRfU0NIRURfSU5URVJOQUxcJiMzNDspO1xubmV0L3NjaGVkL3NjaF9tcS5jLTI1Mi1cbm5ldC9zY2hlZC9zY2hfbXEuYz0yNTM9aW50IG1xX2R1bXBfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jLTI2Mi19XG5uZXQvc2NoZWQvc2NoX21xLmM6MjYzOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG1xX2R1bXBfY2xhc3MsIFwmIzM0O05FVF9TQ0hFRF9JTlRFUk5BTFwmIzM0Oyk7XG5uZXQvc2NoZWQvc2NoX21xLmMtMjY0LVxubmV0L3NjaGVkL3NjaF9tcS5jPTI2NT1pbnQgbXFfZHVtcF9jbGFzc19zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcbi0tXG5uZXQvc2NoZWQvc2NoX21xLmMtMjc1LX1cbm5ldC9zY2hlZC9zY2hfbXEuYzoyNzY6RVhQT1JUX1NZTUJPTF9OU19HUEwobXFfZHVtcF9jbGFzc19zdGF0cywgXCYjMzQ7TkVUX1NDSEVEX0lOVEVSTkFMXCYjMzQ7KTtcbm5ldC9zY2hlZC9zY2hfbXEuYy0yNzctXG5uZXQvc2NoZWQvc2NoX21xLmM9Mjc4PXZvaWQgbXFfd2FsayhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFkaXNjX3dhbGtlciAqYXJnKVxuLS1cbm5ldC9zY2hlZC9zY2hfbXEuYy0yOTEtfVxubmV0L3NjaGVkL3NjaF9tcS5jOjI5MjpFWFBPUlRfU1lNQk9MX05TX0dQTChtcV93YWxrLCBcJiMzNDtORVRfU0NIRURfSU5URVJOQUxcJiMzNDspO1xubmV0L3NjaGVkL3NjaF9tcS5jLTI5My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUYXByaW8gQ29uZmlndXJhdGlvbiBQcm9jZXNzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCBjb2RlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGNvbmZpZ3VyYXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGhhcHBlbnMgd2hlbiBhIHVzZXIgc2V0cyB1cCBhIFRBUFJJTyBxZGlzYy4gRnJvbSB3aGF0IEkgcmVjYWxsLCB0aGUgbmV0bGluayBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBgUlRNX05FV1FESVNDYCBvciBgUlRNX1NFVFFESVNDYCBtZXNzYWdlcywgd2lsbCB0cmlnZ2VyIGVpdGhlciBgdGFwcmlvX2luaXRgIG9yIGB0YXByaW9fY2hhbmdlYC4gTm93LCB0aGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0byBzZWUgaG93IHRoZSBzY2hlZHVsZSBpcyBhY3R1YWxseSBwYXJzZWQgYW5kIGFwcGxpZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIHRob3NlIGVudHJ5IHBvaW50cy4gSSBiZWxpZXZlIHRoYXQgYHRhcHJpb19jaGFuZ2VgIGNhbGxzIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLCB3aGljaCBpcyBsaWtlbHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2NoZWR1bGUgcGFyYW1ldGVycyBnZXQgcGFyc2VkLCB2YWxpZGF0ZWQsIGFuZCB0cmFuc2xhdGVkIGludG8gdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB0aGF0IGRyaXZlIHRoZSBUQVBSSU8gcXVldWluZyBiZWhhdmlvci4gSSBzaG91bGQgYmVnaW4gYnkgY2hlY2tpbmcgYHRhcHJpb19pbml0YCBhbmQgYHRhcHJpb19jaGFuZ2VgIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdpbGwgc3RhcnQsIHJpZ2h0IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODEwOlx0XHRcdHN0cnVjdCBuZXRkZXZfdGNfdHhxIHJlcztcbjE4MTE6XHRcbjE4MTI6XHRcdFx0cmVzLmNvbWJpbmVkID0gUkVBRF9PTkNFKGRldi1cdTAwM2V0Y190b190eHFbaV0uY29tYmluZWQpO1xuMTgxMzpcdFx0XHRpZiAocmVzLmNvdW50ICE9IG1xcHJpby1cdTAwM2Vjb3VudFtpXSB8fFxuMTgxNDpcdFx0XHQgICAgcmVzLm9mZnNldCAhPSBtcXByaW8tXHUwMDNlb2Zmc2V0W2ldKVxuMTgxNTpcdFx0XHRcdHJldHVybiAtMTtcbjE4MTY6XHRcdH1cbjE4MTc6XHRcbjE4MTg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBUQ19CSVRNQVNLOyBpJiM0MzsmIzQzOylcbjE4MTk6XHRcdFx0aWYgKG5ldGRldl9nZXRfcHJpb190Y19tYXAoZGV2LCBpKSAhPSBtcXByaW8tXHUwMDNlcHJpb190Y19tYXBbaV0pXG4xODIwOlx0XHRcdFx0cmV0dXJuIC0xO1xuMTgyMTpcdFxuMTgyMjpcdFx0cmV0dXJuIDA7XG4xODIzOlx0fVxuMTgyNDpcdFxuMTgyNTpcdHN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuMTgyNjpcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4xODI3Olx0e1xuMTgyODpcdFx0c3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIgPSBydG5sX2RlcmVmZXJlbmNlKHNjaC1cdTAwM2VzdGFiKTtcbjE4Mjk6XHRcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9UQVBSSU9fQVRUUl9NQVggJiM0MzsgMV0gPSB7IH07XG4xODMwOlx0XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLCAqYWRtaW4sICpuZXdfYWRtaW47XG4xODMxOlx0XHRzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xuMTgzMjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpO1xuMTgzMzpcdFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICptcXByaW8gPSBOVUxMO1xuMTgzNDpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjE4MzU6XHRcdHUzMiB0YXByaW9fZmxhZ3M7XG4xODM2Olx0XHRrdGltZV90IHN0YXJ0O1xuMTgzNzpcdFx0aW50IGksIGVycjtcbjE4Mzg6XHRcbjE4Mzk6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1RBUFJJT19BVFRSX01BWCwgb3B0LFxuMTg0MDpcdFx0XHRcdFx0XHQgIHRhcHJpb19wb2xpY3ksIGV4dGFjayk7XG4xODQxOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTg0MjpcdFx0XHRyZXR1cm4gZXJyO1xuMTg0MzpcdFxuMTg0NDpcdFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9QUklPTUFQXSlcbjE4NDU6XHRcdFx0bXFwcmlvID0gbmxhX2RhdGEodGJbVENBX1RBUFJJT19BVFRSX1BSSU9NQVBdKTtcbjE4NDY6XHRcbjE4NDc6XHRcdC8qIFRoZSBzZW1hbnRpY3Mgb2YgdGhlICYjMzk7ZmxhZ3MmIzM5OyBhcmd1bWVudCBpbiByZWxhdGlvbiB0byAmIzM5O2NoYW5nZSgpJiMzOTtcbjE4NDg6XHRcdCAqIHJlcXVlc3RzLCBhcmUgaW50ZXJwcmV0ZWQgZm9sbG93aW5nIHR3byBydWxlcyAod2hpY2ggYXJlIGFwcGxpZWQgaW5cbjE4NDk6XHRcdCAqIHRoaXMgb3JkZXIpOiAoMSkgYW4gb21pdHRlZCAmIzM5O2ZsYWdzJiMzOTsgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXNcbjE4NTA6XHRcdCAqIHplcm87ICgyKSB0aGUgJiMzOTtmbGFncyYjMzk7IG9mIGEgXCYjMzQ7cnVubmluZ1wmIzM0OyB0YXByaW8gaW5zdGFuY2UgY2Fubm90IGJlXG4xODUxOlx0XHQgKiBjaGFuZ2VkLlxuMTg1MjpcdFx0ICovXG4xODUzOlx0XHR0YXByaW9fZmxhZ3MgPSBubGFfZ2V0X3UzMl9kZWZhdWx0KHRiW1RDQV9UQVBSSU9fQVRUUl9GTEFHU10sIDApO1xuMTg1NDpcdFxuMTg1NTpcdFx0LyogdHh0aW1lLWFzc2lzdCBhbmQgZnVsbCBvZmZsb2FkIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgKi9cbjE4NTY6XHRcdGlmICgodGFwcmlvX2ZsYWdzIFx1MDAyNiBUQ0FfVEFQUklPX0FUVFJfRkxBR19UWFRJTUVfQVNTSVNUKSBcdTAwMjZcdTAwMjZcbjE4NTc6XHRcdCAgICAodGFwcmlvX2ZsYWdzIFx1MDAyNiBUQ0FfVEFQUklPX0FUVFJfRkxBR19GVUxMX09GRkxPQUQpKSB7XG4xODU4Olx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YltUQ0FfVEFQUklPX0FUVFJfRkxBR1NdLFxuMTg1OTpcdFx0XHRcdFx0ICAgIFwmIzM0O1RYVElNRV9BU1NJU1QgYW5kIEZVTExfT0ZGTE9BRCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlXCYjMzQ7KTtcbjE4NjA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODYxOlx0XHR9XG4xODYyOlx0XG4xODYzOlx0XHRpZiAocS1cdTAwM2VmbGFncyAhPSB0YXByaW9fZmxhZ3MpIHtcbjE4NjQ6XHRcdFx0aWYgKHEtXHUwMDNlZmxhZ3MgIT0gVEFQUklPX0ZMQUdTX0lOVkFMSUQpIHtcbjE4NjU6XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuMTg2NjpcdFx0XHRcdFx0XHQgICBcJiMzNDtDaGFuZ2luZyAmIzM5O2ZsYWdzJiMzOTsgb2YgYSBydW5uaW5nIHNjaGVkdWxlIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuMTg2NzpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE4Njg6XHRcdFx0fVxuMTg2OTpcdFx0XHRXUklURV9PTkNFKHEtXHUwMDNlZmxhZ3MsIHRhcHJpb19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODk5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyBgdGFwcmlvX2luaXRgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgaW1tZWRpYXRlIG5lZWQgaGVyZSBpcyB0byB0aG9yb3VnaGx5IGNoZWNrIGB0YXByaW9faW5pdGAuIFdlIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IG9yIHNldHVwIGZ1bmN0aW9uIGZvciBzb21ldGhpbmcsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBjYW4gYWxyZWFkeSBhbnRpY2lwYXRlIGEgZmV3IGtleSBhcmVhcyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2l0aGluIHRoaXMgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHdoYXQgaXQmIzM5O3MgZG9pbmcgb24gYSBoaWdoIGxldmVsLCB2ZXJpZnkgaG93IGl0JiMzOTtzIGludGVyZmFjaW5nIHdpdGggdGhlIGV4aXN0aW5nIGxpYnJhcmllcywgYW5kIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvYnZpb3VzIGxvZ2ljIGZsYXdzIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgd2F5IHRoYXQgaW5pdGlhbGl6YXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzIG9jY3VyLCBlc3BlY2lhbGx5IGFueSBzaGFyZWQgcmVzb3VyY2VzLgoKSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmdW5jdGlvbnMgYXJlIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgdGFwcmlvX2luaXRgLiBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgb2YgY29uY2Vybiwgc3VjaCBhcyBkZXByZWNhdGVkIGZ1bmN0aW9ucywgb3IgY2FsbHMgdG8gZXh0ZXJuYWwgc2VydmljZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgcmVzcG9uc2liaWxpdHkuIElzIGl0IHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgc3RhcnRpbmcgb3RoZXIgdGhyZWFkcz8gSSBuZWVkIHRvIGNoZWNrIGFsbCBvZiB0aGF0IHRvIGVuc3VyZSB0aGVyZSBpcyBubyBpc3N1ZXMuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIHN5c3RlbSBpcyBzZXQgdXAsIHNvIEkgY2FuIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGV4aXN0aW5nIHByb2dyYW0uIFRoaXMgd2lsbCBob3BlZnVsbHkgYWxsb3cgbWUgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGNvZGUgYW5kIG1ha2Ugc29tZSBpbnRlbGxpZ2VudCBwcmVkaWN0aW9ucyBhYm91dCBhcmVhcyB0aGF0IGFyZSBnb29kIGFuZCBhcmVhcyB0aGF0IHJlcXVpcmUgbW9kaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNjA6XHRcdFx0XHQgKiB0byBhbGwgbmV0ZGV2IFRYIHF1ZXVlcywgc28gdGhhdCBkZXZfcWRpc2NfZW5xdWV1ZSgpXG4yMTYxOlx0XHRcdFx0ICogZ29lcyB0aHJvdWdoIHRhcHJpb19lbnF1ZXVlKCkuXG4yMTYyOlx0XHRcdFx0ICovXG4yMTYzOlx0XHRcdFx0ZGV2X3F1ZXVlX3FkaXNjID0gc2NoO1xuMjE2NDpcdFx0XHR9XG4yMTY1Olx0XHRcdG9sZCA9IGRldl9ncmFmdF9xZGlzYyhkZXZfcXVldWUsIGRldl9xdWV1ZV9xZGlzYyk7XG4yMTY2Olx0XHRcdC8qIFRoZSBxZGlzYyYjMzk7cyByZWZjb3VudCByZXF1aXJlcyB0byBiZSBlbGV2YXRlZCBvbmNlXG4yMTY3Olx0XHRcdCAqIGZvciBlYWNoIG5ldGRldiBUWCBxdWV1ZSBpdCBpcyBncmFmdGVkIG9udG9cbjIxNjg6XHRcdFx0ICovXG4yMTY5Olx0XHRcdHFkaXNjX3JlZmNvdW50X2luYyhkZXZfcXVldWVfcWRpc2MpO1xuMjE3MDpcdFx0XHRpZiAob2xkKVxuMjE3MTpcdFx0XHRcdHFkaXNjX3B1dChvbGQpO1xuMjE3MjpcdFx0fVxuMjE3MzpcdH1cbjIxNzQ6XHRcbjIxNzU6XHRzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqdGFwcmlvX3F1ZXVlX2dldChzdHJ1Y3QgUWRpc2MgKnNjaCxcbjIxNzY6XHRcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGNsKVxuMjE3NzpcdHtcbjIxNzg6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcbjIxNzk6XHRcdHVuc2lnbmVkIGxvbmcgbnR4ID0gY2wgLSAxO1xuMjE4MDpcdFxuMjE4MTpcdFx0aWYgKG50eCBcdTAwM2U9IGRldi1cdTAwM2VudW1fdHhfcXVldWVzKVxuMjE4MjpcdFx0XHRyZXR1cm4gTlVMTDtcbjIxODM6XHRcbjIxODQ6XHRcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgbnR4KTtcbjIxODU6XHR9XG4yMTg2Olx0XG4yMTg3Olx0c3RhdGljIGludCB0YXByaW9fZ3JhZnQoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXG4yMTg4Olx0XHRcdFx0c3RydWN0IFFkaXNjICpuZXcsIHN0cnVjdCBRZGlzYyAqKm9sZCxcbjIxODk6XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4yMTkwOlx0e1xuMjE5MTpcdFx0c3RydWN0IHRhcHJpb19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbjIxOTI6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcbjIxOTM6XHRcdHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSA9IHRhcHJpb19xdWV1ZV9nZXQoc2NoLCBjbCk7XG4yMTk0Olx0XG4yMTk1Olx0XHRpZiAoIWRldl9xdWV1ZSlcbjIxOTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMTk3Olx0XG4yMTk4Olx0XHRpZiAoIW5ldylcbjIxOTk6XHRcdFx0bmV3ID0gXHUwMDI2bm9vcF9xZGlzYztcbjIyMDA6XHRcbjIyMDE6XHRcdGlmIChkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUClcbjIyMDI6XHRcdFx0ZGV2X2RlYWN0aXZhdGUoZGV2LCBmYWxzZSk7XG4yMjAzOlx0XG4yMjA0Olx0XHQvKiBJbiBvZmZsb2FkIG1vZGUsIHRoZSBjaGlsZCBRZGlzYyBpcyBkaXJlY3RseSBhdHRhY2hlZCB0byB0aGUgbmV0ZGV2XG4yMjA1Olx0XHQgKiBUWCBxdWV1ZSwgYW5kIHRodXMsIHdlIG5lZWQgdG8ga2VlcCBpdHMgcmVmY291bnQgZWxldmF0ZWQgaW4gb3JkZXJcbjIyMDY6XHRcdCAqIHRvIGNvdW50ZXJhY3QgcWRpc2NfZ3JhZnQoKSYjMzk7cyBjYWxsIHRvIHFkaXNjX3B1dCgpIG9uY2UgcGVyIFRYIHF1ZXVlLlxuMjIwNzpcdFx0ICogSG93ZXZlciwgc2F2ZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBuZXcgcWRpc2MgaW4gdGhlIHByaXZhdGUgYXJyYXkgaW5cbjIyMDg6XHRcdCAqIGJvdGggc29mdHdhcmUgYW5kIG9mZmxvYWQgY2FzZXMsIHRvIGhhdmUgYW4gdXAtdG8tZGF0ZSByZWZlcmVuY2UgdG9cbjIyMDk6XHRcdCAqIG91ciBjaGlsZHJlbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgYHRhcHJpb19pbml0YCBpbiB0aGUgTmV0ZmlsdGVyIFNjaGVkdWxlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgdGhlIFRBUFJJTyBzY2hlZHVsZXIgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCBieSBwaW5wb2ludGluZyB0aGUgc291cmNlIGZpbGUuICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7IHNvdW5kcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbG9jYXRpb24uIEdpdmVuIHdoYXQgSSBrbm93IGFib3V0IHRoZSB0eXBpY2FsIHN0cnVjdHVyZSBvZiB0aGUgTGludXgga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2ssIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBUQVBSSU8gY29kZS4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSB0aGUgaW5pdCBmdW5jdGlvbiBpdHNlbGYuIFR5cGljYWxseSwgaXTigJlzIG5hbWVkIHNvbWV0aGluZyBsaWtlIGB0YXByaW9faW5pdGAgb3IgYHRhcHJpb19tb2R1bGVfaW5pdGAuIE9uY2UgSSBoYXZlIHRoZSBmaWxlIG5hbWUsIGl0JiMzOTtzIGp1c3QgYSBtYXR0ZXIgb2Ygc2VhcmNoaW5nIGZvciBpdC4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHJlZ2lzdGVyZWQgYW5kIHBvdGVudGlhbGx5IGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY2hlZHVsZXImIzM5O3Mgb3ZlcmFsbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhbmQgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIG1vZHVsZSBsb2Fkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGludCB0YXByaW9faW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0yMDM1PXN0YXRpYyB2b2lkIHRhcHJpb19kZXN0cm95KHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA3My1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA3NDpzdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNzUtXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDM5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkluaXRpYWwgVGhvdWdodHMgb24gYHRhcHJpb19pbml0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBpbnRvIGl0LiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyB0dXJuaW5nIG15IGF0dGVudGlvbiB0byB0aGUgYHRhcHJpb19pbml0YCBwYXJ0IG9mIHRoZSBjb2RlLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQuIEkga25vdyB0aGlzIHBhcnRpY3VsYXIgcGllY2UgbGlrZWx5IHNldHMgdGhlIGZvdW5kYXRpb24sIGluaXRpYWxpemVzIHRoZSBjb3JlIGNvbXBvbmVudHMsIGFuZCBwcmVwYXJlcyB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSByZXN0IG9mIHRoZSBleGVjdXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydCBwZXJmZWN0bHkgYmVjYXVzZSBJIHdpbGwgbmVlZCBpdCB0byBpbmZvcm0gZXZlcnl0aGluZyBlbHNlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBiZWdpbnMsIG9yIGF0IGxlYXN0LCB0aGlzIGlzIHRoZSBsYXVuY2hwYWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwNzQ6XHRzdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4yMDc1Olx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4yMDc2Olx0e1xuMjA3NzpcdFx0c3RydWN0IHRhcHJpb19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbjIwNzg6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcbjIwNzk6XHRcdGludCBpLCB0YztcbjIwODA6XHRcbjIwODE6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnEtXHUwMDNlY3VycmVudF9lbnRyeV9sb2NrKTtcbjIwODI6XHRcbjIwODM6XHRcdGhydGltZXJfc2V0dXAoXHUwMDI2cS1cdTAwM2VhZHZhbmNlX3RpbWVyLCBhZHZhbmNlX3NjaGVkLCBDTE9DS19UQUksIEhSVElNRVJfTU9ERV9BQlMpO1xuMjA4NDpcdFxuMjA4NTpcdFx0cS1cdTAwM2Vyb290ID0gc2NoO1xuMjA4NjpcdFxuMjA4NzpcdFx0LyogV2Ugb25seSBzdXBwb3J0IHN0YXRpYyBjbG9ja2lkcy4gVXNlIGFuIGludmFsaWQgdmFsdWUgYXMgZGVmYXVsdFxuMjA4ODpcdFx0ICogYW5kIGdldCB0aGUgdmFsaWQgb25lIG9uIHRhcHJpb19jaGFuZ2UoKS5cbjIwODk6XHRcdCAqL1xuMjA5MDpcdFx0cS1cdTAwM2VjbG9ja2lkID0gLTE7XG4yMDkxOlx0XHRxLVx1MDAzZWZsYWdzID0gVEFQUklPX0ZMQUdTX0lOVkFMSUQ7XG4yMDkyOlx0XG4yMDkzOlx0XHRsaXN0X2FkZChcdTAwMjZxLVx1MDAzZXRhcHJpb19saXN0LCBcdTAwMjZ0YXByaW9fbGlzdCk7XG4yMDk0Olx0XG4yMDk1Olx0XHRpZiAoc2NoLVx1MDAzZXBhcmVudCAhPSBUQ19IX1JPT1QpIHtcbjIwOTY6XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Q2FuIG9ubHkgYmUgYXR0YWNoZWQgYXMgcm9vdCBxZGlzY1wmIzM0Oyk7XG4yMDk3Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjIwOTg6XHRcdH1cbjIwOTk6XHRcbjIxMDA6XHRcdGlmICghbmV0aWZfaXNfbXVsdGlxdWV1ZShkZXYpKSB7XG4yMTAxOlx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O011bHRpLXF1ZXVlIGRldmljZSBpcyByZXF1aXJlZFwmIzM0Oyk7XG4yMTAyOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjIxMDM6XHRcdH1cbjIxMDQ6XHRcbjIxMDU6XHRcdHEtXHUwMDNlcWRpc2NzID0ga3phbGxvY19vYmpzKHEtXHUwMDNlcWRpc2NzWzBdLCBkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XG4yMTA2Olx0XHRpZiAoIXEtXHUwMDNlcWRpc2NzKVxuMjEwNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIxMDg6XHRcbjIxMDk6XHRcdGlmICghb3B0KVxuMjExMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjIxMTE6XHRcbjIxMTI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuMjExMzpcdFx0XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWU7XG4yMTE0Olx0XHRcdHN0cnVjdCBRZGlzYyAqcWRpc2M7XG4yMTE1Olx0XG4yMTE2Olx0XHRcdGRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBpKTtcbjIxMTc6XHRcdFx0cWRpc2MgPSBxZGlzY19jcmVhdGVfZGZsdChkZXZfcXVldWUsXG4yMTE4Olx0XHRcdFx0XHRcdCAgXHUwMDI2cGZpZm9fcWRpc2Nfb3BzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM2MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHRhcHJpb19pbml0YCBhbmQgYHRhcHJpb19jaGFuZ2VgIFJlbGF0aW9uc2hpcCoqCgpBbHJpZ2h0LCBJIHNlZSBhIHBvdGVudGlhbCBkZXBlbmRlbmN5IGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB0YXByaW9faW5pdGAgbWlnaHQgYmUgaW52b2tpbmcgYHRhcHJpb19jaGFuZ2VgIHNvbWV0aW1lIGFmdGVyIGl0cyBpbml0aWFsIGV4ZWN1dGlvbi4gVGhpcyB3YXJyYW50cyBhIHF1aWNrIHZlcmlmaWNhdGlvbi4gVG8gY29uZmlybSB0aGlzIGh1bmNoLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3MgcGlucG9pbnQgdGhlIHJlbGV2YW50IHNlY3Rpb24uIEkmIzM5O2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiBsaW5lcyAyMTIwIHRocm91Z2ggMjE1MC4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgY29udGFpbiB0aGUgc21va2luZyBndW4gb3IsIGNvbnZlcnNlbHksIGNsZWFyIHVwIG15IHN1c3BpY2lvbi4gSSYjMzk7bSBsb29raW5nIGZvciBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsIG9yIGEgbW9yZSBpbmRpcmVjdCBtZWNoYW5pc20gdGhhdCB3b3VsZCB0cmlnZ2VyIGB0YXByaW9fY2hhbmdlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTIwOlx0XHRcdFx0XHRcdFx0ICAgIFRDX0hfTUlOKGkgJiM0MzsgMSkpLFxuMjEyMTpcdFx0XHRcdFx0XHQgIGV4dGFjayk7XG4yMTIyOlx0XHRcdGlmICghcWRpc2MpXG4yMTIzOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMTI0Olx0XG4yMTI1Olx0XHRcdGlmIChpIFx1MDAzYyBkZXYtXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKVxuMjEyNjpcdFx0XHRcdHFkaXNjX2hhc2hfYWRkKHFkaXNjLCBmYWxzZSk7XG4yMTI3Olx0XG4yMTI4Olx0XHRcdHEtXHUwMDNlcWRpc2NzW2ldID0gcWRpc2M7XG4yMTI5Olx0XHR9XG4yMTMwOlx0XG4yMTMxOlx0XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIFRDX1FPUFRfTUFYX1FVRVVFOyB0YyYjNDM7JiM0MzspXG4yMTMyOlx0XHRcdHEtXHUwMDNlZnBbdGNdID0gVENfRlBfRVhQUkVTUztcbjIxMzM6XHRcbjIxMzQ6XHRcdHRhcHJpb19kZXRlY3RfYnJva2VuX21xcHJpbyhxKTtcbjIxMzU6XHRcbjIxMzY6XHRcdHJldHVybiB0YXByaW9fY2hhbmdlKHNjaCwgb3B0LCBleHRhY2spO1xuMjEzNzpcdH1cbjIxMzg6XHRcbjIxMzk6XHRzdGF0aWMgdm9pZCB0YXByaW9fYXR0YWNoKHN0cnVjdCBRZGlzYyAqc2NoKVxuMjE0MDpcdHtcbjIxNDE6XHRcdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4yMTQyOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XG4yMTQzOlx0XHR1bnNpZ25lZCBpbnQgbnR4O1xuMjE0NDpcdFxuMjE0NTpcdFx0LyogQXR0YWNoIHVuZGVybHlpbmcgcWRpc2MgKi9cbjIxNDY6XHRcdGZvciAobnR4ID0gMDsgbnR4IFx1MDAzYyBkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgbnR4JiM0MzsmIzQzOykge1xuMjE0NzpcdFx0XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgbnR4KTtcbjIxNDg6XHRcdFx0c3RydWN0IFFkaXNjICpvbGQsICpkZXZfcXVldWVfcWRpc2M7XG4yMTQ5Olx0XG4yMTUwOlx0XHRcdGlmIChGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSkge1xuMjE1MTpcdFx0XHRcdHN0cnVjdCBRZGlzYyAqcWRpc2MgPSBxLVx1MDAzZXFkaXNjc1tudHhdO1xuMjE1MjpcdFxuMjE1MzpcdFx0XHRcdC8qIEluIG9mZmxvYWQgbW9kZSwgdGhlIHJvb3QgdGFwcmlvIHFkaXNjIGlzIGJ5cGFzc2VkXG4yMTU0Olx0XHRcdFx0ICogYW5kIHRoZSBuZXRkZXYgVFggcXVldWVzIHNlZSB0aGUgY2hpbGRyZW4gZGlyZWN0bHlcbjIxNTU6XHRcdFx0XHQgKi9cbjIxNTY6XHRcdFx0XHRxZGlzYy1cdTAwM2VmbGFncyB8PSBUQ1FfRl9PTkVUWFFVRVVFIHwgVENRX0ZfTk9QQVJFTlQ7XG4yMTU3Olx0XHRcdFx0ZGV2X3F1ZXVlX3FkaXNjID0gcWRpc2M7XG4yMTU4Olx0XHRcdH0gZWxzZSB7XG4yMTU5Olx0XHRcdFx0LyogSW4gc29mdHdhcmUgbW9kZSwgYXR0YWNoIHRoZSByb290IHRhcHJpbyBxZGlzY1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI0MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRhcHJpbyBTY2hlZHVsZSBQYXRjaDogQSBEZWVwIERpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBsb29rcyBsaWtlIGEgc29saWQgdmFsaWRhdGlvbiBmaXgsIGFuZCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCB0aGUgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZnVuY3Rpb24gYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBgY3ljbGVfdGltZWAgcGFyYW1ldGVyLgoKUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIGEgYml0IGxheC4gSXQgd291bGQgb25seSBjYWxjdWxhdGUgdGhlIGBjeWNsZWAgKHRoZSB0b3RhbCBzdW0gb2YgYWxsIHNjaGVkdWxlIGVudHJ5IGludGVydmFscykgKmlmKiBgbmV3LSZndDtjeWNsZV90aW1lYCB3YXNuJiMzOTt0IGFscmVhZHkgc2V0LiBUaGVuLCBpdCBjaGVja2VkIGZvciBpbnRlZ2VyIG92ZXJmbG93cy4gTm93LCB0aGUgcGF0Y2ggKmFsd2F5cyogY2FsY3VsYXRlcyBgY3ljbGVgLiBJdCAqYWx3YXlzKiBjaGVja3MgZm9yIG92ZXJmbG93LiBBbmQsIGNyaXRpY2FsbHksIGl0IGFkZHMgYSBuZXcgY2hlY2s6IElmIGEgdXNlciBoYXMgZXhwbGljaXRseSBwcm92aWRlZCBgbmV3LSZndDtjeWNsZV90aW1lYCAqYW5kKiB0aGlzIHByb3ZpZGVkIHZhbHVlIGlzICpsZXNzKiB0aGFuIHRoZSBjYWxjdWxhdGVkIGBjeWNsZWAsIHRoZSBjb25maWd1cmF0aW9uIGlzIG5vdyByZWplY3RlZCB3aXRoIGFuIGAtRUlOVkFMYCBhbmQgYW4gaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZS4gVGhpcyBpcyBpbXBvcnRhbnQsIGEgYGN5Y2xlX3RpbWVgIHNob3J0ZXIgdGhhbiB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFscyBpcyBsb2dpY2FsbHkgaW52YWxpZC4gVGhpcyBlZmZlY3RpdmVseSB0aWdodGVucyB1cCBpbnB1dCB2YWxpZGF0aW9uLgoKRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgdGhlIHBhdGNoIHNlZW1zIHNwb3Qtb24uIEl0JiMzOTtzIGZpeGluZyBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGhvdyBgdGFwcmlvYCBzY2hlZHVsZXMgYXJlIGNvbmZpZ3VyZWQgdmlhIG5ldGxpbmsgYnkgZW5zdXJpbmcgdGhhdCB0aGUgZ2l2ZW4gYGN5Y2xlX3RpbWVgIGlzIHZhbGlkIHdpdGggdGhlIHN1bSBvZiB0aGUgc2NoZWR1bGluZyBlbnRyaWVzLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFuZCBzZW5zaWJsZSBhZGRpdGlvbiwgZW5zdXJpbmcgdGhhdCBhIHZhbGlkIHNjaGVkdWxlIGlzIGFsd2F5cyB1c2VkLgoKTm93LCBjb25zaWRlcmluZyByZWFjaGFiaWxpdHksIHRoaXMgaXMgdG90YWxseSB3aXRoaW4gdGhlIHJlYWxtIG9mIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGB0YXByaW9gIHFkaXNjIGlzIGVudGlyZWx5IHNvZnR3YXJlLWJhc2VkLiBXZSBjYW4gY3JlYXRlIGR1bW15IGludGVyZmFjZXMsIHZldGggcGFpcnMsIG9yIGV2ZW4gdGFwIGRldmljZXMsIGFuZCB1c2UgYHRjYCB0byBhdHRhY2ggYSBgdGFwcmlvYCBxZGlzYyB0byB0aGVtLiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IHN0YW5kYXJkIExpbnV4IG5ldHdvcmtpbmcgdG9vbGluZyBlYXNpbHkgc3VwcG9ydHMsIGFuZCBzeXprYWxsZXIsIGJhc2VkIG9uIHRoZSBub3RlcywgaXMgYSBuYXR1cmFsIGZpdCBoZXJlLiBBbnkgdXNlciB3aXRoIHRoZSBgQ0FQX05FVF9BRE1JTmAgY2FwYWJpbGl0eSBjYW4gc2V0IHRoaXMgdXAuCgpUaGUgcXVlc3Rpb24gb2YgZnV6emluZyBpcyBhIG5hdHVyYWwgZm9sbG93LXVwLiBCYXNlZCBvbiB0aGUgY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBJdCBtb2RpZmllcyBjb3JlIHRyYWZmaWMgY29udHJvbCBzY2hlZHVsaW5nIGxvZ2ljLCBtYWtpbmcgaXQgYSBwb3RlbnRpYWxseSBmcnVpdGZ1bCB0YXJnZXQuIFdlIGFyZSBjaGFuZ2luZyB2YWxpZGF0aW9uIGFuZCBlcnJvciBwYXRocywgYW5kIGl0IGlzIG5vdCBoYXJkd2FyZS1zcGVjaWZpYywgcHVyZWx5IHNvZnR3YXJlLgoKVG8gZGV0ZXJtaW5lIGlmIGZ1enppbmcgaXMgdmlhYmxlLCBteSBuZXh0IHN0ZXAgaXMgZW5zdXJpbmcgdGhlIGNvbmZpZ3MgYXJlIGNvcnJlY3QgYW5kIHJlYWNoYWJsZS4gSSYjMzk7bGwgbmVlZCBgQ09ORklHX05FVF9TQ0hfVEFQUklPYC4gSSBzZWUgaXQgZGVwZW5kcyBvbiBgTkVUX1NDSEVEYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBORVRgLiBBbHNvIHRoZXJlIGlzIGEgc2VsZWN0IG9uIGBORVRfU0NIX01RUFJJT19MSUJgLiBJIHdvdWxkIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIGRlcGVuZGVuY2llcyBhbmQgYCNpZmRlZmAgZGlyZWN0aXZlcyBpbiB0aGUgc291cmNlIGZpbGUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIGZvciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgd2l0aGluIGBzY2hfdGFwcmlvLmNgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBmaWxlIHJlbGllcyBvbiBhbnkgc3BlY2lmaWMgYENPTkZJR19gIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBUaGlzIGlzIGEgc3RhbmRhcmQgZmlyc3Qgc3RlcCB3aGVuIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYWJpbGl0eSBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd2l0aGluIGEga2VybmVsIG1vZHVsZSBvciBkcml2ZXIuIEl0IGFsbG93cyBtZSB0byBwaW5wb2ludCB3aGljaCBwYXJ0cyBvZiB0aGUgY29kZSBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGVzZSByZWxhdGlvbnNoaXBzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZywgcG9ydGluZywgYW5kIGdlbmVyYWxseSB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb250ZXh0LiBUaW1lIHRvIGdldCBteSBncmVwIG9uIGFuZCBzZWUgd2hhdCB3ZSYjMzk7cmUgd29ya2luZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwMTUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipDaGVja2luZyBgbmV0L3NjaGVkL0tjb25maWdgIGZvciBgTkVUX1NDSF9UQVBSSU9gIGFuZCBEZXBlbmRlbmNpZXMqKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVHJhZmZpYyBBd2FyZSBQcmlvcml0eSBTY2hlZHVsaW5nIChUQVBSSU8pIHdpdGhpbiB0aGUgTGludXggbmV0d29ya2luZyBzdGFjay4gTXkgZmlyc3QgbW92ZSBpcyB0byBkaXZlIGludG8gYG5ldC9zY2hlZC9LY29uZmlnYC4gSSBhbHJlYWR5IGtub3cgdGhlIGdlbmVyYWwgbGF5b3V0IG9mIHRoZSBuZXR3b3JraW5nIEtjb25maWcgZmlsZXMsIHNvIEkgY2FuIHF1aWNrbHkgbmF2aWdhdGUgdG8gdGhhdCBkaXJlY3RvcnkuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBORVRfU0NIX1RBUFJJT2Agb3B0aW9uIGRpcmVjdGx5IOKAkyB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IHRhcmdldC4gSSBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBkZWZpbmVkIGFuZCB3aGF0IGl0cyBkZWZhdWx0IHNldHRpbmcgaXMuCgpCZXlvbmQgdGhlIGNvcmUgb3B0aW9uLCBJICptdXN0KiBpbW1lZGlhdGVseSBjaGVjayBmb3IgYW55IGRlcGVuZGVuY2llcy4gSSBoYXZlIHRvIGtub3cgKndoYXQqIG90aGVyIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBhcmUgcmVxdWlyZWQgYmVmb3JlIFRBUFJJTyBjYW4gYmUgc2VsZWN0ZWQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgYW5kIHBvdGVudGlhbCBidWlsZCBkZXBlbmRlbmNpZXMuIEnigJlsbCBsb29rIGZvciB0aGluZ3MgbGlrZSwgZG9lcyBpdCByZXF1aXJlIGEgc3BlY2lmaWMgcXVldWluZyBkaXNjaXBsaW5lIG9yIGEgY29yZSBzY2hlZHVsZXIgZmVhdHVyZT8gQW55IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGFyZSBrZXkgaGVyZS4gSSYjMzk7bGwgYWxzbyBiZSBtaW5kZnVsIG9mIGdlbmVyYWwgYE5FVF9TQ0hFRGAgZGVwZW5kZW5jaWVzLCBhcyBUQVBSSU8gaXMgYSBzY2hlZHVsaW5nIGRpc2NpcGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz0xNjc9Y29uZmlnIE5FVF9TQ0hfTVFQUklPX0xJQlxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTE3MS1cbm5ldC9zY2hlZC9LY29uZmlnOjE3Mjpjb25maWcgTkVUX1NDSF9UQVBSSU9cbm5ldC9zY2hlZC9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O1RpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXCYjMzQ7XG4tLVxubmV0L3NjaGVkL01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19ORVRfU0NIX0VURilcdCYjNDM7PSBzY2hfZXRmLm9cbm5ldC9zY2hlZC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfTkVUX1NDSF9UQVBSSU8pXHQmIzQzOz0gc2NoX3RhcHJpby5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX05FVF9TQ0hfQlBGKVx0JiM0Mzs9IGJwZl9xZGlzYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTEwCgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFRhcHJpbyBTY2hlZHVsZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBORVRfU0NIX1RBUFJJT2AgYW5kIGBORVRfU0NIRURgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4gaGVyZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgc28gSSYjMzk7bGwgY2hlY2sgb3V0IHdoYXQgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gVW5kZXJzdGFuZGluZyB0aG9zZSBmdW5jdGlvbnMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIHNjaGVkdWxlciBvcGVyYXRlcyB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/W2EtekEtWl8wLTldJiM0MzsgW2EtekEtWl8wLTldJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMzQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjM1OnN0YXRpYyBMSVNUX0hFQUQodGFwcmlvX2xpc3QpO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0zNi1zdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgdGFwcmlvX2hhdmVfYnJva2VuX21xcHJpbztcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTExND1zdHJ1Y3QgX190Y190YXByaW9fcW9wdF9vZmZsb2FkIHtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExOC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTE5OnN0YXRpYyB2b2lkIHRhcHJpb19jYWxjdWxhdGVfZ2F0ZV9kdXJhdGlvbnMoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTIwLVx0XHRcdFx0XHQgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNjMtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE2NDpzdGF0aWMgYm9vbCB0YXByaW9fZW50cnlfYWxsb3dzX3R4KGt0aW1lX3Qgc2tiX2VuZF90aW1lLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNjUtXHRcdFx0XHQgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCBpbnQgdGMpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNjktXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3MDpzdGF0aWMga3RpbWVfdCBzY2hlZF9iYXNlX3RpbWUoY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzctXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3ODpzdGF0aWMga3RpbWVfdCB0YXByaW9fbW9ub190b19hbnkoY29uc3Qgc3RydWN0IHRhcHJpb19zY2hlZCAqcSwga3RpbWVfdCBtb25vKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzkte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkwLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxOTE6c3RhdGljIGt0aW1lX3QgdGFwcmlvX2dldF90aW1lKGNvbnN0IHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5Mi17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTUtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE5NjpzdGF0aWMgdm9pZCB0YXByaW9fZnJlZV9zY2hlZF9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5Ny17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwOTpzdGF0aWMgdm9pZCBzd2l0Y2hfc2NoZWR1bGVzKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxMC1cdFx0XHQgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKiphZG1pbixcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyMy0vKiBHZXQgaG93IG11Y2ggdGltZSBoYXMgYmVlbiBhbHJlYWR5IGVsYXBzZWQgaW4gdGhlIGN1cnJlbnQgY3ljbGUuICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIyNDpzdGF0aWMgczMyIGdldF9jeWNsZV90aW1lX2VsYXBzZWQoc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsIGt0aW1lX3QgdGltZSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI1LXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzNC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjM1OnN0YXRpYyBrdGltZV90IGdldF9pbnRlcnZhbF9lbmRfdGltZShzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM2LVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICphZG1pbixcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1Ni1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjU3OnN0YXRpYyBpbnQgbGVuZ3RoX3RvX2R1cmF0aW9uKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIGludCBsZW4pXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1OC17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNjEtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI2MjpzdGF0aWMgaW50IGR1cmF0aW9uX3RvX2xlbmd0aChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCB1NjQgZHVyYXRpb24pXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2My17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNzAtICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI3MTpzdGF0aWMgdm9pZCB0YXByaW9fdXBkYXRlX3F1ZXVlX21heF9zZHUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjcyLVx0XHRcdFx0XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTMyMz1zdGF0aWMgc3RydWN0IHNjaGVkX2VudHJ5ICpmaW5kX2VudHJ5X3RvX3RyYW5zbWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0zOTktXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjQwMDpzdGF0aWMgYm9vbCBpc192YWxpZF9pbnRlcnZhbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDAxLXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTQxOC0vKiBUaGlzIHJldHVybnMgdGhlIHRzdGFtcCB2YWx1ZSBzZXQgYnkgVENQIGluIHRlcm1zIG9mIHRoZSBzZXQgY2xvY2suICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjQxOTpzdGF0aWMga3RpbWVfdCBnZXRfdGNwX3RzdGFtcChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy00MjAte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDY3LSAqL1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzo0Njg6c3RhdGljIGxvbmcgZ2V0X3BhY2tldF90eHRpbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTQ2OS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy01MzktLyogRGV2aWNlcyB3aXRoIGZ1bGwgb2ZmbG9hZCBhcmUgZXhwZWN0ZWQgdG8gaG9ub3IgdGhpcyBpbiBoYXJkd2FyZSAqL1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzo1NDA6c3RhdGljIGJvb2wgdGFwcmlvX3NrYl9leGNlZWRzX3F1ZXVlX21heF9zZHUoc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU0MS1cdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTYwLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo1NjE6c3RhdGljIGludCB0YXByaW9fZW5xdWV1ZV9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU2Mi1cdFx0XHQgICAgICBzdHJ1Y3QgUWRpc2MgKmNoaWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy01ODEtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjU4MjpzdGF0aWMgaW50IHRhcHJpb19lbnF1ZXVlX3NlZ21lbnRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTgzLVx0XHRcdFx0ICAgIHN0cnVjdCBRZGlzYyAqY2hpbGQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02MjYtICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjYyNzpzdGF0aWMgaW50IHRhcHJpb19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02MjgtXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz02NTY9c3RhdGljIHN0cnVjdCBza19idWZmICp0YXByaW9fcGVlayhzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTY2MS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NjYyOnN0YXRpYyB2b2lkIHRhcHJpb19zZXRfYnVkZ2V0cyhzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjMtXHRcdFx0ICAgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNjgyLS8qIFdoZW4gYW4gc2tiIGlzIHNlbnQsIGl0IGNvbnN1bWVzIGZyb20gdGhlIGJ1ZGdldCBvZiBhbGwgdHJhZmZpYyBjbGFzc2VzICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjY4MzpzdGF0aWMgaW50IHRhcHJpb191cGRhdGVfYnVkZ2V0cyhzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCBzaXplX3QgbGVuLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02ODQtXHRcdFx0XHQgaW50IHRjX2NvbnN1bWVkLCBpbnQgbnVtX3RjKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9NzA2PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGFwcmlvX2RlcXVldWVfZnJvbV90eHEoc3RydWN0IFFkaXNjICpzY2gsIGludCB0eHEsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy03NjItXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjc2MzpzdGF0aWMgdm9pZCB0YXByaW9fbmV4dF90Y190eHEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHRjLCBpbnQgKnR4cSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNzY0LXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTgzMz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtODcyLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo4NzM6c3RhdGljIGJvb2wgc2hvdWxkX3Jlc3RhcnRfY3ljbGUoY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqb3Blcixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtODc0LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnkpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04ODQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjg4NTpzdGF0aWMgYm9vbCBzaG91bGRfY2hhbmdlX3NjaGVkdWxlcyhjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICphZG1pbixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtODg2LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMDIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB0YXByaW9fcG9saWN5W1RDQV9UQVBSSU9fQVRUUl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDM3LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDM4OnN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwMzktXHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDY5LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDcwOnN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTA3MS1cdFx0XHQgICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksIGludCBpbmRleCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwODgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEwODk6c3RhdGljIGludCBwYXJzZV9zY2hlZF9saXN0KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKmxpc3QsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwOTAtXHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEyOC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTEyOTpzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExMzAtXHRcdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE4Mi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTE4MzpzdGF0aWMgaW50IHRhcHJpb19wYXJzZV9tcXByaW9fb3B0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExODQtXHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjEwLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMjExOnN0YXRpYyBpbnQgdGFwcmlvX2dldF9zdGFydF90aW1lKHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjEyLVx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI0NC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTI0NTpzdGF0aWMgdm9pZCBzZXR1cF9maXJzdF9lbmRfdGltZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjQ2LVx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCBrdGltZV90IGJhc2UpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjc0LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMjc1OnN0YXRpYyB2b2lkIHRhcHJpb19zdGFydF9zY2hlZChzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI3Ni1cdFx0XHQgICAgICAga3RpbWVfdCBzdGFydCwgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3KVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI5Ni1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTI5NzpzdGF0aWMgdm9pZCB0YXByaW9fc2V0X3BpY29zX3Blcl9ieXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyOTgtXHRcdFx0XHQgICAgICBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMzMC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTMzMTpzdGF0aWMgaW50IHRhcHJpb19kZXZfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMzMi1cdFx0XHQgICAgICAgdm9pZCAqcHRyKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTM2Ny1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTM2ODpzdGF0aWMgdm9pZCBzZXR1cF90eHRpbWUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTM2OS1cdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsIGt0aW1lX3QgYmFzZSlcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE0MDU9RVhQT1JUX1NZTUJPTF9HUEwodGFwcmlvX29mZmxvYWRfZ2V0KTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQwNi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQwNzp2b2lkIHRhcHJpb19vZmZsb2FkX2ZyZWUoc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKm9mZmxvYWQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MDgte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTQxOT1FWFBPUlRfU1lNQk9MX0dQTCh0YXByaW9fb2ZmbG9hZF9mcmVlKTtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MzItICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE0MzM6c3RhdGljIHZvaWQgdGFwcmlvX29mZmxvYWRfY29uZmlnX2NoYW5nZWQoc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQzNC17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDQyLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDQzOnN0YXRpYyB1MzIgdGNfbWFwX3RvX3F1ZXVlX21hc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHRjX21hc2spXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0NDQte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ2MS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQ2MjpzdGF0aWMgdm9pZCB0YXByaW9fc2NoZWRfdG9fb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDYzLVx0XHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ5MC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQ5MTpzdGF0aWMgdm9pZCB0YXByaW9fZGV0ZWN0X2Jyb2tlbl9tcXByaW8oc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ5Mi17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTA3LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNTA4OnN0YXRpYyB2b2lkIHRhcHJpb19jbGVhbnVwX2Jyb2tlbl9tcXByaW8oc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTUwOS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTE4LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNTE5OnN0YXRpYyBpbnQgdGFwcmlvX2VuYWJsZV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1MjAtXHRcdFx0XHQgc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1ODQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE1ODU6c3RhdGljIGludCB0YXByaW9fZGlzYWJsZV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1ODYtXHRcdFx0XHQgIHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNjI1LSAqL1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNjI2OnN0YXRpYyBpbnQgdGFwcmlvX3BhcnNlX2Nsb2NraWQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKip0Yixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTYyNy1cdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MDMtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3MDQ6c3RhdGljIGludCB0YXByaW9fcGFyc2VfdGNfZW50cnkoc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MDUtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTc1MC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTc1MTpzdGF0aWMgaW50IHRhcHJpb19wYXJzZV90Y19lbnRyaWVzKHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzUyLVx0XHRcdFx0ICAgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTgwMC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTgwMTpzdGF0aWMgaW50IHRhcHJpb19tcXByaW9fY21wKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MDItXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKm1xcHJpbylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MjQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE4MjU6c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MjYtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwMTktXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwMjA6c3RhdGljIHZvaWQgdGFwcmlvX3Jlc2V0KHN0cnVjdCBRZGlzYyAqc2NoKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDIxLXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwMzQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwMzU6c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwMzYte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA3My1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA3NDpzdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNzUtXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTM4LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMTM5OnN0YXRpYyB2b2lkIHRhcHJpb19hdHRhY2goc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNDAte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjE3NT1zdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqdGFwcmlvX3F1ZXVlX2dldChzdHJ1Y3QgUWRpc2MgKnNjaCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxODYtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIxODc6c3RhdGljIGludCB0YXByaW9fZ3JhZnQoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxODgtXHRcdFx0c3RydWN0IFFkaXNjICpuZXcsIHN0cnVjdCBRZGlzYyAqKm9sZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyMjktXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIyMzA6c3RhdGljIGludCBkdW1wX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyMzEtXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnkpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjU5LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMjYwOnN0YXRpYyBpbnQgZHVtcF9zY2hlZHVsZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjYxLVx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpyb290KVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI5NS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjI5NjpzdGF0aWMgaW50IHRhcHJpb19kdW1wX3RjX2VudHJpZXMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI5Ny1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzMjgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIzMjk6c3RhdGljIGludCB0YXByaW9fcHV0X3N0YXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IHZhbCwgdTE2IGF0dHJ0eXBlKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzMwLXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzMzctXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIzMzg6c3RhdGljIGludCB0YXByaW9fZHVtcF94c3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBnbmV0X2R1bXAgKmQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzMzktXHRcdFx0ICAgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKm9mZmxvYWQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzg1LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMzg2OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfc3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBnbmV0X2R1bXAgKmQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzODcte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM5NC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjM5NTpzdGF0aWMgaW50IHRhcHJpb19kdW1wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzk2LXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI0Nzc9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGFwcmlvX2ZpbmQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQ4NS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjQ4NjpzdGF0aWMgaW50IHRhcHJpb19kdW1wX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDg3LVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjbXNnICp0Y20pXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDk3LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNDk4OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfY2xhc3Nfc3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0OTktXHRcdFx0XHQgICBzdHJ1Y3QgZ25ldF9kdW1wICpkKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjUxNy1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjUxODpzdGF0aWMgdm9pZCB0YXByaW9fd2FsayhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFkaXNjX3dhbGtlciAqYXJnKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTE5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyODkKCQkJCQkJCW91dHB1dDogMTM3CgkJCQkJCQl0aG91Z2h0czogMzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgc2NoX3RhcHJpby5jYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSByZXZpZXdpbmcgdGhlIGNvcmUgaW5zdHJ1Y3Rpb24gYWJvdXQgZm9jdXNpbmcgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGlzIG1lYW5zIEkmIzM5O20gbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSAqbm90KiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgdGhlcmVmb3JlIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgbWFraW5nIHRoZW0gaW50ZXJlc3RpbmcgZm9yIHRoZSBhbmFseXNpcy4KCkkmIzM5O20gc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBzY2hfdGFwcmlvLmNgLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIFFkaXNjIG9wZXJhdGlvbnMgZnVuY3Rpb25zLCBsaWtlIGB0YXByaW9faW5pdGAsIGB0YXByaW9fY2hhbmdlYCwgYW5kIGB0YXByaW9fZHVtcGAsIGFyZSByZWZlcmVuY2VkIGJ5IGZ1bmN0aW9uIHBvaW50ZXJzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdGFwcmlvX3FkaXNjX29wc2Agc3RydWN0LiBCZWNhdXNlIGlmIHRoZXkgKmFyZSogcmVmZXJlbmNlZCBpbiB0aGF0IHdheSAobGlrZSBgdGFwcmlvX2luaXRgLCBgdGFwcmlvX2NoYW5nZWAsIGB0YXByaW9fZHVtcGAsIGB0YXByaW9fZGVzdHJveWApLCB0aGUgY29tcGlsZXIgKmNhbiYjMzk7dCogaW5saW5lIHRoZW07IHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4sIHdoaWNoIGlzIHBlcmZlY3QgZm9yIG15IHB1cnBvc2UuCgpBbmQsIG9mIGNvdXJzZSwgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYWN0dWFsbHkgYmVlbiBtb2RpZmllZCBieSB0aGUgcGF0Y2guIFNvLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGB0YXByaW9faW5pdGAsIGB0YXByaW9fY2hhbmdlYCwgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIGFyZSBpbmRlZWQgZ29vZCBjYW5kaWRhdGVzIGFzIGZvY3VzIHN5bWJvbHMsIGdpdmVuIHRoZWlyIHBvdGVudGlhbCB0byBtZWV0IHRoZSBpbml0aWFsIGNyaXRlcmlhLgoKQmVmb3JlIGdvaW5nIGZ1cnRoZXIsIEkgc2hvdWxkIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE1ha2Ugc3VyZSBgTkVUX1NDSEVEYCBhbmQgYE5FVF9TQ0hfVEFQUklPYCBhcmUgZW5hYmxlZCDigJMgYWx3YXlzIGdvb2QgdG8gdmVyaWZ5IHRoZXNlIHRoaW5ncy4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSBjb3JlIGNoYW5nZTogdGhlIHBhdGNoIHVwZGF0ZXMgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgd2l0aGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gVGhpcyB1cGRhdGUgcHJpbWFyaWx5IGFkZHJlc3NlcyB0aGUgdmFsaWRhdGlvbiBvZiBgY3ljbGVfdGltZWAgYWdhaW5zdCB0aGUgc3VtIG9mIHRoZSBzY2hlZHVsZSBlbnRyeSBpbnRlcnZhbHMsIGVuc3VyaW5nIGJvdGggdGhlIHN1bSBhbmQgdGltZSBhcmUgY2hlY2tlZCBmb3Igb3ZlcmZsb3cuIFRoaXMgaXMgYSBjcnVjaWFsIHRyYWZmaWMgY29udHJvbCBzY2hlZHVsaW5nIG1vZGlmaWNhdGlvbiwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgcnRubCBuZXRsaW5rIHNvY2tldCBjb21tYW5kcy4KClllcCwgdGhhdCYjMzk7cyBhbGwgY2xlYXIuIFNlZW1zIGxpa2UgSSYjMzk7dmUgZ290IGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcyBhbmQgdGhlIGtleSBhc3BlY3RzLiBUaW1lIHRvIGNhbGwgaXQgaW4gYW5kIGRvY3VtZW50IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7LAogICAgJiMzNDt0YXByaW9faW5pdCYjMzQ7LAogICAgJiMzNDtwYXJzZV90YXByaW9fc2NoZWR1bGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKCkgaW4gbmV0L3NjaGVkL3NjaF90YXByaW8uYyB0byB1bmNvbmRpdGlvbmFsbHkgdmFsaWRhdGUgdGhlIGN5Y2xlIHRpbWUgYWdhaW5zdCB0aGUgc3VtIG9mIHNjaGVkdWxlIGVudHJ5IGludGVydmFscyBhbmQgY2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3cuIFRoaXMgYWZmZWN0cyBzY2hlZHVsZSBwYXJhbWV0ZXIgcGFyc2luZyB3aGVuIGNyZWF0aW5nIG9yIG1vZGlmeWluZyBhIHRhcHJpbyBxZGlzYyB2aWEgbmV0bGluaywgd2hpY2ggaXMgZnVsbHkgcmVhY2hhYmxlIGluIHNvZnR3YXJlLWVtdWxhdGVkIG5ldHdvcmtpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1RBUFJJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RhcHJpb19jaGFuZ2UmIzM0OywKICAgICYjMzQ7dGFwcmlvX2luaXQmIzM0OywKICAgICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpIGluIG5ldC9zY2hlZC9zY2hfdGFwcmlvLmMgdG8gdW5jb25kaXRpb25hbGx5IHZhbGlkYXRlIHRoZSBjeWNsZSB0aW1lIGFnYWluc3QgdGhlIHN1bSBvZiBzY2hlZHVsZSBlbnRyeSBpbnRlcnZhbHMgYW5kIGNoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93LiBUaGlzIGFmZmVjdHMgc2NoZWR1bGUgcGFyYW1ldGVyIHBhcnNpbmcgd2hlbiBjcmVhdGluZyBvciBtb2RpZnlpbmcgYSB0YXByaW8gcWRpc2MgdmlhIG5ldGxpbmssIHdoaWNoIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzb2Z0d2FyZS1lbXVsYXRlZCBuZXR3b3JraW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW5wdXQgdmFsaWRhdGlvbiBpbiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gU3BlY2lmaWNhbGx5LCBpdCBhbHdheXMgY2FsY3VsYXRlcyB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFscyAoYGN5Y2xlYCkgYW5kIHZhbGlkYXRlcyB0aGF0IGBjeWNsZSBcdTAwM2M9IElOVF9NQVhgIGFuZCB0aGF0IHVzZXItc3VwcGxpZWQgYG5ldy1cdTAwM2VjeWNsZV90aW1lYCBpcyBub3QgbGVzcyB0aGFuIGBjeWNsZWAuXG5cbkFsbCBsb2NhbCB2YXJpYWJsZXMgKGBjeWNsZSA9IDBgKSBhbmQgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGBuZXdfYWRtaW5gIHZpYSBga3phbGxvY19vYmooKWApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyBLTVNBTi1zcGVjaWZpYyByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIGFuZCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNmI3OTI3ZDk4ZjZiMzQzZjViMTEzNDM2M2QxMjNlZmIxYWMyNWZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMjM6MDU6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uYwppbmRleCAzOWFjNWI5N2FhM2FmLi4xMzdjZTZmN2E0NzRhIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKQEAgLTExMzAsNiAmIzQzOzExMzAsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsCiAJCQkJIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldywKIAkJCQkgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewomIzQzOwlzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5OwomIzQzOwlrdGltZV90IGN5Y2xlID0gMDsKIAlpbnQgZXJyID0gMDsKIAogCWlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkgewpAQCAtMTE1MiwxOSAmIzQzOzExNTQsMjAgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLAogCWlmIChlcnIgJmx0OyAwKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKCFuZXctJmd0O2N5Y2xlX3RpbWUpIHsKLQkJc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTsKLQkJa3RpbWVfdCBjeWNsZSA9IDA7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFtcDtuZXctJmd0O2VudHJpZXMsIGxpc3QpCi0JCQljeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktJmd0O2ludGVydmFsKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFtcDtuZXctJmd0O2VudHJpZXMsIGxpc3QpCiYjNDM7CQljeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktJmd0O2ludGVydmFsKTsKIAotCQlpZiAoY3ljbGUgJmx0OyAwIHx8IGN5Y2xlICZndDsgSU5UX01BWCkgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0OyYjMzk7Y3ljbGVfdGltZSYjMzk7IGlzIHRvbyBiaWcmIzM0Oyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQomIzQzOwlpZiAoY3ljbGUgJmx0OyAwIHx8IGN5Y2xlICZndDsgSU5UX01BWCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0OyYjMzk7Y3ljbGVfdGltZSYjMzk7IGlzIHRvbyBiaWcmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCiYjNDM7CWlmICghbmV3LSZndDtjeWNsZV90aW1lKQogCQluZXctJmd0O2N5Y2xlX3RpbWUgPSBjeWNsZTsKJiM0MzsKJiM0MzsJaWYgKG5ldy0mZ3Q7Y3ljbGVfdGltZSAmbHQ7IGN5Y2xlKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgbGVzcyB0aGFuIHRoZSBzdW0gb2YgZW50cnkgaW50ZXJ2YWxzJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKG5ldy0mZ3Q7Y3ljbGVfdGltZSAmbHQ7IG5ldy0mZ3Q7bnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDcxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRBUFJJTyBTY2hlZHVsZXIgQ29kZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZSwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGdldCBhIGdvb2QgbG9vayBhdCB0aGUgZGlmZi4gSSYjMzk7bGwgZm9jdXMgaW4gb24gdGhlIGZpbGUgcGF0aCwgYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdGlvbiBpcy4KCk5vdywgaW5zdGVhZCBvZiBqdXN0IHN0YXJpbmcgYXQgdGhlIGRpZmYgYmxpbmRseSwgSSBuZWVkIGNvbnRleHQuIExpbmUgMTEzMCBmZWVscyBsaWtlIGEgcmVhc29uYWJsZSBwb2ludCB0byBzdGFydC4gSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIChvciBgZ3JlcHBlcmAgaWYgSSBuZWVkIHNvbWV0aGluZyBhIGJpdCBtb3JlIHRhcmdldGVkKSB0byBwdWxsIHVwIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZSBhbmQgcmVhZCBhcm91bmQgaXQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbW1lZGlhdGUgaW1wYWN0IG9mIHRoZSBkaWZmIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIFRoZW4gSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IHNlZSBpZiB0aGUgY2hhbmdlcyBtYWtlIHNlbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjA6XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0LCBcdTAwMjZzY2hlZC1cdTAwM2VlbnRyaWVzKTtcbjExMjE6XHRcdFx0aSYjNDM7JiM0Mzs7XG4xMTIyOlx0XHR9XG4xMTIzOlx0XG4xMTI0Olx0XHRzY2hlZC1cdTAwM2VudW1fZW50cmllcyA9IGk7XG4xMTI1Olx0XG4xMTI2Olx0XHRyZXR1cm4gaTtcbjExMjc6XHR9XG4xMTI4Olx0XG4xMTI5Olx0c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuMTEzMDpcdFx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbjExMzE6XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4xMTMyOlx0e1xuMTEzMzpcdFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcbjExMzQ6XHRcdGt0aW1lX3QgY3ljbGUgPSAwO1xuMTEzNTpcdFx0aW50IGVyciA9IDA7XG4xMTM2Olx0XG4xMTM3Olx0XHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0pIHtcbjExMzg6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtBZGRpbmcgYSBzaW5nbGUgZW50cnkgaXMgbm90IHN1cHBvcnRlZFwmIzM0Oyk7XG4xMTM5Olx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4xMTQwOlx0XHR9XG4xMTQxOlx0XG4xMTQyOlx0XHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0JBU0VfVElNRV0pXG4xMTQzOlx0XHRcdG5ldy1cdTAwM2ViYXNlX3RpbWUgPSBubGFfZ2V0X3M2NCh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQkFTRV9USU1FXSk7XG4xMTQ0Olx0XG4xMTQ1Olx0XHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVfRVhURU5TSU9OXSlcbjExNDY6XHRcdFx0bmV3LVx1MDAzZWN5Y2xlX3RpbWVfZXh0ZW5zaW9uID0gbmxhX2dldF9zNjQodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVfRVhURU5TSU9OXSk7XG4xMTQ3Olx0XG4xMTQ4Olx0XHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVdKVxuMTE0OTpcdFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZSA9IG5sYV9nZXRfczY0KHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FXSk7XG4xMTUwOlx0XG4xMTUxOlx0XHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0VOVFJZX0xJU1RdKVxuMTE1MjpcdFx0XHRlcnIgPSBwYXJzZV9zY2hlZF9saXN0KHEsIHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9FTlRSWV9MSVNUXSxcbjExNTM6XHRcdFx0XHRcdCAgICAgICBuZXcsIGV4dGFjayk7XG4xMTU0Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTE1NTpcdFx0XHRyZXR1cm4gZXJyO1xuMTE1NjpcdFxuMTE1NzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2bmV3LVx1MDAzZWVudHJpZXMsIGxpc3QpXG4xMTU4Olx0XHRcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cdTAwM2VpbnRlcnZhbCk7XG4xMTU5Olx0XG4xMTYwOlx0XHRpZiAoY3ljbGUgXHUwMDNjIDAgfHwgY3ljbGUgXHUwMDNlIElOVF9NQVgpIHtcbjExNjE6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnXCYjMzQ7KTtcbjExNjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTYzOlx0XHR9XG4xMTY0Olx0XG4xMTY1Olx0XHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKVxuMTE2NjpcdFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZSA9IGN5Y2xlO1xuMTE2NzpcdFxuMTE2ODpcdFx0aWYgKG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyBjeWNsZSkge1xuMTE2OTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0OyYjMzk7Y3ljbGVfdGltZSYjMzk7IGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFsc1wmIzM0Oyk7XG4xMTcwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTE3MTpcdFx0fVxuMTE3MjpcdFxuMTE3MzpcdFx0aWYgKG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyBuZXctXHUwMDNlbnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7XG4xMTc0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgdG9vIHNtYWxsXCYjMzQ7KTtcbjExNzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTc2Olx0XHR9XG4xMTc3Olx0XG4xMTc4Olx0XHR0YXByaW9fY2FsY3VsYXRlX2dhdGVfZHVyYXRpb25zKHEsIG5ldyk7XG4xMTc5Olx0XG4xMTgwOlx0XHRyZXR1cm4gMDtcbjExODE6XHR9XG4xMTgyOlx0XG4xMTgzOlx0c3RhdGljIGludCB0YXByaW9fcGFyc2VfbXFwcmlvX29wdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuMTE4NDpcdFx0XHRcdFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0LFxuMTE4NTpcdFx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuMTE4NjpcdFx0XHRcdFx0ICAgdTMyIHRhcHJpb19mbGFncylcbjExODc6XHR7XG4xMTg4Olx0XHRib29sIGFsbG93X292ZXJsYXBwaW5nX3R4cXMgPSBUWFRJTUVfQVNTSVNUX0lTX0VOQUJMRUQodGFwcmlvX2ZsYWdzKTtcbjExODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCYjMzk7cyB0aGUgY29yZSBpc3N1ZSBpdCYjMzk7cyBhZGRyZXNzaW5nPyBMZXQmIzM5O3MgZGlzc2VjdCB0aGUgY29kZSBjaGFuZ2VzIHRvIGdyYXNwIHRoZSByYXRpb25hbGUuCgpTbywgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIHRoaXMgY2hlY2s6IGlmIGBuZXctJmd0O2N5Y2xlX3RpbWVgIHdhcyB6ZXJvLCBtZWFuaW5nIG5vdCBleHBsaWNpdGx5IHNldCwgdGhlbiBpdGVyYXRlIHRocm91Z2ggdGhlIGxpc3Qgb2YgZW50cmllcywgc3VtIHRoZWlyIGludGVydmFscyAoYGN5Y2xlYCksIGFuZCB0aGVuIHZhbGlkYXRlIHRoYXQgdGhpcyBjYWxjdWxhdGVkIGBjeWNsZWAgdmFsdWUgaXMgd2l0aGluIGFuIGFjY2VwdGFibGUgcmFuZ2UgKG5vdCBuZWdhdGl2ZSBhbmQgbm90IGV4Y2VlZGluZyBgSU5UX01BWGApLiBJZiBpdCYjMzk7cyB2YWxpZCwgdGhlIGBuZXctJmd0O2N5Y2xlX3RpbWVgIGlzIHVwZGF0ZWQgd2l0aCB0aGlzIGNhbGN1bGF0ZWQgYGN5Y2xlYC4KCk5vdywgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMgbW9yZSBzdHJlYW1saW5lZC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgdW5jb25kaXRpb25hbCBzdW1tYXRpb24gb2YgaW50ZXJ2YWxzLCByZWdhcmRsZXNzIG9mIHRoZSBpbml0aWFsIHZhbHVlIG9mIGBuZXctJmd0O2N5Y2xlX3RpbWVgLiBUaGVuLCB0aGUgc2FtZSBib3VuZGFyeSBjaGVjayBpcyBwZXJmb3JtZWQ6IGlzIGBjeWNsZWAgbmVnYXRpdmUgb3IgdG9vIGxhcmdlPyBJZiBgbmV3LSZndDtjeWNsZV90aW1lYCAqd2FzbiYjMzk7dCogc3BlY2lmaWVkIChtZWFuaW5nIGl0JiMzOTtzIHplcm8pLCBpdCYjMzk7cyBzZXQgdG8gdGhlIGBjeWNsZWAgdmFsdWUsIGFzIGJlZm9yZS4gSG93ZXZlciwgdGhlIGFkZGVkIGNoZWNrIGlzIGlmIGBuZXctJmd0O2N5Y2xlX3RpbWVgICppcyogc3BlY2lmaWVkLCBidXQgaXMgc21hbGxlciB0aGFuIGBjeWNsZWAsIGl0IHJldHVybnMgYW4gZXJyb3IuIFRoaXMgaXMgYSBjcnVjaWFsIHZhbGlkYXRpb24gc3RlcCBJIG1pc3NlZCBlYXJsaWVyOiB3ZSYjMzk7cmUgbWFraW5nIHN1cmUgdGhlIHByb3ZpZGVkIGBjeWNsZV90aW1lYCAoaWYgYW55KSBpcyAqYXQgbGVhc3QqIGFzIGxhcmdlIGFzIHRoZSBzdW0gb2YgYWxsIHRoZSBpbmRpdmlkdWFsIGludGVydmFscy4gVGhpcyBtYWtlcyBzZW5zZSBmcm9tIGEgc2NoZWR1bGluZyBpbnRlZ3JpdHkgcGVyc3BlY3RpdmUuCgpNeSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gdHJhY2UgdGhlIGFsbG9jYXRpb24gb2YgYG5ld2AuIFdoZXJlIGRvZXMgdGhpcyBgbmV3YCBzdHJ1Y3Qgb3JpZ2luYXRlPyBJcyBpdCB1c2VyLXByb3ZpZGVkPyBBbGxvY2F0ZWQgaW4ga2VybmVsIHNwYWNlPyBVbmRlcnN0YW5kaW5nIHRoZSBzb3VyY2UgYW5kIGxpZmUgY3ljbGUgb2YgYG5ld2AgaXMgdml0YWwgdG8gZnVsbHkgYXBwcmVjaWF0ZSB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgYG5ld2AgaXMgY29uc3RydWN0ZWQsIHBvcHVsYXRlZCwgYW5kIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhcnNlX3RhcHJpb19zY2hlZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMDg5PXN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfbGlzdChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpsaXN0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEyOC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTEyOTpzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExMzAtXHRcdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTgyNT1zdGF0aWMgaW50IHRhcHJpb19jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MTktXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE5MjA6XHRlcnIgPSBwYXJzZV90YXByaW9fc2NoZWR1bGUocSwgdGIsIG5ld19hZG1pbiwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkyMS1cdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NDQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgQWxsb2NhdGlvbiBhbmQgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gemVyb2luZyBpbiBvbiBhIGNvdXBsZSBvZiBjcnVjaWFsIHBvaW50cyByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd2l0aGluIHRoZSBjb2RlLiBGaXJzdCwgSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgaW1wbGljYXRpb25zIG9mIGB0YXByaW9fY2hhbmdlYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgd2hlcmUgc29tZSBrZXkgc3RhdGUgY2hhbmdlcyBvciBjb25maWd1cmF0aW9ucyB0YWtlIHBsYWNlLCBhbmQgSSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIG1hbmFnZWQgc2FmZWx5LCBlc3BlY2lhbGx5IGFzIHRoZXkgcmVsYXRlIHRvIHJlc291cmNlIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uLiBBbnkgc3VidGxlIGJ1ZyBoZXJlIGNvdWxkIGhhdmUgY2FzY2FkaW5nIGVmZmVjdHMgbGF0ZXIsIHNvIGEgZGVlcCBkaXZlIGlzIHdhcnJhbnRlZC4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgdGhlIGFsbG9jYXRpb24gb2YgYG5ld19hZG1pbmAgYW5kIHdoZXRoZXIgaXQgdXNlcyBga3phbGxvY2Agb3Igc29tZSBvdGhlciBhbGxvY2F0aW9uIG1ldGhvZC4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgYSBjYXJlZnVsIGV4YW1pbmF0aW9uIGlzIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTAwOlx0XHRcdGdvdG8gZnJlZV9zY2hlZDtcbjE5MDE6XHRcdH1cbjE5MDI6XHRcbjE5MDM6XHRcdGlmIChtcXByaW8pIHtcbjE5MDQ6XHRcdFx0ZXJyID0gbmV0ZGV2X3NldF9udW1fdGMoZGV2LCBtcXByaW8tXHUwMDNlbnVtX3RjKTtcbjE5MDU6XHRcdFx0aWYgKGVycilcbjE5MDY6XHRcdFx0XHRnb3RvIGZyZWVfc2NoZWQ7XG4xOTA3Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1xcHJpby1cdTAwM2VudW1fdGM7IGkmIzQzOyYjNDM7KSB7XG4xOTA4Olx0XHRcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShkZXYsIGksXG4xOTA5Olx0XHRcdFx0XHRcdCAgICBtcXByaW8tXHUwMDNlY291bnRbaV0sXG4xOTEwOlx0XHRcdFx0XHRcdCAgICBtcXByaW8tXHUwMDNlb2Zmc2V0W2ldKTtcbjE5MTE6XHRcdFx0XHRxLVx1MDAzZWN1cl90eHFbaV0gPSBtcXByaW8tXHUwMDNlb2Zmc2V0W2ldO1xuMTkxMjpcdFx0XHR9XG4xOTEzOlx0XG4xOTE0Olx0XHRcdC8qIEFsd2F5cyB1c2Ugc3VwcGxpZWQgcHJpb3JpdHkgbWFwcGluZ3MgKi9cbjE5MTU6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IFRDX0JJVE1BU0s7IGkmIzQzOyYjNDM7KVxuMTkxNjpcdFx0XHRcdG5ldGRldl9zZXRfcHJpb190Y19tYXAoZGV2LCBpLFxuMTkxNzpcdFx0XHRcdFx0XHQgICAgICAgbXFwcmlvLVx1MDAzZXByaW9fdGNfbWFwW2ldKTtcbjE5MTg6XHRcdH1cbjE5MTk6XHRcbjE5MjA6XHRcdGVyciA9IHBhcnNlX3RhcHJpb19zY2hlZHVsZShxLCB0YiwgbmV3X2FkbWluLCBleHRhY2spO1xuMTkyMTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjE5MjI6XHRcdFx0Z290byBmcmVlX3NjaGVkO1xuMTkyMzpcdFxuMTkyNDpcdFx0aWYgKG5ld19hZG1pbi1cdTAwM2VudW1fZW50cmllcyA9PSAwKSB7XG4xOTI1Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7VGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBlbnRyeSBpbiB0aGUgc2NoZWR1bGVcJiMzNDspO1xuMTkyNjpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTkyNzpcdFx0XHRnb3RvIGZyZWVfc2NoZWQ7XG4xOTI4Olx0XHR9XG4xOTI5Olx0XG4xOTMwOlx0XHRlcnIgPSB0YXByaW9fcGFyc2VfY2xvY2tpZChzY2gsIHRiLCBleHRhY2spO1xuMTkzMTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjE5MzI6XHRcdFx0Z290byBmcmVlX3NjaGVkO1xuMTkzMzpcdFxuMTkzNDpcdFx0dGFwcmlvX3VwZGF0ZV9xdWV1ZV9tYXhfc2R1KHEsIG5ld19hZG1pbiwgc3RhYik7XG4xOTM1Olx0XG4xOTM2Olx0XHRpZiAoRlVMTF9PRkZMT0FEX0lTX0VOQUJMRUQocS1cdTAwM2VmbGFncykpXG4xOTM3Olx0XHRcdGVyciA9IHRhcHJpb19lbmFibGVfb2ZmbG9hZChkZXYsIHEsIG5ld19hZG1pbiwgZXh0YWNrKTtcbjE5Mzg6XHRcdGVsc2VcbjE5Mzk6XHRcdFx0ZXJyID0gdGFwcmlvX2Rpc2FibGVfb2ZmbG9hZChkZXYsIHEsIGV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MDQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBgdGFwcmlvX2NoYW5nZWAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGB0YXByaW9fY2hhbmdlYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHJlbGF0ZWQgdG8gYG5ld19hZG1pbmAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgc3BlY2lmaWMgcGF0dGVybnMgaGVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgZXhhY3RseSB0aGlzIGBuZXdfYWRtaW5gIGlzIGJlaW5nIGFsbG9jYXRlZCDigJMgaXMgaXQgb24gdGhlIHN0YWNrLCB0aGUgaGVhcCwgb3Igc29tZSBvdGhlciBtYW5hZ2VkIG1lbW9yeSByZWdpb24/IFRoZSBhbGxvY2F0aW9uIG1ldGhvZCB3aWxsIGdpdmUgbWUgY3JpdGljYWwgY2x1ZXMgYWJvdXQgaXRzIGludGVuZGVkIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3ksIHJlc291cmNlIG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIGlmIEkmIzM5O20gbm90IGNhcmVmdWwuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgaGF2aW5nIHRvIHRyYWNlIHBvaW50ZXJzIG9yIGFuYWx5emUgYWxsb2NhdGlvbiBzaXplcyBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB0cmFjayBkb3duIHRoYXQgYWxsb2NhdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODcwOlx0XHR9XG4xODcxOlx0XG4xODcyOlx0XHQvKiBOZWVkZWQgZm9yIGxlbmd0aF90b19kdXJhdGlvbigpIGR1cmluZyBuZXRsaW5rIGF0dHJpYnV0ZSBwYXJzaW5nICovXG4xODczOlx0XHR0YXByaW9fc2V0X3BpY29zX3Blcl9ieXRlKGRldiwgcSwgZXh0YWNrKTtcbjE4NzQ6XHRcbjE4NzU6XHRcdGVyciA9IHRhcHJpb19wYXJzZV9tcXByaW9fb3B0KGRldiwgbXFwcmlvLCBleHRhY2ssIHEtXHUwMDNlZmxhZ3MpO1xuMTg3NjpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjE4Nzc6XHRcdFx0cmV0dXJuIGVycjtcbjE4Nzg6XHRcbjE4Nzk6XHRcdGVyciA9IHRhcHJpb19wYXJzZV90Y19lbnRyaWVzKHNjaCwgb3B0LCBleHRhY2spO1xuMTg4MDpcdFx0aWYgKGVycilcbjE4ODE6XHRcdFx0cmV0dXJuIGVycjtcbjE4ODI6XHRcbjE4ODM6XHRcdG5ld19hZG1pbiA9IGt6YWxsb2Nfb2JqKCpuZXdfYWRtaW4pO1xuMTg4NDpcdFx0aWYgKCFuZXdfYWRtaW4pIHtcbjE4ODU6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtOb3QgZW5vdWdoIG1lbW9yeSBmb3IgYSBuZXcgc2NoZWR1bGVcJiMzNDspO1xuMTg4NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE4ODc6XHRcdH1cbjE4ODg6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ld19hZG1pbi1cdTAwM2VlbnRyaWVzKTtcbjE4ODk6XHRcbjE4OTA6XHRcdG9wZXIgPSBydG5sX2RlcmVmZXJlbmNlKHEtXHUwMDNlb3Blcl9zY2hlZCk7XG4xODkxOlx0XHRhZG1pbiA9IHJ0bmxfZGVyZWZlcmVuY2UocS1cdTAwM2VhZG1pbl9zY2hlZCk7XG4xODkyOlx0XG4xODkzOlx0XHQvKiBubyBjaGFuZ2VzIC0gbm8gbmV3IG1xcHJpbyBzZXR0aW5ncyAqL1xuMTg5NDpcdFx0aWYgKCF0YXByaW9fbXFwcmlvX2NtcChkZXYsIG1xcHJpbykpXG4xODk1Olx0XHRcdG1xcHJpbyA9IE5VTEw7XG4xODk2Olx0XG4xODk3Olx0XHRpZiAobXFwcmlvIFx1MDAyNlx1MDAyNiAob3BlciB8fCBhZG1pbikpIHtcbjE4OTg6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtDaGFuZ2luZyB0aGUgdHJhZmZpYyBtYXBwaW5nIG9mIGEgcnVubmluZyBzY2hlZHVsZSBpcyBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbjE4OTk6XHRcdFx0ZXJyID0gLUVOT1RTVVBQO1xuMTkwMDpcdFx0XHRnb3RvIGZyZWVfc2NoZWQ7XG4xOTAxOlx0XHR9XG4xOTAyOlx0XG4xOTAzOlx0XHRpZiAobXFwcmlvKSB7XG4xOTA0Olx0XHRcdGVyciA9IG5ldGRldl9zZXRfbnVtX3RjKGRldiwgbXFwcmlvLVx1MDAzZW51bV90Yyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgQ2FsbCBTaXRlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IGFsbG9jYXRlZCBgbmV3X2FkbWluYCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgdGhhdCYjMzk7cyBnb29kLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgaW50cmljYWNpZXMgb2YgdGhpcyBuZXcgYWxsb2NhdGlvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgd2hlcmUgKmVsc2UqIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgdXNlZD8gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBncmFwaCBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aGVyZSB0aGlzIGZ1bmN0aW9uLCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgaXMgaW52b2tlZC4gVGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIHNpZGUgZWZmZWN0cywgYW5kIGdlbmVyYWxseSwgZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIGhvdyB0aGlzIGFsbG9jYXRpb24gZml0cyB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaW1lIHRvIHRyYWNrIGRvd24gdGhvc2UgY2FsbCBzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTA4OT1zdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExMjgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMjk6c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTMwLVx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE4MjU9c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTE5LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxOTIwOlx0ZXJyID0gcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHEsIHRiLCBuZXdfYWRtaW4sIGV4dGFjayk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MjEtXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTc1CgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDQ2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVEFQUklPIFNjaGVkdWxlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGZvY3VzIGhlcmUgaXMgZW5zdXJpbmcgdGhpcyBjaGFuZ2UgaXMgc2FmZSwgZXNwZWNpYWxseSBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gRmlyc3QsIEkmIzM5O2xsIHdhbGsgdGhyb3VnaCB0aGUgY29kZSBjaGFuZ2VzIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLiBJdCBzZWVtcyB3ZSBhcmUgbW9kaWZ5aW5nIHRoZSBmdW5jdGlvbiBieToKCiogICBJbml0aWFsaXppbmcgYGVudHJ5YCBhbmQgYGN5Y2xlYCBhdCB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbi4KKiAgIE1vdmluZyB0aGUgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGxvb3AsIHdoaWNoIGNhbGN1bGF0ZXMgdGhlIHRvdGFsIGBjeWNsZWAgdGltZSwgb3V0c2lkZSBvZiB0aGUgYCFuZXctJmd0O2N5Y2xlX3RpbWVgIGNvbmRpdGlvbmFsLiBUaGlzIHJlY2FsY3VsYXRlcyB0aGUgY3ljbGUgdGltZSBldmVuIGlmIHRoZSBjeWNsZSB0aW1lIGlzIGFscmVhZHkgc2V0LgoqICAgQWRkaW5nIGEgY2hlY2sgdG8gbWFrZSBzdXJlIGBjeWNsZWAgaXMgd2l0aGluIHZhbGlkIGludGVnZXIgYm91bmRzLgoqICAgQ29uZGl0aW9uYWxseSBzZXR0aW5nIGBuZXctJmd0O2N5Y2xlX3RpbWVgIGlmIGl0JiMzOTtzIGN1cnJlbnRseSB1bnNldC4KKiAgIENydWNpYWxseSwgYWRkaW5nIGEgY2hlY2sgdG8gZW5zdXJlIGBuZXctJmd0O2N5Y2xlX3RpbWVgIGlzICpub3QqIGxlc3MgdGhhbiB0aGUgY2FsY3VsYXRlZCBgY3ljbGVgLCByZXR1cm5pbmcgYW4gZXJyb3IgaWYgaXQgaXMuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFwcGxpY2FiaWxpdHkgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBtZXRob2RpY2FsbHkgZ28gdGhyb3VnaCB0aGUgcG90ZW50aWFsIHJpc2sgYXJlYXM6CgoxLiAgKipVc2VyLXNwYWNlIGRhdGEgZXhwb3N1cmU6KiogVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFkZCBvciBtb2RpZnkgYW55IGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXItc3BhY2UuIFNvLCBubyByaXNrIHRoZXJlLgoyLiAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlIGRlcGVuZGVuY2UgaW4gbG9naWM6KiogYGN5Y2xlYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIGBlbnRyeS0mZ3Q7aW50ZXJ2YWxgIHNob3VsZCBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdXJpbmcgc2NoZWR1bGUgcGFyc2luZywgYW5kIGBuZXdgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAuIE5vIHJpc2tzIGhlcmUuCjMuICAqKlVuaW5pdGlhbGl6ZWQgZGF0YSBpbiBjb21wbGV4IHN0cnVjdHVyZXM6KiogQWdhaW4sIGBuZXdgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGFuZCB0aGUgbG9vcCBjYWxjdWxhdGVzIHRoZSBgY3ljbGVgIHZhbHVlLCBhdm9pZGluZyBhbnkgcmlza3MuCjQuICAqKkJvdW5kcyBjaGVja3MgYW5kIGJ1ZmZlciBvdmVyZmxvd3M6KiogVGhpcyBjaGFuZ2UgcHJpbWFyaWx5IGFkZHMgYW4gaW5wdXQgdmFsaWRhdGlvbiBjaGVjazsgdGhlcmUmIzM5O3Mgbm8gYWRkaXRpb24gb2YgbmV3IGZ1bmN0aW9uYWxpdHkgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gVGhlIGFkZGVkIGNoZWNrIHZhbGlkYXRlcyB0aGF0IGBuZXctJmd0O2N5Y2xlX3RpbWUgJmd0Oz0gY3ljbGVgLgoKVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgdGhlcmUmIzM5O3Mgbm8gYXBwYXJlbnQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIG9yIHVzZWQuIGBjeWNsZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIGBuZXdgIGlzIGluaXRpYWxpemVkIHZpYSBga3phbGxvY19vYmpgLiBUaGlzIHBhdGNoIGlzIHB1cmVseSBhbiBpbnB1dCB2YWxpZGF0aW9uIGFuZCBsb2dpYyBhZGp1c3RtZW50IGZvciB0aGUgVEFQUklPIHFkaXNjIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBuZXRsaW5rLgoKVGh1cywgYmFzZWQgb24gdGhpcyBhbmFseXNpcywgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSYjMzk7bGwgYmUgc3VyZSB0byBkb2N1bWVudCB0aGlzIGluIHRoZSBgc2V0LXJlc3VsdHNgIGV4cGxhbmF0aW9uLCBjbGVhcmx5IG91dGxpbmluZyB0aGVzZSByZWFzb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpbnB1dCB2YWxpZGF0aW9uIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAgaW4gYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFsd2F5cyBjYWxjdWxhdGVzIHRoZSBzdW0gb2YgZW50cnkgaW50ZXJ2YWxzIChgY3ljbGVgKSBhbmQgdmFsaWRhdGVzIHRoYXQgYGN5Y2xlIFx1MDAzYz0gSU5UX01BWGAgYW5kIHRoYXQgdXNlci1zdXBwbGllZCBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgIGlzIG5vdCBsZXNzIHRoYW4gYGN5Y2xlYC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGN5Y2xlID0gMGApIGFuZCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoYG5ld19hZG1pbmAgdmlhIGBremFsbG9jX29iaigpYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIGNoYW5nZSwgYW5kIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpbnB1dCB2YWxpZGF0aW9uIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAgaW4gYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFsd2F5cyBjYWxjdWxhdGVzIHRoZSBzdW0gb2YgZW50cnkgaW50ZXJ2YWxzIChgY3ljbGVgKSBhbmQgdmFsaWRhdGVzIHRoYXQgYGN5Y2xlIFx1MDAzYz0gSU5UX01BWGAgYW5kIHRoYXQgdXNlci1zdXBwbGllZCBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgIGlzIG5vdCBsZXNzIHRoYW4gYGN5Y2xlYC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGN5Y2xlID0gMGApIGFuZCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoYG5ld19hZG1pbmAgdmlhIGBremFsbG9jX29iaigpYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIGNoYW5nZSwgYW5kIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjI0LjQzMzM2OTQ5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODE5Mjk1MDEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGFwcmlvX2NoYW5nZVwiLFxuICAgIFwidGFwcmlvX2luaXRcIixcbiAgICBcInBhcnNlX3RhcHJpb19zY2hlZHVsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW5wdXQgdmFsaWRhdGlvbiBpbiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gU3BlY2lmaWNhbGx5LCBpdCBhbHdheXMgY2FsY3VsYXRlcyB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFscyAoYGN5Y2xlYCkgYW5kIHZhbGlkYXRlcyB0aGF0IGBjeWNsZSBcXHUwMDNjPSBJTlRfTUFYYCBhbmQgdGhhdCB1c2VyLXN1cHBsaWVkIGBuZXctXFx1MDAzZWN5Y2xlX3RpbWVgIGlzIG5vdCBsZXNzIHRoYW4gYGN5Y2xlYC5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIChgY3ljbGUgPSAwYCkgYW5kIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChgbmV3X2FkbWluYCB2aWEgYGt6YWxsb2Nfb2JqKClgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgcmlza3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBhbmQgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYXJzZV90YXByaW9fc2NoZWR1bGUoKSBpbiBuZXQvc2NoZWQvc2NoX3RhcHJpby5jIHRvIHVuY29uZGl0aW9uYWxseSB2YWxpZGF0ZSB0aGUgY3ljbGUgdGltZSBhZ2FpbnN0IHRoZSBzdW0gb2Ygc2NoZWR1bGUgZW50cnkgaW50ZXJ2YWxzIGFuZCBjaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdy4gVGhpcyBhZmZlY3RzIHNjaGVkdWxlIHBhcmFtZXRlciBwYXJzaW5nIHdoZW4gY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIGEgdGFwcmlvIHFkaXNjIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgaW4gc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDU6MjQuNDMzMzc1NjIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAyNTUwMTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDZiNzkyN2Q5OGY2YjM0M2Y1YjExMzQzNjNkMTIzZWZiMWFjMjVmZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMzowNToyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xcbmluZGV4IDM5YWM1Yjk3YWEzYWYuLjEzN2NlNmY3YTQ3NGEgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXG5AQCAtMTEzMCw2ICsxMTMwLDggQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuK1xcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XFxuK1xcdGt0aW1lX3QgY3ljbGUgPSAwO1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xcbkBAIC0xMTUyLDE5ICsxMTU0LDIwIEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRpZiAoIW5ldy1cXHUwMDNlY3ljbGVfdGltZSkge1xcbi1cXHRcXHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5O1xcbi1cXHRcXHRrdGltZV90IGN5Y2xlID0gMDtcXG4tXFxuLVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFxcdTAwMjZuZXctXFx1MDAzZWVudHJpZXMsIGxpc3QpXFxuLVxcdFxcdFxcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cXHUwMDNlaW50ZXJ2YWwpO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcXHUwMDI2bmV3LVxcdTAwM2VlbnRyaWVzLCBsaXN0KVxcbitcXHRcXHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXFx1MDAzZWludGVydmFsKTtcXG4gXFxuLVxcdFxcdGlmIChjeWNsZSBcXHUwMDNjIDAgfHwgY3ljbGUgXFx1MDAzZSBJTlRfTUFYKSB7XFxuLVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIidjeWNsZV90aW1lJyBpcyB0b28gYmlnXFxcIik7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHR9XFxuK1xcdGlmIChjeWNsZSBcXHUwMDNjIDAgfHwgY3ljbGUgXFx1MDAzZSBJTlRfTUFYKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIidjeWNsZV90aW1lJyBpcyB0b28gYmlnXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuIFxcbitcXHRpZiAoIW5ldy1cXHUwMDNlY3ljbGVfdGltZSlcXG4gXFx0XFx0bmV3LVxcdTAwM2VjeWNsZV90aW1lID0gY3ljbGU7XFxuK1xcbitcXHRpZiAobmV3LVxcdTAwM2VjeWNsZV90aW1lIFxcdTAwM2MgY3ljbGUpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiJ2N5Y2xlX3RpbWUnIGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFsc1xcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIG5ldy1cXHUwMDNlbnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjI2LjAzNjgyMTM1NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjU2MzYwNDYwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX1RBUFJJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhcHJpb19jaGFuZ2VcIixcbiAgICBcInRhcHJpb19pbml0XCIsXG4gICAgXCJwYXJzZV90YXByaW9fc2NoZWR1bGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYXJzZV90YXByaW9fc2NoZWR1bGUoKSBpbiBuZXQvc2NoZWQvc2NoX3RhcHJpby5jIHRvIHVuY29uZGl0aW9uYWxseSB2YWxpZGF0ZSB0aGUgY3ljbGUgdGltZSBhZ2FpbnN0IHRoZSBzdW0gb2Ygc2NoZWR1bGUgZW50cnkgaW50ZXJ2YWxzIGFuZCBjaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdy4gVGhpcyBhZmZlY3RzIHNjaGVkdWxlIHBhcmFtZXRlciBwYXJzaW5nIHdoZW4gY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIGEgdGFwcmlvIHFkaXNjIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgaW4gc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDZiNzkyN2Q5OGY2YjM0M2Y1YjExMzQzNjNkMTIzZWZiMWFjMjVmZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIzOjA1OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbmluZGV4IDM5YWM1Yjk3YWEzYWYuLjEzN2NlNmY3YTQ3NGEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG5AQCAtMTEzMCw2ICsxMTMwLDggQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuK1x0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcbitcdGt0aW1lX3QgY3ljbGUgPSAwO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0pIHtcbkBAIC0xMTUyLDE5ICsxMTU0LDIwIEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKSB7XG4tXHRcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4tXHRcdGt0aW1lX3QgY3ljbGUgPSAwO1xuLVxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZuZXctXHUwMDNlZW50cmllcywgbGlzdClcbi1cdFx0XHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXHUwMDNlaW50ZXJ2YWwpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2bmV3LVx1MDAzZWVudHJpZXMsIGxpc3QpXG4rXHRcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cdTAwM2VpbnRlcnZhbCk7XG4gXG4tXHRcdGlmIChjeWNsZSBcdTAwM2MgMCB8fCBjeWNsZSBcdTAwM2UgSU5UX01BWCkge1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCInY3ljbGVfdGltZScgaXMgdG9vIGJpZ1wiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuK1x0aWYgKGN5Y2xlIFx1MDAzYyAwIHx8IGN5Y2xlIFx1MDAzZSBJTlRfTUFYKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCInY3ljbGVfdGltZScgaXMgdG9vIGJpZ1wiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4rXHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKVxuIFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZSA9IGN5Y2xlO1xuK1xuK1x0aWYgKG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyBjeWNsZSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiJ2N5Y2xlX3RpbWUnIGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFsc1wiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIG5ldy1cdTAwM2VudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjI2LjAzNjgyMzU5NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMTQzNTU1NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVEFQUklPIFNjaGVkdWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBiZWluZyBhc2tlZCB0byByZXZpZXcgYSBwYXRjaCBmb3IgYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0J3MgY2hhbmdlZC4gVGhlIGRpZmYgaXMgdGhlIGZpcnN0IHRoaW5nIHRvIGxvb2sgYXQ6IEkgc2VlIGEgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyB0aGUgY3ljbGUgdGltZSBpcyBjYWxjdWxhdGVkIGFuZCB2YWxpZGF0ZWQgZm9yIHRoZSBUQVBSSU8gc2NoZWR1bGVyLlxuXG5UaGUgb3JpZ2luYWwgY29kZSBhcHBlYXJzIHRvIGNhbGN1bGF0ZSB0aGUgY3ljbGUgdGltZSBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbGlzdCBvZiBzY2hlZHVsZSBlbnRyaWVzIGFuZCBzdW1taW5nIHRoZWlyIGludGVydmFscy4gTm93LCBpdCdzIGNvbXBhcmluZyBhZ2FpbnN0IGBuZXctXHUwMDNlY3ljbGVfdGltZWAgd2hpY2ggc291bmRzIGxpa2UgaXQncyBwYXNzZWQgaW4gZnJvbSBuZXRsaW5rLiBUaGUgY2hhbmdlIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGFuIGV4dHJhIHZhbGlkYXRpb24gc3RlcC4gSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBrdGltZV90IGN5Y2xlID0gMDtgIGFuZCBhIG5ldyBgaWZgIGNvbmRpdGlvbiB3aXRoIGEgY2hlY2sgdGhhdCBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgIGlzIF9hdCBsZWFzdF8gYXMgbGFyZ2UgYXMgdGhlIHN1bSBvZiBhbGwgZW50cnkgaW50ZXJ2YWxzLlxuXG5Fc3NlbnRpYWxseSwgdGhlIGV4aXN0aW5nIGxvZ2ljIHN1bXMgdXAgYWxsIHRoZSBlbnRyeSBpbnRlcnZhbHMgdG8gY3JlYXRlIGEgYGN5Y2xlYCB0aW1lLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBgY3ljbGVfdGltZWAgaXNuJ3Qgc21hbGxlciB0aGFuIHRoZSBjb21iaW5lZCBkdXJhdGlvbnMgb2YgaXRzIGNvbnN0aXR1ZW50IGVudHJpZXMsIGFuZCBpdCdzIGFsc28gdmFsaWRhdGluZyB0aGF0IHRoZSBgY3ljbGVfdGltZWAgaXMgdmFsaWQuIEl0J3MgYWxzbyBtYWtpbmcgc3VyZSB0aGF0IHRoZSBzdW0gb2YgdGhlIGVudHJpZXMgYW5kIHRoZSBjeWNsZSB0aW1lIGFyZSBub3Qgb3V0IG9mIGJvdW5kcywgcHJldmVudGluZyBhbiBpbnRlZ2VyIG92ZXJmbG93LlxuXG5NeSBpbml0aWFsIGludGVycHJldGF0aW9uOiB0aGlzIHBhdGNoIGFpbXMgdG8gaW1wcm92ZSB0aGUgcm9idXN0bmVzcyBvZiB0aGUgVEFQUklPIHNjaGVkdWxlciBieSBtYWtpbmcgc3VyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBpbnRlcm5hbGx5IGNvbnNpc3RlbnQuIFRoaXMgaXMgYSBnb29kIG1vdmU7IHN1Y2ggdmFsaWRhdGlvbiBjb3VsZCBoYXZlIHByZXZlbnRlZCBzdWJ0bGUgYnVncyBhbmQgcGVyaGFwcyBtYWRlIHRoZSBzY2hlZHVsZXIgbW9yZSByZXNpc3RhbnQgdG8gbWlzY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMsIG9mIGNvdXJzZSwgb3IgdW53YW50ZWQgYmVoYXZpb3VyLiBJIHdhbnQgdG8gbG9vayBpbnRvIHRoZSBpbXBhY3Qgb24gZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zLCBhbmQgd2hldGhlciB0aGUgYWRkZWQgdmFsaWRhdGlvbiBwcmV2ZW50cyB2YWxpZCBjb25maWd1cmF0aW9ucy4gRmluYWxseSwgSSBzaG91bGQgbG9vayBhdCB0aGUgS2NvbmZpZyBhbmQgb3RoZXIgY29udGV4dCBpbiB0aGlzIGNvZGUgdG8gZ2l2ZSB0aGUgYmVzdCBhbmFseXNpcywgYW5kIGNvbmZpcm0gdGhpcyBpcyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDU6MzYuMTgwMzgxMTY3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEyMDpcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZlbnRyeS1cXHUwMDNlbGlzdCwgXFx1MDAyNnNjaGVkLVxcdTAwM2VlbnRyaWVzKTtcXG4xMTIxOlxcdFxcdFxcdGkrKztcXG4xMTIyOlxcdFxcdH1cXG4xMTIzOlxcdFxcbjExMjQ6XFx0XFx0c2NoZWQtXFx1MDAzZW51bV9lbnRyaWVzID0gaTtcXG4xMTI1OlxcdFxcbjExMjY6XFx0XFx0cmV0dXJuIGk7XFxuMTEyNzpcXHR9XFxuMTEyODpcXHRcXG4xMTI5OlxcdHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4xMTMwOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXFxuMTEzMTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjExMzI6XFx0e1xcbjExMzM6XFx0XFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcXG4xMTM0OlxcdFxcdGt0aW1lX3QgY3ljbGUgPSAwO1xcbjExMzU6XFx0XFx0aW50IGVyciA9IDA7XFxuMTEzNjpcXHRcXG4xMTM3OlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xcbjExMzg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQWRkaW5nIGEgc2luZ2xlIGVudHJ5IGlzIG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4xMTM5OlxcdFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuMTE0MDpcXHRcXHR9XFxuMTE0MTpcXHRcXG4xMTQyOlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQkFTRV9USU1FXSlcXG4xMTQzOlxcdFxcdFxcdG5ldy1cXHUwMDNlYmFzZV90aW1lID0gbmxhX2dldF9zNjQodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0JBU0VfVElNRV0pO1xcbjExNDQ6XFx0XFxuMTE0NTpcXHRcXHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVfRVhURU5TSU9OXSlcXG4xMTQ2OlxcdFxcdFxcdG5ldy1cXHUwMDNlY3ljbGVfdGltZV9leHRlbnNpb24gPSBubGFfZ2V0X3M2NCh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV9FWFRFTlNJT05dKTtcXG4xMTQ3OlxcdFxcbjExNDg6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FXSlcXG4xMTQ5OlxcdFxcdFxcdG5ldy1cXHUwMDNlY3ljbGVfdGltZSA9IG5sYV9nZXRfczY0KHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FXSk7XFxuMTE1MDpcXHRcXG4xMTUxOlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfRU5UUllfTElTVF0pXFxuMTE1MjpcXHRcXHRcXHRlcnIgPSBwYXJzZV9zY2hlZF9saXN0KHEsIHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9FTlRSWV9MSVNUXSxcXG4xMTUzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBuZXcsIGV4dGFjayk7XFxuMTE1NDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMTU1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTE1NjpcXHRcXG4xMTU3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFxcdTAwMjZuZXctXFx1MDAzZWVudHJpZXMsIGxpc3QpXFxuMTE1ODpcXHRcXHRcXHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXFx1MDAzZWludGVydmFsKTtcXG4xMTU5OlxcdFxcbjExNjA6XFx0XFx0aWYgKGN5Y2xlIFxcdTAwM2MgMCB8fCBjeWNsZSBcXHUwMDNlIElOVF9NQVgpIHtcXG4xMTYxOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIidjeWNsZV90aW1lJyBpcyB0b28gYmlnXFxcIik7XFxuMTE2MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTYzOlxcdFxcdH1cXG4xMTY0OlxcdFxcbjExNjU6XFx0XFx0aWYgKCFuZXctXFx1MDAzZWN5Y2xlX3RpbWUpXFxuMTE2NjpcXHRcXHRcXHRuZXctXFx1MDAzZWN5Y2xlX3RpbWUgPSBjeWNsZTtcXG4xMTY3OlxcdFxcbjExNjg6XFx0XFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIGN5Y2xlKSB7XFxuMTE2OTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCInY3ljbGVfdGltZScgaXMgbGVzcyB0aGFuIHRoZSBzdW0gb2YgZW50cnkgaW50ZXJ2YWxzXFxcIik7XFxuMTE3MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTcxOlxcdFxcdH1cXG4xMTcyOlxcdFxcbjExNzM6XFx0XFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIG5ldy1cXHUwMDNlbnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7XFxuMTE3NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCInY3ljbGVfdGltZScgaXMgdG9vIHNtYWxsXFxcIik7XFxuMTE3NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTc2OlxcdFxcdH1cXG4xMTc3OlxcdFxcbjExNzg6XFx0XFx0dGFwcmlvX2NhbGN1bGF0ZV9nYXRlX2R1cmF0aW9ucyhxLCBuZXcpO1xcbjExNzk6XFx0XFxuMTE4MDpcXHRcXHRyZXR1cm4gMDtcXG4xMTgxOlxcdH1cXG4xMTgyOlxcdFxcbjExODM6XFx0c3RhdGljIGludCB0YXByaW9fcGFyc2VfbXFwcmlvX29wdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbjExODQ6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0LFxcbjExODU6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbjExODY6XFx0XFx0XFx0XFx0XFx0ICAgdTMyIHRhcHJpb19mbGFncylcXG4xMTg3OlxcdHtcXG4xMTg4OlxcdFxcdGJvb2wgYWxsb3dfb3ZlcmxhcHBpbmdfdHhxcyA9IFRYVElNRV9BU1NJU1RfSVNfRU5BQkxFRCh0YXByaW9fZmxhZ3MpO1xcbjExODk6XFx0XFxuMTE5MDpcXHRcXHRpZiAoIXFvcHQpIHtcXG4xMTkxOlxcdFxcdFxcdGlmICghbmV0ZGV2X2dldF9udW1fdGMoZGV2KSkge1xcbjExOTI6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiJ21xcHJpbycgY29uZmlndXJhdGlvbiBpcyBuZWNlc3NhcnlcXFwiKTtcXG4xMTkzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjExOTQ6XFx0XFx0XFx0fVxcbjExOTU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTE5NjpcXHRcXHR9XFxuMTE5NzpcXHRcXG4xMTk4OlxcdFxcdC8qIHRhcHJpbyBpbXBvc2VzIHRoYXQgdHJhZmZpYyBjbGFzc2VzIG1hcCAxOm4gdG8gdHggcXVldWVzICovXFxuMTE5OTpcXHRcXHRpZiAocW9wdC1cXHUwMDNlbnVtX3RjIFxcdTAwM2UgZGV2LVxcdTAwM2VudW1fdHhfcXVldWVzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjM2LjE4MDUwNzkwN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzYyNTAxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIGB0YXByaW9gIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAuIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgLSB3aG8ncyBhY3R1YWxseSBpbnZva2luZyB0aGlzIGZ1bmN0aW9uPyBLbm93aW5nIHRoYXQgd2lsbCBwcm92aWRlIGNyaXRpY2FsIGluc2lnaHRzIGludG8gd2hhdCdzIGJlaW5nIHBhc3NlZCBpbiBhbmQgd2hhdCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgaXMuIENvbnRleHQgaXMgZXZlcnl0aGluZy5cblxuVGhlbiwgSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gdGhlIGJyb2FkZXIgYHRhcHJpb2AgcWRpc2MgaW1wbGVtZW50YXRpb24uIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGZvciB0aGlzIHFkaXNjPyBXaGF0J3MgdGhlIGNvbXBsZXRlIGZlYXR1cmUgc2V0PyBXaGF0IGtleSBkYXRhIHN0cnVjdHVyZXMgYXJlIGluIHBsYXk/IEtub3dpbmcgdGhlIGxhbmRzY2FwZSBvZiB0aGUgYHRhcHJpb2AgcWRpc2Mgd2lsbCBoZWxwIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIG1hcCBpdCBvdXQsIHNvIEkgY2FuIHNlZSBob3cgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIEVzc2VudGlhbGx5IEknbGwgbmVlZCB0byBkZXZlbG9wIHRoZSBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0gc28gSSBjYW4gaWRlbnRpZnkgaG93IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gY29udHJpYnV0ZXMgdG8gdGhlIGNvbXBsZXRlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDU6MzguNTE2NzYxOTI2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTU4ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhcnNlX3RhcHJpb19zY2hlZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTA4OT1zdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEyOC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMjk6c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEzMC1cXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODI1PXN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTE5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTkyMDpcXHRlcnIgPSBwYXJzZV90YXByaW9fc2NoZWR1bGUocSwgdGIsIG5ld19hZG1pbiwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MjEtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjM4LjU3NzcyNDc4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjkyNjU3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFRhcHJpbyBRZGlzYyBPcGVyYXRpb25zKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgYHRhcHJpb2AgUWRpc2MgYWN0dWFsbHkgd29ya3MuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgc291cmNlLCBzbyBJJ20gaGVhZGluZyBzdHJhaWdodCBpbnRvIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gSSB3YW50IHRvIGxvb2sgYXQgdGhlIGBxZGlzY19vcHNgIHN0cnVjdHVyZSBzcGVjaWZpY2FsbHkuIFRoYXQncyB0aGUgY29yZSBvZiBob3cgdGhpcyB0aGluZyBmdW5jdGlvbnMg4oCTIGl0J2xsIHRlbGwgbWUgaG93IHBhY2tldHMgYXJlIGVucXVldWVkLCBkZXF1ZXVlZCwgY29uZmlndXJlZCwgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBhdCB0aGUgc2NoZWR1bGluZyBsZXZlbC4gVW5kZXJzdGFuZGluZyB0aGVzZSBvcGVyYXRpb25zIGlzIGNydWNpYWwgZm9yIGZpZ3VyaW5nIG91dCBpdHMgYmVoYXZpb3IgYW5kIGNhcGFiaWxpdGllcy4gSSdtIGV4cGVjdGluZyB0byBzZWUgaW50ZXJlc3RpbmcgdGhpbmdzIGhlcmUsIGdpdmVuIHRoZSB0aW1lLXNlbnNpdGl2ZSBuYXR1cmUgYW5kIHRyYWZmaWMgc2hhcGluZyBmdW5jdGlvbmFsaXRpZXMgb2YgVGFwcmlvLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQzNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjQwLjU0Njk5MzM1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDQyNDI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgUWRpc2Nfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHRhcHJpb19jbGFzc19vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NDgtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTQ5OnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTAtXFx0LmNsX29wc1xcdFxcdD0gXFx1MDAyNnRhcHJpb19jbGFzc19vcHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjQwLjY1MTQyMzMyOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzE1NjMyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHNjaF90YXByaW8uY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gQmFzZWQgb24gd2hhdCBJJ20gbG9va2luZyBpbnRvLCBJIHRoaW5rIHRoZSBpc3N1ZSBpcyBhcm91bmQgdGhlIHNjaGVkdWxpbmcgbG9naWMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBUQVBSSU8gZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlLCBhbmQgSSBmaWd1cmUgdGhlIHByb2JsZW0gbWlnaHQgYmUgaW4gdGhlIHZpY2luaXR5IG9mIGxpbmUgMjU0OSB3aXRoaW4gdGhlIGBzY2hfdGFwcmlvLmNgIGZpbGUuIExldCdzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCdzIHdoYXQuIEknbGwgZm9jdXMgb24gdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHRvbywgdG8gZ2V0IHRoZSBmdWxsIGNvbnRleHQgb2Ygd2hhdCdzIGdvaW5nIG9uLiBIb3BlZnVsbHksIHRoZSBwcm9ibGVtIGlzIHJpZ2h0IHRoZXJlLCBzdGFyaW5nIG1lIGluIHRoZSBmYWNlISBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3OTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNTo0Mi43ODI5ODg1NTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU0MDpcXHRcXHQuZ3JhZnRcXHRcXHQ9IHRhcHJpb19ncmFmdCxcXG4yNTQxOlxcdFxcdC5sZWFmXFx0XFx0PSB0YXByaW9fbGVhZixcXG4yNTQyOlxcdFxcdC5maW5kXFx0XFx0PSB0YXByaW9fZmluZCxcXG4yNTQzOlxcdFxcdC53YWxrXFx0XFx0PSB0YXByaW9fd2FsayxcXG4yNTQ0OlxcdFxcdC5kdW1wXFx0XFx0PSB0YXByaW9fZHVtcF9jbGFzcyxcXG4yNTQ1OlxcdFxcdC5kdW1wX3N0YXRzXFx0PSB0YXByaW9fZHVtcF9jbGFzc19zdGF0cyxcXG4yNTQ2OlxcdFxcdC5zZWxlY3RfcXVldWVcXHQ9IHRhcHJpb19zZWxlY3RfcXVldWUsXFxuMjU0NzpcXHR9O1xcbjI1NDg6XFx0XFxuMjU0OTpcXHRzdGF0aWMgc3RydWN0IFFkaXNjX29wcyB0YXByaW9fcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuMjU1MDpcXHRcXHQuY2xfb3BzXFx0XFx0PSBcXHUwMDI2dGFwcmlvX2NsYXNzX29wcyxcXG4yNTUxOlxcdFxcdC5pZFxcdFxcdD0gXFxcInRhcHJpb1xcXCIsXFxuMjU1MjpcXHRcXHQucHJpdl9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHRhcHJpb19zY2hlZCksXFxuMjU1MzpcXHRcXHQuaW5pdFxcdFxcdD0gdGFwcmlvX2luaXQsXFxuMjU1NDpcXHRcXHQuY2hhbmdlXFx0XFx0PSB0YXByaW9fY2hhbmdlLFxcbjI1NTU6XFx0XFx0LmRlc3Ryb3lcXHQ9IHRhcHJpb19kZXN0cm95LFxcbjI1NTY6XFx0XFx0LnJlc2V0XFx0XFx0PSB0YXByaW9fcmVzZXQsXFxuMjU1NzpcXHRcXHQuYXR0YWNoXFx0XFx0PSB0YXByaW9fYXR0YWNoLFxcbjI1NTg6XFx0XFx0LnBlZWtcXHRcXHQ9IHRhcHJpb19wZWVrLFxcbjI1NTk6XFx0XFx0LmRlcXVldWVcXHQ9IHRhcHJpb19kZXF1ZXVlLFxcbjI1NjA6XFx0XFx0LmVucXVldWVcXHQ9IHRhcHJpb19lbnF1ZXVlLFxcbjI1NjE6XFx0XFx0LmR1bXBcXHRcXHQ9IHRhcHJpb19kdW1wLFxcbjI1NjI6XFx0XFx0LmR1bXBfc3RhdHNcXHQ9IHRhcHJpb19kdW1wX3N0YXRzLFxcbjI1NjM6XFx0XFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4yNTY0OlxcdH07XFxuMjU2NTpcXHRNT0RVTEVfQUxJQVNfTkVUX1NDSChcXFwidGFwcmlvXFxcIik7XFxuMjU2NjpcXHRcXG4yNTY3OlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgdGFwcmlvX2RldmljZV9ub3RpZmllciA9IHtcXG4yNTY4OlxcdFxcdC5ub3RpZmllcl9jYWxsID0gdGFwcmlvX2Rldl9ub3RpZmllcixcXG4yNTY5OlxcdH07XFxuMjU3MDpcXHRcXG4yNTcxOlxcdHN0YXRpYyBpbnQgX19pbml0IHRhcHJpb19tb2R1bGVfaW5pdCh2b2lkKVxcbjI1NzI6XFx0e1xcbjI1NzM6XFx0XFx0aW50IGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2dGFwcmlvX2RldmljZV9ub3RpZmllcik7XFxuMjU3NDpcXHRcXG4yNTc1OlxcdFxcdGlmIChlcnIpXFxuMjU3NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI1Nzc6XFx0XFxuMjU3ODpcXHRcXHRyZXR1cm4gcmVnaXN0ZXJfcWRpc2MoXFx1MDAyNnRhcHJpb19xZGlzY19vcHMpO1xcbjI1Nzk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNTo0Mi43ODMyOTkzMzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5MTkwMDk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIGFuZCB0YXByaW86IEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIFwiQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuXCIgSSBuZWVkIHRvIGdldCBzb21lIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGFwcmlvLCBhbmQgdGhlIGZpcnN0IHBsYWNlIEkgYWx3YXlzIGdvIHRvIGZvciBpbml0aWFsIGludmVzdGlnYXRpb24gaXMgdGhlIHByb2plY3QncyBLY29uZmlnIGZpbGUuIEkgYXNzdW1lIHRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgbWFuYWdlZC4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoZXRoZXIgdGFwcmlvIGlzIGF2YWlsYWJsZSBhbmQgaG93IGl0IGlzIGltcGxlbWVudGVkLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGtub3duIGNvbmZpZ3VyYXRpb24gaXNzdWVzIG9yIGRlcGVuZGVuY2llcyB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYzMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDU6NDQuNzc1MjAyNzE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzA2MTA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY2hfdGFwcmlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9MTcyPWNvbmZpZyBORVRfU0NIX1RBUFJJT1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMTc4LVxcbm5ldC9zY2hlZC9LY29uZmlnOjE3OTpcXHQgIFNlZSB0aGUgdG9wIG9mIFxcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXFxubmV0L3NjaGVkL0tjb25maWctMTgwLVxcbm5ldC9zY2hlZC9LY29uZmlnLTE4MS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5uZXQvc2NoZWQvS2NvbmZpZzoxODI6XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX3RhcHJpby5cXG5uZXQvc2NoZWQvS2NvbmZpZy0xODMtXFxuLS1cXG5uZXQvc2NoZWQvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX05FVF9TQ0hfRVRGKVxcdCs9IHNjaF9ldGYub1xcbm5ldC9zY2hlZC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfTkVUX1NDSF9UQVBSSU8pXFx0Kz0gc2NoX3RhcHJpby5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTY1LW9iai0kKENPTkZJR19ORVRfU0NIX0JQRilcXHQrPSBicGZfcWRpc2Mub1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MzovKiBuZXQvc2NoZWQvc2NoX3RhcHJpby5jXFx0IFRpbWUgQXdhcmUgUHJpb3JpdHkgU2NoZWR1bGVyXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy00LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjQ0Ljg1ODI2NzgyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTc2OTkyMTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb24sIGxpa2VseSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgYG5ldC9zY2hlZGAgc3Vic3lzdGVtLiBJIHJlY2FsbCB0aGF0IEtjb25maWcgZmlsZXMgYXJlIHRoZSBoZWFydCBvZiB0aGUgTGludXgga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoZXkgZGVmaW5lIHRoZSBvcHRpb25zIHByZXNlbnRlZCB0byB0aGUgdXNlciBkdXJpbmcga2VybmVsIGNvbXBpbGF0aW9uLiBBbmQgSSBhbSByZW1lbWJlcmluZyB0aGF0IGxpbmUgMTcyIG9yIHNvIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIG1pZ2h0IGJlLiBMZXQncyBzdGFydCB0aGVyZS4gSSdtIHByb2JhYmx5IGludGVyZXN0ZWQgaW4gdGhlIG9wdGlvbnMgcmVsYXRlZCB0by4uLiB3ZWxsLCBJIGRvbid0IGtub3cgKmV4YWN0bHkqIHlldC4gQnV0IHRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luIG15IGludmVzdGlnYXRpb24uIFRoaXMgYXBwcm9hY2ggaXMgZWZmaWNpZW50IGJlY2F1c2UgaXQgaGVscHMgbWUgbmFycm93IGRvd24gdGhlIHNjb3BlIG9mIHRoZSBwcm9ibGVtIHF1aWNrbHk7IGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgd2lsbCBsZXQgbWUgc2VlIHdoYXQncyBjb25maWd1cmFibGUgaW4gdGhpcyBhcmVhLiBJdCdsbCBnaXZlIG1lIGEgcm9hZG1hcCwgbGlrZWx5IGhpZ2hsaWdodGluZyB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEwNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjQ3LjQzNTI2MzAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2V0Zi5cXG4gMTY2OlxcdFxcbiAxNjc6XFx0Y29uZmlnIE5FVF9TQ0hfTVFQUklPX0xJQlxcbiAxNjg6XFx0XFx0dHJpc3RhdGVcXG4gMTY5OlxcdFxcdGhlbHBcXG4gMTcwOlxcdFxcdCAgQ29tbW9uIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBtcXByaW8gcXVldWUgY29uZmlndXJhdGlvbnMuXFxuIDE3MTpcXHRcXG4gMTcyOlxcdGNvbmZpZyBORVRfU0NIX1RBUFJJT1xcbiAxNzM6XFx0XFx0dHJpc3RhdGUgXFxcIlRpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXFxcIlxcbiAxNzQ6XFx0XFx0c2VsZWN0IE5FVF9TQ0hfTVFQUklPX0xJQlxcbiAxNzU6XFx0XFx0aGVscFxcbiAxNzY6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgVGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBwYWNrZXRcXG4gMTc3OlxcdFxcdCAgc2NoZWR1bGluZyBhbGdvcml0aG0uXFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdCAgU2VlIHRoZSB0b3Agb2YgXFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF90YXByaW8uY1xcdTAwM2UgZm9yIG1vcmUgZGV0YWlscy5cXG4gMTgwOlxcdFxcbiAxODE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDE4MjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzY2hfdGFwcmlvLlxcbiAxODM6XFx0XFxuIDE4NDpcXHRjb25maWcgTkVUX1NDSF9HUkVEXFxuIDE4NTpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBSYW5kb20gRWFybHkgRGV0ZWN0aW9uIChHUkVEKVxcXCJcXG4gMTg2OlxcdFxcdGhlbHBcXG4gMTg3OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEdlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvblxcbiAxODg6XFx0XFx0ICAoR1JFRCkgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtIGZvciBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzXFxuIDE4OTpcXHRcXHQgIChzZWUgdGhlIHRvcCBvZiBcXHUwMDNjZmlsZTpuZXQvc2NoZWQvc2NoX3JlZC5jXFx1MDAzZSBmb3IgZGV0YWlscyBhbmRcXG4gMTkwOlxcdFxcdCAgcmVmZXJlbmNlcyBhYm91dCB0aGUgYWxnb3JpdGhtKS5cXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDE5MzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzY2hfZ3JlZC5cXG4gMTk0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNTo0Ny40MzU0MTE0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTM0OTIzOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBuZXR3b3JrIHNjaGVkdWxlciBjb25maWd1cmF0aW9uLiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIHNlZSB3aGVyZSB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgZGVmaW5lZC4gTXkgaW5zdGluY3QgaXMgdGhhdCBJJ2xsIGZpbmQgdGhlbSBpbiBgbmV0L3NjaGVkL0tjb25maWdgLiBJdCdzIGEgcHJldHR5IHN0YW5kYXJkIGxvY2F0aW9uIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbmV0d29ya2luZy4gSSdtIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGZvciBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IGxpbmsgaW50byB0aGUgb3ZlcmFsbCBtZW51IHN0cnVjdHVyZSDigJMgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24gXCJsaXZlc1wiIHdpdGhpbiB0aGUgZ3JlYXRlciBzY2hlbWUgb2YgdGhpbmdzLiBVbmRlcnN0YW5kaW5nIHRoZSBwYXJlbnQgbWVudSB3aWxsIHF1aWNrbHkgZ2l2ZSBtZSBjb250ZXh0LiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCB0aGVuIG1ha2UgaXQgYWxsIGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODQxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNTo1MS4zNzAzMzc4MjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuICAyMTpcXHRcXHQgIG5lZWQgYSBjZXJ0YWluIG1pbmltdW0gZGF0YSBmbG93IHJhdGUsIG9yIGlmIHlvdSBuZWVkIHRvIGxpbWl0IHRoZVxcbiAgMjI6XFx0XFx0ICBtYXhpbXVtIGRhdGEgZmxvdyByYXRlIGZvciB0cmFmZmljIHdoaWNoIG1hdGNoZXMgc3BlY2lmaWVkIGNyaXRlcmlhLlxcbiAgMjM6XFx0XFx0ICBUaGlzIGNvZGUgaXMgY29uc2lkZXJlZCB0byBiZSBleHBlcmltZW50YWwuXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UnbGwgbmVlZCB0aGUgdXNlci1sZXZlbCB1dGlsaXRpZXNcXG4gIDI2OlxcdFxcdCAgZnJvbSB0aGUgcGFja2FnZSBpcHJvdXRlMit0YyBhdFxcbiAgMjc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2lwcm91dGUyL1xcdTAwM2UuICBUaGF0IHBhY2thZ2VcXG4gIDI4OlxcdFxcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcXG4gIDI5OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTJcXHUwMDNlLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoaXMgUXVhbGl0eSBvZiBTZXJ2aWNlIChRb1MpIHN1cHBvcnQgd2lsbCBlbmFibGUgeW91IHRvIHVzZVxcbiAgMzI6XFx0XFx0ICBEaWZmZXJlbnRpYXRlZCBTZXJ2aWNlcyAoZGlmZnNlcnYpIGFuZCBSZXNvdXJjZSBSZXNlcnZhdGlvbiBQcm90b2NvbFxcbiAgMzM6XFx0XFx0ICAoUlNWUCkgb24geW91ciBMaW51eCByb3V0ZXIgaWYgeW91IGFsc28gc2F5IFkgdG8gdGhlIGNvcnJlc3BvbmRpbmdcXG4gIDM0OlxcdFxcdCAgY2xhc3NpZmllcnMgYmVsb3cuICBEb2N1bWVudGF0aW9uIGFuZCBzb2Z0d2FyZSBpcyBhdFxcbiAgMzU6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2RpZmZzZXJ2LnNvdXJjZWZvcmdlLm5ldC9cXHUwMDNlLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCB0byBcXFwiL3Byb2MgZmlsZSBzeXN0ZW1cXFwiIGJlbG93LCB5b3Ugd2lsbCBiZSBhYmxlXFxuICAzODpcXHRcXHQgIHRvIHJlYWQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHBhY2tldCBzY2hlZHVsZXJzIGZyb20gdGhlIGZpbGVcXG4gIDM5OlxcdFxcdCAgL3Byb2MvbmV0L3BzY2hlZC5cXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNTo1MS4zNzA0MjI3MTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5OTE2NTk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBORVRfU0NIRUQgSW5jbHVzaW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRvIHVuZGVyc3RhbmQgaG93IGBORVRfU0NIRURgIGlzIGhhbmRsZWQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uOiBgbmV0L0tjb25maWdgLiBUaGlzIGZpbGUgZGljdGF0ZXMgYWxsIHRoZSBuZXR3b3JraW5nLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBCeSBleGFtaW5pbmcgaXRzIHN0cnVjdHVyZSBhbmQgZGVwZW5kZW5jaWVzLCBJIGNhbiBxdWlja2x5IGRldGVybWluZSBob3cgYE5FVF9TQ0hFRGAgaXMgZXhwb3NlZCB0byB0aGUgdXNlciBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp1bmRlciB3aGF0IGNvbmRpdGlvbnMqIGl0IGJlY29tZXMgYXZhaWxhYmxlLiBJIG5lZWQgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQsIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBtaWdodCBkZXBlbmQgb24sIGFuZCBwb3RlbnRpYWxseSB3aGVyZSBpdCdzICp1c2VkKiB3aXRoaW4gdGhlIGxhcmdlciBgS2NvbmZpZ2AgaGllcmFyY2h5LiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgcHJvdmlkZSBjb250ZXh0IGZvciB0aGUgd2lkZXIgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjgxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNTo1My45Njk1OTE2MTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDgzMzI0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MTIwOTQ9c3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTIxNjktXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKTtcXG5uZXQvY29yZS9kZXYuYzoxMjE3MDojaWZkZWYgQ09ORklHX05FVF9TQ0hFRFxcbm5ldC9jb3JlL2Rldi5jLTEyMTcxLVxcdGhhc2hfaW5pdChkZXYtXFx1MDAzZXFkaXNjX2hhc2gpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTAwMzg9c3RhdGljIHUzMiBicGZfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDIxMS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBfX3NrX2J1ZmYsIHRjX2luZGV4KTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMDIxMjojaWZkZWYgQ09ORklHX05FVF9TQ0hFRFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjEzLVxcdFxcdGlmICh0eXBlID09IEJQRl9XUklURSlcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE1NTk9c3RhdGljIHZvaWQgX19jb3B5X3NrYl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE1OTktI2VuZGlmXFxubmV0L2NvcmUvc2tidWZmLmM6MTYwMDojaWZkZWYgQ09ORklHX05FVF9TQ0hFRFxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MDEtXFx0Q0hFQ0tfU0tCX0ZJRUxEKHRjX2luZGV4KTtcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTI3NT1zdGF0aWMgaW50IGZsb3dfbGltaXRfdGFibGVfbGVuX3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMjk1LVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjI5NjojaWZkZWYgQ09ORklHX05FVF9TQ0hFRFxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTI5Ny1zdGF0aWMgaW50IHNldF9kZWZhdWx0X3FkaXNjKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz00MzA9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTU4OS0jZW5kaWZcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo1OTA6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01OTEtXFx0e1xcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9NTUxPXN0YXRpYyB2b2lkIGlwX2NvcHlfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTU2My1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzo1NjQ6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy01NjUtXFx0dG8tXFx1MDAzZXRjX2luZGV4ID0gZnJvbS1cXHUwMDNldGNfaW5kZXg7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NzA0PXN0YXRpYyB2b2lkIGlwNl9jb3B5X21ldGFkYXRhKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNzE1LVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzo3MTY6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNzE3LVxcdHRvLVxcdTAwM2V0Y19pbmRleCA9IGZyb20tXFx1MDAzZXRjX2luZGV4O1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy00My1cXG5uZXQvc2NoZWQvS2NvbmZpZzo0NDppZiBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy00NS1cXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTk1ND1jb25maWcgTkVUX1RDX1NLQl9FWFRcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTk2NS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo5NjY6ZW5kaWYgIyBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy05NjctXFxuLS1cXG5uZXQvc2NoZWQvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBzY2hfZnJhZy5vXFxubmV0L3NjaGVkL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX05FVF9TQ0hFRClcXHRcXHQrPSBzY2hfYXBpLm8gc2NoX2JsYWNraG9sZS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ORVRfQ0xTKVxcdFxcdCs9IGNsc19hcGkub1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MzM5Mj1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIlRoZSBDQUtFIHNoYXBlci5cXFwiKTtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzozMzkzOk1PRFVMRV9JTVBPUlRfTlMoXFxcIk5FVF9TQ0hFRF9JTlRFUk5BTFxcXCIpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTEwNj1zdGF0aWMgdm9pZCBfX3FkaXNjX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpxZGlzYylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMTAtXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTExMTojaWZkZWYgQ09ORklHX05FVF9TQ0hFRFxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMTItXFx0cWRpc2NfaGFzaF9kZWwocWRpc2MpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTIyOD1zdGF0aWMgdm9pZCBhdHRhY2hfZGVmYXVsdF9xZGlzY3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTEyNjItXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTI2MzojaWZkZWYgQ09ORklHX05FVF9TQ0hFRFxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTEyNjQtXFx0aWYgKHFkaXNjICE9IFxcdTAwMjZub29wX3FkaXNjKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTQ0ND12b2lkIG1xX2NoYW5nZV9yZWFsX251bV90eChzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgaW50IG5ld19yZWFsX3R4KVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTE0NDUte1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjE0NDY6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xNDQ3LVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYz00OD12b2lkIG1xX2Rlc3Ryb3lfY29tbW9uKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9tcS5jLTU5LX1cXG5uZXQvc2NoZWQvc2NoX21xLmM6NjA6RVhQT1JUX1NZTUJPTF9OU19HUEwobXFfZGVzdHJveV9jb21tb24sIFxcXCJORVRfU0NIRURfSU5URVJOQUxcXFwiKTtcXG5uZXQvc2NoZWQvc2NoX21xLmMtNjEtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX21xLmM9Njg9aW50IG1xX2luaXRfY29tbW9uKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX21xLmMtMTA0LX1cXG5uZXQvc2NoZWQvc2NoX21xLmM6MTA1OkVYUE9SVF9TWU1CT0xfTlNfR1BMKG1xX2luaXRfY29tbW9uLCBcXFwiTkVUX1NDSEVEX0lOVEVSTkFMXFxcIik7XFxubmV0L3NjaGVkL3NjaF9tcS5jLTEwNi1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYz0xMjA9dm9pZCBtcV9hdHRhY2goc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX21xLmMtMTMxLVxcdFxcdFxcdHFkaXNjX3B1dChvbGQpO1xcbm5ldC9zY2hlZC9zY2hfbXEuYzoxMzI6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcXG5uZXQvc2NoZWQvc2NoX21xLmMtMTMzLVxcdFxcdGlmIChudHggXFx1MDAzYyBkZXYtXFx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYy0xNDAtfVxcbm5ldC9zY2hlZC9zY2hfbXEuYzoxNDE6RVhQT1JUX1NZTUJPTF9OU19HUEwobXFfYXR0YWNoLCBcXFwiTkVUX1NDSEVEX0lOVEVSTkFMXFxcIik7XFxubmV0L3NjaGVkL3NjaF9tcS5jLTE0Mi1cXG5uZXQvc2NoZWQvc2NoX21xLmM9MTQzPXZvaWQgbXFfZHVtcF9jb21tb24oc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX21xLmMtMTgzLX1cXG5uZXQvc2NoZWQvc2NoX21xLmM6MTg0OkVYUE9SVF9TWU1CT0xfTlNfR1BMKG1xX2R1bXBfY29tbW9uLCBcXFwiTkVUX1NDSEVEX0lOVEVSTkFMXFxcIik7XFxubmV0L3NjaGVkL3NjaF9tcS5jLTE4NS1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYz0yMDI9c3RydWN0IG5ldGRldl9xdWV1ZSAqbXFfc2VsZWN0X3F1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9tcS5jLTIwNi19XFxubmV0L3NjaGVkL3NjaF9tcS5jOjIwNzpFWFBPUlRfU1lNQk9MX05TX0dQTChtcV9zZWxlY3RfcXVldWUsIFxcXCJORVRfU0NIRURfSU5URVJOQUxcXFwiKTtcXG5uZXQvc2NoZWQvc2NoX21xLmMtMjA4LVxcbi0tXFxubmV0L3NjaGVkL3NjaF9tcS5jPTIzNT1zdHJ1Y3QgUWRpc2MgKm1xX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX21xLmMtMjQwLX1cXG5uZXQvc2NoZWQvc2NoX21xLmM6MjQxOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG1xX2xlYWYsIFxcXCJORVRfU0NIRURfSU5URVJOQUxcXFwiKTtcXG5uZXQvc2NoZWQvc2NoX21xLmMtMjQyLVxcbm5ldC9zY2hlZC9zY2hfbXEuYz0yNDM9dW5zaWduZWQgbG9uZyBtcV9maW5kKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYy0yNTAtfVxcbm5ldC9zY2hlZC9zY2hfbXEuYzoyNTE6RVhQT1JUX1NZTUJPTF9OU19HUEwobXFfZmluZCwgXFxcIk5FVF9TQ0hFRF9JTlRFUk5BTFxcXCIpO1xcbm5ldC9zY2hlZC9zY2hfbXEuYy0yNTItXFxubmV0L3NjaGVkL3NjaF9tcS5jPTI1Mz1pbnQgbXFfZHVtcF9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYy0yNjItfVxcbm5ldC9zY2hlZC9zY2hfbXEuYzoyNjM6RVhQT1JUX1NZTUJPTF9OU19HUEwobXFfZHVtcF9jbGFzcywgXFxcIk5FVF9TQ0hFRF9JTlRFUk5BTFxcXCIpO1xcbm5ldC9zY2hlZC9zY2hfbXEuYy0yNjQtXFxubmV0L3NjaGVkL3NjaF9tcS5jPTI2NT1pbnQgbXFfZHVtcF9jbGFzc19zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYy0yNzUtfVxcbm5ldC9zY2hlZC9zY2hfbXEuYzoyNzY6RVhQT1JUX1NZTUJPTF9OU19HUEwobXFfZHVtcF9jbGFzc19zdGF0cywgXFxcIk5FVF9TQ0hFRF9JTlRFUk5BTFxcXCIpO1xcbm5ldC9zY2hlZC9zY2hfbXEuYy0yNzctXFxubmV0L3NjaGVkL3NjaF9tcS5jPTI3OD12b2lkIG1xX3dhbGsoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBxZGlzY193YWxrZXIgKmFyZylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYy0yOTEtfVxcbm5ldC9zY2hlZC9zY2hfbXEuYzoyOTI6RVhQT1JUX1NZTUJPTF9OU19HUEwobXFfd2FsaywgXFxcIk5FVF9TQ0hFRF9JTlRFUk5BTFxcXCIpO1xcbm5ldC9zY2hlZC9zY2hfbXEuYy0yOTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjU1LjQ3NzkyODc2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NjAzMTU5MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUYXByaW8gQ29uZmlndXJhdGlvbiBQcm9jZXNzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AgY29kZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBjb25maWd1cmF0aW9uIGZsb3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBoYXBwZW5zIHdoZW4gYSB1c2VyIHNldHMgdXAgYSBUQVBSSU8gcWRpc2MuIEZyb20gd2hhdCBJIHJlY2FsbCwgdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgYFJUTV9ORVdRRElTQ2Agb3IgYFJUTV9TRVRRRElTQ2AgbWVzc2FnZXMsIHdpbGwgdHJpZ2dlciBlaXRoZXIgYHRhcHJpb19pbml0YCBvciBgdGFwcmlvX2NoYW5nZWAuIE5vdywgdGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgdG8gc2VlIGhvdyB0aGUgc2NoZWR1bGUgaXMgYWN0dWFsbHkgcGFyc2VkIGFuZCBhcHBsaWVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aG9zZSBlbnRyeSBwb2ludHMuIEkgYmVsaWV2ZSB0aGF0IGB0YXByaW9fY2hhbmdlYCBjYWxscyBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgd2hpY2ggaXMgbGlrZWx5IHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNjaGVkdWxlIHBhcmFtZXRlcnMgZ2V0IHBhcnNlZCwgdmFsaWRhdGVkLCBhbmQgdHJhbnNsYXRlZCBpbnRvIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBkcml2ZSB0aGUgVEFQUklPIHF1ZXVpbmcgYmVoYXZpb3IuIEkgc2hvdWxkIGJlZ2luIGJ5IGNoZWNraW5nIGB0YXByaW9faW5pdGAgYW5kIGB0YXByaW9fY2hhbmdlYCBpbiBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AuIFRoYXQncyB3aGVyZSBJIHdpbGwgc3RhcnQsIHJpZ2h0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDU6NTcuOTM4MjQ3Nzg2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MTA6XFx0XFx0XFx0c3RydWN0IG5ldGRldl90Y190eHEgcmVzO1xcbjE4MTE6XFx0XFxuMTgxMjpcXHRcXHRcXHRyZXMuY29tYmluZWQgPSBSRUFEX09OQ0UoZGV2LVxcdTAwM2V0Y190b190eHFbaV0uY29tYmluZWQpO1xcbjE4MTM6XFx0XFx0XFx0aWYgKHJlcy5jb3VudCAhPSBtcXByaW8tXFx1MDAzZWNvdW50W2ldIHx8XFxuMTgxNDpcXHRcXHRcXHQgICAgcmVzLm9mZnNldCAhPSBtcXByaW8tXFx1MDAzZW9mZnNldFtpXSlcXG4xODE1OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4xODE2OlxcdFxcdH1cXG4xODE3OlxcdFxcbjE4MTg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBUQ19CSVRNQVNLOyBpKyspXFxuMTgxOTpcXHRcXHRcXHRpZiAobmV0ZGV2X2dldF9wcmlvX3RjX21hcChkZXYsIGkpICE9IG1xcHJpby1cXHUwMDNlcHJpb190Y19tYXBbaV0pXFxuMTgyMDpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTgyMTpcXHRcXG4xODIyOlxcdFxcdHJldHVybiAwO1xcbjE4MjM6XFx0fVxcbjE4MjQ6XFx0XFxuMTgyNTpcXHRzdGF0aWMgaW50IHRhcHJpb19jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4xODI2OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTgyNzpcXHR7XFxuMTgyODpcXHRcXHRzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYiA9IHJ0bmxfZGVyZWZlcmVuY2Uoc2NoLVxcdTAwM2VzdGFiKTtcXG4xODI5OlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9UQVBSSU9fQVRUUl9NQVggKyAxXSA9IHsgfTtcXG4xODMwOlxcdFxcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsICphZG1pbiwgKm5ld19hZG1pbjtcXG4xODMxOlxcdFxcdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuMTgzMjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XFxuMTgzMzpcXHRcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKm1xcHJpbyA9IE5VTEw7XFxuMTgzNDpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjE4MzU6XFx0XFx0dTMyIHRhcHJpb19mbGFncztcXG4xODM2OlxcdFxcdGt0aW1lX3Qgc3RhcnQ7XFxuMTgzNzpcXHRcXHRpbnQgaSwgZXJyO1xcbjE4Mzg6XFx0XFxuMTgzOTpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFRDQV9UQVBSSU9fQVRUUl9NQVgsIG9wdCxcXG4xODQwOlxcdFxcdFxcdFxcdFxcdFxcdCAgdGFwcmlvX3BvbGljeSwgZXh0YWNrKTtcXG4xODQxOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjE4NDI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xODQzOlxcdFxcbjE4NDQ6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9QUklPTUFQXSlcXG4xODQ1OlxcdFxcdFxcdG1xcHJpbyA9IG5sYV9kYXRhKHRiW1RDQV9UQVBSSU9fQVRUUl9QUklPTUFQXSk7XFxuMTg0NjpcXHRcXG4xODQ3OlxcdFxcdC8qIFRoZSBzZW1hbnRpY3Mgb2YgdGhlICdmbGFncycgYXJndW1lbnQgaW4gcmVsYXRpb24gdG8gJ2NoYW5nZSgpJ1xcbjE4NDg6XFx0XFx0ICogcmVxdWVzdHMsIGFyZSBpbnRlcnByZXRlZCBmb2xsb3dpbmcgdHdvIHJ1bGVzICh3aGljaCBhcmUgYXBwbGllZCBpblxcbjE4NDk6XFx0XFx0ICogdGhpcyBvcmRlcik6ICgxKSBhbiBvbWl0dGVkICdmbGFncycgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXNcXG4xODUwOlxcdFxcdCAqIHplcm87ICgyKSB0aGUgJ2ZsYWdzJyBvZiBhIFxcXCJydW5uaW5nXFxcIiB0YXByaW8gaW5zdGFuY2UgY2Fubm90IGJlXFxuMTg1MTpcXHRcXHQgKiBjaGFuZ2VkLlxcbjE4NTI6XFx0XFx0ICovXFxuMTg1MzpcXHRcXHR0YXByaW9fZmxhZ3MgPSBubGFfZ2V0X3UzMl9kZWZhdWx0KHRiW1RDQV9UQVBSSU9fQVRUUl9GTEFHU10sIDApO1xcbjE4NTQ6XFx0XFxuMTg1NTpcXHRcXHQvKiB0eHRpbWUtYXNzaXN0IGFuZCBmdWxsIG9mZmxvYWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAqL1xcbjE4NTY6XFx0XFx0aWYgKCh0YXByaW9fZmxhZ3MgXFx1MDAyNiBUQ0FfVEFQUklPX0FUVFJfRkxBR19UWFRJTUVfQVNTSVNUKSBcXHUwMDI2XFx1MDAyNlxcbjE4NTc6XFx0XFx0ICAgICh0YXByaW9fZmxhZ3MgXFx1MDAyNiBUQ0FfVEFQUklPX0FUVFJfRkxBR19GVUxMX09GRkxPQUQpKSB7XFxuMTg1ODpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGV4dGFjaywgdGJbVENBX1RBUFJJT19BVFRSX0ZMQUdTXSxcXG4xODU5OlxcdFxcdFxcdFxcdFxcdCAgICBcXFwiVFhUSU1FX0FTU0lTVCBhbmQgRlVMTF9PRkZMT0FEIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcXFwiKTtcXG4xODYwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4NjE6XFx0XFx0fVxcbjE4NjI6XFx0XFxuMTg2MzpcXHRcXHRpZiAocS1cXHUwMDNlZmxhZ3MgIT0gdGFwcmlvX2ZsYWdzKSB7XFxuMTg2NDpcXHRcXHRcXHRpZiAocS1cXHUwMDNlZmxhZ3MgIT0gVEFQUklPX0ZMQUdTX0lOVkFMSUQpIHtcXG4xODY1OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuMTg2NjpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiQ2hhbmdpbmcgJ2ZsYWdzJyBvZiBhIHJ1bm5pbmcgc2NoZWR1bGUgaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbjE4Njc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE4Njg6XFx0XFx0XFx0fVxcbjE4Njk6XFx0XFx0XFx0V1JJVEVfT05DRShxLVxcdTAwM2VmbGFncywgdGFwcmlvX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDU6NTcuOTM4NDM3NjM2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2OTQ5NTQwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ2hlY2tpbmcgYHRhcHJpb19pbml0YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgaW1tZWRpYXRlIG5lZWQgaGVyZSBpcyB0byB0aG9yb3VnaGx5IGNoZWNrIGB0YXByaW9faW5pdGAuIFdlIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IG9yIHNldHVwIGZ1bmN0aW9uIGZvciBzb21ldGhpbmcsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBjYW4gYWxyZWFkeSBhbnRpY2lwYXRlIGEgZmV3IGtleSBhcmVhcyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2l0aGluIHRoaXMgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBpdCdzIGRvaW5nIG9uIGEgaGlnaCBsZXZlbCwgdmVyaWZ5IGhvdyBpdCdzIGludGVyZmFjaW5nIHdpdGggdGhlIGV4aXN0aW5nIGxpYnJhcmllcywgYW5kIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG9idmlvdXMgbG9naWMgZmxhd3Mgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHdheSB0aGF0IGluaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyBvY2N1ciwgZXNwZWNpYWxseSBhbnkgc2hhcmVkIHJlc291cmNlcy5cblxuSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmdW5jdGlvbnMgYXJlIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgdGFwcmlvX2luaXRgLiBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgb2YgY29uY2Vybiwgc3VjaCBhcyBkZXByZWNhdGVkIGZ1bmN0aW9ucywgb3IgY2FsbHMgdG8gZXh0ZXJuYWwgc2VydmljZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgcmVzcG9uc2liaWxpdHkuIElzIGl0IHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgc3RhcnRpbmcgb3RoZXIgdGhyZWFkcz8gSSBuZWVkIHRvIGNoZWNrIGFsbCBvZiB0aGF0IHRvIGVuc3VyZSB0aGVyZSBpcyBubyBpc3N1ZXMuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBzeXN0ZW0gaXMgc2V0IHVwLCBzbyBJIGNhbiBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBleGlzdGluZyBwcm9ncmFtLiBUaGlzIHdpbGwgaG9wZWZ1bGx5IGFsbG93IG1lIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBjb2RlIGFuZCBtYWtlIHNvbWUgaW50ZWxsaWdlbnQgcHJlZGljdGlvbnMgYWJvdXQgYXJlYXMgdGhhdCBhcmUgZ29vZCBhbmQgYXJlYXMgdGhhdCByZXF1aXJlIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4OTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjAxLjYzMzM5NDMzMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTU1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTYwOlxcdFxcdFxcdFxcdCAqIHRvIGFsbCBuZXRkZXYgVFggcXVldWVzLCBzbyB0aGF0IGRldl9xZGlzY19lbnF1ZXVlKClcXG4yMTYxOlxcdFxcdFxcdFxcdCAqIGdvZXMgdGhyb3VnaCB0YXByaW9fZW5xdWV1ZSgpLlxcbjIxNjI6XFx0XFx0XFx0XFx0ICovXFxuMjE2MzpcXHRcXHRcXHRcXHRkZXZfcXVldWVfcWRpc2MgPSBzY2g7XFxuMjE2NDpcXHRcXHRcXHR9XFxuMjE2NTpcXHRcXHRcXHRvbGQgPSBkZXZfZ3JhZnRfcWRpc2MoZGV2X3F1ZXVlLCBkZXZfcXVldWVfcWRpc2MpO1xcbjIxNjY6XFx0XFx0XFx0LyogVGhlIHFkaXNjJ3MgcmVmY291bnQgcmVxdWlyZXMgdG8gYmUgZWxldmF0ZWQgb25jZVxcbjIxNjc6XFx0XFx0XFx0ICogZm9yIGVhY2ggbmV0ZGV2IFRYIHF1ZXVlIGl0IGlzIGdyYWZ0ZWQgb250b1xcbjIxNjg6XFx0XFx0XFx0ICovXFxuMjE2OTpcXHRcXHRcXHRxZGlzY19yZWZjb3VudF9pbmMoZGV2X3F1ZXVlX3FkaXNjKTtcXG4yMTcwOlxcdFxcdFxcdGlmIChvbGQpXFxuMjE3MTpcXHRcXHRcXHRcXHRxZGlzY19wdXQob2xkKTtcXG4yMTcyOlxcdFxcdH1cXG4yMTczOlxcdH1cXG4yMTc0OlxcdFxcbjIxNzU6XFx0c3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnRhcHJpb19xdWV1ZV9nZXQoc3RydWN0IFFkaXNjICpzY2gsXFxuMjE3NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgY2wpXFxuMjE3NzpcXHR7XFxuMjE3ODpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XFxuMjE3OTpcXHRcXHR1bnNpZ25lZCBsb25nIG50eCA9IGNsIC0gMTtcXG4yMTgwOlxcdFxcbjIxODE6XFx0XFx0aWYgKG50eCBcXHUwMDNlPSBkZXYtXFx1MDAzZW51bV90eF9xdWV1ZXMpXFxuMjE4MjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4yMTgzOlxcdFxcbjIxODQ6XFx0XFx0cmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBudHgpO1xcbjIxODU6XFx0fVxcbjIxODY6XFx0XFxuMjE4NzpcXHRzdGF0aWMgaW50IHRhcHJpb19ncmFmdChzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcXG4yMTg4OlxcdFxcdFxcdFxcdHN0cnVjdCBRZGlzYyAqbmV3LCBzdHJ1Y3QgUWRpc2MgKipvbGQsXFxuMjE4OTpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMjE5MDpcXHR7XFxuMjE5MTpcXHRcXHRzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xcbjIxOTI6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpO1xcbjIxOTM6XFx0XFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlID0gdGFwcmlvX3F1ZXVlX2dldChzY2gsIGNsKTtcXG4yMTk0OlxcdFxcbjIxOTU6XFx0XFx0aWYgKCFkZXZfcXVldWUpXFxuMjE5NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMTk3OlxcdFxcbjIxOTg6XFx0XFx0aWYgKCFuZXcpXFxuMjE5OTpcXHRcXHRcXHRuZXcgPSBcXHUwMDI2bm9vcF9xZGlzYztcXG4yMjAwOlxcdFxcbjIyMDE6XFx0XFx0aWYgKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApXFxuMjIwMjpcXHRcXHRcXHRkZXZfZGVhY3RpdmF0ZShkZXYsIGZhbHNlKTtcXG4yMjAzOlxcdFxcbjIyMDQ6XFx0XFx0LyogSW4gb2ZmbG9hZCBtb2RlLCB0aGUgY2hpbGQgUWRpc2MgaXMgZGlyZWN0bHkgYXR0YWNoZWQgdG8gdGhlIG5ldGRldlxcbjIyMDU6XFx0XFx0ICogVFggcXVldWUsIGFuZCB0aHVzLCB3ZSBuZWVkIHRvIGtlZXAgaXRzIHJlZmNvdW50IGVsZXZhdGVkIGluIG9yZGVyXFxuMjIwNjpcXHRcXHQgKiB0byBjb3VudGVyYWN0IHFkaXNjX2dyYWZ0KCkncyBjYWxsIHRvIHFkaXNjX3B1dCgpIG9uY2UgcGVyIFRYIHF1ZXVlLlxcbjIyMDc6XFx0XFx0ICogSG93ZXZlciwgc2F2ZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBuZXcgcWRpc2MgaW4gdGhlIHByaXZhdGUgYXJyYXkgaW5cXG4yMjA4OlxcdFxcdCAqIGJvdGggc29mdHdhcmUgYW5kIG9mZmxvYWQgY2FzZXMsIHRvIGhhdmUgYW4gdXAtdG8tZGF0ZSByZWZlcmVuY2UgdG9cXG4yMjA5OlxcdFxcdCAqIG91ciBjaGlsZHJlbi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6MDEuNjMzNzEyMzYxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzYzMjQwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBgdGFwcmlvX2luaXRgIGluIHRoZSBOZXRmaWx0ZXIgU2NoZWR1bGVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHRoZSBUQVBSSU8gc2NoZWR1bGVyIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzdGFydCBieSBwaW5wb2ludGluZyB0aGUgc291cmNlIGZpbGUuIFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiIHNvdW5kcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbG9jYXRpb24uIEdpdmVuIHdoYXQgSSBrbm93IGFib3V0IHRoZSB0eXBpY2FsIHN0cnVjdHVyZSBvZiB0aGUgTGludXgga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjaywgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBUQVBSSU8gY29kZS4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSB0aGUgaW5pdCBmdW5jdGlvbiBpdHNlbGYuIFR5cGljYWxseSwgaXTigJlzIG5hbWVkIHNvbWV0aGluZyBsaWtlIGB0YXByaW9faW5pdGAgb3IgYHRhcHJpb19tb2R1bGVfaW5pdGAuIE9uY2UgSSBoYXZlIHRoZSBmaWxlIG5hbWUsIGl0J3MganVzdCBhIG1hdHRlciBvZiBzZWFyY2hpbmcgZm9yIGl0LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaG93IHRoaXMgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCBhbmQgcG90ZW50aWFsbHkgZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjaGVkdWxlcidzIG92ZXJhbGwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYW5kIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBtb2R1bGUgbG9hZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjowMy44NzAwMzgzNjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NjI4MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbnQgdGFwcmlvX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIwMzU9c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNzMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMDc0OnN0YXRpYyBpbnQgdGFwcmlvX2luaXQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNzUtXFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6MDMuOTY5NjcwODYxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDYwMDczNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW5pdGlhbCBUaG91Z2h0cyBvbiBgdGFwcmlvX2luaXRgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byBpdC4gVGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB0dXJuaW5nIG15IGF0dGVudGlvbiB0byB0aGUgYHRhcHJpb19pbml0YCBwYXJ0IG9mIHRoZSBjb2RlLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQuIEkga25vdyB0aGlzIHBhcnRpY3VsYXIgcGllY2UgbGlrZWx5IHNldHMgdGhlIGZvdW5kYXRpb24sIGluaXRpYWxpemVzIHRoZSBjb3JlIGNvbXBvbmVudHMsIGFuZCBwcmVwYXJlcyB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSByZXN0IG9mIHRoZSBleGVjdXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydCBwZXJmZWN0bHkgYmVjYXVzZSBJIHdpbGwgbmVlZCBpdCB0byBpbmZvcm0gZXZlcnl0aGluZyBlbHNlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBiZWdpbnMsIG9yIGF0IGxlYXN0LCB0aGlzIGlzIHRoZSBsYXVuY2hwYWQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MzksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjowNS45MTU2ODE2MDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA3NCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA3NDpcXHRzdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuMjA3NTpcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjIwNzY6XFx0e1xcbjIwNzc6XFx0XFx0c3RydWN0IHRhcHJpb19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4yMDc4OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcXG4yMDc5OlxcdFxcdGludCBpLCB0YztcXG4yMDgwOlxcdFxcbjIwODE6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnEtXFx1MDAzZWN1cnJlbnRfZW50cnlfbG9jayk7XFxuMjA4MjpcXHRcXG4yMDgzOlxcdFxcdGhydGltZXJfc2V0dXAoXFx1MDAyNnEtXFx1MDAzZWFkdmFuY2VfdGltZXIsIGFkdmFuY2Vfc2NoZWQsIENMT0NLX1RBSSwgSFJUSU1FUl9NT0RFX0FCUyk7XFxuMjA4NDpcXHRcXG4yMDg1OlxcdFxcdHEtXFx1MDAzZXJvb3QgPSBzY2g7XFxuMjA4NjpcXHRcXG4yMDg3OlxcdFxcdC8qIFdlIG9ubHkgc3VwcG9ydCBzdGF0aWMgY2xvY2tpZHMuIFVzZSBhbiBpbnZhbGlkIHZhbHVlIGFzIGRlZmF1bHRcXG4yMDg4OlxcdFxcdCAqIGFuZCBnZXQgdGhlIHZhbGlkIG9uZSBvbiB0YXByaW9fY2hhbmdlKCkuXFxuMjA4OTpcXHRcXHQgKi9cXG4yMDkwOlxcdFxcdHEtXFx1MDAzZWNsb2NraWQgPSAtMTtcXG4yMDkxOlxcdFxcdHEtXFx1MDAzZWZsYWdzID0gVEFQUklPX0ZMQUdTX0lOVkFMSUQ7XFxuMjA5MjpcXHRcXG4yMDkzOlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZxLVxcdTAwM2V0YXByaW9fbGlzdCwgXFx1MDAyNnRhcHJpb19saXN0KTtcXG4yMDk0OlxcdFxcbjIwOTU6XFx0XFx0aWYgKHNjaC1cXHUwMDNlcGFyZW50ICE9IFRDX0hfUk9PVCkge1xcbjIwOTY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNhbiBvbmx5IGJlIGF0dGFjaGVkIGFzIHJvb3QgcWRpc2NcXFwiKTtcXG4yMDk3OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4yMDk4OlxcdFxcdH1cXG4yMDk5OlxcdFxcbjIxMDA6XFx0XFx0aWYgKCFuZXRpZl9pc19tdWx0aXF1ZXVlKGRldikpIHtcXG4yMTAxOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJNdWx0aS1xdWV1ZSBkZXZpY2UgaXMgcmVxdWlyZWRcXFwiKTtcXG4yMTAyOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4yMTAzOlxcdFxcdH1cXG4yMTA0OlxcdFxcbjIxMDU6XFx0XFx0cS1cXHUwMDNlcWRpc2NzID0ga3phbGxvY19vYmpzKHEtXFx1MDAzZXFkaXNjc1swXSwgZGV2LVxcdTAwM2VudW1fdHhfcXVldWVzKTtcXG4yMTA2OlxcdFxcdGlmICghcS1cXHUwMDNlcWRpc2NzKVxcbjIxMDc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjEwODpcXHRcXG4yMTA5OlxcdFxcdGlmICghb3B0KVxcbjIxMTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjExMTpcXHRcXG4yMTEyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXYtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbjIxMTM6XFx0XFx0XFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlO1xcbjIxMTQ6XFx0XFx0XFx0c3RydWN0IFFkaXNjICpxZGlzYztcXG4yMTE1OlxcdFxcbjIxMTY6XFx0XFx0XFx0ZGV2X3F1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpO1xcbjIxMTc6XFx0XFx0XFx0cWRpc2MgPSBxZGlzY19jcmVhdGVfZGZsdChkZXZfcXVldWUsXFxuMjExODpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZwZmlmb19xZGlzY19vcHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjA1LjkxNTk3MjM4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDA4MjczNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGB0YXByaW9faW5pdGAgYW5kIGB0YXByaW9fY2hhbmdlYCBSZWxhdGlvbnNoaXAqKlxuXG5BbHJpZ2h0LCBJIHNlZSBhIHBvdGVudGlhbCBkZXBlbmRlbmN5IGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB0YXByaW9faW5pdGAgbWlnaHQgYmUgaW52b2tpbmcgYHRhcHJpb19jaGFuZ2VgIHNvbWV0aW1lIGFmdGVyIGl0cyBpbml0aWFsIGV4ZWN1dGlvbi4gVGhpcyB3YXJyYW50cyBhIHF1aWNrIHZlcmlmaWNhdGlvbi4gVG8gY29uZmlybSB0aGlzIGh1bmNoLCBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgc291cmNlIGNvZGUuIExldCdzIHBpbnBvaW50IHRoZSByZWxldmFudCBzZWN0aW9uLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiBsaW5lcyAyMTIwIHRocm91Z2ggMjE1MC4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgY29udGFpbiB0aGUgc21va2luZyBndW4gb3IsIGNvbnZlcnNlbHksIGNsZWFyIHVwIG15IHN1c3BpY2lvbi4gSSdtIGxvb2tpbmcgZm9yIGEgZGlyZWN0IGZ1bmN0aW9uIGNhbGwgb3IgYSBtb3JlIGluZGlyZWN0IG1lY2hhbmlzbSB0aGF0IHdvdWxkIHRyaWdnZXIgYHRhcHJpb19jaGFuZ2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM2MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6MDguOTI0MjQ5NDc0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFRDX0hfTUlOKGkgKyAxKSksXFxuMjEyMTpcXHRcXHRcXHRcXHRcXHRcXHQgIGV4dGFjayk7XFxuMjEyMjpcXHRcXHRcXHRpZiAoIXFkaXNjKVxcbjIxMjM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjEyNDpcXHRcXG4yMTI1OlxcdFxcdFxcdGlmIChpIFxcdTAwM2MgZGV2LVxcdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpXFxuMjEyNjpcXHRcXHRcXHRcXHRxZGlzY19oYXNoX2FkZChxZGlzYywgZmFsc2UpO1xcbjIxMjc6XFx0XFxuMjEyODpcXHRcXHRcXHRxLVxcdTAwM2VxZGlzY3NbaV0gPSBxZGlzYztcXG4yMTI5OlxcdFxcdH1cXG4yMTMwOlxcdFxcbjIxMzE6XFx0XFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjKyspXFxuMjEzMjpcXHRcXHRcXHRxLVxcdTAwM2VmcFt0Y10gPSBUQ19GUF9FWFBSRVNTO1xcbjIxMzM6XFx0XFxuMjEzNDpcXHRcXHR0YXByaW9fZGV0ZWN0X2Jyb2tlbl9tcXByaW8ocSk7XFxuMjEzNTpcXHRcXG4yMTM2OlxcdFxcdHJldHVybiB0YXByaW9fY2hhbmdlKHNjaCwgb3B0LCBleHRhY2spO1xcbjIxMzc6XFx0fVxcbjIxMzg6XFx0XFxuMjEzOTpcXHRzdGF0aWMgdm9pZCB0YXByaW9fYXR0YWNoKHN0cnVjdCBRZGlzYyAqc2NoKVxcbjIxNDA6XFx0e1xcbjIxNDE6XFx0XFx0c3RydWN0IHRhcHJpb19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4yMTQyOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcXG4yMTQzOlxcdFxcdHVuc2lnbmVkIGludCBudHg7XFxuMjE0NDpcXHRcXG4yMTQ1OlxcdFxcdC8qIEF0dGFjaCB1bmRlcmx5aW5nIHFkaXNjICovXFxuMjE0NjpcXHRcXHRmb3IgKG50eCA9IDA7IG50eCBcXHUwMDNjIGRldi1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgbnR4KyspIHtcXG4yMTQ3OlxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBudHgpO1xcbjIxNDg6XFx0XFx0XFx0c3RydWN0IFFkaXNjICpvbGQsICpkZXZfcXVldWVfcWRpc2M7XFxuMjE0OTpcXHRcXG4yMTUwOlxcdFxcdFxcdGlmIChGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVxcdTAwM2VmbGFncykpIHtcXG4yMTUxOlxcdFxcdFxcdFxcdHN0cnVjdCBRZGlzYyAqcWRpc2MgPSBxLVxcdTAwM2VxZGlzY3NbbnR4XTtcXG4yMTUyOlxcdFxcbjIxNTM6XFx0XFx0XFx0XFx0LyogSW4gb2ZmbG9hZCBtb2RlLCB0aGUgcm9vdCB0YXByaW8gcWRpc2MgaXMgYnlwYXNzZWRcXG4yMTU0OlxcdFxcdFxcdFxcdCAqIGFuZCB0aGUgbmV0ZGV2IFRYIHF1ZXVlcyBzZWUgdGhlIGNoaWxkcmVuIGRpcmVjdGx5XFxuMjE1NTpcXHRcXHRcXHRcXHQgKi9cXG4yMTU2OlxcdFxcdFxcdFxcdHFkaXNjLVxcdTAwM2VmbGFncyB8PSBUQ1FfRl9PTkVUWFFVRVVFIHwgVENRX0ZfTk9QQVJFTlQ7XFxuMjE1NzpcXHRcXHRcXHRcXHRkZXZfcXVldWVfcWRpc2MgPSBxZGlzYztcXG4yMTU4OlxcdFxcdFxcdH0gZWxzZSB7XFxuMjE1OTpcXHRcXHRcXHRcXHQvKiBJbiBzb2Z0d2FyZSBtb2RlLCBhdHRhY2ggdGhlIHJvb3QgdGFwcmlvIHFkaXNjXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjA4LjkyNDQ0NjMzNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDMyNDgzMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVGFwcmlvIFNjaGVkdWxlIFBhdGNoOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBsb29rcyBsaWtlIGEgc29saWQgdmFsaWRhdGlvbiBmaXgsIGFuZCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlscy4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBmdW5jdGlvbiBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGBjeWNsZV90aW1lYCBwYXJhbWV0ZXIuXG5cblByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyBhIGJpdCBsYXguIEl0IHdvdWxkIG9ubHkgY2FsY3VsYXRlIHRoZSBgY3ljbGVgICh0aGUgdG90YWwgc3VtIG9mIGFsbCBzY2hlZHVsZSBlbnRyeSBpbnRlcnZhbHMpICppZiogYG5ldy1cdTAwM2VjeWNsZV90aW1lYCB3YXNuJ3QgYWxyZWFkeSBzZXQuIFRoZW4sIGl0IGNoZWNrZWQgZm9yIGludGVnZXIgb3ZlcmZsb3dzLiBOb3csIHRoZSBwYXRjaCAqYWx3YXlzKiBjYWxjdWxhdGVzIGBjeWNsZWAuIEl0ICphbHdheXMqIGNoZWNrcyBmb3Igb3ZlcmZsb3cuIEFuZCwgY3JpdGljYWxseSwgaXQgYWRkcyBhIG5ldyBjaGVjazogSWYgYSB1c2VyIGhhcyBleHBsaWNpdGx5IHByb3ZpZGVkIGBuZXctXHUwMDNlY3ljbGVfdGltZWAgKmFuZCogdGhpcyBwcm92aWRlZCB2YWx1ZSBpcyAqbGVzcyogdGhhbiB0aGUgY2FsY3VsYXRlZCBgY3ljbGVgLCB0aGUgY29uZmlndXJhdGlvbiBpcyBub3cgcmVqZWN0ZWQgd2l0aCBhbiBgLUVJTlZBTGAgYW5kIGFuIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2UuIFRoaXMgaXMgaW1wb3J0YW50LCBhIGBjeWNsZV90aW1lYCBzaG9ydGVyIHRoYW4gdGhlIHN1bSBvZiBlbnRyeSBpbnRlcnZhbHMgaXMgbG9naWNhbGx5IGludmFsaWQuIFRoaXMgZWZmZWN0aXZlbHkgdGlnaHRlbnMgdXAgaW5wdXQgdmFsaWRhdGlvbi5cblxuRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgdGhlIHBhdGNoIHNlZW1zIHNwb3Qtb24uIEl0J3MgZml4aW5nIGEgcG90ZW50aWFsIGlzc3VlIHdpdGggaG93IGB0YXByaW9gIHNjaGVkdWxlcyBhcmUgY29uZmlndXJlZCB2aWEgbmV0bGluayBieSBlbnN1cmluZyB0aGF0IHRoZSBnaXZlbiBgY3ljbGVfdGltZWAgaXMgdmFsaWQgd2l0aCB0aGUgc3VtIG9mIHRoZSBzY2hlZHVsaW5nIGVudHJpZXMuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYW5kIHNlbnNpYmxlIGFkZGl0aW9uLCBlbnN1cmluZyB0aGF0IGEgdmFsaWQgc2NoZWR1bGUgaXMgYWx3YXlzIHVzZWQuXG5cbk5vdywgY29uc2lkZXJpbmcgcmVhY2hhYmlsaXR5LCB0aGlzIGlzIHRvdGFsbHkgd2l0aGluIHRoZSByZWFsbSBvZiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBgdGFwcmlvYCBxZGlzYyBpcyBlbnRpcmVseSBzb2Z0d2FyZS1iYXNlZC4gV2UgY2FuIGNyZWF0ZSBkdW1teSBpbnRlcmZhY2VzLCB2ZXRoIHBhaXJzLCBvciBldmVuIHRhcCBkZXZpY2VzLCBhbmQgdXNlIGB0Y2AgdG8gYXR0YWNoIGEgYHRhcHJpb2AgcWRpc2MgdG8gdGhlbS4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBzdGFuZGFyZCBMaW51eCBuZXR3b3JraW5nIHRvb2xpbmcgZWFzaWx5IHN1cHBvcnRzLCBhbmQgc3l6a2FsbGVyLCBiYXNlZCBvbiB0aGUgbm90ZXMsIGlzIGEgbmF0dXJhbCBmaXQgaGVyZS4gQW55IHVzZXIgd2l0aCB0aGUgYENBUF9ORVRfQURNSU5gIGNhcGFiaWxpdHkgY2FuIHNldCB0aGlzIHVwLlxuXG5UaGUgcXVlc3Rpb24gb2YgZnV6emluZyBpcyBhIG5hdHVyYWwgZm9sbG93LXVwLiBCYXNlZCBvbiB0aGUgY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBJdCBtb2RpZmllcyBjb3JlIHRyYWZmaWMgY29udHJvbCBzY2hlZHVsaW5nIGxvZ2ljLCBtYWtpbmcgaXQgYSBwb3RlbnRpYWxseSBmcnVpdGZ1bCB0YXJnZXQuIFdlIGFyZSBjaGFuZ2luZyB2YWxpZGF0aW9uIGFuZCBlcnJvciBwYXRocywgYW5kIGl0IGlzIG5vdCBoYXJkd2FyZS1zcGVjaWZpYywgcHVyZWx5IHNvZnR3YXJlLlxuXG5UbyBkZXRlcm1pbmUgaWYgZnV6emluZyBpcyB2aWFibGUsIG15IG5leHQgc3RlcCBpcyBlbnN1cmluZyB0aGUgY29uZmlncyBhcmUgY29ycmVjdCBhbmQgcmVhY2hhYmxlLiBJJ2xsIG5lZWQgYENPTkZJR19ORVRfU0NIX1RBUFJJT2AuIEkgc2VlIGl0IGRlcGVuZHMgb24gYE5FVF9TQ0hFRGAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgTkVUYC4gQWxzbyB0aGVyZSBpcyBhIHNlbGVjdCBvbiBgTkVUX1NDSF9NUVBSSU9fTElCYC4gSSB3b3VsZCBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBkZXBlbmRlbmNpZXMgYW5kIGAjaWZkZWZgIGRpcmVjdGl2ZXMgaW4gdGhlIHNvdXJjZSBmaWxlIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjoxNS4zNTY5MzIwNDFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MzMzMTI4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6MTUuNDQxMjc1NjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc5MDI1MDY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBmb3IgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB3aXRoaW4gYHNjaF90YXByaW8uY2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGZpbGUgcmVsaWVzIG9uIGFueSBzcGVjaWZpYyBgQ09ORklHX2AgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIFRoaXMgaXMgYSBzdGFuZGFyZCBmaXJzdCBzdGVwIHdoZW4gdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhYmlsaXR5IGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiB3aXRoaW4gYSBrZXJuZWwgbW9kdWxlIG9yIGRyaXZlci4gSXQgYWxsb3dzIG1lIHRvIHBpbnBvaW50IHdoaWNoIHBhcnRzIG9mIHRoZSBjb2RlIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHJlbGF0aW9uc2hpcHMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nLCBwb3J0aW5nLCBhbmQgZ2VuZXJhbGx5IHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGhvdyB0aGlzIG1vZHVsZSBmaXRzIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIFRpbWUgdG8gZ2V0IG15IGdyZXAgb24gYW5kIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjoyMC4yMzE1Mjk0MzZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODY5OTA0OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjoyMC4zNzAyMzQyMzRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU4MjUzMjc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqQ2hlY2tpbmcgYG5ldC9zY2hlZC9LY29uZmlnYCBmb3IgYE5FVF9TQ0hfVEFQUklPYCBhbmQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVHJhZmZpYyBBd2FyZSBQcmlvcml0eSBTY2hlZHVsaW5nIChUQVBSSU8pIHdpdGhpbiB0aGUgTGludXggbmV0d29ya2luZyBzdGFjay4gTXkgZmlyc3QgbW92ZSBpcyB0byBkaXZlIGludG8gYG5ldC9zY2hlZC9LY29uZmlnYC4gSSBhbHJlYWR5IGtub3cgdGhlIGdlbmVyYWwgbGF5b3V0IG9mIHRoZSBuZXR3b3JraW5nIEtjb25maWcgZmlsZXMsIHNvIEkgY2FuIHF1aWNrbHkgbmF2aWdhdGUgdG8gdGhhdCBkaXJlY3RvcnkuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgYE5FVF9TQ0hfVEFQUklPYCBvcHRpb24gZGlyZWN0bHkg4oCTIHRoYXQncyB0aGUgcHJpbWFyeSB0YXJnZXQuIEkgbmVlZCB0byBzZWUgaWYgaXQncyBkZWZpbmVkIGFuZCB3aGF0IGl0cyBkZWZhdWx0IHNldHRpbmcgaXMuXG5cbkJleW9uZCB0aGUgY29yZSBvcHRpb24sIEkgKm11c3QqIGltbWVkaWF0ZWx5IGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzLiBJIGhhdmUgdG8ga25vdyAqd2hhdCogb3RoZXIgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGFyZSByZXF1aXJlZCBiZWZvcmUgVEFQUklPIGNhbiBiZSBzZWxlY3RlZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBhbmQgcG90ZW50aWFsIGJ1aWxkIGRlcGVuZGVuY2llcy4gSeKAmWxsIGxvb2sgZm9yIHRoaW5ncyBsaWtlLCBkb2VzIGl0IHJlcXVpcmUgYSBzcGVjaWZpYyBxdWV1aW5nIGRpc2NpcGxpbmUgb3IgYSBjb3JlIHNjaGVkdWxlciBmZWF0dXJlPyBBbnkgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgYXJlIGtleSBoZXJlLiBJJ2xsIGFsc28gYmUgbWluZGZ1bCBvZiBnZW5lcmFsIGBORVRfU0NIRURgIGRlcGVuZGVuY2llcywgYXMgVEFQUklPIGlzIGEgc2NoZWR1bGluZyBkaXNjaXBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAxNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjIzLjk1Mjc3MDc1MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NjAzMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9TQ0hfVEFQUklPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9MTY3PWNvbmZpZyBORVRfU0NIX01RUFJJT19MSUJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTE3MS1cXG5uZXQvc2NoZWQvS2NvbmZpZzoxNzI6Y29uZmlnIE5FVF9TQ0hfVEFQUklPXFxubmV0L3NjaGVkL0tjb25maWctMTczLVxcdHRyaXN0YXRlIFxcXCJUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIFNjaGVkdWxlclxcXCJcXG4tLVxcbm5ldC9zY2hlZC9NYWtlZmlsZT02Mz1vYmotJChDT05GSUdfTkVUX1NDSF9FVEYpXFx0Kz0gc2NoX2V0Zi5vXFxubmV0L3NjaGVkL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19ORVRfU0NIX1RBUFJJTylcXHQrPSBzY2hfdGFwcmlvLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX05FVF9TQ0hfQlBGKVxcdCs9IGJwZl9xZGlzYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjI0LjA4NzM4MzcyOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTYyMjU3ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBUYXByaW8gU2NoZWR1bGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5FVF9TQ0hfVEFQUklPYCBhbmQgYE5FVF9TQ0hFRGAg4oCTIHRob3NlIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIEknbSBpbnRlcmVzdGVkIGluIGhlcmUuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgc28gSSdsbCBjaGVjayBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGZ1bmN0aW9ucyBpcyBnb2luZyB0byBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgc2NoZWR1bGVyIG9wZXJhdGVzIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MTAsIk91dHB1dFRva2VucyI6NTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjoyNy4wNDk2NDQ0MDdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjg5MDEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApP1thLXpBLVpfMC05XSsgW2EtekEtWl8wLTldK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uYy0zNC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjM1OnN0YXRpYyBMSVNUX0hFQUQodGFwcmlvX2xpc3QpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMzYtc3RhdGljIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHRhcHJpb19oYXZlX2Jyb2tlbl9tcXByaW87XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTExND1zdHJ1Y3QgX190Y190YXByaW9fcW9wdF9vZmZsb2FkIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTE5OnN0YXRpYyB2b2lkIHRhcHJpb19jYWxjdWxhdGVfZ2F0ZV9kdXJhdGlvbnMoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyMC1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2My1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE2NDpzdGF0aWMgYm9vbCB0YXByaW9fZW50cnlfYWxsb3dzX3R4KGt0aW1lX3Qgc2tiX2VuZF90aW1lLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTY1LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksIGludCB0YylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTY5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTcwOnN0YXRpYyBrdGltZV90IHNjaGVkX2Jhc2VfdGltZShjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3Ny1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3ODpzdGF0aWMga3RpbWVfdCB0YXByaW9fbW9ub190b19hbnkoY29uc3Qgc3RydWN0IHRhcHJpb19zY2hlZCAqcSwga3RpbWVfdCBtb25vKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTc5LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkwLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTkxOnN0YXRpYyBrdGltZV90IHRhcHJpb19nZXRfdGltZShjb25zdCBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkyLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTk1LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTk2OnN0YXRpYyB2b2lkIHRhcHJpb19mcmVlX3NjaGVkX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5Ny17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwOC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwOTpzdGF0aWMgdm9pZCBzd2l0Y2hfc2NoZWR1bGVzKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTAtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICoqYWRtaW4sXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyMy0vKiBHZXQgaG93IG11Y2ggdGltZSBoYXMgYmVlbiBhbHJlYWR5IGVsYXBzZWQgaW4gdGhlIGN1cnJlbnQgY3ljbGUuICovXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMjQ6c3RhdGljIHMzMiBnZXRfY3ljbGVfdGltZV9lbGFwc2VkKHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCBrdGltZV90IHRpbWUpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjUte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzQtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMzU6c3RhdGljIGt0aW1lX3QgZ2V0X2ludGVydmFsX2VuZF90aW1lKHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM2LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqYWRtaW4sXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1Ni1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1NzpzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU4LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjYxLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjYyOnN0YXRpYyBpbnQgZHVyYXRpb25fdG9fbGVuZ3RoKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHU2NCBkdXJhdGlvbilcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2My17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI3MC0gKi9cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI3MTpzdGF0aWMgdm9pZCB0YXByaW9fdXBkYXRlX3F1ZXVlX21heF9zZHUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI3Mi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MzIzPXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmZpbmRfZW50cnlfdG9fdHJhbnNtaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMzk5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NDAwOnN0YXRpYyBib29sIGlzX3ZhbGlkX2ludGVydmFsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDAxLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDE4LS8qIFRoaXMgcmV0dXJucyB0aGUgdHN0YW1wIHZhbHVlIHNldCBieSBUQ1AgaW4gdGVybXMgb2YgdGhlIHNldCBjbG9jay4gKi9cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjQxOTpzdGF0aWMga3RpbWVfdCBnZXRfdGNwX3RzdGFtcChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDIwLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDY3LSAqL1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NDY4OnN0YXRpYyBsb25nIGdldF9wYWNrZXRfdHh0aW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDY5LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTM5LS8qIERldmljZXMgd2l0aCBmdWxsIG9mZmxvYWQgYXJlIGV4cGVjdGVkIHRvIGhvbm9yIHRoaXMgaW4gaGFyZHdhcmUgKi9cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjU0MDpzdGF0aWMgYm9vbCB0YXByaW9fc2tiX2V4Y2VlZHNfcXVldWVfbWF4X3NkdShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU0MS1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU2MC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjU2MTpzdGF0aWMgaW50IHRhcHJpb19lbnF1ZXVlX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU2Mi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgUWRpc2MgKmNoaWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU4MS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjU4MjpzdGF0aWMgaW50IHRhcHJpb19lbnF1ZXVlX3NlZ21lbnRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU4My1cXHRcXHRcXHRcXHQgICAgc3RydWN0IFFkaXNjICpjaGlsZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNjI2LSAqL1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NjI3OnN0YXRpYyBpbnQgdGFwcmlvX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02MjgtXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTY1Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjEtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo2NjI6c3RhdGljIHZvaWQgdGFwcmlvX3NldF9idWRnZXRzKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02ODItLyogV2hlbiBhbiBza2IgaXMgc2VudCwgaXQgY29uc3VtZXMgZnJvbSB0aGUgYnVkZ2V0IG9mIGFsbCB0cmFmZmljIGNsYXNzZXMgKi9cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjY4MzpzdGF0aWMgaW50IHRhcHJpb191cGRhdGVfYnVkZ2V0cyhzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCBzaXplX3QgbGVuLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNjg0LVxcdFxcdFxcdFxcdCBpbnQgdGNfY29uc3VtZWQsIGludCBudW1fdGMpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTcwNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlX2Zyb21fdHhxKHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgdHhxLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy03NjItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo3NjM6c3RhdGljIHZvaWQgdGFwcmlvX25leHRfdGNfdHhxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB0YywgaW50ICp0eHEpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy03NjQte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz04MzM9c3RhdGljIHN0cnVjdCBza19idWZmICp0YXByaW9fZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtODcyLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6ODczOnN0YXRpYyBib29sIHNob3VsZF9yZXN0YXJ0X2N5Y2xlKGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04NzQtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTg4NC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjg4NTpzdGF0aWMgYm9vbCBzaG91bGRfY2hhbmdlX3NjaGVkdWxlcyhjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICphZG1pbixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTg4Ni1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqb3BlcixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTAyMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdGFwcmlvX3BvbGljeVtUQ0FfVEFQUklPX0FUVFJfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwMzctXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDM4OnN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDM5LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDY5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTA3MDpzdGF0aWMgaW50IHBhcnNlX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKm4sXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDcxLVxcdFxcdFxcdCAgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgaW50IGluZGV4LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDg4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTA4OTpzdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwOTAtXFx0XFx0XFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTI4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTEyOTpzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTMwLVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExODItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMTgzOnN0YXRpYyBpbnQgdGFwcmlvX3BhcnNlX21xcHJpb19vcHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExODQtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjEwLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTIxMTpzdGF0aWMgaW50IHRhcHJpb19nZXRfc3RhcnRfdGltZShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyMTItXFx0XFx0XFx0XFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjQ0LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTI0NTpzdGF0aWMgdm9pZCBzZXR1cF9maXJzdF9lbmRfdGltZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI0Ni1cXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsIGt0aW1lX3QgYmFzZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI3NC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNzU6c3RhdGljIHZvaWQgdGFwcmlvX3N0YXJ0X3NjaGVkKHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI3Ni1cXHRcXHRcXHQgICAgICAga3RpbWVfdCBzdGFydCwgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3KVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjk2LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTI5NzpzdGF0aWMgdm9pZCB0YXByaW9fc2V0X3BpY29zX3Blcl9ieXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjk4LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMzAtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzMxOnN0YXRpYyBpbnQgdGFwcmlvX2Rldl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMzMi1cXHRcXHRcXHQgICAgICAgdm9pZCAqcHRyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzY3LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTM2ODpzdGF0aWMgdm9pZCBzZXR1cF90eHRpbWUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzNjktXFx0XFx0XFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCBrdGltZV90IGJhc2UpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE0MDU9RVhQT1JUX1NZTUJPTF9HUEwodGFwcmlvX29mZmxvYWRfZ2V0KTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MDYtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDA3OnZvaWQgdGFwcmlvX29mZmxvYWRfZnJlZShzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqb2ZmbG9hZClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MDgte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNDE5PUVYUE9SVF9TWU1CT0xfR1BMKHRhcHJpb19vZmZsb2FkX2ZyZWUpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDMyLSAqL1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQzMzpzdGF0aWMgdm9pZCB0YXByaW9fb2ZmbG9hZF9jb25maWdfY2hhbmdlZChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQzNC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0NDItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDQzOnN0YXRpYyB1MzIgdGNfbWFwX3RvX3F1ZXVlX21hc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHRjX21hc2spXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDQ0LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ2MS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE0NjI6c3RhdGljIHZvaWQgdGFwcmlvX3NjaGVkX3RvX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0NjMtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDkwLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQ5MTpzdGF0aWMgdm9pZCB0YXByaW9fZGV0ZWN0X2Jyb2tlbl9tcXByaW8oc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0OTIte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTA3LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTUwODpzdGF0aWMgdm9pZCB0YXByaW9fY2xlYW51cF9icm9rZW5fbXFwcmlvKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTA5LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTUxOC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE1MTk6c3RhdGljIGludCB0YXByaW9fZW5hYmxlX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1MjAtXFx0XFx0XFx0XFx0IHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1ODQtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNTg1OnN0YXRpYyBpbnQgdGFwcmlvX2Rpc2FibGVfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTU4Ni1cXHRcXHRcXHRcXHQgIHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2MjUtICovXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNjI2OnN0YXRpYyBpbnQgdGFwcmlvX3BhcnNlX2Nsb2NraWQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKip0YixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2MjctXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzAzLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTcwNDpzdGF0aWMgaW50IHRhcHJpb19wYXJzZV90Y19lbnRyeShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MDUtXFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTc1MC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3NTE6c3RhdGljIGludCB0YXByaW9fcGFyc2VfdGNfZW50cmllcyhzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3NTItXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xODAwLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTgwMTpzdGF0aWMgaW50IHRhcHJpb19tcXByaW9fY21wKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xODAyLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0ICptcXByaW8pXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MjQtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxODI1OnN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTgyNi1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDE5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjAyMDpzdGF0aWMgdm9pZCB0YXByaW9fcmVzZXQoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDIxLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjAzNC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwMzU6c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDM2LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA3My1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwNzQ6c3RhdGljIGludCB0YXByaW9faW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA3NS1cXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTM4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjEzOTpzdGF0aWMgdm9pZCB0YXByaW9fYXR0YWNoKHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE0MC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIxNzU9c3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnRhcHJpb19xdWV1ZV9nZXQoc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxODYtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMTg3OnN0YXRpYyBpbnQgdGFwcmlvX2dyYWZ0KHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE4OC1cXHRcXHRcXHRzdHJ1Y3QgUWRpc2MgKm5ldywgc3RydWN0IFFkaXNjICoqb2xkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjI5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjIzMDpzdGF0aWMgaW50IGR1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyMzEtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI1OS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIyNjA6c3RhdGljIGludCBkdW1wX3NjaGVkdWxlKHN0cnVjdCBza19idWZmICptc2csXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjYxLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpyb290KVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjk1LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjI5NjpzdGF0aWMgaW50IHRhcHJpb19kdW1wX3RjX2VudHJpZXMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyOTctXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzI4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjMyOTpzdGF0aWMgaW50IHRhcHJpb19wdXRfc3RhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgdmFsLCB1MTYgYXR0cnR5cGUpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzMwLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjMzNy1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIzMzg6c3RhdGljIGludCB0YXByaW9fZHVtcF94c3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBnbmV0X2R1bXAgKmQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzM5LVxcdFxcdFxcdCAgICAgIHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICpvZmZsb2FkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzg1LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjM4NjpzdGF0aWMgaW50IHRhcHJpb19kdW1wX3N0YXRzKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZ25ldF9kdW1wICpkKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM4Ny17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzOTQtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMzk1OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXAoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzk2LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjQ3Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyB0YXByaW9fZmluZChzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0ODUtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNDg2OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDg3LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjbXNnICp0Y20pXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0OTctXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNDk4OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfY2xhc3Nfc3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDk5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBnbmV0X2R1bXAgKmQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1MTctXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTE4OnN0YXRpYyB2b2lkIHRhcHJpb193YWxrKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyICphcmcpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTE5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6MjcuMTYyNTM4NjU1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzODM3NzMwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBzY2hfdGFwcmlvLmNgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIHJldmlld2luZyB0aGUgY29yZSBpbnN0cnVjdGlvbiBhYm91dCBmb2N1c2luZyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoaXMgbWVhbnMgSSdtIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgKm5vdCogaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIHRoZXJlZm9yZSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIG1ha2luZyB0aGVtIGludGVyZXN0aW5nIGZvciB0aGUgYW5hbHlzaXMuXG5cbkknbSBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYHNjaF90YXByaW8uY2AuIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgUWRpc2Mgb3BlcmF0aW9ucyBmdW5jdGlvbnMsIGxpa2UgYHRhcHJpb19pbml0YCwgYHRhcHJpb19jaGFuZ2VgLCBhbmQgYHRhcHJpb19kdW1wYCwgYXJlIHJlZmVyZW5jZWQgYnkgZnVuY3Rpb24gcG9pbnRlcnMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGB0YXByaW9fcWRpc2Nfb3BzYCBzdHJ1Y3QuIEJlY2F1c2UgaWYgdGhleSAqYXJlKiByZWZlcmVuY2VkIGluIHRoYXQgd2F5IChsaWtlIGB0YXByaW9faW5pdGAsIGB0YXByaW9fY2hhbmdlYCwgYHRhcHJpb19kdW1wYCwgYHRhcHJpb19kZXN0cm95YCksIHRoZSBjb21waWxlciAqY2FuJ3QqIGlubGluZSB0aGVtOyB0aGVpciBhZGRyZXNzZXMgYXJlIHRha2VuLCB3aGljaCBpcyBwZXJmZWN0IGZvciBteSBwdXJwb3NlLlxuXG5BbmQsIG9mIGNvdXJzZSwgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBhY3R1YWxseSBiZWVuIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gU28sIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYHRhcHJpb19pbml0YCwgYHRhcHJpb19jaGFuZ2VgLCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYXJlIGluZGVlZCBnb29kIGNhbmRpZGF0ZXMgYXMgZm9jdXMgc3ltYm9scywgZ2l2ZW4gdGhlaXIgcG90ZW50aWFsIHRvIG1lZXQgdGhlIGluaXRpYWwgY3JpdGVyaWEuXG5cbkJlZm9yZSBnb2luZyBmdXJ0aGVyLCBJIHNob3VsZCBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNYWtlIHN1cmUgYE5FVF9TQ0hFRGAgYW5kIGBORVRfU0NIX1RBUFJJT2AgYXJlIGVuYWJsZWQg4oCTIGFsd2F5cyBnb29kIHRvIHZlcmlmeSB0aGVzZSB0aGluZ3MuXG5cbk5vdywgbGV0J3MgcmVjYXAgdGhlIGNvcmUgY2hhbmdlOiB0aGUgcGF0Y2ggdXBkYXRlcyBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCB3aXRoaW4gYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBUaGlzIHVwZGF0ZSBwcmltYXJpbHkgYWRkcmVzc2VzIHRoZSB2YWxpZGF0aW9uIG9mIGBjeWNsZV90aW1lYCBhZ2FpbnN0IHRoZSBzdW0gb2YgdGhlIHNjaGVkdWxlIGVudHJ5IGludGVydmFscywgZW5zdXJpbmcgYm90aCB0aGUgc3VtIGFuZCB0aW1lIGFyZSBjaGVja2VkIGZvciBvdmVyZmxvdy4gVGhpcyBpcyBhIGNydWNpYWwgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxpbmcgbW9kaWZpY2F0aW9uLCBhbmQgaXQncyByZWFjaGFibGUgdmlhIHJ0bmwgbmV0bGluayBzb2NrZXQgY29tbWFuZHMuXG5cblllcCwgdGhhdCdzIGFsbCBjbGVhci4gU2VlbXMgbGlrZSBJJ3ZlIGdvdCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZXMgYW5kIHRoZSBrZXkgYXNwZWN0cy4gVGltZSB0byBjYWxsIGl0IGluIGFuZCBkb2N1bWVudCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyODksIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjMxLjU0NjMxNDk3OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjU0OTY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX1RBUFJJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhcHJpb19jaGFuZ2VcIixcbiAgICBcInRhcHJpb19pbml0XCIsXG4gICAgXCJwYXJzZV90YXByaW9fc2NoZWR1bGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYXJzZV90YXByaW9fc2NoZWR1bGUoKSBpbiBuZXQvc2NoZWQvc2NoX3RhcHJpby5jIHRvIHVuY29uZGl0aW9uYWxseSB2YWxpZGF0ZSB0aGUgY3ljbGUgdGltZSBhZ2FpbnN0IHRoZSBzdW0gb2Ygc2NoZWR1bGUgZW50cnkgaW50ZXJ2YWxzIGFuZCBjaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdy4gVGhpcyBhZmZlY3RzIHNjaGVkdWxlIHBhcmFtZXRlciBwYXJzaW5nIHdoZW4gY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIGEgdGFwcmlvIHFkaXNjIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgaW4gc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGFwcmlvX2NoYW5nZVwiLFxuICAgIFwidGFwcmlvX2luaXRcIixcbiAgICBcInBhcnNlX3RhcHJpb19zY2hlZHVsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpIGluIG5ldC9zY2hlZC9zY2hfdGFwcmlvLmMgdG8gdW5jb25kaXRpb25hbGx5IHZhbGlkYXRlIHRoZSBjeWNsZSB0aW1lIGFnYWluc3QgdGhlIHN1bSBvZiBzY2hlZHVsZSBlbnRyeSBpbnRlcnZhbHMgYW5kIGNoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93LiBUaGlzIGFmZmVjdHMgc2NoZWR1bGUgcGFyYW1ldGVyIHBhcnNpbmcgd2hlbiBjcmVhdGluZyBvciBtb2RpZnlpbmcgYSB0YXByaW8gcWRpc2MgdmlhIG5ldGxpbmssIHdoaWNoIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzb2Z0d2FyZS1lbXVsYXRlZCBuZXR3b3JraW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjozMS42NzI4NzE5ODZaIiwiU2VxIjozOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwOTUzNDMzMDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6MzEuNjczMjk3MjA2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDA5NTMwMDMzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlucHV0IHZhbGlkYXRpb24gaW4gYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYCBpbiBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AuIFNwZWNpZmljYWxseSwgaXQgYWx3YXlzIGNhbGN1bGF0ZXMgdGhlIHN1bSBvZiBlbnRyeSBpbnRlcnZhbHMgKGBjeWNsZWApIGFuZCB2YWxpZGF0ZXMgdGhhdCBgY3ljbGUgXFx1MDAzYz0gSU5UX01BWGAgYW5kIHRoYXQgdXNlci1zdXBwbGllZCBgbmV3LVxcdTAwM2VjeWNsZV90aW1lYCBpcyBub3QgbGVzcyB0aGFuIGBjeWNsZWAuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGN5Y2xlID0gMGApIGFuZCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoYG5ld19hZG1pbmAgdmlhIGBremFsbG9jX29iaigpYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIGNoYW5nZSwgYW5kIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDZiNzkyN2Q5OGY2YjM0M2Y1YjExMzQzNjNkMTIzZWZiMWFjMjVmZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIzOjA1OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbmluZGV4IDM5YWM1Yjk3YWEzYWYuLjEzN2NlNmY3YTQ3NGEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG5AQCAtMTEzMCw2ICsxMTMwLDggQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuK1x0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcbitcdGt0aW1lX3QgY3ljbGUgPSAwO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0pIHtcbkBAIC0xMTUyLDE5ICsxMTU0LDIwIEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKSB7XG4tXHRcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4tXHRcdGt0aW1lX3QgY3ljbGUgPSAwO1xuLVxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZuZXctXHUwMDNlZW50cmllcywgbGlzdClcbi1cdFx0XHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXHUwMDNlaW50ZXJ2YWwpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2bmV3LVx1MDAzZWVudHJpZXMsIGxpc3QpXG4rXHRcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cdTAwM2VpbnRlcnZhbCk7XG4gXG4tXHRcdGlmIChjeWNsZSBcdTAwM2MgMCB8fCBjeWNsZSBcdTAwM2UgSU5UX01BWCkge1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCInY3ljbGVfdGltZScgaXMgdG9vIGJpZ1wiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuK1x0aWYgKGN5Y2xlIFx1MDAzYyAwIHx8IGN5Y2xlIFx1MDAzZSBJTlRfTUFYKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCInY3ljbGVfdGltZScgaXMgdG9vIGJpZ1wiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4rXHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKVxuIFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZSA9IGN5Y2xlO1xuK1xuK1x0aWYgKG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyBjeWNsZSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiJ2N5Y2xlX3RpbWUnIGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFsc1wiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIG5ldy1cdTAwM2VudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjMxLjY3MzI5ODA2NloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjc4MDE3NTc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFRBUFJJTyBTY2hlZHVsZXIgQ29kZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2hhbmdlLCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSBkaWZmLiBJJ2xsIGZvY3VzIGluIG9uIHRoZSBmaWxlIHBhdGgsIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCwgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBpcy5cblxuTm93LCBpbnN0ZWFkIG9mIGp1c3Qgc3RhcmluZyBhdCB0aGUgZGlmZiBibGluZGx5LCBJIG5lZWQgY29udGV4dC4gTGluZSAxMTMwIGZlZWxzIGxpa2UgYSByZWFzb25hYmxlIHBvaW50IHRvIHN0YXJ0LiBJJ2xsIHVzZSBgcmVhZC1maWxlYCAob3IgYGdyZXBwZXJgIGlmIEkgbmVlZCBzb21ldGhpbmcgYSBiaXQgbW9yZSB0YXJnZXRlZCkgdG8gcHVsbCB1cCB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUgYW5kIHJlYWQgYXJvdW5kIGl0LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1tZWRpYXRlIGltcGFjdCBvZiB0aGUgZGlmZiBhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLiBUaGVuIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IHNlZSBpZiB0aGUgY2hhbmdlcyBtYWtlIHNlbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDcxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjo0NC40NTM0NzczNTJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEyMCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEyMDpcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZlbnRyeS1cXHUwMDNlbGlzdCwgXFx1MDAyNnNjaGVkLVxcdTAwM2VlbnRyaWVzKTtcXG4xMTIxOlxcdFxcdFxcdGkrKztcXG4xMTIyOlxcdFxcdH1cXG4xMTIzOlxcdFxcbjExMjQ6XFx0XFx0c2NoZWQtXFx1MDAzZW51bV9lbnRyaWVzID0gaTtcXG4xMTI1OlxcdFxcbjExMjY6XFx0XFx0cmV0dXJuIGk7XFxuMTEyNzpcXHR9XFxuMTEyODpcXHRcXG4xMTI5OlxcdHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4xMTMwOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXFxuMTEzMTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjExMzI6XFx0e1xcbjExMzM6XFx0XFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcXG4xMTM0OlxcdFxcdGt0aW1lX3QgY3ljbGUgPSAwO1xcbjExMzU6XFx0XFx0aW50IGVyciA9IDA7XFxuMTEzNjpcXHRcXG4xMTM3OlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xcbjExMzg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQWRkaW5nIGEgc2luZ2xlIGVudHJ5IGlzIG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4xMTM5OlxcdFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuMTE0MDpcXHRcXHR9XFxuMTE0MTpcXHRcXG4xMTQyOlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQkFTRV9USU1FXSlcXG4xMTQzOlxcdFxcdFxcdG5ldy1cXHUwMDNlYmFzZV90aW1lID0gbmxhX2dldF9zNjQodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0JBU0VfVElNRV0pO1xcbjExNDQ6XFx0XFxuMTE0NTpcXHRcXHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVfRVhURU5TSU9OXSlcXG4xMTQ2OlxcdFxcdFxcdG5ldy1cXHUwMDNlY3ljbGVfdGltZV9leHRlbnNpb24gPSBubGFfZ2V0X3M2NCh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV9FWFRFTlNJT05dKTtcXG4xMTQ3OlxcdFxcbjExNDg6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FXSlcXG4xMTQ5OlxcdFxcdFxcdG5ldy1cXHUwMDNlY3ljbGVfdGltZSA9IG5sYV9nZXRfczY0KHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FXSk7XFxuMTE1MDpcXHRcXG4xMTUxOlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfRU5UUllfTElTVF0pXFxuMTE1MjpcXHRcXHRcXHRlcnIgPSBwYXJzZV9zY2hlZF9saXN0KHEsIHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9FTlRSWV9MSVNUXSxcXG4xMTUzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBuZXcsIGV4dGFjayk7XFxuMTE1NDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMTU1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTE1NjpcXHRcXG4xMTU3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFxcdTAwMjZuZXctXFx1MDAzZWVudHJpZXMsIGxpc3QpXFxuMTE1ODpcXHRcXHRcXHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXFx1MDAzZWludGVydmFsKTtcXG4xMTU5OlxcdFxcbjExNjA6XFx0XFx0aWYgKGN5Y2xlIFxcdTAwM2MgMCB8fCBjeWNsZSBcXHUwMDNlIElOVF9NQVgpIHtcXG4xMTYxOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIidjeWNsZV90aW1lJyBpcyB0b28gYmlnXFxcIik7XFxuMTE2MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTYzOlxcdFxcdH1cXG4xMTY0OlxcdFxcbjExNjU6XFx0XFx0aWYgKCFuZXctXFx1MDAzZWN5Y2xlX3RpbWUpXFxuMTE2NjpcXHRcXHRcXHRuZXctXFx1MDAzZWN5Y2xlX3RpbWUgPSBjeWNsZTtcXG4xMTY3OlxcdFxcbjExNjg6XFx0XFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIGN5Y2xlKSB7XFxuMTE2OTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCInY3ljbGVfdGltZScgaXMgbGVzcyB0aGFuIHRoZSBzdW0gb2YgZW50cnkgaW50ZXJ2YWxzXFxcIik7XFxuMTE3MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTcxOlxcdFxcdH1cXG4xMTcyOlxcdFxcbjExNzM6XFx0XFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIG5ldy1cXHUwMDNlbnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7XFxuMTE3NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCInY3ljbGVfdGltZScgaXMgdG9vIHNtYWxsXFxcIik7XFxuMTE3NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTc2OlxcdFxcdH1cXG4xMTc3OlxcdFxcbjExNzg6XFx0XFx0dGFwcmlvX2NhbGN1bGF0ZV9nYXRlX2R1cmF0aW9ucyhxLCBuZXcpO1xcbjExNzk6XFx0XFxuMTE4MDpcXHRcXHRyZXR1cm4gMDtcXG4xMTgxOlxcdH1cXG4xMTgyOlxcdFxcbjExODM6XFx0c3RhdGljIGludCB0YXByaW9fcGFyc2VfbXFwcmlvX29wdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbjExODQ6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0LFxcbjExODU6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbjExODY6XFx0XFx0XFx0XFx0XFx0ICAgdTMyIHRhcHJpb19mbGFncylcXG4xMTg3OlxcdHtcXG4xMTg4OlxcdFxcdGJvb2wgYWxsb3dfb3ZlcmxhcHBpbmdfdHhxcyA9IFRYVElNRV9BU1NJU1RfSVNfRU5BQkxFRCh0YXByaW9fZmxhZ3MpO1xcbjExODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjQ0LjQ1MzY2ODMyMloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTAyNjgzODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCdzIHRoZSBjb3JlIGlzc3VlIGl0J3MgYWRkcmVzc2luZz8gTGV0J3MgZGlzc2VjdCB0aGUgY29kZSBjaGFuZ2VzIHRvIGdyYXNwIHRoZSByYXRpb25hbGUuXG5cblNvLCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgdGhpcyBjaGVjazogaWYgYG5ldy1cdTAwM2VjeWNsZV90aW1lYCB3YXMgemVybywgbWVhbmluZyBub3QgZXhwbGljaXRseSBzZXQsIHRoZW4gaXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IG9mIGVudHJpZXMsIHN1bSB0aGVpciBpbnRlcnZhbHMgKGBjeWNsZWApLCBhbmQgdGhlbiB2YWxpZGF0ZSB0aGF0IHRoaXMgY2FsY3VsYXRlZCBgY3ljbGVgIHZhbHVlIGlzIHdpdGhpbiBhbiBhY2NlcHRhYmxlIHJhbmdlIChub3QgbmVnYXRpdmUgYW5kIG5vdCBleGNlZWRpbmcgYElOVF9NQVhgKS4gSWYgaXQncyB2YWxpZCwgdGhlIGBuZXctXHUwMDNlY3ljbGVfdGltZWAgaXMgdXBkYXRlZCB3aXRoIHRoaXMgY2FsY3VsYXRlZCBgY3ljbGVgLlxuXG5Ob3csIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzIG1vcmUgc3RyZWFtbGluZWQuIFRoZSBjcml0aWNhbCBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIHVuY29uZGl0aW9uYWwgc3VtbWF0aW9uIG9mIGludGVydmFscywgcmVnYXJkbGVzcyBvZiB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgLiBUaGVuLCB0aGUgc2FtZSBib3VuZGFyeSBjaGVjayBpcyBwZXJmb3JtZWQ6IGlzIGBjeWNsZWAgbmVnYXRpdmUgb3IgdG9vIGxhcmdlPyBJZiBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgICp3YXNuJ3QqIHNwZWNpZmllZCAobWVhbmluZyBpdCdzIHplcm8pLCBpdCdzIHNldCB0byB0aGUgYGN5Y2xlYCB2YWx1ZSwgYXMgYmVmb3JlLiBIb3dldmVyLCB0aGUgYWRkZWQgY2hlY2sgaXMgaWYgYG5ldy1cdTAwM2VjeWNsZV90aW1lYCAqaXMqIHNwZWNpZmllZCwgYnV0IGlzIHNtYWxsZXIgdGhhbiBgY3ljbGVgLCBpdCByZXR1cm5zIGFuIGVycm9yLiBUaGlzIGlzIGEgY3J1Y2lhbCB2YWxpZGF0aW9uIHN0ZXAgSSBtaXNzZWQgZWFybGllcjogd2UncmUgbWFraW5nIHN1cmUgdGhlIHByb3ZpZGVkIGBjeWNsZV90aW1lYCAoaWYgYW55KSBpcyAqYXQgbGVhc3QqIGFzIGxhcmdlIGFzIHRoZSBzdW0gb2YgYWxsIHRoZSBpbmRpdmlkdWFsIGludGVydmFscy4gVGhpcyBtYWtlcyBzZW5zZSBmcm9tIGEgc2NoZWR1bGluZyBpbnRlZ3JpdHkgcGVyc3BlY3RpdmUuXG5cbk15IG5leHQgc3RlcCB3b3VsZCBiZSB0byB0cmFjZSB0aGUgYWxsb2NhdGlvbiBvZiBgbmV3YC4gV2hlcmUgZG9lcyB0aGlzIGBuZXdgIHN0cnVjdCBvcmlnaW5hdGU/IElzIGl0IHVzZXItcHJvdmlkZWQ/IEFsbG9jYXRlZCBpbiBrZXJuZWwgc3BhY2U/IFVuZGVyc3RhbmRpbmcgdGhlIHNvdXJjZSBhbmQgbGlmZSBjeWNsZSBvZiBgbmV3YCBpcyB2aXRhbCB0byBmdWxseSBhcHByZWNpYXRlIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgYW5kIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGBuZXdgIGlzIGNvbnN0cnVjdGVkLCBwb3B1bGF0ZWQsIGFuZCB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTA5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6NDcuOTU2MzU0MzkxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2ODkzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFyc2VfdGFwcmlvX3NjaGVkdWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMDg5PXN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfbGlzdChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpsaXN0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTI4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTEyOTpzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTMwLVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE4MjU9c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MTktXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxOTIwOlxcdGVyciA9IHBhcnNlX3RhcHJpb19zY2hlZHVsZShxLCB0YiwgbmV3X2FkbWluLCBleHRhY2spO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkyMS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6NDguMDY4MDQ4OTk5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNDg2MDYyMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBBbGxvY2F0aW9uIGFuZCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gemVyb2luZyBpbiBvbiBhIGNvdXBsZSBvZiBjcnVjaWFsIHBvaW50cyByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd2l0aGluIHRoZSBjb2RlLiBGaXJzdCwgSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgaW1wbGljYXRpb25zIG9mIGB0YXByaW9fY2hhbmdlYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgd2hlcmUgc29tZSBrZXkgc3RhdGUgY2hhbmdlcyBvciBjb25maWd1cmF0aW9ucyB0YWtlIHBsYWNlLCBhbmQgSSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIG1hbmFnZWQgc2FmZWx5LCBlc3BlY2lhbGx5IGFzIHRoZXkgcmVsYXRlIHRvIHJlc291cmNlIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uLiBBbnkgc3VidGxlIGJ1ZyBoZXJlIGNvdWxkIGhhdmUgY2FzY2FkaW5nIGVmZmVjdHMgbGF0ZXIsIHNvIGEgZGVlcCBkaXZlIGlzIHdhcnJhbnRlZC4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgdGhlIGFsbG9jYXRpb24gb2YgYG5ld19hZG1pbmAgYW5kIHdoZXRoZXIgaXQgdXNlcyBga3phbGxvY2Agb3Igc29tZSBvdGhlciBhbGxvY2F0aW9uIG1ldGhvZC4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgYSBjYXJlZnVsIGV4YW1pbmF0aW9uIGlzIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg0NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjUxLjIxNjY1ODQxNFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzIxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTAwOlxcdFxcdFxcdGdvdG8gZnJlZV9zY2hlZDtcXG4xOTAxOlxcdFxcdH1cXG4xOTAyOlxcdFxcbjE5MDM6XFx0XFx0aWYgKG1xcHJpbykge1xcbjE5MDQ6XFx0XFx0XFx0ZXJyID0gbmV0ZGV2X3NldF9udW1fdGMoZGV2LCBtcXByaW8tXFx1MDAzZW51bV90Yyk7XFxuMTkwNTpcXHRcXHRcXHRpZiAoZXJyKVxcbjE5MDY6XFx0XFx0XFx0XFx0Z290byBmcmVlX3NjaGVkO1xcbjE5MDc6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1xcHJpby1cXHUwMDNlbnVtX3RjOyBpKyspIHtcXG4xOTA4OlxcdFxcdFxcdFxcdG5ldGRldl9zZXRfdGNfcXVldWUoZGV2LCBpLFxcbjE5MDk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG1xcHJpby1cXHUwMDNlY291bnRbaV0sXFxuMTkxMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgbXFwcmlvLVxcdTAwM2VvZmZzZXRbaV0pO1xcbjE5MTE6XFx0XFx0XFx0XFx0cS1cXHUwMDNlY3VyX3R4cVtpXSA9IG1xcHJpby1cXHUwMDNlb2Zmc2V0W2ldO1xcbjE5MTI6XFx0XFx0XFx0fVxcbjE5MTM6XFx0XFxuMTkxNDpcXHRcXHRcXHQvKiBBbHdheXMgdXNlIHN1cHBsaWVkIHByaW9yaXR5IG1hcHBpbmdzICovXFxuMTkxNTpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IFRDX0JJVE1BU0s7IGkrKylcXG4xOTE2OlxcdFxcdFxcdFxcdG5ldGRldl9zZXRfcHJpb190Y19tYXAoZGV2LCBpLFxcbjE5MTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIG1xcHJpby1cXHUwMDNlcHJpb190Y19tYXBbaV0pO1xcbjE5MTg6XFx0XFx0fVxcbjE5MTk6XFx0XFxuMTkyMDpcXHRcXHRlcnIgPSBwYXJzZV90YXByaW9fc2NoZWR1bGUocSwgdGIsIG5ld19hZG1pbiwgZXh0YWNrKTtcXG4xOTIxOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjE5MjI6XFx0XFx0XFx0Z290byBmcmVlX3NjaGVkO1xcbjE5MjM6XFx0XFxuMTkyNDpcXHRcXHRpZiAobmV3X2FkbWluLVxcdTAwM2VudW1fZW50cmllcyA9PSAwKSB7XFxuMTkyNTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3Qgb25lIGVudHJ5IGluIHRoZSBzY2hlZHVsZVxcXCIpO1xcbjE5MjY6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xOTI3OlxcdFxcdFxcdGdvdG8gZnJlZV9zY2hlZDtcXG4xOTI4OlxcdFxcdH1cXG4xOTI5OlxcdFxcbjE5MzA6XFx0XFx0ZXJyID0gdGFwcmlvX3BhcnNlX2Nsb2NraWQoc2NoLCB0YiwgZXh0YWNrKTtcXG4xOTMxOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjE5MzI6XFx0XFx0XFx0Z290byBmcmVlX3NjaGVkO1xcbjE5MzM6XFx0XFxuMTkzNDpcXHRcXHR0YXByaW9fdXBkYXRlX3F1ZXVlX21heF9zZHUocSwgbmV3X2FkbWluLCBzdGFiKTtcXG4xOTM1OlxcdFxcbjE5MzY6XFx0XFx0aWYgKEZVTExfT0ZGTE9BRF9JU19FTkFCTEVEKHEtXFx1MDAzZWZsYWdzKSlcXG4xOTM3OlxcdFxcdFxcdGVyciA9IHRhcHJpb19lbmFibGVfb2ZmbG9hZChkZXYsIHEsIG5ld19hZG1pbiwgZXh0YWNrKTtcXG4xOTM4OlxcdFxcdGVsc2VcXG4xOTM5OlxcdFxcdFxcdGVyciA9IHRhcHJpb19kaXNhYmxlX29mZmxvYWQoZGV2LCBxLCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjo1MS4yMTY5MzM2NjRaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE4MTY5NjYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgYHRhcHJpb19jaGFuZ2VgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHRhcHJpb19jaGFuZ2VgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcmVsYXRlZCB0byBgbmV3X2FkbWluYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyBzb21lIHNwZWNpZmljIHBhdHRlcm5zIGhlcmUuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoZXJlIGV4YWN0bHkgdGhpcyBgbmV3X2FkbWluYCBpcyBiZWluZyBhbGxvY2F0ZWQg4oCTIGlzIGl0IG9uIHRoZSBzdGFjaywgdGhlIGhlYXAsIG9yIHNvbWUgb3RoZXIgbWFuYWdlZCBtZW1vcnkgcmVnaW9uPyBUaGUgYWxsb2NhdGlvbiBtZXRob2Qgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGNsdWVzIGFib3V0IGl0cyBpbnRlbmRlZCBsaWZlY3ljbGUgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbmN5LCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBpZiBJJ20gbm90IGNhcmVmdWwuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBoYXZpbmcgdG8gdHJhY2UgcG9pbnRlcnMgb3IgYW5hbHl6ZSBhbGxvY2F0aW9uIHNpemVzIGRlcGVuZGluZyBvbiB3aGF0IEkgZmluZC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHRyYWNrIGRvd24gdGhhdCBhbGxvY2F0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzA0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjo1NS4zOTg2MzQ0NTFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg3MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg3MDpcXHRcXHR9XFxuMTg3MTpcXHRcXG4xODcyOlxcdFxcdC8qIE5lZWRlZCBmb3IgbGVuZ3RoX3RvX2R1cmF0aW9uKCkgZHVyaW5nIG5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcgKi9cXG4xODczOlxcdFxcdHRhcHJpb19zZXRfcGljb3NfcGVyX2J5dGUoZGV2LCBxLCBleHRhY2spO1xcbjE4NzQ6XFx0XFxuMTg3NTpcXHRcXHRlcnIgPSB0YXByaW9fcGFyc2VfbXFwcmlvX29wdChkZXYsIG1xcHJpbywgZXh0YWNrLCBxLVxcdTAwM2VmbGFncyk7XFxuMTg3NjpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xODc3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTg3ODpcXHRcXG4xODc5OlxcdFxcdGVyciA9IHRhcHJpb19wYXJzZV90Y19lbnRyaWVzKHNjaCwgb3B0LCBleHRhY2spO1xcbjE4ODA6XFx0XFx0aWYgKGVycilcXG4xODgxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTg4MjpcXHRcXG4xODgzOlxcdFxcdG5ld19hZG1pbiA9IGt6YWxsb2Nfb2JqKCpuZXdfYWRtaW4pO1xcbjE4ODQ6XFx0XFx0aWYgKCFuZXdfYWRtaW4pIHtcXG4xODg1OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBhIG5ldyBzY2hlZHVsZVxcXCIpO1xcbjE4ODY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTg4NzpcXHRcXHR9XFxuMTg4ODpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmV3X2FkbWluLVxcdTAwM2VlbnRyaWVzKTtcXG4xODg5OlxcdFxcbjE4OTA6XFx0XFx0b3BlciA9IHJ0bmxfZGVyZWZlcmVuY2UocS1cXHUwMDNlb3Blcl9zY2hlZCk7XFxuMTg5MTpcXHRcXHRhZG1pbiA9IHJ0bmxfZGVyZWZlcmVuY2UocS1cXHUwMDNlYWRtaW5fc2NoZWQpO1xcbjE4OTI6XFx0XFxuMTg5MzpcXHRcXHQvKiBubyBjaGFuZ2VzIC0gbm8gbmV3IG1xcHJpbyBzZXR0aW5ncyAqL1xcbjE4OTQ6XFx0XFx0aWYgKCF0YXByaW9fbXFwcmlvX2NtcChkZXYsIG1xcHJpbykpXFxuMTg5NTpcXHRcXHRcXHRtcXByaW8gPSBOVUxMO1xcbjE4OTY6XFx0XFxuMTg5NzpcXHRcXHRpZiAobXFwcmlvIFxcdTAwMjZcXHUwMDI2IChvcGVyIHx8IGFkbWluKSkge1xcbjE4OTg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ2hhbmdpbmcgdGhlIHRyYWZmaWMgbWFwcGluZyBvZiBhIHJ1bm5pbmcgc2NoZWR1bGUgaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbjE4OTk6XFx0XFx0XFx0ZXJyID0gLUVOT1RTVVBQO1xcbjE5MDA6XFx0XFx0XFx0Z290byBmcmVlX3NjaGVkO1xcbjE5MDE6XFx0XFx0fVxcbjE5MDI6XFx0XFxuMTkwMzpcXHRcXHRpZiAobXFwcmlvKSB7XFxuMTkwNDpcXHRcXHRcXHRlcnIgPSBuZXRkZXZfc2V0X251bV90YyhkZXYsIG1xcHJpby1cXHUwMDNlbnVtX3RjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6NTUuMzk4OTEyOTUxWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5OTgwODI3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBDYWxsIFNpdGVzKipcblxuT2theSwgc28gSSd2ZSBqdXN0IGFsbG9jYXRlZCBgbmV3X2FkbWluYCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgdGhhdCdzIGdvb2QuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIG5ldyBhbGxvY2F0aW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhpcyBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB3aGVyZSAqZWxzZSogaXMgdGhpcyBmdW5jdGlvbiBiZWluZyB1c2VkPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsIGdyYXBoIGlzIGNydWNpYWwuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgZnVuY3Rpb24sIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLCBpcyBpbnZva2VkLiBUaGlzIHdpbGwgaGVscCBtZSBhc3Nlc3MgcG90ZW50aWFsIGRlcGVuZGVuY2llcywgc2lkZSBlZmZlY3RzLCBhbmQgZ2VuZXJhbGx5LCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb24gaG93IHRoaXMgYWxsb2NhdGlvbiBmaXRzIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRpbWUgdG8gdHJhY2sgZG93biB0aG9zZSBjYWxsIHNpdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDg1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjo1OC4zOTY5OTg0ODhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NzUxODkwMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFyc2VfdGFwcmlvX3NjaGVkdWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTA4OT1zdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEyOC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMjk6c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEzMC1cXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODI1PXN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTE5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTkyMDpcXHRlcnIgPSBwYXJzZV90YXByaW9fc2NoZWR1bGUocSwgdGIsIG5ld19hZG1pbiwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MjEtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA3OjAyLjE3MjE5MjI5MloiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDQ1NDA3NzUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVEFQUklPIFNjaGVkdWxlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBmb2N1cyBoZXJlIGlzIGVuc3VyaW5nIHRoaXMgY2hhbmdlIGlzIHNhZmUsIGVzcGVjaWFsbHkgZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIEZpcnN0LCBJJ2xsIHdhbGsgdGhyb3VnaCB0aGUgY29kZSBjaGFuZ2VzIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLiBJdCBzZWVtcyB3ZSBhcmUgbW9kaWZ5aW5nIHRoZSBmdW5jdGlvbiBieTpcblxuKiAgIEluaXRpYWxpemluZyBgZW50cnlgIGFuZCBgY3ljbGVgIGF0IHRoZSB0b3Agb2YgdGhlIGZ1bmN0aW9uLlxuKiAgIE1vdmluZyB0aGUgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGxvb3AsIHdoaWNoIGNhbGN1bGF0ZXMgdGhlIHRvdGFsIGBjeWNsZWAgdGltZSwgb3V0c2lkZSBvZiB0aGUgYCFuZXctXHUwMDNlY3ljbGVfdGltZWAgY29uZGl0aW9uYWwuIFRoaXMgcmVjYWxjdWxhdGVzIHRoZSBjeWNsZSB0aW1lIGV2ZW4gaWYgdGhlIGN5Y2xlIHRpbWUgaXMgYWxyZWFkeSBzZXQuXG4qICAgQWRkaW5nIGEgY2hlY2sgdG8gbWFrZSBzdXJlIGBjeWNsZWAgaXMgd2l0aGluIHZhbGlkIGludGVnZXIgYm91bmRzLlxuKiAgIENvbmRpdGlvbmFsbHkgc2V0dGluZyBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgIGlmIGl0J3MgY3VycmVudGx5IHVuc2V0LlxuKiAgIENydWNpYWxseSwgYWRkaW5nIGEgY2hlY2sgdG8gZW5zdXJlIGBuZXctXHUwMDNlY3ljbGVfdGltZWAgaXMgKm5vdCogbGVzcyB0aGFuIHRoZSBjYWxjdWxhdGVkIGBjeWNsZWAsIHJldHVybmluZyBhbiBlcnJvciBpZiBpdCBpcy5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFwcGxpY2FiaWxpdHkgaGVyZS4gSSdtIGdvaW5nIHRvIG1ldGhvZGljYWxseSBnbyB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgcmlzayBhcmVhczpcblxuMS4gICoqVXNlci1zcGFjZSBkYXRhIGV4cG9zdXJlOioqIFRoZSBwYXRjaCBkb2Vzbid0IGFkZCBvciBtb2RpZnkgYW55IGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXItc3BhY2UuIFNvLCBubyByaXNrIHRoZXJlLlxuMi4gICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZSBkZXBlbmRlbmNlIGluIGxvZ2ljOioqIGBjeWNsZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwLiBgZW50cnktXHUwMDNlaW50ZXJ2YWxgIHNob3VsZCBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdXJpbmcgc2NoZWR1bGUgcGFyc2luZywgYW5kIGBuZXdgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAuIE5vIHJpc2tzIGhlcmUuXG4zLiAgKipVbmluaXRpYWxpemVkIGRhdGEgaW4gY29tcGxleCBzdHJ1Y3R1cmVzOioqIEFnYWluLCBgbmV3YCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCBhbmQgdGhlIGxvb3AgY2FsY3VsYXRlcyB0aGUgYGN5Y2xlYCB2YWx1ZSwgYXZvaWRpbmcgYW55IHJpc2tzLlxuNC4gICoqQm91bmRzIGNoZWNrcyBhbmQgYnVmZmVyIG92ZXJmbG93czoqKiBUaGlzIGNoYW5nZSBwcmltYXJpbHkgYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrOyB0aGVyZSdzIG5vIGFkZGl0aW9uIG9mIG5ldyBmdW5jdGlvbmFsaXR5IHRoYXQgY291bGQgaW50cm9kdWNlIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuIFRoZSBhZGRlZCBjaGVjayB2YWxpZGF0ZXMgdGhhdCBgbmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNlPSBjeWNsZWAuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIHRoZXJlJ3Mgbm8gYXBwYXJlbnQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIG9yIHVzZWQuIGBjeWNsZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIGBuZXdgIGlzIGluaXRpYWxpemVkIHZpYSBga3phbGxvY19vYmpgLiBUaGlzIHBhdGNoIGlzIHB1cmVseSBhbiBpbnB1dCB2YWxpZGF0aW9uIGFuZCBsb2dpYyBhZGp1c3RtZW50IGZvciB0aGUgVEFQUklPIHFkaXNjIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBuZXRsaW5rLlxuXG5UaHVzLCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBJJ2xsIGJlIHN1cmUgdG8gZG9jdW1lbnQgdGhpcyBpbiB0aGUgYHNldC1yZXN1bHRzYCBleHBsYW5hdGlvbiwgY2xlYXJseSBvdXRsaW5pbmcgdGhlc2UgcmVhc29ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk3NSwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDc6MTIuNjI2MjcyNTQ5WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbnB1dCB2YWxpZGF0aW9uIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAgaW4gYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFsd2F5cyBjYWxjdWxhdGVzIHRoZSBzdW0gb2YgZW50cnkgaW50ZXJ2YWxzIChgY3ljbGVgKSBhbmQgdmFsaWRhdGVzIHRoYXQgYGN5Y2xlIFxcdTAwM2M9IElOVF9NQVhgIGFuZCB0aGF0IHVzZXItc3VwcGxpZWQgYG5ldy1cXHUwMDNlY3ljbGVfdGltZWAgaXMgbm90IGxlc3MgdGhhbiBgY3ljbGVgLlxcblxcbkFsbCBsb2NhbCB2YXJpYWJsZXMgKGBjeWNsZSA9IDBgKSBhbmQgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGBuZXdfYWRtaW5gIHZpYSBga3phbGxvY19vYmooKWApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyBLTVNBTi1zcGVjaWZpYyByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIGFuZCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlucHV0IHZhbGlkYXRpb24gaW4gYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYCBpbiBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AuIFNwZWNpZmljYWxseSwgaXQgYWx3YXlzIGNhbGN1bGF0ZXMgdGhlIHN1bSBvZiBlbnRyeSBpbnRlcnZhbHMgKGBjeWNsZWApIGFuZCB2YWxpZGF0ZXMgdGhhdCBgY3ljbGUgXFx1MDAzYz0gSU5UX01BWGAgYW5kIHRoYXQgdXNlci1zdXBwbGllZCBgbmV3LVxcdTAwM2VjeWNsZV90aW1lYCBpcyBub3QgbGVzcyB0aGFuIGBjeWNsZWAuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGN5Y2xlID0gMGApIGFuZCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoYG5ld19hZG1pbmAgdmlhIGBremFsbG9jX29iaigpYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIGNoYW5nZSwgYW5kIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow6548z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 23:03:08 +0000 UTC FinishedAt: 2026-08-31 23:07:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_TAPRIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_TAPRIO" ], "series_id": "a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "taprio_change", "taprio_init", "parse_taprio_schedule" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1RBUFJJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RhcHJpb19jaGFuZ2UmIzM0OywKICAgICYjMzQ7dGFwcmlvX2luaXQmIzM0OywKICAgICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW5wdXQgdmFsaWRhdGlvbiBpbiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gU3BlY2lmaWNhbGx5LCBpdCBhbHdheXMgY2FsY3VsYXRlcyB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFscyAoYGN5Y2xlYCkgYW5kIHZhbGlkYXRlcyB0aGF0IGBjeWNsZSBcdTAwM2M9IElOVF9NQVhgIGFuZCB0aGF0IHVzZXItc3VwcGxpZWQgYG5ldy1cdTAwM2VjeWNsZV90aW1lYCBpcyBub3QgbGVzcyB0aGFuIGBjeWNsZWAuXG5cbkFsbCBsb2NhbCB2YXJpYWJsZXMgKGBjeWNsZSA9IDBgKSBhbmQgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGBuZXdfYWRtaW5gIHZpYSBga3phbGxvY19vYmooKWApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyBLTVNBTi1zcGVjaWZpYyByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIGFuZCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYXJzZV90YXByaW9fc2NoZWR1bGUoKSBpbiBuZXQvc2NoZWQvc2NoX3RhcHJpby5jIHRvIHVuY29uZGl0aW9uYWxseSB2YWxpZGF0ZSB0aGUgY3ljbGUgdGltZSBhZ2FpbnN0IHRoZSBzdW0gb2Ygc2NoZWR1bGUgZW50cnkgaW50ZXJ2YWxzIGFuZCBjaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdy4gVGhpcyBhZmZlY3RzIHNjaGVkdWxlIHBhcmFtZXRlciBwYXJzaW5nIHdoZW4gY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIGEgdGFwcmlvIHFkaXNjIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgaW4gc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ2Yjc5MjdkOThmNmIzNDNmNWIxMTM0MzYzZDEyM2VmYjFhYzI1ZmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMzowNToyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuaW5kZXggMzlhYzViOTdhYTNhZi4uMTM3Y2U2ZjdhNDc0YSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbkBAIC0xMTMwLDYgJiM0MzsxMTMwLDggQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuJiM0MztcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4mIzQzO1x0a3RpbWVfdCBjeWNsZSA9IDA7XG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xuQEAgLTExNTIsMTkgJiM0MzsxMTU0LDIwIEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKSB7XG4tXHRcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4tXHRcdGt0aW1lX3QgY3ljbGUgPSAwO1xuLVxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZuZXctXHUwMDNlZW50cmllcywgbGlzdClcbi1cdFx0XHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXHUwMDNlaW50ZXJ2YWwpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNm5ldy1cdTAwM2VlbnRyaWVzLCBsaXN0KVxuJiM0MztcdFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVx1MDAzZWludGVydmFsKTtcbiBcbi1cdFx0aWYgKGN5Y2xlIFx1MDAzYyAwIHx8IGN5Y2xlIFx1MDAzZSBJTlRfTUFYKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuJiM0MztcdGlmIChjeWNsZSBcdTAwM2MgMCB8fCBjeWNsZSBcdTAwM2UgSU5UX01BWCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiYjNDM7XHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKVxuIFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZSA9IGN5Y2xlO1xuJiM0MztcbiYjNDM7XHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIGN5Y2xlKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0OyYjMzk7Y3ljbGVfdGltZSYjMzk7IGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFsc1wmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGlmIChuZXctXHUwMDNlY3ljbGVfdGltZSBcdTAwM2MgbmV3LVx1MDAzZW51bV9lbnRyaWVzICogbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1RBUFJJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RhcHJpb19jaGFuZ2UmIzM0OywKICAgICYjMzQ7dGFwcmlvX2luaXQmIzM0OywKICAgICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpIGluIG5ldC9zY2hlZC9zY2hfdGFwcmlvLmMgdG8gdW5jb25kaXRpb25hbGx5IHZhbGlkYXRlIHRoZSBjeWNsZSB0aW1lIGFnYWluc3QgdGhlIHN1bSBvZiBzY2hlZHVsZSBlbnRyeSBpbnRlcnZhbHMgYW5kIGNoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93LiBUaGlzIGFmZmVjdHMgc2NoZWR1bGUgcGFyYW1ldGVyIHBhcnNpbmcgd2hlbiBjcmVhdGluZyBvciBtb2RpZnlpbmcgYSB0YXByaW8gcWRpc2MgdmlhIG5ldGxpbmssIHdoaWNoIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzb2Z0d2FyZS1lbXVsYXRlZCBuZXR3b3JraW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDZiNzkyN2Q5OGY2YjM0M2Y1YjExMzQzNjNkMTIzZWZiMWFjMjVmZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIzOjA1OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKaW5kZXggMzlhYzViOTdhYTNhZi4uMTM3Y2U2ZjdhNDc0YSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCkBAIC0xMTMwLDYgJiM0MzsxMTMwLDggQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLAogCQkJCSBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsCiAJCQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKJiM0MzsJc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTsKJiM0MzsJa3RpbWVfdCBjeWNsZSA9IDA7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0pIHsKQEAgLTExNTIsMTkgJiM0MzsxMTU0LDIwIEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAlpZiAoZXJyICZsdDsgMCkKIAkJcmV0dXJuIGVycjsKIAotCWlmICghbmV3LSZndDtjeWNsZV90aW1lKSB7Ci0JCXN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7Ci0JCWt0aW1lX3QgY3ljbGUgPSAwOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZhbXA7bmV3LSZndDtlbnRyaWVzLCBsaXN0KQotCQkJY3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LSZndDtpbnRlcnZhbCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZhbXA7bmV3LSZndDtlbnRyaWVzLCBsaXN0KQomIzQzOwkJY3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LSZndDtpbnRlcnZhbCk7CiAKLQkJaWYgKGN5Y2xlICZsdDsgMCB8fCBjeWNsZSAmZ3Q7IElOVF9NQVgpIHsKLQkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnJiMzNDspOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KJiM0MzsJaWYgKGN5Y2xlICZsdDsgMCB8fCBjeWNsZSAmZ3Q7IElOVF9NQVgpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAomIzQzOwlpZiAoIW5ldy0mZ3Q7Y3ljbGVfdGltZSkKIAkJbmV3LSZndDtjeWNsZV90aW1lID0gY3ljbGU7CiYjNDM7CiYjNDM7CWlmIChuZXctJmd0O2N5Y2xlX3RpbWUgJmx0OyBjeWNsZSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0OyYjMzk7Y3ljbGVfdGltZSYjMzk7IGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFscyYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChuZXctJmd0O2N5Y2xlX3RpbWUgJmx0OyBuZXctJmd0O251bV9lbnRyaWVzICogbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVEFQUklPIFNjaGVkdWxlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGJlaW5nIGFza2VkIHRvIHJldmlldyBhIHBhdGNoIGZvciBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZC4gVGhlIGRpZmYgaXMgdGhlIGZpcnN0IHRoaW5nIHRvIGxvb2sgYXQ6IEkgc2VlIGEgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyB0aGUgY3ljbGUgdGltZSBpcyBjYWxjdWxhdGVkIGFuZCB2YWxpZGF0ZWQgZm9yIHRoZSBUQVBSSU8gc2NoZWR1bGVyLgoKVGhlIG9yaWdpbmFsIGNvZGUgYXBwZWFycyB0byBjYWxjdWxhdGUgdGhlIGN5Y2xlIHRpbWUgYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGxpc3Qgb2Ygc2NoZWR1bGUgZW50cmllcyBhbmQgc3VtbWluZyB0aGVpciBpbnRlcnZhbHMuIE5vdywgaXQmIzM5O3MgY29tcGFyaW5nIGFnYWluc3QgYG5ldy0mZ3Q7Y3ljbGVfdGltZWAgd2hpY2ggc291bmRzIGxpa2UgaXQmIzM5O3MgcGFzc2VkIGluIGZyb20gbmV0bGluay4gVGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhbiBleHRyYSB2YWxpZGF0aW9uIHN0ZXAuIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBga3RpbWVfdCBjeWNsZSA9IDA7YCBhbmQgYSBuZXcgYGlmYCBjb25kaXRpb24gd2l0aCBhIGNoZWNrIHRoYXQgYG5ldy0mZ3Q7Y3ljbGVfdGltZWAgaXMgX2F0IGxlYXN0XyBhcyBsYXJnZSBhcyB0aGUgc3VtIG9mIGFsbCBlbnRyeSBpbnRlcnZhbHMuCgpFc3NlbnRpYWxseSwgdGhlIGV4aXN0aW5nIGxvZ2ljIHN1bXMgdXAgYWxsIHRoZSBlbnRyeSBpbnRlcnZhbHMgdG8gY3JlYXRlIGEgYGN5Y2xlYCB0aW1lLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBgY3ljbGVfdGltZWAgaXNuJiMzOTt0IHNtYWxsZXIgdGhhbiB0aGUgY29tYmluZWQgZHVyYXRpb25zIG9mIGl0cyBjb25zdGl0dWVudCBlbnRyaWVzLCBhbmQgaXQmIzM5O3MgYWxzbyB2YWxpZGF0aW5nIHRoYXQgdGhlIGBjeWNsZV90aW1lYCBpcyB2YWxpZC4gSXQmIzM5O3MgYWxzbyBtYWtpbmcgc3VyZSB0aGF0IHRoZSBzdW0gb2YgdGhlIGVudHJpZXMgYW5kIHRoZSBjeWNsZSB0aW1lIGFyZSBub3Qgb3V0IG9mIGJvdW5kcywgcHJldmVudGluZyBhbiBpbnRlZ2VyIG92ZXJmbG93LgoKTXkgaW5pdGlhbCBpbnRlcnByZXRhdGlvbjogdGhpcyBwYXRjaCBhaW1zIHRvIGltcHJvdmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIFRBUFJJTyBzY2hlZHVsZXIgYnkgbWFraW5nIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gaXMgaW50ZXJuYWxseSBjb25zaXN0ZW50LiBUaGlzIGlzIGEgZ29vZCBtb3ZlOyBzdWNoIHZhbGlkYXRpb24gY291bGQgaGF2ZSBwcmV2ZW50ZWQgc3VidGxlIGJ1Z3MgYW5kIHBlcmhhcHMgbWFkZSB0aGUgc2NoZWR1bGVyIG1vcmUgcmVzaXN0YW50IHRvIG1pc2NvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMsIG9mIGNvdXJzZSwgb3IgdW53YW50ZWQgYmVoYXZpb3VyLiBJIHdhbnQgdG8gbG9vayBpbnRvIHRoZSBpbXBhY3Qgb24gZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zLCBhbmQgd2hldGhlciB0aGUgYWRkZWQgdmFsaWRhdGlvbiBwcmV2ZW50cyB2YWxpZCBjb25maWd1cmF0aW9ucy4gRmluYWxseSwgSSBzaG91bGQgbG9vayBhdCB0aGUgS2NvbmZpZyBhbmQgb3RoZXIgY29udGV4dCBpbiB0aGlzIGNvZGUgdG8gZ2l2ZSB0aGUgYmVzdCBhbmFseXNpcywgYW5kIGNvbmZpcm0gdGhpcyBpcyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEyMDpcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmVudHJ5LVx1MDAzZWxpc3QsIFx1MDAyNnNjaGVkLVx1MDAzZWVudHJpZXMpO1xuMTEyMTpcdFx0XHRpJiM0MzsmIzQzOztcbjExMjI6XHRcdH1cbjExMjM6XHRcbjExMjQ6XHRcdHNjaGVkLVx1MDAzZW51bV9lbnRyaWVzID0gaTtcbjExMjU6XHRcbjExMjY6XHRcdHJldHVybiBpO1xuMTEyNzpcdH1cbjExMjg6XHRcbjExMjk6XHRzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4xMTMwOlx0XHRcdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxuMTEzMTpcdFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjExMzI6XHR7XG4xMTMzOlx0XHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5O1xuMTEzNDpcdFx0a3RpbWVfdCBjeWNsZSA9IDA7XG4xMTM1Olx0XHRpbnQgZXJyID0gMDtcbjExMzY6XHRcbjExMzc6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xuMTEzODpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0FkZGluZyBhIHNpbmdsZSBlbnRyeSBpcyBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbjExMzk6XHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbjExNDA6XHRcdH1cbjExNDE6XHRcbjExNDI6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQkFTRV9USU1FXSlcbjExNDM6XHRcdFx0bmV3LVx1MDAzZWJhc2VfdGltZSA9IG5sYV9nZXRfczY0KHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9CQVNFX1RJTUVdKTtcbjExNDQ6XHRcbjExNDU6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV9FWFRFTlNJT05dKVxuMTE0NjpcdFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZV9leHRlbnNpb24gPSBubGFfZ2V0X3M2NCh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV9FWFRFTlNJT05dKTtcbjExNDc6XHRcbjExNDg6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV0pXG4xMTQ5Olx0XHRcdG5ldy1cdTAwM2VjeWNsZV90aW1lID0gbmxhX2dldF9zNjQodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVdKTtcbjExNTA6XHRcbjExNTE6XHRcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfRU5UUllfTElTVF0pXG4xMTUyOlx0XHRcdGVyciA9IHBhcnNlX3NjaGVkX2xpc3QocSwgdGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0VOVFJZX0xJU1RdLFxuMTE1MzpcdFx0XHRcdFx0ICAgICAgIG5ldywgZXh0YWNrKTtcbjExNTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMTU1Olx0XHRcdHJldHVybiBlcnI7XG4xMTU2Olx0XG4xMTU3Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZuZXctXHUwMDNlZW50cmllcywgbGlzdClcbjExNTg6XHRcdFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVx1MDAzZWludGVydmFsKTtcbjExNTk6XHRcbjExNjA6XHRcdGlmIChjeWNsZSBcdTAwM2MgMCB8fCBjeWNsZSBcdTAwM2UgSU5UX01BWCkge1xuMTE2MTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0OyYjMzk7Y3ljbGVfdGltZSYjMzk7IGlzIHRvbyBiaWdcJiMzNDspO1xuMTE2MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExNjM6XHRcdH1cbjExNjQ6XHRcbjExNjU6XHRcdGlmICghbmV3LVx1MDAzZWN5Y2xlX3RpbWUpXG4xMTY2Olx0XHRcdG5ldy1cdTAwM2VjeWNsZV90aW1lID0gY3ljbGU7XG4xMTY3Olx0XG4xMTY4Olx0XHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIGN5Y2xlKSB7XG4xMTY5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgbGVzcyB0aGFuIHRoZSBzdW0gb2YgZW50cnkgaW50ZXJ2YWxzXCYjMzQ7KTtcbjExNzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTcxOlx0XHR9XG4xMTcyOlx0XG4xMTczOlx0XHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIG5ldy1cdTAwM2VudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHtcbjExNzQ6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gc21hbGxcJiMzNDspO1xuMTE3NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExNzY6XHRcdH1cbjExNzc6XHRcbjExNzg6XHRcdHRhcHJpb19jYWxjdWxhdGVfZ2F0ZV9kdXJhdGlvbnMocSwgbmV3KTtcbjExNzk6XHRcbjExODA6XHRcdHJldHVybiAwO1xuMTE4MTpcdH1cbjExODI6XHRcbjExODM6XHRzdGF0aWMgaW50IHRhcHJpb19wYXJzZV9tcXByaW9fb3B0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4xMTg0Olx0XHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQsXG4xMTg1Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4xMTg2Olx0XHRcdFx0XHQgICB1MzIgdGFwcmlvX2ZsYWdzKVxuMTE4NzpcdHtcbjExODg6XHRcdGJvb2wgYWxsb3dfb3ZlcmxhcHBpbmdfdHhxcyA9IFRYVElNRV9BU1NJU1RfSVNfRU5BQkxFRCh0YXByaW9fZmxhZ3MpO1xuMTE4OTpcdFxuMTE5MDpcdFx0aWYgKCFxb3B0KSB7XG4xMTkxOlx0XHRcdGlmICghbmV0ZGV2X2dldF9udW1fdGMoZGV2KSkge1xuMTE5MjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7JiMzOTttcXByaW8mIzM5OyBjb25maWd1cmF0aW9uIGlzIG5lY2Vzc2FyeVwmIzM0Oyk7XG4xMTkzOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTk0Olx0XHRcdH1cbjExOTU6XHRcdFx0cmV0dXJuIDA7XG4xMTk2Olx0XHR9XG4xMTk3Olx0XG4xMTk4Olx0XHQvKiB0YXByaW8gaW1wb3NlcyB0aGF0IHRyYWZmaWMgY2xhc3NlcyBtYXAgMTpuIHRvIHR4IHF1ZXVlcyAqL1xuMTE5OTpcdFx0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlcykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBgdGFwcmlvYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFyb3VuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYC4gVGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgY29udGV4dCAtIHdobyYjMzk7cyBhY3R1YWxseSBpbnZva2luZyB0aGlzIGZ1bmN0aW9uPyBLbm93aW5nIHRoYXQgd2lsbCBwcm92aWRlIGNyaXRpY2FsIGluc2lnaHRzIGludG8gd2hhdCYjMzk7cyBiZWluZyBwYXNzZWQgaW4gYW5kIHdoYXQgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGlzLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcuCgpUaGVuLCBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgYnJvYWRlciBgdGFwcmlvYCBxZGlzYyBpbXBsZW1lbnRhdGlvbi4gV2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoaXMgcWRpc2M/IFdoYXQmIzM5O3MgdGhlIGNvbXBsZXRlIGZlYXR1cmUgc2V0PyBXaGF0IGtleSBkYXRhIHN0cnVjdHVyZXMgYXJlIGluIHBsYXk/IEtub3dpbmcgdGhlIGxhbmRzY2FwZSBvZiB0aGUgYHRhcHJpb2AgcWRpc2Mgd2lsbCBoZWxwIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIG1hcCBpdCBvdXQsIHNvIEkgY2FuIHNlZSBob3cgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIEVzc2VudGlhbGx5IEkmIzM5O2xsIG5lZWQgdG8gZGV2ZWxvcCB0aGUgbWVudGFsIG1hcCBvZiB0aGUgc3lzdGVtIHNvIEkgY2FuIGlkZW50aWZ5IGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGNvbnRyaWJ1dGVzIHRvIHRoZSBjb21wbGV0ZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEwODk9c3RhdGljIGludCBwYXJzZV9zY2hlZF9saXN0KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKmxpc3QsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTI4LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMTI5OnN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0Yixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEzMC1cdFx0XHRcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODI1PXN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkxOS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTkyMDpcdGVyciA9IHBhcnNlX3RhcHJpb19zY2hlZHVsZShxLCB0YiwgbmV3X2FkbWluLCBleHRhY2spO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTIxLVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDM0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyB0aGUgVGFwcmlvIFFkaXNjIE9wZXJhdGlvbnMqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgYHRhcHJpb2AgUWRpc2MgYWN0dWFsbHkgd29ya3MuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgc291cmNlLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgaW50byBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AuIEkgd2FudCB0byBsb29rIGF0IHRoZSBgcWRpc2Nfb3BzYCBzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5LiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyB0aGlzIHRoaW5nIGZ1bmN0aW9ucyDigJMgaXQmIzM5O2xsIHRlbGwgbWUgaG93IHBhY2tldHMgYXJlIGVucXVldWVkLCBkZXF1ZXVlZCwgY29uZmlndXJlZCwgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBhdCB0aGUgc2NoZWR1bGluZyBsZXZlbC4gVW5kZXJzdGFuZGluZyB0aGVzZSBvcGVyYXRpb25zIGlzIGNydWNpYWwgZm9yIGZpZ3VyaW5nIG91dCBpdHMgYmVoYXZpb3IgYW5kIGNhcGFiaWxpdGllcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGludGVyZXN0aW5nIHRoaW5ncyBoZXJlLCBnaXZlbiB0aGUgdGltZS1zZW5zaXRpdmUgbmF0dXJlIGFuZCB0cmFmZmljIHNoYXBpbmcgZnVuY3Rpb25hbGl0aWVzIG9mIFRhcHJpby4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBRZGlzY19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjUzOT1zdGF0aWMgY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyB0YXByaW9fY2xhc3Nfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU0OC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjU0OTpzdGF0aWMgc3RydWN0IFFkaXNjX29wcyB0YXByaW9fcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTAtXHQuY2xfb3BzXHRcdD0gXHUwMDI2dGFwcmlvX2NsYXNzX29wcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzk1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgc2NoX3RhcHJpby5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gQmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgaW50bywgSSB0aGluayB0aGUgaXNzdWUgaXMgYXJvdW5kIHRoZSBzY2hlZHVsaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgVEFQUklPIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSwgYW5kIEkgZmlndXJlIHRoZSBwcm9ibGVtIG1pZ2h0IGJlIGluIHRoZSB2aWNpbml0eSBvZiBsaW5lIDI1NDkgd2l0aGluIHRoZSBgc2NoX3RhcHJpby5jYCBmaWxlLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBzdXJyb3VuZGluZyBsaW5lcyB0b28sIHRvIGdldCB0aGUgZnVsbCBjb250ZXh0IG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uIEhvcGVmdWxseSwgdGhlIHByb2JsZW0gaXMgcmlnaHQgdGhlcmUsIHN0YXJpbmcgbWUgaW4gdGhlIGZhY2UhIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU0MDpcdFx0LmdyYWZ0XHRcdD0gdGFwcmlvX2dyYWZ0LFxuMjU0MTpcdFx0LmxlYWZcdFx0PSB0YXByaW9fbGVhZixcbjI1NDI6XHRcdC5maW5kXHRcdD0gdGFwcmlvX2ZpbmQsXG4yNTQzOlx0XHQud2Fsa1x0XHQ9IHRhcHJpb193YWxrLFxuMjU0NDpcdFx0LmR1bXBcdFx0PSB0YXByaW9fZHVtcF9jbGFzcyxcbjI1NDU6XHRcdC5kdW1wX3N0YXRzXHQ9IHRhcHJpb19kdW1wX2NsYXNzX3N0YXRzLFxuMjU0NjpcdFx0LnNlbGVjdF9xdWV1ZVx0PSB0YXByaW9fc2VsZWN0X3F1ZXVlLFxuMjU0NzpcdH07XG4yNTQ4Olx0XG4yNTQ5Olx0c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgdGFwcmlvX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuMjU1MDpcdFx0LmNsX29wc1x0XHQ9IFx1MDAyNnRhcHJpb19jbGFzc19vcHMsXG4yNTUxOlx0XHQuaWRcdFx0PSBcJiMzNDt0YXByaW9cJiMzNDssXG4yNTUyOlx0XHQucHJpdl9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgdGFwcmlvX3NjaGVkKSxcbjI1NTM6XHRcdC5pbml0XHRcdD0gdGFwcmlvX2luaXQsXG4yNTU0Olx0XHQuY2hhbmdlXHRcdD0gdGFwcmlvX2NoYW5nZSxcbjI1NTU6XHRcdC5kZXN0cm95XHQ9IHRhcHJpb19kZXN0cm95LFxuMjU1NjpcdFx0LnJlc2V0XHRcdD0gdGFwcmlvX3Jlc2V0LFxuMjU1NzpcdFx0LmF0dGFjaFx0XHQ9IHRhcHJpb19hdHRhY2gsXG4yNTU4Olx0XHQucGVla1x0XHQ9IHRhcHJpb19wZWVrLFxuMjU1OTpcdFx0LmRlcXVldWVcdD0gdGFwcmlvX2RlcXVldWUsXG4yNTYwOlx0XHQuZW5xdWV1ZVx0PSB0YXByaW9fZW5xdWV1ZSxcbjI1NjE6XHRcdC5kdW1wXHRcdD0gdGFwcmlvX2R1bXAsXG4yNTYyOlx0XHQuZHVtcF9zdGF0c1x0PSB0YXByaW9fZHVtcF9zdGF0cyxcbjI1NjM6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuMjU2NDpcdH07XG4yNTY1Olx0TU9EVUxFX0FMSUFTX05FVF9TQ0goXCYjMzQ7dGFwcmlvXCYjMzQ7KTtcbjI1NjY6XHRcbjI1Njc6XHRzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHRhcHJpb19kZXZpY2Vfbm90aWZpZXIgPSB7XG4yNTY4Olx0XHQubm90aWZpZXJfY2FsbCA9IHRhcHJpb19kZXZfbm90aWZpZXIsXG4yNTY5Olx0fTtcbjI1NzA6XHRcbjI1NzE6XHRzdGF0aWMgaW50IF9faW5pdCB0YXByaW9fbW9kdWxlX2luaXQodm9pZClcbjI1NzI6XHR7XG4yNTczOlx0XHRpbnQgZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNnRhcHJpb19kZXZpY2Vfbm90aWZpZXIpO1xuMjU3NDpcdFxuMjU3NTpcdFx0aWYgKGVycilcbjI1NzY6XHRcdFx0cmV0dXJuIGVycjtcbjI1Nzc6XHRcbjI1Nzg6XHRcdHJldHVybiByZWdpc3Rlcl9xZGlzYyhcdTAwMjZ0YXByaW9fcWRpc2Nfb3BzKTtcbjI1Nzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKktjb25maWcgYW5kIHRhcHJpbzogQSBRdWljayBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0FscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiYjMzQ7IEkgbmVlZCB0byBnZXQgc29tZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRhcHJpbywgYW5kIHRoZSBmaXJzdCBwbGFjZSBJIGFsd2F5cyBnbyB0byBmb3IgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIGlzIHRoZSBwcm9qZWN0JiMzOTtzIEtjb25maWcgZmlsZS4gSSBhc3N1bWUgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgbWFuYWdlZC4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoZXRoZXIgdGFwcmlvIGlzIGF2YWlsYWJsZSBhbmQgaG93IGl0IGlzIGltcGxlbWVudGVkLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGtub3duIGNvbmZpZ3VyYXRpb24gaXNzdWVzIG9yIGRlcGVuZGVuY2llcyB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2NoX3RhcHJpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MTcyPWNvbmZpZyBORVRfU0NIX1RBUFJJT1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTE3OC1cbm5ldC9zY2hlZC9LY29uZmlnOjE3OTpcdCAgU2VlIHRoZSB0b3Agb2YgXHUwMDNjZmlsZTpuZXQvc2NoZWQvc2NoX3RhcHJpby5jXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXG5uZXQvc2NoZWQvS2NvbmZpZy0xODAtXG5uZXQvc2NoZWQvS2NvbmZpZy0xODEtXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbm5ldC9zY2hlZC9LY29uZmlnOjE4MjpcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF90YXByaW8uXG5uZXQvc2NoZWQvS2NvbmZpZy0xODMtXG4tLVxubmV0L3NjaGVkL01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19ORVRfU0NIX0VURilcdCYjNDM7PSBzY2hfZXRmLm9cbm5ldC9zY2hlZC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfTkVUX1NDSF9UQVBSSU8pXHQmIzQzOz0gc2NoX3RhcHJpby5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX05FVF9TQ0hfQlBGKVx0JiM0Mzs9IGJwZl9xZGlzYy5vXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzozOi8qIG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcdCBUaW1lIEF3YXJlIFByaW9yaXR5IFNjaGVkdWxlclxubmV0L3NjaGVkL3NjaF90YXByaW8uYy00LSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIHNjaGVkdWxlciBjb25maWd1cmF0aW9uLCBsaWtlbHkgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBgbmV0L3NjaGVkYCBzdWJzeXN0ZW0uIEkgcmVjYWxsIHRoYXQgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoZXkgZGVmaW5lIHRoZSBvcHRpb25zIHByZXNlbnRlZCB0byB0aGUgdXNlciBkdXJpbmcga2VybmVsIGNvbXBpbGF0aW9uLiBBbmQgSSBhbSByZW1lbWJlcmluZyB0aGF0IGxpbmUgMTcyIG9yIHNvIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIG1pZ2h0IGJlLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIEkmIzM5O20gcHJvYmFibHkgaW50ZXJlc3RlZCBpbiB0aGUgb3B0aW9ucyByZWxhdGVkIHRvLi4uIHdlbGwsIEkgZG9uJiMzOTt0IGtub3cgKmV4YWN0bHkqIHlldC4gQnV0IHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4gVGhpcyBhcHByb2FjaCBpcyBlZmZpY2llbnQgYmVjYXVzZSBpdCBoZWxwcyBtZSBuYXJyb3cgZG93biB0aGUgc2NvcGUgb2YgdGhlIHByb2JsZW0gcXVpY2tseTsgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB3aWxsIGxldCBtZSBzZWUgd2hhdCYjMzk7cyBjb25maWd1cmFibGUgaW4gdGhpcyBhcmVhLiBJdCYjMzk7bGwgZ2l2ZSBtZSBhIHJvYWRtYXAsIGxpa2VseSBoaWdobGlnaHRpbmcgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2V0Zi5cbiAxNjY6XHRcbiAxNjc6XHRjb25maWcgTkVUX1NDSF9NUVBSSU9fTElCXG4gMTY4Olx0XHR0cmlzdGF0ZVxuIDE2OTpcdFx0aGVscFxuIDE3MDpcdFx0ICBDb21tb24gbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIG1xcHJpbyBxdWV1ZSBjb25maWd1cmF0aW9ucy5cbiAxNzE6XHRcbiAxNzI6XHRjb25maWcgTkVUX1NDSF9UQVBSSU9cbiAxNzM6XHRcdHRyaXN0YXRlIFwmIzM0O1RpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXCYjMzQ7XG4gMTc0Olx0XHRzZWxlY3QgTkVUX1NDSF9NUVBSSU9fTElCXG4gMTc1Olx0XHRoZWxwXG4gMTc2Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIHBhY2tldFxuIDE3NzpcdFx0ICBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAxNzg6XHRcbiAxNzk6XHRcdCAgU2VlIHRoZSB0b3Agb2YgXHUwMDNjZmlsZTpuZXQvc2NoZWQvc2NoX3RhcHJpby5jXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXG4gMTgwOlx0XG4gMTgxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxODI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF90YXByaW8uXG4gMTgzOlx0XG4gMTg0Olx0Y29uZmlnIE5FVF9TQ0hfR1JFRFxuIDE4NTpcdFx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBSYW5kb20gRWFybHkgRGV0ZWN0aW9uIChHUkVEKVwmIzM0O1xuIDE4NjpcdFx0aGVscFxuIDE4NzpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgR2VuZXJpYyBSYW5kb20gRWFybHkgRGV0ZWN0aW9uXG4gMTg4Olx0XHQgIChHUkVEKSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0gZm9yIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXNcbiAxODk6XHRcdCAgKHNlZSB0aGUgdG9wIG9mIFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF9yZWQuY1x1MDAzZSBmb3IgZGV0YWlscyBhbmRcbiAxOTA6XHRcdCAgcmVmZXJlbmNlcyBhYm91dCB0aGUgYWxnb3JpdGhtKS5cbiAxOTE6XHRcbiAxOTI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDE5MzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2dyZWQuXG4gMTk0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgbmV0d29yayBzY2hlZHVsZXIgY29uZmlndXJhdGlvbi4gVGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBzZWUgd2hlcmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgYXJlIGRlZmluZWQuIE15IGluc3RpbmN0IGlzIHRoYXQgSSYjMzk7bGwgZmluZCB0aGVtIGluIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEl0JiMzOTtzIGEgcHJldHR5IHN0YW5kYXJkIGxvY2F0aW9uIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbmV0d29ya2luZy4gSSYjMzk7bSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBmb3IgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBsaW5rIGludG8gdGhlIG92ZXJhbGwgbWVudSBzdHJ1Y3R1cmUg4oCTIHdoZXJlIHRoaXMgcGFydGljdWxhciBzZWN0aW9uICYjMzQ7bGl2ZXMmIzM0OyB3aXRoaW4gdGhlIGdyZWF0ZXIgc2NoZW1lIG9mIHRoaW5ncy4gVW5kZXJzdGFuZGluZyB0aGUgcGFyZW50IG1lbnUgd2lsbCBxdWlja2x5IGdpdmUgbWUgY29udGV4dC4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgdGhlbiBtYWtlIGl0IGFsbCBjbGVhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIE5FVF9TQ0hFRFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBORVRfU0NIX0ZJRk9cbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgV2hlbiB0aGUga2VybmVsIGhhcyBzZXZlcmFsIHBhY2tldHMgdG8gc2VuZCBvdXQgb3ZlciBhIG5ldHdvcmtcbiAgMTE6XHRcdCAgZGV2aWNlLCBpdCBoYXMgdG8gZGVjaWRlIHdoaWNoIG9uZXMgdG8gc2VuZCBmaXJzdCwgd2hpY2ggb25lcyB0b1xuICAxMjpcdFx0ICBkZWxheSwgYW5kIHdoaWNoIG9uZXMgdG8gZHJvcC4gVGhpcyBpcyB0aGUgam9iIG9mIHRoZSBxdWV1ZWluZ1xuICAxMzpcdFx0ICBkaXNjaXBsaW5lcywgc2V2ZXJhbCBkaWZmZXJlbnQgYWxnb3JpdGhtcyBmb3IgaG93IHRvIGRvIHRoaXNcbiAgMTQ6XHRcdCAgXCYjMzQ7ZmFpcmx5XCYjMzQ7IGhhdmUgYmVlbiBwcm9wb3NlZC5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgSWYgeW91IHNheSBOIGhlcmUsIHlvdSB3aWxsIGdldCB0aGUgc3RhbmRhcmQgcGFja2V0IHNjaGVkdWxlciwgd2hpY2hcbiAgMTc6XHRcdCAgaXMgYSBGSUZPIChmaXJzdCBjb21lLCBmaXJzdCBzZXJ2ZWQpLiBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmVcbiAgMTg6XHRcdCAgYWJsZSB0byBjaG9vc2UgZnJvbSBhbW9uZyBzZXZlcmFsIGFsdGVybmF0aXZlIGFsZ29yaXRobXMgd2hpY2ggY2FuXG4gIDE5Olx0XHQgIHRoZW4gYmUgYXR0YWNoZWQgdG8gZGlmZmVyZW50IG5ldHdvcmsgZGV2aWNlcy4gVGhpcyBpcyB1c2VmdWwgZm9yXG4gIDIwOlx0XHQgIGV4YW1wbGUgaWYgc29tZSBvZiB5b3VyIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhbCB0aW1lIGRldmljZXMgdGhhdFxuICAyMTpcdFx0ICBuZWVkIGEgY2VydGFpbiBtaW5pbXVtIGRhdGEgZmxvdyByYXRlLCBvciBpZiB5b3UgbmVlZCB0byBsaW1pdCB0aGVcbiAgMjI6XHRcdCAgbWF4aW11bSBkYXRhIGZsb3cgcmF0ZSBmb3IgdHJhZmZpYyB3aGljaCBtYXRjaGVzIHNwZWNpZmllZCBjcml0ZXJpYS5cbiAgMjM6XHRcdCAgVGhpcyBjb2RlIGlzIGNvbnNpZGVyZWQgdG8gYmUgZXhwZXJpbWVudGFsLlxuICAyNDpcdFxuICAyNTpcdFx0ICBUbyBhZG1pbmlzdGVyIHRoZXNlIHNjaGVkdWxlcnMsIHlvdSYjMzk7bGwgbmVlZCB0aGUgdXNlci1sZXZlbCB1dGlsaXRpZXNcbiAgMjY6XHRcdCAgZnJvbSB0aGUgcGFja2FnZSBpcHJvdXRlMiYjNDM7dGMgYXRcbiAgMjc6XHRcdCAgXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2lwcm91dGUyL1x1MDAzZS4gIFRoYXQgcGFja2FnZVxuICAyODpcdFx0ICBhbHNvIGNvbnRhaW5zIHNvbWUgZG9jdW1lbnRhdGlvbjsgZm9yIG1vcmUsIGNoZWNrIG91dFxuICAyOTpcdFx0ICBcdTAwM2NodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2lwcm91dGUyXHUwMDNlLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUaGlzIFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKSBzdXBwb3J0IHdpbGwgZW5hYmxlIHlvdSB0byB1c2VcbiAgMzI6XHRcdCAgRGlmZmVyZW50aWF0ZWQgU2VydmljZXMgKGRpZmZzZXJ2KSBhbmQgUmVzb3VyY2UgUmVzZXJ2YXRpb24gUHJvdG9jb2xcbiAgMzM6XHRcdCAgKFJTVlApIG9uIHlvdXIgTGludXggcm91dGVyIGlmIHlvdSBhbHNvIHNheSBZIHRvIHRoZSBjb3JyZXNwb25kaW5nXG4gIDM0Olx0XHQgIGNsYXNzaWZpZXJzIGJlbG93LiAgRG9jdW1lbnRhdGlvbiBhbmQgc29mdHdhcmUgaXMgYXRcbiAgMzU6XHRcdCAgXHUwMDNjaHR0cDovL2RpZmZzZXJ2LnNvdXJjZWZvcmdlLm5ldC9cdTAwM2UuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCB0byBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbVwmIzM0OyBiZWxvdywgeW91IHdpbGwgYmUgYWJsZVxuICAzODpcdFx0ICB0byByZWFkIHN0YXR1cyBpbmZvcm1hdGlvbiBhYm91dCBwYWNrZXQgc2NoZWR1bGVycyBmcm9tIHRoZSBmaWxlXG4gIDM5Olx0XHQgIC9wcm9jL25ldC9wc2NoZWQuXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2ODEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIE5FVF9TQ0hFRCBJbmNsdXNpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUbyB1bmRlcnN0YW5kIGhvdyBgTkVUX1NDSEVEYCBpcyBoYW5kbGVkLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIG9mIHRydXRoIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbjogYG5ldC9LY29uZmlnYC4gVGhpcyBmaWxlIGRpY3RhdGVzIGFsbCB0aGUgbmV0d29ya2luZy1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQnkgZXhhbWluaW5nIGl0cyBzdHJ1Y3R1cmUgYW5kIGRlcGVuZGVuY2llcywgSSBjYW4gcXVpY2tseSBkZXRlcm1pbmUgaG93IGBORVRfU0NIRURgIGlzIGV4cG9zZWQgdG8gdGhlIHVzZXIgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqdW5kZXIgd2hhdCBjb25kaXRpb25zKiBpdCBiZWNvbWVzIGF2YWlsYWJsZS4gSSBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCwgd2hhdCBvdGhlciBvcHRpb25zIGl0IG1pZ2h0IGRlcGVuZCBvbiwgYW5kIHBvdGVudGlhbGx5IHdoZXJlIGl0JiMzOTtzICp1c2VkKiB3aXRoaW4gdGhlIGxhcmdlciBgS2NvbmZpZ2AgaGllcmFyY2h5LiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgcHJvdmlkZSBjb250ZXh0IGZvciB0aGUgd2lkZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTEyMDk0PXN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMjE2OS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpO1xubmV0L2NvcmUvZGV2LmM6MTIxNzA6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9jb3JlL2Rldi5jLTEyMTcxLVx0aGFzaF9pbml0KGRldi1cdTAwM2VxZGlzY19oYXNoKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMDAzOD1zdGF0aWMgdTMyIGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMDIxMS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IF9fc2tfYnVmZiwgdGNfaW5kZXgpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTAyMTI6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjEzLVx0XHRpZiAodHlwZSA9PSBCUEZfV1JJVEUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTU1OT1zdGF0aWMgdm9pZCBfX2NvcHlfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE1OTktI2VuZGlmXG5uZXQvY29yZS9za2J1ZmYuYzoxNjAwOiNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG5uZXQvY29yZS9za2J1ZmYuYy0xNjAxLVx0Q0hFQ0tfU0tCX0ZJRUxEKHRjX2luZGV4KTtcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz0yNzU9c3RhdGljIGludCBmbG93X2xpbWl0X3RhYmxlX2xlbl9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0yOTUtXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzoyOTY6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTI5Ny1zdGF0aWMgaW50IHNldF9kZWZhdWx0X3FkaXNjKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM9NDMwPXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7XG4tLVxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtNTg5LSNlbmRpZlxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6NTkwOiNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01OTEtXHR7XG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9NTUxPXN0YXRpYyB2b2lkIGlwX2NvcHlfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy01NjMtXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzo1NjQ6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9pcHY0L2lwX291dHB1dC5jLTU2NS1cdHRvLVx1MDAzZXRjX2luZGV4ID0gZnJvbS1cdTAwM2V0Y19pbmRleDtcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NzA0PXN0YXRpYyB2b2lkIGlwNl9jb3B5X21ldGFkYXRhKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTcxNS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzo3MTY6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy03MTctXHR0by1cdTAwM2V0Y19pbmRleCA9IGZyb20tXHUwMDNldGNfaW5kZXg7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNS1cbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcbm5ldC9zY2hlZC9LY29uZmlnLTctXHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTQzLVxubmV0L3NjaGVkL0tjb25maWc6NDQ6aWYgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy00NS1cbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz05NTQ9Y29uZmlnIE5FVF9UQ19TS0JfRVhUXG4tLVxubmV0L3NjaGVkL0tjb25maWctOTY1LVxubmV0L3NjaGVkL0tjb25maWc6OTY2OmVuZGlmICMgTkVUX1NDSEVEXG5uZXQvc2NoZWQvS2NvbmZpZy05NjctXG4tLVxubmV0L3NjaGVkL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX0lORVQpXHRcdCYjNDM7PSBzY2hfZnJhZy5vXG5uZXQvc2NoZWQvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkVUX1NDSEVEKVx0XHQmIzQzOz0gc2NoX2FwaS5vIHNjaF9ibGFja2hvbGUub1xubmV0L3NjaGVkL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ORVRfQ0xTKVx0XHQmIzQzOz0gY2xzX2FwaS5vXG4tLVxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MzM5Mj1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7VGhlIENBS0Ugc2hhcGVyLlwmIzM0Oyk7XG5uZXQvc2NoZWQvc2NoX2Nha2UuYzozMzkzOk1PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7TkVUX1NDSEVEX0lOVEVSTkFMXCYjMzQ7KTtcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYz0xMTA2PXN0YXRpYyB2b2lkIF9fcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKVxuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMTAtXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYzoxMTExOiNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xMTEyLVx0cWRpc2NfaGFzaF9kZWwocWRpc2MpO1xuLS1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jPTEyMjg9c3RhdGljIHZvaWQgYXR0YWNoX2RlZmF1bHRfcWRpc2NzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmMtMTI2Mi1cbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjEyNjM6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTEyNjQtXHRpZiAocWRpc2MgIT0gXHUwMDI2bm9vcF9xZGlzYylcbi0tXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYz0xNDQ0PXZvaWQgbXFfY2hhbmdlX3JlYWxfbnVtX3R4KHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBpbnQgbmV3X3JlYWxfdHgpXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xNDQ1LXtcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjE0NDY6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTE0NDctXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jPTQ4PXZvaWQgbXFfZGVzdHJveV9jb21tb24oc3RydWN0IFFkaXNjICpzY2gpXG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jLTU5LX1cbm5ldC9zY2hlZC9zY2hfbXEuYzo2MDpFWFBPUlRfU1lNQk9MX05TX0dQTChtcV9kZXN0cm95X2NvbW1vbiwgXCYjMzQ7TkVUX1NDSEVEX0lOVEVSTkFMXCYjMzQ7KTtcbm5ldC9zY2hlZC9zY2hfbXEuYy02MS1cbi0tXG5uZXQvc2NoZWQvc2NoX21xLmM9Njg9aW50IG1xX2luaXRfY29tbW9uKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jLTEwNC19XG5uZXQvc2NoZWQvc2NoX21xLmM6MTA1OkVYUE9SVF9TWU1CT0xfTlNfR1BMKG1xX2luaXRfY29tbW9uLCBcJiMzNDtORVRfU0NIRURfSU5URVJOQUxcJiMzNDspO1xubmV0L3NjaGVkL3NjaF9tcS5jLTEwNi1cbi0tXG5uZXQvc2NoZWQvc2NoX21xLmM9MTIwPXZvaWQgbXFfYXR0YWNoKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfbXEuYy0xMzEtXHRcdFx0cWRpc2NfcHV0KG9sZCk7XG5uZXQvc2NoZWQvc2NoX21xLmM6MTMyOiNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG5uZXQvc2NoZWQvc2NoX21xLmMtMTMzLVx0XHRpZiAobnR4IFx1MDAzYyBkZXYtXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKVxuLS1cbm5ldC9zY2hlZC9zY2hfbXEuYy0xNDAtfVxubmV0L3NjaGVkL3NjaF9tcS5jOjE0MTpFWFBPUlRfU1lNQk9MX05TX0dQTChtcV9hdHRhY2gsIFwmIzM0O05FVF9TQ0hFRF9JTlRFUk5BTFwmIzM0Oyk7XG5uZXQvc2NoZWQvc2NoX21xLmMtMTQyLVxubmV0L3NjaGVkL3NjaF9tcS5jPTE0Mz12b2lkIG1xX2R1bXBfY29tbW9uKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9zY2hlZC9zY2hfbXEuYy0xODMtfVxubmV0L3NjaGVkL3NjaF9tcS5jOjE4NDpFWFBPUlRfU1lNQk9MX05TX0dQTChtcV9kdW1wX2NvbW1vbiwgXCYjMzQ7TkVUX1NDSEVEX0lOVEVSTkFMXCYjMzQ7KTtcbm5ldC9zY2hlZC9zY2hfbXEuYy0xODUtXG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jPTIwMj1zdHJ1Y3QgbmV0ZGV2X3F1ZXVlICptcV9zZWxlY3RfcXVldWUoc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jLTIwNi19XG5uZXQvc2NoZWQvc2NoX21xLmM6MjA3OkVYUE9SVF9TWU1CT0xfTlNfR1BMKG1xX3NlbGVjdF9xdWV1ZSwgXCYjMzQ7TkVUX1NDSEVEX0lOVEVSTkFMXCYjMzQ7KTtcbm5ldC9zY2hlZC9zY2hfbXEuYy0yMDgtXG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jPTIzNT1zdHJ1Y3QgUWRpc2MgKm1xX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wpXG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jLTI0MC19XG5uZXQvc2NoZWQvc2NoX21xLmM6MjQxOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG1xX2xlYWYsIFwmIzM0O05FVF9TQ0hFRF9JTlRFUk5BTFwmIzM0Oyk7XG5uZXQvc2NoZWQvc2NoX21xLmMtMjQyLVxubmV0L3NjaGVkL3NjaF9tcS5jPTI0Mz11bnNpZ25lZCBsb25nIG1xX2ZpbmQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkKVxuLS1cbm5ldC9zY2hlZC9zY2hfbXEuYy0yNTAtfVxubmV0L3NjaGVkL3NjaF9tcS5jOjI1MTpFWFBPUlRfU1lNQk9MX05TX0dQTChtcV9maW5kLCBcJiMzNDtORVRfU0NIRURfSU5URVJOQUxcJiMzNDspO1xubmV0L3NjaGVkL3NjaF9tcS5jLTI1Mi1cbm5ldC9zY2hlZC9zY2hfbXEuYz0yNTM9aW50IG1xX2R1bXBfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXG4tLVxubmV0L3NjaGVkL3NjaF9tcS5jLTI2Mi19XG5uZXQvc2NoZWQvc2NoX21xLmM6MjYzOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG1xX2R1bXBfY2xhc3MsIFwmIzM0O05FVF9TQ0hFRF9JTlRFUk5BTFwmIzM0Oyk7XG5uZXQvc2NoZWQvc2NoX21xLmMtMjY0LVxubmV0L3NjaGVkL3NjaF9tcS5jPTI2NT1pbnQgbXFfZHVtcF9jbGFzc19zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcbi0tXG5uZXQvc2NoZWQvc2NoX21xLmMtMjc1LX1cbm5ldC9zY2hlZC9zY2hfbXEuYzoyNzY6RVhQT1JUX1NZTUJPTF9OU19HUEwobXFfZHVtcF9jbGFzc19zdGF0cywgXCYjMzQ7TkVUX1NDSEVEX0lOVEVSTkFMXCYjMzQ7KTtcbm5ldC9zY2hlZC9zY2hfbXEuYy0yNzctXG5uZXQvc2NoZWQvc2NoX21xLmM9Mjc4PXZvaWQgbXFfd2FsayhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFkaXNjX3dhbGtlciAqYXJnKVxuLS1cbm5ldC9zY2hlZC9zY2hfbXEuYy0yOTEtfVxubmV0L3NjaGVkL3NjaF9tcS5jOjI5MjpFWFBPUlRfU1lNQk9MX05TX0dQTChtcV93YWxrLCBcJiMzNDtORVRfU0NIRURfSU5URVJOQUxcJiMzNDspO1xubmV0L3NjaGVkL3NjaF9tcS5jLTI5My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUYXByaW8gQ29uZmlndXJhdGlvbiBQcm9jZXNzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCBjb2RlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGNvbmZpZ3VyYXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGhhcHBlbnMgd2hlbiBhIHVzZXIgc2V0cyB1cCBhIFRBUFJJTyBxZGlzYy4gRnJvbSB3aGF0IEkgcmVjYWxsLCB0aGUgbmV0bGluayBpbnRlcmZhY2UsIHNwZWNpZmljYWxseSBgUlRNX05FV1FESVNDYCBvciBgUlRNX1NFVFFESVNDYCBtZXNzYWdlcywgd2lsbCB0cmlnZ2VyIGVpdGhlciBgdGFwcmlvX2luaXRgIG9yIGB0YXByaW9fY2hhbmdlYC4gTm93LCB0aGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0byBzZWUgaG93IHRoZSBzY2hlZHVsZSBpcyBhY3R1YWxseSBwYXJzZWQgYW5kIGFwcGxpZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIHRob3NlIGVudHJ5IHBvaW50cy4gSSBiZWxpZXZlIHRoYXQgYHRhcHJpb19jaGFuZ2VgIGNhbGxzIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLCB3aGljaCBpcyBsaWtlbHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2NoZWR1bGUgcGFyYW1ldGVycyBnZXQgcGFyc2VkLCB2YWxpZGF0ZWQsIGFuZCB0cmFuc2xhdGVkIGludG8gdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB0aGF0IGRyaXZlIHRoZSBUQVBSSU8gcXVldWluZyBiZWhhdmlvci4gSSBzaG91bGQgYmVnaW4gYnkgY2hlY2tpbmcgYHRhcHJpb19pbml0YCBhbmQgYHRhcHJpb19jaGFuZ2VgIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdpbGwgc3RhcnQsIHJpZ2h0IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODEwOlx0XHRcdHN0cnVjdCBuZXRkZXZfdGNfdHhxIHJlcztcbjE4MTE6XHRcbjE4MTI6XHRcdFx0cmVzLmNvbWJpbmVkID0gUkVBRF9PTkNFKGRldi1cdTAwM2V0Y190b190eHFbaV0uY29tYmluZWQpO1xuMTgxMzpcdFx0XHRpZiAocmVzLmNvdW50ICE9IG1xcHJpby1cdTAwM2Vjb3VudFtpXSB8fFxuMTgxNDpcdFx0XHQgICAgcmVzLm9mZnNldCAhPSBtcXByaW8tXHUwMDNlb2Zmc2V0W2ldKVxuMTgxNTpcdFx0XHRcdHJldHVybiAtMTtcbjE4MTY6XHRcdH1cbjE4MTc6XHRcbjE4MTg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBUQ19CSVRNQVNLOyBpJiM0MzsmIzQzOylcbjE4MTk6XHRcdFx0aWYgKG5ldGRldl9nZXRfcHJpb190Y19tYXAoZGV2LCBpKSAhPSBtcXByaW8tXHUwMDNlcHJpb190Y19tYXBbaV0pXG4xODIwOlx0XHRcdFx0cmV0dXJuIC0xO1xuMTgyMTpcdFxuMTgyMjpcdFx0cmV0dXJuIDA7XG4xODIzOlx0fVxuMTgyNDpcdFxuMTgyNTpcdHN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuMTgyNjpcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4xODI3Olx0e1xuMTgyODpcdFx0c3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWIgPSBydG5sX2RlcmVmZXJlbmNlKHNjaC1cdTAwM2VzdGFiKTtcbjE4Mjk6XHRcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9UQVBSSU9fQVRUUl9NQVggJiM0MzsgMV0gPSB7IH07XG4xODMwOlx0XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpvcGVyLCAqYWRtaW4sICpuZXdfYWRtaW47XG4xODMxOlx0XHRzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xuMTgzMjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpO1xuMTgzMzpcdFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICptcXByaW8gPSBOVUxMO1xuMTgzNDpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjE4MzU6XHRcdHUzMiB0YXByaW9fZmxhZ3M7XG4xODM2Olx0XHRrdGltZV90IHN0YXJ0O1xuMTgzNzpcdFx0aW50IGksIGVycjtcbjE4Mzg6XHRcbjE4Mzk6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1RBUFJJT19BVFRSX01BWCwgb3B0LFxuMTg0MDpcdFx0XHRcdFx0XHQgIHRhcHJpb19wb2xpY3ksIGV4dGFjayk7XG4xODQxOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTg0MjpcdFx0XHRyZXR1cm4gZXJyO1xuMTg0MzpcdFxuMTg0NDpcdFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9QUklPTUFQXSlcbjE4NDU6XHRcdFx0bXFwcmlvID0gbmxhX2RhdGEodGJbVENBX1RBUFJJT19BVFRSX1BSSU9NQVBdKTtcbjE4NDY6XHRcbjE4NDc6XHRcdC8qIFRoZSBzZW1hbnRpY3Mgb2YgdGhlICYjMzk7ZmxhZ3MmIzM5OyBhcmd1bWVudCBpbiByZWxhdGlvbiB0byAmIzM5O2NoYW5nZSgpJiMzOTtcbjE4NDg6XHRcdCAqIHJlcXVlc3RzLCBhcmUgaW50ZXJwcmV0ZWQgZm9sbG93aW5nIHR3byBydWxlcyAod2hpY2ggYXJlIGFwcGxpZWQgaW5cbjE4NDk6XHRcdCAqIHRoaXMgb3JkZXIpOiAoMSkgYW4gb21pdHRlZCAmIzM5O2ZsYWdzJiMzOTsgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXNcbjE4NTA6XHRcdCAqIHplcm87ICgyKSB0aGUgJiMzOTtmbGFncyYjMzk7IG9mIGEgXCYjMzQ7cnVubmluZ1wmIzM0OyB0YXByaW8gaW5zdGFuY2UgY2Fubm90IGJlXG4xODUxOlx0XHQgKiBjaGFuZ2VkLlxuMTg1MjpcdFx0ICovXG4xODUzOlx0XHR0YXByaW9fZmxhZ3MgPSBubGFfZ2V0X3UzMl9kZWZhdWx0KHRiW1RDQV9UQVBSSU9fQVRUUl9GTEFHU10sIDApO1xuMTg1NDpcdFxuMTg1NTpcdFx0LyogdHh0aW1lLWFzc2lzdCBhbmQgZnVsbCBvZmZsb2FkIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgKi9cbjE4NTY6XHRcdGlmICgodGFwcmlvX2ZsYWdzIFx1MDAyNiBUQ0FfVEFQUklPX0FUVFJfRkxBR19UWFRJTUVfQVNTSVNUKSBcdTAwMjZcdTAwMjZcbjE4NTc6XHRcdCAgICAodGFwcmlvX2ZsYWdzIFx1MDAyNiBUQ0FfVEFQUklPX0FUVFJfRkxBR19GVUxMX09GRkxPQUQpKSB7XG4xODU4Olx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YltUQ0FfVEFQUklPX0FUVFJfRkxBR1NdLFxuMTg1OTpcdFx0XHRcdFx0ICAgIFwmIzM0O1RYVElNRV9BU1NJU1QgYW5kIEZVTExfT0ZGTE9BRCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlXCYjMzQ7KTtcbjE4NjA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODYxOlx0XHR9XG4xODYyOlx0XG4xODYzOlx0XHRpZiAocS1cdTAwM2VmbGFncyAhPSB0YXByaW9fZmxhZ3MpIHtcbjE4NjQ6XHRcdFx0aWYgKHEtXHUwMDNlZmxhZ3MgIT0gVEFQUklPX0ZMQUdTX0lOVkFMSUQpIHtcbjE4NjU6XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuMTg2NjpcdFx0XHRcdFx0XHQgICBcJiMzNDtDaGFuZ2luZyAmIzM5O2ZsYWdzJiMzOTsgb2YgYSBydW5uaW5nIHNjaGVkdWxlIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuMTg2NzpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE4Njg6XHRcdFx0fVxuMTg2OTpcdFx0XHRXUklURV9PTkNFKHEtXHUwMDNlZmxhZ3MsIHRhcHJpb19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODk5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyBgdGFwcmlvX2luaXRgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgaW1tZWRpYXRlIG5lZWQgaGVyZSBpcyB0byB0aG9yb3VnaGx5IGNoZWNrIGB0YXByaW9faW5pdGAuIFdlIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IG9yIHNldHVwIGZ1bmN0aW9uIGZvciBzb21ldGhpbmcsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBjYW4gYWxyZWFkeSBhbnRpY2lwYXRlIGEgZmV3IGtleSBhcmVhcyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2l0aGluIHRoaXMgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHdoYXQgaXQmIzM5O3MgZG9pbmcgb24gYSBoaWdoIGxldmVsLCB2ZXJpZnkgaG93IGl0JiMzOTtzIGludGVyZmFjaW5nIHdpdGggdGhlIGV4aXN0aW5nIGxpYnJhcmllcywgYW5kIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvYnZpb3VzIGxvZ2ljIGZsYXdzIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgd2F5IHRoYXQgaW5pdGlhbGl6YXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzIG9jY3VyLCBlc3BlY2lhbGx5IGFueSBzaGFyZWQgcmVzb3VyY2VzLgoKSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmdW5jdGlvbnMgYXJlIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgdGFwcmlvX2luaXRgLiBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgb2YgY29uY2Vybiwgc3VjaCBhcyBkZXByZWNhdGVkIGZ1bmN0aW9ucywgb3IgY2FsbHMgdG8gZXh0ZXJuYWwgc2VydmljZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgcmVzcG9uc2liaWxpdHkuIElzIGl0IHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgc3RhcnRpbmcgb3RoZXIgdGhyZWFkcz8gSSBuZWVkIHRvIGNoZWNrIGFsbCBvZiB0aGF0IHRvIGVuc3VyZSB0aGVyZSBpcyBubyBpc3N1ZXMuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIHN5c3RlbSBpcyBzZXQgdXAsIHNvIEkgY2FuIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGV4aXN0aW5nIHByb2dyYW0uIFRoaXMgd2lsbCBob3BlZnVsbHkgYWxsb3cgbWUgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGNvZGUgYW5kIG1ha2Ugc29tZSBpbnRlbGxpZ2VudCBwcmVkaWN0aW9ucyBhYm91dCBhcmVhcyB0aGF0IGFyZSBnb29kIGFuZCBhcmVhcyB0aGF0IHJlcXVpcmUgbW9kaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNjA6XHRcdFx0XHQgKiB0byBhbGwgbmV0ZGV2IFRYIHF1ZXVlcywgc28gdGhhdCBkZXZfcWRpc2NfZW5xdWV1ZSgpXG4yMTYxOlx0XHRcdFx0ICogZ29lcyB0aHJvdWdoIHRhcHJpb19lbnF1ZXVlKCkuXG4yMTYyOlx0XHRcdFx0ICovXG4yMTYzOlx0XHRcdFx0ZGV2X3F1ZXVlX3FkaXNjID0gc2NoO1xuMjE2NDpcdFx0XHR9XG4yMTY1Olx0XHRcdG9sZCA9IGRldl9ncmFmdF9xZGlzYyhkZXZfcXVldWUsIGRldl9xdWV1ZV9xZGlzYyk7XG4yMTY2Olx0XHRcdC8qIFRoZSBxZGlzYyYjMzk7cyByZWZjb3VudCByZXF1aXJlcyB0byBiZSBlbGV2YXRlZCBvbmNlXG4yMTY3Olx0XHRcdCAqIGZvciBlYWNoIG5ldGRldiBUWCBxdWV1ZSBpdCBpcyBncmFmdGVkIG9udG9cbjIxNjg6XHRcdFx0ICovXG4yMTY5Olx0XHRcdHFkaXNjX3JlZmNvdW50X2luYyhkZXZfcXVldWVfcWRpc2MpO1xuMjE3MDpcdFx0XHRpZiAob2xkKVxuMjE3MTpcdFx0XHRcdHFkaXNjX3B1dChvbGQpO1xuMjE3MjpcdFx0fVxuMjE3MzpcdH1cbjIxNzQ6XHRcbjIxNzU6XHRzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqdGFwcmlvX3F1ZXVlX2dldChzdHJ1Y3QgUWRpc2MgKnNjaCxcbjIxNzY6XHRcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGNsKVxuMjE3NzpcdHtcbjIxNzg6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcbjIxNzk6XHRcdHVuc2lnbmVkIGxvbmcgbnR4ID0gY2wgLSAxO1xuMjE4MDpcdFxuMjE4MTpcdFx0aWYgKG50eCBcdTAwM2U9IGRldi1cdTAwM2VudW1fdHhfcXVldWVzKVxuMjE4MjpcdFx0XHRyZXR1cm4gTlVMTDtcbjIxODM6XHRcbjIxODQ6XHRcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgbnR4KTtcbjIxODU6XHR9XG4yMTg2Olx0XG4yMTg3Olx0c3RhdGljIGludCB0YXByaW9fZ3JhZnQoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXG4yMTg4Olx0XHRcdFx0c3RydWN0IFFkaXNjICpuZXcsIHN0cnVjdCBRZGlzYyAqKm9sZCxcbjIxODk6XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4yMTkwOlx0e1xuMjE5MTpcdFx0c3RydWN0IHRhcHJpb19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbjIxOTI6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcbjIxOTM6XHRcdHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSA9IHRhcHJpb19xdWV1ZV9nZXQoc2NoLCBjbCk7XG4yMTk0Olx0XG4yMTk1Olx0XHRpZiAoIWRldl9xdWV1ZSlcbjIxOTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMTk3Olx0XG4yMTk4Olx0XHRpZiAoIW5ldylcbjIxOTk6XHRcdFx0bmV3ID0gXHUwMDI2bm9vcF9xZGlzYztcbjIyMDA6XHRcbjIyMDE6XHRcdGlmIChkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUClcbjIyMDI6XHRcdFx0ZGV2X2RlYWN0aXZhdGUoZGV2LCBmYWxzZSk7XG4yMjAzOlx0XG4yMjA0Olx0XHQvKiBJbiBvZmZsb2FkIG1vZGUsIHRoZSBjaGlsZCBRZGlzYyBpcyBkaXJlY3RseSBhdHRhY2hlZCB0byB0aGUgbmV0ZGV2XG4yMjA1Olx0XHQgKiBUWCBxdWV1ZSwgYW5kIHRodXMsIHdlIG5lZWQgdG8ga2VlcCBpdHMgcmVmY291bnQgZWxldmF0ZWQgaW4gb3JkZXJcbjIyMDY6XHRcdCAqIHRvIGNvdW50ZXJhY3QgcWRpc2NfZ3JhZnQoKSYjMzk7cyBjYWxsIHRvIHFkaXNjX3B1dCgpIG9uY2UgcGVyIFRYIHF1ZXVlLlxuMjIwNzpcdFx0ICogSG93ZXZlciwgc2F2ZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBuZXcgcWRpc2MgaW4gdGhlIHByaXZhdGUgYXJyYXkgaW5cbjIyMDg6XHRcdCAqIGJvdGggc29mdHdhcmUgYW5kIG9mZmxvYWQgY2FzZXMsIHRvIGhhdmUgYW4gdXAtdG8tZGF0ZSByZWZlcmVuY2UgdG9cbjIyMDk6XHRcdCAqIG91ciBjaGlsZHJlbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgYHRhcHJpb19pbml0YCBpbiB0aGUgTmV0ZmlsdGVyIFNjaGVkdWxlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgdGhlIFRBUFJJTyBzY2hlZHVsZXIgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCBieSBwaW5wb2ludGluZyB0aGUgc291cmNlIGZpbGUuICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7IHNvdW5kcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbG9jYXRpb24uIEdpdmVuIHdoYXQgSSBrbm93IGFib3V0IHRoZSB0eXBpY2FsIHN0cnVjdHVyZSBvZiB0aGUgTGludXgga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2ssIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBUQVBSSU8gY29kZS4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSB0aGUgaW5pdCBmdW5jdGlvbiBpdHNlbGYuIFR5cGljYWxseSwgaXTigJlzIG5hbWVkIHNvbWV0aGluZyBsaWtlIGB0YXByaW9faW5pdGAgb3IgYHRhcHJpb19tb2R1bGVfaW5pdGAuIE9uY2UgSSBoYXZlIHRoZSBmaWxlIG5hbWUsIGl0JiMzOTtzIGp1c3QgYSBtYXR0ZXIgb2Ygc2VhcmNoaW5nIGZvciBpdC4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHJlZ2lzdGVyZWQgYW5kIHBvdGVudGlhbGx5IGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY2hlZHVsZXImIzM5O3Mgb3ZlcmFsbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhbmQgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIG1vZHVsZSBsb2Fkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGludCB0YXByaW9faW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0yMDM1PXN0YXRpYyB2b2lkIHRhcHJpb19kZXN0cm95KHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA3My1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA3NDpzdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNzUtXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDM5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkluaXRpYWwgVGhvdWdodHMgb24gYHRhcHJpb19pbml0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBpbnRvIGl0LiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyB0dXJuaW5nIG15IGF0dGVudGlvbiB0byB0aGUgYHRhcHJpb19pbml0YCBwYXJ0IG9mIHRoZSBjb2RlLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQuIEkga25vdyB0aGlzIHBhcnRpY3VsYXIgcGllY2UgbGlrZWx5IHNldHMgdGhlIGZvdW5kYXRpb24sIGluaXRpYWxpemVzIHRoZSBjb3JlIGNvbXBvbmVudHMsIGFuZCBwcmVwYXJlcyB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSByZXN0IG9mIHRoZSBleGVjdXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydCBwZXJmZWN0bHkgYmVjYXVzZSBJIHdpbGwgbmVlZCBpdCB0byBpbmZvcm0gZXZlcnl0aGluZyBlbHNlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBiZWdpbnMsIG9yIGF0IGxlYXN0LCB0aGlzIGlzIHRoZSBsYXVuY2hwYWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwNzQ6XHRzdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4yMDc1Olx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4yMDc2Olx0e1xuMjA3NzpcdFx0c3RydWN0IHRhcHJpb19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbjIwNzg6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcbjIwNzk6XHRcdGludCBpLCB0YztcbjIwODA6XHRcbjIwODE6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnEtXHUwMDNlY3VycmVudF9lbnRyeV9sb2NrKTtcbjIwODI6XHRcbjIwODM6XHRcdGhydGltZXJfc2V0dXAoXHUwMDI2cS1cdTAwM2VhZHZhbmNlX3RpbWVyLCBhZHZhbmNlX3NjaGVkLCBDTE9DS19UQUksIEhSVElNRVJfTU9ERV9BQlMpO1xuMjA4NDpcdFxuMjA4NTpcdFx0cS1cdTAwM2Vyb290ID0gc2NoO1xuMjA4NjpcdFxuMjA4NzpcdFx0LyogV2Ugb25seSBzdXBwb3J0IHN0YXRpYyBjbG9ja2lkcy4gVXNlIGFuIGludmFsaWQgdmFsdWUgYXMgZGVmYXVsdFxuMjA4ODpcdFx0ICogYW5kIGdldCB0aGUgdmFsaWQgb25lIG9uIHRhcHJpb19jaGFuZ2UoKS5cbjIwODk6XHRcdCAqL1xuMjA5MDpcdFx0cS1cdTAwM2VjbG9ja2lkID0gLTE7XG4yMDkxOlx0XHRxLVx1MDAzZWZsYWdzID0gVEFQUklPX0ZMQUdTX0lOVkFMSUQ7XG4yMDkyOlx0XG4yMDkzOlx0XHRsaXN0X2FkZChcdTAwMjZxLVx1MDAzZXRhcHJpb19saXN0LCBcdTAwMjZ0YXByaW9fbGlzdCk7XG4yMDk0Olx0XG4yMDk1Olx0XHRpZiAoc2NoLVx1MDAzZXBhcmVudCAhPSBUQ19IX1JPT1QpIHtcbjIwOTY6XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Q2FuIG9ubHkgYmUgYXR0YWNoZWQgYXMgcm9vdCBxZGlzY1wmIzM0Oyk7XG4yMDk3Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjIwOTg6XHRcdH1cbjIwOTk6XHRcbjIxMDA6XHRcdGlmICghbmV0aWZfaXNfbXVsdGlxdWV1ZShkZXYpKSB7XG4yMTAxOlx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O011bHRpLXF1ZXVlIGRldmljZSBpcyByZXF1aXJlZFwmIzM0Oyk7XG4yMTAyOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjIxMDM6XHRcdH1cbjIxMDQ6XHRcbjIxMDU6XHRcdHEtXHUwMDNlcWRpc2NzID0ga3phbGxvY19vYmpzKHEtXHUwMDNlcWRpc2NzWzBdLCBkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XG4yMTA2Olx0XHRpZiAoIXEtXHUwMDNlcWRpc2NzKVxuMjEwNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIxMDg6XHRcbjIxMDk6XHRcdGlmICghb3B0KVxuMjExMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjIxMTE6XHRcbjIxMTI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuMjExMzpcdFx0XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWU7XG4yMTE0Olx0XHRcdHN0cnVjdCBRZGlzYyAqcWRpc2M7XG4yMTE1Olx0XG4yMTE2Olx0XHRcdGRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBpKTtcbjIxMTc6XHRcdFx0cWRpc2MgPSBxZGlzY19jcmVhdGVfZGZsdChkZXZfcXVldWUsXG4yMTE4Olx0XHRcdFx0XHRcdCAgXHUwMDI2cGZpZm9fcWRpc2Nfb3BzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM2MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHRhcHJpb19pbml0YCBhbmQgYHRhcHJpb19jaGFuZ2VgIFJlbGF0aW9uc2hpcCoqCgpBbHJpZ2h0LCBJIHNlZSBhIHBvdGVudGlhbCBkZXBlbmRlbmN5IGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB0YXByaW9faW5pdGAgbWlnaHQgYmUgaW52b2tpbmcgYHRhcHJpb19jaGFuZ2VgIHNvbWV0aW1lIGFmdGVyIGl0cyBpbml0aWFsIGV4ZWN1dGlvbi4gVGhpcyB3YXJyYW50cyBhIHF1aWNrIHZlcmlmaWNhdGlvbi4gVG8gY29uZmlybSB0aGlzIGh1bmNoLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3MgcGlucG9pbnQgdGhlIHJlbGV2YW50IHNlY3Rpb24uIEkmIzM5O2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiBsaW5lcyAyMTIwIHRocm91Z2ggMjE1MC4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgY29udGFpbiB0aGUgc21va2luZyBndW4gb3IsIGNvbnZlcnNlbHksIGNsZWFyIHVwIG15IHN1c3BpY2lvbi4gSSYjMzk7bSBsb29raW5nIGZvciBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsIG9yIGEgbW9yZSBpbmRpcmVjdCBtZWNoYW5pc20gdGhhdCB3b3VsZCB0cmlnZ2VyIGB0YXByaW9fY2hhbmdlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTIwOlx0XHRcdFx0XHRcdFx0ICAgIFRDX0hfTUlOKGkgJiM0MzsgMSkpLFxuMjEyMTpcdFx0XHRcdFx0XHQgIGV4dGFjayk7XG4yMTIyOlx0XHRcdGlmICghcWRpc2MpXG4yMTIzOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMTI0Olx0XG4yMTI1Olx0XHRcdGlmIChpIFx1MDAzYyBkZXYtXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKVxuMjEyNjpcdFx0XHRcdHFkaXNjX2hhc2hfYWRkKHFkaXNjLCBmYWxzZSk7XG4yMTI3Olx0XG4yMTI4Olx0XHRcdHEtXHUwMDNlcWRpc2NzW2ldID0gcWRpc2M7XG4yMTI5Olx0XHR9XG4yMTMwOlx0XG4yMTMxOlx0XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIFRDX1FPUFRfTUFYX1FVRVVFOyB0YyYjNDM7JiM0MzspXG4yMTMyOlx0XHRcdHEtXHUwMDNlZnBbdGNdID0gVENfRlBfRVhQUkVTUztcbjIxMzM6XHRcbjIxMzQ6XHRcdHRhcHJpb19kZXRlY3RfYnJva2VuX21xcHJpbyhxKTtcbjIxMzU6XHRcbjIxMzY6XHRcdHJldHVybiB0YXByaW9fY2hhbmdlKHNjaCwgb3B0LCBleHRhY2spO1xuMjEzNzpcdH1cbjIxMzg6XHRcbjIxMzk6XHRzdGF0aWMgdm9pZCB0YXByaW9fYXR0YWNoKHN0cnVjdCBRZGlzYyAqc2NoKVxuMjE0MDpcdHtcbjIxNDE6XHRcdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4yMTQyOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XG4yMTQzOlx0XHR1bnNpZ25lZCBpbnQgbnR4O1xuMjE0NDpcdFxuMjE0NTpcdFx0LyogQXR0YWNoIHVuZGVybHlpbmcgcWRpc2MgKi9cbjIxNDY6XHRcdGZvciAobnR4ID0gMDsgbnR4IFx1MDAzYyBkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgbnR4JiM0MzsmIzQzOykge1xuMjE0NzpcdFx0XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgbnR4KTtcbjIxNDg6XHRcdFx0c3RydWN0IFFkaXNjICpvbGQsICpkZXZfcXVldWVfcWRpc2M7XG4yMTQ5Olx0XG4yMTUwOlx0XHRcdGlmIChGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSkge1xuMjE1MTpcdFx0XHRcdHN0cnVjdCBRZGlzYyAqcWRpc2MgPSBxLVx1MDAzZXFkaXNjc1tudHhdO1xuMjE1MjpcdFxuMjE1MzpcdFx0XHRcdC8qIEluIG9mZmxvYWQgbW9kZSwgdGhlIHJvb3QgdGFwcmlvIHFkaXNjIGlzIGJ5cGFzc2VkXG4yMTU0Olx0XHRcdFx0ICogYW5kIHRoZSBuZXRkZXYgVFggcXVldWVzIHNlZSB0aGUgY2hpbGRyZW4gZGlyZWN0bHlcbjIxNTU6XHRcdFx0XHQgKi9cbjIxNTY6XHRcdFx0XHRxZGlzYy1cdTAwM2VmbGFncyB8PSBUQ1FfRl9PTkVUWFFVRVVFIHwgVENRX0ZfTk9QQVJFTlQ7XG4yMTU3Olx0XHRcdFx0ZGV2X3F1ZXVlX3FkaXNjID0gcWRpc2M7XG4yMTU4Olx0XHRcdH0gZWxzZSB7XG4yMTU5Olx0XHRcdFx0LyogSW4gc29mdHdhcmUgbW9kZSwgYXR0YWNoIHRoZSByb290IHRhcHJpbyBxZGlzY1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI0MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRhcHJpbyBTY2hlZHVsZSBQYXRjaDogQSBEZWVwIERpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBsb29rcyBsaWtlIGEgc29saWQgdmFsaWRhdGlvbiBmaXgsIGFuZCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCB0aGUgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZnVuY3Rpb24gYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBgY3ljbGVfdGltZWAgcGFyYW1ldGVyLgoKUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIGEgYml0IGxheC4gSXQgd291bGQgb25seSBjYWxjdWxhdGUgdGhlIGBjeWNsZWAgKHRoZSB0b3RhbCBzdW0gb2YgYWxsIHNjaGVkdWxlIGVudHJ5IGludGVydmFscykgKmlmKiBgbmV3LSZndDtjeWNsZV90aW1lYCB3YXNuJiMzOTt0IGFscmVhZHkgc2V0LiBUaGVuLCBpdCBjaGVja2VkIGZvciBpbnRlZ2VyIG92ZXJmbG93cy4gTm93LCB0aGUgcGF0Y2ggKmFsd2F5cyogY2FsY3VsYXRlcyBgY3ljbGVgLiBJdCAqYWx3YXlzKiBjaGVja3MgZm9yIG92ZXJmbG93LiBBbmQsIGNyaXRpY2FsbHksIGl0IGFkZHMgYSBuZXcgY2hlY2s6IElmIGEgdXNlciBoYXMgZXhwbGljaXRseSBwcm92aWRlZCBgbmV3LSZndDtjeWNsZV90aW1lYCAqYW5kKiB0aGlzIHByb3ZpZGVkIHZhbHVlIGlzICpsZXNzKiB0aGFuIHRoZSBjYWxjdWxhdGVkIGBjeWNsZWAsIHRoZSBjb25maWd1cmF0aW9uIGlzIG5vdyByZWplY3RlZCB3aXRoIGFuIGAtRUlOVkFMYCBhbmQgYW4gaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZS4gVGhpcyBpcyBpbXBvcnRhbnQsIGEgYGN5Y2xlX3RpbWVgIHNob3J0ZXIgdGhhbiB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFscyBpcyBsb2dpY2FsbHkgaW52YWxpZC4gVGhpcyBlZmZlY3RpdmVseSB0aWdodGVucyB1cCBpbnB1dCB2YWxpZGF0aW9uLgoKRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgdGhlIHBhdGNoIHNlZW1zIHNwb3Qtb24uIEl0JiMzOTtzIGZpeGluZyBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGhvdyBgdGFwcmlvYCBzY2hlZHVsZXMgYXJlIGNvbmZpZ3VyZWQgdmlhIG5ldGxpbmsgYnkgZW5zdXJpbmcgdGhhdCB0aGUgZ2l2ZW4gYGN5Y2xlX3RpbWVgIGlzIHZhbGlkIHdpdGggdGhlIHN1bSBvZiB0aGUgc2NoZWR1bGluZyBlbnRyaWVzLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFuZCBzZW5zaWJsZSBhZGRpdGlvbiwgZW5zdXJpbmcgdGhhdCBhIHZhbGlkIHNjaGVkdWxlIGlzIGFsd2F5cyB1c2VkLgoKTm93LCBjb25zaWRlcmluZyByZWFjaGFiaWxpdHksIHRoaXMgaXMgdG90YWxseSB3aXRoaW4gdGhlIHJlYWxtIG9mIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGB0YXByaW9gIHFkaXNjIGlzIGVudGlyZWx5IHNvZnR3YXJlLWJhc2VkLiBXZSBjYW4gY3JlYXRlIGR1bW15IGludGVyZmFjZXMsIHZldGggcGFpcnMsIG9yIGV2ZW4gdGFwIGRldmljZXMsIGFuZCB1c2UgYHRjYCB0byBhdHRhY2ggYSBgdGFwcmlvYCBxZGlzYyB0byB0aGVtLiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IHN0YW5kYXJkIExpbnV4IG5ldHdvcmtpbmcgdG9vbGluZyBlYXNpbHkgc3VwcG9ydHMsIGFuZCBzeXprYWxsZXIsIGJhc2VkIG9uIHRoZSBub3RlcywgaXMgYSBuYXR1cmFsIGZpdCBoZXJlLiBBbnkgdXNlciB3aXRoIHRoZSBgQ0FQX05FVF9BRE1JTmAgY2FwYWJpbGl0eSBjYW4gc2V0IHRoaXMgdXAuCgpUaGUgcXVlc3Rpb24gb2YgZnV6emluZyBpcyBhIG5hdHVyYWwgZm9sbG93LXVwLiBCYXNlZCBvbiB0aGUgY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBJdCBtb2RpZmllcyBjb3JlIHRyYWZmaWMgY29udHJvbCBzY2hlZHVsaW5nIGxvZ2ljLCBtYWtpbmcgaXQgYSBwb3RlbnRpYWxseSBmcnVpdGZ1bCB0YXJnZXQuIFdlIGFyZSBjaGFuZ2luZyB2YWxpZGF0aW9uIGFuZCBlcnJvciBwYXRocywgYW5kIGl0IGlzIG5vdCBoYXJkd2FyZS1zcGVjaWZpYywgcHVyZWx5IHNvZnR3YXJlLgoKVG8gZGV0ZXJtaW5lIGlmIGZ1enppbmcgaXMgdmlhYmxlLCBteSBuZXh0IHN0ZXAgaXMgZW5zdXJpbmcgdGhlIGNvbmZpZ3MgYXJlIGNvcnJlY3QgYW5kIHJlYWNoYWJsZS4gSSYjMzk7bGwgbmVlZCBgQ09ORklHX05FVF9TQ0hfVEFQUklPYC4gSSBzZWUgaXQgZGVwZW5kcyBvbiBgTkVUX1NDSEVEYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBORVRgLiBBbHNvIHRoZXJlIGlzIGEgc2VsZWN0IG9uIGBORVRfU0NIX01RUFJJT19MSUJgLiBJIHdvdWxkIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIGRlcGVuZGVuY2llcyBhbmQgYCNpZmRlZmAgZGlyZWN0aXZlcyBpbiB0aGUgc291cmNlIGZpbGUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIGZvciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgd2l0aGluIGBzY2hfdGFwcmlvLmNgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBmaWxlIHJlbGllcyBvbiBhbnkgc3BlY2lmaWMgYENPTkZJR19gIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBUaGlzIGlzIGEgc3RhbmRhcmQgZmlyc3Qgc3RlcCB3aGVuIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYWJpbGl0eSBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd2l0aGluIGEga2VybmVsIG1vZHVsZSBvciBkcml2ZXIuIEl0IGFsbG93cyBtZSB0byBwaW5wb2ludCB3aGljaCBwYXJ0cyBvZiB0aGUgY29kZSBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGVzZSByZWxhdGlvbnNoaXBzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZywgcG9ydGluZywgYW5kIGdlbmVyYWxseSB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb250ZXh0LiBUaW1lIHRvIGdldCBteSBncmVwIG9uIGFuZCBzZWUgd2hhdCB3ZSYjMzk7cmUgd29ya2luZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwMTUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipDaGVja2luZyBgbmV0L3NjaGVkL0tjb25maWdgIGZvciBgTkVUX1NDSF9UQVBSSU9gIGFuZCBEZXBlbmRlbmNpZXMqKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVHJhZmZpYyBBd2FyZSBQcmlvcml0eSBTY2hlZHVsaW5nIChUQVBSSU8pIHdpdGhpbiB0aGUgTGludXggbmV0d29ya2luZyBzdGFjay4gTXkgZmlyc3QgbW92ZSBpcyB0byBkaXZlIGludG8gYG5ldC9zY2hlZC9LY29uZmlnYC4gSSBhbHJlYWR5IGtub3cgdGhlIGdlbmVyYWwgbGF5b3V0IG9mIHRoZSBuZXR3b3JraW5nIEtjb25maWcgZmlsZXMsIHNvIEkgY2FuIHF1aWNrbHkgbmF2aWdhdGUgdG8gdGhhdCBkaXJlY3RvcnkuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBORVRfU0NIX1RBUFJJT2Agb3B0aW9uIGRpcmVjdGx5IOKAkyB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IHRhcmdldC4gSSBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBkZWZpbmVkIGFuZCB3aGF0IGl0cyBkZWZhdWx0IHNldHRpbmcgaXMuCgpCZXlvbmQgdGhlIGNvcmUgb3B0aW9uLCBJICptdXN0KiBpbW1lZGlhdGVseSBjaGVjayBmb3IgYW55IGRlcGVuZGVuY2llcy4gSSBoYXZlIHRvIGtub3cgKndoYXQqIG90aGVyIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBhcmUgcmVxdWlyZWQgYmVmb3JlIFRBUFJJTyBjYW4gYmUgc2VsZWN0ZWQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgYW5kIHBvdGVudGlhbCBidWlsZCBkZXBlbmRlbmNpZXMuIEnigJlsbCBsb29rIGZvciB0aGluZ3MgbGlrZSwgZG9lcyBpdCByZXF1aXJlIGEgc3BlY2lmaWMgcXVldWluZyBkaXNjaXBsaW5lIG9yIGEgY29yZSBzY2hlZHVsZXIgZmVhdHVyZT8gQW55IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGFyZSBrZXkgaGVyZS4gSSYjMzk7bGwgYWxzbyBiZSBtaW5kZnVsIG9mIGdlbmVyYWwgYE5FVF9TQ0hFRGAgZGVwZW5kZW5jaWVzLCBhcyBUQVBSSU8gaXMgYSBzY2hlZHVsaW5nIGRpc2NpcGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz0xNjc9Y29uZmlnIE5FVF9TQ0hfTVFQUklPX0xJQlxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTE3MS1cbm5ldC9zY2hlZC9LY29uZmlnOjE3Mjpjb25maWcgTkVUX1NDSF9UQVBSSU9cbm5ldC9zY2hlZC9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O1RpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXCYjMzQ7XG4tLVxubmV0L3NjaGVkL01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19ORVRfU0NIX0VURilcdCYjNDM7PSBzY2hfZXRmLm9cbm5ldC9zY2hlZC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfTkVUX1NDSF9UQVBSSU8pXHQmIzQzOz0gc2NoX3RhcHJpby5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX05FVF9TQ0hfQlBGKVx0JiM0Mzs9IGJwZl9xZGlzYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTEwCgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFRhcHJpbyBTY2hlZHVsZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBORVRfU0NIX1RBUFJJT2AgYW5kIGBORVRfU0NIRURgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4gaGVyZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgc28gSSYjMzk7bGwgY2hlY2sgb3V0IHdoYXQgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gVW5kZXJzdGFuZGluZyB0aG9zZSBmdW5jdGlvbnMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIHNjaGVkdWxlciBvcGVyYXRlcyB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/W2EtekEtWl8wLTldJiM0MzsgW2EtekEtWl8wLTldJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMzQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjM1OnN0YXRpYyBMSVNUX0hFQUQodGFwcmlvX2xpc3QpO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0zNi1zdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgdGFwcmlvX2hhdmVfYnJva2VuX21xcHJpbztcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTExND1zdHJ1Y3QgX190Y190YXByaW9fcW9wdF9vZmZsb2FkIHtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExOC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTE5OnN0YXRpYyB2b2lkIHRhcHJpb19jYWxjdWxhdGVfZ2F0ZV9kdXJhdGlvbnMoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTIwLVx0XHRcdFx0XHQgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNjMtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE2NDpzdGF0aWMgYm9vbCB0YXByaW9fZW50cnlfYWxsb3dzX3R4KGt0aW1lX3Qgc2tiX2VuZF90aW1lLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNjUtXHRcdFx0XHQgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCBpbnQgdGMpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNjktXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3MDpzdGF0aWMga3RpbWVfdCBzY2hlZF9iYXNlX3RpbWUoY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzctXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3ODpzdGF0aWMga3RpbWVfdCB0YXByaW9fbW9ub190b19hbnkoY29uc3Qgc3RydWN0IHRhcHJpb19zY2hlZCAqcSwga3RpbWVfdCBtb25vKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzkte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkwLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxOTE6c3RhdGljIGt0aW1lX3QgdGFwcmlvX2dldF90aW1lKGNvbnN0IHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5Mi17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTUtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE5NjpzdGF0aWMgdm9pZCB0YXByaW9fZnJlZV9zY2hlZF9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5Ny17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwOTpzdGF0aWMgdm9pZCBzd2l0Y2hfc2NoZWR1bGVzKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxMC1cdFx0XHQgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKiphZG1pbixcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyMy0vKiBHZXQgaG93IG11Y2ggdGltZSBoYXMgYmVlbiBhbHJlYWR5IGVsYXBzZWQgaW4gdGhlIGN1cnJlbnQgY3ljbGUuICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIyNDpzdGF0aWMgczMyIGdldF9jeWNsZV90aW1lX2VsYXBzZWQoc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsIGt0aW1lX3QgdGltZSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI1LXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzNC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjM1OnN0YXRpYyBrdGltZV90IGdldF9pbnRlcnZhbF9lbmRfdGltZShzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM2LVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICphZG1pbixcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1Ni1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjU3OnN0YXRpYyBpbnQgbGVuZ3RoX3RvX2R1cmF0aW9uKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIGludCBsZW4pXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1OC17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNjEtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI2MjpzdGF0aWMgaW50IGR1cmF0aW9uX3RvX2xlbmd0aChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCB1NjQgZHVyYXRpb24pXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2My17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNzAtICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI3MTpzdGF0aWMgdm9pZCB0YXByaW9fdXBkYXRlX3F1ZXVlX21heF9zZHUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjcyLVx0XHRcdFx0XHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTMyMz1zdGF0aWMgc3RydWN0IHNjaGVkX2VudHJ5ICpmaW5kX2VudHJ5X3RvX3RyYW5zbWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0zOTktXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjQwMDpzdGF0aWMgYm9vbCBpc192YWxpZF9pbnRlcnZhbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDAxLXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTQxOC0vKiBUaGlzIHJldHVybnMgdGhlIHRzdGFtcCB2YWx1ZSBzZXQgYnkgVENQIGluIHRlcm1zIG9mIHRoZSBzZXQgY2xvY2suICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjQxOTpzdGF0aWMga3RpbWVfdCBnZXRfdGNwX3RzdGFtcChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy00MjAte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDY3LSAqL1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzo0Njg6c3RhdGljIGxvbmcgZ2V0X3BhY2tldF90eHRpbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTQ2OS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy01MzktLyogRGV2aWNlcyB3aXRoIGZ1bGwgb2ZmbG9hZCBhcmUgZXhwZWN0ZWQgdG8gaG9ub3IgdGhpcyBpbiBoYXJkd2FyZSAqL1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzo1NDA6c3RhdGljIGJvb2wgdGFwcmlvX3NrYl9leGNlZWRzX3F1ZXVlX21heF9zZHUoc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU0MS1cdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTYwLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo1NjE6c3RhdGljIGludCB0YXByaW9fZW5xdWV1ZV9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU2Mi1cdFx0XHQgICAgICBzdHJ1Y3QgUWRpc2MgKmNoaWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy01ODEtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjU4MjpzdGF0aWMgaW50IHRhcHJpb19lbnF1ZXVlX3NlZ21lbnRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTgzLVx0XHRcdFx0ICAgIHN0cnVjdCBRZGlzYyAqY2hpbGQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02MjYtICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjYyNzpzdGF0aWMgaW50IHRhcHJpb19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02MjgtXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz02NTY9c3RhdGljIHN0cnVjdCBza19idWZmICp0YXByaW9fcGVlayhzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTY2MS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NjYyOnN0YXRpYyB2b2lkIHRhcHJpb19zZXRfYnVkZ2V0cyhzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjMtXHRcdFx0ICAgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNjgyLS8qIFdoZW4gYW4gc2tiIGlzIHNlbnQsIGl0IGNvbnN1bWVzIGZyb20gdGhlIGJ1ZGdldCBvZiBhbGwgdHJhZmZpYyBjbGFzc2VzICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjY4MzpzdGF0aWMgaW50IHRhcHJpb191cGRhdGVfYnVkZ2V0cyhzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCBzaXplX3QgbGVuLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02ODQtXHRcdFx0XHQgaW50IHRjX2NvbnN1bWVkLCBpbnQgbnVtX3RjKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9NzA2PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGFwcmlvX2RlcXVldWVfZnJvbV90eHEoc3RydWN0IFFkaXNjICpzY2gsIGludCB0eHEsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy03NjItXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjc2MzpzdGF0aWMgdm9pZCB0YXByaW9fbmV4dF90Y190eHEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHRjLCBpbnQgKnR4cSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNzY0LXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTgzMz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtODcyLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo4NzM6c3RhdGljIGJvb2wgc2hvdWxkX3Jlc3RhcnRfY3ljbGUoY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqb3Blcixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtODc0LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnkpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04ODQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjg4NTpzdGF0aWMgYm9vbCBzaG91bGRfY2hhbmdlX3NjaGVkdWxlcyhjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICphZG1pbixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtODg2LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMDIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB0YXByaW9fcG9saWN5W1RDQV9UQVBSSU9fQVRUUl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDM3LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDM4OnN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwMzktXHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDY5LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDcwOnN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTA3MS1cdFx0XHQgICAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksIGludCBpbmRleCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwODgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEwODk6c3RhdGljIGludCBwYXJzZV9zY2hlZF9saXN0KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKmxpc3QsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwOTAtXHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEyOC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTEyOTpzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExMzAtXHRcdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE4Mi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTE4MzpzdGF0aWMgaW50IHRhcHJpb19wYXJzZV9tcXByaW9fb3B0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExODQtXHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjEwLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMjExOnN0YXRpYyBpbnQgdGFwcmlvX2dldF9zdGFydF90aW1lKHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjEyLVx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI0NC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTI0NTpzdGF0aWMgdm9pZCBzZXR1cF9maXJzdF9lbmRfdGltZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjQ2LVx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCBrdGltZV90IGJhc2UpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjc0LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMjc1OnN0YXRpYyB2b2lkIHRhcHJpb19zdGFydF9zY2hlZChzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI3Ni1cdFx0XHQgICAgICAga3RpbWVfdCBzdGFydCwgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3KVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI5Ni1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTI5NzpzdGF0aWMgdm9pZCB0YXByaW9fc2V0X3BpY29zX3Blcl9ieXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyOTgtXHRcdFx0XHQgICAgICBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMzMC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTMzMTpzdGF0aWMgaW50IHRhcHJpb19kZXZfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMzMi1cdFx0XHQgICAgICAgdm9pZCAqcHRyKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTM2Ny1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTM2ODpzdGF0aWMgdm9pZCBzZXR1cF90eHRpbWUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTM2OS1cdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsIGt0aW1lX3QgYmFzZSlcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE0MDU9RVhQT1JUX1NZTUJPTF9HUEwodGFwcmlvX29mZmxvYWRfZ2V0KTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQwNi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQwNzp2b2lkIHRhcHJpb19vZmZsb2FkX2ZyZWUoc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKm9mZmxvYWQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MDgte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTQxOT1FWFBPUlRfU1lNQk9MX0dQTCh0YXByaW9fb2ZmbG9hZF9mcmVlKTtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MzItICovXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE0MzM6c3RhdGljIHZvaWQgdGFwcmlvX29mZmxvYWRfY29uZmlnX2NoYW5nZWQoc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQzNC17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDQyLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDQzOnN0YXRpYyB1MzIgdGNfbWFwX3RvX3F1ZXVlX21hc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHRjX21hc2spXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0NDQte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ2MS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQ2MjpzdGF0aWMgdm9pZCB0YXByaW9fc2NoZWRfdG9fb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDYzLVx0XHRcdFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ5MC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQ5MTpzdGF0aWMgdm9pZCB0YXByaW9fZGV0ZWN0X2Jyb2tlbl9tcXByaW8oc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ5Mi17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTA3LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNTA4OnN0YXRpYyB2b2lkIHRhcHJpb19jbGVhbnVwX2Jyb2tlbl9tcXByaW8oc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTUwOS17XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTE4LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNTE5OnN0YXRpYyBpbnQgdGFwcmlvX2VuYWJsZV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1MjAtXHRcdFx0XHQgc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1ODQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE1ODU6c3RhdGljIGludCB0YXByaW9fZGlzYWJsZV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1ODYtXHRcdFx0XHQgIHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNjI1LSAqL1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNjI2OnN0YXRpYyBpbnQgdGFwcmlvX3BhcnNlX2Nsb2NraWQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKip0Yixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTYyNy1cdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MDMtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3MDQ6c3RhdGljIGludCB0YXByaW9fcGFyc2VfdGNfZW50cnkoc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MDUtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTc1MC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTc1MTpzdGF0aWMgaW50IHRhcHJpb19wYXJzZV90Y19lbnRyaWVzKHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzUyLVx0XHRcdFx0ICAgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTgwMC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTgwMTpzdGF0aWMgaW50IHRhcHJpb19tcXByaW9fY21wKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MDItXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKm1xcHJpbylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MjQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE4MjU6c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MjYtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwMTktXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwMjA6c3RhdGljIHZvaWQgdGFwcmlvX3Jlc2V0KHN0cnVjdCBRZGlzYyAqc2NoKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDIxLXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwMzQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwMzU6c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwMzYte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA3My1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA3NDpzdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNzUtXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTM4LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMTM5OnN0YXRpYyB2b2lkIHRhcHJpb19hdHRhY2goc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNDAte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjE3NT1zdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqdGFwcmlvX3F1ZXVlX2dldChzdHJ1Y3QgUWRpc2MgKnNjaCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxODYtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIxODc6c3RhdGljIGludCB0YXByaW9fZ3JhZnQoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxODgtXHRcdFx0c3RydWN0IFFkaXNjICpuZXcsIHN0cnVjdCBRZGlzYyAqKm9sZCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyMjktXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIyMzA6c3RhdGljIGludCBkdW1wX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyMzEtXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnkpXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjU5LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMjYwOnN0YXRpYyBpbnQgZHVtcF9zY2hlZHVsZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjYxLVx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpyb290KVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI5NS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjI5NjpzdGF0aWMgaW50IHRhcHJpb19kdW1wX3RjX2VudHJpZXMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI5Ny1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzMjgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIzMjk6c3RhdGljIGludCB0YXByaW9fcHV0X3N0YXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IHZhbCwgdTE2IGF0dHJ0eXBlKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzMwLXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzMzctXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIzMzg6c3RhdGljIGludCB0YXByaW9fZHVtcF94c3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBnbmV0X2R1bXAgKmQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzMzktXHRcdFx0ICAgICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKm9mZmxvYWQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzg1LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMzg2OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfc3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBnbmV0X2R1bXAgKmQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzODcte1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM5NC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjM5NTpzdGF0aWMgaW50IHRhcHJpb19kdW1wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzk2LXtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI0Nzc9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGFwcmlvX2ZpbmQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjQ4NS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjQ4NjpzdGF0aWMgaW50IHRhcHJpb19kdW1wX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDg3LVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjbXNnICp0Y20pXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDk3LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNDk4OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfY2xhc3Nfc3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0OTktXHRcdFx0XHQgICBzdHJ1Y3QgZ25ldF9kdW1wICpkKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjUxNy1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjUxODpzdGF0aWMgdm9pZCB0YXByaW9fd2FsayhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFkaXNjX3dhbGtlciAqYXJnKVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTE5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyODkKCQkJCQkJCW91dHB1dDogMTM3CgkJCQkJCQl0aG91Z2h0czogMzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgc2NoX3RhcHJpby5jYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSByZXZpZXdpbmcgdGhlIGNvcmUgaW5zdHJ1Y3Rpb24gYWJvdXQgZm9jdXNpbmcgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGlzIG1lYW5zIEkmIzM5O20gbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSAqbm90KiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgdGhlcmVmb3JlIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgbWFraW5nIHRoZW0gaW50ZXJlc3RpbmcgZm9yIHRoZSBhbmFseXNpcy4KCkkmIzM5O20gc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBzY2hfdGFwcmlvLmNgLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIFFkaXNjIG9wZXJhdGlvbnMgZnVuY3Rpb25zLCBsaWtlIGB0YXByaW9faW5pdGAsIGB0YXByaW9fY2hhbmdlYCwgYW5kIGB0YXByaW9fZHVtcGAsIGFyZSByZWZlcmVuY2VkIGJ5IGZ1bmN0aW9uIHBvaW50ZXJzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdGFwcmlvX3FkaXNjX29wc2Agc3RydWN0LiBCZWNhdXNlIGlmIHRoZXkgKmFyZSogcmVmZXJlbmNlZCBpbiB0aGF0IHdheSAobGlrZSBgdGFwcmlvX2luaXRgLCBgdGFwcmlvX2NoYW5nZWAsIGB0YXByaW9fZHVtcGAsIGB0YXByaW9fZGVzdHJveWApLCB0aGUgY29tcGlsZXIgKmNhbiYjMzk7dCogaW5saW5lIHRoZW07IHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4sIHdoaWNoIGlzIHBlcmZlY3QgZm9yIG15IHB1cnBvc2UuCgpBbmQsIG9mIGNvdXJzZSwgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYWN0dWFsbHkgYmVlbiBtb2RpZmllZCBieSB0aGUgcGF0Y2guIFNvLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGB0YXByaW9faW5pdGAsIGB0YXByaW9fY2hhbmdlYCwgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIGFyZSBpbmRlZWQgZ29vZCBjYW5kaWRhdGVzIGFzIGZvY3VzIHN5bWJvbHMsIGdpdmVuIHRoZWlyIHBvdGVudGlhbCB0byBtZWV0IHRoZSBpbml0aWFsIGNyaXRlcmlhLgoKQmVmb3JlIGdvaW5nIGZ1cnRoZXIsIEkgc2hvdWxkIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE1ha2Ugc3VyZSBgTkVUX1NDSEVEYCBhbmQgYE5FVF9TQ0hfVEFQUklPYCBhcmUgZW5hYmxlZCDigJMgYWx3YXlzIGdvb2QgdG8gdmVyaWZ5IHRoZXNlIHRoaW5ncy4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSBjb3JlIGNoYW5nZTogdGhlIHBhdGNoIHVwZGF0ZXMgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgd2l0aGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gVGhpcyB1cGRhdGUgcHJpbWFyaWx5IGFkZHJlc3NlcyB0aGUgdmFsaWRhdGlvbiBvZiBgY3ljbGVfdGltZWAgYWdhaW5zdCB0aGUgc3VtIG9mIHRoZSBzY2hlZHVsZSBlbnRyeSBpbnRlcnZhbHMsIGVuc3VyaW5nIGJvdGggdGhlIHN1bSBhbmQgdGltZSBhcmUgY2hlY2tlZCBmb3Igb3ZlcmZsb3cuIFRoaXMgaXMgYSBjcnVjaWFsIHRyYWZmaWMgY29udHJvbCBzY2hlZHVsaW5nIG1vZGlmaWNhdGlvbiwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgcnRubCBuZXRsaW5rIHNvY2tldCBjb21tYW5kcy4KClllcCwgdGhhdCYjMzk7cyBhbGwgY2xlYXIuIFNlZW1zIGxpa2UgSSYjMzk7dmUgZ290IGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcyBhbmQgdGhlIGtleSBhc3BlY3RzLiBUaW1lIHRvIGNhbGwgaXQgaW4gYW5kIGRvY3VtZW50IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7LAogICAgJiMzNDt0YXByaW9faW5pdCYjMzQ7LAogICAgJiMzNDtwYXJzZV90YXByaW9fc2NoZWR1bGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKCkgaW4gbmV0L3NjaGVkL3NjaF90YXByaW8uYyB0byB1bmNvbmRpdGlvbmFsbHkgdmFsaWRhdGUgdGhlIGN5Y2xlIHRpbWUgYWdhaW5zdCB0aGUgc3VtIG9mIHNjaGVkdWxlIGVudHJ5IGludGVydmFscyBhbmQgY2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3cuIFRoaXMgYWZmZWN0cyBzY2hlZHVsZSBwYXJhbWV0ZXIgcGFyc2luZyB3aGVuIGNyZWF0aW5nIG9yIG1vZGlmeWluZyBhIHRhcHJpbyBxZGlzYyB2aWEgbmV0bGluaywgd2hpY2ggaXMgZnVsbHkgcmVhY2hhYmxlIGluIHNvZnR3YXJlLWVtdWxhdGVkIG5ldHdvcmtpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX1RBUFJJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RhcHJpb19jaGFuZ2UmIzM0OywKICAgICYjMzQ7dGFwcmlvX2luaXQmIzM0OywKICAgICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpIGluIG5ldC9zY2hlZC9zY2hfdGFwcmlvLmMgdG8gdW5jb25kaXRpb25hbGx5IHZhbGlkYXRlIHRoZSBjeWNsZSB0aW1lIGFnYWluc3QgdGhlIHN1bSBvZiBzY2hlZHVsZSBlbnRyeSBpbnRlcnZhbHMgYW5kIGNoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93LiBUaGlzIGFmZmVjdHMgc2NoZWR1bGUgcGFyYW1ldGVyIHBhcnNpbmcgd2hlbiBjcmVhdGluZyBvciBtb2RpZnlpbmcgYSB0YXByaW8gcWRpc2MgdmlhIG5ldGxpbmssIHdoaWNoIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzb2Z0d2FyZS1lbXVsYXRlZCBuZXR3b3JraW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW5wdXQgdmFsaWRhdGlvbiBpbiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gU3BlY2lmaWNhbGx5LCBpdCBhbHdheXMgY2FsY3VsYXRlcyB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFscyAoYGN5Y2xlYCkgYW5kIHZhbGlkYXRlcyB0aGF0IGBjeWNsZSBcdTAwM2M9IElOVF9NQVhgIGFuZCB0aGF0IHVzZXItc3VwcGxpZWQgYG5ldy1cdTAwM2VjeWNsZV90aW1lYCBpcyBub3QgbGVzcyB0aGFuIGBjeWNsZWAuXG5cbkFsbCBsb2NhbCB2YXJpYWJsZXMgKGBjeWNsZSA9IDBgKSBhbmQgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGBuZXdfYWRtaW5gIHZpYSBga3phbGxvY19vYmooKWApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyBLTVNBTi1zcGVjaWZpYyByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIGFuZCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNmI3OTI3ZDk4ZjZiMzQzZjViMTEzNDM2M2QxMjNlZmIxYWMyNWZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMjM6MDU6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uYwppbmRleCAzOWFjNWI5N2FhM2FmLi4xMzdjZTZmN2E0NzRhIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKQEAgLTExMzAsNiAmIzQzOzExMzAsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsCiAJCQkJIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldywKIAkJCQkgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewomIzQzOwlzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5OwomIzQzOwlrdGltZV90IGN5Y2xlID0gMDsKIAlpbnQgZXJyID0gMDsKIAogCWlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkgewpAQCAtMTE1MiwxOSAmIzQzOzExNTQsMjAgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLAogCWlmIChlcnIgJmx0OyAwKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKCFuZXctJmd0O2N5Y2xlX3RpbWUpIHsKLQkJc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTsKLQkJa3RpbWVfdCBjeWNsZSA9IDA7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFtcDtuZXctJmd0O2VudHJpZXMsIGxpc3QpCi0JCQljeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktJmd0O2ludGVydmFsKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFtcDtuZXctJmd0O2VudHJpZXMsIGxpc3QpCiYjNDM7CQljeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktJmd0O2ludGVydmFsKTsKIAotCQlpZiAoY3ljbGUgJmx0OyAwIHx8IGN5Y2xlICZndDsgSU5UX01BWCkgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0OyYjMzk7Y3ljbGVfdGltZSYjMzk7IGlzIHRvbyBiaWcmIzM0Oyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQomIzQzOwlpZiAoY3ljbGUgJmx0OyAwIHx8IGN5Y2xlICZndDsgSU5UX01BWCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0OyYjMzk7Y3ljbGVfdGltZSYjMzk7IGlzIHRvbyBiaWcmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCiYjNDM7CWlmICghbmV3LSZndDtjeWNsZV90aW1lKQogCQluZXctJmd0O2N5Y2xlX3RpbWUgPSBjeWNsZTsKJiM0MzsKJiM0MzsJaWYgKG5ldy0mZ3Q7Y3ljbGVfdGltZSAmbHQ7IGN5Y2xlKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgbGVzcyB0aGFuIHRoZSBzdW0gb2YgZW50cnkgaW50ZXJ2YWxzJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKG5ldy0mZ3Q7Y3ljbGVfdGltZSAmbHQ7IG5ldy0mZ3Q7bnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDcxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRBUFJJTyBTY2hlZHVsZXIgQ29kZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZSwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGdldCBhIGdvb2QgbG9vayBhdCB0aGUgZGlmZi4gSSYjMzk7bGwgZm9jdXMgaW4gb24gdGhlIGZpbGUgcGF0aCwgYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdGlvbiBpcy4KCk5vdywgaW5zdGVhZCBvZiBqdXN0IHN0YXJpbmcgYXQgdGhlIGRpZmYgYmxpbmRseSwgSSBuZWVkIGNvbnRleHQuIExpbmUgMTEzMCBmZWVscyBsaWtlIGEgcmVhc29uYWJsZSBwb2ludCB0byBzdGFydC4gSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIChvciBgZ3JlcHBlcmAgaWYgSSBuZWVkIHNvbWV0aGluZyBhIGJpdCBtb3JlIHRhcmdldGVkKSB0byBwdWxsIHVwIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZSBhbmQgcmVhZCBhcm91bmQgaXQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbW1lZGlhdGUgaW1wYWN0IG9mIHRoZSBkaWZmIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIFRoZW4gSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IHNlZSBpZiB0aGUgY2hhbmdlcyBtYWtlIHNlbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjA6XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0LCBcdTAwMjZzY2hlZC1cdTAwM2VlbnRyaWVzKTtcbjExMjE6XHRcdFx0aSYjNDM7JiM0Mzs7XG4xMTIyOlx0XHR9XG4xMTIzOlx0XG4xMTI0Olx0XHRzY2hlZC1cdTAwM2VudW1fZW50cmllcyA9IGk7XG4xMTI1Olx0XG4xMTI2Olx0XHRyZXR1cm4gaTtcbjExMjc6XHR9XG4xMTI4Olx0XG4xMTI5Olx0c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuMTEzMDpcdFx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbjExMzE6XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4xMTMyOlx0e1xuMTEzMzpcdFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcbjExMzQ6XHRcdGt0aW1lX3QgY3ljbGUgPSAwO1xuMTEzNTpcdFx0aW50IGVyciA9IDA7XG4xMTM2Olx0XG4xMTM3Olx0XHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0pIHtcbjExMzg6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtBZGRpbmcgYSBzaW5nbGUgZW50cnkgaXMgbm90IHN1cHBvcnRlZFwmIzM0Oyk7XG4xMTM5Olx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4xMTQwOlx0XHR9XG4xMTQxOlx0XG4xMTQyOlx0XHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0JBU0VfVElNRV0pXG4xMTQzOlx0XHRcdG5ldy1cdTAwM2ViYXNlX3RpbWUgPSBubGFfZ2V0X3M2NCh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQkFTRV9USU1FXSk7XG4xMTQ0Olx0XG4xMTQ1Olx0XHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVfRVhURU5TSU9OXSlcbjExNDY6XHRcdFx0bmV3LVx1MDAzZWN5Y2xlX3RpbWVfZXh0ZW5zaW9uID0gbmxhX2dldF9zNjQodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVfRVhURU5TSU9OXSk7XG4xMTQ3Olx0XG4xMTQ4Olx0XHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVdKVxuMTE0OTpcdFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZSA9IG5sYV9nZXRfczY0KHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FXSk7XG4xMTUwOlx0XG4xMTUxOlx0XHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0VOVFJZX0xJU1RdKVxuMTE1MjpcdFx0XHRlcnIgPSBwYXJzZV9zY2hlZF9saXN0KHEsIHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9FTlRSWV9MSVNUXSxcbjExNTM6XHRcdFx0XHRcdCAgICAgICBuZXcsIGV4dGFjayk7XG4xMTU0Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTE1NTpcdFx0XHRyZXR1cm4gZXJyO1xuMTE1NjpcdFxuMTE1NzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2bmV3LVx1MDAzZWVudHJpZXMsIGxpc3QpXG4xMTU4Olx0XHRcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cdTAwM2VpbnRlcnZhbCk7XG4xMTU5Olx0XG4xMTYwOlx0XHRpZiAoY3ljbGUgXHUwMDNjIDAgfHwgY3ljbGUgXHUwMDNlIElOVF9NQVgpIHtcbjExNjE6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnXCYjMzQ7KTtcbjExNjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTYzOlx0XHR9XG4xMTY0Olx0XG4xMTY1Olx0XHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKVxuMTE2NjpcdFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZSA9IGN5Y2xlO1xuMTE2NzpcdFxuMTE2ODpcdFx0aWYgKG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyBjeWNsZSkge1xuMTE2OTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0OyYjMzk7Y3ljbGVfdGltZSYjMzk7IGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFsc1wmIzM0Oyk7XG4xMTcwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTE3MTpcdFx0fVxuMTE3MjpcdFxuMTE3MzpcdFx0aWYgKG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyBuZXctXHUwMDNlbnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7XG4xMTc0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgdG9vIHNtYWxsXCYjMzQ7KTtcbjExNzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTc2Olx0XHR9XG4xMTc3Olx0XG4xMTc4Olx0XHR0YXByaW9fY2FsY3VsYXRlX2dhdGVfZHVyYXRpb25zKHEsIG5ldyk7XG4xMTc5Olx0XG4xMTgwOlx0XHRyZXR1cm4gMDtcbjExODE6XHR9XG4xMTgyOlx0XG4xMTgzOlx0c3RhdGljIGludCB0YXByaW9fcGFyc2VfbXFwcmlvX29wdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuMTE4NDpcdFx0XHRcdFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0LFxuMTE4NTpcdFx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuMTE4NjpcdFx0XHRcdFx0ICAgdTMyIHRhcHJpb19mbGFncylcbjExODc6XHR7XG4xMTg4Olx0XHRib29sIGFsbG93X292ZXJsYXBwaW5nX3R4cXMgPSBUWFRJTUVfQVNTSVNUX0lTX0VOQUJMRUQodGFwcmlvX2ZsYWdzKTtcbjExODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCYjMzk7cyB0aGUgY29yZSBpc3N1ZSBpdCYjMzk7cyBhZGRyZXNzaW5nPyBMZXQmIzM5O3MgZGlzc2VjdCB0aGUgY29kZSBjaGFuZ2VzIHRvIGdyYXNwIHRoZSByYXRpb25hbGUuCgpTbywgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIHRoaXMgY2hlY2s6IGlmIGBuZXctJmd0O2N5Y2xlX3RpbWVgIHdhcyB6ZXJvLCBtZWFuaW5nIG5vdCBleHBsaWNpdGx5IHNldCwgdGhlbiBpdGVyYXRlIHRocm91Z2ggdGhlIGxpc3Qgb2YgZW50cmllcywgc3VtIHRoZWlyIGludGVydmFscyAoYGN5Y2xlYCksIGFuZCB0aGVuIHZhbGlkYXRlIHRoYXQgdGhpcyBjYWxjdWxhdGVkIGBjeWNsZWAgdmFsdWUgaXMgd2l0aGluIGFuIGFjY2VwdGFibGUgcmFuZ2UgKG5vdCBuZWdhdGl2ZSBhbmQgbm90IGV4Y2VlZGluZyBgSU5UX01BWGApLiBJZiBpdCYjMzk7cyB2YWxpZCwgdGhlIGBuZXctJmd0O2N5Y2xlX3RpbWVgIGlzIHVwZGF0ZWQgd2l0aCB0aGlzIGNhbGN1bGF0ZWQgYGN5Y2xlYC4KCk5vdywgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMgbW9yZSBzdHJlYW1saW5lZC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgdW5jb25kaXRpb25hbCBzdW1tYXRpb24gb2YgaW50ZXJ2YWxzLCByZWdhcmRsZXNzIG9mIHRoZSBpbml0aWFsIHZhbHVlIG9mIGBuZXctJmd0O2N5Y2xlX3RpbWVgLiBUaGVuLCB0aGUgc2FtZSBib3VuZGFyeSBjaGVjayBpcyBwZXJmb3JtZWQ6IGlzIGBjeWNsZWAgbmVnYXRpdmUgb3IgdG9vIGxhcmdlPyBJZiBgbmV3LSZndDtjeWNsZV90aW1lYCAqd2FzbiYjMzk7dCogc3BlY2lmaWVkIChtZWFuaW5nIGl0JiMzOTtzIHplcm8pLCBpdCYjMzk7cyBzZXQgdG8gdGhlIGBjeWNsZWAgdmFsdWUsIGFzIGJlZm9yZS4gSG93ZXZlciwgdGhlIGFkZGVkIGNoZWNrIGlzIGlmIGBuZXctJmd0O2N5Y2xlX3RpbWVgICppcyogc3BlY2lmaWVkLCBidXQgaXMgc21hbGxlciB0aGFuIGBjeWNsZWAsIGl0IHJldHVybnMgYW4gZXJyb3IuIFRoaXMgaXMgYSBjcnVjaWFsIHZhbGlkYXRpb24gc3RlcCBJIG1pc3NlZCBlYXJsaWVyOiB3ZSYjMzk7cmUgbWFraW5nIHN1cmUgdGhlIHByb3ZpZGVkIGBjeWNsZV90aW1lYCAoaWYgYW55KSBpcyAqYXQgbGVhc3QqIGFzIGxhcmdlIGFzIHRoZSBzdW0gb2YgYWxsIHRoZSBpbmRpdmlkdWFsIGludGVydmFscy4gVGhpcyBtYWtlcyBzZW5zZSBmcm9tIGEgc2NoZWR1bGluZyBpbnRlZ3JpdHkgcGVyc3BlY3RpdmUuCgpNeSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gdHJhY2UgdGhlIGFsbG9jYXRpb24gb2YgYG5ld2AuIFdoZXJlIGRvZXMgdGhpcyBgbmV3YCBzdHJ1Y3Qgb3JpZ2luYXRlPyBJcyBpdCB1c2VyLXByb3ZpZGVkPyBBbGxvY2F0ZWQgaW4ga2VybmVsIHNwYWNlPyBVbmRlcnN0YW5kaW5nIHRoZSBzb3VyY2UgYW5kIGxpZmUgY3ljbGUgb2YgYG5ld2AgaXMgdml0YWwgdG8gZnVsbHkgYXBwcmVjaWF0ZSB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgYG5ld2AgaXMgY29uc3RydWN0ZWQsIHBvcHVsYXRlZCwgYW5kIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhcnNlX3RhcHJpb19zY2hlZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMDg5PXN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfbGlzdChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpsaXN0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEyOC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTEyOTpzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExMzAtXHRcdFx0XHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTgyNT1zdGF0aWMgaW50IHRhcHJpb19jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MTktXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE5MjA6XHRlcnIgPSBwYXJzZV90YXByaW9fc2NoZWR1bGUocSwgdGIsIG5ld19hZG1pbiwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkyMS1cdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NDQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgQWxsb2NhdGlvbiBhbmQgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gemVyb2luZyBpbiBvbiBhIGNvdXBsZSBvZiBjcnVjaWFsIHBvaW50cyByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd2l0aGluIHRoZSBjb2RlLiBGaXJzdCwgSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgaW1wbGljYXRpb25zIG9mIGB0YXByaW9fY2hhbmdlYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgd2hlcmUgc29tZSBrZXkgc3RhdGUgY2hhbmdlcyBvciBjb25maWd1cmF0aW9ucyB0YWtlIHBsYWNlLCBhbmQgSSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIG1hbmFnZWQgc2FmZWx5LCBlc3BlY2lhbGx5IGFzIHRoZXkgcmVsYXRlIHRvIHJlc291cmNlIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uLiBBbnkgc3VidGxlIGJ1ZyBoZXJlIGNvdWxkIGhhdmUgY2FzY2FkaW5nIGVmZmVjdHMgbGF0ZXIsIHNvIGEgZGVlcCBkaXZlIGlzIHdhcnJhbnRlZC4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgdGhlIGFsbG9jYXRpb24gb2YgYG5ld19hZG1pbmAgYW5kIHdoZXRoZXIgaXQgdXNlcyBga3phbGxvY2Agb3Igc29tZSBvdGhlciBhbGxvY2F0aW9uIG1ldGhvZC4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgYSBjYXJlZnVsIGV4YW1pbmF0aW9uIGlzIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTAwOlx0XHRcdGdvdG8gZnJlZV9zY2hlZDtcbjE5MDE6XHRcdH1cbjE5MDI6XHRcbjE5MDM6XHRcdGlmIChtcXByaW8pIHtcbjE5MDQ6XHRcdFx0ZXJyID0gbmV0ZGV2X3NldF9udW1fdGMoZGV2LCBtcXByaW8tXHUwMDNlbnVtX3RjKTtcbjE5MDU6XHRcdFx0aWYgKGVycilcbjE5MDY6XHRcdFx0XHRnb3RvIGZyZWVfc2NoZWQ7XG4xOTA3Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1xcHJpby1cdTAwM2VudW1fdGM7IGkmIzQzOyYjNDM7KSB7XG4xOTA4Olx0XHRcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShkZXYsIGksXG4xOTA5Olx0XHRcdFx0XHRcdCAgICBtcXByaW8tXHUwMDNlY291bnRbaV0sXG4xOTEwOlx0XHRcdFx0XHRcdCAgICBtcXByaW8tXHUwMDNlb2Zmc2V0W2ldKTtcbjE5MTE6XHRcdFx0XHRxLVx1MDAzZWN1cl90eHFbaV0gPSBtcXByaW8tXHUwMDNlb2Zmc2V0W2ldO1xuMTkxMjpcdFx0XHR9XG4xOTEzOlx0XG4xOTE0Olx0XHRcdC8qIEFsd2F5cyB1c2Ugc3VwcGxpZWQgcHJpb3JpdHkgbWFwcGluZ3MgKi9cbjE5MTU6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IFRDX0JJVE1BU0s7IGkmIzQzOyYjNDM7KVxuMTkxNjpcdFx0XHRcdG5ldGRldl9zZXRfcHJpb190Y19tYXAoZGV2LCBpLFxuMTkxNzpcdFx0XHRcdFx0XHQgICAgICAgbXFwcmlvLVx1MDAzZXByaW9fdGNfbWFwW2ldKTtcbjE5MTg6XHRcdH1cbjE5MTk6XHRcbjE5MjA6XHRcdGVyciA9IHBhcnNlX3RhcHJpb19zY2hlZHVsZShxLCB0YiwgbmV3X2FkbWluLCBleHRhY2spO1xuMTkyMTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjE5MjI6XHRcdFx0Z290byBmcmVlX3NjaGVkO1xuMTkyMzpcdFxuMTkyNDpcdFx0aWYgKG5ld19hZG1pbi1cdTAwM2VudW1fZW50cmllcyA9PSAwKSB7XG4xOTI1Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7VGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBlbnRyeSBpbiB0aGUgc2NoZWR1bGVcJiMzNDspO1xuMTkyNjpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTkyNzpcdFx0XHRnb3RvIGZyZWVfc2NoZWQ7XG4xOTI4Olx0XHR9XG4xOTI5Olx0XG4xOTMwOlx0XHRlcnIgPSB0YXByaW9fcGFyc2VfY2xvY2tpZChzY2gsIHRiLCBleHRhY2spO1xuMTkzMTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjE5MzI6XHRcdFx0Z290byBmcmVlX3NjaGVkO1xuMTkzMzpcdFxuMTkzNDpcdFx0dGFwcmlvX3VwZGF0ZV9xdWV1ZV9tYXhfc2R1KHEsIG5ld19hZG1pbiwgc3RhYik7XG4xOTM1Olx0XG4xOTM2Olx0XHRpZiAoRlVMTF9PRkZMT0FEX0lTX0VOQUJMRUQocS1cdTAwM2VmbGFncykpXG4xOTM3Olx0XHRcdGVyciA9IHRhcHJpb19lbmFibGVfb2ZmbG9hZChkZXYsIHEsIG5ld19hZG1pbiwgZXh0YWNrKTtcbjE5Mzg6XHRcdGVsc2VcbjE5Mzk6XHRcdFx0ZXJyID0gdGFwcmlvX2Rpc2FibGVfb2ZmbG9hZChkZXYsIHEsIGV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MDQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBgdGFwcmlvX2NoYW5nZWAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGB0YXByaW9fY2hhbmdlYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHJlbGF0ZWQgdG8gYG5ld19hZG1pbmAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgc3BlY2lmaWMgcGF0dGVybnMgaGVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgZXhhY3RseSB0aGlzIGBuZXdfYWRtaW5gIGlzIGJlaW5nIGFsbG9jYXRlZCDigJMgaXMgaXQgb24gdGhlIHN0YWNrLCB0aGUgaGVhcCwgb3Igc29tZSBvdGhlciBtYW5hZ2VkIG1lbW9yeSByZWdpb24/IFRoZSBhbGxvY2F0aW9uIG1ldGhvZCB3aWxsIGdpdmUgbWUgY3JpdGljYWwgY2x1ZXMgYWJvdXQgaXRzIGludGVuZGVkIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3ksIHJlc291cmNlIG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIGlmIEkmIzM5O20gbm90IGNhcmVmdWwuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgaGF2aW5nIHRvIHRyYWNlIHBvaW50ZXJzIG9yIGFuYWx5emUgYWxsb2NhdGlvbiBzaXplcyBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB0cmFjayBkb3duIHRoYXQgYWxsb2NhdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODcwOlx0XHR9XG4xODcxOlx0XG4xODcyOlx0XHQvKiBOZWVkZWQgZm9yIGxlbmd0aF90b19kdXJhdGlvbigpIGR1cmluZyBuZXRsaW5rIGF0dHJpYnV0ZSBwYXJzaW5nICovXG4xODczOlx0XHR0YXByaW9fc2V0X3BpY29zX3Blcl9ieXRlKGRldiwgcSwgZXh0YWNrKTtcbjE4NzQ6XHRcbjE4NzU6XHRcdGVyciA9IHRhcHJpb19wYXJzZV9tcXByaW9fb3B0KGRldiwgbXFwcmlvLCBleHRhY2ssIHEtXHUwMDNlZmxhZ3MpO1xuMTg3NjpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjE4Nzc6XHRcdFx0cmV0dXJuIGVycjtcbjE4Nzg6XHRcbjE4Nzk6XHRcdGVyciA9IHRhcHJpb19wYXJzZV90Y19lbnRyaWVzKHNjaCwgb3B0LCBleHRhY2spO1xuMTg4MDpcdFx0aWYgKGVycilcbjE4ODE6XHRcdFx0cmV0dXJuIGVycjtcbjE4ODI6XHRcbjE4ODM6XHRcdG5ld19hZG1pbiA9IGt6YWxsb2Nfb2JqKCpuZXdfYWRtaW4pO1xuMTg4NDpcdFx0aWYgKCFuZXdfYWRtaW4pIHtcbjE4ODU6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtOb3QgZW5vdWdoIG1lbW9yeSBmb3IgYSBuZXcgc2NoZWR1bGVcJiMzNDspO1xuMTg4NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE4ODc6XHRcdH1cbjE4ODg6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ld19hZG1pbi1cdTAwM2VlbnRyaWVzKTtcbjE4ODk6XHRcbjE4OTA6XHRcdG9wZXIgPSBydG5sX2RlcmVmZXJlbmNlKHEtXHUwMDNlb3Blcl9zY2hlZCk7XG4xODkxOlx0XHRhZG1pbiA9IHJ0bmxfZGVyZWZlcmVuY2UocS1cdTAwM2VhZG1pbl9zY2hlZCk7XG4xODkyOlx0XG4xODkzOlx0XHQvKiBubyBjaGFuZ2VzIC0gbm8gbmV3IG1xcHJpbyBzZXR0aW5ncyAqL1xuMTg5NDpcdFx0aWYgKCF0YXByaW9fbXFwcmlvX2NtcChkZXYsIG1xcHJpbykpXG4xODk1Olx0XHRcdG1xcHJpbyA9IE5VTEw7XG4xODk2Olx0XG4xODk3Olx0XHRpZiAobXFwcmlvIFx1MDAyNlx1MDAyNiAob3BlciB8fCBhZG1pbikpIHtcbjE4OTg6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtDaGFuZ2luZyB0aGUgdHJhZmZpYyBtYXBwaW5nIG9mIGEgcnVubmluZyBzY2hlZHVsZSBpcyBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbjE4OTk6XHRcdFx0ZXJyID0gLUVOT1RTVVBQO1xuMTkwMDpcdFx0XHRnb3RvIGZyZWVfc2NoZWQ7XG4xOTAxOlx0XHR9XG4xOTAyOlx0XG4xOTAzOlx0XHRpZiAobXFwcmlvKSB7XG4xOTA0Olx0XHRcdGVyciA9IG5ldGRldl9zZXRfbnVtX3RjKGRldiwgbXFwcmlvLVx1MDAzZW51bV90Yyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgQ2FsbCBTaXRlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IGFsbG9jYXRlZCBgbmV3X2FkbWluYCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgdGhhdCYjMzk7cyBnb29kLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgaW50cmljYWNpZXMgb2YgdGhpcyBuZXcgYWxsb2NhdGlvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgd2hlcmUgKmVsc2UqIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgdXNlZD8gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBncmFwaCBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aGVyZSB0aGlzIGZ1bmN0aW9uLCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgaXMgaW52b2tlZC4gVGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIHNpZGUgZWZmZWN0cywgYW5kIGdlbmVyYWxseSwgZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIGhvdyB0aGlzIGFsbG9jYXRpb24gZml0cyB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaW1lIHRvIHRyYWNrIGRvd24gdGhvc2UgY2FsbCBzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFyc2VfdGFwcmlvX3NjaGVkdWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTA4OT1zdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExMjgtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMjk6c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTMwLVx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE4MjU9c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTE5LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxOTIwOlx0ZXJyID0gcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHEsIHRiLCBuZXdfYWRtaW4sIGV4dGFjayk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MjEtXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTc1CgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDQ2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVEFQUklPIFNjaGVkdWxlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGZvY3VzIGhlcmUgaXMgZW5zdXJpbmcgdGhpcyBjaGFuZ2UgaXMgc2FmZSwgZXNwZWNpYWxseSBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gRmlyc3QsIEkmIzM5O2xsIHdhbGsgdGhyb3VnaCB0aGUgY29kZSBjaGFuZ2VzIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLiBJdCBzZWVtcyB3ZSBhcmUgbW9kaWZ5aW5nIHRoZSBmdW5jdGlvbiBieToKCiogICBJbml0aWFsaXppbmcgYGVudHJ5YCBhbmQgYGN5Y2xlYCBhdCB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbi4KKiAgIE1vdmluZyB0aGUgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGxvb3AsIHdoaWNoIGNhbGN1bGF0ZXMgdGhlIHRvdGFsIGBjeWNsZWAgdGltZSwgb3V0c2lkZSBvZiB0aGUgYCFuZXctJmd0O2N5Y2xlX3RpbWVgIGNvbmRpdGlvbmFsLiBUaGlzIHJlY2FsY3VsYXRlcyB0aGUgY3ljbGUgdGltZSBldmVuIGlmIHRoZSBjeWNsZSB0aW1lIGlzIGFscmVhZHkgc2V0LgoqICAgQWRkaW5nIGEgY2hlY2sgdG8gbWFrZSBzdXJlIGBjeWNsZWAgaXMgd2l0aGluIHZhbGlkIGludGVnZXIgYm91bmRzLgoqICAgQ29uZGl0aW9uYWxseSBzZXR0aW5nIGBuZXctJmd0O2N5Y2xlX3RpbWVgIGlmIGl0JiMzOTtzIGN1cnJlbnRseSB1bnNldC4KKiAgIENydWNpYWxseSwgYWRkaW5nIGEgY2hlY2sgdG8gZW5zdXJlIGBuZXctJmd0O2N5Y2xlX3RpbWVgIGlzICpub3QqIGxlc3MgdGhhbiB0aGUgY2FsY3VsYXRlZCBgY3ljbGVgLCByZXR1cm5pbmcgYW4gZXJyb3IgaWYgaXQgaXMuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFwcGxpY2FiaWxpdHkgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBtZXRob2RpY2FsbHkgZ28gdGhyb3VnaCB0aGUgcG90ZW50aWFsIHJpc2sgYXJlYXM6CgoxLiAgKipVc2VyLXNwYWNlIGRhdGEgZXhwb3N1cmU6KiogVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFkZCBvciBtb2RpZnkgYW55IGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXItc3BhY2UuIFNvLCBubyByaXNrIHRoZXJlLgoyLiAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlIGRlcGVuZGVuY2UgaW4gbG9naWM6KiogYGN5Y2xlYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIGBlbnRyeS0mZ3Q7aW50ZXJ2YWxgIHNob3VsZCBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdXJpbmcgc2NoZWR1bGUgcGFyc2luZywgYW5kIGBuZXdgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAuIE5vIHJpc2tzIGhlcmUuCjMuICAqKlVuaW5pdGlhbGl6ZWQgZGF0YSBpbiBjb21wbGV4IHN0cnVjdHVyZXM6KiogQWdhaW4sIGBuZXdgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGFuZCB0aGUgbG9vcCBjYWxjdWxhdGVzIHRoZSBgY3ljbGVgIHZhbHVlLCBhdm9pZGluZyBhbnkgcmlza3MuCjQuICAqKkJvdW5kcyBjaGVja3MgYW5kIGJ1ZmZlciBvdmVyZmxvd3M6KiogVGhpcyBjaGFuZ2UgcHJpbWFyaWx5IGFkZHMgYW4gaW5wdXQgdmFsaWRhdGlvbiBjaGVjazsgdGhlcmUmIzM5O3Mgbm8gYWRkaXRpb24gb2YgbmV3IGZ1bmN0aW9uYWxpdHkgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gVGhlIGFkZGVkIGNoZWNrIHZhbGlkYXRlcyB0aGF0IGBuZXctJmd0O2N5Y2xlX3RpbWUgJmd0Oz0gY3ljbGVgLgoKVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgdGhlcmUmIzM5O3Mgbm8gYXBwYXJlbnQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIG9yIHVzZWQuIGBjeWNsZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIGBuZXdgIGlzIGluaXRpYWxpemVkIHZpYSBga3phbGxvY19vYmpgLiBUaGlzIHBhdGNoIGlzIHB1cmVseSBhbiBpbnB1dCB2YWxpZGF0aW9uIGFuZCBsb2dpYyBhZGp1c3RtZW50IGZvciB0aGUgVEFQUklPIHFkaXNjIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBuZXRsaW5rLgoKVGh1cywgYmFzZWQgb24gdGhpcyBhbmFseXNpcywgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSYjMzk7bGwgYmUgc3VyZSB0byBkb2N1bWVudCB0aGlzIGluIHRoZSBgc2V0LXJlc3VsdHNgIGV4cGxhbmF0aW9uLCBjbGVhcmx5IG91dGxpbmluZyB0aGVzZSByZWFzb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpbnB1dCB2YWxpZGF0aW9uIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAgaW4gYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFsd2F5cyBjYWxjdWxhdGVzIHRoZSBzdW0gb2YgZW50cnkgaW50ZXJ2YWxzIChgY3ljbGVgKSBhbmQgdmFsaWRhdGVzIHRoYXQgYGN5Y2xlIFx1MDAzYz0gSU5UX01BWGAgYW5kIHRoYXQgdXNlci1zdXBwbGllZCBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgIGlzIG5vdCBsZXNzIHRoYW4gYGN5Y2xlYC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGN5Y2xlID0gMGApIGFuZCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoYG5ld19hZG1pbmAgdmlhIGBremFsbG9jX29iaigpYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIGNoYW5nZSwgYW5kIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpbnB1dCB2YWxpZGF0aW9uIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAgaW4gYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFsd2F5cyBjYWxjdWxhdGVzIHRoZSBzdW0gb2YgZW50cnkgaW50ZXJ2YWxzIChgY3ljbGVgKSBhbmQgdmFsaWRhdGVzIHRoYXQgYGN5Y2xlIFx1MDAzYz0gSU5UX01BWGAgYW5kIHRoYXQgdXNlci1zdXBwbGllZCBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgIGlzIG5vdCBsZXNzIHRoYW4gYGN5Y2xlYC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGN5Y2xlID0gMGApIGFuZCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoYG5ld19hZG1pbmAgdmlhIGBremFsbG9jX29iaigpYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIGNoYW5nZSwgYW5kIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjI0LjQzMzM2OTQ5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODE5Mjk1MDEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGFwcmlvX2NoYW5nZVwiLFxuICAgIFwidGFwcmlvX2luaXRcIixcbiAgICBcInBhcnNlX3RhcHJpb19zY2hlZHVsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW5wdXQgdmFsaWRhdGlvbiBpbiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgIGluIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gU3BlY2lmaWNhbGx5LCBpdCBhbHdheXMgY2FsY3VsYXRlcyB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFscyAoYGN5Y2xlYCkgYW5kIHZhbGlkYXRlcyB0aGF0IGBjeWNsZSBcXHUwMDNjPSBJTlRfTUFYYCBhbmQgdGhhdCB1c2VyLXN1cHBsaWVkIGBuZXctXFx1MDAzZWN5Y2xlX3RpbWVgIGlzIG5vdCBsZXNzIHRoYW4gYGN5Y2xlYC5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIChgY3ljbGUgPSAwYCkgYW5kIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChgbmV3X2FkbWluYCB2aWEgYGt6YWxsb2Nfb2JqKClgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIHVwb24sIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgcmlza3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBhbmQgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYXJzZV90YXByaW9fc2NoZWR1bGUoKSBpbiBuZXQvc2NoZWQvc2NoX3RhcHJpby5jIHRvIHVuY29uZGl0aW9uYWxseSB2YWxpZGF0ZSB0aGUgY3ljbGUgdGltZSBhZ2FpbnN0IHRoZSBzdW0gb2Ygc2NoZWR1bGUgZW50cnkgaW50ZXJ2YWxzIGFuZCBjaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdy4gVGhpcyBhZmZlY3RzIHNjaGVkdWxlIHBhcmFtZXRlciBwYXJzaW5nIHdoZW4gY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIGEgdGFwcmlvIHFkaXNjIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgaW4gc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDU6MjQuNDMzMzc1NjIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAyNTUwMTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDZiNzkyN2Q5OGY2YjM0M2Y1YjExMzQzNjNkMTIzZWZiMWFjMjVmZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMzowNToyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xcbmluZGV4IDM5YWM1Yjk3YWEzYWYuLjEzN2NlNmY3YTQ3NGEgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXG5AQCAtMTEzMCw2ICsxMTMwLDggQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuK1xcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XFxuK1xcdGt0aW1lX3QgY3ljbGUgPSAwO1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xcbkBAIC0xMTUyLDE5ICsxMTU0LDIwIEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRpZiAoIW5ldy1cXHUwMDNlY3ljbGVfdGltZSkge1xcbi1cXHRcXHRzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5O1xcbi1cXHRcXHRrdGltZV90IGN5Y2xlID0gMDtcXG4tXFxuLVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFxcdTAwMjZuZXctXFx1MDAzZWVudHJpZXMsIGxpc3QpXFxuLVxcdFxcdFxcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cXHUwMDNlaW50ZXJ2YWwpO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcXHUwMDI2bmV3LVxcdTAwM2VlbnRyaWVzLCBsaXN0KVxcbitcXHRcXHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXFx1MDAzZWludGVydmFsKTtcXG4gXFxuLVxcdFxcdGlmIChjeWNsZSBcXHUwMDNjIDAgfHwgY3ljbGUgXFx1MDAzZSBJTlRfTUFYKSB7XFxuLVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIidjeWNsZV90aW1lJyBpcyB0b28gYmlnXFxcIik7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHR9XFxuK1xcdGlmIChjeWNsZSBcXHUwMDNjIDAgfHwgY3ljbGUgXFx1MDAzZSBJTlRfTUFYKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIidjeWNsZV90aW1lJyBpcyB0b28gYmlnXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuIFxcbitcXHRpZiAoIW5ldy1cXHUwMDNlY3ljbGVfdGltZSlcXG4gXFx0XFx0bmV3LVxcdTAwM2VjeWNsZV90aW1lID0gY3ljbGU7XFxuK1xcbitcXHRpZiAobmV3LVxcdTAwM2VjeWNsZV90aW1lIFxcdTAwM2MgY3ljbGUpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiJ2N5Y2xlX3RpbWUnIGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFsc1xcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIG5ldy1cXHUwMDNlbnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjI2LjAzNjgyMTM1NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjU2MzYwNDYwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX1RBUFJJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhcHJpb19jaGFuZ2VcIixcbiAgICBcInRhcHJpb19pbml0XCIsXG4gICAgXCJwYXJzZV90YXByaW9fc2NoZWR1bGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYXJzZV90YXByaW9fc2NoZWR1bGUoKSBpbiBuZXQvc2NoZWQvc2NoX3RhcHJpby5jIHRvIHVuY29uZGl0aW9uYWxseSB2YWxpZGF0ZSB0aGUgY3ljbGUgdGltZSBhZ2FpbnN0IHRoZSBzdW0gb2Ygc2NoZWR1bGUgZW50cnkgaW50ZXJ2YWxzIGFuZCBjaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdy4gVGhpcyBhZmZlY3RzIHNjaGVkdWxlIHBhcmFtZXRlciBwYXJzaW5nIHdoZW4gY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIGEgdGFwcmlvIHFkaXNjIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgaW4gc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDZiNzkyN2Q5OGY2YjM0M2Y1YjExMzQzNjNkMTIzZWZiMWFjMjVmZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIzOjA1OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbmluZGV4IDM5YWM1Yjk3YWEzYWYuLjEzN2NlNmY3YTQ3NGEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG5AQCAtMTEzMCw2ICsxMTMwLDggQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuK1x0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcbitcdGt0aW1lX3QgY3ljbGUgPSAwO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0pIHtcbkBAIC0xMTUyLDE5ICsxMTU0LDIwIEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKSB7XG4tXHRcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4tXHRcdGt0aW1lX3QgY3ljbGUgPSAwO1xuLVxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZuZXctXHUwMDNlZW50cmllcywgbGlzdClcbi1cdFx0XHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXHUwMDNlaW50ZXJ2YWwpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2bmV3LVx1MDAzZWVudHJpZXMsIGxpc3QpXG4rXHRcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cdTAwM2VpbnRlcnZhbCk7XG4gXG4tXHRcdGlmIChjeWNsZSBcdTAwM2MgMCB8fCBjeWNsZSBcdTAwM2UgSU5UX01BWCkge1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCInY3ljbGVfdGltZScgaXMgdG9vIGJpZ1wiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuK1x0aWYgKGN5Y2xlIFx1MDAzYyAwIHx8IGN5Y2xlIFx1MDAzZSBJTlRfTUFYKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCInY3ljbGVfdGltZScgaXMgdG9vIGJpZ1wiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4rXHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKVxuIFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZSA9IGN5Y2xlO1xuK1xuK1x0aWYgKG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyBjeWNsZSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiJ2N5Y2xlX3RpbWUnIGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFsc1wiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIG5ldy1cdTAwM2VudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjI2LjAzNjgyMzU5NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMTQzNTU1NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVEFQUklPIFNjaGVkdWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBiZWluZyBhc2tlZCB0byByZXZpZXcgYSBwYXRjaCBmb3IgYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0J3MgY2hhbmdlZC4gVGhlIGRpZmYgaXMgdGhlIGZpcnN0IHRoaW5nIHRvIGxvb2sgYXQ6IEkgc2VlIGEgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyB0aGUgY3ljbGUgdGltZSBpcyBjYWxjdWxhdGVkIGFuZCB2YWxpZGF0ZWQgZm9yIHRoZSBUQVBSSU8gc2NoZWR1bGVyLlxuXG5UaGUgb3JpZ2luYWwgY29kZSBhcHBlYXJzIHRvIGNhbGN1bGF0ZSB0aGUgY3ljbGUgdGltZSBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbGlzdCBvZiBzY2hlZHVsZSBlbnRyaWVzIGFuZCBzdW1taW5nIHRoZWlyIGludGVydmFscy4gTm93LCBpdCdzIGNvbXBhcmluZyBhZ2FpbnN0IGBuZXctXHUwMDNlY3ljbGVfdGltZWAgd2hpY2ggc291bmRzIGxpa2UgaXQncyBwYXNzZWQgaW4gZnJvbSBuZXRsaW5rLiBUaGUgY2hhbmdlIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGFuIGV4dHJhIHZhbGlkYXRpb24gc3RlcC4gSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBrdGltZV90IGN5Y2xlID0gMDtgIGFuZCBhIG5ldyBgaWZgIGNvbmRpdGlvbiB3aXRoIGEgY2hlY2sgdGhhdCBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgIGlzIF9hdCBsZWFzdF8gYXMgbGFyZ2UgYXMgdGhlIHN1bSBvZiBhbGwgZW50cnkgaW50ZXJ2YWxzLlxuXG5Fc3NlbnRpYWxseSwgdGhlIGV4aXN0aW5nIGxvZ2ljIHN1bXMgdXAgYWxsIHRoZSBlbnRyeSBpbnRlcnZhbHMgdG8gY3JlYXRlIGEgYGN5Y2xlYCB0aW1lLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBgY3ljbGVfdGltZWAgaXNuJ3Qgc21hbGxlciB0aGFuIHRoZSBjb21iaW5lZCBkdXJhdGlvbnMgb2YgaXRzIGNvbnN0aXR1ZW50IGVudHJpZXMsIGFuZCBpdCdzIGFsc28gdmFsaWRhdGluZyB0aGF0IHRoZSBgY3ljbGVfdGltZWAgaXMgdmFsaWQuIEl0J3MgYWxzbyBtYWtpbmcgc3VyZSB0aGF0IHRoZSBzdW0gb2YgdGhlIGVudHJpZXMgYW5kIHRoZSBjeWNsZSB0aW1lIGFyZSBub3Qgb3V0IG9mIGJvdW5kcywgcHJldmVudGluZyBhbiBpbnRlZ2VyIG92ZXJmbG93LlxuXG5NeSBpbml0aWFsIGludGVycHJldGF0aW9uOiB0aGlzIHBhdGNoIGFpbXMgdG8gaW1wcm92ZSB0aGUgcm9idXN0bmVzcyBvZiB0aGUgVEFQUklPIHNjaGVkdWxlciBieSBtYWtpbmcgc3VyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBpbnRlcm5hbGx5IGNvbnNpc3RlbnQuIFRoaXMgaXMgYSBnb29kIG1vdmU7IHN1Y2ggdmFsaWRhdGlvbiBjb3VsZCBoYXZlIHByZXZlbnRlZCBzdWJ0bGUgYnVncyBhbmQgcGVyaGFwcyBtYWRlIHRoZSBzY2hlZHVsZXIgbW9yZSByZXNpc3RhbnQgdG8gbWlzY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMsIG9mIGNvdXJzZSwgb3IgdW53YW50ZWQgYmVoYXZpb3VyLiBJIHdhbnQgdG8gbG9vayBpbnRvIHRoZSBpbXBhY3Qgb24gZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zLCBhbmQgd2hldGhlciB0aGUgYWRkZWQgdmFsaWRhdGlvbiBwcmV2ZW50cyB2YWxpZCBjb25maWd1cmF0aW9ucy4gRmluYWxseSwgSSBzaG91bGQgbG9vayBhdCB0aGUgS2NvbmZpZyBhbmQgb3RoZXIgY29udGV4dCBpbiB0aGlzIGNvZGUgdG8gZ2l2ZSB0aGUgYmVzdCBhbmFseXNpcywgYW5kIGNvbmZpcm0gdGhpcyBpcyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDU6MzYuMTgwMzgxMTY3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEyMDpcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZlbnRyeS1cXHUwMDNlbGlzdCwgXFx1MDAyNnNjaGVkLVxcdTAwM2VlbnRyaWVzKTtcXG4xMTIxOlxcdFxcdFxcdGkrKztcXG4xMTIyOlxcdFxcdH1cXG4xMTIzOlxcdFxcbjExMjQ6XFx0XFx0c2NoZWQtXFx1MDAzZW51bV9lbnRyaWVzID0gaTtcXG4xMTI1OlxcdFxcbjExMjY6XFx0XFx0cmV0dXJuIGk7XFxuMTEyNzpcXHR9XFxuMTEyODpcXHRcXG4xMTI5OlxcdHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4xMTMwOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXFxuMTEzMTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjExMzI6XFx0e1xcbjExMzM6XFx0XFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcXG4xMTM0OlxcdFxcdGt0aW1lX3QgY3ljbGUgPSAwO1xcbjExMzU6XFx0XFx0aW50IGVyciA9IDA7XFxuMTEzNjpcXHRcXG4xMTM3OlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xcbjExMzg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQWRkaW5nIGEgc2luZ2xlIGVudHJ5IGlzIG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4xMTM5OlxcdFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuMTE0MDpcXHRcXHR9XFxuMTE0MTpcXHRcXG4xMTQyOlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQkFTRV9USU1FXSlcXG4xMTQzOlxcdFxcdFxcdG5ldy1cXHUwMDNlYmFzZV90aW1lID0gbmxhX2dldF9zNjQodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0JBU0VfVElNRV0pO1xcbjExNDQ6XFx0XFxuMTE0NTpcXHRcXHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVfRVhURU5TSU9OXSlcXG4xMTQ2OlxcdFxcdFxcdG5ldy1cXHUwMDNlY3ljbGVfdGltZV9leHRlbnNpb24gPSBubGFfZ2V0X3M2NCh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV9FWFRFTlNJT05dKTtcXG4xMTQ3OlxcdFxcbjExNDg6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FXSlcXG4xMTQ5OlxcdFxcdFxcdG5ldy1cXHUwMDNlY3ljbGVfdGltZSA9IG5sYV9nZXRfczY0KHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FXSk7XFxuMTE1MDpcXHRcXG4xMTUxOlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfRU5UUllfTElTVF0pXFxuMTE1MjpcXHRcXHRcXHRlcnIgPSBwYXJzZV9zY2hlZF9saXN0KHEsIHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9FTlRSWV9MSVNUXSxcXG4xMTUzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBuZXcsIGV4dGFjayk7XFxuMTE1NDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMTU1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTE1NjpcXHRcXG4xMTU3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFxcdTAwMjZuZXctXFx1MDAzZWVudHJpZXMsIGxpc3QpXFxuMTE1ODpcXHRcXHRcXHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXFx1MDAzZWludGVydmFsKTtcXG4xMTU5OlxcdFxcbjExNjA6XFx0XFx0aWYgKGN5Y2xlIFxcdTAwM2MgMCB8fCBjeWNsZSBcXHUwMDNlIElOVF9NQVgpIHtcXG4xMTYxOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIidjeWNsZV90aW1lJyBpcyB0b28gYmlnXFxcIik7XFxuMTE2MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTYzOlxcdFxcdH1cXG4xMTY0OlxcdFxcbjExNjU6XFx0XFx0aWYgKCFuZXctXFx1MDAzZWN5Y2xlX3RpbWUpXFxuMTE2NjpcXHRcXHRcXHRuZXctXFx1MDAzZWN5Y2xlX3RpbWUgPSBjeWNsZTtcXG4xMTY3OlxcdFxcbjExNjg6XFx0XFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIGN5Y2xlKSB7XFxuMTE2OTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCInY3ljbGVfdGltZScgaXMgbGVzcyB0aGFuIHRoZSBzdW0gb2YgZW50cnkgaW50ZXJ2YWxzXFxcIik7XFxuMTE3MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTcxOlxcdFxcdH1cXG4xMTcyOlxcdFxcbjExNzM6XFx0XFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIG5ldy1cXHUwMDNlbnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7XFxuMTE3NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCInY3ljbGVfdGltZScgaXMgdG9vIHNtYWxsXFxcIik7XFxuMTE3NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTc2OlxcdFxcdH1cXG4xMTc3OlxcdFxcbjExNzg6XFx0XFx0dGFwcmlvX2NhbGN1bGF0ZV9nYXRlX2R1cmF0aW9ucyhxLCBuZXcpO1xcbjExNzk6XFx0XFxuMTE4MDpcXHRcXHRyZXR1cm4gMDtcXG4xMTgxOlxcdH1cXG4xMTgyOlxcdFxcbjExODM6XFx0c3RhdGljIGludCB0YXByaW9fcGFyc2VfbXFwcmlvX29wdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbjExODQ6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0LFxcbjExODU6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbjExODY6XFx0XFx0XFx0XFx0XFx0ICAgdTMyIHRhcHJpb19mbGFncylcXG4xMTg3OlxcdHtcXG4xMTg4OlxcdFxcdGJvb2wgYWxsb3dfb3ZlcmxhcHBpbmdfdHhxcyA9IFRYVElNRV9BU1NJU1RfSVNfRU5BQkxFRCh0YXByaW9fZmxhZ3MpO1xcbjExODk6XFx0XFxuMTE5MDpcXHRcXHRpZiAoIXFvcHQpIHtcXG4xMTkxOlxcdFxcdFxcdGlmICghbmV0ZGV2X2dldF9udW1fdGMoZGV2KSkge1xcbjExOTI6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiJ21xcHJpbycgY29uZmlndXJhdGlvbiBpcyBuZWNlc3NhcnlcXFwiKTtcXG4xMTkzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjExOTQ6XFx0XFx0XFx0fVxcbjExOTU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTE5NjpcXHRcXHR9XFxuMTE5NzpcXHRcXG4xMTk4OlxcdFxcdC8qIHRhcHJpbyBpbXBvc2VzIHRoYXQgdHJhZmZpYyBjbGFzc2VzIG1hcCAxOm4gdG8gdHggcXVldWVzICovXFxuMTE5OTpcXHRcXHRpZiAocW9wdC1cXHUwMDNlbnVtX3RjIFxcdTAwM2UgZGV2LVxcdTAwM2VudW1fdHhfcXVldWVzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjM2LjE4MDUwNzkwN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzYyNTAxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIGB0YXByaW9gIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAuIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgLSB3aG8ncyBhY3R1YWxseSBpbnZva2luZyB0aGlzIGZ1bmN0aW9uPyBLbm93aW5nIHRoYXQgd2lsbCBwcm92aWRlIGNyaXRpY2FsIGluc2lnaHRzIGludG8gd2hhdCdzIGJlaW5nIHBhc3NlZCBpbiBhbmQgd2hhdCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgaXMuIENvbnRleHQgaXMgZXZlcnl0aGluZy5cblxuVGhlbiwgSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gdGhlIGJyb2FkZXIgYHRhcHJpb2AgcWRpc2MgaW1wbGVtZW50YXRpb24uIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGZvciB0aGlzIHFkaXNjPyBXaGF0J3MgdGhlIGNvbXBsZXRlIGZlYXR1cmUgc2V0PyBXaGF0IGtleSBkYXRhIHN0cnVjdHVyZXMgYXJlIGluIHBsYXk/IEtub3dpbmcgdGhlIGxhbmRzY2FwZSBvZiB0aGUgYHRhcHJpb2AgcWRpc2Mgd2lsbCBoZWxwIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIG1hcCBpdCBvdXQsIHNvIEkgY2FuIHNlZSBob3cgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIEVzc2VudGlhbGx5IEknbGwgbmVlZCB0byBkZXZlbG9wIHRoZSBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0gc28gSSBjYW4gaWRlbnRpZnkgaG93IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gY29udHJpYnV0ZXMgdG8gdGhlIGNvbXBsZXRlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDU6MzguNTE2NzYxOTI2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTU4ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhcnNlX3RhcHJpb19zY2hlZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTA4OT1zdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEyOC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMjk6c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEzMC1cXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODI1PXN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTE5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTkyMDpcXHRlcnIgPSBwYXJzZV90YXByaW9fc2NoZWR1bGUocSwgdGIsIG5ld19hZG1pbiwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MjEtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjM4LjU3NzcyNDc4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjkyNjU3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFRhcHJpbyBRZGlzYyBPcGVyYXRpb25zKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgYHRhcHJpb2AgUWRpc2MgYWN0dWFsbHkgd29ya3MuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgc291cmNlLCBzbyBJJ20gaGVhZGluZyBzdHJhaWdodCBpbnRvIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gSSB3YW50IHRvIGxvb2sgYXQgdGhlIGBxZGlzY19vcHNgIHN0cnVjdHVyZSBzcGVjaWZpY2FsbHkuIFRoYXQncyB0aGUgY29yZSBvZiBob3cgdGhpcyB0aGluZyBmdW5jdGlvbnMg4oCTIGl0J2xsIHRlbGwgbWUgaG93IHBhY2tldHMgYXJlIGVucXVldWVkLCBkZXF1ZXVlZCwgY29uZmlndXJlZCwgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBhdCB0aGUgc2NoZWR1bGluZyBsZXZlbC4gVW5kZXJzdGFuZGluZyB0aGVzZSBvcGVyYXRpb25zIGlzIGNydWNpYWwgZm9yIGZpZ3VyaW5nIG91dCBpdHMgYmVoYXZpb3IgYW5kIGNhcGFiaWxpdGllcy4gSSdtIGV4cGVjdGluZyB0byBzZWUgaW50ZXJlc3RpbmcgdGhpbmdzIGhlcmUsIGdpdmVuIHRoZSB0aW1lLXNlbnNpdGl2ZSBuYXR1cmUgYW5kIHRyYWZmaWMgc2hhcGluZyBmdW5jdGlvbmFsaXRpZXMgb2YgVGFwcmlvLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQzNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjQwLjU0Njk5MzM1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDQyNDI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgUWRpc2Nfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHRhcHJpb19jbGFzc19vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NDgtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTQ5OnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTAtXFx0LmNsX29wc1xcdFxcdD0gXFx1MDAyNnRhcHJpb19jbGFzc19vcHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjQwLjY1MTQyMzMyOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzE1NjMyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHNjaF90YXByaW8uY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gQmFzZWQgb24gd2hhdCBJJ20gbG9va2luZyBpbnRvLCBJIHRoaW5rIHRoZSBpc3N1ZSBpcyBhcm91bmQgdGhlIHNjaGVkdWxpbmcgbG9naWMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBUQVBSSU8gZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlLCBhbmQgSSBmaWd1cmUgdGhlIHByb2JsZW0gbWlnaHQgYmUgaW4gdGhlIHZpY2luaXR5IG9mIGxpbmUgMjU0OSB3aXRoaW4gdGhlIGBzY2hfdGFwcmlvLmNgIGZpbGUuIExldCdzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCdzIHdoYXQuIEknbGwgZm9jdXMgb24gdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHRvbywgdG8gZ2V0IHRoZSBmdWxsIGNvbnRleHQgb2Ygd2hhdCdzIGdvaW5nIG9uLiBIb3BlZnVsbHksIHRoZSBwcm9ibGVtIGlzIHJpZ2h0IHRoZXJlLCBzdGFyaW5nIG1lIGluIHRoZSBmYWNlISBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3OTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNTo0Mi43ODI5ODg1NTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU0MDpcXHRcXHQuZ3JhZnRcXHRcXHQ9IHRhcHJpb19ncmFmdCxcXG4yNTQxOlxcdFxcdC5sZWFmXFx0XFx0PSB0YXByaW9fbGVhZixcXG4yNTQyOlxcdFxcdC5maW5kXFx0XFx0PSB0YXByaW9fZmluZCxcXG4yNTQzOlxcdFxcdC53YWxrXFx0XFx0PSB0YXByaW9fd2FsayxcXG4yNTQ0OlxcdFxcdC5kdW1wXFx0XFx0PSB0YXByaW9fZHVtcF9jbGFzcyxcXG4yNTQ1OlxcdFxcdC5kdW1wX3N0YXRzXFx0PSB0YXByaW9fZHVtcF9jbGFzc19zdGF0cyxcXG4yNTQ2OlxcdFxcdC5zZWxlY3RfcXVldWVcXHQ9IHRhcHJpb19zZWxlY3RfcXVldWUsXFxuMjU0NzpcXHR9O1xcbjI1NDg6XFx0XFxuMjU0OTpcXHRzdGF0aWMgc3RydWN0IFFkaXNjX29wcyB0YXByaW9fcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuMjU1MDpcXHRcXHQuY2xfb3BzXFx0XFx0PSBcXHUwMDI2dGFwcmlvX2NsYXNzX29wcyxcXG4yNTUxOlxcdFxcdC5pZFxcdFxcdD0gXFxcInRhcHJpb1xcXCIsXFxuMjU1MjpcXHRcXHQucHJpdl9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHRhcHJpb19zY2hlZCksXFxuMjU1MzpcXHRcXHQuaW5pdFxcdFxcdD0gdGFwcmlvX2luaXQsXFxuMjU1NDpcXHRcXHQuY2hhbmdlXFx0XFx0PSB0YXByaW9fY2hhbmdlLFxcbjI1NTU6XFx0XFx0LmRlc3Ryb3lcXHQ9IHRhcHJpb19kZXN0cm95LFxcbjI1NTY6XFx0XFx0LnJlc2V0XFx0XFx0PSB0YXByaW9fcmVzZXQsXFxuMjU1NzpcXHRcXHQuYXR0YWNoXFx0XFx0PSB0YXByaW9fYXR0YWNoLFxcbjI1NTg6XFx0XFx0LnBlZWtcXHRcXHQ9IHRhcHJpb19wZWVrLFxcbjI1NTk6XFx0XFx0LmRlcXVldWVcXHQ9IHRhcHJpb19kZXF1ZXVlLFxcbjI1NjA6XFx0XFx0LmVucXVldWVcXHQ9IHRhcHJpb19lbnF1ZXVlLFxcbjI1NjE6XFx0XFx0LmR1bXBcXHRcXHQ9IHRhcHJpb19kdW1wLFxcbjI1NjI6XFx0XFx0LmR1bXBfc3RhdHNcXHQ9IHRhcHJpb19kdW1wX3N0YXRzLFxcbjI1NjM6XFx0XFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4yNTY0OlxcdH07XFxuMjU2NTpcXHRNT0RVTEVfQUxJQVNfTkVUX1NDSChcXFwidGFwcmlvXFxcIik7XFxuMjU2NjpcXHRcXG4yNTY3OlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgdGFwcmlvX2RldmljZV9ub3RpZmllciA9IHtcXG4yNTY4OlxcdFxcdC5ub3RpZmllcl9jYWxsID0gdGFwcmlvX2Rldl9ub3RpZmllcixcXG4yNTY5OlxcdH07XFxuMjU3MDpcXHRcXG4yNTcxOlxcdHN0YXRpYyBpbnQgX19pbml0IHRhcHJpb19tb2R1bGVfaW5pdCh2b2lkKVxcbjI1NzI6XFx0e1xcbjI1NzM6XFx0XFx0aW50IGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2dGFwcmlvX2RldmljZV9ub3RpZmllcik7XFxuMjU3NDpcXHRcXG4yNTc1OlxcdFxcdGlmIChlcnIpXFxuMjU3NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI1Nzc6XFx0XFxuMjU3ODpcXHRcXHRyZXR1cm4gcmVnaXN0ZXJfcWRpc2MoXFx1MDAyNnRhcHJpb19xZGlzY19vcHMpO1xcbjI1Nzk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNTo0Mi43ODMyOTkzMzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5MTkwMDk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIGFuZCB0YXByaW86IEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIFwiQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuXCIgSSBuZWVkIHRvIGdldCBzb21lIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGFwcmlvLCBhbmQgdGhlIGZpcnN0IHBsYWNlIEkgYWx3YXlzIGdvIHRvIGZvciBpbml0aWFsIGludmVzdGlnYXRpb24gaXMgdGhlIHByb2plY3QncyBLY29uZmlnIGZpbGUuIEkgYXNzdW1lIHRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgbWFuYWdlZC4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoZXRoZXIgdGFwcmlvIGlzIGF2YWlsYWJsZSBhbmQgaG93IGl0IGlzIGltcGxlbWVudGVkLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGtub3duIGNvbmZpZ3VyYXRpb24gaXNzdWVzIG9yIGRlcGVuZGVuY2llcyB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYzMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDU6NDQuNzc1MjAyNzE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzA2MTA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY2hfdGFwcmlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9MTcyPWNvbmZpZyBORVRfU0NIX1RBUFJJT1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMTc4LVxcbm5ldC9zY2hlZC9LY29uZmlnOjE3OTpcXHQgIFNlZSB0aGUgdG9wIG9mIFxcdTAwM2NmaWxlOm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXFxubmV0L3NjaGVkL0tjb25maWctMTgwLVxcbm5ldC9zY2hlZC9LY29uZmlnLTE4MS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5uZXQvc2NoZWQvS2NvbmZpZzoxODI6XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX3RhcHJpby5cXG5uZXQvc2NoZWQvS2NvbmZpZy0xODMtXFxuLS1cXG5uZXQvc2NoZWQvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX05FVF9TQ0hfRVRGKVxcdCs9IHNjaF9ldGYub1xcbm5ldC9zY2hlZC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfTkVUX1NDSF9UQVBSSU8pXFx0Kz0gc2NoX3RhcHJpby5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTY1LW9iai0kKENPTkZJR19ORVRfU0NIX0JQRilcXHQrPSBicGZfcWRpc2Mub1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MzovKiBuZXQvc2NoZWQvc2NoX3RhcHJpby5jXFx0IFRpbWUgQXdhcmUgUHJpb3JpdHkgU2NoZWR1bGVyXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy00LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjQ0Ljg1ODI2NzgyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTc2OTkyMTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb24sIGxpa2VseSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgYG5ldC9zY2hlZGAgc3Vic3lzdGVtLiBJIHJlY2FsbCB0aGF0IEtjb25maWcgZmlsZXMgYXJlIHRoZSBoZWFydCBvZiB0aGUgTGludXgga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoZXkgZGVmaW5lIHRoZSBvcHRpb25zIHByZXNlbnRlZCB0byB0aGUgdXNlciBkdXJpbmcga2VybmVsIGNvbXBpbGF0aW9uLiBBbmQgSSBhbSByZW1lbWJlcmluZyB0aGF0IGxpbmUgMTcyIG9yIHNvIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIG1pZ2h0IGJlLiBMZXQncyBzdGFydCB0aGVyZS4gSSdtIHByb2JhYmx5IGludGVyZXN0ZWQgaW4gdGhlIG9wdGlvbnMgcmVsYXRlZCB0by4uLiB3ZWxsLCBJIGRvbid0IGtub3cgKmV4YWN0bHkqIHlldC4gQnV0IHRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luIG15IGludmVzdGlnYXRpb24uIFRoaXMgYXBwcm9hY2ggaXMgZWZmaWNpZW50IGJlY2F1c2UgaXQgaGVscHMgbWUgbmFycm93IGRvd24gdGhlIHNjb3BlIG9mIHRoZSBwcm9ibGVtIHF1aWNrbHk7IGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgd2lsbCBsZXQgbWUgc2VlIHdoYXQncyBjb25maWd1cmFibGUgaW4gdGhpcyBhcmVhLiBJdCdsbCBnaXZlIG1lIGEgcm9hZG1hcCwgbGlrZWx5IGhpZ2hsaWdodGluZyB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEwNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjQ3LjQzNTI2MzAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2V0Zi5cXG4gMTY2OlxcdFxcbiAxNjc6XFx0Y29uZmlnIE5FVF9TQ0hfTVFQUklPX0xJQlxcbiAxNjg6XFx0XFx0dHJpc3RhdGVcXG4gMTY5OlxcdFxcdGhlbHBcXG4gMTcwOlxcdFxcdCAgQ29tbW9uIGxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBtcXByaW8gcXVldWUgY29uZmlndXJhdGlvbnMuXFxuIDE3MTpcXHRcXG4gMTcyOlxcdGNvbmZpZyBORVRfU0NIX1RBUFJJT1xcbiAxNzM6XFx0XFx0dHJpc3RhdGUgXFxcIlRpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXFxcIlxcbiAxNzQ6XFx0XFx0c2VsZWN0IE5FVF9TQ0hfTVFQUklPX0xJQlxcbiAxNzU6XFx0XFx0aGVscFxcbiAxNzY6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgVGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBwYWNrZXRcXG4gMTc3OlxcdFxcdCAgc2NoZWR1bGluZyBhbGdvcml0aG0uXFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdCAgU2VlIHRoZSB0b3Agb2YgXFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF90YXByaW8uY1xcdTAwM2UgZm9yIG1vcmUgZGV0YWlscy5cXG4gMTgwOlxcdFxcbiAxODE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDE4MjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzY2hfdGFwcmlvLlxcbiAxODM6XFx0XFxuIDE4NDpcXHRjb25maWcgTkVUX1NDSF9HUkVEXFxuIDE4NTpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBSYW5kb20gRWFybHkgRGV0ZWN0aW9uIChHUkVEKVxcXCJcXG4gMTg2OlxcdFxcdGhlbHBcXG4gMTg3OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEdlbmVyaWMgUmFuZG9tIEVhcmx5IERldGVjdGlvblxcbiAxODg6XFx0XFx0ICAoR1JFRCkgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtIGZvciBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzXFxuIDE4OTpcXHRcXHQgIChzZWUgdGhlIHRvcCBvZiBcXHUwMDNjZmlsZTpuZXQvc2NoZWQvc2NoX3JlZC5jXFx1MDAzZSBmb3IgZGV0YWlscyBhbmRcXG4gMTkwOlxcdFxcdCAgcmVmZXJlbmNlcyBhYm91dCB0aGUgYWxnb3JpdGhtKS5cXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDE5MzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzY2hfZ3JlZC5cXG4gMTk0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNTo0Ny40MzU0MTE0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTM0OTIzOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBuZXR3b3JrIHNjaGVkdWxlciBjb25maWd1cmF0aW9uLiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIHNlZSB3aGVyZSB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgZGVmaW5lZC4gTXkgaW5zdGluY3QgaXMgdGhhdCBJJ2xsIGZpbmQgdGhlbSBpbiBgbmV0L3NjaGVkL0tjb25maWdgLiBJdCdzIGEgcHJldHR5IHN0YW5kYXJkIGxvY2F0aW9uIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbmV0d29ya2luZy4gSSdtIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGZvciBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IGxpbmsgaW50byB0aGUgb3ZlcmFsbCBtZW51IHN0cnVjdHVyZSDigJMgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24gXCJsaXZlc1wiIHdpdGhpbiB0aGUgZ3JlYXRlciBzY2hlbWUgb2YgdGhpbmdzLiBVbmRlcnN0YW5kaW5nIHRoZSBwYXJlbnQgbWVudSB3aWxsIHF1aWNrbHkgZ2l2ZSBtZSBjb250ZXh0LiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCB0aGVuIG1ha2UgaXQgYWxsIGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODQxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNTo1MS4zNzAzMzc4MjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuICAyMTpcXHRcXHQgIG5lZWQgYSBjZXJ0YWluIG1pbmltdW0gZGF0YSBmbG93IHJhdGUsIG9yIGlmIHlvdSBuZWVkIHRvIGxpbWl0IHRoZVxcbiAgMjI6XFx0XFx0ICBtYXhpbXVtIGRhdGEgZmxvdyByYXRlIGZvciB0cmFmZmljIHdoaWNoIG1hdGNoZXMgc3BlY2lmaWVkIGNyaXRlcmlhLlxcbiAgMjM6XFx0XFx0ICBUaGlzIGNvZGUgaXMgY29uc2lkZXJlZCB0byBiZSBleHBlcmltZW50YWwuXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UnbGwgbmVlZCB0aGUgdXNlci1sZXZlbCB1dGlsaXRpZXNcXG4gIDI2OlxcdFxcdCAgZnJvbSB0aGUgcGFja2FnZSBpcHJvdXRlMit0YyBhdFxcbiAgMjc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2lwcm91dGUyL1xcdTAwM2UuICBUaGF0IHBhY2thZ2VcXG4gIDI4OlxcdFxcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcXG4gIDI5OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTJcXHUwMDNlLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoaXMgUXVhbGl0eSBvZiBTZXJ2aWNlIChRb1MpIHN1cHBvcnQgd2lsbCBlbmFibGUgeW91IHRvIHVzZVxcbiAgMzI6XFx0XFx0ICBEaWZmZXJlbnRpYXRlZCBTZXJ2aWNlcyAoZGlmZnNlcnYpIGFuZCBSZXNvdXJjZSBSZXNlcnZhdGlvbiBQcm90b2NvbFxcbiAgMzM6XFx0XFx0ICAoUlNWUCkgb24geW91ciBMaW51eCByb3V0ZXIgaWYgeW91IGFsc28gc2F5IFkgdG8gdGhlIGNvcnJlc3BvbmRpbmdcXG4gIDM0OlxcdFxcdCAgY2xhc3NpZmllcnMgYmVsb3cuICBEb2N1bWVudGF0aW9uIGFuZCBzb2Z0d2FyZSBpcyBhdFxcbiAgMzU6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2RpZmZzZXJ2LnNvdXJjZWZvcmdlLm5ldC9cXHUwMDNlLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCB0byBcXFwiL3Byb2MgZmlsZSBzeXN0ZW1cXFwiIGJlbG93LCB5b3Ugd2lsbCBiZSBhYmxlXFxuICAzODpcXHRcXHQgIHRvIHJlYWQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHBhY2tldCBzY2hlZHVsZXJzIGZyb20gdGhlIGZpbGVcXG4gIDM5OlxcdFxcdCAgL3Byb2MvbmV0L3BzY2hlZC5cXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNTo1MS4zNzA0MjI3MTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5OTE2NTk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBORVRfU0NIRUQgSW5jbHVzaW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRvIHVuZGVyc3RhbmQgaG93IGBORVRfU0NIRURgIGlzIGhhbmRsZWQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uOiBgbmV0L0tjb25maWdgLiBUaGlzIGZpbGUgZGljdGF0ZXMgYWxsIHRoZSBuZXR3b3JraW5nLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBCeSBleGFtaW5pbmcgaXRzIHN0cnVjdHVyZSBhbmQgZGVwZW5kZW5jaWVzLCBJIGNhbiBxdWlja2x5IGRldGVybWluZSBob3cgYE5FVF9TQ0hFRGAgaXMgZXhwb3NlZCB0byB0aGUgdXNlciBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp1bmRlciB3aGF0IGNvbmRpdGlvbnMqIGl0IGJlY29tZXMgYXZhaWxhYmxlLiBJIG5lZWQgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQsIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBtaWdodCBkZXBlbmQgb24sIGFuZCBwb3RlbnRpYWxseSB3aGVyZSBpdCdzICp1c2VkKiB3aXRoaW4gdGhlIGxhcmdlciBgS2NvbmZpZ2AgaGllcmFyY2h5LiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgcHJvdmlkZSBjb250ZXh0IGZvciB0aGUgd2lkZXIgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjgxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNTo1My45Njk1OTE2MTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDgzMzI0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MTIwOTQ9c3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTIxNjktXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKTtcXG5uZXQvY29yZS9kZXYuYzoxMjE3MDojaWZkZWYgQ09ORklHX05FVF9TQ0hFRFxcbm5ldC9jb3JlL2Rldi5jLTEyMTcxLVxcdGhhc2hfaW5pdChkZXYtXFx1MDAzZXFkaXNjX2hhc2gpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTAwMzg9c3RhdGljIHUzMiBicGZfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDIxMS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBfX3NrX2J1ZmYsIHRjX2luZGV4KTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMDIxMjojaWZkZWYgQ09ORklHX05FVF9TQ0hFRFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjEzLVxcdFxcdGlmICh0eXBlID09IEJQRl9XUklURSlcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE1NTk9c3RhdGljIHZvaWQgX19jb3B5X3NrYl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE1OTktI2VuZGlmXFxubmV0L2NvcmUvc2tidWZmLmM6MTYwMDojaWZkZWYgQ09ORklHX05FVF9TQ0hFRFxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MDEtXFx0Q0hFQ0tfU0tCX0ZJRUxEKHRjX2luZGV4KTtcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jPTI3NT1zdGF0aWMgaW50IGZsb3dfbGltaXRfdGFibGVfbGVuX3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMjk1LVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjI5NjojaWZkZWYgQ09ORklHX05FVF9TQ0hFRFxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTI5Ny1zdGF0aWMgaW50IHNldF9kZWZhdWx0X3FkaXNjKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYz00MzA9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTU4OS0jZW5kaWZcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzo1OTA6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy01OTEtXFx0e1xcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9NTUxPXN0YXRpYyB2b2lkIGlwX2NvcHlfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTU2My1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzo1NjQ6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy01NjUtXFx0dG8tXFx1MDAzZXRjX2luZGV4ID0gZnJvbS1cXHUwMDNldGNfaW5kZXg7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9NzA0PXN0YXRpYyB2b2lkIGlwNl9jb3B5X21ldGFkYXRhKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNzE1LVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzo3MTY6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNzE3LVxcdHRvLVxcdTAwM2V0Y19pbmRleCA9IGZyb20tXFx1MDAzZXRjX2luZGV4O1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy00My1cXG5uZXQvc2NoZWQvS2NvbmZpZzo0NDppZiBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy00NS1cXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTk1ND1jb25maWcgTkVUX1RDX1NLQl9FWFRcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTk2NS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo5NjY6ZW5kaWYgIyBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy05NjctXFxuLS1cXG5uZXQvc2NoZWQvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfSU5FVClcXHRcXHQrPSBzY2hfZnJhZy5vXFxubmV0L3NjaGVkL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX05FVF9TQ0hFRClcXHRcXHQrPSBzY2hfYXBpLm8gc2NoX2JsYWNraG9sZS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ORVRfQ0xTKVxcdFxcdCs9IGNsc19hcGkub1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MzM5Mj1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIlRoZSBDQUtFIHNoYXBlci5cXFwiKTtcXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzozMzkzOk1PRFVMRV9JTVBPUlRfTlMoXFxcIk5FVF9TQ0hFRF9JTlRFUk5BTFxcXCIpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTEwNj1zdGF0aWMgdm9pZCBfX3FkaXNjX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpxZGlzYylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMTAtXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTExMTojaWZkZWYgQ09ORklHX05FVF9TQ0hFRFxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTExMTItXFx0cWRpc2NfaGFzaF9kZWwocWRpc2MpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTIyOD1zdGF0aWMgdm9pZCBhdHRhY2hfZGVmYXVsdF9xZGlzY3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTEyNjItXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM6MTI2MzojaWZkZWYgQ09ORklHX05FVF9TQ0hFRFxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTEyNjQtXFx0aWYgKHFkaXNjICE9IFxcdTAwMjZub29wX3FkaXNjKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9nZW5lcmljLmM9MTQ0ND12b2lkIG1xX2NoYW5nZV9yZWFsX251bV90eChzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgaW50IG5ld19yZWFsX3R4KVxcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jLTE0NDUte1xcbm5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jOjE0NDY6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcXG5uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYy0xNDQ3LVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYz00OD12b2lkIG1xX2Rlc3Ryb3lfY29tbW9uKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9tcS5jLTU5LX1cXG5uZXQvc2NoZWQvc2NoX21xLmM6NjA6RVhQT1JUX1NZTUJPTF9OU19HUEwobXFfZGVzdHJveV9jb21tb24sIFxcXCJORVRfU0NIRURfSU5URVJOQUxcXFwiKTtcXG5uZXQvc2NoZWQvc2NoX21xLmMtNjEtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX21xLmM9Njg9aW50IG1xX2luaXRfY29tbW9uKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX21xLmMtMTA0LX1cXG5uZXQvc2NoZWQvc2NoX21xLmM6MTA1OkVYUE9SVF9TWU1CT0xfTlNfR1BMKG1xX2luaXRfY29tbW9uLCBcXFwiTkVUX1NDSEVEX0lOVEVSTkFMXFxcIik7XFxubmV0L3NjaGVkL3NjaF9tcS5jLTEwNi1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYz0xMjA9dm9pZCBtcV9hdHRhY2goc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX21xLmMtMTMxLVxcdFxcdFxcdHFkaXNjX3B1dChvbGQpO1xcbm5ldC9zY2hlZC9zY2hfbXEuYzoxMzI6I2lmZGVmIENPTkZJR19ORVRfU0NIRURcXG5uZXQvc2NoZWQvc2NoX21xLmMtMTMzLVxcdFxcdGlmIChudHggXFx1MDAzYyBkZXYtXFx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYy0xNDAtfVxcbm5ldC9zY2hlZC9zY2hfbXEuYzoxNDE6RVhQT1JUX1NZTUJPTF9OU19HUEwobXFfYXR0YWNoLCBcXFwiTkVUX1NDSEVEX0lOVEVSTkFMXFxcIik7XFxubmV0L3NjaGVkL3NjaF9tcS5jLTE0Mi1cXG5uZXQvc2NoZWQvc2NoX21xLmM9MTQzPXZvaWQgbXFfZHVtcF9jb21tb24oc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX21xLmMtMTgzLX1cXG5uZXQvc2NoZWQvc2NoX21xLmM6MTg0OkVYUE9SVF9TWU1CT0xfTlNfR1BMKG1xX2R1bXBfY29tbW9uLCBcXFwiTkVUX1NDSEVEX0lOVEVSTkFMXFxcIik7XFxubmV0L3NjaGVkL3NjaF9tcS5jLTE4NS1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYz0yMDI9c3RydWN0IG5ldGRldl9xdWV1ZSAqbXFfc2VsZWN0X3F1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9tcS5jLTIwNi19XFxubmV0L3NjaGVkL3NjaF9tcS5jOjIwNzpFWFBPUlRfU1lNQk9MX05TX0dQTChtcV9zZWxlY3RfcXVldWUsIFxcXCJORVRfU0NIRURfSU5URVJOQUxcXFwiKTtcXG5uZXQvc2NoZWQvc2NoX21xLmMtMjA4LVxcbi0tXFxubmV0L3NjaGVkL3NjaF9tcS5jPTIzNT1zdHJ1Y3QgUWRpc2MgKm1xX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX21xLmMtMjQwLX1cXG5uZXQvc2NoZWQvc2NoX21xLmM6MjQxOkVYUE9SVF9TWU1CT0xfTlNfR1BMKG1xX2xlYWYsIFxcXCJORVRfU0NIRURfSU5URVJOQUxcXFwiKTtcXG5uZXQvc2NoZWQvc2NoX21xLmMtMjQyLVxcbm5ldC9zY2hlZC9zY2hfbXEuYz0yNDM9dW5zaWduZWQgbG9uZyBtcV9maW5kKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYy0yNTAtfVxcbm5ldC9zY2hlZC9zY2hfbXEuYzoyNTE6RVhQT1JUX1NZTUJPTF9OU19HUEwobXFfZmluZCwgXFxcIk5FVF9TQ0hFRF9JTlRFUk5BTFxcXCIpO1xcbm5ldC9zY2hlZC9zY2hfbXEuYy0yNTItXFxubmV0L3NjaGVkL3NjaF9tcS5jPTI1Mz1pbnQgbXFfZHVtcF9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYy0yNjItfVxcbm5ldC9zY2hlZC9zY2hfbXEuYzoyNjM6RVhQT1JUX1NZTUJPTF9OU19HUEwobXFfZHVtcF9jbGFzcywgXFxcIk5FVF9TQ0hFRF9JTlRFUk5BTFxcXCIpO1xcbm5ldC9zY2hlZC9zY2hfbXEuYy0yNjQtXFxubmV0L3NjaGVkL3NjaF9tcS5jPTI2NT1pbnQgbXFfZHVtcF9jbGFzc19zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYy0yNzUtfVxcbm5ldC9zY2hlZC9zY2hfbXEuYzoyNzY6RVhQT1JUX1NZTUJPTF9OU19HUEwobXFfZHVtcF9jbGFzc19zdGF0cywgXFxcIk5FVF9TQ0hFRF9JTlRFUk5BTFxcXCIpO1xcbm5ldC9zY2hlZC9zY2hfbXEuYy0yNzctXFxubmV0L3NjaGVkL3NjaF9tcS5jPTI3OD12b2lkIG1xX3dhbGsoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBxZGlzY193YWxrZXIgKmFyZylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfbXEuYy0yOTEtfVxcbm5ldC9zY2hlZC9zY2hfbXEuYzoyOTI6RVhQT1JUX1NZTUJPTF9OU19HUEwobXFfd2FsaywgXFxcIk5FVF9TQ0hFRF9JTlRFUk5BTFxcXCIpO1xcbm5ldC9zY2hlZC9zY2hfbXEuYy0yOTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA1OjU1LjQ3NzkyODc2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NjAzMTU5MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUYXByaW8gQ29uZmlndXJhdGlvbiBQcm9jZXNzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AgY29kZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBjb25maWd1cmF0aW9uIGZsb3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBoYXBwZW5zIHdoZW4gYSB1c2VyIHNldHMgdXAgYSBUQVBSSU8gcWRpc2MuIEZyb20gd2hhdCBJIHJlY2FsbCwgdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgYFJUTV9ORVdRRElTQ2Agb3IgYFJUTV9TRVRRRElTQ2AgbWVzc2FnZXMsIHdpbGwgdHJpZ2dlciBlaXRoZXIgYHRhcHJpb19pbml0YCBvciBgdGFwcmlvX2NoYW5nZWAuIE5vdywgdGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgdG8gc2VlIGhvdyB0aGUgc2NoZWR1bGUgaXMgYWN0dWFsbHkgcGFyc2VkIGFuZCBhcHBsaWVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aG9zZSBlbnRyeSBwb2ludHMuIEkgYmVsaWV2ZSB0aGF0IGB0YXByaW9fY2hhbmdlYCBjYWxscyBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgd2hpY2ggaXMgbGlrZWx5IHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHNjaGVkdWxlIHBhcmFtZXRlcnMgZ2V0IHBhcnNlZCwgdmFsaWRhdGVkLCBhbmQgdHJhbnNsYXRlZCBpbnRvIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBkcml2ZSB0aGUgVEFQUklPIHF1ZXVpbmcgYmVoYXZpb3IuIEkgc2hvdWxkIGJlZ2luIGJ5IGNoZWNraW5nIGB0YXByaW9faW5pdGAgYW5kIGB0YXByaW9fY2hhbmdlYCBpbiBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AuIFRoYXQncyB3aGVyZSBJIHdpbGwgc3RhcnQsIHJpZ2h0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDU6NTcuOTM4MjQ3Nzg2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MTA6XFx0XFx0XFx0c3RydWN0IG5ldGRldl90Y190eHEgcmVzO1xcbjE4MTE6XFx0XFxuMTgxMjpcXHRcXHRcXHRyZXMuY29tYmluZWQgPSBSRUFEX09OQ0UoZGV2LVxcdTAwM2V0Y190b190eHFbaV0uY29tYmluZWQpO1xcbjE4MTM6XFx0XFx0XFx0aWYgKHJlcy5jb3VudCAhPSBtcXByaW8tXFx1MDAzZWNvdW50W2ldIHx8XFxuMTgxNDpcXHRcXHRcXHQgICAgcmVzLm9mZnNldCAhPSBtcXByaW8tXFx1MDAzZW9mZnNldFtpXSlcXG4xODE1OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4xODE2OlxcdFxcdH1cXG4xODE3OlxcdFxcbjE4MTg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBUQ19CSVRNQVNLOyBpKyspXFxuMTgxOTpcXHRcXHRcXHRpZiAobmV0ZGV2X2dldF9wcmlvX3RjX21hcChkZXYsIGkpICE9IG1xcHJpby1cXHUwMDNlcHJpb190Y19tYXBbaV0pXFxuMTgyMDpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTgyMTpcXHRcXG4xODIyOlxcdFxcdHJldHVybiAwO1xcbjE4MjM6XFx0fVxcbjE4MjQ6XFx0XFxuMTgyNTpcXHRzdGF0aWMgaW50IHRhcHJpb19jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4xODI2OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTgyNzpcXHR7XFxuMTgyODpcXHRcXHRzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqc3RhYiA9IHJ0bmxfZGVyZWZlcmVuY2Uoc2NoLVxcdTAwM2VzdGFiKTtcXG4xODI5OlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9UQVBSSU9fQVRUUl9NQVggKyAxXSA9IHsgfTtcXG4xODMwOlxcdFxcdHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsICphZG1pbiwgKm5ld19hZG1pbjtcXG4xODMxOlxcdFxcdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuMTgzMjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XFxuMTgzMzpcXHRcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKm1xcHJpbyA9IE5VTEw7XFxuMTgzNDpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjE4MzU6XFx0XFx0dTMyIHRhcHJpb19mbGFncztcXG4xODM2OlxcdFxcdGt0aW1lX3Qgc3RhcnQ7XFxuMTgzNzpcXHRcXHRpbnQgaSwgZXJyO1xcbjE4Mzg6XFx0XFxuMTgzOTpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFRDQV9UQVBSSU9fQVRUUl9NQVgsIG9wdCxcXG4xODQwOlxcdFxcdFxcdFxcdFxcdFxcdCAgdGFwcmlvX3BvbGljeSwgZXh0YWNrKTtcXG4xODQxOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjE4NDI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xODQzOlxcdFxcbjE4NDQ6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9QUklPTUFQXSlcXG4xODQ1OlxcdFxcdFxcdG1xcHJpbyA9IG5sYV9kYXRhKHRiW1RDQV9UQVBSSU9fQVRUUl9QUklPTUFQXSk7XFxuMTg0NjpcXHRcXG4xODQ3OlxcdFxcdC8qIFRoZSBzZW1hbnRpY3Mgb2YgdGhlICdmbGFncycgYXJndW1lbnQgaW4gcmVsYXRpb24gdG8gJ2NoYW5nZSgpJ1xcbjE4NDg6XFx0XFx0ICogcmVxdWVzdHMsIGFyZSBpbnRlcnByZXRlZCBmb2xsb3dpbmcgdHdvIHJ1bGVzICh3aGljaCBhcmUgYXBwbGllZCBpblxcbjE4NDk6XFx0XFx0ICogdGhpcyBvcmRlcik6ICgxKSBhbiBvbWl0dGVkICdmbGFncycgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXNcXG4xODUwOlxcdFxcdCAqIHplcm87ICgyKSB0aGUgJ2ZsYWdzJyBvZiBhIFxcXCJydW5uaW5nXFxcIiB0YXByaW8gaW5zdGFuY2UgY2Fubm90IGJlXFxuMTg1MTpcXHRcXHQgKiBjaGFuZ2VkLlxcbjE4NTI6XFx0XFx0ICovXFxuMTg1MzpcXHRcXHR0YXByaW9fZmxhZ3MgPSBubGFfZ2V0X3UzMl9kZWZhdWx0KHRiW1RDQV9UQVBSSU9fQVRUUl9GTEFHU10sIDApO1xcbjE4NTQ6XFx0XFxuMTg1NTpcXHRcXHQvKiB0eHRpbWUtYXNzaXN0IGFuZCBmdWxsIG9mZmxvYWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAqL1xcbjE4NTY6XFx0XFx0aWYgKCh0YXByaW9fZmxhZ3MgXFx1MDAyNiBUQ0FfVEFQUklPX0FUVFJfRkxBR19UWFRJTUVfQVNTSVNUKSBcXHUwMDI2XFx1MDAyNlxcbjE4NTc6XFx0XFx0ICAgICh0YXByaW9fZmxhZ3MgXFx1MDAyNiBUQ0FfVEFQUklPX0FUVFJfRkxBR19GVUxMX09GRkxPQUQpKSB7XFxuMTg1ODpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGV4dGFjaywgdGJbVENBX1RBUFJJT19BVFRSX0ZMQUdTXSxcXG4xODU5OlxcdFxcdFxcdFxcdFxcdCAgICBcXFwiVFhUSU1FX0FTU0lTVCBhbmQgRlVMTF9PRkZMT0FEIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcXFwiKTtcXG4xODYwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4NjE6XFx0XFx0fVxcbjE4NjI6XFx0XFxuMTg2MzpcXHRcXHRpZiAocS1cXHUwMDNlZmxhZ3MgIT0gdGFwcmlvX2ZsYWdzKSB7XFxuMTg2NDpcXHRcXHRcXHRpZiAocS1cXHUwMDNlZmxhZ3MgIT0gVEFQUklPX0ZMQUdTX0lOVkFMSUQpIHtcXG4xODY1OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuMTg2NjpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiQ2hhbmdpbmcgJ2ZsYWdzJyBvZiBhIHJ1bm5pbmcgc2NoZWR1bGUgaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbjE4Njc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE4Njg6XFx0XFx0XFx0fVxcbjE4Njk6XFx0XFx0XFx0V1JJVEVfT05DRShxLVxcdTAwM2VmbGFncywgdGFwcmlvX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDU6NTcuOTM4NDM3NjM2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2OTQ5NTQwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ2hlY2tpbmcgYHRhcHJpb19pbml0YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgaW1tZWRpYXRlIG5lZWQgaGVyZSBpcyB0byB0aG9yb3VnaGx5IGNoZWNrIGB0YXByaW9faW5pdGAuIFdlIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IG9yIHNldHVwIGZ1bmN0aW9uIGZvciBzb21ldGhpbmcsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBjYW4gYWxyZWFkeSBhbnRpY2lwYXRlIGEgZmV3IGtleSBhcmVhcyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2l0aGluIHRoaXMgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBpdCdzIGRvaW5nIG9uIGEgaGlnaCBsZXZlbCwgdmVyaWZ5IGhvdyBpdCdzIGludGVyZmFjaW5nIHdpdGggdGhlIGV4aXN0aW5nIGxpYnJhcmllcywgYW5kIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG9idmlvdXMgbG9naWMgZmxhd3Mgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHdheSB0aGF0IGluaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyBvY2N1ciwgZXNwZWNpYWxseSBhbnkgc2hhcmVkIHJlc291cmNlcy5cblxuSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmdW5jdGlvbnMgYXJlIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgdGFwcmlvX2luaXRgLiBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgb2YgY29uY2Vybiwgc3VjaCBhcyBkZXByZWNhdGVkIGZ1bmN0aW9ucywgb3IgY2FsbHMgdG8gZXh0ZXJuYWwgc2VydmljZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgcmVzcG9uc2liaWxpdHkuIElzIGl0IHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgc3RhcnRpbmcgb3RoZXIgdGhyZWFkcz8gSSBuZWVkIHRvIGNoZWNrIGFsbCBvZiB0aGF0IHRvIGVuc3VyZSB0aGVyZSBpcyBubyBpc3N1ZXMuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBzeXN0ZW0gaXMgc2V0IHVwLCBzbyBJIGNhbiBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBleGlzdGluZyBwcm9ncmFtLiBUaGlzIHdpbGwgaG9wZWZ1bGx5IGFsbG93IG1lIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBjb2RlIGFuZCBtYWtlIHNvbWUgaW50ZWxsaWdlbnQgcHJlZGljdGlvbnMgYWJvdXQgYXJlYXMgdGhhdCBhcmUgZ29vZCBhbmQgYXJlYXMgdGhhdCByZXF1aXJlIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4OTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjAxLjYzMzM5NDMzMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTU1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTYwOlxcdFxcdFxcdFxcdCAqIHRvIGFsbCBuZXRkZXYgVFggcXVldWVzLCBzbyB0aGF0IGRldl9xZGlzY19lbnF1ZXVlKClcXG4yMTYxOlxcdFxcdFxcdFxcdCAqIGdvZXMgdGhyb3VnaCB0YXByaW9fZW5xdWV1ZSgpLlxcbjIxNjI6XFx0XFx0XFx0XFx0ICovXFxuMjE2MzpcXHRcXHRcXHRcXHRkZXZfcXVldWVfcWRpc2MgPSBzY2g7XFxuMjE2NDpcXHRcXHRcXHR9XFxuMjE2NTpcXHRcXHRcXHRvbGQgPSBkZXZfZ3JhZnRfcWRpc2MoZGV2X3F1ZXVlLCBkZXZfcXVldWVfcWRpc2MpO1xcbjIxNjY6XFx0XFx0XFx0LyogVGhlIHFkaXNjJ3MgcmVmY291bnQgcmVxdWlyZXMgdG8gYmUgZWxldmF0ZWQgb25jZVxcbjIxNjc6XFx0XFx0XFx0ICogZm9yIGVhY2ggbmV0ZGV2IFRYIHF1ZXVlIGl0IGlzIGdyYWZ0ZWQgb250b1xcbjIxNjg6XFx0XFx0XFx0ICovXFxuMjE2OTpcXHRcXHRcXHRxZGlzY19yZWZjb3VudF9pbmMoZGV2X3F1ZXVlX3FkaXNjKTtcXG4yMTcwOlxcdFxcdFxcdGlmIChvbGQpXFxuMjE3MTpcXHRcXHRcXHRcXHRxZGlzY19wdXQob2xkKTtcXG4yMTcyOlxcdFxcdH1cXG4yMTczOlxcdH1cXG4yMTc0OlxcdFxcbjIxNzU6XFx0c3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnRhcHJpb19xdWV1ZV9nZXQoc3RydWN0IFFkaXNjICpzY2gsXFxuMjE3NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgY2wpXFxuMjE3NzpcXHR7XFxuMjE3ODpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XFxuMjE3OTpcXHRcXHR1bnNpZ25lZCBsb25nIG50eCA9IGNsIC0gMTtcXG4yMTgwOlxcdFxcbjIxODE6XFx0XFx0aWYgKG50eCBcXHUwMDNlPSBkZXYtXFx1MDAzZW51bV90eF9xdWV1ZXMpXFxuMjE4MjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4yMTgzOlxcdFxcbjIxODQ6XFx0XFx0cmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBudHgpO1xcbjIxODU6XFx0fVxcbjIxODY6XFx0XFxuMjE4NzpcXHRzdGF0aWMgaW50IHRhcHJpb19ncmFmdChzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcXG4yMTg4OlxcdFxcdFxcdFxcdHN0cnVjdCBRZGlzYyAqbmV3LCBzdHJ1Y3QgUWRpc2MgKipvbGQsXFxuMjE4OTpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMjE5MDpcXHR7XFxuMjE5MTpcXHRcXHRzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xcbjIxOTI6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpO1xcbjIxOTM6XFx0XFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlID0gdGFwcmlvX3F1ZXVlX2dldChzY2gsIGNsKTtcXG4yMTk0OlxcdFxcbjIxOTU6XFx0XFx0aWYgKCFkZXZfcXVldWUpXFxuMjE5NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMTk3OlxcdFxcbjIxOTg6XFx0XFx0aWYgKCFuZXcpXFxuMjE5OTpcXHRcXHRcXHRuZXcgPSBcXHUwMDI2bm9vcF9xZGlzYztcXG4yMjAwOlxcdFxcbjIyMDE6XFx0XFx0aWYgKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApXFxuMjIwMjpcXHRcXHRcXHRkZXZfZGVhY3RpdmF0ZShkZXYsIGZhbHNlKTtcXG4yMjAzOlxcdFxcbjIyMDQ6XFx0XFx0LyogSW4gb2ZmbG9hZCBtb2RlLCB0aGUgY2hpbGQgUWRpc2MgaXMgZGlyZWN0bHkgYXR0YWNoZWQgdG8gdGhlIG5ldGRldlxcbjIyMDU6XFx0XFx0ICogVFggcXVldWUsIGFuZCB0aHVzLCB3ZSBuZWVkIHRvIGtlZXAgaXRzIHJlZmNvdW50IGVsZXZhdGVkIGluIG9yZGVyXFxuMjIwNjpcXHRcXHQgKiB0byBjb3VudGVyYWN0IHFkaXNjX2dyYWZ0KCkncyBjYWxsIHRvIHFkaXNjX3B1dCgpIG9uY2UgcGVyIFRYIHF1ZXVlLlxcbjIyMDc6XFx0XFx0ICogSG93ZXZlciwgc2F2ZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBuZXcgcWRpc2MgaW4gdGhlIHByaXZhdGUgYXJyYXkgaW5cXG4yMjA4OlxcdFxcdCAqIGJvdGggc29mdHdhcmUgYW5kIG9mZmxvYWQgY2FzZXMsIHRvIGhhdmUgYW4gdXAtdG8tZGF0ZSByZWZlcmVuY2UgdG9cXG4yMjA5OlxcdFxcdCAqIG91ciBjaGlsZHJlbi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6MDEuNjMzNzEyMzYxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzYzMjQwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBgdGFwcmlvX2luaXRgIGluIHRoZSBOZXRmaWx0ZXIgU2NoZWR1bGVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHRoZSBUQVBSSU8gc2NoZWR1bGVyIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzdGFydCBieSBwaW5wb2ludGluZyB0aGUgc291cmNlIGZpbGUuIFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiIHNvdW5kcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbG9jYXRpb24uIEdpdmVuIHdoYXQgSSBrbm93IGFib3V0IHRoZSB0eXBpY2FsIHN0cnVjdHVyZSBvZiB0aGUgTGludXgga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjaywgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBUQVBSSU8gY29kZS4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSB0aGUgaW5pdCBmdW5jdGlvbiBpdHNlbGYuIFR5cGljYWxseSwgaXTigJlzIG5hbWVkIHNvbWV0aGluZyBsaWtlIGB0YXByaW9faW5pdGAgb3IgYHRhcHJpb19tb2R1bGVfaW5pdGAuIE9uY2UgSSBoYXZlIHRoZSBmaWxlIG5hbWUsIGl0J3MganVzdCBhIG1hdHRlciBvZiBzZWFyY2hpbmcgZm9yIGl0LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaG93IHRoaXMgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCBhbmQgcG90ZW50aWFsbHkgZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjaGVkdWxlcidzIG92ZXJhbGwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYW5kIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBtb2R1bGUgbG9hZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjowMy44NzAwMzgzNjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NjI4MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbnQgdGFwcmlvX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIwMzU9c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNzMtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMDc0OnN0YXRpYyBpbnQgdGFwcmlvX2luaXQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNzUtXFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6MDMuOTY5NjcwODYxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDYwMDczNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW5pdGlhbCBUaG91Z2h0cyBvbiBgdGFwcmlvX2luaXRgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byBpdC4gVGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB0dXJuaW5nIG15IGF0dGVudGlvbiB0byB0aGUgYHRhcHJpb19pbml0YCBwYXJ0IG9mIHRoZSBjb2RlLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQuIEkga25vdyB0aGlzIHBhcnRpY3VsYXIgcGllY2UgbGlrZWx5IHNldHMgdGhlIGZvdW5kYXRpb24sIGluaXRpYWxpemVzIHRoZSBjb3JlIGNvbXBvbmVudHMsIGFuZCBwcmVwYXJlcyB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSByZXN0IG9mIHRoZSBleGVjdXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydCBwZXJmZWN0bHkgYmVjYXVzZSBJIHdpbGwgbmVlZCBpdCB0byBpbmZvcm0gZXZlcnl0aGluZyBlbHNlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBiZWdpbnMsIG9yIGF0IGxlYXN0LCB0aGlzIGlzIHRoZSBsYXVuY2hwYWQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MzksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjowNS45MTU2ODE2MDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA3NCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA3NDpcXHRzdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuMjA3NTpcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjIwNzY6XFx0e1xcbjIwNzc6XFx0XFx0c3RydWN0IHRhcHJpb19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4yMDc4OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcXG4yMDc5OlxcdFxcdGludCBpLCB0YztcXG4yMDgwOlxcdFxcbjIwODE6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnEtXFx1MDAzZWN1cnJlbnRfZW50cnlfbG9jayk7XFxuMjA4MjpcXHRcXG4yMDgzOlxcdFxcdGhydGltZXJfc2V0dXAoXFx1MDAyNnEtXFx1MDAzZWFkdmFuY2VfdGltZXIsIGFkdmFuY2Vfc2NoZWQsIENMT0NLX1RBSSwgSFJUSU1FUl9NT0RFX0FCUyk7XFxuMjA4NDpcXHRcXG4yMDg1OlxcdFxcdHEtXFx1MDAzZXJvb3QgPSBzY2g7XFxuMjA4NjpcXHRcXG4yMDg3OlxcdFxcdC8qIFdlIG9ubHkgc3VwcG9ydCBzdGF0aWMgY2xvY2tpZHMuIFVzZSBhbiBpbnZhbGlkIHZhbHVlIGFzIGRlZmF1bHRcXG4yMDg4OlxcdFxcdCAqIGFuZCBnZXQgdGhlIHZhbGlkIG9uZSBvbiB0YXByaW9fY2hhbmdlKCkuXFxuMjA4OTpcXHRcXHQgKi9cXG4yMDkwOlxcdFxcdHEtXFx1MDAzZWNsb2NraWQgPSAtMTtcXG4yMDkxOlxcdFxcdHEtXFx1MDAzZWZsYWdzID0gVEFQUklPX0ZMQUdTX0lOVkFMSUQ7XFxuMjA5MjpcXHRcXG4yMDkzOlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZxLVxcdTAwM2V0YXByaW9fbGlzdCwgXFx1MDAyNnRhcHJpb19saXN0KTtcXG4yMDk0OlxcdFxcbjIwOTU6XFx0XFx0aWYgKHNjaC1cXHUwMDNlcGFyZW50ICE9IFRDX0hfUk9PVCkge1xcbjIwOTY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNhbiBvbmx5IGJlIGF0dGFjaGVkIGFzIHJvb3QgcWRpc2NcXFwiKTtcXG4yMDk3OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4yMDk4OlxcdFxcdH1cXG4yMDk5OlxcdFxcbjIxMDA6XFx0XFx0aWYgKCFuZXRpZl9pc19tdWx0aXF1ZXVlKGRldikpIHtcXG4yMTAxOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJNdWx0aS1xdWV1ZSBkZXZpY2UgaXMgcmVxdWlyZWRcXFwiKTtcXG4yMTAyOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4yMTAzOlxcdFxcdH1cXG4yMTA0OlxcdFxcbjIxMDU6XFx0XFx0cS1cXHUwMDNlcWRpc2NzID0ga3phbGxvY19vYmpzKHEtXFx1MDAzZXFkaXNjc1swXSwgZGV2LVxcdTAwM2VudW1fdHhfcXVldWVzKTtcXG4yMTA2OlxcdFxcdGlmICghcS1cXHUwMDNlcWRpc2NzKVxcbjIxMDc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjEwODpcXHRcXG4yMTA5OlxcdFxcdGlmICghb3B0KVxcbjIxMTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjExMTpcXHRcXG4yMTEyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXYtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xcbjIxMTM6XFx0XFx0XFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlO1xcbjIxMTQ6XFx0XFx0XFx0c3RydWN0IFFkaXNjICpxZGlzYztcXG4yMTE1OlxcdFxcbjIxMTY6XFx0XFx0XFx0ZGV2X3F1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpO1xcbjIxMTc6XFx0XFx0XFx0cWRpc2MgPSBxZGlzY19jcmVhdGVfZGZsdChkZXZfcXVldWUsXFxuMjExODpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZwZmlmb19xZGlzY19vcHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjA1LjkxNTk3MjM4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDA4MjczNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGB0YXByaW9faW5pdGAgYW5kIGB0YXByaW9fY2hhbmdlYCBSZWxhdGlvbnNoaXAqKlxuXG5BbHJpZ2h0LCBJIHNlZSBhIHBvdGVudGlhbCBkZXBlbmRlbmN5IGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB0YXByaW9faW5pdGAgbWlnaHQgYmUgaW52b2tpbmcgYHRhcHJpb19jaGFuZ2VgIHNvbWV0aW1lIGFmdGVyIGl0cyBpbml0aWFsIGV4ZWN1dGlvbi4gVGhpcyB3YXJyYW50cyBhIHF1aWNrIHZlcmlmaWNhdGlvbi4gVG8gY29uZmlybSB0aGlzIGh1bmNoLCBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgc291cmNlIGNvZGUuIExldCdzIHBpbnBvaW50IHRoZSByZWxldmFudCBzZWN0aW9uLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiBsaW5lcyAyMTIwIHRocm91Z2ggMjE1MC4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgY29udGFpbiB0aGUgc21va2luZyBndW4gb3IsIGNvbnZlcnNlbHksIGNsZWFyIHVwIG15IHN1c3BpY2lvbi4gSSdtIGxvb2tpbmcgZm9yIGEgZGlyZWN0IGZ1bmN0aW9uIGNhbGwgb3IgYSBtb3JlIGluZGlyZWN0IG1lY2hhbmlzbSB0aGF0IHdvdWxkIHRyaWdnZXIgYHRhcHJpb19jaGFuZ2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM2MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6MDguOTI0MjQ5NDc0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFRDX0hfTUlOKGkgKyAxKSksXFxuMjEyMTpcXHRcXHRcXHRcXHRcXHRcXHQgIGV4dGFjayk7XFxuMjEyMjpcXHRcXHRcXHRpZiAoIXFkaXNjKVxcbjIxMjM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjEyNDpcXHRcXG4yMTI1OlxcdFxcdFxcdGlmIChpIFxcdTAwM2MgZGV2LVxcdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpXFxuMjEyNjpcXHRcXHRcXHRcXHRxZGlzY19oYXNoX2FkZChxZGlzYywgZmFsc2UpO1xcbjIxMjc6XFx0XFxuMjEyODpcXHRcXHRcXHRxLVxcdTAwM2VxZGlzY3NbaV0gPSBxZGlzYztcXG4yMTI5OlxcdFxcdH1cXG4yMTMwOlxcdFxcbjIxMzE6XFx0XFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjKyspXFxuMjEzMjpcXHRcXHRcXHRxLVxcdTAwM2VmcFt0Y10gPSBUQ19GUF9FWFBSRVNTO1xcbjIxMzM6XFx0XFxuMjEzNDpcXHRcXHR0YXByaW9fZGV0ZWN0X2Jyb2tlbl9tcXByaW8ocSk7XFxuMjEzNTpcXHRcXG4yMTM2OlxcdFxcdHJldHVybiB0YXByaW9fY2hhbmdlKHNjaCwgb3B0LCBleHRhY2spO1xcbjIxMzc6XFx0fVxcbjIxMzg6XFx0XFxuMjEzOTpcXHRzdGF0aWMgdm9pZCB0YXByaW9fYXR0YWNoKHN0cnVjdCBRZGlzYyAqc2NoKVxcbjIxNDA6XFx0e1xcbjIxNDE6XFx0XFx0c3RydWN0IHRhcHJpb19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4yMTQyOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTtcXG4yMTQzOlxcdFxcdHVuc2lnbmVkIGludCBudHg7XFxuMjE0NDpcXHRcXG4yMTQ1OlxcdFxcdC8qIEF0dGFjaCB1bmRlcmx5aW5nIHFkaXNjICovXFxuMjE0NjpcXHRcXHRmb3IgKG50eCA9IDA7IG50eCBcXHUwMDNjIGRldi1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgbnR4KyspIHtcXG4yMTQ3OlxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBudHgpO1xcbjIxNDg6XFx0XFx0XFx0c3RydWN0IFFkaXNjICpvbGQsICpkZXZfcXVldWVfcWRpc2M7XFxuMjE0OTpcXHRcXG4yMTUwOlxcdFxcdFxcdGlmIChGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVxcdTAwM2VmbGFncykpIHtcXG4yMTUxOlxcdFxcdFxcdFxcdHN0cnVjdCBRZGlzYyAqcWRpc2MgPSBxLVxcdTAwM2VxZGlzY3NbbnR4XTtcXG4yMTUyOlxcdFxcbjIxNTM6XFx0XFx0XFx0XFx0LyogSW4gb2ZmbG9hZCBtb2RlLCB0aGUgcm9vdCB0YXByaW8gcWRpc2MgaXMgYnlwYXNzZWRcXG4yMTU0OlxcdFxcdFxcdFxcdCAqIGFuZCB0aGUgbmV0ZGV2IFRYIHF1ZXVlcyBzZWUgdGhlIGNoaWxkcmVuIGRpcmVjdGx5XFxuMjE1NTpcXHRcXHRcXHRcXHQgKi9cXG4yMTU2OlxcdFxcdFxcdFxcdHFkaXNjLVxcdTAwM2VmbGFncyB8PSBUQ1FfRl9PTkVUWFFVRVVFIHwgVENRX0ZfTk9QQVJFTlQ7XFxuMjE1NzpcXHRcXHRcXHRcXHRkZXZfcXVldWVfcWRpc2MgPSBxZGlzYztcXG4yMTU4OlxcdFxcdFxcdH0gZWxzZSB7XFxuMjE1OTpcXHRcXHRcXHRcXHQvKiBJbiBzb2Z0d2FyZSBtb2RlLCBhdHRhY2ggdGhlIHJvb3QgdGFwcmlvIHFkaXNjXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjA4LjkyNDQ0NjMzNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDMyNDgzMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVGFwcmlvIFNjaGVkdWxlIFBhdGNoOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBsb29rcyBsaWtlIGEgc29saWQgdmFsaWRhdGlvbiBmaXgsIGFuZCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlscy4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBmdW5jdGlvbiBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGBjeWNsZV90aW1lYCBwYXJhbWV0ZXIuXG5cblByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyBhIGJpdCBsYXguIEl0IHdvdWxkIG9ubHkgY2FsY3VsYXRlIHRoZSBgY3ljbGVgICh0aGUgdG90YWwgc3VtIG9mIGFsbCBzY2hlZHVsZSBlbnRyeSBpbnRlcnZhbHMpICppZiogYG5ldy1cdTAwM2VjeWNsZV90aW1lYCB3YXNuJ3QgYWxyZWFkeSBzZXQuIFRoZW4sIGl0IGNoZWNrZWQgZm9yIGludGVnZXIgb3ZlcmZsb3dzLiBOb3csIHRoZSBwYXRjaCAqYWx3YXlzKiBjYWxjdWxhdGVzIGBjeWNsZWAuIEl0ICphbHdheXMqIGNoZWNrcyBmb3Igb3ZlcmZsb3cuIEFuZCwgY3JpdGljYWxseSwgaXQgYWRkcyBhIG5ldyBjaGVjazogSWYgYSB1c2VyIGhhcyBleHBsaWNpdGx5IHByb3ZpZGVkIGBuZXctXHUwMDNlY3ljbGVfdGltZWAgKmFuZCogdGhpcyBwcm92aWRlZCB2YWx1ZSBpcyAqbGVzcyogdGhhbiB0aGUgY2FsY3VsYXRlZCBgY3ljbGVgLCB0aGUgY29uZmlndXJhdGlvbiBpcyBub3cgcmVqZWN0ZWQgd2l0aCBhbiBgLUVJTlZBTGAgYW5kIGFuIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2UuIFRoaXMgaXMgaW1wb3J0YW50LCBhIGBjeWNsZV90aW1lYCBzaG9ydGVyIHRoYW4gdGhlIHN1bSBvZiBlbnRyeSBpbnRlcnZhbHMgaXMgbG9naWNhbGx5IGludmFsaWQuIFRoaXMgZWZmZWN0aXZlbHkgdGlnaHRlbnMgdXAgaW5wdXQgdmFsaWRhdGlvbi5cblxuRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgdGhlIHBhdGNoIHNlZW1zIHNwb3Qtb24uIEl0J3MgZml4aW5nIGEgcG90ZW50aWFsIGlzc3VlIHdpdGggaG93IGB0YXByaW9gIHNjaGVkdWxlcyBhcmUgY29uZmlndXJlZCB2aWEgbmV0bGluayBieSBlbnN1cmluZyB0aGF0IHRoZSBnaXZlbiBgY3ljbGVfdGltZWAgaXMgdmFsaWQgd2l0aCB0aGUgc3VtIG9mIHRoZSBzY2hlZHVsaW5nIGVudHJpZXMuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYW5kIHNlbnNpYmxlIGFkZGl0aW9uLCBlbnN1cmluZyB0aGF0IGEgdmFsaWQgc2NoZWR1bGUgaXMgYWx3YXlzIHVzZWQuXG5cbk5vdywgY29uc2lkZXJpbmcgcmVhY2hhYmlsaXR5LCB0aGlzIGlzIHRvdGFsbHkgd2l0aGluIHRoZSByZWFsbSBvZiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBgdGFwcmlvYCBxZGlzYyBpcyBlbnRpcmVseSBzb2Z0d2FyZS1iYXNlZC4gV2UgY2FuIGNyZWF0ZSBkdW1teSBpbnRlcmZhY2VzLCB2ZXRoIHBhaXJzLCBvciBldmVuIHRhcCBkZXZpY2VzLCBhbmQgdXNlIGB0Y2AgdG8gYXR0YWNoIGEgYHRhcHJpb2AgcWRpc2MgdG8gdGhlbS4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBzdGFuZGFyZCBMaW51eCBuZXR3b3JraW5nIHRvb2xpbmcgZWFzaWx5IHN1cHBvcnRzLCBhbmQgc3l6a2FsbGVyLCBiYXNlZCBvbiB0aGUgbm90ZXMsIGlzIGEgbmF0dXJhbCBmaXQgaGVyZS4gQW55IHVzZXIgd2l0aCB0aGUgYENBUF9ORVRfQURNSU5gIGNhcGFiaWxpdHkgY2FuIHNldCB0aGlzIHVwLlxuXG5UaGUgcXVlc3Rpb24gb2YgZnV6emluZyBpcyBhIG5hdHVyYWwgZm9sbG93LXVwLiBCYXNlZCBvbiB0aGUgY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBJdCBtb2RpZmllcyBjb3JlIHRyYWZmaWMgY29udHJvbCBzY2hlZHVsaW5nIGxvZ2ljLCBtYWtpbmcgaXQgYSBwb3RlbnRpYWxseSBmcnVpdGZ1bCB0YXJnZXQuIFdlIGFyZSBjaGFuZ2luZyB2YWxpZGF0aW9uIGFuZCBlcnJvciBwYXRocywgYW5kIGl0IGlzIG5vdCBoYXJkd2FyZS1zcGVjaWZpYywgcHVyZWx5IHNvZnR3YXJlLlxuXG5UbyBkZXRlcm1pbmUgaWYgZnV6emluZyBpcyB2aWFibGUsIG15IG5leHQgc3RlcCBpcyBlbnN1cmluZyB0aGUgY29uZmlncyBhcmUgY29ycmVjdCBhbmQgcmVhY2hhYmxlLiBJJ2xsIG5lZWQgYENPTkZJR19ORVRfU0NIX1RBUFJJT2AuIEkgc2VlIGl0IGRlcGVuZHMgb24gYE5FVF9TQ0hFRGAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgTkVUYC4gQWxzbyB0aGVyZSBpcyBhIHNlbGVjdCBvbiBgTkVUX1NDSF9NUVBSSU9fTElCYC4gSSB3b3VsZCBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBkZXBlbmRlbmNpZXMgYW5kIGAjaWZkZWZgIGRpcmVjdGl2ZXMgaW4gdGhlIHNvdXJjZSBmaWxlIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjoxNS4zNTY5MzIwNDFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MzMzMTI4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6MTUuNDQxMjc1NjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc5MDI1MDY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBmb3IgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB3aXRoaW4gYHNjaF90YXByaW8uY2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGZpbGUgcmVsaWVzIG9uIGFueSBzcGVjaWZpYyBgQ09ORklHX2AgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIFRoaXMgaXMgYSBzdGFuZGFyZCBmaXJzdCBzdGVwIHdoZW4gdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhYmlsaXR5IGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiB3aXRoaW4gYSBrZXJuZWwgbW9kdWxlIG9yIGRyaXZlci4gSXQgYWxsb3dzIG1lIHRvIHBpbnBvaW50IHdoaWNoIHBhcnRzIG9mIHRoZSBjb2RlIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHJlbGF0aW9uc2hpcHMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nLCBwb3J0aW5nLCBhbmQgZ2VuZXJhbGx5IHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGhvdyB0aGlzIG1vZHVsZSBmaXRzIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIFRpbWUgdG8gZ2V0IG15IGdyZXAgb24gYW5kIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjoyMC4yMzE1Mjk0MzZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODY5OTA0OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjoyMC4zNzAyMzQyMzRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU4MjUzMjc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqQ2hlY2tpbmcgYG5ldC9zY2hlZC9LY29uZmlnYCBmb3IgYE5FVF9TQ0hfVEFQUklPYCBhbmQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVHJhZmZpYyBBd2FyZSBQcmlvcml0eSBTY2hlZHVsaW5nIChUQVBSSU8pIHdpdGhpbiB0aGUgTGludXggbmV0d29ya2luZyBzdGFjay4gTXkgZmlyc3QgbW92ZSBpcyB0byBkaXZlIGludG8gYG5ldC9zY2hlZC9LY29uZmlnYC4gSSBhbHJlYWR5IGtub3cgdGhlIGdlbmVyYWwgbGF5b3V0IG9mIHRoZSBuZXR3b3JraW5nIEtjb25maWcgZmlsZXMsIHNvIEkgY2FuIHF1aWNrbHkgbmF2aWdhdGUgdG8gdGhhdCBkaXJlY3RvcnkuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgYE5FVF9TQ0hfVEFQUklPYCBvcHRpb24gZGlyZWN0bHkg4oCTIHRoYXQncyB0aGUgcHJpbWFyeSB0YXJnZXQuIEkgbmVlZCB0byBzZWUgaWYgaXQncyBkZWZpbmVkIGFuZCB3aGF0IGl0cyBkZWZhdWx0IHNldHRpbmcgaXMuXG5cbkJleW9uZCB0aGUgY29yZSBvcHRpb24sIEkgKm11c3QqIGltbWVkaWF0ZWx5IGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzLiBJIGhhdmUgdG8ga25vdyAqd2hhdCogb3RoZXIgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGFyZSByZXF1aXJlZCBiZWZvcmUgVEFQUklPIGNhbiBiZSBzZWxlY3RlZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBhbmQgcG90ZW50aWFsIGJ1aWxkIGRlcGVuZGVuY2llcy4gSeKAmWxsIGxvb2sgZm9yIHRoaW5ncyBsaWtlLCBkb2VzIGl0IHJlcXVpcmUgYSBzcGVjaWZpYyBxdWV1aW5nIGRpc2NpcGxpbmUgb3IgYSBjb3JlIHNjaGVkdWxlciBmZWF0dXJlPyBBbnkgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgYXJlIGtleSBoZXJlLiBJJ2xsIGFsc28gYmUgbWluZGZ1bCBvZiBnZW5lcmFsIGBORVRfU0NIRURgIGRlcGVuZGVuY2llcywgYXMgVEFQUklPIGlzIGEgc2NoZWR1bGluZyBkaXNjaXBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAxNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjIzLjk1Mjc3MDc1MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NjAzMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9TQ0hfVEFQUklPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9MTY3PWNvbmZpZyBORVRfU0NIX01RUFJJT19MSUJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTE3MS1cXG5uZXQvc2NoZWQvS2NvbmZpZzoxNzI6Y29uZmlnIE5FVF9TQ0hfVEFQUklPXFxubmV0L3NjaGVkL0tjb25maWctMTczLVxcdHRyaXN0YXRlIFxcXCJUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIFNjaGVkdWxlclxcXCJcXG4tLVxcbm5ldC9zY2hlZC9NYWtlZmlsZT02Mz1vYmotJChDT05GSUdfTkVUX1NDSF9FVEYpXFx0Kz0gc2NoX2V0Zi5vXFxubmV0L3NjaGVkL01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19ORVRfU0NIX1RBUFJJTylcXHQrPSBzY2hfdGFwcmlvLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX05FVF9TQ0hfQlBGKVxcdCs9IGJwZl9xZGlzYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjI0LjA4NzM4MzcyOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTYyMjU3ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBUYXByaW8gU2NoZWR1bGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5FVF9TQ0hfVEFQUklPYCBhbmQgYE5FVF9TQ0hFRGAg4oCTIHRob3NlIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIEknbSBpbnRlcmVzdGVkIGluIGhlcmUuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgc28gSSdsbCBjaGVjayBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGZ1bmN0aW9ucyBpcyBnb2luZyB0byBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgc2NoZWR1bGVyIG9wZXJhdGVzIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MTAsIk91dHB1dFRva2VucyI6NTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjoyNy4wNDk2NDQ0MDdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjg5MDEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApP1thLXpBLVpfMC05XSsgW2EtekEtWl8wLTldK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uYy0zNC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjM1OnN0YXRpYyBMSVNUX0hFQUQodGFwcmlvX2xpc3QpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMzYtc3RhdGljIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHRhcHJpb19oYXZlX2Jyb2tlbl9tcXByaW87XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTExND1zdHJ1Y3QgX190Y190YXByaW9fcW9wdF9vZmZsb2FkIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTE4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTE5OnN0YXRpYyB2b2lkIHRhcHJpb19jYWxjdWxhdGVfZ2F0ZV9kdXJhdGlvbnMoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyMC1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2My1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE2NDpzdGF0aWMgYm9vbCB0YXByaW9fZW50cnlfYWxsb3dzX3R4KGt0aW1lX3Qgc2tiX2VuZF90aW1lLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTY1LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnksIGludCB0YylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTY5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTcwOnN0YXRpYyBrdGltZV90IHNjaGVkX2Jhc2VfdGltZShjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3Ny1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3ODpzdGF0aWMga3RpbWVfdCB0YXByaW9fbW9ub190b19hbnkoY29uc3Qgc3RydWN0IHRhcHJpb19zY2hlZCAqcSwga3RpbWVfdCBtb25vKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTc5LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkwLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTkxOnN0YXRpYyBrdGltZV90IHRhcHJpb19nZXRfdGltZShjb25zdCBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkyLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTk1LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTk2OnN0YXRpYyB2b2lkIHRhcHJpb19mcmVlX3NjaGVkX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5Ny17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwOC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwOTpzdGF0aWMgdm9pZCBzd2l0Y2hfc2NoZWR1bGVzKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTAtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICoqYWRtaW4sXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyMy0vKiBHZXQgaG93IG11Y2ggdGltZSBoYXMgYmVlbiBhbHJlYWR5IGVsYXBzZWQgaW4gdGhlIGN1cnJlbnQgY3ljbGUuICovXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMjQ6c3RhdGljIHMzMiBnZXRfY3ljbGVfdGltZV9lbGFwc2VkKHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCBrdGltZV90IHRpbWUpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjUte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzQtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMzU6c3RhdGljIGt0aW1lX3QgZ2V0X2ludGVydmFsX2VuZF90aW1lKHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM2LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqYWRtaW4sXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1Ni1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1NzpzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU4LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjYxLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjYyOnN0YXRpYyBpbnQgZHVyYXRpb25fdG9fbGVuZ3RoKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHU2NCBkdXJhdGlvbilcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI2My17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI3MC0gKi9cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI3MTpzdGF0aWMgdm9pZCB0YXByaW9fdXBkYXRlX3F1ZXVlX21heF9zZHUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI3Mi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpzY2hlZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MzIzPXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmZpbmRfZW50cnlfdG9fdHJhbnNtaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMzk5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NDAwOnN0YXRpYyBib29sIGlzX3ZhbGlkX2ludGVydmFsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDAxLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDE4LS8qIFRoaXMgcmV0dXJucyB0aGUgdHN0YW1wIHZhbHVlIHNldCBieSBUQ1AgaW4gdGVybXMgb2YgdGhlIHNldCBjbG9jay4gKi9cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjQxOTpzdGF0aWMga3RpbWVfdCBnZXRfdGNwX3RzdGFtcChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDIwLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDY3LSAqL1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NDY4OnN0YXRpYyBsb25nIGdldF9wYWNrZXRfdHh0aW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNDY5LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNTM5LS8qIERldmljZXMgd2l0aCBmdWxsIG9mZmxvYWQgYXJlIGV4cGVjdGVkIHRvIGhvbm9yIHRoaXMgaW4gaGFyZHdhcmUgKi9cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjU0MDpzdGF0aWMgYm9vbCB0YXByaW9fc2tiX2V4Y2VlZHNfcXVldWVfbWF4X3NkdShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU0MS1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU2MC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjU2MTpzdGF0aWMgaW50IHRhcHJpb19lbnF1ZXVlX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU2Mi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgUWRpc2MgKmNoaWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU4MS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjU4MjpzdGF0aWMgaW50IHRhcHJpb19lbnF1ZXVlX3NlZ21lbnRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTU4My1cXHRcXHRcXHRcXHQgICAgc3RydWN0IFFkaXNjICpjaGlsZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNjI2LSAqL1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6NjI3OnN0YXRpYyBpbnQgdGFwcmlvX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02MjgtXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTY1Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjEtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo2NjI6c3RhdGljIHZvaWQgdGFwcmlvX3NldF9idWRnZXRzKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02NjMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy02ODItLyogV2hlbiBhbiBza2IgaXMgc2VudCwgaXQgY29uc3VtZXMgZnJvbSB0aGUgYnVkZ2V0IG9mIGFsbCB0cmFmZmljIGNsYXNzZXMgKi9cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjY4MzpzdGF0aWMgaW50IHRhcHJpb191cGRhdGVfYnVkZ2V0cyhzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LCBzaXplX3QgbGVuLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtNjg0LVxcdFxcdFxcdFxcdCBpbnQgdGNfY29uc3VtZWQsIGludCBudW1fdGMpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTcwNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRhcHJpb19kZXF1ZXVlX2Zyb21fdHhxKHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgdHhxLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy03NjItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzo3NjM6c3RhdGljIHZvaWQgdGFwcmlvX25leHRfdGNfdHhxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB0YywgaW50ICp0eHEpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy03NjQte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz04MzM9c3RhdGljIHN0cnVjdCBza19idWZmICp0YXByaW9fZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtODcyLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6ODczOnN0YXRpYyBib29sIHNob3VsZF9yZXN0YXJ0X2N5Y2xlKGNvbnN0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm9wZXIsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy04NzQtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTg4NC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjg4NTpzdGF0aWMgYm9vbCBzaG91bGRfY2hhbmdlX3NjaGVkdWxlcyhjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICphZG1pbixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTg4Ni1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqb3BlcixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTAyMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdGFwcmlvX3BvbGljeVtUQ0FfVEFQUklPX0FUVFJfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwMzctXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMDM4OnN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDM5LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDY5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTA3MDpzdGF0aWMgaW50IHBhcnNlX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKm4sXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDcxLVxcdFxcdFxcdCAgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSwgaW50IGluZGV4LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMDg4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTA4OTpzdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEwOTAtXFx0XFx0XFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTI4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTEyOTpzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTMwLVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExODItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMTgzOnN0YXRpYyBpbnQgdGFwcmlvX3BhcnNlX21xcHJpb19vcHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExODQtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjEwLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTIxMTpzdGF0aWMgaW50IHRhcHJpb19nZXRfc3RhcnRfdGltZShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEyMTItXFx0XFx0XFx0XFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjQ0LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTI0NTpzdGF0aWMgdm9pZCBzZXR1cF9maXJzdF9lbmRfdGltZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI0Ni1cXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqc2NoZWQsIGt0aW1lX3QgYmFzZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI3NC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEyNzU6c3RhdGljIHZvaWQgdGFwcmlvX3N0YXJ0X3NjaGVkKHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTI3Ni1cXHRcXHRcXHQgICAgICAga3RpbWVfdCBzdGFydCwgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3KVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjk2LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTI5NzpzdGF0aWMgdm9pZCB0YXByaW9fc2V0X3BpY29zX3Blcl9ieXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMjk4LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMzAtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzMxOnN0YXRpYyBpbnQgdGFwcmlvX2Rldl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMzMi1cXHRcXHRcXHQgICAgICAgdm9pZCAqcHRyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzY3LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTM2ODpzdGF0aWMgdm9pZCBzZXR1cF90eHRpbWUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzNjktXFx0XFx0XFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLCBrdGltZV90IGJhc2UpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE0MDU9RVhQT1JUX1NZTUJPTF9HUEwodGFwcmlvX29mZmxvYWRfZ2V0KTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MDYtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDA3OnZvaWQgdGFwcmlvX29mZmxvYWRfZnJlZShzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqb2ZmbG9hZClcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0MDgte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xNDE5PUVYUE9SVF9TWU1CT0xfR1BMKHRhcHJpb19vZmZsb2FkX2ZyZWUpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDMyLSAqL1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQzMzpzdGF0aWMgdm9pZCB0YXByaW9fb2ZmbG9hZF9jb25maWdfY2hhbmdlZChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQzNC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0NDItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNDQzOnN0YXRpYyB1MzIgdGNfbWFwX3RvX3F1ZXVlX21hc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHRjX21hc2spXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDQ0LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTQ2MS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE0NjI6c3RhdGljIHZvaWQgdGFwcmlvX3NjaGVkX3RvX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0NjMtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNDkwLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTQ5MTpzdGF0aWMgdm9pZCB0YXByaW9fZGV0ZWN0X2Jyb2tlbl9tcXByaW8oc3RydWN0IHRhcHJpb19zY2hlZCAqcSlcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE0OTIte1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTA3LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTUwODpzdGF0aWMgdm9pZCB0YXByaW9fY2xlYW51cF9icm9rZW5fbXFwcmlvKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNTA5LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTUxOC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE1MTk6c3RhdGljIGludCB0YXByaW9fZW5hYmxlX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1MjAtXFx0XFx0XFx0XFx0IHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE1ODQtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNTg1OnN0YXRpYyBpbnQgdGFwcmlvX2Rpc2FibGVfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTU4Ni1cXHRcXHRcXHRcXHQgIHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2MjUtICovXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxNjI2OnN0YXRpYyBpbnQgdGFwcmlvX3BhcnNlX2Nsb2NraWQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKip0YixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE2MjctXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xNzAzLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTcwNDpzdGF0aWMgaW50IHRhcHJpb19wYXJzZV90Y19lbnRyeShzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3MDUtXFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTc1MC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE3NTE6c3RhdGljIGludCB0YXByaW9fcGFyc2VfdGNfZW50cmllcyhzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE3NTItXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xODAwLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTgwMTpzdGF0aWMgaW50IHRhcHJpb19tcXByaW9fY21wKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xODAyLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0ICptcXByaW8pXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MjQtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxODI1OnN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTgyNi1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDE5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjAyMDpzdGF0aWMgdm9pZCB0YXByaW9fcmVzZXQoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDIxLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjAzNC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwMzU6c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDM2LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA3My1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwNzQ6c3RhdGljIGludCB0YXByaW9faW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA3NS1cXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMTM4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjEzOTpzdGF0aWMgdm9pZCB0YXByaW9fYXR0YWNoKHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE0MC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIxNzU9c3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnRhcHJpb19xdWV1ZV9nZXQoc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxODYtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMTg3OnN0YXRpYyBpbnQgdGFwcmlvX2dyYWZ0KHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE4OC1cXHRcXHRcXHRzdHJ1Y3QgUWRpc2MgKm5ldywgc3RydWN0IFFkaXNjICoqb2xkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjI5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjIzMDpzdGF0aWMgaW50IGR1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyMzEtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjI1OS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIyNjA6c3RhdGljIGludCBkdW1wX3NjaGVkdWxlKHN0cnVjdCBza19idWZmICptc2csXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjYxLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpyb290KVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMjk1LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjI5NjpzdGF0aWMgaW50IHRhcHJpb19kdW1wX3RjX2VudHJpZXMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIyOTctXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzI4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjMyOTpzdGF0aWMgaW50IHRhcHJpb19wdXRfc3RhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgdmFsLCB1MTYgYXR0cnR5cGUpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzMwLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjMzNy1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIzMzg6c3RhdGljIGludCB0YXByaW9fZHVtcF94c3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBnbmV0X2R1bXAgKmQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzM5LVxcdFxcdFxcdCAgICAgIHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICpvZmZsb2FkLFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzg1LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjM4NjpzdGF0aWMgaW50IHRhcHJpb19kdW1wX3N0YXRzKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZ25ldF9kdW1wICpkKVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjM4Ny17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIzOTQtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMzk1OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXAoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMzk2LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjQ3Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyB0YXByaW9fZmluZChzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0ODUtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNDg2OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDg3LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjbXNnICp0Y20pXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI0OTctXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNDk4OnN0YXRpYyBpbnQgdGFwcmlvX2R1bXBfY2xhc3Nfc3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNDk5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBnbmV0X2R1bXAgKmQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1MTctXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTE4OnN0YXRpYyB2b2lkIHRhcHJpb193YWxrKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyICphcmcpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTE5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6MjcuMTYyNTM4NjU1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzODM3NzMwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBzY2hfdGFwcmlvLmNgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIHJldmlld2luZyB0aGUgY29yZSBpbnN0cnVjdGlvbiBhYm91dCBmb2N1c2luZyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoaXMgbWVhbnMgSSdtIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgKm5vdCogaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIHRoZXJlZm9yZSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIG1ha2luZyB0aGVtIGludGVyZXN0aW5nIGZvciB0aGUgYW5hbHlzaXMuXG5cbkknbSBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYHNjaF90YXByaW8uY2AuIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgUWRpc2Mgb3BlcmF0aW9ucyBmdW5jdGlvbnMsIGxpa2UgYHRhcHJpb19pbml0YCwgYHRhcHJpb19jaGFuZ2VgLCBhbmQgYHRhcHJpb19kdW1wYCwgYXJlIHJlZmVyZW5jZWQgYnkgZnVuY3Rpb24gcG9pbnRlcnMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGB0YXByaW9fcWRpc2Nfb3BzYCBzdHJ1Y3QuIEJlY2F1c2UgaWYgdGhleSAqYXJlKiByZWZlcmVuY2VkIGluIHRoYXQgd2F5IChsaWtlIGB0YXByaW9faW5pdGAsIGB0YXByaW9fY2hhbmdlYCwgYHRhcHJpb19kdW1wYCwgYHRhcHJpb19kZXN0cm95YCksIHRoZSBjb21waWxlciAqY2FuJ3QqIGlubGluZSB0aGVtOyB0aGVpciBhZGRyZXNzZXMgYXJlIHRha2VuLCB3aGljaCBpcyBwZXJmZWN0IGZvciBteSBwdXJwb3NlLlxuXG5BbmQsIG9mIGNvdXJzZSwgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBhY3R1YWxseSBiZWVuIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gU28sIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYHRhcHJpb19pbml0YCwgYHRhcHJpb19jaGFuZ2VgLCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAgYXJlIGluZGVlZCBnb29kIGNhbmRpZGF0ZXMgYXMgZm9jdXMgc3ltYm9scywgZ2l2ZW4gdGhlaXIgcG90ZW50aWFsIHRvIG1lZXQgdGhlIGluaXRpYWwgY3JpdGVyaWEuXG5cbkJlZm9yZSBnb2luZyBmdXJ0aGVyLCBJIHNob3VsZCBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNYWtlIHN1cmUgYE5FVF9TQ0hFRGAgYW5kIGBORVRfU0NIX1RBUFJJT2AgYXJlIGVuYWJsZWQg4oCTIGFsd2F5cyBnb29kIHRvIHZlcmlmeSB0aGVzZSB0aGluZ3MuXG5cbk5vdywgbGV0J3MgcmVjYXAgdGhlIGNvcmUgY2hhbmdlOiB0aGUgcGF0Y2ggdXBkYXRlcyBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCB3aXRoaW4gYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBUaGlzIHVwZGF0ZSBwcmltYXJpbHkgYWRkcmVzc2VzIHRoZSB2YWxpZGF0aW9uIG9mIGBjeWNsZV90aW1lYCBhZ2FpbnN0IHRoZSBzdW0gb2YgdGhlIHNjaGVkdWxlIGVudHJ5IGludGVydmFscywgZW5zdXJpbmcgYm90aCB0aGUgc3VtIGFuZCB0aW1lIGFyZSBjaGVja2VkIGZvciBvdmVyZmxvdy4gVGhpcyBpcyBhIGNydWNpYWwgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxpbmcgbW9kaWZpY2F0aW9uLCBhbmQgaXQncyByZWFjaGFibGUgdmlhIHJ0bmwgbmV0bGluayBzb2NrZXQgY29tbWFuZHMuXG5cblllcCwgdGhhdCdzIGFsbCBjbGVhci4gU2VlbXMgbGlrZSBJJ3ZlIGdvdCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZXMgYW5kIHRoZSBrZXkgYXNwZWN0cy4gVGltZSB0byBjYWxsIGl0IGluIGFuZCBkb2N1bWVudCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyODksIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjMxLjU0NjMxNDk3OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjU0OTY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX1RBUFJJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhcHJpb19jaGFuZ2VcIixcbiAgICBcInRhcHJpb19pbml0XCIsXG4gICAgXCJwYXJzZV90YXByaW9fc2NoZWR1bGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYXJzZV90YXByaW9fc2NoZWR1bGUoKSBpbiBuZXQvc2NoZWQvc2NoX3RhcHJpby5jIHRvIHVuY29uZGl0aW9uYWxseSB2YWxpZGF0ZSB0aGUgY3ljbGUgdGltZSBhZ2FpbnN0IHRoZSBzdW0gb2Ygc2NoZWR1bGUgZW50cnkgaW50ZXJ2YWxzIGFuZCBjaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdy4gVGhpcyBhZmZlY3RzIHNjaGVkdWxlIHBhcmFtZXRlciBwYXJzaW5nIHdoZW4gY3JlYXRpbmcgb3IgbW9kaWZ5aW5nIGEgdGFwcmlvIHFkaXNjIHZpYSBuZXRsaW5rLCB3aGljaCBpcyBmdWxseSByZWFjaGFibGUgaW4gc29mdHdhcmUtZW11bGF0ZWQgbmV0d29ya2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGFwcmlvX2NoYW5nZVwiLFxuICAgIFwidGFwcmlvX2luaXRcIixcbiAgICBcInBhcnNlX3RhcHJpb19zY2hlZHVsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpIGluIG5ldC9zY2hlZC9zY2hfdGFwcmlvLmMgdG8gdW5jb25kaXRpb25hbGx5IHZhbGlkYXRlIHRoZSBjeWNsZSB0aW1lIGFnYWluc3QgdGhlIHN1bSBvZiBzY2hlZHVsZSBlbnRyeSBpbnRlcnZhbHMgYW5kIGNoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93LiBUaGlzIGFmZmVjdHMgc2NoZWR1bGUgcGFyYW1ldGVyIHBhcnNpbmcgd2hlbiBjcmVhdGluZyBvciBtb2RpZnlpbmcgYSB0YXByaW8gcWRpc2MgdmlhIG5ldGxpbmssIHdoaWNoIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzb2Z0d2FyZS1lbXVsYXRlZCBuZXR3b3JraW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjozMS42NzI4NzE5ODZaIiwiU2VxIjozOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwOTUzNDMzMDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6MzEuNjczMjk3MjA2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDA5NTMwMDMzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlucHV0IHZhbGlkYXRpb24gaW4gYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYCBpbiBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AuIFNwZWNpZmljYWxseSwgaXQgYWx3YXlzIGNhbGN1bGF0ZXMgdGhlIHN1bSBvZiBlbnRyeSBpbnRlcnZhbHMgKGBjeWNsZWApIGFuZCB2YWxpZGF0ZXMgdGhhdCBgY3ljbGUgXFx1MDAzYz0gSU5UX01BWGAgYW5kIHRoYXQgdXNlci1zdXBwbGllZCBgbmV3LVxcdTAwM2VjeWNsZV90aW1lYCBpcyBub3QgbGVzcyB0aGFuIGBjeWNsZWAuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGN5Y2xlID0gMGApIGFuZCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoYG5ld19hZG1pbmAgdmlhIGBremFsbG9jX29iaigpYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIGNoYW5nZSwgYW5kIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDZiNzkyN2Q5OGY2YjM0M2Y1YjExMzQzNjNkMTIzZWZiMWFjMjVmZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIzOjA1OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbmluZGV4IDM5YWM1Yjk3YWEzYWYuLjEzN2NlNmY3YTQ3NGEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG5AQCAtMTEzMCw2ICsxMTMwLDggQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuK1x0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcbitcdGt0aW1lX3QgY3ljbGUgPSAwO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX1NJTkdMRV9FTlRSWV0pIHtcbkBAIC0xMTUyLDE5ICsxMTU0LDIwIEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKSB7XG4tXHRcdHN0cnVjdCBzY2hlZF9lbnRyeSAqZW50cnk7XG4tXHRcdGt0aW1lX3QgY3ljbGUgPSAwO1xuLVxuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZuZXctXHUwMDNlZW50cmllcywgbGlzdClcbi1cdFx0XHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXHUwMDNlaW50ZXJ2YWwpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2bmV3LVx1MDAzZWVudHJpZXMsIGxpc3QpXG4rXHRcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cdTAwM2VpbnRlcnZhbCk7XG4gXG4tXHRcdGlmIChjeWNsZSBcdTAwM2MgMCB8fCBjeWNsZSBcdTAwM2UgSU5UX01BWCkge1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCInY3ljbGVfdGltZScgaXMgdG9vIGJpZ1wiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuK1x0aWYgKGN5Y2xlIFx1MDAzYyAwIHx8IGN5Y2xlIFx1MDAzZSBJTlRfTUFYKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCInY3ljbGVfdGltZScgaXMgdG9vIGJpZ1wiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4rXHRpZiAoIW5ldy1cdTAwM2VjeWNsZV90aW1lKVxuIFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZSA9IGN5Y2xlO1xuK1xuK1x0aWYgKG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyBjeWNsZSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiJ2N5Y2xlX3RpbWUnIGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mIGVudHJ5IGludGVydmFsc1wiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIG5ldy1cdTAwM2VudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjMxLjY3MzI5ODA2NloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjc4MDE3NTc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFRBUFJJTyBTY2hlZHVsZXIgQ29kZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2hhbmdlLCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSBkaWZmLiBJJ2xsIGZvY3VzIGluIG9uIHRoZSBmaWxlIHBhdGgsIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCwgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBpcy5cblxuTm93LCBpbnN0ZWFkIG9mIGp1c3Qgc3RhcmluZyBhdCB0aGUgZGlmZiBibGluZGx5LCBJIG5lZWQgY29udGV4dC4gTGluZSAxMTMwIGZlZWxzIGxpa2UgYSByZWFzb25hYmxlIHBvaW50IHRvIHN0YXJ0LiBJJ2xsIHVzZSBgcmVhZC1maWxlYCAob3IgYGdyZXBwZXJgIGlmIEkgbmVlZCBzb21ldGhpbmcgYSBiaXQgbW9yZSB0YXJnZXRlZCkgdG8gcHVsbCB1cCB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUgYW5kIHJlYWQgYXJvdW5kIGl0LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1tZWRpYXRlIGltcGFjdCBvZiB0aGUgZGlmZiBhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLiBUaGVuIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IHNlZSBpZiB0aGUgY2hhbmdlcyBtYWtlIHNlbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDcxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjo0NC40NTM0NzczNTJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEyMCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEyMDpcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZlbnRyeS1cXHUwMDNlbGlzdCwgXFx1MDAyNnNjaGVkLVxcdTAwM2VlbnRyaWVzKTtcXG4xMTIxOlxcdFxcdFxcdGkrKztcXG4xMTIyOlxcdFxcdH1cXG4xMTIzOlxcdFxcbjExMjQ6XFx0XFx0c2NoZWQtXFx1MDAzZW51bV9lbnRyaWVzID0gaTtcXG4xMTI1OlxcdFxcbjExMjY6XFx0XFx0cmV0dXJuIGk7XFxuMTEyNzpcXHR9XFxuMTEyODpcXHRcXG4xMTI5OlxcdHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG4xMTMwOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXFxuMTEzMTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjExMzI6XFx0e1xcbjExMzM6XFx0XFx0c3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeTtcXG4xMTM0OlxcdFxcdGt0aW1lX3QgY3ljbGUgPSAwO1xcbjExMzU6XFx0XFx0aW50IGVyciA9IDA7XFxuMTEzNjpcXHRcXG4xMTM3OlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfU0lOR0xFX0VOVFJZXSkge1xcbjExMzg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQWRkaW5nIGEgc2luZ2xlIGVudHJ5IGlzIG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4xMTM5OlxcdFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuMTE0MDpcXHRcXHR9XFxuMTE0MTpcXHRcXG4xMTQyOlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQkFTRV9USU1FXSlcXG4xMTQzOlxcdFxcdFxcdG5ldy1cXHUwMDNlYmFzZV90aW1lID0gbmxhX2dldF9zNjQodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0JBU0VfVElNRV0pO1xcbjExNDQ6XFx0XFxuMTE0NTpcXHRcXHRpZiAodGJbVENBX1RBUFJJT19BVFRSX1NDSEVEX0NZQ0xFX1RJTUVfRVhURU5TSU9OXSlcXG4xMTQ2OlxcdFxcdFxcdG5ldy1cXHUwMDNlY3ljbGVfdGltZV9leHRlbnNpb24gPSBubGFfZ2V0X3M2NCh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfQ1lDTEVfVElNRV9FWFRFTlNJT05dKTtcXG4xMTQ3OlxcdFxcbjExNDg6XFx0XFx0aWYgKHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FXSlcXG4xMTQ5OlxcdFxcdFxcdG5ldy1cXHUwMDNlY3ljbGVfdGltZSA9IG5sYV9nZXRfczY0KHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9DWUNMRV9USU1FXSk7XFxuMTE1MDpcXHRcXG4xMTUxOlxcdFxcdGlmICh0YltUQ0FfVEFQUklPX0FUVFJfU0NIRURfRU5UUllfTElTVF0pXFxuMTE1MjpcXHRcXHRcXHRlcnIgPSBwYXJzZV9zY2hlZF9saXN0KHEsIHRiW1RDQV9UQVBSSU9fQVRUUl9TQ0hFRF9FTlRSWV9MSVNUXSxcXG4xMTUzOlxcdFxcdFxcdFxcdFxcdCAgICAgICBuZXcsIGV4dGFjayk7XFxuMTE1NDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMTU1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTE1NjpcXHRcXG4xMTU3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFxcdTAwMjZuZXctXFx1MDAzZWVudHJpZXMsIGxpc3QpXFxuMTE1ODpcXHRcXHRcXHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXFx1MDAzZWludGVydmFsKTtcXG4xMTU5OlxcdFxcbjExNjA6XFx0XFx0aWYgKGN5Y2xlIFxcdTAwM2MgMCB8fCBjeWNsZSBcXHUwMDNlIElOVF9NQVgpIHtcXG4xMTYxOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIidjeWNsZV90aW1lJyBpcyB0b28gYmlnXFxcIik7XFxuMTE2MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTYzOlxcdFxcdH1cXG4xMTY0OlxcdFxcbjExNjU6XFx0XFx0aWYgKCFuZXctXFx1MDAzZWN5Y2xlX3RpbWUpXFxuMTE2NjpcXHRcXHRcXHRuZXctXFx1MDAzZWN5Y2xlX3RpbWUgPSBjeWNsZTtcXG4xMTY3OlxcdFxcbjExNjg6XFx0XFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIGN5Y2xlKSB7XFxuMTE2OTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCInY3ljbGVfdGltZScgaXMgbGVzcyB0aGFuIHRoZSBzdW0gb2YgZW50cnkgaW50ZXJ2YWxzXFxcIik7XFxuMTE3MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTcxOlxcdFxcdH1cXG4xMTcyOlxcdFxcbjExNzM6XFx0XFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIG5ldy1cXHUwMDNlbnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7XFxuMTE3NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCInY3ljbGVfdGltZScgaXMgdG9vIHNtYWxsXFxcIik7XFxuMTE3NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTc2OlxcdFxcdH1cXG4xMTc3OlxcdFxcbjExNzg6XFx0XFx0dGFwcmlvX2NhbGN1bGF0ZV9nYXRlX2R1cmF0aW9ucyhxLCBuZXcpO1xcbjExNzk6XFx0XFxuMTE4MDpcXHRcXHRyZXR1cm4gMDtcXG4xMTgxOlxcdH1cXG4xMTgyOlxcdFxcbjExODM6XFx0c3RhdGljIGludCB0YXByaW9fcGFyc2VfbXFwcmlvX29wdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbjExODQ6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0LFxcbjExODU6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbjExODY6XFx0XFx0XFx0XFx0XFx0ICAgdTMyIHRhcHJpb19mbGFncylcXG4xMTg3OlxcdHtcXG4xMTg4OlxcdFxcdGJvb2wgYWxsb3dfb3ZlcmxhcHBpbmdfdHhxcyA9IFRYVElNRV9BU1NJU1RfSVNfRU5BQkxFRCh0YXByaW9fZmxhZ3MpO1xcbjExODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjQ0LjQ1MzY2ODMyMloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTAyNjgzODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCdzIHRoZSBjb3JlIGlzc3VlIGl0J3MgYWRkcmVzc2luZz8gTGV0J3MgZGlzc2VjdCB0aGUgY29kZSBjaGFuZ2VzIHRvIGdyYXNwIHRoZSByYXRpb25hbGUuXG5cblNvLCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgdGhpcyBjaGVjazogaWYgYG5ldy1cdTAwM2VjeWNsZV90aW1lYCB3YXMgemVybywgbWVhbmluZyBub3QgZXhwbGljaXRseSBzZXQsIHRoZW4gaXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IG9mIGVudHJpZXMsIHN1bSB0aGVpciBpbnRlcnZhbHMgKGBjeWNsZWApLCBhbmQgdGhlbiB2YWxpZGF0ZSB0aGF0IHRoaXMgY2FsY3VsYXRlZCBgY3ljbGVgIHZhbHVlIGlzIHdpdGhpbiBhbiBhY2NlcHRhYmxlIHJhbmdlIChub3QgbmVnYXRpdmUgYW5kIG5vdCBleGNlZWRpbmcgYElOVF9NQVhgKS4gSWYgaXQncyB2YWxpZCwgdGhlIGBuZXctXHUwMDNlY3ljbGVfdGltZWAgaXMgdXBkYXRlZCB3aXRoIHRoaXMgY2FsY3VsYXRlZCBgY3ljbGVgLlxuXG5Ob3csIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzIG1vcmUgc3RyZWFtbGluZWQuIFRoZSBjcml0aWNhbCBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIHVuY29uZGl0aW9uYWwgc3VtbWF0aW9uIG9mIGludGVydmFscywgcmVnYXJkbGVzcyBvZiB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgLiBUaGVuLCB0aGUgc2FtZSBib3VuZGFyeSBjaGVjayBpcyBwZXJmb3JtZWQ6IGlzIGBjeWNsZWAgbmVnYXRpdmUgb3IgdG9vIGxhcmdlPyBJZiBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgICp3YXNuJ3QqIHNwZWNpZmllZCAobWVhbmluZyBpdCdzIHplcm8pLCBpdCdzIHNldCB0byB0aGUgYGN5Y2xlYCB2YWx1ZSwgYXMgYmVmb3JlLiBIb3dldmVyLCB0aGUgYWRkZWQgY2hlY2sgaXMgaWYgYG5ldy1cdTAwM2VjeWNsZV90aW1lYCAqaXMqIHNwZWNpZmllZCwgYnV0IGlzIHNtYWxsZXIgdGhhbiBgY3ljbGVgLCBpdCByZXR1cm5zIGFuIGVycm9yLiBUaGlzIGlzIGEgY3J1Y2lhbCB2YWxpZGF0aW9uIHN0ZXAgSSBtaXNzZWQgZWFybGllcjogd2UncmUgbWFraW5nIHN1cmUgdGhlIHByb3ZpZGVkIGBjeWNsZV90aW1lYCAoaWYgYW55KSBpcyAqYXQgbGVhc3QqIGFzIGxhcmdlIGFzIHRoZSBzdW0gb2YgYWxsIHRoZSBpbmRpdmlkdWFsIGludGVydmFscy4gVGhpcyBtYWtlcyBzZW5zZSBmcm9tIGEgc2NoZWR1bGluZyBpbnRlZ3JpdHkgcGVyc3BlY3RpdmUuXG5cbk15IG5leHQgc3RlcCB3b3VsZCBiZSB0byB0cmFjZSB0aGUgYWxsb2NhdGlvbiBvZiBgbmV3YC4gV2hlcmUgZG9lcyB0aGlzIGBuZXdgIHN0cnVjdCBvcmlnaW5hdGU/IElzIGl0IHVzZXItcHJvdmlkZWQ/IEFsbG9jYXRlZCBpbiBrZXJuZWwgc3BhY2U/IFVuZGVyc3RhbmRpbmcgdGhlIHNvdXJjZSBhbmQgbGlmZSBjeWNsZSBvZiBgbmV3YCBpcyB2aXRhbCB0byBmdWxseSBhcHByZWNpYXRlIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgYW5kIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGBuZXdgIGlzIGNvbnN0cnVjdGVkLCBwb3B1bGF0ZWQsIGFuZCB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTA5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6NDcuOTU2MzU0MzkxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE2ODkzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFyc2VfdGFwcmlvX3NjaGVkdWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMDg5PXN0YXRpYyBpbnQgcGFyc2Vfc2NoZWRfbGlzdChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICpsaXN0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTI4LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTEyOTpzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTMwLVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2NoZWRfZ2F0ZV9saXN0ICpuZXcsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE4MjU9c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MTktXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxOTIwOlxcdGVyciA9IHBhcnNlX3RhcHJpb19zY2hlZHVsZShxLCB0YiwgbmV3X2FkbWluLCBleHRhY2spO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkyMS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6NDguMDY4MDQ4OTk5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNDg2MDYyMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBBbGxvY2F0aW9uIGFuZCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gemVyb2luZyBpbiBvbiBhIGNvdXBsZSBvZiBjcnVjaWFsIHBvaW50cyByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd2l0aGluIHRoZSBjb2RlLiBGaXJzdCwgSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgaW1wbGljYXRpb25zIG9mIGB0YXByaW9fY2hhbmdlYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgd2hlcmUgc29tZSBrZXkgc3RhdGUgY2hhbmdlcyBvciBjb25maWd1cmF0aW9ucyB0YWtlIHBsYWNlLCBhbmQgSSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIG1hbmFnZWQgc2FmZWx5LCBlc3BlY2lhbGx5IGFzIHRoZXkgcmVsYXRlIHRvIHJlc291cmNlIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uLiBBbnkgc3VidGxlIGJ1ZyBoZXJlIGNvdWxkIGhhdmUgY2FzY2FkaW5nIGVmZmVjdHMgbGF0ZXIsIHNvIGEgZGVlcCBkaXZlIGlzIHdhcnJhbnRlZC4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgdGhlIGFsbG9jYXRpb24gb2YgYG5ld19hZG1pbmAgYW5kIHdoZXRoZXIgaXQgdXNlcyBga3phbGxvY2Agb3Igc29tZSBvdGhlciBhbGxvY2F0aW9uIG1ldGhvZC4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgYSBjYXJlZnVsIGV4YW1pbmF0aW9uIGlzIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg0NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA2OjUxLjIxNjY1ODQxNFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzIxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTAwOlxcdFxcdFxcdGdvdG8gZnJlZV9zY2hlZDtcXG4xOTAxOlxcdFxcdH1cXG4xOTAyOlxcdFxcbjE5MDM6XFx0XFx0aWYgKG1xcHJpbykge1xcbjE5MDQ6XFx0XFx0XFx0ZXJyID0gbmV0ZGV2X3NldF9udW1fdGMoZGV2LCBtcXByaW8tXFx1MDAzZW51bV90Yyk7XFxuMTkwNTpcXHRcXHRcXHRpZiAoZXJyKVxcbjE5MDY6XFx0XFx0XFx0XFx0Z290byBmcmVlX3NjaGVkO1xcbjE5MDc6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1xcHJpby1cXHUwMDNlbnVtX3RjOyBpKyspIHtcXG4xOTA4OlxcdFxcdFxcdFxcdG5ldGRldl9zZXRfdGNfcXVldWUoZGV2LCBpLFxcbjE5MDk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG1xcHJpby1cXHUwMDNlY291bnRbaV0sXFxuMTkxMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgbXFwcmlvLVxcdTAwM2VvZmZzZXRbaV0pO1xcbjE5MTE6XFx0XFx0XFx0XFx0cS1cXHUwMDNlY3VyX3R4cVtpXSA9IG1xcHJpby1cXHUwMDNlb2Zmc2V0W2ldO1xcbjE5MTI6XFx0XFx0XFx0fVxcbjE5MTM6XFx0XFxuMTkxNDpcXHRcXHRcXHQvKiBBbHdheXMgdXNlIHN1cHBsaWVkIHByaW9yaXR5IG1hcHBpbmdzICovXFxuMTkxNTpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IFRDX0JJVE1BU0s7IGkrKylcXG4xOTE2OlxcdFxcdFxcdFxcdG5ldGRldl9zZXRfcHJpb190Y19tYXAoZGV2LCBpLFxcbjE5MTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIG1xcHJpby1cXHUwMDNlcHJpb190Y19tYXBbaV0pO1xcbjE5MTg6XFx0XFx0fVxcbjE5MTk6XFx0XFxuMTkyMDpcXHRcXHRlcnIgPSBwYXJzZV90YXByaW9fc2NoZWR1bGUocSwgdGIsIG5ld19hZG1pbiwgZXh0YWNrKTtcXG4xOTIxOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjE5MjI6XFx0XFx0XFx0Z290byBmcmVlX3NjaGVkO1xcbjE5MjM6XFx0XFxuMTkyNDpcXHRcXHRpZiAobmV3X2FkbWluLVxcdTAwM2VudW1fZW50cmllcyA9PSAwKSB7XFxuMTkyNTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3Qgb25lIGVudHJ5IGluIHRoZSBzY2hlZHVsZVxcXCIpO1xcbjE5MjY6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xOTI3OlxcdFxcdFxcdGdvdG8gZnJlZV9zY2hlZDtcXG4xOTI4OlxcdFxcdH1cXG4xOTI5OlxcdFxcbjE5MzA6XFx0XFx0ZXJyID0gdGFwcmlvX3BhcnNlX2Nsb2NraWQoc2NoLCB0YiwgZXh0YWNrKTtcXG4xOTMxOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjE5MzI6XFx0XFx0XFx0Z290byBmcmVlX3NjaGVkO1xcbjE5MzM6XFx0XFxuMTkzNDpcXHRcXHR0YXByaW9fdXBkYXRlX3F1ZXVlX21heF9zZHUocSwgbmV3X2FkbWluLCBzdGFiKTtcXG4xOTM1OlxcdFxcbjE5MzY6XFx0XFx0aWYgKEZVTExfT0ZGTE9BRF9JU19FTkFCTEVEKHEtXFx1MDAzZWZsYWdzKSlcXG4xOTM3OlxcdFxcdFxcdGVyciA9IHRhcHJpb19lbmFibGVfb2ZmbG9hZChkZXYsIHEsIG5ld19hZG1pbiwgZXh0YWNrKTtcXG4xOTM4OlxcdFxcdGVsc2VcXG4xOTM5OlxcdFxcdFxcdGVyciA9IHRhcHJpb19kaXNhYmxlX29mZmxvYWQoZGV2LCBxLCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjo1MS4yMTY5MzM2NjRaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE4MTY5NjYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgYHRhcHJpb19jaGFuZ2VgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHRhcHJpb19jaGFuZ2VgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcmVsYXRlZCB0byBgbmV3X2FkbWluYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyBzb21lIHNwZWNpZmljIHBhdHRlcm5zIGhlcmUuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoZXJlIGV4YWN0bHkgdGhpcyBgbmV3X2FkbWluYCBpcyBiZWluZyBhbGxvY2F0ZWQg4oCTIGlzIGl0IG9uIHRoZSBzdGFjaywgdGhlIGhlYXAsIG9yIHNvbWUgb3RoZXIgbWFuYWdlZCBtZW1vcnkgcmVnaW9uPyBUaGUgYWxsb2NhdGlvbiBtZXRob2Qgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGNsdWVzIGFib3V0IGl0cyBpbnRlbmRlZCBsaWZlY3ljbGUgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbmN5LCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBpZiBJJ20gbm90IGNhcmVmdWwuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBoYXZpbmcgdG8gdHJhY2UgcG9pbnRlcnMgb3IgYW5hbHl6ZSBhbGxvY2F0aW9uIHNpemVzIGRlcGVuZGluZyBvbiB3aGF0IEkgZmluZC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHRyYWNrIGRvd24gdGhhdCBhbGxvY2F0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzA0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjo1NS4zOTg2MzQ0NTFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg3MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg3MDpcXHRcXHR9XFxuMTg3MTpcXHRcXG4xODcyOlxcdFxcdC8qIE5lZWRlZCBmb3IgbGVuZ3RoX3RvX2R1cmF0aW9uKCkgZHVyaW5nIG5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcgKi9cXG4xODczOlxcdFxcdHRhcHJpb19zZXRfcGljb3NfcGVyX2J5dGUoZGV2LCBxLCBleHRhY2spO1xcbjE4NzQ6XFx0XFxuMTg3NTpcXHRcXHRlcnIgPSB0YXByaW9fcGFyc2VfbXFwcmlvX29wdChkZXYsIG1xcHJpbywgZXh0YWNrLCBxLVxcdTAwM2VmbGFncyk7XFxuMTg3NjpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xODc3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTg3ODpcXHRcXG4xODc5OlxcdFxcdGVyciA9IHRhcHJpb19wYXJzZV90Y19lbnRyaWVzKHNjaCwgb3B0LCBleHRhY2spO1xcbjE4ODA6XFx0XFx0aWYgKGVycilcXG4xODgxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTg4MjpcXHRcXG4xODgzOlxcdFxcdG5ld19hZG1pbiA9IGt6YWxsb2Nfb2JqKCpuZXdfYWRtaW4pO1xcbjE4ODQ6XFx0XFx0aWYgKCFuZXdfYWRtaW4pIHtcXG4xODg1OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBhIG5ldyBzY2hlZHVsZVxcXCIpO1xcbjE4ODY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTg4NzpcXHRcXHR9XFxuMTg4ODpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmV3X2FkbWluLVxcdTAwM2VlbnRyaWVzKTtcXG4xODg5OlxcdFxcbjE4OTA6XFx0XFx0b3BlciA9IHJ0bmxfZGVyZWZlcmVuY2UocS1cXHUwMDNlb3Blcl9zY2hlZCk7XFxuMTg5MTpcXHRcXHRhZG1pbiA9IHJ0bmxfZGVyZWZlcmVuY2UocS1cXHUwMDNlYWRtaW5fc2NoZWQpO1xcbjE4OTI6XFx0XFxuMTg5MzpcXHRcXHQvKiBubyBjaGFuZ2VzIC0gbm8gbmV3IG1xcHJpbyBzZXR0aW5ncyAqL1xcbjE4OTQ6XFx0XFx0aWYgKCF0YXByaW9fbXFwcmlvX2NtcChkZXYsIG1xcHJpbykpXFxuMTg5NTpcXHRcXHRcXHRtcXByaW8gPSBOVUxMO1xcbjE4OTY6XFx0XFxuMTg5NzpcXHRcXHRpZiAobXFwcmlvIFxcdTAwMjZcXHUwMDI2IChvcGVyIHx8IGFkbWluKSkge1xcbjE4OTg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ2hhbmdpbmcgdGhlIHRyYWZmaWMgbWFwcGluZyBvZiBhIHJ1bm5pbmcgc2NoZWR1bGUgaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbjE4OTk6XFx0XFx0XFx0ZXJyID0gLUVOT1RTVVBQO1xcbjE5MDA6XFx0XFx0XFx0Z290byBmcmVlX3NjaGVkO1xcbjE5MDE6XFx0XFx0fVxcbjE5MDI6XFx0XFxuMTkwMzpcXHRcXHRpZiAobXFwcmlvKSB7XFxuMTkwNDpcXHRcXHRcXHRlcnIgPSBuZXRkZXZfc2V0X251bV90YyhkZXYsIG1xcHJpby1cXHUwMDNlbnVtX3RjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDY6NTUuMzk4OTEyOTUxWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5OTgwODI3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBDYWxsIFNpdGVzKipcblxuT2theSwgc28gSSd2ZSBqdXN0IGFsbG9jYXRlZCBgbmV3X2FkbWluYCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgdGhhdCdzIGdvb2QuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIG5ldyBhbGxvY2F0aW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhpcyBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB3aGVyZSAqZWxzZSogaXMgdGhpcyBmdW5jdGlvbiBiZWluZyB1c2VkPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsIGdyYXBoIGlzIGNydWNpYWwuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgZnVuY3Rpb24sIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLCBpcyBpbnZva2VkLiBUaGlzIHdpbGwgaGVscCBtZSBhc3Nlc3MgcG90ZW50aWFsIGRlcGVuZGVuY2llcywgc2lkZSBlZmZlY3RzLCBhbmQgZ2VuZXJhbGx5LCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb24gaG93IHRoaXMgYWxsb2NhdGlvbiBmaXRzIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRpbWUgdG8gdHJhY2sgZG93biB0aG9zZSBjYWxsIHNpdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDg1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMzowNjo1OC4zOTY5OTg0ODhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NzUxODkwMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFyc2VfdGFwcmlvX3NjaGVkdWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTA4OT1zdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEyOC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExMjk6c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTEzMC1cXHRcXHRcXHRcXHQgc3RydWN0IHNjaGVkX2dhdGVfbGlzdCAqbmV3LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODI1PXN0YXRpYyBpbnQgdGFwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTE5LVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTkyMDpcXHRlcnIgPSBwYXJzZV90YXByaW9fc2NoZWR1bGUocSwgdGIsIG5ld19hZG1pbiwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MjEtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIzOjA3OjAyLjE3MjE5MjI5MloiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDQ1NDA3NzUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVEFQUklPIFNjaGVkdWxlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBmb2N1cyBoZXJlIGlzIGVuc3VyaW5nIHRoaXMgY2hhbmdlIGlzIHNhZmUsIGVzcGVjaWFsbHkgZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIEZpcnN0LCBJJ2xsIHdhbGsgdGhyb3VnaCB0aGUgY29kZSBjaGFuZ2VzIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLiBJdCBzZWVtcyB3ZSBhcmUgbW9kaWZ5aW5nIHRoZSBmdW5jdGlvbiBieTpcblxuKiAgIEluaXRpYWxpemluZyBgZW50cnlgIGFuZCBgY3ljbGVgIGF0IHRoZSB0b3Agb2YgdGhlIGZ1bmN0aW9uLlxuKiAgIE1vdmluZyB0aGUgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGxvb3AsIHdoaWNoIGNhbGN1bGF0ZXMgdGhlIHRvdGFsIGBjeWNsZWAgdGltZSwgb3V0c2lkZSBvZiB0aGUgYCFuZXctXHUwMDNlY3ljbGVfdGltZWAgY29uZGl0aW9uYWwuIFRoaXMgcmVjYWxjdWxhdGVzIHRoZSBjeWNsZSB0aW1lIGV2ZW4gaWYgdGhlIGN5Y2xlIHRpbWUgaXMgYWxyZWFkeSBzZXQuXG4qICAgQWRkaW5nIGEgY2hlY2sgdG8gbWFrZSBzdXJlIGBjeWNsZWAgaXMgd2l0aGluIHZhbGlkIGludGVnZXIgYm91bmRzLlxuKiAgIENvbmRpdGlvbmFsbHkgc2V0dGluZyBgbmV3LVx1MDAzZWN5Y2xlX3RpbWVgIGlmIGl0J3MgY3VycmVudGx5IHVuc2V0LlxuKiAgIENydWNpYWxseSwgYWRkaW5nIGEgY2hlY2sgdG8gZW5zdXJlIGBuZXctXHUwMDNlY3ljbGVfdGltZWAgaXMgKm5vdCogbGVzcyB0aGFuIHRoZSBjYWxjdWxhdGVkIGBjeWNsZWAsIHJldHVybmluZyBhbiBlcnJvciBpZiBpdCBpcy5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGFwcGxpY2FiaWxpdHkgaGVyZS4gSSdtIGdvaW5nIHRvIG1ldGhvZGljYWxseSBnbyB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgcmlzayBhcmVhczpcblxuMS4gICoqVXNlci1zcGFjZSBkYXRhIGV4cG9zdXJlOioqIFRoZSBwYXRjaCBkb2Vzbid0IGFkZCBvciBtb2RpZnkgYW55IGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXItc3BhY2UuIFNvLCBubyByaXNrIHRoZXJlLlxuMi4gICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZSBkZXBlbmRlbmNlIGluIGxvZ2ljOioqIGBjeWNsZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwLiBgZW50cnktXHUwMDNlaW50ZXJ2YWxgIHNob3VsZCBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdXJpbmcgc2NoZWR1bGUgcGFyc2luZywgYW5kIGBuZXdgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAuIE5vIHJpc2tzIGhlcmUuXG4zLiAgKipVbmluaXRpYWxpemVkIGRhdGEgaW4gY29tcGxleCBzdHJ1Y3R1cmVzOioqIEFnYWluLCBgbmV3YCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCBhbmQgdGhlIGxvb3AgY2FsY3VsYXRlcyB0aGUgYGN5Y2xlYCB2YWx1ZSwgYXZvaWRpbmcgYW55IHJpc2tzLlxuNC4gICoqQm91bmRzIGNoZWNrcyBhbmQgYnVmZmVyIG92ZXJmbG93czoqKiBUaGlzIGNoYW5nZSBwcmltYXJpbHkgYWRkcyBhbiBpbnB1dCB2YWxpZGF0aW9uIGNoZWNrOyB0aGVyZSdzIG5vIGFkZGl0aW9uIG9mIG5ldyBmdW5jdGlvbmFsaXR5IHRoYXQgY291bGQgaW50cm9kdWNlIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuIFRoZSBhZGRlZCBjaGVjayB2YWxpZGF0ZXMgdGhhdCBgbmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNlPSBjeWNsZWAuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIHRoZXJlJ3Mgbm8gYXBwYXJlbnQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIG9yIHVzZWQuIGBjeWNsZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIGBuZXdgIGlzIGluaXRpYWxpemVkIHZpYSBga3phbGxvY19vYmpgLiBUaGlzIHBhdGNoIGlzIHB1cmVseSBhbiBpbnB1dCB2YWxpZGF0aW9uIGFuZCBsb2dpYyBhZGp1c3RtZW50IGZvciB0aGUgVEFQUklPIHFkaXNjIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBuZXRsaW5rLlxuXG5UaHVzLCBiYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBJJ2xsIGJlIHN1cmUgdG8gZG9jdW1lbnQgdGhpcyBpbiB0aGUgYHNldC1yZXN1bHRzYCBleHBsYW5hdGlvbiwgY2xlYXJseSBvdXRsaW5pbmcgdGhlc2UgcmVhc29ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk3NSwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjM6MDc6MTIuNjI2MjcyNTQ5WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbnB1dCB2YWxpZGF0aW9uIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAgaW4gYG5ldC9zY2hlZC9zY2hfdGFwcmlvLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFsd2F5cyBjYWxjdWxhdGVzIHRoZSBzdW0gb2YgZW50cnkgaW50ZXJ2YWxzIChgY3ljbGVgKSBhbmQgdmFsaWRhdGVzIHRoYXQgYGN5Y2xlIFxcdTAwM2M9IElOVF9NQVhgIGFuZCB0aGF0IHVzZXItc3VwcGxpZWQgYG5ldy1cXHUwMDNlY3ljbGVfdGltZWAgaXMgbm90IGxlc3MgdGhhbiBgY3ljbGVgLlxcblxcbkFsbCBsb2NhbCB2YXJpYWJsZXMgKGBjeWNsZSA9IDBgKSBhbmQgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGBuZXdfYWRtaW5gIHZpYSBga3phbGxvY19vYmooKWApIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgdXBvbiwgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyBLTVNBTi1zcGVjaWZpYyByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIGFuZCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGlucHV0IHZhbGlkYXRpb24gaW4gYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYCBpbiBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AuIFNwZWNpZmljYWxseSwgaXQgYWx3YXlzIGNhbGN1bGF0ZXMgdGhlIHN1bSBvZiBlbnRyeSBpbnRlcnZhbHMgKGBjeWNsZWApIGFuZCB2YWxpZGF0ZXMgdGhhdCBgY3ljbGUgXFx1MDAzYz0gSU5UX01BWGAgYW5kIHRoYXQgdXNlci1zdXBwbGllZCBgbmV3LVxcdTAwM2VjeWNsZV90aW1lYCBpcyBub3QgbGVzcyB0aGFuIGBjeWNsZWAuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGN5Y2xlID0gMGApIGFuZCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoYG5ld19hZG1pbmAgdmlhIGBremFsbG9jX29iaigpYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCB1cG9uLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIGNoYW5nZSwgYW5kIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow6548z[1] Phase: Succeeded StartedAt: 2026-08-31 23:07:24 +0000 UTC FinishedAt: 2026-08-31 23:07:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 23:07:24 +0000 UTC FinishedAt: 2026-08-31 23:07:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2] Phase: Succeeded StartedAt: 2026-08-31 23:07:24 +0000 UTC FinishedAt: 2026-09-01 02:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 23:07:24 +0000 UTC FinishedAt: 2026-09-01 02:52:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 23:07:24 +0000 UTC FinishedAt: 2026-08-31 23:07:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 23:07:24 +0000 UTC FinishedAt: 2026-08-31 23:07:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflow6548z/series-workflow6548z-convert-artifact-2045869287/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 23:07:34 +0000 UTC FinishedAt: 2026-08-31 23:28:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 23:07:34 +0000 UTC FinishedAt: 2026-08-31 23:28:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*fbfb94f5-ab7b-48f0-a7a6-15c3db0fdbb2,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-workflow6548z/series-workflow6548z-convert-artifact-2045869287/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": "310e1537-debb-418a-bd26-4da9febd8990", "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-workflow6548z/series-workflow6548z-build-action-2024567677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 23:07:34 +0000 UTC FinishedAt: 2026-08-31 23:28:00 +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:*fbfb94f5-ab7b-48f0-a7a6-15c3db0fdbb2,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-workflow6548z/series-workflow6548z-convert-artifact-2045869287/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": "310e1537-debb-418a-bd26-4da9febd8990", "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-workflow6548z/series-workflow6548z-build-action-2024567677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 23:28:26 +0000 UTC FinishedAt: 2026-08-31 23:28:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 23:28:26 +0000 UTC FinishedAt: 2026-08-31 23:28:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 23:28:26 +0000 UTC FinishedAt: 2026-08-31 23:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 23:28:26 +0000 UTC FinishedAt: 2026-08-31 23:28:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflow6548z/series-workflow6548z-convert-artifact-2414045078/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 23:28:36 +0000 UTC FinishedAt: 2026-08-31 23:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 23:28:36 +0000 UTC FinishedAt: 2026-08-31 23:30:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*310e1537-debb-418a-bd26-4da9febd8990,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-workflow6548z/series-workflow6548z-build-action-2024567677/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-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 23:30:34 +0000 UTC FinishedAt: 2026-08-31 23:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 23:30:34 +0000 UTC FinishedAt: 2026-08-31 23:30:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 23:30:34 +0000 UTC FinishedAt: 2026-08-31 23:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 23:30:34 +0000 UTC FinishedAt: 2026-08-31 23:47:04 +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:*fbfb94f5-ab7b-48f0-a7a6-15c3db0fdbb2,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-workflow6548z/series-workflow6548z-convert-artifact-2414045078/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": "2d2f7d47-5e5c-4d46-bf17-9438c2444289", "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-workflow6548z/series-workflow6548z-build-action-4193396890/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 23:30:34 +0000 UTC FinishedAt: 2026-08-31 23:46:54 +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:*fbfb94f5-ab7b-48f0-a7a6-15c3db0fdbb2,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-workflow6548z/series-workflow6548z-convert-artifact-2414045078/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": "2d2f7d47-5e5c-4d46-bf17-9438c2444289", "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-workflow6548z/series-workflow6548z-build-action-4193396890/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 23:47:04 +0000 UTC FinishedAt: 2026-08-31 23:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 23:47:04 +0000 UTC FinishedAt: 2026-08-31 23:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 23:47:04 +0000 UTC FinishedAt: 2026-08-31 23:48:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 23:47:04 +0000 UTC FinishedAt: 2026-08-31 23:48:26 +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:*2d2f7d47-5e5c-4d46-bf17-9438c2444289,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-workflow6548z/series-workflow6548z-build-action-4193396890/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-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 23:48:36 +0000 UTC FinishedAt: 2026-09-01 02:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 23:48:36 +0000 UTC FinishedAt: 2026-09-01 02:52:02 +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":["taprio_change","taprio_init","parse_taprio_schedule"],"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:*310e1537-debb-418a-bd26-4da9febd8990,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2d2f7d47-5e5c-4d46-bf17-9438c2444289,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-workflow6548z/series-workflow6548z-build-action-2024567677/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-workflow6548z/series-workflow6548z-build-action-4193396890/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 23:48:36 +0000 UTC FinishedAt: 2026-08-31 23:48:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 23:48:36 +0000 UTC FinishedAt: 2026-08-31 23:48:41 +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":["taprio_change","taprio_init","parse_taprio_schedule"],"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-workflow6548z/series-workflow6548z-convert-artifact-379150139/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 23:48:36 +0000 UTC FinishedAt: 2026-08-31 23:48:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 23:48:36 +0000 UTC FinishedAt: 2026-08-31 23:48:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 23:48:36 +0000 UTC FinishedAt: 2026-08-31 23:48:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 23:48:46 +0000 UTC FinishedAt: 2026-09-01 02:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6548z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change","taprio_init","parse_taprio_schedule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_TAPRIO"],"series_id":"a7d1e2c4-e417-4cd4-90dd-0a2e0dc0c7a2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 23:48:46 +0000 UTC FinishedAt: 2026-09-01 02:51:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*310e1537-debb-418a-bd26-4da9febd8990,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2d2f7d47-5e5c-4d46-bf17-9438c2444289,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-workflow6548z/series-workflow6548z-build-action-2024567677/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-workflow6548z/series-workflow6548z-build-action-4193396890/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-workflow6548z/series-workflow6548z-convert-artifact-379150139/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,}