Name: series-workflowjb2jh Phase: Succeeded StartedAt: 2026-09-09 08:25:06 +0000 UTC FinishedAt: 2026-09-09 12:34:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[0] Phase: Succeeded StartedAt: 2026-09-09 08:25:06 +0000 UTC FinishedAt: 2026-09-09 08:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 08:25:06 +0000 UTC FinishedAt: 2026-09-09 08:49:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NF_TABLES", "NF_CONNTRACK", "NETFILTER_INGRESS", "NFT_FLOW_OFFLOAD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NF_TABLES", "NF_CONNTRACK", "NETFILTER_INGRESS", "NFT_FLOW_OFFLOAD" ], "series_id": "534cbfa0-765b-4445-95c9-291ca3088593" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_flow_table_cleanup", "nf_flow_table_gc_cleanup", "nf_flow_table_do_cleanup", "flow_offload_netdev_event" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfZmxvd190YWJsZV9jbGVhbnVwJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAmIzM0OywKICAgICYjMzQ7Zmxvd19vZmZsb2FkX25ldGRldl9ldmVudCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBuZXR3b3JrIG5hbWVzcGFjZSBjaGVja2luZyBkdXJpbmcgbmV0ZGV2aWNlIGNsZWFudXAgaW4gdGhlIG5ldGZpbHRlciBmbG93dGFibGUgc3Vic3lzdGVtLiBJdCBzaGlmdHMgdGhlIG5hbWVzcGFjZSBtYXRjaCBjaGVjayBgbmV0X2VxKHJlYWRfcG5ldChcdTAwMjZmbG93dGFibGUtXHUwMDNlbmV0KSwgZGV2X25ldChkZXYpKWAgdXAgdG8gYG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpYCB3aGVuIGl0ZXJhdGluZyBvdmVyIHJlZ2lzdGVyZWQgZmxvd3RhYmxlcywgYW5kIHJlbW92ZXMgdGhlIHBlci1mbG93IGBuZXRfZXEobmZfY3RfbmV0KGZsb3ctXHUwMDNlY3QpLCBkZXZfbmV0KGRldikpYCBjaGVjayBmcm9tIGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoKWAuXG5cblRoaXMgY2hhbmdlOlxuMS4gRG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBhbnkgbmV3IHN0YWNrL2hlYXAgbWVtb3J5IG9yIGRhdGEgc3RydWN0dXJlcy5cbjIuIERvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSBvciBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuXG4zLiBEb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy5cblxuQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8gb2JqZWN0IGxpZmV0aW1lcywgZGV2aWNlIGRlcmVmZXJlbmNlcywgb3IgbGlzdCBvcGVyYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOIC8gTE9DS0RFUCkuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGNsZWFudXAgcGF0aCBpbiBuZl9mbG93X3RhYmxlX2NvcmUuYyBieSBtb3ZpbmcgbmV0d29yayBuYW1lc3BhY2UgbWF0Y2hpbmcgdG8gdGhlIG91dGVyIGZsb3d0YWJsZSBpdGVyYXRpb24gaW4gbmZfZmxvd190YWJsZV9jbGVhbnVwKCkgYW5kIGFkanVzdGluZyBwZXItZmxvdyBkZXZpY2UgdGVhcmRvd24gY29uZGl0aW9ucyBpbiBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoKS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZXhlY3V0ZWQgZHVyaW5nIG5ldHdvcmsgZGV2aWNlIHRlYXJkb3duL05FVERFVl9ET1dOIGV2ZW50cyB3aXRoIGFjdGl2ZSBuZnRhYmxlcyBmbG93IHRhYmxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNmYjMxNmMwYWNhMTQwNjJlOTc1YTUyYjhjODlkZGRiMzliZTk5NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA4OjQ3OjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5pbmRleCAwMzI0MWQ0YmZkNWU4Li41MmNjYTdhOGYxNDFiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuQEAgLTczMCwxNCAmIzQzOzczMCw5IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhO1xuIFxuLVx0aWYgKCFkZXYpIHtcbi1cdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRpZiAobmV0X2VxKG5mX2N0X25ldChmbG93LVx1MDAzZWN0KSwgZGV2X25ldChkZXYpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbMF0udHVwbGUuaWlmaWR4ID09IGRldi1cdTAwM2VpZmluZGV4IHx8XG4tXHQgICAgIGZsb3ctXHUwMDNldHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXHUwMDNlaWZpbmRleCkpXG4mIzQzO1x0aWYgKCFkZXYgfHxcbiYjNDM7XHQgICAgZmxvdy1cdTAwM2V0dXBsZWhhc2hbMF0udHVwbGUuaWlmaWR4ID09IGRldi1cdTAwM2VpZmluZGV4IHx8XG4mIzQzO1x0ICAgIGZsb3ctXHUwMDNldHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXHUwMDNlaWZpbmRleClcbiBcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuIH1cbiBcbkBAIC03NTQsOCAmIzQzOzc0OSwxMCBAQCB2b2lkIG5mX2Zsb3dfdGFibGVfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3d0YWJsZSwgXHUwMDI2Zmxvd3RhYmxlcywgbGlzdClcbi1cdFx0bmZfZmxvd190YWJsZV9nY19jbGVhbnVwKGZsb3d0YWJsZSwgZGV2KTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3d0YWJsZSwgXHUwMDI2Zmxvd3RhYmxlcywgbGlzdCkge1xuJiM0MztcdFx0aWYgKG5ldF9lcShyZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldCksIGRldl9uZXQoZGV2KSkpXG4mIzQzO1x0XHRcdG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldik7XG4mIzQzO1x0fVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfY2xlYW51cCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX2djX2NsZWFudXAmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9kb19jbGVhbnVwJiMzNDssCiAgICAmIzM0O2Zsb3dfb2ZmbG9hZF9uZXRkZXZfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGNsZWFudXAgcGF0aCBpbiBuZl9mbG93X3RhYmxlX2NvcmUuYyBieSBtb3ZpbmcgbmV0d29yayBuYW1lc3BhY2UgbWF0Y2hpbmcgdG8gdGhlIG91dGVyIGZsb3d0YWJsZSBpdGVyYXRpb24gaW4gbmZfZmxvd190YWJsZV9jbGVhbnVwKCkgYW5kIGFkanVzdGluZyBwZXItZmxvdyBkZXZpY2UgdGVhcmRvd24gY29uZGl0aW9ucyBpbiBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoKS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZXhlY3V0ZWQgZHVyaW5nIG5ldHdvcmsgZGV2aWNlIHRlYXJkb3duL05FVERFVl9ET1dOIGV2ZW50cyB3aXRoIGFjdGl2ZSBuZnRhYmxlcyBmbG93IHRhYmxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNmYjMxNmMwYWNhMTQwNjJlOTc1YTUyYjhjODlkZGRiMzliZTk5NDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDA4OjQ3OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKaW5kZXggMDMyNDFkNGJmZDVlOC4uNTJjY2E3YThmMTQxYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCkBAIC03MzAsMTQgJiM0Mzs3MzAsOSBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGF0YTsKIAotCWlmICghZGV2KSB7Ci0JCWZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChuZXRfZXEobmZfY3RfbmV0KGZsb3ctJmd0O2N0KSwgZGV2X25ldChkZXYpKSAmYW1wOyZhbXA7Ci0JICAgIChmbG93LSZndDt0dXBsZWhhc2hbMF0udHVwbGUuaWlmaWR4ID09IGRldi0mZ3Q7aWZpbmRleCB8fAotCSAgICAgZmxvdy0mZ3Q7dHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtJmd0O2lmaW5kZXgpKQomIzQzOwlpZiAoIWRldiB8fAomIzQzOwkgICAgZmxvdy0mZ3Q7dHVwbGVoYXNoWzBdLnR1cGxlLmlpZmlkeCA9PSBkZXYtJmd0O2lmaW5kZXggfHwKJiM0MzsJICAgIGZsb3ctJmd0O3R1cGxlaGFzaFsxXS50dXBsZS5paWZpZHggPT0gZGV2LSZndDtpZmluZGV4KQogCQlmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7CiB9CiAKQEAgLTc1NCw4ICYjNDM7NzQ5LDEwIEBAIHZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlOwogCiAJbXV0ZXhfbG9jaygmYW1wO2Zsb3d0YWJsZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3d0YWJsZSwgJmFtcDtmbG93dGFibGVzLCBsaXN0KQotCQluZl9mbG93X3RhYmxlX2djX2NsZWFudXAoZmxvd3RhYmxlLCBkZXYpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3d0YWJsZSwgJmFtcDtmbG93dGFibGVzLCBsaXN0KSB7CiYjNDM7CQlpZiAobmV0X2VxKHJlYWRfcG5ldCgmYW1wO2Zsb3d0YWJsZS0mZ3Q7bmV0KSwgZGV2X25ldChkZXYpKSkKJiM0MzsJCQluZl9mbG93X3RhYmxlX2djX2NsZWFudXAoZmxvd3RhYmxlLCBkZXYpOwomIzQzOwl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7Zmxvd3RhYmxlX2xvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDYzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEV2YWx1YXRpb246IEEgUHJlbGltaW5hcnkgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIGFuZCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCB3YXJyYW50cyBzb21lIHRpbWUgd2l0aCBzeXprYWxsZXIuIEZpcnN0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJlcXVlc3QuIFJpZ2h0LCBpdCYjMzk7cyBqdXN0IGNvZGUgcmV2aWV3IGFuZCBmdXp6aW5nIGV2YWx1YXRpb24uIE5vdGhpbmcgYWJvdXQgZXhwbG9pdCBkZXZlbG9wbWVudCBvciBjcmVhdGluZyBtYWx3YXJlLiBTZWVtcyBsaWtlIHRoZSBpbnRlbnQgaXMgcHVyZWx5IGRlZmVuc2l2ZSwgcHJvYmFibHkgZm9yIFFBIG9yIGFwcGxpY2F0aW9uIG1haW50ZW5hbmNlLiBHb29kLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gVGhlIGRpZmYgc2hvd3MgY2hhbmdlcyBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIEhtbSwgYSBjb25kaXRpb25hbCBjaGVjayBpcyBiZWluZyBzaW1wbGlmaWVkIGluIGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXBgLiBQcmV2aW91c2x5IHRoZXJlIHdhcyBhIGNoZWNrIHRvIHNlZSBpZiBgZGV2YCB3YXMgbnVsbCBvciBpZiB0aGUgbmV0d29yayBuYW1lc3BhY2VzIG1hdGNoZWQgYW5kIHRoZSBpbnRlcmZhY2UgaW5kaWNlcyBtYXRjaGVkLiBOb3cgaXQgYXBwZWFycyB0byBjaGVjayBgZGV2YCBpcyBudWxsIG9yIHRoYXQgdGhlIGludGVyZmFjZSBpbmRleCBtYXRjaGVzLiBPa2F5LCBzbyB0aGF0JiMzOTtzIG9uZSBjaGFuZ2UuIFRoZSBvdGhlciBjaGFuZ2UgaXMgaW4gYG5mX2Zsb3dfdGFibGVfY2xlYW51cGAuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGFkZHMgYSBuZXQgbmFtZXNwYWNlIGNoZWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoYXQgY2hhbmdlIG1vcmUuIEkga25vdyB0aG9zZSBmdW5jdGlvbnMsIGFuZCB3aGF0IHRoZXkmIzM5O3JlIHN1cHBvc2VkIHRvIGJlIGRvaW5nLCBidXQgd2hhdOKAmXMgdGhlIHJhdGlvbmFsZSBmb3IgdGhpcyBjaGFuZ2U/IAoKU28sIGl0JiMzOTtzIGEgY29kZSBzaW1wbGlmaWNhdGlvbiBhbmQgYSBuYW1lc3BhY2UgY2hlY2sgcmVsYXRlZCB0byBmbG93IHRhYmxlIGNsZWFudXAuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHRoZXJlJiMzOTtzIG5vdGhpbmcgaW1tZWRpYXRlbHkgKm9idmlvdXMqIHRoYXQgc2NyZWFtcyAmIzM0O3Z1bG5lcmFiaWxpdHkgcmlwZSBmb3IgZnV6emluZy4mIzM0OyBIb3dldmVyLCBJJiMzOTttIG5vdCBnb2luZyB0byB3cml0ZSBpdCBvZmYgdGhhdCBlYXNpbHkuIEdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0d29ya2luZyBjb2RlLCBhbmQgdGhlIHVzZSBvZiB0aGUgYG5mX2Zsb3d0YWJsZWAgZGF0YSBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBob3RzcG90IGZvciBwb3RlbnRpYWwgYnVncywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBpc3N1ZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCB0aGF0IG5ldHdvcmsgbmFtZXNwYWNlIGNoZWNrIGlzIGNvcnJlY3RseSBpbXBsZW1lbnRlZCwgYW5kIHRoYXQgbm8gbG9naWMgaXMgbWlzc2VkLiBXZSBuZWVkIHRvIGV4cGxvcmUgdGhlIGNvZGUgaW4gZGVwdGguIEkmIzM5O20gZ29pbmcgdG8gcnVuIG15IHVzdWFsIGFuYWx5c2lzIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSYjMzk7bGwgY2hlY2sgcmVsYXRlZCBgS2NvbmZpZ2Agb3B0aW9ucywgcmVsYXRlZCBjb2RlLCBhbmQgZGF0YSBmbG93cyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUuIEFmdGVyIHRoYXQsIEkgY2FuIG1ha2UgYSBiZXR0ZXIgaW5mb3JtZWQgZGVjaXNpb24gb24gd2hldGhlciB0aGlzIGRlc2VydmVzIHN5emthbGxlciYjMzk7cyBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjA6XHRcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIDcyMTpcdFx0bGlzdF9hZGQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWxpc3QsIFx1MDAyNmZsb3d0YWJsZXMpO1xuIDcyMjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbiA3MjM6XHRcbiA3MjQ6XHRcdHJldHVybiAwO1xuIDcyNTpcdH1cbiA3MjY6XHRFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2luaXQpO1xuIDcyNzpcdFxuIDcyODpcdHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIDcyOTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxuIDczMDpcdHtcbiA3MzE6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhO1xuIDczMjpcdFxuIDczMzpcdFx0aWYgKCFkZXYgfHxcbiA3MzQ6XHRcdCAgICBmbG93LVx1MDAzZXR1cGxlaGFzaFswXS50dXBsZS5paWZpZHggPT0gZGV2LVx1MDAzZWlmaW5kZXggfHxcbiA3MzU6XHRcdCAgICBmbG93LVx1MDAzZXR1cGxlaGFzaFsxXS50dXBsZS5paWZpZHggPT0gZGV2LVx1MDAzZWlmaW5kZXgpXG4gNzM2Olx0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbiA3Mzc6XHR9XG4gNzM4Olx0XG4gNzM5Olx0dm9pZCBuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuIDc0MDpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNzQxOlx0e1xuIDc0MjpcdFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3d0YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBkZXYpO1xuIDc0MzpcdFx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VnY193b3JrKTtcbiA3NDQ6XHRcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChmbG93dGFibGUpO1xuIDc0NTpcdH1cbiA3NDY6XHRcbiA3NDc6XHR2b2lkIG5mX2Zsb3dfdGFibGVfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDc0ODpcdHtcbiA3NDk6XHRcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZTtcbiA3NTA6XHRcbiA3NTE6XHRcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIDc1MjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmbG93dGFibGUsIFx1MDAyNmZsb3d0YWJsZXMsIGxpc3QpIHtcbiA3NTM6XHRcdFx0aWYgKG5ldF9lcShyZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldCksIGRldl9uZXQoZGV2KSkpXG4gNzU0Olx0XHRcdFx0bmZfZmxvd190YWJsZV9nY19jbGVhbnVwKGZsb3d0YWJsZSwgZGV2KTtcbiA3NTU6XHRcdH1cbiA3NTY6XHRcdG11dGV4X3VubG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4gNzU3Olx0fVxuIDc1ODpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfY2xlYW51cCk7XG4gNzU5Olx0XG4gNzYwOlx0dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbiA3NjE6XHR7XG4gNzYyOlx0XHRtdXRleF9sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbiA3NjM6XHRcdGxpc3RfZGVsKFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlbGlzdCk7XG4gNzY0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIDc2NTpcdFxuIDc2NjpcdFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlZ2Nfd29yayk7XG4gNzY3Olx0XHRuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goZmxvd190YWJsZSk7XG4gNzY4Olx0XHQvKiAuLi4gbm8gbW9yZSBwZW5kaW5nIHdvcmsgYWZ0ZXIgdGhpcyBzdGFnZSAuLi4gKi9cbiA3Njk6XHRcdG5mX2Zsb3dfdGFibGVfaXRlcmF0ZShmbG93X3RhYmxlLCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAsIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqS2NvbmZpZyBDaGVjayBmb3IgbmZfZmxvd190YWJsZV9jb3JlLmMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgbmZfZmxvd190YWJsZV9jb3JlLmNgIGlzIHByb3Blcmx5IGludGVncmF0ZWQgaW50byB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3QsIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIEtjb25maWcgZmlsZXMuIE5lZWQgdG8gY2hlY2sgaXRzIHZpc2liaWxpdHksIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBlbnN1cmUgaXQmIzM5O3Mgbm90IGFjY2lkZW50YWxseSBtYXNrZWQgYnkgc29tZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNYWtlIHN1cmUgaXQgYnVpbGRzIGFzIGV4cGVjdGVkLCBhbmQgdGhhdCBpdCBpc24mIzM5O3QgY2F1c2luZyBhbnkgY29uZmxpY3RzLiBBbnkgdW5leHBlY3RlZCBkZXBlbmRlbmNpZXMgYXJlIGFuIG9idmlvdXMgcmVkIGZsYWcuIEdvdHRhIG1ha2Ugc3VyZSBpdCYjMzk7cyBwbGF5aW5nIG5pY2Ugd2l0aCB0aGUgcmVzdCBvZiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgZXNwZWNpYWxseSBpZiB0aGVyZSBoYXZlIGJlZW4gcmVjZW50IHVwZGF0ZXMgdG8gdGhlIHN1cnJvdW5kaW5nIGNvbXBvbmVudHMuIE5vdGhpbmcmIzM5O3MgbW9yZSBmcnVzdHJhdGluZyB0aGFuIGEgYnVpbGQgYnJlYWsgZHVlIHRvIGFuIG92ZXJzaWdodCBpbiB0aGUgY29uZmlndXJhdGlvbi4gR290IHRvIGVuc3VyZSBpdCYjMzk7cyBidWlsZGFibGUgb24gYWxsIHBsYXRmb3JtcywgdG9vLiBHb3R0YSBkb3VibGUgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2NvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQyPW9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVx0JiM0Mzs9IG5mX2Zsb3dfdGFibGUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDQtXHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0ODgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5GX0ZMT1dfVEFCTEUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgTkZfRkxPV19UQUJMRWAgc2l0dWF0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgS2NvbmZpZy4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gcGxhY2UgZm9yIHZlcmlmeWluZyB3aGV0aGVyIHRoaXMgZmVhdHVyZSBpcyBldmVuICplbmFibGVkKiBpbiB0aGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHNlZSBpZiB0aGUgc3ltYm9sIGV4aXN0cywgd2hhdCBpdHMgZGVmYXVsdCBzdGF0ZSBpcywgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVW5kZXJzdGFuZGluZyBpdHMgS2NvbmZpZyBjb25maWd1cmF0aW9uIGlzIHRoZSBlc3NlbnRpYWwgZmlyc3Qgc3RlcCBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IGNvZGUuIEl0JiMzOTtsbCB0ZWxsIG1lIGlmIEkmIzM5O20gZXZlbiBkZWFsaW5nIHdpdGggYSBjb21waWxlLXRpbWUgaXNzdWUsIG9yIHNvbWV0aGluZyBydW50aW1lIGJhc2VkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgS2NvbmZpZyBoYXMgdG8gc2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAzPWNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEtjb25maWcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHNraXAgYXJvdW5kIHRoZSBpbml0aWFsIHBhcnRzIGFuZCBmb2N1cyBvbiBsaW5lcyA3MDAgdG8gNzQwLCBiZWNhdXNlIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgY2h1bmsgdG8gc3RhcnQgd2l0aC4gSG9wZWZ1bGx5LCB0aGF0IHNlY3Rpb24gd2lsbCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBhIHNwZWNpZmljIHNldCBvZiBmZWF0dXJlcyBvciBvcHRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGFyZWEgdG8gcmVsYXRlIHRvIGEgc3BlY2lmaWMgYXNwZWN0IG9mIG5ldGZpbHRlciwgbWF5YmUgYSBtb2R1bGUgb3IgZnVuY3Rpb25hbGl0eSwgb3IgcGVyaGFwcyBhIGdyb3VwIG9mIHJlbGF0ZWQgZmVhdHVyZXMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0cywgYW5kIGRlZmF1bHQgdmFsdWVzLiBJJiMzOTtsbCBtZW50YWxseSBtYXAgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgdmFyaW91cyBvcHRpb25zIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgZml0IHRvZ2V0aGVyIGluIHRoZSBsYXJnZXIgTmV0ZmlsdGVyIGxhbmRzY2FwZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHJlZCBmbGFncywgYW55dGhpbmcgdGhhdCBzZWVtcyBzdHJhbmdlIG9yIG92ZXJseSBjb21wbGV4LCBhbmQgYW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBjbGFyaWZpY2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHRcbiA3MDE6XHRlbmRpZiAjIE5GX1RBQkxFU1xuIDcwMjpcdFxuIDcwMzpcdGNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbiA3MDQ6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbiA3MDU6XHRcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxuIDcwNjpcdFx0aGVscFxuIDcwNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBzdXBwb3J0LlxuIDcwODpcdFxuIDcwOTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDcxMDpcdFxuIDcxMTpcdGNvbmZpZyBORl9GTE9XX1RBQkxFXG4gNzEyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcJiMzNDtcbiA3MTM6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0lOR1JFU1NcbiA3MTQ6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNzE1Olx0XHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xuIDcxNjpcdFx0aGVscFxuIDcxNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUuXG4gNzE4Olx0XG4gNzE5Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gNzIwOlx0XG4gNzIxOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXG4gNzIyOlx0XHRib29sIFwmIzM0O1N1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXCYjMzQ7XG4gNzIzOlx0XHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcbiA3MjQ6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuIDcyNTpcdFx0aGVscFxuIDcyNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3NcbiA3Mjc6XHRcdCAgdG8gYmUgc2hvd24gaW4gcHJvY2ZzIHVuZGVyIG5ldC9uZXRmaWx0ZXIvbmZfZmxvd3RhYmxlLlxuIDcyODpcdFxuIDcyOTpcdGNvbmZpZyBORVRGSUxURVJfWFRBQkxFU1xuIDczMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIFh0YWJsZXMgc3VwcG9ydCAocmVxdWlyZWQgZm9yIGlwX3RhYmxlcylcJiMzNDtcbiA3MzE6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuIDczMjpcdFx0aGVscFxuIDczMzpcdFx0ICBUaGlzIGlzIHJlcXVpcmVkIGlmIHlvdSBpbnRlbmQgdG8gdXNlIGFueSBvZiBpcF90YWJsZXMsXG4gNzM0Olx0XHQgIGlwNl90YWJsZXMgb3IgYXJwX3RhYmxlcy5cbiA3MzU6XHRcbiA3MzY6XHRpZiBORVRGSUxURVJfWFRBQkxFU1xuIDczNzpcdFxuIDczODpcdGNvbmZpZyBORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbiA3Mzk6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIFh0YWJsZXMgMzJiaXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjMzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBDYWxscyB0byBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYG5mX2Zsb3dfdGFibGVfY2xlYW51cGAuIFRvIGRvIHRoYXQsIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biBpdHMgY2FsbCBzaXRlcy4gQSBxdWljayBncmVwIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgYSBxdWljayBzY2FuLCBvciBJIGNhbiB1c2UgY3Njb3BlIG9yIGN0YWdzIGlmIEkgd2FudCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBjcm9zcy1yZWZlcmVuY2UuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgdHJpZ2dlcmVkLiBJcyB0aGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IGluIHJlc3BvbnNlIHRvIHNvbWUgZXZlbnQsIG9yIGlzIGl0IHNjaGVkdWxlZCwgcGVyaGFwcyBhcyBhIGRlZmVycmVkIHdvcmsgaXRlbT8gSWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBpbGx1bWluYXRlIHRoZSBzY2VuYXJpb3Mgd2hlcmUgdGhlc2UgZmxvdyB0YWJsZSBlbnRyaWVzIGFyZSBiZWluZyBjbGVhbmVkIHVwIGFuZCB3aGV0aGVyIHRoZXkmIzM5O3JlIGJlaW5nIGNsZWFuZWQgdXAgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaGFzIGNsb3NlZCBvciBpcyBpZGxlIGZvciBhIHdoaWxlLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGxvdC4gQXJlIHRoZXJlIGFueSByZXNvdXJjZSBjb25zdHJhaW50cyBvciBlcnJvciBjb25kaXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlICp3aGVuKiBhbmQgKmhvdyogdGhpcyBjbGVhbnVwIGhhcHBlbnM/IEkgd2lsbCBjaGVjayBmb3IgYW55IG11dGV4ZXMgb3IgbG9ja3MgYmVpbmcgaGVsZCBkdXJpbmcgdGhlIGNhbGwsIGFzIHRoYXQgY2FuIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhlIGNvbmN1cnJlbmN5IG1vZGVsIGFuZCBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXA6IHVuZGVyc3RhbmQgdGhlIGNhbGxlciYjMzk7cyBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd190YWJsZV9jbGVhbnVwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MzI0PXZvaWQgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzI1LVx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozMjY6dm9pZCBuZl9mbG93X3RhYmxlX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMyNy1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTczOT12b2lkIG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NDYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc0Nzp2b2lkIG5mX2Zsb3dfdGFibGVfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NDgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzU3LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzU4OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfY2xlYW51cCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc1OS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yMzg9c3RhdGljIGludCBmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yNDUtXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyNDY6XHRuZl9mbG93X3RhYmxlX2NsZWFudXAoZGV2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI0Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM3MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG5mdF9mbG93X29mZmxvYWQuY2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBhbmQgdXNhZ2Ugb2YgdGhpcyBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHBhdGhzIGFuZCBhbmFseXplIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JraW5nIGNvbnRleHQuIExldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIGludm9rZWQsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgdGhlIG92ZXJhbGwgcm9sZSBpdCBwbGF5cyBpbiB0aGUgb2ZmbG9hZCBtZWNoYW5pc20uIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbnRleHRzIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGxldmVyYWdlZCwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBtaWdodCBiZSBvbiBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBzdWJzeXN0ZW1zLiBIb3BlZnVsbHksIHRoZSBjb2RlIGNvbW1lbnRzIGFyZSBnb29kLCBidXQgSSYjMzk7bSBwcmVwYXJlZCB0byBkaWcgdGhyb3VnaCB0aGUgbG9naWMgaWYgbmVjZXNzYXJ5IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGl0cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzU6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIDIzNjpcdH07XG4gMjM3Olx0XG4gMjM4Olx0c3RhdGljIGludCBmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbiAyMzk6XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuIDI0MDpcdHtcbiAyNDE6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiAyNDI6XHRcbiAyNDM6XHRcdGlmIChldmVudCAhPSBORVRERVZfRE9XTilcbiAyNDQ6XHRcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuIDI0NTpcdFxuIDI0NjpcdFx0bmZfZmxvd190YWJsZV9jbGVhbnVwKGRldik7XG4gMjQ3Olx0XG4gMjQ4Olx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gMjQ5Olx0fVxuIDI1MDpcdFxuIDI1MTpcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZmxvd19vZmZsb2FkX25ldGRldl9ub3RpZmllciA9IHtcbiAyNTI6XHRcdC5ub3RpZmllcl9jYWxsXHQ9IGZsb3dfb2ZmbG9hZF9uZXRkZXZfZXZlbnQsXG4gMjUzOlx0fTtcbiAyNTQ6XHRcbiAyNTU6XHRzdGF0aWMgaW50IF9faW5pdCBuZnRfZmxvd19vZmZsb2FkX21vZHVsZV9pbml0KHZvaWQpXG4gMjU2Olx0e1xuIDI1NzpcdFx0aW50IGVycjtcbiAyNTg6XHRcbiAyNTk6XHRcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZmbG93X29mZmxvYWRfbmV0ZGV2X25vdGlmaWVyKTtcbiAyNjA6XHRcdGlmIChlcnIpXG4gMjYxOlx0XHRcdGdvdG8gZXJyO1xuIDI2MjpcdFxuIDI2MzpcdFx0ZXJyID0gbmZ0X3JlZ2lzdGVyX2V4cHIoXHUwMDI2bmZ0X2Zsb3dfb2ZmbG9hZF90eXBlKTtcbiAyNjQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gMjY1Olx0XHRcdGdvdG8gcmVnaXN0ZXJfZXhwcjtcbiAyNjY6XHRcbiAyNjc6XHRcdHJldHVybiAwO1xuIDI2ODpcdFxuIDI2OTpcdHJlZ2lzdGVyX2V4cHI6XG4gMjcwOlx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZmbG93X29mZmxvYWRfbmV0ZGV2X25vdGlmaWVyKTtcbiAyNzE6XHRlcnI6XG4gMjcyOlx0XHRyZXR1cm4gZXJyO1xuIDI3MzpcdH1cbiAyNzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEzMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIENsZWFudXAgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgZmxvdyB0YWJsZSBjbGVhbnVwIHByb2Nlc3MgaGFuZGxlcyBhIGBORVRERVZfRE9XTmAgZXZlbnQuIFByZXZpb3VzbHksIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXBgLCBpbmNsdWRlZCBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBmbG93JiMzOTtzIGNvbm50cmFjayBuZXRucyBtYXRjaGVkIHRoZSBkZXZpY2UmIzM5O3MgbmV0bnMgKmFuZCogdGhhdCB0aGUgaW50ZXJmYWNlIGluZGV4IG1hdGNoZWQuIFRoaXMgd2FzIGFjaGlldmVkIHZpYSBjaGVja2luZyBgZGV2X25ldChkZXYpYCBhbmQgdGhlIGBpaWZpZHhgLgoKTm93LCBpdCBzZWVtcyB0aGlzIG5ldG5zIGNoZWNrIGhhcyBiZWVuIG1vdmVkLiBJbnN0ZWFkIG9mIGNoZWNraW5nIHRoaXMgb24gYSBwZXItZmxvdyBiYXNpcyB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAsIHRoZSBjb2RlLCBpbiBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCwgbm93IGl0ZXJhdGVzIHRocm91Z2ggdGhlIGZsb3cgdGFibGVzIGFuZCBmaWx0ZXJzIHRoZW0gYmFzZWQgb24gdGhlIG5ldG5zIG9mIHRoZSBmbG93dGFibGUgaXRzZWxmIHVzaW5nIGBmbG93dGFibGUtJmd0O25ldGAgYW5kIGBkZXZfbmV0KGRldilgLiBUaGVuLCB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAsIHRoZSBjb2RlIG5vdyBvbmx5IGNoZWNrcyBmb3IgdGhlIGludGVyZmFjZSBpbmRleCBtYXRjaCBhZ2FpbnN0IHRoZSBgZGV2YCB2aWEgYGlpZmlkeGAuIEVzc2VudGlhbGx5LCB0aGUgbmV0bnMgY2hlY2sgaGFzIGJlZW4gbGlmdGVkIG91dCBvZiB0aGUgcGVyLWZsb3cgY2xlYW51cCBhbmQgaW50byB0aGUgZmxvd3RhYmxlIGxvb2t1cCBpdHNlbGYuCgpJcyB0aGlzIHBhdGggcmVhY2hhYmxlPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIGNvZGUuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIHBhcnRzIG9mIHRoZSBuZXRmaWx0ZXIvbmZ0YWJsZXMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZS4gVGhpcyB3aG9sZSBzeXN0ZW0gaXMgcmVhZGlseSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdHJpZ2dlcmVkIGJ5IHN0YW5kYXJkIG5ldGxpbmsvbmZ0YWJsZXMgY29tbWFuZHMgb3IgZGV2aWNlIGRvd24gZXZlbnRzIChlLmcuLCBgaXAgbGluayBzZXQgZG93bmAsIGRlbGV0aW5nIGRldmljZXMgbGlrZSB0dW4vdGFwL3ZldGgvZHVtbXkvbWFjdmxhbiwgbmV0bnMgdGVhcmRvd24sIGFuZCBzbyBvbikuIFRoZSBrZXkgaGVyZSBpcyB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gV2UmIzM5O2xsIG5lZWQgYE5GX0ZMT1dfVEFCTEVgLCBsaWtlbHkgYE5GX1RBQkxFU2AgYW5kIGBORlRfRkxPV19PRkZMT0FEYCwgYE5GX0NPTk5UUkFDS2AsIGBORVRGSUxURVJfSU5HUkVTU2AgKGF0IGxlYXN0KS4gTGV0IG1lIHB1bGwgdXAgS2NvbmZpZyB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgYE5GVF9GTE9XX09GRkxPQURgIGFuZCB0aGUgcmVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ5OD1jb25maWcgTkZUX0VYVEhEUl9EQ0NQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDQ6Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfRkxPV19UQUJMRVxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTEyPW9iai0kKENPTkZJR19ORlRfQ1QpXHRcdCYjNDM7PSBuZnRfY3Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTM6b2JqLSQoQ09ORklHX05GVF9GTE9XX09GRkxPQUQpXHQmIzQzOz0gbmZ0X2Zsb3dfb2ZmbG9hZC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExNC1vYmotJChDT05GSUdfTkZUX0xJTUlUKVx0XHQmIzQzOz0gbmZ0X2xpbWl0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgTkZUX0ZMT1dfT0ZGTE9BRGAgaW4gS2NvbmZpZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoYW5kbGVkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBLY29uZmlnYCBhbmQgY2hlY2tpbmcgdGhlIGRlZmluaXRpb24gb2YgYE5GVF9GTE9XX09GRkxPQURgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMuIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gV2hhdCBvdGhlciBuZXR3b3JraW5nLXJlbGF0ZWQgZmVhdHVyZXMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoLCBvciByZWx5IG9uPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIHByZXNlbmNlIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgY3VycmVudCBwZXJmb3JtYW5jZSBnb2FscyBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gUGVyaGFwcyBJIHdhbnQgdG8gY2hlY2sgZm9yIGFueSBjYXZlYXRzIGluIHRoZSByZWxldmFudCBjb21taXQgbG9ncy4gVGhpcyBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGFyZWEgZm9yIG9wdGltaXphdGlvbiwgb3IgbWF5YmUgaXQmIzM5O3MgdGhlIHJvb3Qgb2Ygc29tZSBpc3N1ZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgYWRkcmVzcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcdGRlZmF1bHQgblxuIDUwMTpcdFx0aGVscFxuIDUwMjpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIG1hdGNoaW5nIG9uIERDQ1AgZXh0ZW5zaW9uIGhlYWRlcnMuXG4gNTAzOlx0XG4gNTA0Olx0Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcbiA1MDU6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9GTE9XX1RBQkxFXG4gNTA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGhhcmR3YXJlIGZsb3cgb2ZmbG9hZCBtb2R1bGVcJiMzNDtcbiA1MDc6XHRcdGhlbHBcbiA1MDg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXCYjMzQ7Zmxvd19vZmZsb2FkXCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xuIDUwOTpcdFx0ICBjaG9vc2Ugd2hhdCBmbG93cyBhcmUgcGxhY2VkIGludG8gdGhlIGhhcmR3YXJlLlxuIDUxMDpcdFxuIDUxMTpcdGNvbmZpZyBORlRfQ09OTkxJTUlUXG4gNTEyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm5saW1pdCBtb2R1bGVcJiMzNDtcbiA1MTM6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNTE0Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDUxNTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9DT05OQ09VTlRcbiA1MTY6XHRcdGhlbHBcbiA1MTc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXCYjMzQ7Y29ubmxpbWl0XCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xuIDUxODpcdFx0ICByYXRlbGltaXQgcnVsZSBtYXRjaGluZ3MgcGVyIGNvbm5lY3Rpb25zLlxuIDUxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODQ2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZsb3cgVGFibGUgRGVwZW5kZW5jaWVzIGFuZCBDbGVhbnVwIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBORl9GTE9XX1RBQkxFYCBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBpdCByZWxpZXMgb24gYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4gQW5kLCBzaW5jZSB3ZSYjMzk7cmUgaGVyZSwgYE5GVF9GTE9XX09GRkxPQURgIGlzIGRlcGVuZGVudCBvbiBib3RoIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfRkxPV19UQUJMRWAuIEdvb2QgdG8gaGF2ZSB0aG9zZSByZWxhdGlvbnNoaXBzIGNsZWFyIGluIG15IGhlYWQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgd2hpY2ggZnVuY3Rpb25zIGFyZSBiZWluZyBkaXJlY3RseSBtb2RpZmllZC4gSSBzZWUgYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAsIGBuZl9mbG93X3RhYmxlX2NsZWFudXBgLCBhbmQuLi5vaCwgYWxzbyBgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwYCwgYGZsb3dfb2ZmbG9hZF90ZWFyZG93bmAsIGFuZCBgZmxvd19vZmZsb2FkX25ldGRldl9ldmVudGAgYXJlIGJlaW5nIHRvdWNoZWQuIEdvdCBpdC4gVGhhdCBoZWxwcyBtZSBzY29wZSB0aGUgYXJlYSB0aGF0IEkgbmVlZCB0byBjYXJlZnVsbHkgcmV2aWV3LgoKRmluYWxseSwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLiBJdCYjMzk7cyBjcnVjaWFsIHRoYXQgSSB2ZXJpZnkgaWYgYW55dGhpbmcgZWxzZSBjYWxscywgb3IgcmVsaWVzIG9uLCBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCBvciBgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwYC4gSSBjYW4mIzM5O3QgYWZmb3JkIHRvIG1pc3MgYW55IHN1YnRsZSwgaW5kaXJlY3QgY29ubmVjdGlvbnMuIFRoYXQmIzM5O3MgYSBrZXkgcGFydCBvZiBteSBkdWUgZGlsaWdlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2djX2NsZWFudXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zMjM9dm9pZCBuZl9mbG93X3RhYmxlX2djX3J1bihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzI0OnZvaWQgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzI1LVx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzI4PXN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzM4LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3Mzk6dm9pZCBuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NDAtXHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc0Nz12b2lkIG5mX2Zsb3dfdGFibGVfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzUzLVx0XHRpZiAobmV0X2VxKHJlYWRfcG5ldChcdTAwMjZmbG93dGFibGUtXHUwMDNlbmV0KSwgZGV2X25ldChkZXYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzU0Olx0XHRcdG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc1NS1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyMjU9c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9pbmRyX2NsZWFudXAoc3RydWN0IGZsb3dfYmxvY2tfY2IgKmJsb2NrX2NiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTIyOS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTIzMDpcdG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyMzEtXHRkb3duX3dyaXRlKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg1OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBOZXRmaWx0ZXIgRmxvdyBUYWJsZSBDbGVhbnVwIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBjbGVhbnVwIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIGBuZl9mbG93X3RhYmxlX2luZHJfY2xlYW51cGAuIEkgc2VlIHRoYXQgYG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldilgIGlzIGFsc28gY2FsbGVkIGZyb20gYG5mX2Zsb3dfdGFibGVfaW5kcl9jbGVhbnVwYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgbmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3d0YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBkZXYpYC4gVGhlIGtleSBvYnNlcnZhdGlvbiBoZXJlIGlzIHRoYXQgYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAgKm5vdyogYXZvaWRzIGNoZWNraW5nIGBuZXRfZXEobmZfY3RfbmV0KGZsb3ctJmd0O2N0KSwgZGV2X25ldChkZXYpKWAgYW5kIGluc3RlYWQgbGV2ZXJhZ2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGBmbG93dGFibGVgIGFuZCBgZGV2YCBhcmUgd2l0aGluIHRoZSBzYW1lIG5ldHdvcmsgbmFtZXNwYWNlIG9yIHRoYXQgZGV2aWNlIGluZGV4IG1hdGNoaW5nIHdpdGhpbiB0aGUgZmxvd3RhYmxlIGlzIGVub3VnaC4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGNyaXRlcmlhLiBHaXZlbiB0aGUgY2hhbmdlcywgdGhlIHBhdGNoICpkb2VzKiBhbHRlciB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY2xlYW51cCBsb2dpYywgc3BlY2lmaWNhbGx5IGJ5IG9wdGltaXppbmcgdGhlIG5ldCBuYW1lc3BhY2UgZmlsdGVyaW5nIGF0IHRoZSBmbG93dGFibGUgbGlzdCBpdGVyYXRpb24gbGV2ZWwgYW5kIHNpbXBsaWZ5aW5nIGRldmljZSBtYXRjaGluZy4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZywgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHVzdWFsIG5ldHdvcmsgc29ja2V0LCBuZXRsaW5rLCBhbmQgbmZ0YWJsZXMgaW50ZXJmYWNlcyBhY2Nlc3NpYmxlIGluIHNvbWV0aGluZyBsaWtlIFFFTVUgb3Igc3l6a2FsbGVyLgoKVGhlcmVmb3JlLCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGlzICp0cnVlKi4KCkkmIzM5O2xsIHNldCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGFzIG5lZWRlZDoKCiogICBgTkZfRkxPV19UQUJMRWAKKiAgIGBORl9UQUJMRVNgCiogICBgTkZfQ09OTlRSQUNLYAoqICAgYE5FVEZJTFRFUl9JTkdSRVNTYAoqICAgYE5GVF9GTE9XX09GRkxPQURgCgpBbmQgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOgoKKiAgIGBuZl9mbG93X3RhYmxlX2NsZWFudXBgCiogICBgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwYAoqICAgYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAKKiAgIGBmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50YAoqICAgYG5mX2Zsb3dfdGFibGVfZnJlZWAKCkkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGZvciBvdGhlciByZWxhdGVkIHN5bWJvbHMgb3IgY29uZmlncy4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYE5GVF9GTE9XX09GRkxPQURgIGlzIHN0cmljdGx5IG5lY2Vzc2FyeSwgb3IgaWYgYE5GX0ZMT1dfVEFCTEVgIGJ5IGl0c2VsZiBpcyBlbm91Z2guIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkZfRkxPV19UQUJMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMzk9b2JqLSQoQ09ORklHX05GVF9GV0RfTkVUREVWKVx0JiM0Mzs9IG5mdF9md2RfbmV0ZGV2Lm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0MS0jIGZsb3cgdGFibGUgaW5mcmFzdHJ1Y3R1cmVcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQyOm9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVx0JiM0Mzs9IG5mX2Zsb3dfdGFibGUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDMtbmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ1LVx0XHRcdFx0ICAgbmZfZmxvd190YWJsZV9vZmZsb2FkLm8gbmZfZmxvd190YWJsZV94ZHAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDY6bmZfZmxvd190YWJsZS0kKENPTkZJR19ORl9GTE9XX1RBQkxFX1BST0NGUykgJiM0Mzs9IG5mX2Zsb3dfdGFibGVfcHJvY2ZzLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ3OmlmZXEgKCQoQ09ORklHX05GX0ZMT1dfVEFCTEUpLG0pXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0OC1uZl9mbG93X3RhYmxlLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpICYjNDM7PSBuZl9mbG93X3RhYmxlX2JwZi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0OTplbHNlIGlmZXEgKCQoQ09ORklHX05GX0ZMT1dfVEFCTEUpLHkpXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1MC1uZl9mbG93X3RhYmxlLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSAmIzQzOz0gbmZfZmxvd190YWJsZV9icGYub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNTE9ZW5kaWZcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTUyLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNTM6b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfSU5FVCkgJiM0Mzs9IG5mX2Zsb3dfdGFibGVfaW5ldC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1NC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz0xNjI0PXZvaWQgbmZfY29ubnRyYWNrX3RjcF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTY1Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjE2NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xNjU4LVx0dG4tXHUwMDNlb2ZmbG9hZF90aW1lb3V0ID0gMzAgKiBIWjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYz0xOTU9dm9pZCBuZl9jb25udHJhY2tfdWRwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYy0yMDItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYzoyMDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYy0yMDQtXHR1bi1cdTAwM2VvZmZsb2FkX3RpbWVvdXQgPSAzMCAqIEhaO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz01ODU9ZW51bSBuZl9jdF9zeXNjdGxfaW5kZXgge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02MDktXHRORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9UQ1BfVU5BQ0ssXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NjEwOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTYxMS1cdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9PRkZMT0FELFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02MTgtXHRORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9VRFBfU1RSRUFNLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjYxOTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02MjAtXHRORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9VRFBfT0ZGTE9BRCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9NjQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy03ODYtXHR9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjc4NzojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy03ODgtXHRbTkZfU1lTQ1RMX0NUX1BST1RPX1RJTUVPVVRfVENQX09GRkxPQURdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy04MzYtXHR9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjgzNzojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy04MzgtXHRbTkZfU1lTQ1RMX0NUX1BST1RPX1RJTUVPVVRfVURQX09GRkxPQURdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz05MzU9c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF90Y3Bfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtOTYzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjk2NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05NjUtXHR0YWJsZVtORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9UQ1BfT0ZGTE9BRF0uZGF0YSA9IFx1MDAyNnRuLVx1MDAzZW9mZmxvYWRfdGltZW91dDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9MTAwMz1zdGF0aWMgaW50IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTAzMC1cdHRhYmxlW05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9TVFJFQU1dLmRhdGEgPSBcdTAwMjZ1bi1cdTAwM2V0aW1lb3V0c1tVRFBfQ1RfUkVQTElFRF07XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTAzMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDMyLVx0dGFibGVbTkZfU1lTQ1RMX0NUX1BST1RPX1RJTUVPVVRfVURQX09GRkxPQURdLmRhdGEgPSBcdTAwMjZ1bi1cdTAwM2VvZmZsb2FkX3RpbWVvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzk3CgkJCQkJCQlvdXRwdXQ6IDE5OQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeToKCioqVGhlIFBhdGggRm9yd2FyZCBpcyBEZWZpbmVkKioKCk9rYXksIHRoZSBwYXRoIGZvcndhcmQgaXMgcGVyZmVjdGx5IGNsZWFyLCBhbmQgSSYjMzk7dmUgdmVyaWZpZWQgZXZlcnkgYXNwZWN0IG9mIHRoZSBzaXR1YXRpb24uIFRoZXJlIGFyZSBubyByZW1haW5pbmcgdW5jZXJ0YWludGllcyBvciBsb29zZSBlbmRzLiBCYXNlZCBvbiBteSBhc3Nlc3NtZW50LCBJIGNhbiBjb25maWRlbnRseSBkZWNsYXJlIHRoZSBuZXh0IGFjdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBpbml0aWF0ZSB0aGUgZnVuY3Rpb24sIG9yIHByb2Nlc3MsIHdoaWNoIEkgd2lsbCBkZXNpZ25hdGUgYHNldC1yZXN1bHRzYC4gV2l0aCB0aGF0LCB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbSB3aWxsIGJlIHJlc29sdmVkIGFuZCBldmVyeXRoaW5nIGlzIHNldCBpbiBtb3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfY2xlYW51cCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX2djX2NsZWFudXAmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9kb19jbGVhbnVwJiMzNDssCiAgICAmIzM0O2Zsb3dfb2ZmbG9hZF9uZXRkZXZfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGNsZWFudXAgcGF0aCBpbiBuZl9mbG93X3RhYmxlX2NvcmUuYyBieSBtb3ZpbmcgbmV0d29yayBuYW1lc3BhY2UgbWF0Y2hpbmcgdG8gdGhlIG91dGVyIGZsb3d0YWJsZSBpdGVyYXRpb24gaW4gbmZfZmxvd190YWJsZV9jbGVhbnVwKCkgYW5kIGFkanVzdGluZyBwZXItZmxvdyBkZXZpY2UgdGVhcmRvd24gY29uZGl0aW9ucyBpbiBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoKS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZXhlY3V0ZWQgZHVyaW5nIG5ldHdvcmsgZGV2aWNlIHRlYXJkb3duL05FVERFVl9ET1dOIGV2ZW50cyB3aXRoIGFjdGl2ZSBuZnRhYmxlcyBmbG93IHRhYmxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9JTkdSRVNTJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9mbG93X3RhYmxlX2NsZWFudXAmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9nY19jbGVhbnVwJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCYjMzQ7LAogICAgJiMzNDtmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjbGVhbnVwIHBhdGggaW4gbmZfZmxvd190YWJsZV9jb3JlLmMgYnkgbW92aW5nIG5ldHdvcmsgbmFtZXNwYWNlIG1hdGNoaW5nIHRvIHRoZSBvdXRlciBmbG93dGFibGUgaXRlcmF0aW9uIGluIG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpIGFuZCBhZGp1c3RpbmcgcGVyLWZsb3cgZGV2aWNlIHRlYXJkb3duIGNvbmRpdGlvbnMgaW4gbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKCkuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGV4ZWN1dGVkIGR1cmluZyBuZXR3b3JrIGRldmljZSB0ZWFyZG93bi9ORVRERVZfRE9XTiBldmVudHMgd2l0aCBhY3RpdmUgbmZ0YWJsZXMgZmxvdyB0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgbmV0d29yayBuYW1lc3BhY2UgY2hlY2tpbmcgZHVyaW5nIG5ldGRldmljZSBjbGVhbnVwIGluIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIHN1YnN5c3RlbS4gSXQgc2hpZnRzIHRoZSBuYW1lc3BhY2UgbWF0Y2ggY2hlY2sgYG5ldF9lcShyZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldCksIGRldl9uZXQoZGV2KSlgIHVwIHRvIGBuZl9mbG93X3RhYmxlX2NsZWFudXAoKWAgd2hlbiBpdGVyYXRpbmcgb3ZlciByZWdpc3RlcmVkIGZsb3d0YWJsZXMsIGFuZCByZW1vdmVzIHRoZSBwZXItZmxvdyBgbmV0X2VxKG5mX2N0X25ldChmbG93LVx1MDAzZWN0KSwgZGV2X25ldChkZXYpKWAgY2hlY2sgZnJvbSBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKClgLlxuXG5UaGlzIGNoYW5nZTpcbjEuIERvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IG5ldyBzdGFjay9oZWFwIG1lbW9yeSBvciBkYXRhIHN0cnVjdHVyZXMuXG4yLiBEb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLlxuMy4gRG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbHRlciBidWZmZXIgYm91bmRzL2xlbmd0aHMuXG5cbkFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIG9iamVjdCBsaWZldGltZXMsIGRldmljZSBkZXJlZmVyZW5jZXMsIG9yIGxpc3Qgb3BlcmF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiAvIExPQ0tERVApLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZmIzMTZjMGFjYTE0MDYyZTk3NWE1MmI4Yzg5ZGRkYjM5YmU5OTQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAwODo0Nzo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCmluZGV4IDAzMjQxZDRiZmQ1ZTguLjUyY2NhN2E4ZjE0MWIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYwpAQCAtNzMwLDE0ICYjNDM7NzMwLDkgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRhdGE7CiAKLQlpZiAoIWRldikgewotCQlmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobmV0X2VxKG5mX2N0X25ldChmbG93LSZndDtjdCksIGRldl9uZXQoZGV2KSkgJmFtcDsmYW1wOwotCSAgICAoZmxvdy0mZ3Q7dHVwbGVoYXNoWzBdLnR1cGxlLmlpZmlkeCA9PSBkZXYtJmd0O2lmaW5kZXggfHwKLQkgICAgIGZsb3ctJmd0O3R1cGxlaGFzaFsxXS50dXBsZS5paWZpZHggPT0gZGV2LSZndDtpZmluZGV4KSkKJiM0MzsJaWYgKCFkZXYgfHwKJiM0MzsJICAgIGZsb3ctJmd0O3R1cGxlaGFzaFswXS50dXBsZS5paWZpZHggPT0gZGV2LSZndDtpZmluZGV4IHx8CiYjNDM7CSAgICBmbG93LSZndDt0dXBsZWhhc2hbMV0udHVwbGUuaWlmaWR4ID09IGRldi0mZ3Q7aWZpbmRleCkKIAkJZmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpOwogfQogCkBAIC03NTQsOCAmIzQzOzc0OSwxMCBAQCB2b2lkIG5mX2Zsb3dfdGFibGVfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZTsKIAogCW11dGV4X2xvY2soJmFtcDtmbG93dGFibGVfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShmbG93dGFibGUsICZhbXA7Zmxvd3RhYmxlcywgbGlzdCkKLQkJbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKGZsb3d0YWJsZSwgZGV2KTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShmbG93dGFibGUsICZhbXA7Zmxvd3RhYmxlcywgbGlzdCkgewomIzQzOwkJaWYgKG5ldF9lcShyZWFkX3BuZXQoJmFtcDtmbG93dGFibGUtJmd0O25ldCksIGRldl9uZXQoZGV2KSkpCiYjNDM7CQkJbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKGZsb3d0YWJsZSwgZGV2KTsKJiM0MzsJfQogCW11dGV4X3VubG9jaygmYW1wO2Zsb3d0YWJsZV9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfY2xlYW51cCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgYSBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUmVxdWlyZW1lbnRzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGUgdXNlciB3YW50cyBtZSB0byBhc3Nlc3MgYSBrZXJuZWwgcGF0Y2ggYW5kIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gYnJpbmcgS01TQU4gaW50byB0aGUgZnV6emluZyBtaXgsIG9yIGlmIEtBU0FOIGlzIHN1ZmZpY2llbnQuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY29kZSByZXZpZXcgdGFzayBmb3IgZnV6emluZyBpbmZyYXN0cnVjdHVyZS4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncywgaXQgbG9va3MgbGlrZSBhIGJlbmlnbiBkZWZlbnNpdmUgYWN0aW9uLiBHb29kLCBzYWZlIHRvIHByb2NlZWQgd2l0aCB0aGUgZXZhbHVhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZSBpdHNlbGYuIFRoZSBkaWZmIGlzIHByZXR0eSBzbWFsbCwgdGhhbmtmdWxseS4gSXQmIzM5O3MgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNgLiBIbW0sIGxvb2tzIGxpa2Ugc29tZSBjb25kaXRpb25hbCBsb2dpYyBpcyBiZWluZyBzaW1wbGlmaWVkIGluIGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXBgLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBjaGVjayBmb3IgYCFkZXZgIGFuZCB0aGVuIGFub3RoZXIgY2hlY2suIFRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIG1lcmdpbmcgdGhlIGNvbmRpdGlvbnMuIEl0ICpzZWVtcyogbGlrZSB0aGlzIGlzIGp1c3Qgc2ltcGxpZnlpbmcgdGhlIGNvZGUsIG1ha2luZyB0aGUgbG9naWMgYSBiaXQgbW9yZSBjb25jaXNlLiBJIHNlZSBgZmxvd19vZmZsb2FkX3RlYXJkb3duYCBiZWluZyBjYWxsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiB0aGUgYGRldmAgcGFyYW1ldGVyIGFuZCBzb21lIGNoZWNrcyByZWxhdGVkIHRvIGBpaWZpZHhgIGFuZCB0aGUgbmV0d29yayBuYW1lc3BhY2UgKGBuZXRfZXFgKS4gVGhlIHNlY29uZCBjaGFuZ2UgaW52b2x2ZXMgYSBjaGVjayBmb3IgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGVxdWFsaXR5IG9mIHRoZSBgZmxvd3RhYmxlYC4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgcmlza3MgYW5kIHdoZXRoZXIgS01TQU4gaXMgbmVlZGVkLCBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AgYW5kIGhvdyBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwYCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0sIGFuZCBob3cgdGhlIGNoYW5nZXMgbWF5IGludGVyYWN0IHdpdGggb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBncmVwcGluZyBza2lsbHMsIG9yIHB1bGwgdXAgdGhlIGZpbGUmIzM5O3MgY29udGV4dCwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZWZmZWN0cyBvZiB0aGVzZSBjaGFuZ2VzLiBJbiB0aGUgbWVhbnRpbWUsIGJhc2VkIG9uIHRoZSBwYXRjaCYjMzk7cyBpbW1lZGlhdGUgY29udGVudCwgaXQgZG9lc24mIzM5O3QgaW1tZWRpYXRlbHkgc2NyZWFtICYjMzQ7S01TQU4gbmVlZGVkLCYjMzQ7IGJ1dCBhIG1vcmUgdGhvcm91Z2ggYW5hbHlzaXMgaXMgYWx3YXlzIGluIG9yZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyMDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4gNzIxOlx0XHRsaXN0X2FkZChcdTAwMjZmbG93dGFibGUtXHUwMDNlbGlzdCwgXHUwMDI2Zmxvd3RhYmxlcyk7XG4gNzIyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIDcyMzpcdFxuIDcyNDpcdFx0cmV0dXJuIDA7XG4gNzI1Olx0fVxuIDcyNjpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfaW5pdCk7XG4gNzI3Olx0XG4gNzI4Olx0c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gNzI5Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXG4gNzMwOlx0e1xuIDczMTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRhdGE7XG4gNzMyOlx0XG4gNzMzOlx0XHRpZiAoIWRldiB8fFxuIDczNDpcdFx0ICAgIGZsb3ctXHUwMDNldHVwbGVoYXNoWzBdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXHUwMDNlaWZpbmRleCB8fFxuIDczNTpcdFx0ICAgIGZsb3ctXHUwMDNldHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXHUwMDNlaWZpbmRleClcbiA3MzY6XHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuIDczNzpcdH1cbiA3Mzg6XHRcbiA3Mzk6XHR2b2lkIG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4gNzQwOlx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA3NDE6XHR7XG4gNzQyOlx0XHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd3RhYmxlLCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAsIGRldik7XG4gNzQzOlx0XHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWdjX3dvcmspO1xuIDc0NDpcdFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKGZsb3d0YWJsZSk7XG4gNzQ1Olx0fVxuIDc0NjpcdFxuIDc0NzpcdHZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNzQ4Olx0e1xuIDc0OTpcdFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlO1xuIDc1MDpcdFxuIDc1MTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4gNzUyOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3d0YWJsZSwgXHUwMDI2Zmxvd3RhYmxlcywgbGlzdCkge1xuIDc1MzpcdFx0XHRpZiAobmV0X2VxKHJlYWRfcG5ldChcdTAwMjZmbG93dGFibGUtXHUwMDNlbmV0KSwgZGV2X25ldChkZXYpKSlcbiA3NTQ6XHRcdFx0XHRuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoZmxvd3RhYmxlLCBkZXYpO1xuIDc1NTpcdFx0fVxuIDc1NjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbiA3NTc6XHR9XG4gNzU4Olx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTtcbiA3NTk6XHRcbiA3NjA6XHR2b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxuIDc2MTpcdHtcbiA3NjI6XHRcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIDc2MzpcdFx0bGlzdF9kZWwoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VsaXN0KTtcbiA3NjQ6XHRcdG11dGV4X3VubG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4gNzY1Olx0XG4gNzY2Olx0XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VnY193b3JrKTtcbiA3Njc6XHRcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChmbG93X3RhYmxlKTtcbiA3Njg6XHRcdC8qIC4uLiBubyBtb3JlIHBlbmRpbmcgd29yayBhZnRlciB0aGlzIHN0YWdlIC4uLiAqL1xuIDc2OTpcdFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCwgTlVMTCk7XG4gNzcwOlx0XHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93X3RhYmxlKTtcbiA3NzE6XHRcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKGZsb3dfdGFibGUpO1xuIDc3MjpcdFx0cmhhc2h0YWJsZV9kZXN0cm95KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlcmhhc2h0YWJsZSk7XG4gNzczOlx0fVxuIDc3NDpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfZnJlZSk7XG4gNzc1Olx0XG4gNzc2Olx0c3RhdGljIGludCBuZl9mbG93X3RhYmxlX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiA3Nzc6XHR7XG4gNzc4Olx0XHRuZXQtXHUwMDNlZnQuc3RhdCA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgbmZfZmxvd190YWJsZV9zdGF0KTtcbiA3Nzk6XHRcdHJldHVybiBuZXQtXHUwMDNlZnQuc3RhdCA/IDAgOiAtRU5PTUVNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDk4CgkJCQkJCQlvdXRwdXQ6IDIyMAoJCQkJCQkJdGhvdWdodHM6IDY5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBGbG93dGFibGUgQ2xlYW51cCBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB0aGlzIHBhdGNoIGlzIG9wdGltaXppbmcgdGhlIGZsb3cgdGFibGUgY2xlYW51cCBwcm9jZXNzIHJlbGF0ZWQgdG8gbmV0d29yayBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHVucmVnaXN0cmF0aW9uLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSBpbiBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCB3YXMgaXRlcmF0aW5nIHRocm91Z2ggYWxsIGBmbG93dGFibGVzYCBhbmQgdGhlbiBjYWxsaW5nIGBuZl9mbG93X3RhYmxlX2djX2NsZWFudXBgLCB3aGljaCBpbiB0dXJuIGNoZWNrZWQgaWYgdGhlIGZsb3dzIGJlbG9uZ2VkIHRvIHRoZSBzYW1lIG5ldHdvcmsgbmFtZXNwYWNlIChgbmV0bnNgKSBhcyB0aGUgZGV2aWNlIGJlaW5nIHVucmVnaXN0ZXJlZC4gVGhhdCBjaGVjayAoYG5ldF9lcShuZl9jdF9uZXQoZmxvdy0mZ3Q7Y3QpLCBkZXZfbmV0KGRldikpYCkgd2FzIGluc2lkZSB0aGUgZmxvdy1sZXZlbCBjYWxsYmFjay4KCk5vdywgd2l0aCB0aGlzIHBhdGNoLCB0aGUgbmV0bnMgY2hlY2sgaXMgbW92ZWQgKnVwKiB0byB0aGUgZmxvd3RhYmxlIGxldmVsIGl0c2VsZi4gU28sIGBuZl9mbG93X3RhYmxlX2NsZWFudXBgIGZpcnN0IGNoZWNrcyBgaWYgKG5ldF9lcShyZWFkX3BuZXQoJmFtcDtmbG93dGFibGUtJmd0O25ldCksIGRldl9uZXQoZGV2KSkpYCBiZWZvcmUgZXZlbiBjYWxsaW5nIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGZvciB0aGUgZmxvd3Mgd2l0aGluIHRoYXQgdGFibGUuIENvbnNlcXVlbnRseSwgdGhlIHJlZHVuZGFudCBjaGVjayB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAgaXMgcmVtb3ZlZCwgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaWYgdGhlIGZsb3d0YWJsZSBpcyBhbHJlYWR5IHNjb3BlZCB0byB0aGUgY29ycmVjdCBuZXRucy4KCk15IGtleSBjb25jZXJuIGlzIGFsd2F5cyBhcm91bmQgbWVtb3J5IHNhZmV0eS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBJJiMzOTt2ZSBjb25zaWRlcmVkOgoKKiAgICoqTWVtb3J5IEFsbG9jYXRpb25zOioqIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4KKiAgICoqVXNlci1TcGFjZSBJbnRlcmFjdGlvbjoqKiBJdCBkb2VzbiYjMzk7dCBpbnZvbHZlIGFueSBrZXJuZWwtdG8tdXNlciBjb3BpZXMgKGxpa2UgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIGV0Yy4pLiBObyBpbmZvcm1hdGlvbiBpcyBiZWluZyBsZWFrZWQgdG8gdXNlciBzcGFjZSBiZWNhdXNlIG9mIHRoaXMuCiogICAqKlVuaW5pdGlhbGl6ZWQgRmllbGRzOioqIE5vIG5ldyBvciBleGlzdGluZyBzdHJ1Y3R1cmUgZmllbGRzIGFyZSBiZWluZyBhY2Nlc3NlZCBvciBjcmVhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyBiZWluZyBicmFuY2hlZCBvbiBvciB1c2VkIHRvIGNhbGN1bGF0ZSBsZW5ndGhzLgoqICAgKipPcHRpbWl6YXRpb24gb25seToqKiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gb3B0aW1pemF0aW9uIHRoYXQgZWxpbWluYXRlcyBhbiB1bm5lY2Vzc2FyeSBuZXR3b3JrIG5hbWVzcGFjZSBjaGVjay4KCkdpdmVuIHRoZSBjcml0ZXJpYSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIG9wdGltaXphdGlvbiBkb2VzICpub3QqIGludHJvZHVjZSBLTVNBTi1yZWxldmFudCBpc3N1ZXMuIFRoZSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSByaXNrcyBoZXJlIHdvdWxkIGJlIHR5cGljYWwgb2YgdGhpcyB0eXBlIG9mIGNvZGU6IFVzZS1BZnRlci1GcmVlIChVQUYpLCByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbXMsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxpc3QgdHJhdmVyc2FsIGlzc3Vlcy4gVGhlc2UgYXJlIGFsbCB0aGUga2luZCBvZiBidWdzIHRoYXQgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIHNhbml0aXplcnMgYXJlIGRlc2lnbmVkIHRvIGRldGVjdC4KClNpbmNlIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBtZWV0IGFueSBvZiB0aGUgS01TQU4gdHJpZ2dlcnMg4oCTIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBubyB1c2VyLXNwYWNlIGNvcGllcywgbm8gY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhIOKAkyBOZWVkc0tNU0FOIHNob3VsZCBiZSBzZXQgdG8gKmZhbHNlKi4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIG5ldHdvcmsgbmFtZXNwYWNlIGNoZWNraW5nIGR1cmluZyBuZXRkZXZpY2UgY2xlYW51cCBpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBzdWJzeXN0ZW0uIEl0IHNoaWZ0cyB0aGUgbmFtZXNwYWNlIG1hdGNoIGNoZWNrIGBuZXRfZXEocmVhZF9wbmV0KFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VuZXQpLCBkZXZfbmV0KGRldikpYCB1cCB0byBgbmZfZmxvd190YWJsZV9jbGVhbnVwKClgIHdoZW4gaXRlcmF0aW5nIG92ZXIgcmVnaXN0ZXJlZCBmbG93dGFibGVzLCBhbmQgcmVtb3ZlcyB0aGUgcGVyLWZsb3cgYG5ldF9lcShuZl9jdF9uZXQoZmxvdy1cdTAwM2VjdCksIGRldl9uZXQoZGV2KSlgIGNoZWNrIGZyb20gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCgpYC5cblxuVGhpcyBjaGFuZ2U6XG4xLiBEb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBuZXcgc3RhY2svaGVhcCBtZW1vcnkgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuMi4gRG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS5cbjMuIERvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy9sZW5ndGhzLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgZGVyZWZlcmVuY2VzLCBvciBsaXN0IG9wZXJhdGlvbnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4gLyBMT0NLREVQKS4gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIG5ldHdvcmsgbmFtZXNwYWNlIGNoZWNraW5nIGR1cmluZyBuZXRkZXZpY2UgY2xlYW51cCBpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBzdWJzeXN0ZW0uIEl0IHNoaWZ0cyB0aGUgbmFtZXNwYWNlIG1hdGNoIGNoZWNrIGBuZXRfZXEocmVhZF9wbmV0KFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VuZXQpLCBkZXZfbmV0KGRldikpYCB1cCB0byBgbmZfZmxvd190YWJsZV9jbGVhbnVwKClgIHdoZW4gaXRlcmF0aW5nIG92ZXIgcmVnaXN0ZXJlZCBmbG93dGFibGVzLCBhbmQgcmVtb3ZlcyB0aGUgcGVyLWZsb3cgYG5ldF9lcShuZl9jdF9uZXQoZmxvdy1cdTAwM2VjdCksIGRldl9uZXQoZGV2KSlgIGNoZWNrIGZyb20gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCgpYC5cblxuVGhpcyBjaGFuZ2U6XG4xLiBEb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBuZXcgc3RhY2svaGVhcCBtZW1vcnkgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuMi4gRG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS5cbjMuIERvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy9sZW5ndGhzLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgZGVyZWZlcmVuY2VzLCBvciBsaXN0IG9wZXJhdGlvbnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4gLyBMT0NLREVQKS4gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODo0Nzo0My42MzU4MDU5MTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTAxMDkxMTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9mbG93X3RhYmxlX2NsZWFudXBcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cFwiLFxuICAgIFwibmZfZmxvd190YWJsZV9kb19jbGVhbnVwXCIsXG4gICAgXCJmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgbmV0d29yayBuYW1lc3BhY2UgY2hlY2tpbmcgZHVyaW5nIG5ldGRldmljZSBjbGVhbnVwIGluIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIHN1YnN5c3RlbS4gSXQgc2hpZnRzIHRoZSBuYW1lc3BhY2UgbWF0Y2ggY2hlY2sgYG5ldF9lcShyZWFkX3BuZXQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlbmV0KSwgZGV2X25ldChkZXYpKWAgdXAgdG8gYG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpYCB3aGVuIGl0ZXJhdGluZyBvdmVyIHJlZ2lzdGVyZWQgZmxvd3RhYmxlcywgYW5kIHJlbW92ZXMgdGhlIHBlci1mbG93IGBuZXRfZXEobmZfY3RfbmV0KGZsb3ctXFx1MDAzZWN0KSwgZGV2X25ldChkZXYpKWAgY2hlY2sgZnJvbSBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKClgLlxcblxcblRoaXMgY2hhbmdlOlxcbjEuIERvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IG5ldyBzdGFjay9oZWFwIG1lbW9yeSBvciBkYXRhIHN0cnVjdHVyZXMuXFxuMi4gRG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS5cXG4zLiBEb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgZGVyZWZlcmVuY2VzLCBvciBsaXN0IG9wZXJhdGlvbnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4gLyBMT0NLREVQKS4gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjbGVhbnVwIHBhdGggaW4gbmZfZmxvd190YWJsZV9jb3JlLmMgYnkgbW92aW5nIG5ldHdvcmsgbmFtZXNwYWNlIG1hdGNoaW5nIHRvIHRoZSBvdXRlciBmbG93dGFibGUgaXRlcmF0aW9uIGluIG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpIGFuZCBhZGp1c3RpbmcgcGVyLWZsb3cgZGV2aWNlIHRlYXJkb3duIGNvbmRpdGlvbnMgaW4gbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKCkuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGV4ZWN1dGVkIGR1cmluZyBuZXR3b3JrIGRldmljZSB0ZWFyZG93bi9ORVRERVZfRE9XTiBldmVudHMgd2l0aCBhY3RpdmUgbmZ0YWJsZXMgZmxvdyB0YWJsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ3OjQzLjYzNTgxMjczN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk4OTMxODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2ZiMzE2YzBhY2ExNDA2MmU5NzVhNTJiOGM4OWRkZGIzOWJlOTk0MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDA4OjQ3OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXFxuaW5kZXggMDMyNDFkNGJmZDVlOC4uNTJjY2E3YThmMTQxYiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xcbkBAIC03MzAsMTQgKzczMCw5IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhO1xcbiBcXG4tXFx0aWYgKCFkZXYpIHtcXG4tXFx0XFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChuZXRfZXEobmZfY3RfbmV0KGZsb3ctXFx1MDAzZWN0KSwgZGV2X25ldChkZXYpKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKGZsb3ctXFx1MDAzZXR1cGxlaGFzaFswXS50dXBsZS5paWZpZHggPT0gZGV2LVxcdTAwM2VpZmluZGV4IHx8XFxuLVxcdCAgICAgZmxvdy1cXHUwMDNldHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXFx1MDAzZWlmaW5kZXgpKVxcbitcXHRpZiAoIWRldiB8fFxcbitcXHQgICAgZmxvdy1cXHUwMDNldHVwbGVoYXNoWzBdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXFx1MDAzZWlmaW5kZXggfHxcXG4rXFx0ICAgIGZsb3ctXFx1MDAzZXR1cGxlaGFzaFsxXS50dXBsZS5paWZpZHggPT0gZGV2LVxcdTAwM2VpZmluZGV4KVxcbiBcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuIH1cXG4gXFxuQEAgLTc1NCw4ICs3NDksMTAgQEAgdm9pZCBuZl9mbG93X3RhYmxlX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3d0YWJsZSwgXFx1MDAyNmZsb3d0YWJsZXMsIGxpc3QpXFxuLVxcdFxcdG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldik7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoZmxvd3RhYmxlLCBcXHUwMDI2Zmxvd3RhYmxlcywgbGlzdCkge1xcbitcXHRcXHRpZiAobmV0X2VxKHJlYWRfcG5ldChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VuZXQpLCBkZXZfbmV0KGRldikpKVxcbitcXHRcXHRcXHRuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoZmxvd3RhYmxlLCBkZXYpO1xcbitcXHR9XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfY2xlYW51cCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ3OjQ0LjIzNTMzMzE0OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjQ5MTQ3OTgyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd190YWJsZV9jbGVhbnVwXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2djX2NsZWFudXBcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cFwiLFxuICAgIFwiZmxvd19vZmZsb2FkX25ldGRldl9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjbGVhbnVwIHBhdGggaW4gbmZfZmxvd190YWJsZV9jb3JlLmMgYnkgbW92aW5nIG5ldHdvcmsgbmFtZXNwYWNlIG1hdGNoaW5nIHRvIHRoZSBvdXRlciBmbG93dGFibGUgaXRlcmF0aW9uIGluIG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpIGFuZCBhZGp1c3RpbmcgcGVyLWZsb3cgZGV2aWNlIHRlYXJkb3duIGNvbmRpdGlvbnMgaW4gbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKCkuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGV4ZWN1dGVkIGR1cmluZyBuZXR3b3JrIGRldmljZSB0ZWFyZG93bi9ORVRERVZfRE9XTiBldmVudHMgd2l0aCBhY3RpdmUgbmZ0YWJsZXMgZmxvdyB0YWJsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2ZiMzE2YzBhY2ExNDA2MmU5NzVhNTJiOGM4OWRkZGIzOWJlOTk0MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDg6NDc6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuaW5kZXggMDMyNDFkNGJmZDVlOC4uNTJjY2E3YThmMTQxYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbkBAIC03MzAsMTQgKzczMCw5IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhO1xuIFxuLVx0aWYgKCFkZXYpIHtcbi1cdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRpZiAobmV0X2VxKG5mX2N0X25ldChmbG93LVx1MDAzZWN0KSwgZGV2X25ldChkZXYpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbMF0udHVwbGUuaWlmaWR4ID09IGRldi1cdTAwM2VpZmluZGV4IHx8XG4tXHQgICAgIGZsb3ctXHUwMDNldHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXHUwMDNlaWZpbmRleCkpXG4rXHRpZiAoIWRldiB8fFxuK1x0ICAgIGZsb3ctXHUwMDNldHVwbGVoYXNoWzBdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXHUwMDNlaWZpbmRleCB8fFxuK1x0ICAgIGZsb3ctXHUwMDNldHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXHUwMDNlaWZpbmRleClcbiBcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuIH1cbiBcbkBAIC03NTQsOCArNzQ5LDEwIEBAIHZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGU7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZmxvd3RhYmxlLCBcdTAwMjZmbG93dGFibGVzLCBsaXN0KVxuLVx0XHRuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoZmxvd3RhYmxlLCBkZXYpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShmbG93dGFibGUsIFx1MDAyNmZsb3d0YWJsZXMsIGxpc3QpIHtcbitcdFx0aWYgKG5ldF9lcShyZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldCksIGRldl9uZXQoZGV2KSkpXG4rXHRcdFx0bmZfZmxvd190YWJsZV9nY19jbGVhbnVwKGZsb3d0YWJsZSwgZGV2KTtcbitcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfY2xlYW51cCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODo0Nzo0NC4yMzUzMzQ1MjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzAwMDc1MzE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEV2YWx1YXRpb246IEEgUHJlbGltaW5hcnkgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSBhbmQgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgaXQgd2FycmFudHMgc29tZSB0aW1lIHdpdGggc3l6a2FsbGVyLiBGaXJzdCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJlcXVlc3QuIFJpZ2h0LCBpdCdzIGp1c3QgY29kZSByZXZpZXcgYW5kIGZ1enppbmcgZXZhbHVhdGlvbi4gTm90aGluZyBhYm91dCBleHBsb2l0IGRldmVsb3BtZW50IG9yIGNyZWF0aW5nIG1hbHdhcmUuIFNlZW1zIGxpa2UgdGhlIGludGVudCBpcyBwdXJlbHkgZGVmZW5zaXZlLCBwcm9iYWJseSBmb3IgUUEgb3IgYXBwbGljYXRpb24gbWFpbnRlbmFuY2UuIEdvb2QuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgZGlmZiBzaG93cyBjaGFuZ2VzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jYC4gSG1tLCBhIGNvbmRpdGlvbmFsIGNoZWNrIGlzIGJlaW5nIHNpbXBsaWZpZWQgaW4gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAuIFByZXZpb3VzbHkgdGhlcmUgd2FzIGEgY2hlY2sgdG8gc2VlIGlmIGBkZXZgIHdhcyBudWxsIG9yIGlmIHRoZSBuZXR3b3JrIG5hbWVzcGFjZXMgbWF0Y2hlZCBhbmQgdGhlIGludGVyZmFjZSBpbmRpY2VzIG1hdGNoZWQuIE5vdyBpdCBhcHBlYXJzIHRvIGNoZWNrIGBkZXZgIGlzIG51bGwgb3IgdGhhdCB0aGUgaW50ZXJmYWNlIGluZGV4IG1hdGNoZXMuIE9rYXksIHNvIHRoYXQncyBvbmUgY2hhbmdlLiBUaGUgb3RoZXIgY2hhbmdlIGlzIGluIGBuZl9mbG93X3RhYmxlX2NsZWFudXBgLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBhZGRzIGEgbmV0IG5hbWVzcGFjZSBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBvZiB0aGF0IGNoYW5nZSBtb3JlLiBJIGtub3cgdGhvc2UgZnVuY3Rpb25zLCBhbmQgd2hhdCB0aGV5J3JlIHN1cHBvc2VkIHRvIGJlIGRvaW5nLCBidXQgd2hhdOKAmXMgdGhlIHJhdGlvbmFsZSBmb3IgdGhpcyBjaGFuZ2U/IFxuXG5TbywgaXQncyBhIGNvZGUgc2ltcGxpZmljYXRpb24gYW5kIGEgbmFtZXNwYWNlIGNoZWNrIHJlbGF0ZWQgdG8gZmxvdyB0YWJsZSBjbGVhbnVwLiBNeSBndXQgcmVhY3Rpb24gaXMgdGhhdCB0aGVyZSdzIG5vdGhpbmcgaW1tZWRpYXRlbHkgKm9idmlvdXMqIHRoYXQgc2NyZWFtcyBcInZ1bG5lcmFiaWxpdHkgcmlwZSBmb3IgZnV6emluZy5cIiBIb3dldmVyLCBJJ20gbm90IGdvaW5nIHRvIHdyaXRlIGl0IG9mZiB0aGF0IGVhc2lseS4gR2l2ZW4gdGhlIG5hdHVyZSBvZiBuZXR3b3JraW5nIGNvZGUsIGFuZCB0aGUgdXNlIG9mIHRoZSBgbmZfZmxvd3RhYmxlYCBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggaXMgZGVmaW5pdGVseSBhIGhvdHNwb3QgZm9yIHBvdGVudGlhbCBidWdzLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGlzc3Vlcy4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgdGhhdCBuZXR3b3JrIG5hbWVzcGFjZSBjaGVjayBpcyBjb3JyZWN0bHkgaW1wbGVtZW50ZWQsIGFuZCB0aGF0IG5vIGxvZ2ljIGlzIG1pc3NlZC4gV2UgbmVlZCB0byBleHBsb3JlIHRoZSBjb2RlIGluIGRlcHRoLiBJJ20gZ29pbmcgdG8gcnVuIG15IHVzdWFsIGFuYWx5c2lzIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBJJ2xsIGNoZWNrIHJlbGF0ZWQgYEtjb25maWdgIG9wdGlvbnMsIHJlbGF0ZWQgY29kZSwgYW5kIGRhdGEgZmxvd3MgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLiBBZnRlciB0aGF0LCBJIGNhbiBtYWtlIGEgYmV0dGVyIGluZm9ybWVkIGRlY2lzaW9uIG9uIHdoZXRoZXIgdGhpcyBkZXNlcnZlcyBzeXprYWxsZXIncyBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODo0Nzo1Ny4yMzYwODk1ODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZmbG93dGFibGVfbG9jayk7XFxuIDcyMTpcXHRcXHRsaXN0X2FkZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VsaXN0LCBcXHUwMDI2Zmxvd3RhYmxlcyk7XFxuIDcyMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0XFx0cmV0dXJuIDA7XFxuIDcyNTpcXHR9XFxuIDcyNjpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2luaXQpO1xcbiA3Mjc6XFx0XFxuIDcyODpcXHRzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gNzI5OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSlcXG4gNzMwOlxcdHtcXG4gNzMxOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhO1xcbiA3MzI6XFx0XFxuIDczMzpcXHRcXHRpZiAoIWRldiB8fFxcbiA3MzQ6XFx0XFx0ICAgIGZsb3ctXFx1MDAzZXR1cGxlaGFzaFswXS50dXBsZS5paWZpZHggPT0gZGV2LVxcdTAwM2VpZmluZGV4IHx8XFxuIDczNTpcXHRcXHQgICAgZmxvdy1cXHUwMDNldHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXFx1MDAzZWlmaW5kZXgpXFxuIDczNjpcXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuIDczNzpcXHR9XFxuIDczODpcXHRcXG4gNzM5OlxcdHZvaWQgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4gNzQwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDc0MTpcXHR7XFxuIDc0MjpcXHRcXHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd3RhYmxlLCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAsIGRldik7XFxuIDc0MzpcXHRcXHRmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZ2Nfd29yayk7XFxuIDc0NDpcXHRcXHRuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goZmxvd3RhYmxlKTtcXG4gNzQ1OlxcdH1cXG4gNzQ2OlxcdFxcbiA3NDc6XFx0dm9pZCBuZl9mbG93X3RhYmxlX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gNzQ4OlxcdHtcXG4gNzQ5OlxcdFxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZTtcXG4gNzUwOlxcdFxcbiA3NTE6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xcbiA3NTI6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmbG93dGFibGUsIFxcdTAwMjZmbG93dGFibGVzLCBsaXN0KSB7XFxuIDc1MzpcXHRcXHRcXHRpZiAobmV0X2VxKHJlYWRfcG5ldChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VuZXQpLCBkZXZfbmV0KGRldikpKVxcbiA3NTQ6XFx0XFx0XFx0XFx0bmZfZmxvd190YWJsZV9nY19jbGVhbnVwKGZsb3d0YWJsZSwgZGV2KTtcXG4gNzU1OlxcdFxcdH1cXG4gNzU2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xcbiA3NTc6XFx0fVxcbiA3NTg6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTtcXG4gNzU5OlxcdFxcbiA3NjA6XFx0dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG4gNzYxOlxcdHtcXG4gNzYyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG4gNzYzOlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VsaXN0KTtcXG4gNzY0OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xcbiA3NjU6XFx0XFxuIDc2NjpcXHRcXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZWdjX3dvcmspO1xcbiA3Njc6XFx0XFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKGZsb3dfdGFibGUpO1xcbiA3Njg6XFx0XFx0LyogLi4uIG5vIG1vcmUgcGVuZGluZyB3b3JrIGFmdGVyIHRoaXMgc3RhZ2UgLi4uICovXFxuIDc2OTpcXHRcXHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDc6NTcuMjM2MTY2NjkzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgyNjc3NDEyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqS2NvbmZpZyBDaGVjayBmb3IgbmZfZmxvd190YWJsZV9jb3JlLmMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AgaXMgcHJvcGVybHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBGaXJzdCB0aGluZydzIGZpcnN0LCBJJ20gZGl2aW5nIGludG8gdGhlIEtjb25maWcgZmlsZXMuIE5lZWQgdG8gY2hlY2sgaXRzIHZpc2liaWxpdHksIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBlbnN1cmUgaXQncyBub3QgYWNjaWRlbnRhbGx5IG1hc2tlZCBieSBzb21lIGJyb2FkZXIgY29uZmlndXJhdGlvbiBvcHRpb24uIE1ha2Ugc3VyZSBpdCBidWlsZHMgYXMgZXhwZWN0ZWQsIGFuZCB0aGF0IGl0IGlzbid0IGNhdXNpbmcgYW55IGNvbmZsaWN0cy4gQW55IHVuZXhwZWN0ZWQgZGVwZW5kZW5jaWVzIGFyZSBhbiBvYnZpb3VzIHJlZCBmbGFnLiBHb3R0YSBtYWtlIHN1cmUgaXQncyBwbGF5aW5nIG5pY2Ugd2l0aCB0aGUgcmVzdCBvZiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgZXNwZWNpYWxseSBpZiB0aGVyZSBoYXZlIGJlZW4gcmVjZW50IHVwZGF0ZXMgdG8gdGhlIHN1cnJvdW5kaW5nIGNvbXBvbmVudHMuIE5vdGhpbmcncyBtb3JlIGZydXN0cmF0aW5nIHRoYW4gYSBidWlsZCBicmVhayBkdWUgdG8gYW4gb3ZlcnNpZ2h0IGluIHRoZSBjb25maWd1cmF0aW9uLiBHb3QgdG8gZW5zdXJlIGl0J3MgYnVpbGRhYmxlIG9uIGFsbCBwbGF0Zm9ybXMsIHRvby4gR290dGEgZG91YmxlIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjAzLjA2Mjk0MzI4NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njk4Nzg1NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9jb3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDI9b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFx0Kz0gbmZfZmxvd190YWJsZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXFx0XFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjAzLjYzMjg0NTMxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NjgyOTQxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTkZfRkxPV19UQUJMRSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYE5GX0ZMT1dfVEFCTEVgIHNpdHVhdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIEtjb25maWcuIFRoYXQncyB0aGUgZ28tdG8gcGxhY2UgZm9yIHZlcmlmeWluZyB3aGV0aGVyIHRoaXMgZmVhdHVyZSBpcyBldmVuICplbmFibGVkKiBpbiB0aGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHNlZSBpZiB0aGUgc3ltYm9sIGV4aXN0cywgd2hhdCBpdHMgZGVmYXVsdCBzdGF0ZSBpcywgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVW5kZXJzdGFuZGluZyBpdHMgS2NvbmZpZyBjb25maWd1cmF0aW9uIGlzIHRoZSBlc3NlbnRpYWwgZmlyc3Qgc3RlcCBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IGNvZGUuIEl0J2xsIHRlbGwgbWUgaWYgSSdtIGV2ZW4gZGVhbGluZyB3aXRoIGEgY29tcGlsZS10aW1lIGlzc3VlLCBvciBzb21ldGhpbmcgcnVudGltZSBiYXNlZC4gTGV0J3Mgc2VlIHdoYXQgS2NvbmZpZyBoYXMgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDg4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDg6MDUuNDAxMTQyNzYxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3OTU1MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAzPWNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDg6MDUuNDg5MTEwODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDMzNzcyNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgS2NvbmZpZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBza2lwIGFyb3VuZCB0aGUgaW5pdGlhbCBwYXJ0cyBhbmQgZm9jdXMgb24gbGluZXMgNzAwIHRvIDc0MCwgYmVjYXVzZSB0aGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGNodW5rIHRvIHN0YXJ0IHdpdGguIEhvcGVmdWxseSwgdGhhdCBzZWN0aW9uIHdpbGwgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgYSBzcGVjaWZpYyBzZXQgb2YgZmVhdHVyZXMgb3Igb3B0aW9ucy4gSSdtIGV4cGVjdGluZyB0aGlzIGFyZWEgdG8gcmVsYXRlIHRvIGEgc3BlY2lmaWMgYXNwZWN0IG9mIG5ldGZpbHRlciwgbWF5YmUgYSBtb2R1bGUgb3IgZnVuY3Rpb25hbGl0eSwgb3IgcGVyaGFwcyBhIGdyb3VwIG9mIHJlbGF0ZWQgZmVhdHVyZXMuIEknbSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHRzLCBhbmQgZGVmYXVsdCB2YWx1ZXMuIEknbGwgbWVudGFsbHkgbWFwIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIHZhcmlvdXMgb3B0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGZpdCB0b2dldGhlciBpbiB0aGUgbGFyZ2VyIE5ldGZpbHRlciBsYW5kc2NhcGUuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHJlZCBmbGFncywgYW55dGhpbmcgdGhhdCBzZWVtcyBzdHJhbmdlIG9yIG92ZXJseSBjb21wbGV4LCBhbmQgYW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBjbGFyaWZpY2F0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzc3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDg6MDcuNTIyODg2Mzg5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdFxcbiA3MDE6XFx0ZW5kaWYgIyBORl9UQUJMRVNcXG4gNzAyOlxcdFxcbiA3MDM6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbiA3MDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuIDcwNTpcXHRcXHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcXG4gNzA2OlxcdFxcdGhlbHBcXG4gNzA3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgc3VwcG9ydC5cXG4gNzA4OlxcdFxcbiA3MDk6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiA3MTA6XFx0XFxuIDcxMTpcXHRjb25maWcgTkZfRkxPV19UQUJMRVxcbiA3MTI6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4gNzEzOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0lOR1JFU1NcXG4gNzE0OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuIDcxNTpcXHRcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xcbiA3MTY6XFx0XFx0aGVscFxcbiA3MTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUuXFxuIDcxODpcXHRcXG4gNzE5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gNzIwOlxcdFxcbiA3MjE6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXFxuIDcyMjpcXHRcXHRib29sIFxcXCJTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1xcXCJcXG4gNzIzOlxcdFxcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxcbiA3MjQ6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuIDcyNTpcXHRcXHRoZWxwXFxuIDcyNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZm9yIHRoZSBmbG93IHRhYmxlIG9mZmxvYWQgc3RhdGlzdGljc1xcbiA3Mjc6XFx0XFx0ICB0byBiZSBzaG93biBpbiBwcm9jZnMgdW5kZXIgbmV0L25ldGZpbHRlci9uZl9mbG93dGFibGUuXFxuIDcyODpcXHRcXG4gNzI5OlxcdGNvbmZpZyBORVRGSUxURVJfWFRBQkxFU1xcbiA3MzA6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBYdGFibGVzIHN1cHBvcnQgKHJlcXVpcmVkIGZvciBpcF90YWJsZXMpXFxcIlxcbiA3MzE6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuIDczMjpcXHRcXHRoZWxwXFxuIDczMzpcXHRcXHQgIFRoaXMgaXMgcmVxdWlyZWQgaWYgeW91IGludGVuZCB0byB1c2UgYW55IG9mIGlwX3RhYmxlcyxcXG4gNzM0OlxcdFxcdCAgaXA2X3RhYmxlcyBvciBhcnBfdGFibGVzLlxcbiA3MzU6XFx0XFxuIDczNjpcXHRpZiBORVRGSUxURVJfWFRBQkxFU1xcbiA3Mzc6XFx0XFxuIDczODpcXHRjb25maWcgTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxuIDczOTpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgWHRhYmxlcyAzMmJpdCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODo0ODowNy41MjMxMjkxMDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgzMDM0MzMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBDYWxscyB0byBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBuZl9mbG93X3RhYmxlX2NsZWFudXBgLiBUbyBkbyB0aGF0LCBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biBpdHMgY2FsbCBzaXRlcy4gQSBxdWljayBncmVwIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgYSBxdWljayBzY2FuLCBvciBJIGNhbiB1c2UgY3Njb3BlIG9yIGN0YWdzIGlmIEkgd2FudCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBjcm9zcy1yZWZlcmVuY2UuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCdzIHRyaWdnZXJlZC4gSXMgdGhpcyBjYWxsZWQgc3luY2hyb25vdXNseSBpbiByZXNwb25zZSB0byBzb21lIGV2ZW50LCBvciBpcyBpdCBzY2hlZHVsZWQsIHBlcmhhcHMgYXMgYSBkZWZlcnJlZCB3b3JrIGl0ZW0/IElkZW50aWZ5aW5nIHRoZSBjYWxsaW5nIGNvbnRleHRzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgc2NlbmFyaW9zIHdoZXJlIHRoZXNlIGZsb3cgdGFibGUgZW50cmllcyBhcmUgYmVpbmcgY2xlYW5lZCB1cCBhbmQgd2hldGhlciB0aGV5J3JlIGJlaW5nIGNsZWFuZWQgdXAgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaGFzIGNsb3NlZCBvciBpcyBpZGxlIGZvciBhIHdoaWxlLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGxvdC4gQXJlIHRoZXJlIGFueSByZXNvdXJjZSBjb25zdHJhaW50cyBvciBlcnJvciBjb25kaXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlICp3aGVuKiBhbmQgKmhvdyogdGhpcyBjbGVhbnVwIGhhcHBlbnM/IEkgd2lsbCBjaGVjayBmb3IgYW55IG11dGV4ZXMgb3IgbG9ja3MgYmVpbmcgaGVsZCBkdXJpbmcgdGhlIGNhbGwsIGFzIHRoYXQgY2FuIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhlIGNvbmN1cnJlbmN5IG1vZGVsIGFuZCBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcDogdW5kZXJzdGFuZCB0aGUgY2FsbGVyJ3MgcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MzMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjEzLjM1MzQ3NTk5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4NzYwOTM5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlX2NsZWFudXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zMjQ9dm9pZCBuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzI1LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzI2OnZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzI3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03Mzk9dm9pZCBuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NDYtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NDc6dm9pZCBuZl9mbG93X3RhYmxlX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc0OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc1Ny19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NTg6RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc1OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTIzOD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjQ1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjI0NjpcXHRuZl9mbG93X3RhYmxlX2NsZWFudXAoZGV2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yNDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjE1LjY0MTA5MjU4OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjU4NjMyNTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYW5kIHVzYWdlIG9mIHRoaXMgYG5mdF9mbG93X29mZmxvYWQuY2AgZmlsZS4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHBhdGhzIGFuZCBhbmFseXplIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgY29udGV4dC4gTGV0J3Mgc2VlIGhvdyBpdCdzIGJlaW5nIGludm9rZWQsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgdGhlIG92ZXJhbGwgcm9sZSBpdCBwbGF5cyBpbiB0aGUgb2ZmbG9hZCBtZWNoYW5pc20uIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgY29udGV4dHMgd2hlcmUgaXQncyBiZWluZyBsZXZlcmFnZWQsIGFuZCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgbWlnaHQgYmUgb24gb3RoZXIga2VybmVsIG1vZHVsZXMgb3Igc3Vic3lzdGVtcy4gSG9wZWZ1bGx5LCB0aGUgY29kZSBjb21tZW50cyBhcmUgZ29vZCwgYnV0IEknbSBwcmVwYXJlZCB0byBkaWcgdGhyb3VnaCB0aGUgbG9naWMgaWYgbmVjZXNzYXJ5IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGl0cyBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzcyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDg6MjguMjI3NDI0NTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzNTpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAyMzY6XFx0fTtcXG4gMjM3OlxcdFxcbiAyMzg6XFx0c3RhdGljIGludCBmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG4gMjM5OlxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbiAyNDA6XFx0e1xcbiAyNDE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbiAyNDI6XFx0XFxuIDI0MzpcXHRcXHRpZiAoZXZlbnQgIT0gTkVUREVWX0RPV04pXFxuIDI0NDpcXHRcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdG5mX2Zsb3dfdGFibGVfY2xlYW51cChkZXYpO1xcbiAyNDc6XFx0XFxuIDI0ODpcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIDI0OTpcXHR9XFxuIDI1MDpcXHRcXG4gMjUxOlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZmxvd19vZmZsb2FkX25ldGRldl9ub3RpZmllciA9IHtcXG4gMjUyOlxcdFxcdC5ub3RpZmllcl9jYWxsXFx0PSBmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50LFxcbiAyNTM6XFx0fTtcXG4gMjU0OlxcdFxcbiAyNTU6XFx0c3RhdGljIGludCBfX2luaXQgbmZ0X2Zsb3dfb2ZmbG9hZF9tb2R1bGVfaW5pdCh2b2lkKVxcbiAyNTY6XFx0e1xcbiAyNTc6XFx0XFx0aW50IGVycjtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZmbG93X29mZmxvYWRfbmV0ZGV2X25vdGlmaWVyKTtcXG4gMjYwOlxcdFxcdGlmIChlcnIpXFxuIDI2MTpcXHRcXHRcXHRnb3RvIGVycjtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0ZXJyID0gbmZ0X3JlZ2lzdGVyX2V4cHIoXFx1MDAyNm5mdF9mbG93X29mZmxvYWRfdHlwZSk7XFxuIDI2NDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gMjY1OlxcdFxcdFxcdGdvdG8gcmVnaXN0ZXJfZXhwcjtcXG4gMjY2OlxcdFxcbiAyNjc6XFx0XFx0cmV0dXJuIDA7XFxuIDI2ODpcXHRcXG4gMjY5OlxcdHJlZ2lzdGVyX2V4cHI6XFxuIDI3MDpcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2Zmxvd19vZmZsb2FkX25ldGRldl9ub3RpZmllcik7XFxuIDI3MTpcXHRlcnI6XFxuIDI3MjpcXHRcXHRyZXR1cm4gZXJyO1xcbiAyNzM6XFx0fVxcbiAyNzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjI4LjIyNzU4NTAxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NDU1OTQwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgRmxvdyBUYWJsZSBDbGVhbnVwIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBmbG93IHRhYmxlIGNsZWFudXAgcHJvY2VzcyBoYW5kbGVzIGEgYE5FVERFVl9ET1dOYCBldmVudC4gUHJldmlvdXNseSwgdGhlIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAsIGluY2x1ZGVkIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIGZsb3cncyBjb25udHJhY2sgbmV0bnMgbWF0Y2hlZCB0aGUgZGV2aWNlJ3MgbmV0bnMgKmFuZCogdGhhdCB0aGUgaW50ZXJmYWNlIGluZGV4IG1hdGNoZWQuIFRoaXMgd2FzIGFjaGlldmVkIHZpYSBjaGVja2luZyBgZGV2X25ldChkZXYpYCBhbmQgdGhlIGBpaWZpZHhgLlxuXG5Ob3csIGl0IHNlZW1zIHRoaXMgbmV0bnMgY2hlY2sgaGFzIGJlZW4gbW92ZWQuIEluc3RlYWQgb2YgY2hlY2tpbmcgdGhpcyBvbiBhIHBlci1mbG93IGJhc2lzIHdpdGhpbiBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwYCwgdGhlIGNvZGUsIGluIGBuZl9mbG93X3RhYmxlX2NsZWFudXBgLCBub3cgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZmxvdyB0YWJsZXMgYW5kIGZpbHRlcnMgdGhlbSBiYXNlZCBvbiB0aGUgbmV0bnMgb2YgdGhlIGZsb3d0YWJsZSBpdHNlbGYgdXNpbmcgYGZsb3d0YWJsZS1cdTAwM2VuZXRgIGFuZCBgZGV2X25ldChkZXYpYC4gVGhlbiwgd2l0aGluIGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXBgLCB0aGUgY29kZSBub3cgb25seSBjaGVja3MgZm9yIHRoZSBpbnRlcmZhY2UgaW5kZXggbWF0Y2ggYWdhaW5zdCB0aGUgYGRldmAgdmlhIGBpaWZpZHhgLiBFc3NlbnRpYWxseSwgdGhlIG5ldG5zIGNoZWNrIGhhcyBiZWVuIGxpZnRlZCBvdXQgb2YgdGhlIHBlci1mbG93IGNsZWFudXAgYW5kIGludG8gdGhlIGZsb3d0YWJsZSBsb29rdXAgaXRzZWxmLlxuXG5JcyB0aGlzIHBhdGggcmVhY2hhYmxlPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIGNvZGUuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCwgcGFydHMgb2YgdGhlIG5ldGZpbHRlci9uZnRhYmxlcyBmbG93IHRhYmxlIGluZnJhc3RydWN0dXJlLiBUaGlzIHdob2xlIHN5c3RlbSBpcyByZWFkaWx5IGFjY2Vzc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0cmlnZ2VyZWQgYnkgc3RhbmRhcmQgbmV0bGluay9uZnRhYmxlcyBjb21tYW5kcyBvciBkZXZpY2UgZG93biBldmVudHMgKGUuZy4sIGBpcCBsaW5rIHNldCBkb3duYCwgZGVsZXRpbmcgZGV2aWNlcyBsaWtlIHR1bi90YXAvdmV0aC9kdW1teS9tYWN2bGFuLCBuZXRucyB0ZWFyZG93biwgYW5kIHNvIG9uKS4gVGhlIGtleSBoZXJlIGlzIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBXZSdsbCBuZWVkIGBORl9GTE9XX1RBQkxFYCwgbGlrZWx5IGBORl9UQUJMRVNgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORl9DT05OVFJBQ0tgLCBgTkVURklMVEVSX0lOR1JFU1NgIChhdCBsZWFzdCkuIExldCBtZSBwdWxsIHVwIEtjb25maWcgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYXJvdW5kIGBORlRfRkxPV19PRkZMT0FEYCBhbmQgdGhlIHJlc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODo0ODozMy42NzMxODIyNjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MjY0MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDk4PWNvbmZpZyBORlRfRVhUSERSX0RDQ1BcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwNDpjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMTI9b2JqLSQoQ09ORklHX05GVF9DVClcXHRcXHQrPSBuZnRfY3Qub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTEzOm9iai0kKENPTkZJR19ORlRfRkxPV19PRkZMT0FEKVxcdCs9IG5mdF9mbG93X29mZmxvYWQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTE0LW9iai0kKENPTkZJR19ORlRfTElNSVQpXFx0XFx0Kz0gbmZ0X2xpbWl0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDg6MzMuNzUwNDUxMzA3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MzQwNDg3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgTkZUX0ZMT1dfT0ZGTE9BRGAgaW4gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGhhbmRsZWQuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgS2NvbmZpZ2AgYW5kIGNoZWNraW5nIHRoZSBkZWZpbml0aW9uIG9mIGBORlRfRkxPV19PRkZMT0FEYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFdoYXQgb3RoZXIgbmV0d29ya2luZy1yZWxhdGVkIGZlYXR1cmVzIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCwgb3IgcmVseSBvbj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0cyBwcmVzZW5jZSBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGN1cnJlbnQgcGVyZm9ybWFuY2UgZ29hbHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIFBlcmhhcHMgSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgY2F2ZWF0cyBpbiB0aGUgcmVsZXZhbnQgY29tbWl0IGxvZ3MuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBhcmVhIGZvciBvcHRpbWl6YXRpb24sIG9yIG1heWJlIGl0J3MgdGhlIHJvb3Qgb2Ygc29tZSBpc3N1ZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgYWRkcmVzcy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzA3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDg6MzUuNjg0NTAzMjk4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcdGRlZmF1bHQgblxcbiA1MDE6XFx0XFx0aGVscFxcbiA1MDI6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIG1hdGNoaW5nIG9uIERDQ1AgZXh0ZW5zaW9uIGhlYWRlcnMuXFxuIDUwMzpcXHRcXG4gNTA0OlxcdGNvbmZpZyBORlRfRkxPV19PRkZMT0FEXFxuIDUwNTpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuIDUwNjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBoYXJkd2FyZSBmbG93IG9mZmxvYWQgbW9kdWxlXFxcIlxcbiA1MDc6XFx0XFx0aGVscFxcbiA1MDg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcXFwiZmxvd19vZmZsb2FkXFxcIiBleHByZXNzaW9uIHRoYXQgeW91IGNhbiB1c2UgdG9cXG4gNTA5OlxcdFxcdCAgY2hvb3NlIHdoYXQgZmxvd3MgYXJlIHBsYWNlZCBpbnRvIHRoZSBoYXJkd2FyZS5cXG4gNTEwOlxcdFxcbiA1MTE6XFx0Y29uZmlnIE5GVF9DT05OTElNSVRcXG4gNTEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm5saW1pdCBtb2R1bGVcXFwiXFxuIDUxMzpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA1MTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gNTE1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfQ09OTkNPVU5UXFxuIDUxNjpcXHRcXHRoZWxwXFxuIDUxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFxcXCJjb25ubGltaXRcXFwiIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xcbiA1MTg6XFx0XFx0ICByYXRlbGltaXQgcnVsZSBtYXRjaGluZ3MgcGVyIGNvbm5lY3Rpb25zLlxcbiA1MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjM1LjY4NDY4NDA2OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDYwMDU3MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZsb3cgVGFibGUgRGVwZW5kZW5jaWVzIGFuZCBDbGVhbnVwIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBgTkZfRkxPV19UQUJMRWAgZGVwZW5kZW5jaWVzLiBSaWdodCwgaXQgcmVsaWVzIG9uIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIEFuZCwgc2luY2Ugd2UncmUgaGVyZSwgYE5GVF9GTE9XX09GRkxPQURgIGlzIGRlcGVuZGVudCBvbiBib3RoIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfRkxPV19UQUJMRWAuIEdvb2QgdG8gaGF2ZSB0aG9zZSByZWxhdGlvbnNoaXBzIGNsZWFyIGluIG15IGhlYWQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcy4gU28sIEkgbmVlZCB0byBjaGVjayB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLiBJIHNlZSBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwYCwgYG5mX2Zsb3dfdGFibGVfY2xlYW51cGAsIGFuZC4uLm9oLCBhbHNvIGBuZl9mbG93X3RhYmxlX2djX2NsZWFudXBgLCBgZmxvd19vZmZsb2FkX3RlYXJkb3duYCwgYW5kIGBmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50YCBhcmUgYmVpbmcgdG91Y2hlZC4gR290IGl0LiBUaGF0IGhlbHBzIG1lIHNjb3BlIHRoZSBhcmVhIHRoYXQgSSBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gSXQncyBjcnVjaWFsIHRoYXQgSSB2ZXJpZnkgaWYgYW55dGhpbmcgZWxzZSBjYWxscywgb3IgcmVsaWVzIG9uLCBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCBvciBgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwYC4gSSBjYW4ndCBhZmZvcmQgdG8gbWlzcyBhbnkgc3VidGxlLCBpbmRpcmVjdCBjb25uZWN0aW9ucy4gVGhhdCdzIGEga2V5IHBhcnQgb2YgbXkgZHVlIGRpbGlnZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg0NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjM4LjE0NDc0NDEzMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyOTQ1NTU1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlX2djX2NsZWFudXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zMjM9dm9pZCBuZl9mbG93X3RhYmxlX2djX3J1bihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjMyNDp2b2lkIG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMjUtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcyOD1zdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzM4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzM5OnZvaWQgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc0MC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03NDc9dm9pZCBuZl9mbG93X3RhYmxlX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzUzLVxcdFxcdGlmIChuZXRfZXEocmVhZF9wbmV0KFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZW5ldCksIGRldl9uZXQoZGV2KSkpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NTQ6XFx0XFx0XFx0bmZfZmxvd190YWJsZV9nY19jbGVhbnVwKGZsb3d0YWJsZSwgZGV2KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc1NS1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyMjU9c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9pbmRyX2NsZWFudXAoc3RydWN0IGZsb3dfYmxvY2tfY2IgKmJsb2NrX2NiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjI5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTIzMDpcXHRuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoZmxvd3RhYmxlLCBkZXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTIzMS1cXHRkb3duX3dyaXRlKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWZsb3dfYmxvY2tfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjQwLjQ3NDIwNTQwN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjAzMTg2MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE5ldGZpbHRlciBGbG93IFRhYmxlIENsZWFudXAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBjbGVhbnVwIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIGBuZl9mbG93X3RhYmxlX2luZHJfY2xlYW51cGAuIEkgc2VlIHRoYXQgYG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldilgIGlzIGFsc28gY2FsbGVkIGZyb20gYG5mX2Zsb3dfdGFibGVfaW5kcl9jbGVhbnVwYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgbmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3d0YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBkZXYpYC4gVGhlIGtleSBvYnNlcnZhdGlvbiBoZXJlIGlzIHRoYXQgYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAgKm5vdyogYXZvaWRzIGNoZWNraW5nIGBuZXRfZXEobmZfY3RfbmV0KGZsb3ctXHUwMDNlY3QpLCBkZXZfbmV0KGRldikpYCBhbmQgaW5zdGVhZCBsZXZlcmFnZXMgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgYGZsb3d0YWJsZWAgYW5kIGBkZXZgIGFyZSB3aXRoaW4gdGhlIHNhbWUgbmV0d29yayBuYW1lc3BhY2Ugb3IgdGhhdCBkZXZpY2UgaW5kZXggbWF0Y2hpbmcgd2l0aGluIHRoZSBmbG93dGFibGUgaXMgZW5vdWdoLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBcIldvcnRoRnV6emluZ1wiIGNyaXRlcmlhLiBHaXZlbiB0aGUgY2hhbmdlcywgdGhlIHBhdGNoICpkb2VzKiBhbHRlciB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY2xlYW51cCBsb2dpYywgc3BlY2lmaWNhbGx5IGJ5IG9wdGltaXppbmcgdGhlIG5ldCBuYW1lc3BhY2UgZmlsdGVyaW5nIGF0IHRoZSBmbG93dGFibGUgbGlzdCBpdGVyYXRpb24gbGV2ZWwgYW5kIHNpbXBsaWZ5aW5nIGRldmljZSBtYXRjaGluZy4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZywgYW5kIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCB0aGUgdXN1YWwgbmV0d29yayBzb2NrZXQsIG5ldGxpbmssIGFuZCBuZnRhYmxlcyBpbnRlcmZhY2VzIGFjY2Vzc2libGUgaW4gc29tZXRoaW5nIGxpa2UgUUVNVSBvciBzeXprYWxsZXIuXG5cblRoZXJlZm9yZSwgXCJXb3J0aEZ1enppbmdcIiBpcyAqdHJ1ZSouXG5cbkknbGwgc2V0IHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXMgbmVlZGVkOlxuXG4qICAgYE5GX0ZMT1dfVEFCTEVgXG4qICAgYE5GX1RBQkxFU2BcbiogICBgTkZfQ09OTlRSQUNLYFxuKiAgIGBORVRGSUxURVJfSU5HUkVTU2BcbiogICBgTkZUX0ZMT1dfT0ZGTE9BRGBcblxuQW5kIHRoZSBmb2N1cyBzeW1ib2xzIGFyZTpcblxuKiAgIGBuZl9mbG93X3RhYmxlX2NsZWFudXBgXG4qICAgYG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cGBcbiogICBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwYFxuKiAgIGBmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50YFxuKiAgIGBuZl9mbG93X3RhYmxlX2ZyZWVgXG5cbkknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgZm9yIG90aGVyIHJlbGF0ZWQgc3ltYm9scyBvciBjb25maWdzLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgTkZUX0ZMT1dfT0ZGTE9BRGAgaXMgc3RyaWN0bHkgbmVjZXNzYXJ5LCBvciBpZiBgTkZfRkxPV19UQUJMRWAgYnkgaXRzZWxmIGlzIGVub3VnaC4gSSdsbCB0YWtlIGEgbG9vayBhdCBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDg6NDYuMDc3Mzk1MDAzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDY4OTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkZfRkxPV19UQUJMRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTM5PW9iai0kKENPTkZJR19ORlRfRldEX05FVERFVilcXHQrPSBuZnRfZndkX25ldGRldi5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0MS0jIGZsb3cgdGFibGUgaW5mcmFzdHJ1Y3R1cmVcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0MjpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRSlcXHQrPSBuZl9mbG93X3RhYmxlLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0My1uZl9mbG93X3RhYmxlLW9ianNcXHRcXHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcXFxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDUtXFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9vZmZsb2FkLm8gbmZfZmxvd190YWJsZV94ZHAub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ2Om5mX2Zsb3dfdGFibGUtJChDT05GSUdfTkZfRkxPV19UQUJMRV9QUk9DRlMpICs9IG5mX2Zsb3dfdGFibGVfcHJvY2ZzLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NzppZmVxICgkKENPTkZJR19ORl9GTE9XX1RBQkxFKSxtKVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ4LW5mX2Zsb3dfdGFibGUtJChDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUykgKz0gbmZfZmxvd190YWJsZV9icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ5OmVsc2UgaWZlcSAoJChDT05GSUdfTkZfRkxPV19UQUJMRSkseSlcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1MC1uZl9mbG93X3RhYmxlLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSBuZl9mbG93X3RhYmxlX2JwZi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNTE9ZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1Mi1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSArPSBuZl9mbG93X3RhYmxlX2luZXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9MTYyND12b2lkIG5mX2Nvbm50cmFja190Y3BfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTY1Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxNjU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTE2NTgtXFx0dG4tXFx1MDAzZW9mZmxvYWRfdGltZW91dCA9IDMwICogSFo7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYz0xOTU9dm9pZCBuZl9jb25udHJhY2tfdWRwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTIwMi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYzoyMDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMtMjA0LVxcdHVuLVxcdTAwM2VvZmZsb2FkX3RpbWVvdXQgPSAzMCAqIEhaO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTU4NT1lbnVtIG5mX2N0X3N5c2N0bF9pbmRleCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjA5LVxcdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9VTkFDSyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NjEwOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02MTEtXFx0TkZfU1lTQ1RMX0NUX1BST1RPX1RJTUVPVVRfVENQX09GRkxPQUQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjE4LVxcdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9TVFJFQU0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjYxOTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjIwLVxcdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9PRkZMT0FELFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTY0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy03ODYtXFx0fSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6Nzg3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy03ODgtXFx0W05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9PRkZMT0FEXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy04MzYtXFx0fSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6ODM3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy04MzgtXFx0W05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9PRkZMT0FEXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz05MzU9c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF90Y3Bfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05NjMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjk2NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtOTY1LVxcdHRhYmxlW05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9PRkZMT0FEXS5kYXRhID0gXFx1MDAyNnRuLVxcdTAwM2VvZmZsb2FkX3RpbWVvdXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9MTAwMz1zdGF0aWMgaW50IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDMwLVxcdHRhYmxlW05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9TVFJFQU1dLmRhdGEgPSBcXHUwMDI2dW4tXFx1MDAzZXRpbWVvdXRzW1VEUF9DVF9SRVBMSUVEXTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTAzMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTAzMi1cXHR0YWJsZVtORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9VRFBfT0ZGTE9BRF0uZGF0YSA9IFxcdTAwMjZ1bi1cXHUwMDNlb2ZmbG9hZF90aW1lb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODo0ODo0Ni4xNTIwODk0NDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg3NDA2MjQzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHlvdXIgc3VtbWFyeTpcblxuKipUaGUgUGF0aCBGb3J3YXJkIGlzIERlZmluZWQqKlxuXG5Pa2F5LCB0aGUgcGF0aCBmb3J3YXJkIGlzIHBlcmZlY3RseSBjbGVhciwgYW5kIEkndmUgdmVyaWZpZWQgZXZlcnkgYXNwZWN0IG9mIHRoZSBzaXR1YXRpb24uIFRoZXJlIGFyZSBubyByZW1haW5pbmcgdW5jZXJ0YWludGllcyBvciBsb29zZSBlbmRzLiBCYXNlZCBvbiBteSBhc3Nlc3NtZW50LCBJIGNhbiBjb25maWRlbnRseSBkZWNsYXJlIHRoZSBuZXh0IGFjdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBpbml0aWF0ZSB0aGUgZnVuY3Rpb24sIG9yIHByb2Nlc3MsIHdoaWNoIEkgd2lsbCBkZXNpZ25hdGUgYHNldC1yZXN1bHRzYC4gV2l0aCB0aGF0LCB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbSB3aWxsIGJlIHJlc29sdmVkIGFuZCBldmVyeXRoaW5nIGlzIHNldCBpbiBtb3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzk3LCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjQ5LjAyNjE1MzkyOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzk3MzQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd190YWJsZV9jbGVhbnVwXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2djX2NsZWFudXBcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cFwiLFxuICAgIFwiZmxvd19vZmZsb2FkX25ldGRldl9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjbGVhbnVwIHBhdGggaW4gbmZfZmxvd190YWJsZV9jb3JlLmMgYnkgbW92aW5nIG5ldHdvcmsgbmFtZXNwYWNlIG1hdGNoaW5nIHRvIHRoZSBvdXRlciBmbG93dGFibGUgaXRlcmF0aW9uIGluIG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpIGFuZCBhZGp1c3RpbmcgcGVyLWZsb3cgZGV2aWNlIHRlYXJkb3duIGNvbmRpdGlvbnMgaW4gbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKCkuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGV4ZWN1dGVkIGR1cmluZyBuZXR3b3JrIGRldmljZSB0ZWFyZG93bi9ORVRERVZfRE9XTiBldmVudHMgd2l0aCBhY3RpdmUgbmZ0YWJsZXMgZmxvdyB0YWJsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd190YWJsZV9jbGVhbnVwXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2djX2NsZWFudXBcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cFwiLFxuICAgIFwiZmxvd19vZmZsb2FkX25ldGRldl9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjbGVhbnVwIHBhdGggaW4gbmZfZmxvd190YWJsZV9jb3JlLmMgYnkgbW92aW5nIG5ldHdvcmsgbmFtZXNwYWNlIG1hdGNoaW5nIHRvIHRoZSBvdXRlciBmbG93dGFibGUgaXRlcmF0aW9uIGluIG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpIGFuZCBhZGp1c3RpbmcgcGVyLWZsb3cgZGV2aWNlIHRlYXJkb3duIGNvbmRpdGlvbnMgaW4gbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKCkuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGV4ZWN1dGVkIGR1cmluZyBuZXR3b3JrIGRldmljZSB0ZWFyZG93bi9ORVRERVZfRE9XTiBldmVudHMgd2l0aCBhY3RpdmUgbmZ0YWJsZXMgZmxvdyB0YWJsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjQ5LjE1MDEzNjU1N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0OTY1NjkzODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODo0ODo0OS4xNTA3NjAxODdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTQ5NTk0MDc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIG5ldHdvcmsgbmFtZXNwYWNlIGNoZWNraW5nIGR1cmluZyBuZXRkZXZpY2UgY2xlYW51cCBpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBzdWJzeXN0ZW0uIEl0IHNoaWZ0cyB0aGUgbmFtZXNwYWNlIG1hdGNoIGNoZWNrIGBuZXRfZXEocmVhZF9wbmV0KFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZW5ldCksIGRldl9uZXQoZGV2KSlgIHVwIHRvIGBuZl9mbG93X3RhYmxlX2NsZWFudXAoKWAgd2hlbiBpdGVyYXRpbmcgb3ZlciByZWdpc3RlcmVkIGZsb3d0YWJsZXMsIGFuZCByZW1vdmVzIHRoZSBwZXItZmxvdyBgbmV0X2VxKG5mX2N0X25ldChmbG93LVxcdTAwM2VjdCksIGRldl9uZXQoZGV2KSlgIGNoZWNrIGZyb20gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCgpYC5cXG5cXG5UaGlzIGNoYW5nZTpcXG4xLiBEb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBuZXcgc3RhY2svaGVhcCBtZW1vcnkgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxcbjIuIERvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSBvciBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuXFxuMy4gRG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbHRlciBidWZmZXIgYm91bmRzL2xlbmd0aHMuXFxuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8gb2JqZWN0IGxpZmV0aW1lcywgZGV2aWNlIGRlcmVmZXJlbmNlcywgb3IgbGlzdCBvcGVyYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOIC8gTE9DS0RFUCkuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZmIzMTZjMGFjYTE0MDYyZTk3NWE1MmI4Yzg5ZGRkYjM5YmU5OTQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwODo0Nzo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5pbmRleCAwMzI0MWQ0YmZkNWU4Li41MmNjYTdhOGYxNDFiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuQEAgLTczMCwxNCArNzMwLDkgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRhdGE7XG4gXG4tXHRpZiAoIWRldikge1xuLVx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdGlmIChuZXRfZXEobmZfY3RfbmV0KGZsb3ctXHUwMDNlY3QpLCBkZXZfbmV0KGRldikpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChmbG93LVx1MDAzZXR1cGxlaGFzaFswXS50dXBsZS5paWZpZHggPT0gZGV2LVx1MDAzZWlmaW5kZXggfHxcbi1cdCAgICAgZmxvdy1cdTAwM2V0dXBsZWhhc2hbMV0udHVwbGUuaWlmaWR4ID09IGRldi1cdTAwM2VpZmluZGV4KSlcbitcdGlmICghZGV2IHx8XG4rXHQgICAgZmxvdy1cdTAwM2V0dXBsZWhhc2hbMF0udHVwbGUuaWlmaWR4ID09IGRldi1cdTAwM2VpZmluZGV4IHx8XG4rXHQgICAgZmxvdy1cdTAwM2V0dXBsZWhhc2hbMV0udHVwbGUuaWlmaWR4ID09IGRldi1cdTAwM2VpZmluZGV4KVxuIFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4gfVxuIFxuQEAgLTc1NCw4ICs3NDksMTAgQEAgdm9pZCBuZl9mbG93X3RhYmxlX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShmbG93dGFibGUsIFx1MDAyNmZsb3d0YWJsZXMsIGxpc3QpXG4tXHRcdG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldik7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3d0YWJsZSwgXHUwMDI2Zmxvd3RhYmxlcywgbGlzdCkge1xuK1x0XHRpZiAobmV0X2VxKHJlYWRfcG5ldChcdTAwMjZmbG93dGFibGUtXHUwMDNlbmV0KSwgZGV2X25ldChkZXYpKSlcbitcdFx0XHRuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoZmxvd3RhYmxlLCBkZXYpO1xuK1x0fVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjQ5LjE1MDc2MTgyN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjA1MTM0NTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBGdXp6aW5nIFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gVGhlIHVzZXIgd2FudHMgbWUgdG8gYXNzZXNzIGEga2VybmVsIHBhdGNoIGFuZCBkZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRvIGJyaW5nIEtNU0FOIGludG8gdGhlIGZ1enppbmcgbWl4LCBvciBpZiBLQVNBTiBpcyBzdWZmaWNpZW50LiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGNvZGUgcmV2aWV3IHRhc2sgZm9yIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MsIGl0IGxvb2tzIGxpa2UgYSBiZW5pZ24gZGVmZW5zaXZlIGFjdGlvbi4gR29vZCwgc2FmZSB0byBwcm9jZWVkIHdpdGggdGhlIGV2YWx1YXRpb24uXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gVGhlIGRpZmYgaXMgcHJldHR5IHNtYWxsLCB0aGFua2Z1bGx5LiBJdCdzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jYC4gSG1tLCBsb29rcyBsaWtlIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgaXMgYmVpbmcgc2ltcGxpZmllZCBpbiBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwYC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgY2hlY2sgZm9yIGAhZGV2YCBhbmQgdGhlbiBhbm90aGVyIGNoZWNrLiBUaGUgcGF0Y2ggYXBwZWFycyB0byBiZSBtZXJnaW5nIHRoZSBjb25kaXRpb25zLiBJdCAqc2VlbXMqIGxpa2UgdGhpcyBpcyBqdXN0IHNpbXBsaWZ5aW5nIHRoZSBjb2RlLCBtYWtpbmcgdGhlIGxvZ2ljIGEgYml0IG1vcmUgY29uY2lzZS4gSSBzZWUgYGZsb3dfb2ZmbG9hZF90ZWFyZG93bmAgYmVpbmcgY2FsbGVkIGNvbmRpdGlvbmFsbHkgYmFzZWQgb24gdGhlIGBkZXZgIHBhcmFtZXRlciBhbmQgc29tZSBjaGVja3MgcmVsYXRlZCB0byBgaWlmaWR4YCBhbmQgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIChgbmV0X2VxYCkuIFRoZSBzZWNvbmQgY2hhbmdlIGludm9sdmVzIGEgY2hlY2sgZm9yIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBlcXVhbGl0eSBvZiB0aGUgYGZsb3d0YWJsZWAuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgcmlza3MgYW5kIHdoZXRoZXIgS01TQU4gaXMgbmVlZGVkLCBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gb2YgYG5mX2Zsb3dfdGFibGVfY29yZS5jYCBhbmQgaG93IGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXBgIGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbSwgYW5kIGhvdyB0aGUgY2hhbmdlcyBtYXkgaW50ZXJhY3Qgd2l0aCBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkuIEknbGwgbmVlZCB0byB1c2UgbXkgZ3JlcHBpbmcgc2tpbGxzLCBvciBwdWxsIHVwIHRoZSBmaWxlJ3MgY29udGV4dCwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZWZmZWN0cyBvZiB0aGVzZSBjaGFuZ2VzLiBJbiB0aGUgbWVhbnRpbWUsIGJhc2VkIG9uIHRoZSBwYXRjaCdzIGltbWVkaWF0ZSBjb250ZW50LCBpdCBkb2Vzbid0IGltbWVkaWF0ZWx5IHNjcmVhbSBcIktNU0FOIG5lZWRlZCxcIiBidXQgYSBtb3JlIHRob3JvdWdoIGFuYWx5c2lzIGlzIGFsd2F5cyBpbiBvcmRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ5OjAxLjIwMjExMjg2NloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MjA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xcbiA3MjE6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlbGlzdCwgXFx1MDAyNmZsb3d0YWJsZXMpO1xcbiA3MjI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmbG93dGFibGVfbG9jayk7XFxuIDcyMzpcXHRcXG4gNzI0OlxcdFxcdHJldHVybiAwO1xcbiA3MjU6XFx0fVxcbiA3MjY6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9pbml0KTtcXG4gNzI3OlxcdFxcbiA3Mjg6XFx0c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuIDcyOTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXFxuIDczMDpcXHR7XFxuIDczMTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGF0YTtcXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0aWYgKCFkZXYgfHxcXG4gNzM0OlxcdFxcdCAgICBmbG93LVxcdTAwM2V0dXBsZWhhc2hbMF0udHVwbGUuaWlmaWR4ID09IGRldi1cXHUwMDNlaWZpbmRleCB8fFxcbiA3MzU6XFx0XFx0ICAgIGZsb3ctXFx1MDAzZXR1cGxlaGFzaFsxXS50dXBsZS5paWZpZHggPT0gZGV2LVxcdTAwM2VpZmluZGV4KVxcbiA3MzY6XFx0XFx0XFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xcbiA3Mzc6XFx0fVxcbiA3Mzg6XFx0XFxuIDczOTpcXHR2b2lkIG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuIDc0MDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA3NDE6XFx0e1xcbiA3NDI6XFx0XFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3d0YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBkZXYpO1xcbiA3NDM6XFx0XFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWdjX3dvcmspO1xcbiA3NDQ6XFx0XFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKGZsb3d0YWJsZSk7XFxuIDc0NTpcXHR9XFxuIDc0NjpcXHRcXG4gNzQ3OlxcdHZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDc0ODpcXHR7XFxuIDc0OTpcXHRcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGU7XFxuIDc1MDpcXHRcXG4gNzUxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG4gNzUyOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZmxvd3RhYmxlLCBcXHUwMDI2Zmxvd3RhYmxlcywgbGlzdCkge1xcbiA3NTM6XFx0XFx0XFx0aWYgKG5ldF9lcShyZWFkX3BuZXQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlbmV0KSwgZGV2X25ldChkZXYpKSlcXG4gNzU0OlxcdFxcdFxcdFxcdG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldik7XFxuIDc1NTpcXHRcXHR9XFxuIDc1NjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG4gNzU3OlxcdH1cXG4gNzU4OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfY2xlYW51cCk7XFxuIDc1OTpcXHRcXG4gNzYwOlxcdHZvaWQgbmZfZmxvd190YWJsZV9mcmVlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXFxuIDc2MTpcXHR7XFxuIDc2MjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZmbG93dGFibGVfbG9jayk7XFxuIDc2MzpcXHRcXHRsaXN0X2RlbChcXHUwMDI2Zmxvd190YWJsZS1cXHUwMDNlbGlzdCk7XFxuIDc2NDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG4gNzY1OlxcdFxcbiA3NjY6XFx0XFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VnY193b3JrKTtcXG4gNzY3OlxcdFxcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChmbG93X3RhYmxlKTtcXG4gNzY4OlxcdFxcdC8qIC4uLiBubyBtb3JlIHBlbmRpbmcgd29yayBhZnRlciB0aGlzIHN0YWdlIC4uLiAqL1xcbiA3Njk6XFx0XFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCwgTlVMTCk7XFxuIDc3MDpcXHRcXHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93X3RhYmxlKTtcXG4gNzcxOlxcdFxcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKGZsb3dfdGFibGUpO1xcbiA3NzI6XFx0XFx0cmhhc2h0YWJsZV9kZXN0cm95KFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VyaGFzaHRhYmxlKTtcXG4gNzczOlxcdH1cXG4gNzc0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfZnJlZSk7XFxuIDc3NTpcXHRcXG4gNzc2OlxcdHN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuIDc3NzpcXHR7XFxuIDc3ODpcXHRcXHRuZXQtXFx1MDAzZWZ0LnN0YXQgPSBhbGxvY19wZXJjcHUoc3RydWN0IG5mX2Zsb3dfdGFibGVfc3RhdCk7XFxuIDc3OTpcXHRcXHRyZXR1cm4gbmV0LVxcdTAwM2VmdC5zdGF0ID8gMCA6IC1FTk9NRU07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ5OjAxLjIwMjI3MjYwNloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDQ0NDAzMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IEZsb3d0YWJsZSBDbGVhbnVwIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB0aGlzIHBhdGNoIGlzIG9wdGltaXppbmcgdGhlIGZsb3cgdGFibGUgY2xlYW51cCBwcm9jZXNzIHJlbGF0ZWQgdG8gbmV0d29yayBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHVucmVnaXN0cmF0aW9uLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSBpbiBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCB3YXMgaXRlcmF0aW5nIHRocm91Z2ggYWxsIGBmbG93dGFibGVzYCBhbmQgdGhlbiBjYWxsaW5nIGBuZl9mbG93X3RhYmxlX2djX2NsZWFudXBgLCB3aGljaCBpbiB0dXJuIGNoZWNrZWQgaWYgdGhlIGZsb3dzIGJlbG9uZ2VkIHRvIHRoZSBzYW1lIG5ldHdvcmsgbmFtZXNwYWNlIChgbmV0bnNgKSBhcyB0aGUgZGV2aWNlIGJlaW5nIHVucmVnaXN0ZXJlZC4gVGhhdCBjaGVjayAoYG5ldF9lcShuZl9jdF9uZXQoZmxvdy1cdTAwM2VjdCksIGRldl9uZXQoZGV2KSlgKSB3YXMgaW5zaWRlIHRoZSBmbG93LWxldmVsIGNhbGxiYWNrLlxuXG5Ob3csIHdpdGggdGhpcyBwYXRjaCwgdGhlIG5ldG5zIGNoZWNrIGlzIG1vdmVkICp1cCogdG8gdGhlIGZsb3d0YWJsZSBsZXZlbCBpdHNlbGYuIFNvLCBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCBmaXJzdCBjaGVja3MgYGlmIChuZXRfZXEocmVhZF9wbmV0KFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VuZXQpLCBkZXZfbmV0KGRldikpKWAgYmVmb3JlIGV2ZW4gY2FsbGluZyB0aGUgY2xlYW51cCBmdW5jdGlvbiBmb3IgdGhlIGZsb3dzIHdpdGhpbiB0aGF0IHRhYmxlLiBDb25zZXF1ZW50bHksIHRoZSByZWR1bmRhbnQgY2hlY2sgd2l0aGluIGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXBgIGlzIHJlbW92ZWQsIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlmIHRoZSBmbG93dGFibGUgaXMgYWxyZWFkeSBzY29wZWQgdG8gdGhlIGNvcnJlY3QgbmV0bnMuXG5cbk15IGtleSBjb25jZXJuIGlzIGFsd2F5cyBhcm91bmQgbWVtb3J5IHNhZmV0eS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBJJ3ZlIGNvbnNpZGVyZWQ6XG5cbiogICAqKk1lbW9yeSBBbGxvY2F0aW9uczoqKiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guXG4qICAgKipVc2VyLVNwYWNlIEludGVyYWN0aW9uOioqIEl0IGRvZXNuJ3QgaW52b2x2ZSBhbnkga2VybmVsLXRvLXVzZXIgY29waWVzIChsaWtlIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBldGMuKS4gTm8gaW5mb3JtYXRpb24gaXMgYmVpbmcgbGVha2VkIHRvIHVzZXIgc3BhY2UgYmVjYXVzZSBvZiB0aGlzLlxuKiAgICoqVW5pbml0aWFsaXplZCBGaWVsZHM6KiogTm8gbmV3IG9yIGV4aXN0aW5nIHN0cnVjdHVyZSBmaWVsZHMgYXJlIGJlaW5nIGFjY2Vzc2VkIG9yIGNyZWF0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIGJlaW5nIGJyYW5jaGVkIG9uIG9yIHVzZWQgdG8gY2FsY3VsYXRlIGxlbmd0aHMuXG4qICAgKipPcHRpbWl6YXRpb24gb25seToqKiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gb3B0aW1pemF0aW9uIHRoYXQgZWxpbWluYXRlcyBhbiB1bm5lY2Vzc2FyeSBuZXR3b3JrIG5hbWVzcGFjZSBjaGVjay5cblxuR2l2ZW4gdGhlIGNyaXRlcmlhLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBvcHRpbWl6YXRpb24gZG9lcyAqbm90KiBpbnRyb2R1Y2UgS01TQU4tcmVsZXZhbnQgaXNzdWVzLiBUaGUgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgcmlza3MgaGVyZSB3b3VsZCBiZSB0eXBpY2FsIG9mIHRoaXMgdHlwZSBvZiBjb2RlOiBVc2UtQWZ0ZXItRnJlZSAoVUFGKSwgcmVmZXJlbmNlIGNvdW50aW5nIHByb2JsZW1zLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsaXN0IHRyYXZlcnNhbCBpc3N1ZXMuIFRoZXNlIGFyZSBhbGwgdGhlIGtpbmQgb2YgYnVncyB0aGF0IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBkZXNpZ25lZCB0byBkZXRlY3QuXG5cblNpbmNlIHRoZSBwYXRjaCBkb2Vzbid0IG1lZXQgYW55IG9mIHRoZSBLTVNBTiB0cmlnZ2VycyDigJMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIG5vIHVzZXItc3BhY2UgY29waWVzLCBubyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEg4oCTIE5lZWRzS01TQU4gc2hvdWxkIGJlIHNldCB0byAqZmFsc2UqLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTgsIk91dHB1dFRva2VucyI6MjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDk6MDguNjQ2Njc5MTM1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgbmV0d29yayBuYW1lc3BhY2UgY2hlY2tpbmcgZHVyaW5nIG5ldGRldmljZSBjbGVhbnVwIGluIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIHN1YnN5c3RlbS4gSXQgc2hpZnRzIHRoZSBuYW1lc3BhY2UgbWF0Y2ggY2hlY2sgYG5ldF9lcShyZWFkX3BuZXQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlbmV0KSwgZGV2X25ldChkZXYpKWAgdXAgdG8gYG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpYCB3aGVuIGl0ZXJhdGluZyBvdmVyIHJlZ2lzdGVyZWQgZmxvd3RhYmxlcywgYW5kIHJlbW92ZXMgdGhlIHBlci1mbG93IGBuZXRfZXEobmZfY3RfbmV0KGZsb3ctXFx1MDAzZWN0KSwgZGV2X25ldChkZXYpKWAgY2hlY2sgZnJvbSBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKClgLlxcblxcblRoaXMgY2hhbmdlOlxcbjEuIERvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IG5ldyBzdGFjay9oZWFwIG1lbW9yeSBvciBkYXRhIHN0cnVjdHVyZXMuXFxuMi4gRG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS5cXG4zLiBEb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgZGVyZWZlcmVuY2VzLCBvciBsaXN0IG9wZXJhdGlvbnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4gLyBMT0NLREVQKS4gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBuZXR3b3JrIG5hbWVzcGFjZSBjaGVja2luZyBkdXJpbmcgbmV0ZGV2aWNlIGNsZWFudXAgaW4gdGhlIG5ldGZpbHRlciBmbG93dGFibGUgc3Vic3lzdGVtLiBJdCBzaGlmdHMgdGhlIG5hbWVzcGFjZSBtYXRjaCBjaGVjayBgbmV0X2VxKHJlYWRfcG5ldChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VuZXQpLCBkZXZfbmV0KGRldikpYCB1cCB0byBgbmZfZmxvd190YWJsZV9jbGVhbnVwKClgIHdoZW4gaXRlcmF0aW5nIG92ZXIgcmVnaXN0ZXJlZCBmbG93dGFibGVzLCBhbmQgcmVtb3ZlcyB0aGUgcGVyLWZsb3cgYG5ldF9lcShuZl9jdF9uZXQoZmxvdy1cXHUwMDNlY3QpLCBkZXZfbmV0KGRldikpYCBjaGVjayBmcm9tIGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoKWAuXFxuXFxuVGhpcyBjaGFuZ2U6XFxuMS4gRG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBhbnkgbmV3IHN0YWNrL2hlYXAgbWVtb3J5IG9yIGRhdGEgc3RydWN0dXJlcy5cXG4yLiBEb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLlxcbjMuIERvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy9sZW5ndGhzLlxcblxcbkFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIG9iamVjdCBsaWZldGltZXMsIGRldmljZSBkZXJlZmVyZW5jZXMsIG9yIGxpc3Qgb3BlcmF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiAvIExPQ0tERVApLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjb2jh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 08:25:06 +0000 UTC FinishedAt: 2026-09-09 08:49:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NF_TABLES", "NF_CONNTRACK", "NETFILTER_INGRESS", "NFT_FLOW_OFFLOAD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NF_TABLES", "NF_CONNTRACK", "NETFILTER_INGRESS", "NFT_FLOW_OFFLOAD" ], "series_id": "534cbfa0-765b-4445-95c9-291ca3088593" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_flow_table_cleanup", "nf_flow_table_gc_cleanup", "nf_flow_table_do_cleanup", "flow_offload_netdev_event" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfZmxvd190YWJsZV9jbGVhbnVwJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAmIzM0OywKICAgICYjMzQ7Zmxvd19vZmZsb2FkX25ldGRldl9ldmVudCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyBuZXR3b3JrIG5hbWVzcGFjZSBjaGVja2luZyBkdXJpbmcgbmV0ZGV2aWNlIGNsZWFudXAgaW4gdGhlIG5ldGZpbHRlciBmbG93dGFibGUgc3Vic3lzdGVtLiBJdCBzaGlmdHMgdGhlIG5hbWVzcGFjZSBtYXRjaCBjaGVjayBgbmV0X2VxKHJlYWRfcG5ldChcdTAwMjZmbG93dGFibGUtXHUwMDNlbmV0KSwgZGV2X25ldChkZXYpKWAgdXAgdG8gYG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpYCB3aGVuIGl0ZXJhdGluZyBvdmVyIHJlZ2lzdGVyZWQgZmxvd3RhYmxlcywgYW5kIHJlbW92ZXMgdGhlIHBlci1mbG93IGBuZXRfZXEobmZfY3RfbmV0KGZsb3ctXHUwMDNlY3QpLCBkZXZfbmV0KGRldikpYCBjaGVjayBmcm9tIGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoKWAuXG5cblRoaXMgY2hhbmdlOlxuMS4gRG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBhbnkgbmV3IHN0YWNrL2hlYXAgbWVtb3J5IG9yIGRhdGEgc3RydWN0dXJlcy5cbjIuIERvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSBvciBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuXG4zLiBEb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy5cblxuQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8gb2JqZWN0IGxpZmV0aW1lcywgZGV2aWNlIGRlcmVmZXJlbmNlcywgb3IgbGlzdCBvcGVyYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOIC8gTE9DS0RFUCkuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGNsZWFudXAgcGF0aCBpbiBuZl9mbG93X3RhYmxlX2NvcmUuYyBieSBtb3ZpbmcgbmV0d29yayBuYW1lc3BhY2UgbWF0Y2hpbmcgdG8gdGhlIG91dGVyIGZsb3d0YWJsZSBpdGVyYXRpb24gaW4gbmZfZmxvd190YWJsZV9jbGVhbnVwKCkgYW5kIGFkanVzdGluZyBwZXItZmxvdyBkZXZpY2UgdGVhcmRvd24gY29uZGl0aW9ucyBpbiBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoKS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZXhlY3V0ZWQgZHVyaW5nIG5ldHdvcmsgZGV2aWNlIHRlYXJkb3duL05FVERFVl9ET1dOIGV2ZW50cyB3aXRoIGFjdGl2ZSBuZnRhYmxlcyBmbG93IHRhYmxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNmYjMxNmMwYWNhMTQwNjJlOTc1YTUyYjhjODlkZGRiMzliZTk5NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA4OjQ3OjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5pbmRleCAwMzI0MWQ0YmZkNWU4Li41MmNjYTdhOGYxNDFiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuQEAgLTczMCwxNCAmIzQzOzczMCw5IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhO1xuIFxuLVx0aWYgKCFkZXYpIHtcbi1cdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRpZiAobmV0X2VxKG5mX2N0X25ldChmbG93LVx1MDAzZWN0KSwgZGV2X25ldChkZXYpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbMF0udHVwbGUuaWlmaWR4ID09IGRldi1cdTAwM2VpZmluZGV4IHx8XG4tXHQgICAgIGZsb3ctXHUwMDNldHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXHUwMDNlaWZpbmRleCkpXG4mIzQzO1x0aWYgKCFkZXYgfHxcbiYjNDM7XHQgICAgZmxvdy1cdTAwM2V0dXBsZWhhc2hbMF0udHVwbGUuaWlmaWR4ID09IGRldi1cdTAwM2VpZmluZGV4IHx8XG4mIzQzO1x0ICAgIGZsb3ctXHUwMDNldHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXHUwMDNlaWZpbmRleClcbiBcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuIH1cbiBcbkBAIC03NTQsOCAmIzQzOzc0OSwxMCBAQCB2b2lkIG5mX2Zsb3dfdGFibGVfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3d0YWJsZSwgXHUwMDI2Zmxvd3RhYmxlcywgbGlzdClcbi1cdFx0bmZfZmxvd190YWJsZV9nY19jbGVhbnVwKGZsb3d0YWJsZSwgZGV2KTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3d0YWJsZSwgXHUwMDI2Zmxvd3RhYmxlcywgbGlzdCkge1xuJiM0MztcdFx0aWYgKG5ldF9lcShyZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldCksIGRldl9uZXQoZGV2KSkpXG4mIzQzO1x0XHRcdG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldik7XG4mIzQzO1x0fVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfY2xlYW51cCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX2djX2NsZWFudXAmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9kb19jbGVhbnVwJiMzNDssCiAgICAmIzM0O2Zsb3dfb2ZmbG9hZF9uZXRkZXZfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGNsZWFudXAgcGF0aCBpbiBuZl9mbG93X3RhYmxlX2NvcmUuYyBieSBtb3ZpbmcgbmV0d29yayBuYW1lc3BhY2UgbWF0Y2hpbmcgdG8gdGhlIG91dGVyIGZsb3d0YWJsZSBpdGVyYXRpb24gaW4gbmZfZmxvd190YWJsZV9jbGVhbnVwKCkgYW5kIGFkanVzdGluZyBwZXItZmxvdyBkZXZpY2UgdGVhcmRvd24gY29uZGl0aW9ucyBpbiBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoKS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZXhlY3V0ZWQgZHVyaW5nIG5ldHdvcmsgZGV2aWNlIHRlYXJkb3duL05FVERFVl9ET1dOIGV2ZW50cyB3aXRoIGFjdGl2ZSBuZnRhYmxlcyBmbG93IHRhYmxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNmYjMxNmMwYWNhMTQwNjJlOTc1YTUyYjhjODlkZGRiMzliZTk5NDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDA4OjQ3OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKaW5kZXggMDMyNDFkNGJmZDVlOC4uNTJjY2E3YThmMTQxYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCkBAIC03MzAsMTQgJiM0Mzs3MzAsOSBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGF0YTsKIAotCWlmICghZGV2KSB7Ci0JCWZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChuZXRfZXEobmZfY3RfbmV0KGZsb3ctJmd0O2N0KSwgZGV2X25ldChkZXYpKSAmYW1wOyZhbXA7Ci0JICAgIChmbG93LSZndDt0dXBsZWhhc2hbMF0udHVwbGUuaWlmaWR4ID09IGRldi0mZ3Q7aWZpbmRleCB8fAotCSAgICAgZmxvdy0mZ3Q7dHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtJmd0O2lmaW5kZXgpKQomIzQzOwlpZiAoIWRldiB8fAomIzQzOwkgICAgZmxvdy0mZ3Q7dHVwbGVoYXNoWzBdLnR1cGxlLmlpZmlkeCA9PSBkZXYtJmd0O2lmaW5kZXggfHwKJiM0MzsJICAgIGZsb3ctJmd0O3R1cGxlaGFzaFsxXS50dXBsZS5paWZpZHggPT0gZGV2LSZndDtpZmluZGV4KQogCQlmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7CiB9CiAKQEAgLTc1NCw4ICYjNDM7NzQ5LDEwIEBAIHZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlOwogCiAJbXV0ZXhfbG9jaygmYW1wO2Zsb3d0YWJsZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3d0YWJsZSwgJmFtcDtmbG93dGFibGVzLCBsaXN0KQotCQluZl9mbG93X3RhYmxlX2djX2NsZWFudXAoZmxvd3RhYmxlLCBkZXYpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3d0YWJsZSwgJmFtcDtmbG93dGFibGVzLCBsaXN0KSB7CiYjNDM7CQlpZiAobmV0X2VxKHJlYWRfcG5ldCgmYW1wO2Zsb3d0YWJsZS0mZ3Q7bmV0KSwgZGV2X25ldChkZXYpKSkKJiM0MzsJCQluZl9mbG93X3RhYmxlX2djX2NsZWFudXAoZmxvd3RhYmxlLCBkZXYpOwomIzQzOwl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7Zmxvd3RhYmxlX2xvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDYzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEV2YWx1YXRpb246IEEgUHJlbGltaW5hcnkgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIGFuZCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCB3YXJyYW50cyBzb21lIHRpbWUgd2l0aCBzeXprYWxsZXIuIEZpcnN0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJlcXVlc3QuIFJpZ2h0LCBpdCYjMzk7cyBqdXN0IGNvZGUgcmV2aWV3IGFuZCBmdXp6aW5nIGV2YWx1YXRpb24uIE5vdGhpbmcgYWJvdXQgZXhwbG9pdCBkZXZlbG9wbWVudCBvciBjcmVhdGluZyBtYWx3YXJlLiBTZWVtcyBsaWtlIHRoZSBpbnRlbnQgaXMgcHVyZWx5IGRlZmVuc2l2ZSwgcHJvYmFibHkgZm9yIFFBIG9yIGFwcGxpY2F0aW9uIG1haW50ZW5hbmNlLiBHb29kLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gVGhlIGRpZmYgc2hvd3MgY2hhbmdlcyBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AuIEhtbSwgYSBjb25kaXRpb25hbCBjaGVjayBpcyBiZWluZyBzaW1wbGlmaWVkIGluIGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXBgLiBQcmV2aW91c2x5IHRoZXJlIHdhcyBhIGNoZWNrIHRvIHNlZSBpZiBgZGV2YCB3YXMgbnVsbCBvciBpZiB0aGUgbmV0d29yayBuYW1lc3BhY2VzIG1hdGNoZWQgYW5kIHRoZSBpbnRlcmZhY2UgaW5kaWNlcyBtYXRjaGVkLiBOb3cgaXQgYXBwZWFycyB0byBjaGVjayBgZGV2YCBpcyBudWxsIG9yIHRoYXQgdGhlIGludGVyZmFjZSBpbmRleCBtYXRjaGVzLiBPa2F5LCBzbyB0aGF0JiMzOTtzIG9uZSBjaGFuZ2UuIFRoZSBvdGhlciBjaGFuZ2UgaXMgaW4gYG5mX2Zsb3dfdGFibGVfY2xlYW51cGAuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGFkZHMgYSBuZXQgbmFtZXNwYWNlIGNoZWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoYXQgY2hhbmdlIG1vcmUuIEkga25vdyB0aG9zZSBmdW5jdGlvbnMsIGFuZCB3aGF0IHRoZXkmIzM5O3JlIHN1cHBvc2VkIHRvIGJlIGRvaW5nLCBidXQgd2hhdOKAmXMgdGhlIHJhdGlvbmFsZSBmb3IgdGhpcyBjaGFuZ2U/IAoKU28sIGl0JiMzOTtzIGEgY29kZSBzaW1wbGlmaWNhdGlvbiBhbmQgYSBuYW1lc3BhY2UgY2hlY2sgcmVsYXRlZCB0byBmbG93IHRhYmxlIGNsZWFudXAuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHRoZXJlJiMzOTtzIG5vdGhpbmcgaW1tZWRpYXRlbHkgKm9idmlvdXMqIHRoYXQgc2NyZWFtcyAmIzM0O3Z1bG5lcmFiaWxpdHkgcmlwZSBmb3IgZnV6emluZy4mIzM0OyBIb3dldmVyLCBJJiMzOTttIG5vdCBnb2luZyB0byB3cml0ZSBpdCBvZmYgdGhhdCBlYXNpbHkuIEdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0d29ya2luZyBjb2RlLCBhbmQgdGhlIHVzZSBvZiB0aGUgYG5mX2Zsb3d0YWJsZWAgZGF0YSBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBob3RzcG90IGZvciBwb3RlbnRpYWwgYnVncywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBpc3N1ZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCB0aGF0IG5ldHdvcmsgbmFtZXNwYWNlIGNoZWNrIGlzIGNvcnJlY3RseSBpbXBsZW1lbnRlZCwgYW5kIHRoYXQgbm8gbG9naWMgaXMgbWlzc2VkLiBXZSBuZWVkIHRvIGV4cGxvcmUgdGhlIGNvZGUgaW4gZGVwdGguIEkmIzM5O20gZ29pbmcgdG8gcnVuIG15IHVzdWFsIGFuYWx5c2lzIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSYjMzk7bGwgY2hlY2sgcmVsYXRlZCBgS2NvbmZpZ2Agb3B0aW9ucywgcmVsYXRlZCBjb2RlLCBhbmQgZGF0YSBmbG93cyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUuIEFmdGVyIHRoYXQsIEkgY2FuIG1ha2UgYSBiZXR0ZXIgaW5mb3JtZWQgZGVjaXNpb24gb24gd2hldGhlciB0aGlzIGRlc2VydmVzIHN5emthbGxlciYjMzk7cyBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjA6XHRcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIDcyMTpcdFx0bGlzdF9hZGQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWxpc3QsIFx1MDAyNmZsb3d0YWJsZXMpO1xuIDcyMjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbiA3MjM6XHRcbiA3MjQ6XHRcdHJldHVybiAwO1xuIDcyNTpcdH1cbiA3MjY6XHRFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2luaXQpO1xuIDcyNzpcdFxuIDcyODpcdHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIDcyOTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxuIDczMDpcdHtcbiA3MzE6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhO1xuIDczMjpcdFxuIDczMzpcdFx0aWYgKCFkZXYgfHxcbiA3MzQ6XHRcdCAgICBmbG93LVx1MDAzZXR1cGxlaGFzaFswXS50dXBsZS5paWZpZHggPT0gZGV2LVx1MDAzZWlmaW5kZXggfHxcbiA3MzU6XHRcdCAgICBmbG93LVx1MDAzZXR1cGxlaGFzaFsxXS50dXBsZS5paWZpZHggPT0gZGV2LVx1MDAzZWlmaW5kZXgpXG4gNzM2Olx0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbiA3Mzc6XHR9XG4gNzM4Olx0XG4gNzM5Olx0dm9pZCBuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuIDc0MDpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNzQxOlx0e1xuIDc0MjpcdFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3d0YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBkZXYpO1xuIDc0MzpcdFx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VnY193b3JrKTtcbiA3NDQ6XHRcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChmbG93dGFibGUpO1xuIDc0NTpcdH1cbiA3NDY6XHRcbiA3NDc6XHR2b2lkIG5mX2Zsb3dfdGFibGVfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDc0ODpcdHtcbiA3NDk6XHRcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZTtcbiA3NTA6XHRcbiA3NTE6XHRcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIDc1MjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmbG93dGFibGUsIFx1MDAyNmZsb3d0YWJsZXMsIGxpc3QpIHtcbiA3NTM6XHRcdFx0aWYgKG5ldF9lcShyZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldCksIGRldl9uZXQoZGV2KSkpXG4gNzU0Olx0XHRcdFx0bmZfZmxvd190YWJsZV9nY19jbGVhbnVwKGZsb3d0YWJsZSwgZGV2KTtcbiA3NTU6XHRcdH1cbiA3NTY6XHRcdG11dGV4X3VubG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4gNzU3Olx0fVxuIDc1ODpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfY2xlYW51cCk7XG4gNzU5Olx0XG4gNzYwOlx0dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbiA3NjE6XHR7XG4gNzYyOlx0XHRtdXRleF9sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbiA3NjM6XHRcdGxpc3RfZGVsKFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlbGlzdCk7XG4gNzY0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIDc2NTpcdFxuIDc2NjpcdFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlZ2Nfd29yayk7XG4gNzY3Olx0XHRuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goZmxvd190YWJsZSk7XG4gNzY4Olx0XHQvKiAuLi4gbm8gbW9yZSBwZW5kaW5nIHdvcmsgYWZ0ZXIgdGhpcyBzdGFnZSAuLi4gKi9cbiA3Njk6XHRcdG5mX2Zsb3dfdGFibGVfaXRlcmF0ZShmbG93X3RhYmxlLCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAsIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqS2NvbmZpZyBDaGVjayBmb3IgbmZfZmxvd190YWJsZV9jb3JlLmMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgbmZfZmxvd190YWJsZV9jb3JlLmNgIGlzIHByb3Blcmx5IGludGVncmF0ZWQgaW50byB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3QsIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIEtjb25maWcgZmlsZXMuIE5lZWQgdG8gY2hlY2sgaXRzIHZpc2liaWxpdHksIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBlbnN1cmUgaXQmIzM5O3Mgbm90IGFjY2lkZW50YWxseSBtYXNrZWQgYnkgc29tZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNYWtlIHN1cmUgaXQgYnVpbGRzIGFzIGV4cGVjdGVkLCBhbmQgdGhhdCBpdCBpc24mIzM5O3QgY2F1c2luZyBhbnkgY29uZmxpY3RzLiBBbnkgdW5leHBlY3RlZCBkZXBlbmRlbmNpZXMgYXJlIGFuIG9idmlvdXMgcmVkIGZsYWcuIEdvdHRhIG1ha2Ugc3VyZSBpdCYjMzk7cyBwbGF5aW5nIG5pY2Ugd2l0aCB0aGUgcmVzdCBvZiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgZXNwZWNpYWxseSBpZiB0aGVyZSBoYXZlIGJlZW4gcmVjZW50IHVwZGF0ZXMgdG8gdGhlIHN1cnJvdW5kaW5nIGNvbXBvbmVudHMuIE5vdGhpbmcmIzM5O3MgbW9yZSBmcnVzdHJhdGluZyB0aGFuIGEgYnVpbGQgYnJlYWsgZHVlIHRvIGFuIG92ZXJzaWdodCBpbiB0aGUgY29uZmlndXJhdGlvbi4gR290IHRvIGVuc3VyZSBpdCYjMzk7cyBidWlsZGFibGUgb24gYWxsIHBsYXRmb3JtcywgdG9vLiBHb3R0YSBkb3VibGUgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2NvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQyPW9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVx0JiM0Mzs9IG5mX2Zsb3dfdGFibGUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDQtXHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0ODgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5GX0ZMT1dfVEFCTEUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgTkZfRkxPV19UQUJMRWAgc2l0dWF0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgS2NvbmZpZy4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gcGxhY2UgZm9yIHZlcmlmeWluZyB3aGV0aGVyIHRoaXMgZmVhdHVyZSBpcyBldmVuICplbmFibGVkKiBpbiB0aGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHNlZSBpZiB0aGUgc3ltYm9sIGV4aXN0cywgd2hhdCBpdHMgZGVmYXVsdCBzdGF0ZSBpcywgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVW5kZXJzdGFuZGluZyBpdHMgS2NvbmZpZyBjb25maWd1cmF0aW9uIGlzIHRoZSBlc3NlbnRpYWwgZmlyc3Qgc3RlcCBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IGNvZGUuIEl0JiMzOTtsbCB0ZWxsIG1lIGlmIEkmIzM5O20gZXZlbiBkZWFsaW5nIHdpdGggYSBjb21waWxlLXRpbWUgaXNzdWUsIG9yIHNvbWV0aGluZyBydW50aW1lIGJhc2VkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgS2NvbmZpZyBoYXMgdG8gc2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAzPWNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEtjb25maWcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHNraXAgYXJvdW5kIHRoZSBpbml0aWFsIHBhcnRzIGFuZCBmb2N1cyBvbiBsaW5lcyA3MDAgdG8gNzQwLCBiZWNhdXNlIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgY2h1bmsgdG8gc3RhcnQgd2l0aC4gSG9wZWZ1bGx5LCB0aGF0IHNlY3Rpb24gd2lsbCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBhIHNwZWNpZmljIHNldCBvZiBmZWF0dXJlcyBvciBvcHRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGFyZWEgdG8gcmVsYXRlIHRvIGEgc3BlY2lmaWMgYXNwZWN0IG9mIG5ldGZpbHRlciwgbWF5YmUgYSBtb2R1bGUgb3IgZnVuY3Rpb25hbGl0eSwgb3IgcGVyaGFwcyBhIGdyb3VwIG9mIHJlbGF0ZWQgZmVhdHVyZXMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0cywgYW5kIGRlZmF1bHQgdmFsdWVzLiBJJiMzOTtsbCBtZW50YWxseSBtYXAgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgdmFyaW91cyBvcHRpb25zIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgZml0IHRvZ2V0aGVyIGluIHRoZSBsYXJnZXIgTmV0ZmlsdGVyIGxhbmRzY2FwZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHJlZCBmbGFncywgYW55dGhpbmcgdGhhdCBzZWVtcyBzdHJhbmdlIG9yIG92ZXJseSBjb21wbGV4LCBhbmQgYW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBjbGFyaWZpY2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHRcbiA3MDE6XHRlbmRpZiAjIE5GX1RBQkxFU1xuIDcwMjpcdFxuIDcwMzpcdGNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbiA3MDQ6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbiA3MDU6XHRcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxuIDcwNjpcdFx0aGVscFxuIDcwNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBzdXBwb3J0LlxuIDcwODpcdFxuIDcwOTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDcxMDpcdFxuIDcxMTpcdGNvbmZpZyBORl9GTE9XX1RBQkxFXG4gNzEyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcJiMzNDtcbiA3MTM6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0lOR1JFU1NcbiA3MTQ6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNzE1Olx0XHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xuIDcxNjpcdFx0aGVscFxuIDcxNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUuXG4gNzE4Olx0XG4gNzE5Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gNzIwOlx0XG4gNzIxOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXG4gNzIyOlx0XHRib29sIFwmIzM0O1N1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXCYjMzQ7XG4gNzIzOlx0XHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcbiA3MjQ6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuIDcyNTpcdFx0aGVscFxuIDcyNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3NcbiA3Mjc6XHRcdCAgdG8gYmUgc2hvd24gaW4gcHJvY2ZzIHVuZGVyIG5ldC9uZXRmaWx0ZXIvbmZfZmxvd3RhYmxlLlxuIDcyODpcdFxuIDcyOTpcdGNvbmZpZyBORVRGSUxURVJfWFRBQkxFU1xuIDczMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIFh0YWJsZXMgc3VwcG9ydCAocmVxdWlyZWQgZm9yIGlwX3RhYmxlcylcJiMzNDtcbiA3MzE6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuIDczMjpcdFx0aGVscFxuIDczMzpcdFx0ICBUaGlzIGlzIHJlcXVpcmVkIGlmIHlvdSBpbnRlbmQgdG8gdXNlIGFueSBvZiBpcF90YWJsZXMsXG4gNzM0Olx0XHQgIGlwNl90YWJsZXMgb3IgYXJwX3RhYmxlcy5cbiA3MzU6XHRcbiA3MzY6XHRpZiBORVRGSUxURVJfWFRBQkxFU1xuIDczNzpcdFxuIDczODpcdGNvbmZpZyBORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbiA3Mzk6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIFh0YWJsZXMgMzJiaXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjMzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBDYWxscyB0byBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYG5mX2Zsb3dfdGFibGVfY2xlYW51cGAuIFRvIGRvIHRoYXQsIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biBpdHMgY2FsbCBzaXRlcy4gQSBxdWljayBncmVwIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgYSBxdWljayBzY2FuLCBvciBJIGNhbiB1c2UgY3Njb3BlIG9yIGN0YWdzIGlmIEkgd2FudCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBjcm9zcy1yZWZlcmVuY2UuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgdHJpZ2dlcmVkLiBJcyB0aGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IGluIHJlc3BvbnNlIHRvIHNvbWUgZXZlbnQsIG9yIGlzIGl0IHNjaGVkdWxlZCwgcGVyaGFwcyBhcyBhIGRlZmVycmVkIHdvcmsgaXRlbT8gSWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBpbGx1bWluYXRlIHRoZSBzY2VuYXJpb3Mgd2hlcmUgdGhlc2UgZmxvdyB0YWJsZSBlbnRyaWVzIGFyZSBiZWluZyBjbGVhbmVkIHVwIGFuZCB3aGV0aGVyIHRoZXkmIzM5O3JlIGJlaW5nIGNsZWFuZWQgdXAgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaGFzIGNsb3NlZCBvciBpcyBpZGxlIGZvciBhIHdoaWxlLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGxvdC4gQXJlIHRoZXJlIGFueSByZXNvdXJjZSBjb25zdHJhaW50cyBvciBlcnJvciBjb25kaXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlICp3aGVuKiBhbmQgKmhvdyogdGhpcyBjbGVhbnVwIGhhcHBlbnM/IEkgd2lsbCBjaGVjayBmb3IgYW55IG11dGV4ZXMgb3IgbG9ja3MgYmVpbmcgaGVsZCBkdXJpbmcgdGhlIGNhbGwsIGFzIHRoYXQgY2FuIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhlIGNvbmN1cnJlbmN5IG1vZGVsIGFuZCBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXA6IHVuZGVyc3RhbmQgdGhlIGNhbGxlciYjMzk7cyBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd190YWJsZV9jbGVhbnVwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MzI0PXZvaWQgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzI1LVx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozMjY6dm9pZCBuZl9mbG93X3RhYmxlX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTMyNy1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTczOT12b2lkIG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NDYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc0Nzp2b2lkIG5mX2Zsb3dfdGFibGVfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NDgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzU3LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzU4OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfY2xlYW51cCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc1OS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yMzg9c3RhdGljIGludCBmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yNDUtXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyNDY6XHRuZl9mbG93X3RhYmxlX2NsZWFudXAoZGV2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTI0Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM3MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG5mdF9mbG93X29mZmxvYWQuY2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBhbmQgdXNhZ2Ugb2YgdGhpcyBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHBhdGhzIGFuZCBhbmFseXplIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JraW5nIGNvbnRleHQuIExldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIGludm9rZWQsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgdGhlIG92ZXJhbGwgcm9sZSBpdCBwbGF5cyBpbiB0aGUgb2ZmbG9hZCBtZWNoYW5pc20uIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbnRleHRzIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGxldmVyYWdlZCwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBtaWdodCBiZSBvbiBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBzdWJzeXN0ZW1zLiBIb3BlZnVsbHksIHRoZSBjb2RlIGNvbW1lbnRzIGFyZSBnb29kLCBidXQgSSYjMzk7bSBwcmVwYXJlZCB0byBkaWcgdGhyb3VnaCB0aGUgbG9naWMgaWYgbmVjZXNzYXJ5IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGl0cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzU6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIDIzNjpcdH07XG4gMjM3Olx0XG4gMjM4Olx0c3RhdGljIGludCBmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbiAyMzk6XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuIDI0MDpcdHtcbiAyNDE6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiAyNDI6XHRcbiAyNDM6XHRcdGlmIChldmVudCAhPSBORVRERVZfRE9XTilcbiAyNDQ6XHRcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuIDI0NTpcdFxuIDI0NjpcdFx0bmZfZmxvd190YWJsZV9jbGVhbnVwKGRldik7XG4gMjQ3Olx0XG4gMjQ4Olx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gMjQ5Olx0fVxuIDI1MDpcdFxuIDI1MTpcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZmxvd19vZmZsb2FkX25ldGRldl9ub3RpZmllciA9IHtcbiAyNTI6XHRcdC5ub3RpZmllcl9jYWxsXHQ9IGZsb3dfb2ZmbG9hZF9uZXRkZXZfZXZlbnQsXG4gMjUzOlx0fTtcbiAyNTQ6XHRcbiAyNTU6XHRzdGF0aWMgaW50IF9faW5pdCBuZnRfZmxvd19vZmZsb2FkX21vZHVsZV9pbml0KHZvaWQpXG4gMjU2Olx0e1xuIDI1NzpcdFx0aW50IGVycjtcbiAyNTg6XHRcbiAyNTk6XHRcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZmbG93X29mZmxvYWRfbmV0ZGV2X25vdGlmaWVyKTtcbiAyNjA6XHRcdGlmIChlcnIpXG4gMjYxOlx0XHRcdGdvdG8gZXJyO1xuIDI2MjpcdFxuIDI2MzpcdFx0ZXJyID0gbmZ0X3JlZ2lzdGVyX2V4cHIoXHUwMDI2bmZ0X2Zsb3dfb2ZmbG9hZF90eXBlKTtcbiAyNjQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gMjY1Olx0XHRcdGdvdG8gcmVnaXN0ZXJfZXhwcjtcbiAyNjY6XHRcbiAyNjc6XHRcdHJldHVybiAwO1xuIDI2ODpcdFxuIDI2OTpcdHJlZ2lzdGVyX2V4cHI6XG4gMjcwOlx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZmbG93X29mZmxvYWRfbmV0ZGV2X25vdGlmaWVyKTtcbiAyNzE6XHRlcnI6XG4gMjcyOlx0XHRyZXR1cm4gZXJyO1xuIDI3MzpcdH1cbiAyNzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEzMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIENsZWFudXAgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgZmxvdyB0YWJsZSBjbGVhbnVwIHByb2Nlc3MgaGFuZGxlcyBhIGBORVRERVZfRE9XTmAgZXZlbnQuIFByZXZpb3VzbHksIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXBgLCBpbmNsdWRlZCBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBmbG93JiMzOTtzIGNvbm50cmFjayBuZXRucyBtYXRjaGVkIHRoZSBkZXZpY2UmIzM5O3MgbmV0bnMgKmFuZCogdGhhdCB0aGUgaW50ZXJmYWNlIGluZGV4IG1hdGNoZWQuIFRoaXMgd2FzIGFjaGlldmVkIHZpYSBjaGVja2luZyBgZGV2X25ldChkZXYpYCBhbmQgdGhlIGBpaWZpZHhgLgoKTm93LCBpdCBzZWVtcyB0aGlzIG5ldG5zIGNoZWNrIGhhcyBiZWVuIG1vdmVkLiBJbnN0ZWFkIG9mIGNoZWNraW5nIHRoaXMgb24gYSBwZXItZmxvdyBiYXNpcyB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAsIHRoZSBjb2RlLCBpbiBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCwgbm93IGl0ZXJhdGVzIHRocm91Z2ggdGhlIGZsb3cgdGFibGVzIGFuZCBmaWx0ZXJzIHRoZW0gYmFzZWQgb24gdGhlIG5ldG5zIG9mIHRoZSBmbG93dGFibGUgaXRzZWxmIHVzaW5nIGBmbG93dGFibGUtJmd0O25ldGAgYW5kIGBkZXZfbmV0KGRldilgLiBUaGVuLCB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAsIHRoZSBjb2RlIG5vdyBvbmx5IGNoZWNrcyBmb3IgdGhlIGludGVyZmFjZSBpbmRleCBtYXRjaCBhZ2FpbnN0IHRoZSBgZGV2YCB2aWEgYGlpZmlkeGAuIEVzc2VudGlhbGx5LCB0aGUgbmV0bnMgY2hlY2sgaGFzIGJlZW4gbGlmdGVkIG91dCBvZiB0aGUgcGVyLWZsb3cgY2xlYW51cCBhbmQgaW50byB0aGUgZmxvd3RhYmxlIGxvb2t1cCBpdHNlbGYuCgpJcyB0aGlzIHBhdGggcmVhY2hhYmxlPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIGNvZGUuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIHBhcnRzIG9mIHRoZSBuZXRmaWx0ZXIvbmZ0YWJsZXMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZS4gVGhpcyB3aG9sZSBzeXN0ZW0gaXMgcmVhZGlseSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdHJpZ2dlcmVkIGJ5IHN0YW5kYXJkIG5ldGxpbmsvbmZ0YWJsZXMgY29tbWFuZHMgb3IgZGV2aWNlIGRvd24gZXZlbnRzIChlLmcuLCBgaXAgbGluayBzZXQgZG93bmAsIGRlbGV0aW5nIGRldmljZXMgbGlrZSB0dW4vdGFwL3ZldGgvZHVtbXkvbWFjdmxhbiwgbmV0bnMgdGVhcmRvd24sIGFuZCBzbyBvbikuIFRoZSBrZXkgaGVyZSBpcyB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gV2UmIzM5O2xsIG5lZWQgYE5GX0ZMT1dfVEFCTEVgLCBsaWtlbHkgYE5GX1RBQkxFU2AgYW5kIGBORlRfRkxPV19PRkZMT0FEYCwgYE5GX0NPTk5UUkFDS2AsIGBORVRGSUxURVJfSU5HUkVTU2AgKGF0IGxlYXN0KS4gTGV0IG1lIHB1bGwgdXAgS2NvbmZpZyB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgYE5GVF9GTE9XX09GRkxPQURgIGFuZCB0aGUgcmVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ5OD1jb25maWcgTkZUX0VYVEhEUl9EQ0NQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDQ6Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfRkxPV19UQUJMRVxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTEyPW9iai0kKENPTkZJR19ORlRfQ1QpXHRcdCYjNDM7PSBuZnRfY3Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTM6b2JqLSQoQ09ORklHX05GVF9GTE9XX09GRkxPQUQpXHQmIzQzOz0gbmZ0X2Zsb3dfb2ZmbG9hZC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExNC1vYmotJChDT05GSUdfTkZUX0xJTUlUKVx0XHQmIzQzOz0gbmZ0X2xpbWl0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgTkZUX0ZMT1dfT0ZGTE9BRGAgaW4gS2NvbmZpZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoYW5kbGVkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBLY29uZmlnYCBhbmQgY2hlY2tpbmcgdGhlIGRlZmluaXRpb24gb2YgYE5GVF9GTE9XX09GRkxPQURgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMuIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gV2hhdCBvdGhlciBuZXR3b3JraW5nLXJlbGF0ZWQgZmVhdHVyZXMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoLCBvciByZWx5IG9uPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIHByZXNlbmNlIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgY3VycmVudCBwZXJmb3JtYW5jZSBnb2FscyBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gUGVyaGFwcyBJIHdhbnQgdG8gY2hlY2sgZm9yIGFueSBjYXZlYXRzIGluIHRoZSByZWxldmFudCBjb21taXQgbG9ncy4gVGhpcyBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGFyZWEgZm9yIG9wdGltaXphdGlvbiwgb3IgbWF5YmUgaXQmIzM5O3MgdGhlIHJvb3Qgb2Ygc29tZSBpc3N1ZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgYWRkcmVzcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcdGRlZmF1bHQgblxuIDUwMTpcdFx0aGVscFxuIDUwMjpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIG1hdGNoaW5nIG9uIERDQ1AgZXh0ZW5zaW9uIGhlYWRlcnMuXG4gNTAzOlx0XG4gNTA0Olx0Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcbiA1MDU6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9GTE9XX1RBQkxFXG4gNTA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGhhcmR3YXJlIGZsb3cgb2ZmbG9hZCBtb2R1bGVcJiMzNDtcbiA1MDc6XHRcdGhlbHBcbiA1MDg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXCYjMzQ7Zmxvd19vZmZsb2FkXCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xuIDUwOTpcdFx0ICBjaG9vc2Ugd2hhdCBmbG93cyBhcmUgcGxhY2VkIGludG8gdGhlIGhhcmR3YXJlLlxuIDUxMDpcdFxuIDUxMTpcdGNvbmZpZyBORlRfQ09OTkxJTUlUXG4gNTEyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm5saW1pdCBtb2R1bGVcJiMzNDtcbiA1MTM6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNTE0Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDUxNTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9DT05OQ09VTlRcbiA1MTY6XHRcdGhlbHBcbiA1MTc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXCYjMzQ7Y29ubmxpbWl0XCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xuIDUxODpcdFx0ICByYXRlbGltaXQgcnVsZSBtYXRjaGluZ3MgcGVyIGNvbm5lY3Rpb25zLlxuIDUxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODQ2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZsb3cgVGFibGUgRGVwZW5kZW5jaWVzIGFuZCBDbGVhbnVwIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBORl9GTE9XX1RBQkxFYCBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBpdCByZWxpZXMgb24gYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4gQW5kLCBzaW5jZSB3ZSYjMzk7cmUgaGVyZSwgYE5GVF9GTE9XX09GRkxPQURgIGlzIGRlcGVuZGVudCBvbiBib3RoIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfRkxPV19UQUJMRWAuIEdvb2QgdG8gaGF2ZSB0aG9zZSByZWxhdGlvbnNoaXBzIGNsZWFyIGluIG15IGhlYWQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgd2hpY2ggZnVuY3Rpb25zIGFyZSBiZWluZyBkaXJlY3RseSBtb2RpZmllZC4gSSBzZWUgYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAsIGBuZl9mbG93X3RhYmxlX2NsZWFudXBgLCBhbmQuLi5vaCwgYWxzbyBgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwYCwgYGZsb3dfb2ZmbG9hZF90ZWFyZG93bmAsIGFuZCBgZmxvd19vZmZsb2FkX25ldGRldl9ldmVudGAgYXJlIGJlaW5nIHRvdWNoZWQuIEdvdCBpdC4gVGhhdCBoZWxwcyBtZSBzY29wZSB0aGUgYXJlYSB0aGF0IEkgbmVlZCB0byBjYXJlZnVsbHkgcmV2aWV3LgoKRmluYWxseSwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLiBJdCYjMzk7cyBjcnVjaWFsIHRoYXQgSSB2ZXJpZnkgaWYgYW55dGhpbmcgZWxzZSBjYWxscywgb3IgcmVsaWVzIG9uLCBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCBvciBgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwYC4gSSBjYW4mIzM5O3QgYWZmb3JkIHRvIG1pc3MgYW55IHN1YnRsZSwgaW5kaXJlY3QgY29ubmVjdGlvbnMuIFRoYXQmIzM5O3MgYSBrZXkgcGFydCBvZiBteSBkdWUgZGlsaWdlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2djX2NsZWFudXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zMjM9dm9pZCBuZl9mbG93X3RhYmxlX2djX3J1bihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzI0OnZvaWQgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzI1LVx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzI4PXN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzM4LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3Mzk6dm9pZCBuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NDAtXHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc0Nz12b2lkIG5mX2Zsb3dfdGFibGVfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzUzLVx0XHRpZiAobmV0X2VxKHJlYWRfcG5ldChcdTAwMjZmbG93dGFibGUtXHUwMDNlbmV0KSwgZGV2X25ldChkZXYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzU0Olx0XHRcdG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc1NS1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyMjU9c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9pbmRyX2NsZWFudXAoc3RydWN0IGZsb3dfYmxvY2tfY2IgKmJsb2NrX2NiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTIyOS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTIzMDpcdG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEyMzEtXHRkb3duX3dyaXRlKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg1OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBOZXRmaWx0ZXIgRmxvdyBUYWJsZSBDbGVhbnVwIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBjbGVhbnVwIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIGBuZl9mbG93X3RhYmxlX2luZHJfY2xlYW51cGAuIEkgc2VlIHRoYXQgYG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldilgIGlzIGFsc28gY2FsbGVkIGZyb20gYG5mX2Zsb3dfdGFibGVfaW5kcl9jbGVhbnVwYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgbmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3d0YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBkZXYpYC4gVGhlIGtleSBvYnNlcnZhdGlvbiBoZXJlIGlzIHRoYXQgYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAgKm5vdyogYXZvaWRzIGNoZWNraW5nIGBuZXRfZXEobmZfY3RfbmV0KGZsb3ctJmd0O2N0KSwgZGV2X25ldChkZXYpKWAgYW5kIGluc3RlYWQgbGV2ZXJhZ2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGBmbG93dGFibGVgIGFuZCBgZGV2YCBhcmUgd2l0aGluIHRoZSBzYW1lIG5ldHdvcmsgbmFtZXNwYWNlIG9yIHRoYXQgZGV2aWNlIGluZGV4IG1hdGNoaW5nIHdpdGhpbiB0aGUgZmxvd3RhYmxlIGlzIGVub3VnaC4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGNyaXRlcmlhLiBHaXZlbiB0aGUgY2hhbmdlcywgdGhlIHBhdGNoICpkb2VzKiBhbHRlciB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY2xlYW51cCBsb2dpYywgc3BlY2lmaWNhbGx5IGJ5IG9wdGltaXppbmcgdGhlIG5ldCBuYW1lc3BhY2UgZmlsdGVyaW5nIGF0IHRoZSBmbG93dGFibGUgbGlzdCBpdGVyYXRpb24gbGV2ZWwgYW5kIHNpbXBsaWZ5aW5nIGRldmljZSBtYXRjaGluZy4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZywgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHVzdWFsIG5ldHdvcmsgc29ja2V0LCBuZXRsaW5rLCBhbmQgbmZ0YWJsZXMgaW50ZXJmYWNlcyBhY2Nlc3NpYmxlIGluIHNvbWV0aGluZyBsaWtlIFFFTVUgb3Igc3l6a2FsbGVyLgoKVGhlcmVmb3JlLCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGlzICp0cnVlKi4KCkkmIzM5O2xsIHNldCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGFzIG5lZWRlZDoKCiogICBgTkZfRkxPV19UQUJMRWAKKiAgIGBORl9UQUJMRVNgCiogICBgTkZfQ09OTlRSQUNLYAoqICAgYE5FVEZJTFRFUl9JTkdSRVNTYAoqICAgYE5GVF9GTE9XX09GRkxPQURgCgpBbmQgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOgoKKiAgIGBuZl9mbG93X3RhYmxlX2NsZWFudXBgCiogICBgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwYAoqICAgYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAKKiAgIGBmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50YAoqICAgYG5mX2Zsb3dfdGFibGVfZnJlZWAKCkkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGZvciBvdGhlciByZWxhdGVkIHN5bWJvbHMgb3IgY29uZmlncy4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYE5GVF9GTE9XX09GRkxPQURgIGlzIHN0cmljdGx5IG5lY2Vzc2FyeSwgb3IgaWYgYE5GX0ZMT1dfVEFCTEVgIGJ5IGl0c2VsZiBpcyBlbm91Z2guIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkZfRkxPV19UQUJMRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMzk9b2JqLSQoQ09ORklHX05GVF9GV0RfTkVUREVWKVx0JiM0Mzs9IG5mdF9md2RfbmV0ZGV2Lm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0MS0jIGZsb3cgdGFibGUgaW5mcmFzdHJ1Y3R1cmVcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQyOm9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVx0JiM0Mzs9IG5mX2Zsb3dfdGFibGUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDMtbmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ1LVx0XHRcdFx0ICAgbmZfZmxvd190YWJsZV9vZmZsb2FkLm8gbmZfZmxvd190YWJsZV94ZHAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDY6bmZfZmxvd190YWJsZS0kKENPTkZJR19ORl9GTE9XX1RBQkxFX1BST0NGUykgJiM0Mzs9IG5mX2Zsb3dfdGFibGVfcHJvY2ZzLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ3OmlmZXEgKCQoQ09ORklHX05GX0ZMT1dfVEFCTEUpLG0pXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0OC1uZl9mbG93X3RhYmxlLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpICYjNDM7PSBuZl9mbG93X3RhYmxlX2JwZi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0OTplbHNlIGlmZXEgKCQoQ09ORklHX05GX0ZMT1dfVEFCTEUpLHkpXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1MC1uZl9mbG93X3RhYmxlLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSAmIzQzOz0gbmZfZmxvd190YWJsZV9icGYub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNTE9ZW5kaWZcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTUyLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNTM6b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfSU5FVCkgJiM0Mzs9IG5mX2Zsb3dfdGFibGVfaW5ldC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1NC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz0xNjI0PXZvaWQgbmZfY29ubnRyYWNrX3RjcF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTY1Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjE2NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xNjU4LVx0dG4tXHUwMDNlb2ZmbG9hZF90aW1lb3V0ID0gMzAgKiBIWjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYz0xOTU9dm9pZCBuZl9jb25udHJhY2tfdWRwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYy0yMDItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYzoyMDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYy0yMDQtXHR1bi1cdTAwM2VvZmZsb2FkX3RpbWVvdXQgPSAzMCAqIEhaO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz01ODU9ZW51bSBuZl9jdF9zeXNjdGxfaW5kZXgge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02MDktXHRORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9UQ1BfVU5BQ0ssXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NjEwOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTYxMS1cdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9PRkZMT0FELFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02MTgtXHRORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9VRFBfU1RSRUFNLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjYxOTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02MjAtXHRORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9VRFBfT0ZGTE9BRCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9NjQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy03ODYtXHR9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjc4NzojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy03ODgtXHRbTkZfU1lTQ1RMX0NUX1BST1RPX1RJTUVPVVRfVENQX09GRkxPQURdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy04MzYtXHR9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjgzNzojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy04MzgtXHRbTkZfU1lTQ1RMX0NUX1BST1RPX1RJTUVPVVRfVURQX09GRkxPQURdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz05MzU9c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF90Y3Bfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtOTYzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjk2NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05NjUtXHR0YWJsZVtORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9UQ1BfT0ZGTE9BRF0uZGF0YSA9IFx1MDAyNnRuLVx1MDAzZW9mZmxvYWRfdGltZW91dDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9MTAwMz1zdGF0aWMgaW50IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTAzMC1cdHRhYmxlW05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9TVFJFQU1dLmRhdGEgPSBcdTAwMjZ1bi1cdTAwM2V0aW1lb3V0c1tVRFBfQ1RfUkVQTElFRF07XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTAzMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDMyLVx0dGFibGVbTkZfU1lTQ1RMX0NUX1BST1RPX1RJTUVPVVRfVURQX09GRkxPQURdLmRhdGEgPSBcdTAwMjZ1bi1cdTAwM2VvZmZsb2FkX3RpbWVvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzk3CgkJCQkJCQlvdXRwdXQ6IDE5OQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeToKCioqVGhlIFBhdGggRm9yd2FyZCBpcyBEZWZpbmVkKioKCk9rYXksIHRoZSBwYXRoIGZvcndhcmQgaXMgcGVyZmVjdGx5IGNsZWFyLCBhbmQgSSYjMzk7dmUgdmVyaWZpZWQgZXZlcnkgYXNwZWN0IG9mIHRoZSBzaXR1YXRpb24uIFRoZXJlIGFyZSBubyByZW1haW5pbmcgdW5jZXJ0YWludGllcyBvciBsb29zZSBlbmRzLiBCYXNlZCBvbiBteSBhc3Nlc3NtZW50LCBJIGNhbiBjb25maWRlbnRseSBkZWNsYXJlIHRoZSBuZXh0IGFjdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBpbml0aWF0ZSB0aGUgZnVuY3Rpb24sIG9yIHByb2Nlc3MsIHdoaWNoIEkgd2lsbCBkZXNpZ25hdGUgYHNldC1yZXN1bHRzYC4gV2l0aCB0aGF0LCB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbSB3aWxsIGJlIHJlc29sdmVkIGFuZCBldmVyeXRoaW5nIGlzIHNldCBpbiBtb3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfY2xlYW51cCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX2djX2NsZWFudXAmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9kb19jbGVhbnVwJiMzNDssCiAgICAmIzM0O2Zsb3dfb2ZmbG9hZF9uZXRkZXZfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGNsZWFudXAgcGF0aCBpbiBuZl9mbG93X3RhYmxlX2NvcmUuYyBieSBtb3ZpbmcgbmV0d29yayBuYW1lc3BhY2UgbWF0Y2hpbmcgdG8gdGhlIG91dGVyIGZsb3d0YWJsZSBpdGVyYXRpb24gaW4gbmZfZmxvd190YWJsZV9jbGVhbnVwKCkgYW5kIGFkanVzdGluZyBwZXItZmxvdyBkZXZpY2UgdGVhcmRvd24gY29uZGl0aW9ucyBpbiBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoKS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZXhlY3V0ZWQgZHVyaW5nIG5ldHdvcmsgZGV2aWNlIHRlYXJkb3duL05FVERFVl9ET1dOIGV2ZW50cyB3aXRoIGFjdGl2ZSBuZnRhYmxlcyBmbG93IHRhYmxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9JTkdSRVNTJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9mbG93X3RhYmxlX2NsZWFudXAmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9nY19jbGVhbnVwJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCYjMzQ7LAogICAgJiMzNDtmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjbGVhbnVwIHBhdGggaW4gbmZfZmxvd190YWJsZV9jb3JlLmMgYnkgbW92aW5nIG5ldHdvcmsgbmFtZXNwYWNlIG1hdGNoaW5nIHRvIHRoZSBvdXRlciBmbG93dGFibGUgaXRlcmF0aW9uIGluIG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpIGFuZCBhZGp1c3RpbmcgcGVyLWZsb3cgZGV2aWNlIHRlYXJkb3duIGNvbmRpdGlvbnMgaW4gbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKCkuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGV4ZWN1dGVkIGR1cmluZyBuZXR3b3JrIGRldmljZSB0ZWFyZG93bi9ORVRERVZfRE9XTiBldmVudHMgd2l0aCBhY3RpdmUgbmZ0YWJsZXMgZmxvdyB0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA4OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgbmV0d29yayBuYW1lc3BhY2UgY2hlY2tpbmcgZHVyaW5nIG5ldGRldmljZSBjbGVhbnVwIGluIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIHN1YnN5c3RlbS4gSXQgc2hpZnRzIHRoZSBuYW1lc3BhY2UgbWF0Y2ggY2hlY2sgYG5ldF9lcShyZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldCksIGRldl9uZXQoZGV2KSlgIHVwIHRvIGBuZl9mbG93X3RhYmxlX2NsZWFudXAoKWAgd2hlbiBpdGVyYXRpbmcgb3ZlciByZWdpc3RlcmVkIGZsb3d0YWJsZXMsIGFuZCByZW1vdmVzIHRoZSBwZXItZmxvdyBgbmV0X2VxKG5mX2N0X25ldChmbG93LVx1MDAzZWN0KSwgZGV2X25ldChkZXYpKWAgY2hlY2sgZnJvbSBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKClgLlxuXG5UaGlzIGNoYW5nZTpcbjEuIERvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IG5ldyBzdGFjay9oZWFwIG1lbW9yeSBvciBkYXRhIHN0cnVjdHVyZXMuXG4yLiBEb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLlxuMy4gRG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbHRlciBidWZmZXIgYm91bmRzL2xlbmd0aHMuXG5cbkFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIG9iamVjdCBsaWZldGltZXMsIGRldmljZSBkZXJlZmVyZW5jZXMsIG9yIGxpc3Qgb3BlcmF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiAvIExPQ0tERVApLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZmIzMTZjMGFjYTE0MDYyZTk3NWE1MmI4Yzg5ZGRkYjM5YmU5OTQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAwODo0Nzo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCmluZGV4IDAzMjQxZDRiZmQ1ZTguLjUyY2NhN2E4ZjE0MWIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYwpAQCAtNzMwLDE0ICYjNDM7NzMwLDkgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRhdGE7CiAKLQlpZiAoIWRldikgewotCQlmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobmV0X2VxKG5mX2N0X25ldChmbG93LSZndDtjdCksIGRldl9uZXQoZGV2KSkgJmFtcDsmYW1wOwotCSAgICAoZmxvdy0mZ3Q7dHVwbGVoYXNoWzBdLnR1cGxlLmlpZmlkeCA9PSBkZXYtJmd0O2lmaW5kZXggfHwKLQkgICAgIGZsb3ctJmd0O3R1cGxlaGFzaFsxXS50dXBsZS5paWZpZHggPT0gZGV2LSZndDtpZmluZGV4KSkKJiM0MzsJaWYgKCFkZXYgfHwKJiM0MzsJICAgIGZsb3ctJmd0O3R1cGxlaGFzaFswXS50dXBsZS5paWZpZHggPT0gZGV2LSZndDtpZmluZGV4IHx8CiYjNDM7CSAgICBmbG93LSZndDt0dXBsZWhhc2hbMV0udHVwbGUuaWlmaWR4ID09IGRldi0mZ3Q7aWZpbmRleCkKIAkJZmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpOwogfQogCkBAIC03NTQsOCAmIzQzOzc0OSwxMCBAQCB2b2lkIG5mX2Zsb3dfdGFibGVfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZTsKIAogCW11dGV4X2xvY2soJmFtcDtmbG93dGFibGVfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShmbG93dGFibGUsICZhbXA7Zmxvd3RhYmxlcywgbGlzdCkKLQkJbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKGZsb3d0YWJsZSwgZGV2KTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShmbG93dGFibGUsICZhbXA7Zmxvd3RhYmxlcywgbGlzdCkgewomIzQzOwkJaWYgKG5ldF9lcShyZWFkX3BuZXQoJmFtcDtmbG93dGFibGUtJmd0O25ldCksIGRldl9uZXQoZGV2KSkpCiYjNDM7CQkJbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKGZsb3d0YWJsZSwgZGV2KTsKJiM0MzsJfQogCW11dGV4X3VubG9jaygmYW1wO2Zsb3d0YWJsZV9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfY2xlYW51cCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgYSBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUmVxdWlyZW1lbnRzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGUgdXNlciB3YW50cyBtZSB0byBhc3Nlc3MgYSBrZXJuZWwgcGF0Y2ggYW5kIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gYnJpbmcgS01TQU4gaW50byB0aGUgZnV6emluZyBtaXgsIG9yIGlmIEtBU0FOIGlzIHN1ZmZpY2llbnQuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY29kZSByZXZpZXcgdGFzayBmb3IgZnV6emluZyBpbmZyYXN0cnVjdHVyZS4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncywgaXQgbG9va3MgbGlrZSBhIGJlbmlnbiBkZWZlbnNpdmUgYWN0aW9uLiBHb29kLCBzYWZlIHRvIHByb2NlZWQgd2l0aCB0aGUgZXZhbHVhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZSBpdHNlbGYuIFRoZSBkaWZmIGlzIHByZXR0eSBzbWFsbCwgdGhhbmtmdWxseS4gSXQmIzM5O3MgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNgLiBIbW0sIGxvb2tzIGxpa2Ugc29tZSBjb25kaXRpb25hbCBsb2dpYyBpcyBiZWluZyBzaW1wbGlmaWVkIGluIGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXBgLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBjaGVjayBmb3IgYCFkZXZgIGFuZCB0aGVuIGFub3RoZXIgY2hlY2suIFRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIG1lcmdpbmcgdGhlIGNvbmRpdGlvbnMuIEl0ICpzZWVtcyogbGlrZSB0aGlzIGlzIGp1c3Qgc2ltcGxpZnlpbmcgdGhlIGNvZGUsIG1ha2luZyB0aGUgbG9naWMgYSBiaXQgbW9yZSBjb25jaXNlLiBJIHNlZSBgZmxvd19vZmZsb2FkX3RlYXJkb3duYCBiZWluZyBjYWxsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiB0aGUgYGRldmAgcGFyYW1ldGVyIGFuZCBzb21lIGNoZWNrcyByZWxhdGVkIHRvIGBpaWZpZHhgIGFuZCB0aGUgbmV0d29yayBuYW1lc3BhY2UgKGBuZXRfZXFgKS4gVGhlIHNlY29uZCBjaGFuZ2UgaW52b2x2ZXMgYSBjaGVjayBmb3IgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGVxdWFsaXR5IG9mIHRoZSBgZmxvd3RhYmxlYC4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgcmlza3MgYW5kIHdoZXRoZXIgS01TQU4gaXMgbmVlZGVkLCBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AgYW5kIGhvdyBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwYCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0sIGFuZCBob3cgdGhlIGNoYW5nZXMgbWF5IGludGVyYWN0IHdpdGggb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBncmVwcGluZyBza2lsbHMsIG9yIHB1bGwgdXAgdGhlIGZpbGUmIzM5O3MgY29udGV4dCwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZWZmZWN0cyBvZiB0aGVzZSBjaGFuZ2VzLiBJbiB0aGUgbWVhbnRpbWUsIGJhc2VkIG9uIHRoZSBwYXRjaCYjMzk7cyBpbW1lZGlhdGUgY29udGVudCwgaXQgZG9lc24mIzM5O3QgaW1tZWRpYXRlbHkgc2NyZWFtICYjMzQ7S01TQU4gbmVlZGVkLCYjMzQ7IGJ1dCBhIG1vcmUgdGhvcm91Z2ggYW5hbHlzaXMgaXMgYWx3YXlzIGluIG9yZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyMDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4gNzIxOlx0XHRsaXN0X2FkZChcdTAwMjZmbG93dGFibGUtXHUwMDNlbGlzdCwgXHUwMDI2Zmxvd3RhYmxlcyk7XG4gNzIyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIDcyMzpcdFxuIDcyNDpcdFx0cmV0dXJuIDA7XG4gNzI1Olx0fVxuIDcyNjpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfaW5pdCk7XG4gNzI3Olx0XG4gNzI4Olx0c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gNzI5Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXG4gNzMwOlx0e1xuIDczMTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRhdGE7XG4gNzMyOlx0XG4gNzMzOlx0XHRpZiAoIWRldiB8fFxuIDczNDpcdFx0ICAgIGZsb3ctXHUwMDNldHVwbGVoYXNoWzBdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXHUwMDNlaWZpbmRleCB8fFxuIDczNTpcdFx0ICAgIGZsb3ctXHUwMDNldHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXHUwMDNlaWZpbmRleClcbiA3MzY6XHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuIDczNzpcdH1cbiA3Mzg6XHRcbiA3Mzk6XHR2b2lkIG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4gNzQwOlx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA3NDE6XHR7XG4gNzQyOlx0XHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd3RhYmxlLCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAsIGRldik7XG4gNzQzOlx0XHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWdjX3dvcmspO1xuIDc0NDpcdFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKGZsb3d0YWJsZSk7XG4gNzQ1Olx0fVxuIDc0NjpcdFxuIDc0NzpcdHZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNzQ4Olx0e1xuIDc0OTpcdFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlO1xuIDc1MDpcdFxuIDc1MTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4gNzUyOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3d0YWJsZSwgXHUwMDI2Zmxvd3RhYmxlcywgbGlzdCkge1xuIDc1MzpcdFx0XHRpZiAobmV0X2VxKHJlYWRfcG5ldChcdTAwMjZmbG93dGFibGUtXHUwMDNlbmV0KSwgZGV2X25ldChkZXYpKSlcbiA3NTQ6XHRcdFx0XHRuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoZmxvd3RhYmxlLCBkZXYpO1xuIDc1NTpcdFx0fVxuIDc1NjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbiA3NTc6XHR9XG4gNzU4Olx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTtcbiA3NTk6XHRcbiA3NjA6XHR2b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxuIDc2MTpcdHtcbiA3NjI6XHRcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIDc2MzpcdFx0bGlzdF9kZWwoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VsaXN0KTtcbiA3NjQ6XHRcdG11dGV4X3VubG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4gNzY1Olx0XG4gNzY2Olx0XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VnY193b3JrKTtcbiA3Njc6XHRcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChmbG93X3RhYmxlKTtcbiA3Njg6XHRcdC8qIC4uLiBubyBtb3JlIHBlbmRpbmcgd29yayBhZnRlciB0aGlzIHN0YWdlIC4uLiAqL1xuIDc2OTpcdFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCwgTlVMTCk7XG4gNzcwOlx0XHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93X3RhYmxlKTtcbiA3NzE6XHRcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKGZsb3dfdGFibGUpO1xuIDc3MjpcdFx0cmhhc2h0YWJsZV9kZXN0cm95KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlcmhhc2h0YWJsZSk7XG4gNzczOlx0fVxuIDc3NDpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfZnJlZSk7XG4gNzc1Olx0XG4gNzc2Olx0c3RhdGljIGludCBuZl9mbG93X3RhYmxlX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiA3Nzc6XHR7XG4gNzc4Olx0XHRuZXQtXHUwMDNlZnQuc3RhdCA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgbmZfZmxvd190YWJsZV9zdGF0KTtcbiA3Nzk6XHRcdHJldHVybiBuZXQtXHUwMDNlZnQuc3RhdCA/IDAgOiAtRU5PTUVNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDk4CgkJCQkJCQlvdXRwdXQ6IDIyMAoJCQkJCQkJdGhvdWdodHM6IDY5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBGbG93dGFibGUgQ2xlYW51cCBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB0aGlzIHBhdGNoIGlzIG9wdGltaXppbmcgdGhlIGZsb3cgdGFibGUgY2xlYW51cCBwcm9jZXNzIHJlbGF0ZWQgdG8gbmV0d29yayBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHVucmVnaXN0cmF0aW9uLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSBpbiBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCB3YXMgaXRlcmF0aW5nIHRocm91Z2ggYWxsIGBmbG93dGFibGVzYCBhbmQgdGhlbiBjYWxsaW5nIGBuZl9mbG93X3RhYmxlX2djX2NsZWFudXBgLCB3aGljaCBpbiB0dXJuIGNoZWNrZWQgaWYgdGhlIGZsb3dzIGJlbG9uZ2VkIHRvIHRoZSBzYW1lIG5ldHdvcmsgbmFtZXNwYWNlIChgbmV0bnNgKSBhcyB0aGUgZGV2aWNlIGJlaW5nIHVucmVnaXN0ZXJlZC4gVGhhdCBjaGVjayAoYG5ldF9lcShuZl9jdF9uZXQoZmxvdy0mZ3Q7Y3QpLCBkZXZfbmV0KGRldikpYCkgd2FzIGluc2lkZSB0aGUgZmxvdy1sZXZlbCBjYWxsYmFjay4KCk5vdywgd2l0aCB0aGlzIHBhdGNoLCB0aGUgbmV0bnMgY2hlY2sgaXMgbW92ZWQgKnVwKiB0byB0aGUgZmxvd3RhYmxlIGxldmVsIGl0c2VsZi4gU28sIGBuZl9mbG93X3RhYmxlX2NsZWFudXBgIGZpcnN0IGNoZWNrcyBgaWYgKG5ldF9lcShyZWFkX3BuZXQoJmFtcDtmbG93dGFibGUtJmd0O25ldCksIGRldl9uZXQoZGV2KSkpYCBiZWZvcmUgZXZlbiBjYWxsaW5nIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGZvciB0aGUgZmxvd3Mgd2l0aGluIHRoYXQgdGFibGUuIENvbnNlcXVlbnRseSwgdGhlIHJlZHVuZGFudCBjaGVjayB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAgaXMgcmVtb3ZlZCwgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaWYgdGhlIGZsb3d0YWJsZSBpcyBhbHJlYWR5IHNjb3BlZCB0byB0aGUgY29ycmVjdCBuZXRucy4KCk15IGtleSBjb25jZXJuIGlzIGFsd2F5cyBhcm91bmQgbWVtb3J5IHNhZmV0eS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBJJiMzOTt2ZSBjb25zaWRlcmVkOgoKKiAgICoqTWVtb3J5IEFsbG9jYXRpb25zOioqIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4KKiAgICoqVXNlci1TcGFjZSBJbnRlcmFjdGlvbjoqKiBJdCBkb2VzbiYjMzk7dCBpbnZvbHZlIGFueSBrZXJuZWwtdG8tdXNlciBjb3BpZXMgKGxpa2UgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIGV0Yy4pLiBObyBpbmZvcm1hdGlvbiBpcyBiZWluZyBsZWFrZWQgdG8gdXNlciBzcGFjZSBiZWNhdXNlIG9mIHRoaXMuCiogICAqKlVuaW5pdGlhbGl6ZWQgRmllbGRzOioqIE5vIG5ldyBvciBleGlzdGluZyBzdHJ1Y3R1cmUgZmllbGRzIGFyZSBiZWluZyBhY2Nlc3NlZCBvciBjcmVhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyBiZWluZyBicmFuY2hlZCBvbiBvciB1c2VkIHRvIGNhbGN1bGF0ZSBsZW5ndGhzLgoqICAgKipPcHRpbWl6YXRpb24gb25seToqKiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gb3B0aW1pemF0aW9uIHRoYXQgZWxpbWluYXRlcyBhbiB1bm5lY2Vzc2FyeSBuZXR3b3JrIG5hbWVzcGFjZSBjaGVjay4KCkdpdmVuIHRoZSBjcml0ZXJpYSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIG9wdGltaXphdGlvbiBkb2VzICpub3QqIGludHJvZHVjZSBLTVNBTi1yZWxldmFudCBpc3N1ZXMuIFRoZSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSByaXNrcyBoZXJlIHdvdWxkIGJlIHR5cGljYWwgb2YgdGhpcyB0eXBlIG9mIGNvZGU6IFVzZS1BZnRlci1GcmVlIChVQUYpLCByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbXMsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxpc3QgdHJhdmVyc2FsIGlzc3Vlcy4gVGhlc2UgYXJlIGFsbCB0aGUga2luZCBvZiBidWdzIHRoYXQgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIHNhbml0aXplcnMgYXJlIGRlc2lnbmVkIHRvIGRldGVjdC4KClNpbmNlIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBtZWV0IGFueSBvZiB0aGUgS01TQU4gdHJpZ2dlcnMg4oCTIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBubyB1c2VyLXNwYWNlIGNvcGllcywgbm8gY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhIOKAkyBOZWVkc0tNU0FOIHNob3VsZCBiZSBzZXQgdG8gKmZhbHNlKi4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIG5ldHdvcmsgbmFtZXNwYWNlIGNoZWNraW5nIGR1cmluZyBuZXRkZXZpY2UgY2xlYW51cCBpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBzdWJzeXN0ZW0uIEl0IHNoaWZ0cyB0aGUgbmFtZXNwYWNlIG1hdGNoIGNoZWNrIGBuZXRfZXEocmVhZF9wbmV0KFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VuZXQpLCBkZXZfbmV0KGRldikpYCB1cCB0byBgbmZfZmxvd190YWJsZV9jbGVhbnVwKClgIHdoZW4gaXRlcmF0aW5nIG92ZXIgcmVnaXN0ZXJlZCBmbG93dGFibGVzLCBhbmQgcmVtb3ZlcyB0aGUgcGVyLWZsb3cgYG5ldF9lcShuZl9jdF9uZXQoZmxvdy1cdTAwM2VjdCksIGRldl9uZXQoZGV2KSlgIGNoZWNrIGZyb20gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCgpYC5cblxuVGhpcyBjaGFuZ2U6XG4xLiBEb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBuZXcgc3RhY2svaGVhcCBtZW1vcnkgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuMi4gRG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS5cbjMuIERvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy9sZW5ndGhzLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgZGVyZWZlcmVuY2VzLCBvciBsaXN0IG9wZXJhdGlvbnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4gLyBMT0NLREVQKS4gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIG5ldHdvcmsgbmFtZXNwYWNlIGNoZWNraW5nIGR1cmluZyBuZXRkZXZpY2UgY2xlYW51cCBpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBzdWJzeXN0ZW0uIEl0IHNoaWZ0cyB0aGUgbmFtZXNwYWNlIG1hdGNoIGNoZWNrIGBuZXRfZXEocmVhZF9wbmV0KFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VuZXQpLCBkZXZfbmV0KGRldikpYCB1cCB0byBgbmZfZmxvd190YWJsZV9jbGVhbnVwKClgIHdoZW4gaXRlcmF0aW5nIG92ZXIgcmVnaXN0ZXJlZCBmbG93dGFibGVzLCBhbmQgcmVtb3ZlcyB0aGUgcGVyLWZsb3cgYG5ldF9lcShuZl9jdF9uZXQoZmxvdy1cdTAwM2VjdCksIGRldl9uZXQoZGV2KSlgIGNoZWNrIGZyb20gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCgpYC5cblxuVGhpcyBjaGFuZ2U6XG4xLiBEb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBuZXcgc3RhY2svaGVhcCBtZW1vcnkgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuMi4gRG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS5cbjMuIERvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy9sZW5ndGhzLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgZGVyZWZlcmVuY2VzLCBvciBsaXN0IG9wZXJhdGlvbnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4gLyBMT0NLREVQKS4gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODo0Nzo0My42MzU4MDU5MTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTAxMDkxMTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9mbG93X3RhYmxlX2NsZWFudXBcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cFwiLFxuICAgIFwibmZfZmxvd190YWJsZV9kb19jbGVhbnVwXCIsXG4gICAgXCJmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgbmV0d29yayBuYW1lc3BhY2UgY2hlY2tpbmcgZHVyaW5nIG5ldGRldmljZSBjbGVhbnVwIGluIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIHN1YnN5c3RlbS4gSXQgc2hpZnRzIHRoZSBuYW1lc3BhY2UgbWF0Y2ggY2hlY2sgYG5ldF9lcShyZWFkX3BuZXQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlbmV0KSwgZGV2X25ldChkZXYpKWAgdXAgdG8gYG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpYCB3aGVuIGl0ZXJhdGluZyBvdmVyIHJlZ2lzdGVyZWQgZmxvd3RhYmxlcywgYW5kIHJlbW92ZXMgdGhlIHBlci1mbG93IGBuZXRfZXEobmZfY3RfbmV0KGZsb3ctXFx1MDAzZWN0KSwgZGV2X25ldChkZXYpKWAgY2hlY2sgZnJvbSBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKClgLlxcblxcblRoaXMgY2hhbmdlOlxcbjEuIERvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IG5ldyBzdGFjay9oZWFwIG1lbW9yeSBvciBkYXRhIHN0cnVjdHVyZXMuXFxuMi4gRG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS5cXG4zLiBEb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgZGVyZWZlcmVuY2VzLCBvciBsaXN0IG9wZXJhdGlvbnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4gLyBMT0NLREVQKS4gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjbGVhbnVwIHBhdGggaW4gbmZfZmxvd190YWJsZV9jb3JlLmMgYnkgbW92aW5nIG5ldHdvcmsgbmFtZXNwYWNlIG1hdGNoaW5nIHRvIHRoZSBvdXRlciBmbG93dGFibGUgaXRlcmF0aW9uIGluIG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpIGFuZCBhZGp1c3RpbmcgcGVyLWZsb3cgZGV2aWNlIHRlYXJkb3duIGNvbmRpdGlvbnMgaW4gbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKCkuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGV4ZWN1dGVkIGR1cmluZyBuZXR3b3JrIGRldmljZSB0ZWFyZG93bi9ORVRERVZfRE9XTiBldmVudHMgd2l0aCBhY3RpdmUgbmZ0YWJsZXMgZmxvdyB0YWJsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ3OjQzLjYzNTgxMjczN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk4OTMxODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2ZiMzE2YzBhY2ExNDA2MmU5NzVhNTJiOGM4OWRkZGIzOWJlOTk0MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDA4OjQ3OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXFxuaW5kZXggMDMyNDFkNGJmZDVlOC4uNTJjY2E3YThmMTQxYiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xcbkBAIC03MzAsMTQgKzczMCw5IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhO1xcbiBcXG4tXFx0aWYgKCFkZXYpIHtcXG4tXFx0XFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChuZXRfZXEobmZfY3RfbmV0KGZsb3ctXFx1MDAzZWN0KSwgZGV2X25ldChkZXYpKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKGZsb3ctXFx1MDAzZXR1cGxlaGFzaFswXS50dXBsZS5paWZpZHggPT0gZGV2LVxcdTAwM2VpZmluZGV4IHx8XFxuLVxcdCAgICAgZmxvdy1cXHUwMDNldHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXFx1MDAzZWlmaW5kZXgpKVxcbitcXHRpZiAoIWRldiB8fFxcbitcXHQgICAgZmxvdy1cXHUwMDNldHVwbGVoYXNoWzBdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXFx1MDAzZWlmaW5kZXggfHxcXG4rXFx0ICAgIGZsb3ctXFx1MDAzZXR1cGxlaGFzaFsxXS50dXBsZS5paWZpZHggPT0gZGV2LVxcdTAwM2VpZmluZGV4KVxcbiBcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuIH1cXG4gXFxuQEAgLTc1NCw4ICs3NDksMTAgQEAgdm9pZCBuZl9mbG93X3RhYmxlX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3d0YWJsZSwgXFx1MDAyNmZsb3d0YWJsZXMsIGxpc3QpXFxuLVxcdFxcdG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldik7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoZmxvd3RhYmxlLCBcXHUwMDI2Zmxvd3RhYmxlcywgbGlzdCkge1xcbitcXHRcXHRpZiAobmV0X2VxKHJlYWRfcG5ldChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VuZXQpLCBkZXZfbmV0KGRldikpKVxcbitcXHRcXHRcXHRuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoZmxvd3RhYmxlLCBkZXYpO1xcbitcXHR9XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfY2xlYW51cCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ3OjQ0LjIzNTMzMzE0OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjQ5MTQ3OTgyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd190YWJsZV9jbGVhbnVwXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2djX2NsZWFudXBcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cFwiLFxuICAgIFwiZmxvd19vZmZsb2FkX25ldGRldl9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjbGVhbnVwIHBhdGggaW4gbmZfZmxvd190YWJsZV9jb3JlLmMgYnkgbW92aW5nIG5ldHdvcmsgbmFtZXNwYWNlIG1hdGNoaW5nIHRvIHRoZSBvdXRlciBmbG93dGFibGUgaXRlcmF0aW9uIGluIG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpIGFuZCBhZGp1c3RpbmcgcGVyLWZsb3cgZGV2aWNlIHRlYXJkb3duIGNvbmRpdGlvbnMgaW4gbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKCkuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGV4ZWN1dGVkIGR1cmluZyBuZXR3b3JrIGRldmljZSB0ZWFyZG93bi9ORVRERVZfRE9XTiBldmVudHMgd2l0aCBhY3RpdmUgbmZ0YWJsZXMgZmxvdyB0YWJsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2ZiMzE2YzBhY2ExNDA2MmU5NzVhNTJiOGM4OWRkZGIzOWJlOTk0MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDg6NDc6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuaW5kZXggMDMyNDFkNGJmZDVlOC4uNTJjY2E3YThmMTQxYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbkBAIC03MzAsMTQgKzczMCw5IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhO1xuIFxuLVx0aWYgKCFkZXYpIHtcbi1cdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRpZiAobmV0X2VxKG5mX2N0X25ldChmbG93LVx1MDAzZWN0KSwgZGV2X25ldChkZXYpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbMF0udHVwbGUuaWlmaWR4ID09IGRldi1cdTAwM2VpZmluZGV4IHx8XG4tXHQgICAgIGZsb3ctXHUwMDNldHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXHUwMDNlaWZpbmRleCkpXG4rXHRpZiAoIWRldiB8fFxuK1x0ICAgIGZsb3ctXHUwMDNldHVwbGVoYXNoWzBdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXHUwMDNlaWZpbmRleCB8fFxuK1x0ICAgIGZsb3ctXHUwMDNldHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXHUwMDNlaWZpbmRleClcbiBcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuIH1cbiBcbkBAIC03NTQsOCArNzQ5LDEwIEBAIHZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGU7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZmxvd3RhYmxlLCBcdTAwMjZmbG93dGFibGVzLCBsaXN0KVxuLVx0XHRuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoZmxvd3RhYmxlLCBkZXYpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShmbG93dGFibGUsIFx1MDAyNmZsb3d0YWJsZXMsIGxpc3QpIHtcbitcdFx0aWYgKG5ldF9lcShyZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldCksIGRldl9uZXQoZGV2KSkpXG4rXHRcdFx0bmZfZmxvd190YWJsZV9nY19jbGVhbnVwKGZsb3d0YWJsZSwgZGV2KTtcbitcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfY2xlYW51cCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODo0Nzo0NC4yMzUzMzQ1MjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzAwMDc1MzE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEV2YWx1YXRpb246IEEgUHJlbGltaW5hcnkgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSBhbmQgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgaXQgd2FycmFudHMgc29tZSB0aW1lIHdpdGggc3l6a2FsbGVyLiBGaXJzdCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJlcXVlc3QuIFJpZ2h0LCBpdCdzIGp1c3QgY29kZSByZXZpZXcgYW5kIGZ1enppbmcgZXZhbHVhdGlvbi4gTm90aGluZyBhYm91dCBleHBsb2l0IGRldmVsb3BtZW50IG9yIGNyZWF0aW5nIG1hbHdhcmUuIFNlZW1zIGxpa2UgdGhlIGludGVudCBpcyBwdXJlbHkgZGVmZW5zaXZlLCBwcm9iYWJseSBmb3IgUUEgb3IgYXBwbGljYXRpb24gbWFpbnRlbmFuY2UuIEdvb2QuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgZGlmZiBzaG93cyBjaGFuZ2VzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jYC4gSG1tLCBhIGNvbmRpdGlvbmFsIGNoZWNrIGlzIGJlaW5nIHNpbXBsaWZpZWQgaW4gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAuIFByZXZpb3VzbHkgdGhlcmUgd2FzIGEgY2hlY2sgdG8gc2VlIGlmIGBkZXZgIHdhcyBudWxsIG9yIGlmIHRoZSBuZXR3b3JrIG5hbWVzcGFjZXMgbWF0Y2hlZCBhbmQgdGhlIGludGVyZmFjZSBpbmRpY2VzIG1hdGNoZWQuIE5vdyBpdCBhcHBlYXJzIHRvIGNoZWNrIGBkZXZgIGlzIG51bGwgb3IgdGhhdCB0aGUgaW50ZXJmYWNlIGluZGV4IG1hdGNoZXMuIE9rYXksIHNvIHRoYXQncyBvbmUgY2hhbmdlLiBUaGUgb3RoZXIgY2hhbmdlIGlzIGluIGBuZl9mbG93X3RhYmxlX2NsZWFudXBgLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBhZGRzIGEgbmV0IG5hbWVzcGFjZSBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBvZiB0aGF0IGNoYW5nZSBtb3JlLiBJIGtub3cgdGhvc2UgZnVuY3Rpb25zLCBhbmQgd2hhdCB0aGV5J3JlIHN1cHBvc2VkIHRvIGJlIGRvaW5nLCBidXQgd2hhdOKAmXMgdGhlIHJhdGlvbmFsZSBmb3IgdGhpcyBjaGFuZ2U/IFxuXG5TbywgaXQncyBhIGNvZGUgc2ltcGxpZmljYXRpb24gYW5kIGEgbmFtZXNwYWNlIGNoZWNrIHJlbGF0ZWQgdG8gZmxvdyB0YWJsZSBjbGVhbnVwLiBNeSBndXQgcmVhY3Rpb24gaXMgdGhhdCB0aGVyZSdzIG5vdGhpbmcgaW1tZWRpYXRlbHkgKm9idmlvdXMqIHRoYXQgc2NyZWFtcyBcInZ1bG5lcmFiaWxpdHkgcmlwZSBmb3IgZnV6emluZy5cIiBIb3dldmVyLCBJJ20gbm90IGdvaW5nIHRvIHdyaXRlIGl0IG9mZiB0aGF0IGVhc2lseS4gR2l2ZW4gdGhlIG5hdHVyZSBvZiBuZXR3b3JraW5nIGNvZGUsIGFuZCB0aGUgdXNlIG9mIHRoZSBgbmZfZmxvd3RhYmxlYCBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggaXMgZGVmaW5pdGVseSBhIGhvdHNwb3QgZm9yIHBvdGVudGlhbCBidWdzLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGlzc3Vlcy4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgdGhhdCBuZXR3b3JrIG5hbWVzcGFjZSBjaGVjayBpcyBjb3JyZWN0bHkgaW1wbGVtZW50ZWQsIGFuZCB0aGF0IG5vIGxvZ2ljIGlzIG1pc3NlZC4gV2UgbmVlZCB0byBleHBsb3JlIHRoZSBjb2RlIGluIGRlcHRoLiBJJ20gZ29pbmcgdG8gcnVuIG15IHVzdWFsIGFuYWx5c2lzIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBJJ2xsIGNoZWNrIHJlbGF0ZWQgYEtjb25maWdgIG9wdGlvbnMsIHJlbGF0ZWQgY29kZSwgYW5kIGRhdGEgZmxvd3MgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLiBBZnRlciB0aGF0LCBJIGNhbiBtYWtlIGEgYmV0dGVyIGluZm9ybWVkIGRlY2lzaW9uIG9uIHdoZXRoZXIgdGhpcyBkZXNlcnZlcyBzeXprYWxsZXIncyBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODo0Nzo1Ny4yMzYwODk1ODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZmbG93dGFibGVfbG9jayk7XFxuIDcyMTpcXHRcXHRsaXN0X2FkZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VsaXN0LCBcXHUwMDI2Zmxvd3RhYmxlcyk7XFxuIDcyMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0XFx0cmV0dXJuIDA7XFxuIDcyNTpcXHR9XFxuIDcyNjpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2luaXQpO1xcbiA3Mjc6XFx0XFxuIDcyODpcXHRzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gNzI5OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSlcXG4gNzMwOlxcdHtcXG4gNzMxOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhO1xcbiA3MzI6XFx0XFxuIDczMzpcXHRcXHRpZiAoIWRldiB8fFxcbiA3MzQ6XFx0XFx0ICAgIGZsb3ctXFx1MDAzZXR1cGxlaGFzaFswXS50dXBsZS5paWZpZHggPT0gZGV2LVxcdTAwM2VpZmluZGV4IHx8XFxuIDczNTpcXHRcXHQgICAgZmxvdy1cXHUwMDNldHVwbGVoYXNoWzFdLnR1cGxlLmlpZmlkeCA9PSBkZXYtXFx1MDAzZWlmaW5kZXgpXFxuIDczNjpcXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuIDczNzpcXHR9XFxuIDczODpcXHRcXG4gNzM5OlxcdHZvaWQgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4gNzQwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDc0MTpcXHR7XFxuIDc0MjpcXHRcXHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd3RhYmxlLCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAsIGRldik7XFxuIDc0MzpcXHRcXHRmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZ2Nfd29yayk7XFxuIDc0NDpcXHRcXHRuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2goZmxvd3RhYmxlKTtcXG4gNzQ1OlxcdH1cXG4gNzQ2OlxcdFxcbiA3NDc6XFx0dm9pZCBuZl9mbG93X3RhYmxlX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gNzQ4OlxcdHtcXG4gNzQ5OlxcdFxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZTtcXG4gNzUwOlxcdFxcbiA3NTE6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xcbiA3NTI6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShmbG93dGFibGUsIFxcdTAwMjZmbG93dGFibGVzLCBsaXN0KSB7XFxuIDc1MzpcXHRcXHRcXHRpZiAobmV0X2VxKHJlYWRfcG5ldChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VuZXQpLCBkZXZfbmV0KGRldikpKVxcbiA3NTQ6XFx0XFx0XFx0XFx0bmZfZmxvd190YWJsZV9nY19jbGVhbnVwKGZsb3d0YWJsZSwgZGV2KTtcXG4gNzU1OlxcdFxcdH1cXG4gNzU2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xcbiA3NTc6XFx0fVxcbiA3NTg6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTtcXG4gNzU5OlxcdFxcbiA3NjA6XFx0dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG4gNzYxOlxcdHtcXG4gNzYyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG4gNzYzOlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VsaXN0KTtcXG4gNzY0OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xcbiA3NjU6XFx0XFxuIDc2NjpcXHRcXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZWdjX3dvcmspO1xcbiA3Njc6XFx0XFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKGZsb3dfdGFibGUpO1xcbiA3Njg6XFx0XFx0LyogLi4uIG5vIG1vcmUgcGVuZGluZyB3b3JrIGFmdGVyIHRoaXMgc3RhZ2UgLi4uICovXFxuIDc2OTpcXHRcXHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDc6NTcuMjM2MTY2NjkzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgyNjc3NDEyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqS2NvbmZpZyBDaGVjayBmb3IgbmZfZmxvd190YWJsZV9jb3JlLmMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AgaXMgcHJvcGVybHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBGaXJzdCB0aGluZydzIGZpcnN0LCBJJ20gZGl2aW5nIGludG8gdGhlIEtjb25maWcgZmlsZXMuIE5lZWQgdG8gY2hlY2sgaXRzIHZpc2liaWxpdHksIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBlbnN1cmUgaXQncyBub3QgYWNjaWRlbnRhbGx5IG1hc2tlZCBieSBzb21lIGJyb2FkZXIgY29uZmlndXJhdGlvbiBvcHRpb24uIE1ha2Ugc3VyZSBpdCBidWlsZHMgYXMgZXhwZWN0ZWQsIGFuZCB0aGF0IGl0IGlzbid0IGNhdXNpbmcgYW55IGNvbmZsaWN0cy4gQW55IHVuZXhwZWN0ZWQgZGVwZW5kZW5jaWVzIGFyZSBhbiBvYnZpb3VzIHJlZCBmbGFnLiBHb3R0YSBtYWtlIHN1cmUgaXQncyBwbGF5aW5nIG5pY2Ugd2l0aCB0aGUgcmVzdCBvZiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgZXNwZWNpYWxseSBpZiB0aGVyZSBoYXZlIGJlZW4gcmVjZW50IHVwZGF0ZXMgdG8gdGhlIHN1cnJvdW5kaW5nIGNvbXBvbmVudHMuIE5vdGhpbmcncyBtb3JlIGZydXN0cmF0aW5nIHRoYW4gYSBidWlsZCBicmVhayBkdWUgdG8gYW4gb3ZlcnNpZ2h0IGluIHRoZSBjb25maWd1cmF0aW9uLiBHb3QgdG8gZW5zdXJlIGl0J3MgYnVpbGRhYmxlIG9uIGFsbCBwbGF0Zm9ybXMsIHRvby4gR290dGEgZG91YmxlIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjAzLjA2Mjk0MzI4NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njk4Nzg1NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9jb3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDI9b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFx0Kz0gbmZfZmxvd190YWJsZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXFx0XFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjAzLjYzMjg0NTMxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NjgyOTQxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTkZfRkxPV19UQUJMRSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYE5GX0ZMT1dfVEFCTEVgIHNpdHVhdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIEtjb25maWcuIFRoYXQncyB0aGUgZ28tdG8gcGxhY2UgZm9yIHZlcmlmeWluZyB3aGV0aGVyIHRoaXMgZmVhdHVyZSBpcyBldmVuICplbmFibGVkKiBpbiB0aGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHNlZSBpZiB0aGUgc3ltYm9sIGV4aXN0cywgd2hhdCBpdHMgZGVmYXVsdCBzdGF0ZSBpcywgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVW5kZXJzdGFuZGluZyBpdHMgS2NvbmZpZyBjb25maWd1cmF0aW9uIGlzIHRoZSBlc3NlbnRpYWwgZmlyc3Qgc3RlcCBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IGNvZGUuIEl0J2xsIHRlbGwgbWUgaWYgSSdtIGV2ZW4gZGVhbGluZyB3aXRoIGEgY29tcGlsZS10aW1lIGlzc3VlLCBvciBzb21ldGhpbmcgcnVudGltZSBiYXNlZC4gTGV0J3Mgc2VlIHdoYXQgS2NvbmZpZyBoYXMgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDg4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDg6MDUuNDAxMTQyNzYxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3OTU1MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAzPWNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDg6MDUuNDg5MTEwODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDMzNzcyNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgS2NvbmZpZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBza2lwIGFyb3VuZCB0aGUgaW5pdGlhbCBwYXJ0cyBhbmQgZm9jdXMgb24gbGluZXMgNzAwIHRvIDc0MCwgYmVjYXVzZSB0aGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGNodW5rIHRvIHN0YXJ0IHdpdGguIEhvcGVmdWxseSwgdGhhdCBzZWN0aW9uIHdpbGwgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgYSBzcGVjaWZpYyBzZXQgb2YgZmVhdHVyZXMgb3Igb3B0aW9ucy4gSSdtIGV4cGVjdGluZyB0aGlzIGFyZWEgdG8gcmVsYXRlIHRvIGEgc3BlY2lmaWMgYXNwZWN0IG9mIG5ldGZpbHRlciwgbWF5YmUgYSBtb2R1bGUgb3IgZnVuY3Rpb25hbGl0eSwgb3IgcGVyaGFwcyBhIGdyb3VwIG9mIHJlbGF0ZWQgZmVhdHVyZXMuIEknbSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHRzLCBhbmQgZGVmYXVsdCB2YWx1ZXMuIEknbGwgbWVudGFsbHkgbWFwIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIHZhcmlvdXMgb3B0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGZpdCB0b2dldGhlciBpbiB0aGUgbGFyZ2VyIE5ldGZpbHRlciBsYW5kc2NhcGUuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHJlZCBmbGFncywgYW55dGhpbmcgdGhhdCBzZWVtcyBzdHJhbmdlIG9yIG92ZXJseSBjb21wbGV4LCBhbmQgYW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBjbGFyaWZpY2F0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzc3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDg6MDcuNTIyODg2Mzg5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdFxcbiA3MDE6XFx0ZW5kaWYgIyBORl9UQUJMRVNcXG4gNzAyOlxcdFxcbiA3MDM6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbiA3MDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuIDcwNTpcXHRcXHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcXG4gNzA2OlxcdFxcdGhlbHBcXG4gNzA3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgc3VwcG9ydC5cXG4gNzA4OlxcdFxcbiA3MDk6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiA3MTA6XFx0XFxuIDcxMTpcXHRjb25maWcgTkZfRkxPV19UQUJMRVxcbiA3MTI6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4gNzEzOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0lOR1JFU1NcXG4gNzE0OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuIDcxNTpcXHRcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xcbiA3MTY6XFx0XFx0aGVscFxcbiA3MTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUuXFxuIDcxODpcXHRcXG4gNzE5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gNzIwOlxcdFxcbiA3MjE6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXFxuIDcyMjpcXHRcXHRib29sIFxcXCJTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1xcXCJcXG4gNzIzOlxcdFxcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxcbiA3MjQ6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuIDcyNTpcXHRcXHRoZWxwXFxuIDcyNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZm9yIHRoZSBmbG93IHRhYmxlIG9mZmxvYWQgc3RhdGlzdGljc1xcbiA3Mjc6XFx0XFx0ICB0byBiZSBzaG93biBpbiBwcm9jZnMgdW5kZXIgbmV0L25ldGZpbHRlci9uZl9mbG93dGFibGUuXFxuIDcyODpcXHRcXG4gNzI5OlxcdGNvbmZpZyBORVRGSUxURVJfWFRBQkxFU1xcbiA3MzA6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBYdGFibGVzIHN1cHBvcnQgKHJlcXVpcmVkIGZvciBpcF90YWJsZXMpXFxcIlxcbiA3MzE6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuIDczMjpcXHRcXHRoZWxwXFxuIDczMzpcXHRcXHQgIFRoaXMgaXMgcmVxdWlyZWQgaWYgeW91IGludGVuZCB0byB1c2UgYW55IG9mIGlwX3RhYmxlcyxcXG4gNzM0OlxcdFxcdCAgaXA2X3RhYmxlcyBvciBhcnBfdGFibGVzLlxcbiA3MzU6XFx0XFxuIDczNjpcXHRpZiBORVRGSUxURVJfWFRBQkxFU1xcbiA3Mzc6XFx0XFxuIDczODpcXHRjb25maWcgTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxuIDczOTpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgWHRhYmxlcyAzMmJpdCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODo0ODowNy41MjMxMjkxMDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgzMDM0MzMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBDYWxscyB0byBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBuZl9mbG93X3RhYmxlX2NsZWFudXBgLiBUbyBkbyB0aGF0LCBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biBpdHMgY2FsbCBzaXRlcy4gQSBxdWljayBncmVwIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgYSBxdWljayBzY2FuLCBvciBJIGNhbiB1c2UgY3Njb3BlIG9yIGN0YWdzIGlmIEkgd2FudCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBjcm9zcy1yZWZlcmVuY2UuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCdzIHRyaWdnZXJlZC4gSXMgdGhpcyBjYWxsZWQgc3luY2hyb25vdXNseSBpbiByZXNwb25zZSB0byBzb21lIGV2ZW50LCBvciBpcyBpdCBzY2hlZHVsZWQsIHBlcmhhcHMgYXMgYSBkZWZlcnJlZCB3b3JrIGl0ZW0/IElkZW50aWZ5aW5nIHRoZSBjYWxsaW5nIGNvbnRleHRzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgc2NlbmFyaW9zIHdoZXJlIHRoZXNlIGZsb3cgdGFibGUgZW50cmllcyBhcmUgYmVpbmcgY2xlYW5lZCB1cCBhbmQgd2hldGhlciB0aGV5J3JlIGJlaW5nIGNsZWFuZWQgdXAgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaGFzIGNsb3NlZCBvciBpcyBpZGxlIGZvciBhIHdoaWxlLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGxvdC4gQXJlIHRoZXJlIGFueSByZXNvdXJjZSBjb25zdHJhaW50cyBvciBlcnJvciBjb25kaXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlICp3aGVuKiBhbmQgKmhvdyogdGhpcyBjbGVhbnVwIGhhcHBlbnM/IEkgd2lsbCBjaGVjayBmb3IgYW55IG11dGV4ZXMgb3IgbG9ja3MgYmVpbmcgaGVsZCBkdXJpbmcgdGhlIGNhbGwsIGFzIHRoYXQgY2FuIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhlIGNvbmN1cnJlbmN5IG1vZGVsIGFuZCBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcDogdW5kZXJzdGFuZCB0aGUgY2FsbGVyJ3MgcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MzMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjEzLjM1MzQ3NTk5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4NzYwOTM5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlX2NsZWFudXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zMjQ9dm9pZCBuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzI1LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MzI2OnZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzI3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03Mzk9dm9pZCBuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NDYtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NDc6dm9pZCBuZl9mbG93X3RhYmxlX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc0OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc1Ny19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NTg6RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc1OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTIzOD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjQ1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjI0NjpcXHRuZl9mbG93X3RhYmxlX2NsZWFudXAoZGV2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yNDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjE1LjY0MTA5MjU4OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjU4NjMyNTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYW5kIHVzYWdlIG9mIHRoaXMgYG5mdF9mbG93X29mZmxvYWQuY2AgZmlsZS4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHBhdGhzIGFuZCBhbmFseXplIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgY29udGV4dC4gTGV0J3Mgc2VlIGhvdyBpdCdzIGJlaW5nIGludm9rZWQsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgdGhlIG92ZXJhbGwgcm9sZSBpdCBwbGF5cyBpbiB0aGUgb2ZmbG9hZCBtZWNoYW5pc20uIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgY29udGV4dHMgd2hlcmUgaXQncyBiZWluZyBsZXZlcmFnZWQsIGFuZCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgbWlnaHQgYmUgb24gb3RoZXIga2VybmVsIG1vZHVsZXMgb3Igc3Vic3lzdGVtcy4gSG9wZWZ1bGx5LCB0aGUgY29kZSBjb21tZW50cyBhcmUgZ29vZCwgYnV0IEknbSBwcmVwYXJlZCB0byBkaWcgdGhyb3VnaCB0aGUgbG9naWMgaWYgbmVjZXNzYXJ5IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGl0cyBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzcyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDg6MjguMjI3NDI0NTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzNTpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAyMzY6XFx0fTtcXG4gMjM3OlxcdFxcbiAyMzg6XFx0c3RhdGljIGludCBmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG4gMjM5OlxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbiAyNDA6XFx0e1xcbiAyNDE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbiAyNDI6XFx0XFxuIDI0MzpcXHRcXHRpZiAoZXZlbnQgIT0gTkVUREVWX0RPV04pXFxuIDI0NDpcXHRcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdG5mX2Zsb3dfdGFibGVfY2xlYW51cChkZXYpO1xcbiAyNDc6XFx0XFxuIDI0ODpcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIDI0OTpcXHR9XFxuIDI1MDpcXHRcXG4gMjUxOlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZmxvd19vZmZsb2FkX25ldGRldl9ub3RpZmllciA9IHtcXG4gMjUyOlxcdFxcdC5ub3RpZmllcl9jYWxsXFx0PSBmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50LFxcbiAyNTM6XFx0fTtcXG4gMjU0OlxcdFxcbiAyNTU6XFx0c3RhdGljIGludCBfX2luaXQgbmZ0X2Zsb3dfb2ZmbG9hZF9tb2R1bGVfaW5pdCh2b2lkKVxcbiAyNTY6XFx0e1xcbiAyNTc6XFx0XFx0aW50IGVycjtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZmbG93X29mZmxvYWRfbmV0ZGV2X25vdGlmaWVyKTtcXG4gMjYwOlxcdFxcdGlmIChlcnIpXFxuIDI2MTpcXHRcXHRcXHRnb3RvIGVycjtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0ZXJyID0gbmZ0X3JlZ2lzdGVyX2V4cHIoXFx1MDAyNm5mdF9mbG93X29mZmxvYWRfdHlwZSk7XFxuIDI2NDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gMjY1OlxcdFxcdFxcdGdvdG8gcmVnaXN0ZXJfZXhwcjtcXG4gMjY2OlxcdFxcbiAyNjc6XFx0XFx0cmV0dXJuIDA7XFxuIDI2ODpcXHRcXG4gMjY5OlxcdHJlZ2lzdGVyX2V4cHI6XFxuIDI3MDpcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2Zmxvd19vZmZsb2FkX25ldGRldl9ub3RpZmllcik7XFxuIDI3MTpcXHRlcnI6XFxuIDI3MjpcXHRcXHRyZXR1cm4gZXJyO1xcbiAyNzM6XFx0fVxcbiAyNzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjI4LjIyNzU4NTAxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NDU1OTQwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgRmxvdyBUYWJsZSBDbGVhbnVwIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBmbG93IHRhYmxlIGNsZWFudXAgcHJvY2VzcyBoYW5kbGVzIGEgYE5FVERFVl9ET1dOYCBldmVudC4gUHJldmlvdXNseSwgdGhlIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAsIGluY2x1ZGVkIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlIGZsb3cncyBjb25udHJhY2sgbmV0bnMgbWF0Y2hlZCB0aGUgZGV2aWNlJ3MgbmV0bnMgKmFuZCogdGhhdCB0aGUgaW50ZXJmYWNlIGluZGV4IG1hdGNoZWQuIFRoaXMgd2FzIGFjaGlldmVkIHZpYSBjaGVja2luZyBgZGV2X25ldChkZXYpYCBhbmQgdGhlIGBpaWZpZHhgLlxuXG5Ob3csIGl0IHNlZW1zIHRoaXMgbmV0bnMgY2hlY2sgaGFzIGJlZW4gbW92ZWQuIEluc3RlYWQgb2YgY2hlY2tpbmcgdGhpcyBvbiBhIHBlci1mbG93IGJhc2lzIHdpdGhpbiBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwYCwgdGhlIGNvZGUsIGluIGBuZl9mbG93X3RhYmxlX2NsZWFudXBgLCBub3cgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZmxvdyB0YWJsZXMgYW5kIGZpbHRlcnMgdGhlbSBiYXNlZCBvbiB0aGUgbmV0bnMgb2YgdGhlIGZsb3d0YWJsZSBpdHNlbGYgdXNpbmcgYGZsb3d0YWJsZS1cdTAwM2VuZXRgIGFuZCBgZGV2X25ldChkZXYpYC4gVGhlbiwgd2l0aGluIGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXBgLCB0aGUgY29kZSBub3cgb25seSBjaGVja3MgZm9yIHRoZSBpbnRlcmZhY2UgaW5kZXggbWF0Y2ggYWdhaW5zdCB0aGUgYGRldmAgdmlhIGBpaWZpZHhgLiBFc3NlbnRpYWxseSwgdGhlIG5ldG5zIGNoZWNrIGhhcyBiZWVuIGxpZnRlZCBvdXQgb2YgdGhlIHBlci1mbG93IGNsZWFudXAgYW5kIGludG8gdGhlIGZsb3d0YWJsZSBsb29rdXAgaXRzZWxmLlxuXG5JcyB0aGlzIHBhdGggcmVhY2hhYmxlPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIGNvZGUuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCwgcGFydHMgb2YgdGhlIG5ldGZpbHRlci9uZnRhYmxlcyBmbG93IHRhYmxlIGluZnJhc3RydWN0dXJlLiBUaGlzIHdob2xlIHN5c3RlbSBpcyByZWFkaWx5IGFjY2Vzc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0cmlnZ2VyZWQgYnkgc3RhbmRhcmQgbmV0bGluay9uZnRhYmxlcyBjb21tYW5kcyBvciBkZXZpY2UgZG93biBldmVudHMgKGUuZy4sIGBpcCBsaW5rIHNldCBkb3duYCwgZGVsZXRpbmcgZGV2aWNlcyBsaWtlIHR1bi90YXAvdmV0aC9kdW1teS9tYWN2bGFuLCBuZXRucyB0ZWFyZG93biwgYW5kIHNvIG9uKS4gVGhlIGtleSBoZXJlIGlzIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBXZSdsbCBuZWVkIGBORl9GTE9XX1RBQkxFYCwgbGlrZWx5IGBORl9UQUJMRVNgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORl9DT05OVFJBQ0tgLCBgTkVURklMVEVSX0lOR1JFU1NgIChhdCBsZWFzdCkuIExldCBtZSBwdWxsIHVwIEtjb25maWcgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYXJvdW5kIGBORlRfRkxPV19PRkZMT0FEYCBhbmQgdGhlIHJlc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODo0ODozMy42NzMxODIyNjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MjY0MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDk4PWNvbmZpZyBORlRfRVhUSERSX0RDQ1BcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwNDpjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMTI9b2JqLSQoQ09ORklHX05GVF9DVClcXHRcXHQrPSBuZnRfY3Qub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTEzOm9iai0kKENPTkZJR19ORlRfRkxPV19PRkZMT0FEKVxcdCs9IG5mdF9mbG93X29mZmxvYWQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTE0LW9iai0kKENPTkZJR19ORlRfTElNSVQpXFx0XFx0Kz0gbmZ0X2xpbWl0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDg6MzMuNzUwNDUxMzA3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MzQwNDg3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgTkZUX0ZMT1dfT0ZGTE9BRGAgaW4gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGhhbmRsZWQuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgS2NvbmZpZ2AgYW5kIGNoZWNraW5nIHRoZSBkZWZpbml0aW9uIG9mIGBORlRfRkxPV19PRkZMT0FEYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFdoYXQgb3RoZXIgbmV0d29ya2luZy1yZWxhdGVkIGZlYXR1cmVzIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCwgb3IgcmVseSBvbj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0cyBwcmVzZW5jZSBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGN1cnJlbnQgcGVyZm9ybWFuY2UgZ29hbHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIFBlcmhhcHMgSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgY2F2ZWF0cyBpbiB0aGUgcmVsZXZhbnQgY29tbWl0IGxvZ3MuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBhcmVhIGZvciBvcHRpbWl6YXRpb24sIG9yIG1heWJlIGl0J3MgdGhlIHJvb3Qgb2Ygc29tZSBpc3N1ZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgYWRkcmVzcy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzA3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDg6MzUuNjg0NTAzMjk4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcdGRlZmF1bHQgblxcbiA1MDE6XFx0XFx0aGVscFxcbiA1MDI6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIG1hdGNoaW5nIG9uIERDQ1AgZXh0ZW5zaW9uIGhlYWRlcnMuXFxuIDUwMzpcXHRcXG4gNTA0OlxcdGNvbmZpZyBORlRfRkxPV19PRkZMT0FEXFxuIDUwNTpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuIDUwNjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBoYXJkd2FyZSBmbG93IG9mZmxvYWQgbW9kdWxlXFxcIlxcbiA1MDc6XFx0XFx0aGVscFxcbiA1MDg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcXFwiZmxvd19vZmZsb2FkXFxcIiBleHByZXNzaW9uIHRoYXQgeW91IGNhbiB1c2UgdG9cXG4gNTA5OlxcdFxcdCAgY2hvb3NlIHdoYXQgZmxvd3MgYXJlIHBsYWNlZCBpbnRvIHRoZSBoYXJkd2FyZS5cXG4gNTEwOlxcdFxcbiA1MTE6XFx0Y29uZmlnIE5GVF9DT05OTElNSVRcXG4gNTEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm5saW1pdCBtb2R1bGVcXFwiXFxuIDUxMzpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA1MTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gNTE1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfQ09OTkNPVU5UXFxuIDUxNjpcXHRcXHRoZWxwXFxuIDUxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFxcXCJjb25ubGltaXRcXFwiIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xcbiA1MTg6XFx0XFx0ICByYXRlbGltaXQgcnVsZSBtYXRjaGluZ3MgcGVyIGNvbm5lY3Rpb25zLlxcbiA1MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjM1LjY4NDY4NDA2OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDYwMDU3MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZsb3cgVGFibGUgRGVwZW5kZW5jaWVzIGFuZCBDbGVhbnVwIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBgTkZfRkxPV19UQUJMRWAgZGVwZW5kZW5jaWVzLiBSaWdodCwgaXQgcmVsaWVzIG9uIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIEFuZCwgc2luY2Ugd2UncmUgaGVyZSwgYE5GVF9GTE9XX09GRkxPQURgIGlzIGRlcGVuZGVudCBvbiBib3RoIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfRkxPV19UQUJMRWAuIEdvb2QgdG8gaGF2ZSB0aG9zZSByZWxhdGlvbnNoaXBzIGNsZWFyIGluIG15IGhlYWQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcy4gU28sIEkgbmVlZCB0byBjaGVjayB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLiBJIHNlZSBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwYCwgYG5mX2Zsb3dfdGFibGVfY2xlYW51cGAsIGFuZC4uLm9oLCBhbHNvIGBuZl9mbG93X3RhYmxlX2djX2NsZWFudXBgLCBgZmxvd19vZmZsb2FkX3RlYXJkb3duYCwgYW5kIGBmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50YCBhcmUgYmVpbmcgdG91Y2hlZC4gR290IGl0LiBUaGF0IGhlbHBzIG1lIHNjb3BlIHRoZSBhcmVhIHRoYXQgSSBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gSXQncyBjcnVjaWFsIHRoYXQgSSB2ZXJpZnkgaWYgYW55dGhpbmcgZWxzZSBjYWxscywgb3IgcmVsaWVzIG9uLCBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCBvciBgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwYC4gSSBjYW4ndCBhZmZvcmQgdG8gbWlzcyBhbnkgc3VidGxlLCBpbmRpcmVjdCBjb25uZWN0aW9ucy4gVGhhdCdzIGEga2V5IHBhcnQgb2YgbXkgZHVlIGRpbGlnZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg0NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjM4LjE0NDc0NDEzMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyOTQ1NTU1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlX2djX2NsZWFudXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zMjM9dm9pZCBuZl9mbG93X3RhYmxlX2djX3J1bihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjMyNDp2b2lkIG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zMjUtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTcyOD1zdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzM4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzM5OnZvaWQgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc0MC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03NDc9dm9pZCBuZl9mbG93X3RhYmxlX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzUzLVxcdFxcdGlmIChuZXRfZXEocmVhZF9wbmV0KFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZW5ldCksIGRldl9uZXQoZGV2KSkpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NTQ6XFx0XFx0XFx0bmZfZmxvd190YWJsZV9nY19jbGVhbnVwKGZsb3d0YWJsZSwgZGV2KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc1NS1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEyMjU9c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9pbmRyX2NsZWFudXAoc3RydWN0IGZsb3dfYmxvY2tfY2IgKmJsb2NrX2NiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMjI5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTIzMDpcXHRuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoZmxvd3RhYmxlLCBkZXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTIzMS1cXHRkb3duX3dyaXRlKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWZsb3dfYmxvY2tfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjQwLjQ3NDIwNTQwN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjAzMTg2MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE5ldGZpbHRlciBGbG93IFRhYmxlIENsZWFudXAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBjbGVhbnVwIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIGBuZl9mbG93X3RhYmxlX2luZHJfY2xlYW51cGAuIEkgc2VlIHRoYXQgYG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldilgIGlzIGFsc28gY2FsbGVkIGZyb20gYG5mX2Zsb3dfdGFibGVfaW5kcl9jbGVhbnVwYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgbmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3d0YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBkZXYpYC4gVGhlIGtleSBvYnNlcnZhdGlvbiBoZXJlIGlzIHRoYXQgYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cGAgKm5vdyogYXZvaWRzIGNoZWNraW5nIGBuZXRfZXEobmZfY3RfbmV0KGZsb3ctXHUwMDNlY3QpLCBkZXZfbmV0KGRldikpYCBhbmQgaW5zdGVhZCBsZXZlcmFnZXMgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgYGZsb3d0YWJsZWAgYW5kIGBkZXZgIGFyZSB3aXRoaW4gdGhlIHNhbWUgbmV0d29yayBuYW1lc3BhY2Ugb3IgdGhhdCBkZXZpY2UgaW5kZXggbWF0Y2hpbmcgd2l0aGluIHRoZSBmbG93dGFibGUgaXMgZW5vdWdoLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBcIldvcnRoRnV6emluZ1wiIGNyaXRlcmlhLiBHaXZlbiB0aGUgY2hhbmdlcywgdGhlIHBhdGNoICpkb2VzKiBhbHRlciB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY2xlYW51cCBsb2dpYywgc3BlY2lmaWNhbGx5IGJ5IG9wdGltaXppbmcgdGhlIG5ldCBuYW1lc3BhY2UgZmlsdGVyaW5nIGF0IHRoZSBmbG93dGFibGUgbGlzdCBpdGVyYXRpb24gbGV2ZWwgYW5kIHNpbXBsaWZ5aW5nIGRldmljZSBtYXRjaGluZy4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZywgYW5kIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCB0aGUgdXN1YWwgbmV0d29yayBzb2NrZXQsIG5ldGxpbmssIGFuZCBuZnRhYmxlcyBpbnRlcmZhY2VzIGFjY2Vzc2libGUgaW4gc29tZXRoaW5nIGxpa2UgUUVNVSBvciBzeXprYWxsZXIuXG5cblRoZXJlZm9yZSwgXCJXb3J0aEZ1enppbmdcIiBpcyAqdHJ1ZSouXG5cbkknbGwgc2V0IHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXMgbmVlZGVkOlxuXG4qICAgYE5GX0ZMT1dfVEFCTEVgXG4qICAgYE5GX1RBQkxFU2BcbiogICBgTkZfQ09OTlRSQUNLYFxuKiAgIGBORVRGSUxURVJfSU5HUkVTU2BcbiogICBgTkZUX0ZMT1dfT0ZGTE9BRGBcblxuQW5kIHRoZSBmb2N1cyBzeW1ib2xzIGFyZTpcblxuKiAgIGBuZl9mbG93X3RhYmxlX2NsZWFudXBgXG4qICAgYG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cGBcbiogICBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwYFxuKiAgIGBmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50YFxuKiAgIGBuZl9mbG93X3RhYmxlX2ZyZWVgXG5cbkknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgZm9yIG90aGVyIHJlbGF0ZWQgc3ltYm9scyBvciBjb25maWdzLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgTkZUX0ZMT1dfT0ZGTE9BRGAgaXMgc3RyaWN0bHkgbmVjZXNzYXJ5LCBvciBpZiBgTkZfRkxPV19UQUJMRWAgYnkgaXRzZWxmIGlzIGVub3VnaC4gSSdsbCB0YWtlIGEgbG9vayBhdCBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDg6NDYuMDc3Mzk1MDAzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDY4OTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkZfRkxPV19UQUJMRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTM5PW9iai0kKENPTkZJR19ORlRfRldEX05FVERFVilcXHQrPSBuZnRfZndkX25ldGRldi5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0MS0jIGZsb3cgdGFibGUgaW5mcmFzdHJ1Y3R1cmVcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0MjpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRSlcXHQrPSBuZl9mbG93X3RhYmxlLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0My1uZl9mbG93X3RhYmxlLW9ianNcXHRcXHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcXFxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDUtXFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9vZmZsb2FkLm8gbmZfZmxvd190YWJsZV94ZHAub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ2Om5mX2Zsb3dfdGFibGUtJChDT05GSUdfTkZfRkxPV19UQUJMRV9QUk9DRlMpICs9IG5mX2Zsb3dfdGFibGVfcHJvY2ZzLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NzppZmVxICgkKENPTkZJR19ORl9GTE9XX1RBQkxFKSxtKVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ4LW5mX2Zsb3dfdGFibGUtJChDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUykgKz0gbmZfZmxvd190YWJsZV9icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ5OmVsc2UgaWZlcSAoJChDT05GSUdfTkZfRkxPV19UQUJMRSkseSlcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1MC1uZl9mbG93X3RhYmxlLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSBuZl9mbG93X3RhYmxlX2JwZi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNTE9ZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1Mi1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSArPSBuZl9mbG93X3RhYmxlX2luZXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9MTYyND12b2lkIG5mX2Nvbm50cmFja190Y3BfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTY1Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxNjU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTE2NTgtXFx0dG4tXFx1MDAzZW9mZmxvYWRfdGltZW91dCA9IDMwICogSFo7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYz0xOTU9dm9pZCBuZl9jb25udHJhY2tfdWRwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jLTIwMi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYzoyMDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMtMjA0LVxcdHVuLVxcdTAwM2VvZmZsb2FkX3RpbWVvdXQgPSAzMCAqIEhaO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTU4NT1lbnVtIG5mX2N0X3N5c2N0bF9pbmRleCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjA5LVxcdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9VTkFDSyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NjEwOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02MTEtXFx0TkZfU1lTQ1RMX0NUX1BST1RPX1RJTUVPVVRfVENQX09GRkxPQUQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjE4LVxcdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9TVFJFQU0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjYxOTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjIwLVxcdE5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9PRkZMT0FELFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTY0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy03ODYtXFx0fSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6Nzg3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy03ODgtXFx0W05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9PRkZMT0FEXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy04MzYtXFx0fSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6ODM3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy04MzgtXFx0W05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9PRkZMT0FEXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz05MzU9c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF90Y3Bfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05NjMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjk2NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtOTY1LVxcdHRhYmxlW05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1RDUF9PRkZMT0FEXS5kYXRhID0gXFx1MDAyNnRuLVxcdTAwM2VvZmZsb2FkX3RpbWVvdXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9MTAwMz1zdGF0aWMgaW50IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDMwLVxcdHRhYmxlW05GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX1VEUF9TVFJFQU1dLmRhdGEgPSBcXHUwMDI2dW4tXFx1MDAzZXRpbWVvdXRzW1VEUF9DVF9SRVBMSUVEXTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTAzMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTAzMi1cXHR0YWJsZVtORl9TWVNDVExfQ1RfUFJPVE9fVElNRU9VVF9VRFBfT0ZGTE9BRF0uZGF0YSA9IFxcdTAwMjZ1bi1cXHUwMDNlb2ZmbG9hZF90aW1lb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODo0ODo0Ni4xNTIwODk0NDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg3NDA2MjQzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHlvdXIgc3VtbWFyeTpcblxuKipUaGUgUGF0aCBGb3J3YXJkIGlzIERlZmluZWQqKlxuXG5Pa2F5LCB0aGUgcGF0aCBmb3J3YXJkIGlzIHBlcmZlY3RseSBjbGVhciwgYW5kIEkndmUgdmVyaWZpZWQgZXZlcnkgYXNwZWN0IG9mIHRoZSBzaXR1YXRpb24uIFRoZXJlIGFyZSBubyByZW1haW5pbmcgdW5jZXJ0YWludGllcyBvciBsb29zZSBlbmRzLiBCYXNlZCBvbiBteSBhc3Nlc3NtZW50LCBJIGNhbiBjb25maWRlbnRseSBkZWNsYXJlIHRoZSBuZXh0IGFjdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBpbml0aWF0ZSB0aGUgZnVuY3Rpb24sIG9yIHByb2Nlc3MsIHdoaWNoIEkgd2lsbCBkZXNpZ25hdGUgYHNldC1yZXN1bHRzYC4gV2l0aCB0aGF0LCB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbSB3aWxsIGJlIHJlc29sdmVkIGFuZCBldmVyeXRoaW5nIGlzIHNldCBpbiBtb3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzk3LCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjQ5LjAyNjE1MzkyOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzk3MzQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd190YWJsZV9jbGVhbnVwXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2djX2NsZWFudXBcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cFwiLFxuICAgIFwiZmxvd19vZmZsb2FkX25ldGRldl9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjbGVhbnVwIHBhdGggaW4gbmZfZmxvd190YWJsZV9jb3JlLmMgYnkgbW92aW5nIG5ldHdvcmsgbmFtZXNwYWNlIG1hdGNoaW5nIHRvIHRoZSBvdXRlciBmbG93dGFibGUgaXRlcmF0aW9uIGluIG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpIGFuZCBhZGp1c3RpbmcgcGVyLWZsb3cgZGV2aWNlIHRlYXJkb3duIGNvbmRpdGlvbnMgaW4gbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKCkuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGV4ZWN1dGVkIGR1cmluZyBuZXR3b3JrIGRldmljZSB0ZWFyZG93bi9ORVRERVZfRE9XTiBldmVudHMgd2l0aCBhY3RpdmUgbmZ0YWJsZXMgZmxvdyB0YWJsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd190YWJsZV9jbGVhbnVwXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2djX2NsZWFudXBcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cFwiLFxuICAgIFwiZmxvd19vZmZsb2FkX25ldGRldl9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjbGVhbnVwIHBhdGggaW4gbmZfZmxvd190YWJsZV9jb3JlLmMgYnkgbW92aW5nIG5ldHdvcmsgbmFtZXNwYWNlIG1hdGNoaW5nIHRvIHRoZSBvdXRlciBmbG93dGFibGUgaXRlcmF0aW9uIGluIG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpIGFuZCBhZGp1c3RpbmcgcGVyLWZsb3cgZGV2aWNlIHRlYXJkb3duIGNvbmRpdGlvbnMgaW4gbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKCkuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGV4ZWN1dGVkIGR1cmluZyBuZXR3b3JrIGRldmljZSB0ZWFyZG93bi9ORVRERVZfRE9XTiBldmVudHMgd2l0aCBhY3RpdmUgbmZ0YWJsZXMgZmxvdyB0YWJsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjQ5LjE1MDEzNjU1N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0OTY1NjkzODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwODo0ODo0OS4xNTA3NjAxODdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTQ5NTk0MDc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIG5ldHdvcmsgbmFtZXNwYWNlIGNoZWNraW5nIGR1cmluZyBuZXRkZXZpY2UgY2xlYW51cCBpbiB0aGUgbmV0ZmlsdGVyIGZsb3d0YWJsZSBzdWJzeXN0ZW0uIEl0IHNoaWZ0cyB0aGUgbmFtZXNwYWNlIG1hdGNoIGNoZWNrIGBuZXRfZXEocmVhZF9wbmV0KFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZW5ldCksIGRldl9uZXQoZGV2KSlgIHVwIHRvIGBuZl9mbG93X3RhYmxlX2NsZWFudXAoKWAgd2hlbiBpdGVyYXRpbmcgb3ZlciByZWdpc3RlcmVkIGZsb3d0YWJsZXMsIGFuZCByZW1vdmVzIHRoZSBwZXItZmxvdyBgbmV0X2VxKG5mX2N0X25ldChmbG93LVxcdTAwM2VjdCksIGRldl9uZXQoZGV2KSlgIGNoZWNrIGZyb20gYG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCgpYC5cXG5cXG5UaGlzIGNoYW5nZTpcXG4xLiBEb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBuZXcgc3RhY2svaGVhcCBtZW1vcnkgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxcbjIuIERvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSBvciBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuXFxuMy4gRG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbHRlciBidWZmZXIgYm91bmRzL2xlbmd0aHMuXFxuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8gb2JqZWN0IGxpZmV0aW1lcywgZGV2aWNlIGRlcmVmZXJlbmNlcywgb3IgbGlzdCBvcGVyYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOIC8gTE9DS0RFUCkuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZmIzMTZjMGFjYTE0MDYyZTk3NWE1MmI4Yzg5ZGRkYjM5YmU5OTQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwODo0Nzo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5pbmRleCAwMzI0MWQ0YmZkNWU4Li41MmNjYTdhOGYxNDFiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuQEAgLTczMCwxNCArNzMwLDkgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRhdGE7XG4gXG4tXHRpZiAoIWRldikge1xuLVx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdGlmIChuZXRfZXEobmZfY3RfbmV0KGZsb3ctXHUwMDNlY3QpLCBkZXZfbmV0KGRldikpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChmbG93LVx1MDAzZXR1cGxlaGFzaFswXS50dXBsZS5paWZpZHggPT0gZGV2LVx1MDAzZWlmaW5kZXggfHxcbi1cdCAgICAgZmxvdy1cdTAwM2V0dXBsZWhhc2hbMV0udHVwbGUuaWlmaWR4ID09IGRldi1cdTAwM2VpZmluZGV4KSlcbitcdGlmICghZGV2IHx8XG4rXHQgICAgZmxvdy1cdTAwM2V0dXBsZWhhc2hbMF0udHVwbGUuaWlmaWR4ID09IGRldi1cdTAwM2VpZmluZGV4IHx8XG4rXHQgICAgZmxvdy1cdTAwM2V0dXBsZWhhc2hbMV0udHVwbGUuaWlmaWR4ID09IGRldi1cdTAwM2VpZmluZGV4KVxuIFx0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4gfVxuIFxuQEAgLTc1NCw4ICs3NDksMTAgQEAgdm9pZCBuZl9mbG93X3RhYmxlX2NsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShmbG93dGFibGUsIFx1MDAyNmZsb3d0YWJsZXMsIGxpc3QpXG4tXHRcdG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldik7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb3d0YWJsZSwgXHUwMDI2Zmxvd3RhYmxlcywgbGlzdCkge1xuK1x0XHRpZiAobmV0X2VxKHJlYWRfcG5ldChcdTAwMjZmbG93dGFibGUtXHUwMDNlbmV0KSwgZGV2X25ldChkZXYpKSlcbitcdFx0XHRuZl9mbG93X3RhYmxlX2djX2NsZWFudXAoZmxvd3RhYmxlLCBkZXYpO1xuK1x0fVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ4OjQ5LjE1MDc2MTgyN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjA1MTM0NTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBGdXp6aW5nIFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gVGhlIHVzZXIgd2FudHMgbWUgdG8gYXNzZXNzIGEga2VybmVsIHBhdGNoIGFuZCBkZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRvIGJyaW5nIEtNU0FOIGludG8gdGhlIGZ1enppbmcgbWl4LCBvciBpZiBLQVNBTiBpcyBzdWZmaWNpZW50LiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGNvZGUgcmV2aWV3IHRhc2sgZm9yIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MsIGl0IGxvb2tzIGxpa2UgYSBiZW5pZ24gZGVmZW5zaXZlIGFjdGlvbi4gR29vZCwgc2FmZSB0byBwcm9jZWVkIHdpdGggdGhlIGV2YWx1YXRpb24uXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gVGhlIGRpZmYgaXMgcHJldHR5IHNtYWxsLCB0aGFua2Z1bGx5LiBJdCdzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jYC4gSG1tLCBsb29rcyBsaWtlIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgaXMgYmVpbmcgc2ltcGxpZmllZCBpbiBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwYC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgY2hlY2sgZm9yIGAhZGV2YCBhbmQgdGhlbiBhbm90aGVyIGNoZWNrLiBUaGUgcGF0Y2ggYXBwZWFycyB0byBiZSBtZXJnaW5nIHRoZSBjb25kaXRpb25zLiBJdCAqc2VlbXMqIGxpa2UgdGhpcyBpcyBqdXN0IHNpbXBsaWZ5aW5nIHRoZSBjb2RlLCBtYWtpbmcgdGhlIGxvZ2ljIGEgYml0IG1vcmUgY29uY2lzZS4gSSBzZWUgYGZsb3dfb2ZmbG9hZF90ZWFyZG93bmAgYmVpbmcgY2FsbGVkIGNvbmRpdGlvbmFsbHkgYmFzZWQgb24gdGhlIGBkZXZgIHBhcmFtZXRlciBhbmQgc29tZSBjaGVja3MgcmVsYXRlZCB0byBgaWlmaWR4YCBhbmQgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIChgbmV0X2VxYCkuIFRoZSBzZWNvbmQgY2hhbmdlIGludm9sdmVzIGEgY2hlY2sgZm9yIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBlcXVhbGl0eSBvZiB0aGUgYGZsb3d0YWJsZWAuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgcmlza3MgYW5kIHdoZXRoZXIgS01TQU4gaXMgbmVlZGVkLCBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gb2YgYG5mX2Zsb3dfdGFibGVfY29yZS5jYCBhbmQgaG93IGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXBgIGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbSwgYW5kIGhvdyB0aGUgY2hhbmdlcyBtYXkgaW50ZXJhY3Qgd2l0aCBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkuIEknbGwgbmVlZCB0byB1c2UgbXkgZ3JlcHBpbmcgc2tpbGxzLCBvciBwdWxsIHVwIHRoZSBmaWxlJ3MgY29udGV4dCwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZWZmZWN0cyBvZiB0aGVzZSBjaGFuZ2VzLiBJbiB0aGUgbWVhbnRpbWUsIGJhc2VkIG9uIHRoZSBwYXRjaCdzIGltbWVkaWF0ZSBjb250ZW50LCBpdCBkb2Vzbid0IGltbWVkaWF0ZWx5IHNjcmVhbSBcIktNU0FOIG5lZWRlZCxcIiBidXQgYSBtb3JlIHRob3JvdWdoIGFuYWx5c2lzIGlzIGFsd2F5cyBpbiBvcmRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ5OjAxLjIwMjExMjg2NloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MjA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xcbiA3MjE6XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlbGlzdCwgXFx1MDAyNmZsb3d0YWJsZXMpO1xcbiA3MjI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmbG93dGFibGVfbG9jayk7XFxuIDcyMzpcXHRcXG4gNzI0OlxcdFxcdHJldHVybiAwO1xcbiA3MjU6XFx0fVxcbiA3MjY6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9pbml0KTtcXG4gNzI3OlxcdFxcbiA3Mjg6XFx0c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuIDcyOTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXFxuIDczMDpcXHR7XFxuIDczMTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGF0YTtcXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0aWYgKCFkZXYgfHxcXG4gNzM0OlxcdFxcdCAgICBmbG93LVxcdTAwM2V0dXBsZWhhc2hbMF0udHVwbGUuaWlmaWR4ID09IGRldi1cXHUwMDNlaWZpbmRleCB8fFxcbiA3MzU6XFx0XFx0ICAgIGZsb3ctXFx1MDAzZXR1cGxlaGFzaFsxXS50dXBsZS5paWZpZHggPT0gZGV2LVxcdTAwM2VpZmluZGV4KVxcbiA3MzY6XFx0XFx0XFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xcbiA3Mzc6XFx0fVxcbiA3Mzg6XFx0XFxuIDczOTpcXHR2b2lkIG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuIDc0MDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA3NDE6XFx0e1xcbiA3NDI6XFx0XFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3d0YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBkZXYpO1xcbiA3NDM6XFx0XFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWdjX3dvcmspO1xcbiA3NDQ6XFx0XFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoKGZsb3d0YWJsZSk7XFxuIDc0NTpcXHR9XFxuIDc0NjpcXHRcXG4gNzQ3OlxcdHZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDc0ODpcXHR7XFxuIDc0OTpcXHRcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGU7XFxuIDc1MDpcXHRcXG4gNzUxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG4gNzUyOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZmxvd3RhYmxlLCBcXHUwMDI2Zmxvd3RhYmxlcywgbGlzdCkge1xcbiA3NTM6XFx0XFx0XFx0aWYgKG5ldF9lcShyZWFkX3BuZXQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlbmV0KSwgZGV2X25ldChkZXYpKSlcXG4gNzU0OlxcdFxcdFxcdFxcdG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChmbG93dGFibGUsIGRldik7XFxuIDc1NTpcXHRcXHR9XFxuIDc1NjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG4gNzU3OlxcdH1cXG4gNzU4OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfY2xlYW51cCk7XFxuIDc1OTpcXHRcXG4gNzYwOlxcdHZvaWQgbmZfZmxvd190YWJsZV9mcmVlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXFxuIDc2MTpcXHR7XFxuIDc2MjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZmbG93dGFibGVfbG9jayk7XFxuIDc2MzpcXHRcXHRsaXN0X2RlbChcXHUwMDI2Zmxvd190YWJsZS1cXHUwMDNlbGlzdCk7XFxuIDc2NDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG4gNzY1OlxcdFxcbiA3NjY6XFx0XFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VnY193b3JrKTtcXG4gNzY3OlxcdFxcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaChmbG93X3RhYmxlKTtcXG4gNzY4OlxcdFxcdC8qIC4uLiBubyBtb3JlIHBlbmRpbmcgd29yayBhZnRlciB0aGlzIHN0YWdlIC4uLiAqL1xcbiA3Njk6XFx0XFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCwgTlVMTCk7XFxuIDc3MDpcXHRcXHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93X3RhYmxlKTtcXG4gNzcxOlxcdFxcdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKGZsb3dfdGFibGUpO1xcbiA3NzI6XFx0XFx0cmhhc2h0YWJsZV9kZXN0cm95KFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VyaGFzaHRhYmxlKTtcXG4gNzczOlxcdH1cXG4gNzc0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfZnJlZSk7XFxuIDc3NTpcXHRcXG4gNzc2OlxcdHN0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuIDc3NzpcXHR7XFxuIDc3ODpcXHRcXHRuZXQtXFx1MDAzZWZ0LnN0YXQgPSBhbGxvY19wZXJjcHUoc3RydWN0IG5mX2Zsb3dfdGFibGVfc3RhdCk7XFxuIDc3OTpcXHRcXHRyZXR1cm4gbmV0LVxcdTAwM2VmdC5zdGF0ID8gMCA6IC1FTk9NRU07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA4OjQ5OjAxLjIwMjI3MjYwNloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDQ0NDAzMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IEZsb3d0YWJsZSBDbGVhbnVwIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB0aGlzIHBhdGNoIGlzIG9wdGltaXppbmcgdGhlIGZsb3cgdGFibGUgY2xlYW51cCBwcm9jZXNzIHJlbGF0ZWQgdG8gbmV0d29yayBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHVucmVnaXN0cmF0aW9uLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSBpbiBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCB3YXMgaXRlcmF0aW5nIHRocm91Z2ggYWxsIGBmbG93dGFibGVzYCBhbmQgdGhlbiBjYWxsaW5nIGBuZl9mbG93X3RhYmxlX2djX2NsZWFudXBgLCB3aGljaCBpbiB0dXJuIGNoZWNrZWQgaWYgdGhlIGZsb3dzIGJlbG9uZ2VkIHRvIHRoZSBzYW1lIG5ldHdvcmsgbmFtZXNwYWNlIChgbmV0bnNgKSBhcyB0aGUgZGV2aWNlIGJlaW5nIHVucmVnaXN0ZXJlZC4gVGhhdCBjaGVjayAoYG5ldF9lcShuZl9jdF9uZXQoZmxvdy1cdTAwM2VjdCksIGRldl9uZXQoZGV2KSlgKSB3YXMgaW5zaWRlIHRoZSBmbG93LWxldmVsIGNhbGxiYWNrLlxuXG5Ob3csIHdpdGggdGhpcyBwYXRjaCwgdGhlIG5ldG5zIGNoZWNrIGlzIG1vdmVkICp1cCogdG8gdGhlIGZsb3d0YWJsZSBsZXZlbCBpdHNlbGYuIFNvLCBgbmZfZmxvd190YWJsZV9jbGVhbnVwYCBmaXJzdCBjaGVja3MgYGlmIChuZXRfZXEocmVhZF9wbmV0KFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VuZXQpLCBkZXZfbmV0KGRldikpKWAgYmVmb3JlIGV2ZW4gY2FsbGluZyB0aGUgY2xlYW51cCBmdW5jdGlvbiBmb3IgdGhlIGZsb3dzIHdpdGhpbiB0aGF0IHRhYmxlLiBDb25zZXF1ZW50bHksIHRoZSByZWR1bmRhbnQgY2hlY2sgd2l0aGluIGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXBgIGlzIHJlbW92ZWQsIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlmIHRoZSBmbG93dGFibGUgaXMgYWxyZWFkeSBzY29wZWQgdG8gdGhlIGNvcnJlY3QgbmV0bnMuXG5cbk15IGtleSBjb25jZXJuIGlzIGFsd2F5cyBhcm91bmQgbWVtb3J5IHNhZmV0eS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBuZXcgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBJJ3ZlIGNvbnNpZGVyZWQ6XG5cbiogICAqKk1lbW9yeSBBbGxvY2F0aW9uczoqKiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guXG4qICAgKipVc2VyLVNwYWNlIEludGVyYWN0aW9uOioqIEl0IGRvZXNuJ3QgaW52b2x2ZSBhbnkga2VybmVsLXRvLXVzZXIgY29waWVzIChsaWtlIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBldGMuKS4gTm8gaW5mb3JtYXRpb24gaXMgYmVpbmcgbGVha2VkIHRvIHVzZXIgc3BhY2UgYmVjYXVzZSBvZiB0aGlzLlxuKiAgICoqVW5pbml0aWFsaXplZCBGaWVsZHM6KiogTm8gbmV3IG9yIGV4aXN0aW5nIHN0cnVjdHVyZSBmaWVsZHMgYXJlIGJlaW5nIGFjY2Vzc2VkIG9yIGNyZWF0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIGJlaW5nIGJyYW5jaGVkIG9uIG9yIHVzZWQgdG8gY2FsY3VsYXRlIGxlbmd0aHMuXG4qICAgKipPcHRpbWl6YXRpb24gb25seToqKiBUaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gb3B0aW1pemF0aW9uIHRoYXQgZWxpbWluYXRlcyBhbiB1bm5lY2Vzc2FyeSBuZXR3b3JrIG5hbWVzcGFjZSBjaGVjay5cblxuR2l2ZW4gdGhlIGNyaXRlcmlhLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBvcHRpbWl6YXRpb24gZG9lcyAqbm90KiBpbnRyb2R1Y2UgS01TQU4tcmVsZXZhbnQgaXNzdWVzLiBUaGUgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgcmlza3MgaGVyZSB3b3VsZCBiZSB0eXBpY2FsIG9mIHRoaXMgdHlwZSBvZiBjb2RlOiBVc2UtQWZ0ZXItRnJlZSAoVUFGKSwgcmVmZXJlbmNlIGNvdW50aW5nIHByb2JsZW1zLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsaXN0IHRyYXZlcnNhbCBpc3N1ZXMuIFRoZXNlIGFyZSBhbGwgdGhlIGtpbmQgb2YgYnVncyB0aGF0IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBkZXNpZ25lZCB0byBkZXRlY3QuXG5cblNpbmNlIHRoZSBwYXRjaCBkb2Vzbid0IG1lZXQgYW55IG9mIHRoZSBLTVNBTiB0cmlnZ2VycyDigJMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIG5vIHVzZXItc3BhY2UgY29waWVzLCBubyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEg4oCTIE5lZWRzS01TQU4gc2hvdWxkIGJlIHNldCB0byAqZmFsc2UqLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTgsIk91dHB1dFRva2VucyI6MjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDg6NDk6MDguNjQ2Njc5MTM1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgbmV0d29yayBuYW1lc3BhY2UgY2hlY2tpbmcgZHVyaW5nIG5ldGRldmljZSBjbGVhbnVwIGluIHRoZSBuZXRmaWx0ZXIgZmxvd3RhYmxlIHN1YnN5c3RlbS4gSXQgc2hpZnRzIHRoZSBuYW1lc3BhY2UgbWF0Y2ggY2hlY2sgYG5ldF9lcShyZWFkX3BuZXQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlbmV0KSwgZGV2X25ldChkZXYpKWAgdXAgdG8gYG5mX2Zsb3dfdGFibGVfY2xlYW51cCgpYCB3aGVuIGl0ZXJhdGluZyBvdmVyIHJlZ2lzdGVyZWQgZmxvd3RhYmxlcywgYW5kIHJlbW92ZXMgdGhlIHBlci1mbG93IGBuZXRfZXEobmZfY3RfbmV0KGZsb3ctXFx1MDAzZWN0KSwgZGV2X25ldChkZXYpKWAgY2hlY2sgZnJvbSBgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwKClgLlxcblxcblRoaXMgY2hhbmdlOlxcbjEuIERvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IG5ldyBzdGFjay9oZWFwIG1lbW9yeSBvciBkYXRhIHN0cnVjdHVyZXMuXFxuMi4gRG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS5cXG4zLiBEb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMvbGVuZ3Rocy5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgZGVyZWZlcmVuY2VzLCBvciBsaXN0IG9wZXJhdGlvbnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4gLyBMT0NLREVQKS4gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBuZXR3b3JrIG5hbWVzcGFjZSBjaGVja2luZyBkdXJpbmcgbmV0ZGV2aWNlIGNsZWFudXAgaW4gdGhlIG5ldGZpbHRlciBmbG93dGFibGUgc3Vic3lzdGVtLiBJdCBzaGlmdHMgdGhlIG5hbWVzcGFjZSBtYXRjaCBjaGVjayBgbmV0X2VxKHJlYWRfcG5ldChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VuZXQpLCBkZXZfbmV0KGRldikpYCB1cCB0byBgbmZfZmxvd190YWJsZV9jbGVhbnVwKClgIHdoZW4gaXRlcmF0aW5nIG92ZXIgcmVnaXN0ZXJlZCBmbG93dGFibGVzLCBhbmQgcmVtb3ZlcyB0aGUgcGVyLWZsb3cgYG5ldF9lcShuZl9jdF9uZXQoZmxvdy1cXHUwMDNlY3QpLCBkZXZfbmV0KGRldikpYCBjaGVjayBmcm9tIGBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAoKWAuXFxuXFxuVGhpcyBjaGFuZ2U6XFxuMS4gRG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBhbnkgbmV3IHN0YWNrL2hlYXAgbWVtb3J5IG9yIGRhdGEgc3RydWN0dXJlcy5cXG4yLiBEb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLlxcbjMuIERvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy9sZW5ndGhzLlxcblxcbkFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIG9iamVjdCBsaWZldGltZXMsIGRldmljZSBkZXJlZmVyZW5jZXMsIG9yIGxpc3Qgb3BlcmF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiAvIExPQ0tERVApLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjb2jh[1] Phase: Succeeded StartedAt: 2026-09-09 08:49:17 +0000 UTC FinishedAt: 2026-09-09 08:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 08:49:17 +0000 UTC FinishedAt: 2026-09-09 08:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2] Phase: Succeeded StartedAt: 2026-09-09 08:49:17 +0000 UTC FinishedAt: 2026-09-09 12:34:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 08:49:17 +0000 UTC FinishedAt: 2026-09-09 12:34:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 08:49:17 +0000 UTC FinishedAt: 2026-09-09 08:49:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 08:49:17 +0000 UTC FinishedAt: 2026-09-09 08:49:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjb2jh/series-workflowjb2jh-convert-artifact-2446149648/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 08:49:37 +0000 UTC FinishedAt: 2026-09-09 09:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 08:49:37 +0000 UTC FinishedAt: 2026-09-09 09:08:42 +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:*38ad4d57-676c-4080-b2d0-761cc0f017f9,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-workflowjb2jh/series-workflowjb2jh-convert-artifact-2446149648/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": "4d3800cf-b391-4692-af90-2e58a590742c", "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-workflowjb2jh/series-workflowjb2jh-build-action-2289460374/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 08:49:37 +0000 UTC FinishedAt: 2026-09-09 09:08:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*38ad4d57-676c-4080-b2d0-761cc0f017f9,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-workflowjb2jh/series-workflowjb2jh-convert-artifact-2446149648/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": "4d3800cf-b391-4692-af90-2e58a590742c", "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-workflowjb2jh/series-workflowjb2jh-build-action-2289460374/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 09:08:42 +0000 UTC FinishedAt: 2026-09-09 09:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 09:08:42 +0000 UTC FinishedAt: 2026-09-09 09:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 09:08:42 +0000 UTC FinishedAt: 2026-09-09 09:09:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 09:08:42 +0000 UTC FinishedAt: 2026-09-09 09:08:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjb2jh/series-workflowjb2jh-convert-artifact-1394001015/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 09:09:03 +0000 UTC FinishedAt: 2026-09-09 09:11:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 09:09:03 +0000 UTC FinishedAt: 2026-09-09 09:10:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4d3800cf-b391-4692-af90-2e58a590742c,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-workflowjb2jh/series-workflowjb2jh-build-action-2289460374/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-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 09:11:06 +0000 UTC FinishedAt: 2026-09-09 09:11:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 09:11:06 +0000 UTC FinishedAt: 2026-09-09 09:11:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 09:11:06 +0000 UTC FinishedAt: 2026-09-09 09:29:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 09:11:06 +0000 UTC FinishedAt: 2026-09-09 09:29:27 +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:*38ad4d57-676c-4080-b2d0-761cc0f017f9,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-workflowjb2jh/series-workflowjb2jh-convert-artifact-1394001015/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": "f7d0d2e4-b326-4a01-a422-54f95471463f", "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-workflowjb2jh/series-workflowjb2jh-build-action-580884283/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 09:11:06 +0000 UTC FinishedAt: 2026-09-09 09:29:17 +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:*38ad4d57-676c-4080-b2d0-761cc0f017f9,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-workflowjb2jh/series-workflowjb2jh-convert-artifact-1394001015/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": "f7d0d2e4-b326-4a01-a422-54f95471463f", "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-workflowjb2jh/series-workflowjb2jh-build-action-580884283/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 09:29:27 +0000 UTC FinishedAt: 2026-09-09 09:29:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 09:29:27 +0000 UTC FinishedAt: 2026-09-09 09:29:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 09:29:27 +0000 UTC FinishedAt: 2026-09-09 09:31:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 09:29:27 +0000 UTC FinishedAt: 2026-09-09 09:31:22 +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:*f7d0d2e4-b326-4a01-a422-54f95471463f,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-workflowjb2jh/series-workflowjb2jh-build-action-580884283/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-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 09:31:32 +0000 UTC FinishedAt: 2026-09-09 12:34:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 09:31:32 +0000 UTC FinishedAt: 2026-09-09 12:34:06 +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":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"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:*4d3800cf-b391-4692-af90-2e58a590742c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f7d0d2e4-b326-4a01-a422-54f95471463f,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-workflowjb2jh/series-workflowjb2jh-build-action-2289460374/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-workflowjb2jh/series-workflowjb2jh-build-action-580884283/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 09:31:32 +0000 UTC FinishedAt: 2026-09-09 09:31:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 09:31:32 +0000 UTC FinishedAt: 2026-09-09 09:31:38 +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":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"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-workflowjb2jh/series-workflowjb2jh-convert-artifact-523278256/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 09:31:32 +0000 UTC FinishedAt: 2026-09-09 09:31:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 09:31:32 +0000 UTC FinishedAt: 2026-09-09 09:31:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 09:31:32 +0000 UTC FinishedAt: 2026-09-09 09:31:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 09:31:43 +0000 UTC FinishedAt: 2026-09-09 12:34:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjb2jh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_cleanup","nf_flow_table_gc_cleanup","nf_flow_table_do_cleanup","flow_offload_netdev_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NF_TABLES","NF_CONNTRACK","NETFILTER_INGRESS","NFT_FLOW_OFFLOAD"],"series_id":"534cbfa0-765b-4445-95c9-291ca3088593","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 09:31:43 +0000 UTC FinishedAt: 2026-09-09 12:33:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4d3800cf-b391-4692-af90-2e58a590742c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f7d0d2e4-b326-4a01-a422-54f95471463f,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-workflowjb2jh/series-workflowjb2jh-build-action-2289460374/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-workflowjb2jh/series-workflowjb2jh-build-action-580884283/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-workflowjb2jh/series-workflowjb2jh-convert-artifact-523278256/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,}